2012-01-14 62 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{:})