我在像这样的单元格数组中有一些线性方程式(方程式的数量每次都不同):
equs = { '2*X1+X2+6', '3*X2-X1' }
如何用Matlab解决这些方程式? 我可以通过这个函数得到我的答案:
ans = solve(equs(1), equs(2));
但是,由于每次方程的数量不同,我希望自动完成。
答案 0 :(得分:1)
我假设您希望方程式等于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
答案 1 :(得分:0)
您可以使用以下方法求解存储在单元格数组中的公式:
solve(equs{:})
也适用于未知(如果symvar
没有正确确定):
uvar={x,y}
solve(equs{:},uvar{:})