2012-01-14 63 views
1

解方程我在一个单元阵列一些像这样的线性方程(方程的数量每次不同):在单元阵列

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

如何解决这些方程用Matlab? 我可以简单地通过这个功能让我的答案是:

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

但是,由于方程的数目每一次不同,我想这是自动完成的。

+0

在这种情况下,“解决”是什么意思?你期望答案是你的榜样? – 2012-01-14 19:18:30

+0

我想X1和X2 ...例如X1 = 1和X2 = 2 – 2012-01-14 19:20:39

+0

但你没有任何方程。等式涉及'='。 – 2012-01-14 19:24:24

回答

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 
0

可以通过使用解决存储在单元阵列的等式:

solve(equs{:}) 

Works为未知,太(如果它们没有适当通过symvar测定):

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