用未知数量的Matlab sym变量求解方程

时间:2015-12-28 15:17:02

标签: matlab symbolic-math

我正在编写Matlab代码来解决具有未知数量的sym变量的方程式。用户提供的变量数。以下是三个sym变量的代码,但代码会产生错误。

clc;
clear
format long;
m=3;
mv = sym(zeros(m, 1));
for k=1:m
    mv(k,1) = sym(sprintf('m%d', k));
end
display(mv)
A=[  1.000   2.000   3.000     
 2.000  -2.000  -3.000     
  3.000   -3.000   7.000    
];
B=[1;0;5];
w=A*mv-B
s=solve(w==0)
F=s.mv;
display(F)

这与使用solve解决一个简单的等式没有区别。

1 个答案:

答案 0 :(得分:2)

你不应该使用solve来解决这样的线性问题。 sym/linsolve将是一个更好的选择,不需要创建其他变量,并将解决方案作为向量返回:

A = sym([1.000   2.000   3.000     
         2.000  -2.000  -3.000     
         3.000  -3.000   7.000    
        ]);
B = sym([1;0;5]);
s = linsolve(A,B)

返回

s =

    1/3
 -22/69
  10/23

请注意,如果您未明确将A和/或B转换为符号数组,则会使用linsolve的数字版本,并且将返回解决方案浮点。

如果您确实想使用solve,则无需使用for循环,因为可以使用sym的简单调用:

m = 3;
mv = sym('m',[m 1])
A = sym([1.000   2.000   3.000     
         2.000  -2.000  -3.000     
         3.000  -3.000   7.000    
        ]);
B = sym([1;0;5]);
w = A*mv-B;
s = struct2cell(solve(w==0))
s = [s{:}].'

在这两种情况下,您都可以使用vpa和/或double将解决方案转换为数字格式。