如何在matlab中消除?

时间:2014-02-16 10:05:39

标签: matlab

如何计算这种矩阵:

A = [ 1  3 4
      4  5 7
      10 8 6]

X= [x1
    x2
    x3]

Y= A*X=0

我们可以将其改为:

   1x1+3x2+4x3=0
   4x1+5x2+7x3=0
   10x1+8x2+6x3=0

如何在Matlab中进行消除以获得x1,x2和x3 ??

2 个答案:

答案 0 :(得分:3)

我不是100%肯定你在问什么。 我想你想要一种解决SLE的方法。这方面很少,我个人觉得更直接的是

 x=A\b

在你的情况下:

 b=zeros(3,1)

请注意,您不需要调用X的向量,因为MATLAB会自动将A中的值视为不同变量的系数

答案 1 :(得分:0)

我的猜测是你为这个问题创建了一个例子,但没有真正检查它是否会产生所需的结果。对于Ax = 0具有非零解,行列式det(A)必须为零。由于A矩阵的决定因素为40,唯一的解决方案是x = [0; 0; 0]

现在,假设您选择了一个更好的示例,例如:

A = [1 2 3;2 4 6;1 1 1];

现在,det(A) = 0

使用常规linsolve,您仍然只能获得x = [0; 0; 0]作为解决方案。然而,显然(无限地)有许多其他非平凡的解决方案。您可以使用null来实现这样的解决方案:

x = null(A)
x =
    0.4082
   -0.8165
    0.4082

A*x
ans =
  1.0e-014 *
    0.1110
    0.2220
    0.0944

实际上为零(不准确是由于浮点精度)。

您还可以使用奇异值分解svd来获得相同的结果:

[U S V] = svd(A);
x = V(:,end)
x =
    0.4082
   -0.8165
    0.4082

A*x
ans =
  1.0e-014 *
    0.1110
    0.2220
    0.0944