Matlab方程组求解器返回错误答案

时间:2019-02-10 20:13:29

标签: matlab

目前尚不清楚方程求解器的工作方式。我查看了文档,并尝试对其进行复制以获取物理问题的解决方案,但答案不正确。

我要解决的问题是静电物理问题。 F1和F3是在第一个象限中指向右上方的向量。 45度表示从x轴到F1的角度,而g表示从x轴到F3的角度。 F2是在第三象限中指向左下方的向量。 45度还表示从x轴到F2的角度。

问题是找到F3和g的值以使系统稳定。

得到不正确的答案后,我检查了一下matlab的答案是否只是可以解决该问题的其他答案,但在检查后仍然无效。

theta = 45;
F1 = 8;
F2 = 16;

syms F3 g;
eq1 = F1*cosd(theta) + F3*cosd(g) == F2*cosd(theta);
eq1 = F1*sind(theta) + F3*sind(g) == F2*sind(theta);

sol = solve([eq1,eq2],[F3,g]);
double(sol.F3)
double(sol.g)

输出为F3 = 45且g = -135

答案应为F3 = 8和g = 45度。

我确信我使用的方程式是正确的,因为当我将它们放入desmos并绘制图形时,我得到了正确的答案。所以问题肯定出在脚本中我的语法上。

1 个答案:

答案 0 :(得分:2)

此处有错字:

syms F3 g;
eq1 = F1*cosd(theta) + F3*cosd(g) == F2*cosd(theta);
eq1 = F1*sind(theta) + F3*sind(g) == F2*sind(theta); % HERE

第二个等式应为eq2,而不是eq1eq2可能是从以前的计算中缓存的,而您使用了它。

现在运行它,我得到:

>> double(sol.F3)

ans =

     8
    -8

>> double(sol.g)

ans =

    45
  -135

您可以舍弃负面解决方案,因为它们在物理上没有意义,因此您确实可以按照期望得到8和45。

建议语

在开始任何工作之前,请在您的MATLAB脚本中使用clearvars。这样可以防止出现诸如上述的缓存问题。