当使用linsolve作为线性方程时,用syms替换变量向量

时间:2016-06-01 06:02:12

标签: matlab

我正在尝试用许多变量求解线性方程。所以我用它来创建多个变量。

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)

我希望这是有道理的。谢谢!

2 个答案:

答案 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