【问题标题】:Solving equations in a cell array求解元胞数组中的方程
【发布时间】:2023-03-12 18:30:01
【问题描述】:

我在这样的单元格数组中有一些线性方程(方程的数量每次都不同):

equs = { '2*X1+X2+6', '3*X2-X1' }

如何用 Matlab 求解这些方程? 我可以通过这个函数得到我的答案:

ans = solve(equs(1), equs(2));

但是,由于方程的数量每次都不同,我希望自动完成。

【问题讨论】:

  • 在这种情况下,“解决”是什么意思?您希望您的示例得到什么答案?
  • 我想要 X1 和 X2... 例如 X1=1 和 X2=2
  • 但是你没有任何方程。等式涉及=
  • 据我所知,在 matlab 中它假设每个方程的末尾都有 '=0'。在这里我可以简单地通过这个命令ans = solve(equs(1), equs(2));得到答案。但我想针对不同数量的方程自动执行此操作。

标签: matlab linear-equation


【解决方案1】:

我假设您希望方程式等于​​ 0,并且方程式中不会出现等号。

解析表达式以找到系数 - 放入矩阵 (A)。 我在这里使用了一个近似的技巧,假设变量总是 x1x2 等。此外,您必须写 * 符号才能进行乘法运算。 FindCoeffs 函数通过将 1 和 0 分配给变量来查找系数。 然后,您可以使用 linsolve 求解方程。

 function FindEquations() 

     a = {'x1+x2 - 6 ','x1 - x2 - 2'};
     A = [];
     B = [];
     for i=1:numel(a)
        [b,l] = FindCoeefs(a{i}, numel(a));
        A(end+1,:) = l;
        B(end+1) = -b;
    end
    linsolve(A,transpose(B))
end

function [b,p] = FindCoeefs(expr, n)
    for j=1:n
        eval(sprintf('x%d=0;',j));
    end
    b = eval([expr ';']);

    p = zeros(1,n);
    for i=1:n
        for j=1:n
            eval(sprintf('x%d=0;',j));
        end
        eval(sprintf('x%d=1;',i));

        p(i) = eval([expr ';']) - b;    
    end

end

【讨论】:

    【解决方案2】:

    您可以使用以下方法求解存储在元胞数组中的方程:

    solve(equs{:})
    

    也适用于未知数(如果 symvar 未正确确定它们):

    uvar={x,y}
    solve(equs{:},uvar{:})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多