假设我想解决一个非常简单的线性方程组。在下面的代码中,我希望Matlab按a,b,c的顺序给出解决方案。
syms a b c
eqns = [a+b==0, a+2*c==0];
var1=[a,b,c];
[aSol,bSol,Ssol,param,conds]=solve(eqns, var1, 'ReturnConditions', true)
以下代码可求解相同的方程,但让Matlab以b c a的顺序显示解决方案。
syms a b c
eqns = [a+b==0, a+2*c==0];
var2=[b,c,a];
[bSol,cSol,asol,param,conds]=solve(eqns, var2, 'ReturnConditions', true)
我想通过引入变量i来组合这两个代码:当i = 1时,解按a,b,c的顺序给出,当i = 2时,顺序为b,c,a。
我对Matlab的语法不太熟悉。我在想的伪代码是
var[1]=[a,b,c];
var[2]=[b,c,a];
s[1]=[aSol,bSol,Ssol,param,conds];
s[2]=[bSol,cSol,asol,param,conds];
i=1;
s[i]=solve(eqns, var[i], 'ReturnConditions', true)
如果要更改输出顺序,可以将i更改为2。您能帮助使pseduo代码成为真正的pseduo代码吗?
答案 0 :(得分:2)
您可以将var
定义为矩阵,以使var(i,:)
(在pseduo代码中的var[i]
)对应于所需的变量顺序。
对于s
,不需要定义它。只要让它等于解决方案即可。
syms a b c
eqns = [a+b==0, a+2*c==0];
var(1,:) = [a,b,c];
var(2,:) = [b,c,a];
i = 1;
s = solve(eqns, var(i,:), 'ReturnConditions', true)
这里s
是struct。要访问a
,b
和c
的解决方案。您可以这样做:
s.a
s.b
s.c
哪个给
ans =
-2*z
ans =
2*z
ans =
z
答案 1 :(得分:1)
您可以非常简单地仅更改显示,而不更改整个计算:
syms a b c
eqns = [a+b==0, a+2*c==0];
var1=[a,b,c];
[aSol,bSol,Ssol,param,conds]=solve(eqns, var1, 'ReturnConditions', true); % added semicolon
if i==1
aSol,bSol,Ssol
else
bSol,Ssol,aSol
end