私はこのようなセル配列にいくつかの一次方程式を持っています(方程式の数は毎回異なります):
equs = { '2*X1+X2+6', '3*X2-X1' }
Matlabでこれらの方程式をどのように解くことができますか?この関数だけで答えを得ることができます:
ans = solve(equs(1), equs(2));
しかし、方程式の数は毎回異なるので、これを自動的に実行したいと思います。
私はこのようなセル配列にいくつかの一次方程式を持っています(方程式の数は毎回異なります):
equs = { '2*X1+X2+6', '3*X2-X1' }
Matlabでこれらの方程式をどのように解くことができますか?この関数だけで答えを得ることができます:
ans = solve(equs(1), equs(2));
しかし、方程式の数は毎回異なるので、これを自動的に実行したいと思います。
方程式を 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