在Matlab中更改输出顺序

时间:2018-12-02 02:38:53

标签: matlab

假设我想解决一个非常简单的线性方程组。在下面的代码中,我希望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代码吗?

2 个答案:

答案 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) 

这里sstruct。要访问abc的解决方案。您可以这样做:

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