看一下这个脚本
syms v1 v2 v3
eqns = [5*v1 -2*v2 -3*v3 == 24, ...
4*v1 +5*v2 == 0, ...
-6*v1 +12*v2 +8*v3 == 0];
vars = [v1 v2 v3];
answer = solve(eqns,vars);
vpa(answer.v1)
vpa(answer.v2)
vpa(answer.v3)
这将产生以下结果:
ans =
Empty sym: 0-by-1
ans =
Empty sym: 0-by-1
ans =
Empty sym: 0-by-1
而是使用以下脚本:
syms v1 v2 v3
eqn1 = 5*v1 -2*v2 -3*v3 == 24;
eqn2 = 4*v1 +5*v2 == 0;
eqn3 = -6*v1 +12*v2 +8*v3 == 0;
eqns = [eqn1,eqn2,eqn3];
vars = [v1 v2 v3];
answer = solve(eqns, vars);
vpa(answer.v1)
vpa(answer.v2)
vpa(answer.v3)
正确的结果如下所示:
ans =
32.0
ans =
-25.6
ans =
62.4
导致这种不一致的结算差异是什么?我的Matlab版本是2019。
发布于 2020-06-23 14:49:47
问题出在线路上
eqns = [5*v1 -2*v2 -3*v3 == 24, ...
4*v1 +5*v2 == 0, ...
-6*v1 +12*v2 +8*v3 == 0];
如果您执行此行,然后在控制台中输入eqns,您将获得:
>> eqns
eqns =
[ 5*v1, -2*v2, -3*v3 == 24, 4*v1, 5*v2 == 0, -6*v1, 12*v2, 8*v3 == 0]
这就是说8个方程而不是3个。这就是为什么找不到解的原因。如果您添加一些空格,问题就会消失。奇怪的行为,它看起来像序列空间->加号/减号->数字被理解为一个新的等式。因此,
syms v1 v2 v3
eqns = [5*v1 - 2*v2 - 3*v3 == 24,...
4*v1 + 5*v2 == 0,...
-6*v1 + 12*v2 + 8*v3 == 0];
vars = [v1 v2 v3];
answer = solve(eqns);
vpa(answer.v1)
vpa(answer.v2)
vpa(answer.v3)
将返回正确答案:
ans =
32.0
ans =
-25.6
ans =
62.4
https://stackoverflow.com/questions/62528237
复制相似问题