求解单元阵列中的方程

时间:2012-01-14 19:15:49

标签: matlab linear-equation

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

解析表达式以找到系数 - 放入矩阵(A)。 我在这里使用一个近乎诡计,假设变量总是 x1 x2 等。此外,你必须为乘法编写*符号。 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

答案 1 :(得分:0)

您可以使用以下方法求解存储在单元格数组中的公式:

solve(equs{:})

也适用于未知(如果symvar没有正确确定):

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