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

Matlab方程组解算器返回错误答案,matlab,Matlab,目前还不清楚方程组求解器是如何工作的。我看了一下文档,试图复制它来解决一个物理问题,但得到了错误的答案 我想解决的问题是一个静力学物理问题。F1和F3是在第一象限中向上和向右指向的向量。45度表示从x轴到F1的角度,g表示从x轴到F3的角度。 F2是第三象限中向左向下的向量。45度也表示从x轴到F2的角度 问题是找到F3和g的值,使系统稳定 在得到错误的答案后,我检查matlab的答案是否只是解决系统问题的另一个答案,但检查后发现它不起作用 theta = 45; F1 = 8; F2 = 16

目前还不清楚方程组求解器是如何工作的。我看了一下文档,试图复制它来解决一个物理问题,但得到了错误的答案

我想解决的问题是一个静力学物理问题。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中并绘制它们时,我得到了正确的答案。所以问题一定是我在脚本中的语法。

这里输入错误:

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
,而不是
eq1
eq2
可能是从以前的计算中缓存的,您使用了它

现在运行此命令,我得到:

>> double(sol.F3)

ans =

     8
    -8

>> double(sol.g)

ans =

    45
  -135
你可以放弃消极的解决方案,因为它们在物理上没有意义,所以你确实可以按照你的期望得到8和45

忠告
在开始任何工作之前,请在MATLAB脚本中使用。它可以防止上述缓存问题。

为什么应该在简单清除上使用clearvars?@user2305193,使用
clear
这是
clear all
的别名,不应该仅用于清除工作区变量。它还清除函数和脚本。使用
clear all
会导致MATLAB编译以前缓存的代码,并会降低性能。此外,如果您使用MATLAB编辑器编写MATLAB代码,则最新版本的MATLAB会给您一个M-Lint警告,建议您不要使用
清除所有
清除