Mathematica Solve函数给出了错误的解决方案,为什么?

时间:2016-04-01 06:28:36

标签: wolfram-mathematica

请查看附件。我正在使用Mathematica Solve函数来解决物理学中的一些简单方程。其中一个等式是If函数,它在满足条件时定义函数值。 Solve找到几乎正确的解决方案,它本身就是ConditionalExpression。对于自变量θ= 90°,Solve给出的答案是错误的。当Cos等于0时,似乎Solve忘记了这种情况。为什么?感谢。

此致/的Mikael Friction Model

2 个答案:

答案 0 :(得分:2)

将theta指定为真实解决问题。

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 = Quiet@Solve[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 = Quiet@Solve[fh == ff, f, Reals];
f /. frul /. theta -> N[Pi/2]
  

{600}

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

{未定义}

答案 1 :(得分:1)

非常感谢克里斯。

是的,给它真实的数字会产生正确的答案。这是因为Cos [90.0°]是6.123233995736766E-17而Cos [90°]是0.解决方案是相同的但是我们用有限的机器精度来欺骗它。

如果我问我,我会说这是Mathematica中方程求解器中的一个错误。 Solve []产生的解决方案应该测试Cos []> = 0.现在它测试Cos []> 0对于Cos [90°]不适用。