изменить порядок вывода в Matlab - PullRequest
0 голосов
/ 02 декабря 2018

Предположим, я хочу решить очень простую систему линейных уравнений.В следующих кодах я хочу, чтобы 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 отображать решения в порядке bca.

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.

Я не совсем знаком с грамматикой Матлаба.Я думаю, псевдокод:

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, если я хочу изменить порядок вывода.Можете ли вы помочь сделать псевдо-код настоящим?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Вы можете очень просто изменить только отображение, а не весь расчет:

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
0 голосов
/ 02 декабря 2018

Вы можете определить var как матрицу, такую, что var(i,:) (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...