我在这样的单元格数组中有一些线性方程(方程的数量每次都不同):
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
您可以使用以下方法求解存储在元胞数组中的方程:
solve(equs{:})
也适用于未知数(如果它们不是由 正确确定的symvar
):
uvar={x,y}
solve(equs{:},uvar{:})