首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么solve()抛出此结果为空sym: 0-by-1并且无法获得正确的结果

为什么solve()抛出此结果为空sym: 0-by-1并且无法获得正确的结果
EN

Stack Overflow用户
提问于 2020-06-23 13:57:32
回答 1查看 1.8K关注 0票数 1

看一下这个脚本

代码语言:javascript
运行
复制
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)

这将产生以下结果:

代码语言:javascript
运行
复制
ans =
Empty sym: 0-by-1
ans =
Empty sym: 0-by-1
ans =
Empty sym: 0-by-1

而是使用以下脚本:

代码语言:javascript
运行
复制
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)

正确的结果如下所示:

代码语言:javascript
运行
复制
ans =
32.0
ans =
-25.6
ans =
62.4

导致这种不一致的结算差异是什么?我的Matlab版本是2019。

EN

回答 1

Stack Overflow用户

发布于 2020-06-23 14:49:47

问题出在线路上

代码语言:javascript
运行
复制
eqns = [5*v1 -2*v2  -3*v3 == 24, ...
        4*v1 +5*v2        ==  0, ...
       -6*v1 +12*v2 +8*v3 ==  0];

如果您执行此行,然后在控制台中输入eqns,您将获得:

代码语言:javascript
运行
复制
>> eqns
eqns =
[ 5*v1, -2*v2, -3*v3 == 24, 4*v1, 5*v2 == 0, -6*v1, 12*v2, 8*v3 == 0]

这就是说8个方程而不是3个。这就是为什么找不到解的原因。如果您添加一些空格,问题就会消失。奇怪的行为,它看起来像序列空间->加号/减号->数字被理解为一个新的等式。因此,

代码语言:javascript
运行
复制
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)

将返回正确答案:

代码语言:javascript
运行
复制
ans =
32.0
ans =
-25.6
ans =
62.4
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62528237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档