我正在尝试用许多变量求解线性方程。所以我用它来创建多个变量。
xvariables = sym('x', [n 1])
其中n是变量的数量,它创建了一个变量向量x1 x2 x3 ... xn
那么在使用linsolve而不是列出所有变量时,如何在syms旁边使用此向量?
% syms xvariables (something like that) instead of:
syms x2 x3 x4 x5 x6 x7 x8
eqn1 = 0.5*x2 + 0.12*x3 == 21.8;
eqn2 = 0.12*x2 + 0.5*x3 + 0.12*x4 == 21.9;
eqn3 = 0.12*x3 + 0.5*x4 + 0.12*x5 == 47.8;
eqn4 = 0.12*x4 + 0.5*x5 + 0.12*x6 == 37.6;
eqn5 = 0.12*x5 + 0.5*x6 + 0.12*x7 == 27.5;
eqn6 = 0.12*x6 + 0.5*x7 + 0.12*x8 == 52.5;
eqn7 = 0.12*x7 + 0.5*x8 == 59;
[A,B] = equationsToMatrix([eqn1, eqn2, eqn3, eqn4, eqn5, eqn6, eqn7], [x2, x3, x4, x5, x6, x7, x8])
X = linsolve(A,B)
我希望这是有道理的。谢谢!
答案 0 :(得分:1)
使用sym('x',[n 1])
时,您正在使用自动生成的元素[x1; x2; ...; xn]
创建符号向量。元素不直接出现在MATLAB工作区中,但可以通过在创建的变量上使用括号来访问它们(问题中为xvariables
,我的答案中为x
)。因此,我们使用与“普通”向量/矩阵相同的语法。因此,可以使用xn
访问x(n)
。
对于方程式,我们也可以使用向量并将它们存储在单个变量eqn
中。这另外简化了对equationsToMatrix
的调用。
这会产生以下代码:
x = sym('x', [7 1]);
eqn(1) = 0.50*x(1) + 0.12*x(2) == 21.8;
eqn(2) = 0.12*x(1) + 0.50*x(2) + 0.12*x(3) == 21.9;
eqn(3) = 0.12*x(2) + 0.50*x(3) + 0.12*x(4) == 47.8;
eqn(4) = 0.12*x(3) + 0.50*x(4) + 0.12*x(5) == 37.6;
eqn(5) = 0.12*x(4) + 0.50*x(5) + 0.12*x(6) == 27.5;
eqn(6) = 0.12*x(5) + 0.50*x(6) + 0.12*x(7) == 52.5;
eqn(7) = 0.12*x(6) + 0.50*x(7) == 59;
[A,B] = equationsToMatrix(eqn, x)
X = linsolve(A,B)
答案 1 :(得分:0)
您最好使用mldivide
运算符。 (符号\
)(在我看来!)
你的矩阵P包含等式:
p =
[0.50000 0.12000 0.00000 0.00000 0.00000 0.00000 0.00000;
0.12000 0.50000 0.12000 0.00000 0.00000 0.00000 0.00000;
0.00000 0.12000 0.50000 0.12000 0.00000 0.00000 0.00000;
0.00000 0.00000 0.12000 0.50000 0.12000 0.00000 0.00000;
0.00000 0.00000 0.00000 0.12000 0.50000 0.12000 0.00000;
0.00000 0.00000 0.00000 0.00000 0.12000 0.50000 0.12000;
0.00000 0.00000 0.00000 0.00000 0.00000 0.12000 0.50000]
或者如果您不想写0
:
p = zeros(7)
p(1,1) = 0.5;
p(1,2) = 0.12;
p(2,1) = 0.12;
...
包含解决方案的矢量
s = [21.8,21.9,47.8,37.6,27.5,52.5,59]'
您可以使用以下方法解决您的系统:
>> res = p\s
res =
40.0000 %x2
15.0000 %x3
80.0000 %x...
50.0000
25.0000
75.0000
100.0000