2012-01-14 4 views
1

У меня есть некоторые линейные уравнения в массиве ячеек, как это (число уравнений меняться каждый раз):Решение уравнений в массиве ячеек

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

Как я могу решить эти уравнения с Matlab? я могу получить мой ответ просто с помощью этой функции:

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

Но, как число уравнений различаются каждый раз, когда я хочу, чтобы это было сделано автоматически.

+0

Что вы подразумеваете под «решением» в этом контексте? Что вы ожидаете от ответа на свой пример? –

+0

Я хочу X1 и X2 ... Например, X1 = 1 и X2 = 2 –

+0

Но у вас нет никаких уравнений. Уравнение включает '='. –

ответ

1

Я предполагаю, что вы хотите, чтобы уравнения были равны 0, и что в уравнениях нет знака равенства.

Разберите выражения, чтобы найти коэффициенты, помещенные в матрицу (A). Я использую здесь трюк, предполагающий, что переменные всегда x1, x2 и т. Д. Также вы должны написать знак * для умножения. Функция FindCoeffs находит коэффициенты путем присвоения им и нулям переменных. Затем вы можете решить уравнения, используя 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{:}) 

Работы для неизвестного, тоже (в случае, если они должным образом не определяется symvar):

uvar={x,y} 
solve(equs{:},uvar{:}) 
Смежные вопросы