1

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

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

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

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

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

4

2 回答 2

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
于 2012-01-14T20:01:38.937 回答
0

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

solve(equs{:})

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

uvar={x,y}
solve(equs{:},uvar{:})
于 2017-07-24T09:31:06.327 回答