Как позволить Matlab показывать решения напрямую без назначения - PullRequest
0 голосов
/ 01 декабря 2018

Скажем, я хочу решить простую систему уравнений в Matlab:

syms a b
eqns=[a+b==4,a-b==2];
vars=[a,b];
solve(eqns,vars)

Результат просто раздражает:

ans = 

  struct with fields:

    a: [1×1 sym]
    b: [1×1 sym]

Я просто хочу, чтобы Matlab отображал значенияпеременные.Есть ли способ увидеть решения без использования

[asol,bsol]=solve(eqns,vars)

Я также могу использовать s=solve(eqns,vars), но тогда я должен набрать s.b и s.b, чтобы увидеть результат.Я просто хочу увидеть результат напрямую.

Ответы [ 2 ]

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

Согласно вашему комментарию, вам нужен способ перебрать результат s (s=solve(eqns,vars)), чтобы показать все решения.

В этом случае s - это struct .Это вопрос перебора структуры поля.Вы можете использовать функцию fieldnames, которая возвращает массив ячеек с именами полей (в данном случае это имена переменных в уравнениях):

syms a b
eqns=[a+b==4,a-b==2];
vars=[a,b];
s = solve(eqns,vars)

fields = fieldnames(s);

for i = 1:numel(fields)
  s.(fields{i})
end

Вывод:

ans =

3


ans =

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

Если вы оберните structfun вокруг solve(eqns,vars), он будет проходить по всем полям структуры и применять функцию.Таким образом, используя функцию f=@(x) x, она просто распечатает решение.

structfun(@(x) x, solve(eqns,vars))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...