1

为什么 Matlab 可以这样求解以下方程组:

eq1 = 'x1+x2+x4=1';
eq2 = 'x3+x4 = 2';
eq3 = '2*x1+3*x2+1*x3+4*x4=3';
eq4 = '3*x1+4*x2+2*x3+6*x4=p';
[p a b c d] = solve(eq1,eq2,eq3,eq4,p,x1,x2,x3,x4);

但如果我使用下面的代码?

A = sym([1 1 0 1; 0 0 1 1; 2 3 1 4; 3 4 2 6]);
x = [x1 x2 x3 x4].';
b = sym([1 2 3 p].');
[p a b c d] = solve(A(1,:)*x==b(1),A(2,:)*x==b(2),A(3,:)*x==b(3),A(4,:)*x==b(4),p,x)

第一件事给出了 p 的值,以及 x1 到 x4 的值,而第二件事没有找到任何解决方案。

感谢您的回答!

4

1 回答 1

2

在 R2012b 中,这些都不起作用。一个人获得警告,如果有的话,只有参数化的解决方案。您应该检查您输入的内容。

为什么?首先,rank(A)返回三,这意味着您的四维系统没有四个独立方程。其次,即使你有四个方程,你也在尝试解决五个未知数(p以及)。您可能需要另一个约束。另请注意,您调用的输出会solve覆盖您的符号变量p

如果您正在尝试解决符号方程组,请不要使用solve,请查看linsolve. 或者,您可以使用非全等级系统解决其中的p一个子集:x

x = sym('x',[4 1]);
syms p;
A = sym([1 1 0 1; 0 0 1 1; 2 3 1 4; 3 4 2 6]);
b = sym([1 2 3 p].');
[p_ x1 x2 x3] = solve(A*x==b,p,x(1),x(2),x(3)) % results will be function of x4
于 2013-08-02T16:25:19.407 回答