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 に答える