用未知数量的 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
将解决方案转换为数字格式。
我正在编写 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
将解决方案转换为数字格式。