2016-04-01 7 views
2

添付ファイルをご覧ください。私はMathematica Solve関数を使って、物理からいくつかの簡単な方程式を解いています。方程式の1つは、条件が満たされたときに関数の値を定義するIf関数です。 Solveは、それ自体がConditionalExpressionであるほぼ正しい解を見つけます。独立変数θ= 90°の場合、Solveによる解答は誤りです。 Solveは、Cosが0に等しい場合を忘れているようです。なぜですか?ありがとう。本当の問題が解決するようシータを指定Mathematica Solve関数が間違った解を与える理由は何ですか?

よろしく/ミカエル Friction Model

+0

本質的に、入力における浮動小数点値の束を用いた記号演算「Solve」を避けるべきです。 'W、u'を指定せずにこれを試し、' Solve'の代わりに 'Reduce'を使用してください。 – agentp

答えて

2

w = 1500; 
mus = 0.4; 
fv = f Cos[theta Degree]; 
fh = f Sin[theta Degree]; 
fn = fv + w; 
ff = If[mus fn >= 0, mus fn, 0]; 
frul = [email protected][fh == ff, f, Reals]; 
f /. frul /. theta -> 90. 

{600}

f /. frul /. theta -> 90 

{不定}ラジアンで再び同じ

、。

w = 1500; 
mus = 0.4; 
fv = f Cos[theta]; 
fh = f Sin[theta]; 
fn = fv + w; 
ff = If[mus fn >= 0, mus fn, 0]; 
frul = [email protected][fh == ff, f, Reals]; 
f /. frul /. theta -> N[Pi/2] 

{600}

f /. frul /. theta -> Pi/2 

{不定}

1

感謝クリス。

はい、実数を入力すると正解になります。これは、Cos [90.0°]が6.123233995736766E-17でCos [90°]が0であるためです。解は同じですが、有限の機械精度で解いています。

私に尋ねると、これはMathematicaの方程式ソルバのバグだと言えます。 Solve []に​​よって生成された解は、Cos []> = 0をテストする必要があります.Cos []> 0の場合、Cos [90°]に当てはまりません。

関連する問題