我正在编写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
解决一个简单的等式没有区别。
答案 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
将解决方案转换为数字格式。