如何让Matlab直接显示解决方案而无需分配

时间:2018-12-01 03:08:58

标签: matlab

说我想在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.bs.b才能看到结果。我只想直接查看结果。

2 个答案:

答案 0 :(得分:2)

如果将structfun包裹在solve(eqns,vars)周围,它将在结构的所有字段上运行并应用函数。因此,使用函数f=@(x) x只会打印解决方案。

structfun(@(x) x, solve(eqns,vars))

答案 1 :(得分:1)

根据您的评论,您需要一种在结果ss=solve(eqns,vars))中循环显示所有解决方案的方法。

在这种情况下,sstruct。这是遍历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