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

Solve equation with unknown number of Matlab sym variables

我正在编写 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.

求解简单方程式没有什么不同

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

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)

returns

s =

    1/3
 -22/69
  10/23

请注意,如果您没有明确地将 A and/or 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 and/or double 将解决方案转换为数字格式。