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