用MATLAB求解国产化系统

用MATLAB求解国产化系统,matlab,Matlab,MATLAB中A*x=b的通解由下式给出: x=A\b 比如说 A = [2 -1 1; 1 2 3; 3 0 -1] A = 2 -1 1 1 2 3 3 0 -1 b = [8; 9; 3] b = 8 9 3 x = A\b x = 2.0000 -1.0000 3.0000 系统A*x=0的解决方案如何?请帮助我 奇异矩阵的检验 A=[1 2

MATLAB中A*x=b的通解由下式给出:

x=A\b
比如说

A = [2 -1 1; 1 2 3; 3 0 -1]

A =

     2    -1     1
     1     2     3
     3     0    -1

b = [8; 9; 3]

b =

     8
     9
     3

x = A\b

x =

    2.0000
   -1.0000
    3.0000
系统
A*x=0
的解决方案如何?请帮助我

奇异矩阵的检验

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

A =

     1     2     3
     2     1     4
     3     3     7

>> det(A)

ans =

     0
b=[0;0;0];
>> linsolve(A,b)
Warning: Matrix is close to singular or badly scaled.
         Results may be inaccurate. RCOND = 1.903239e-017.

ans =

     0
     0
     0
@罗伯特p

这是正确的吗

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

A =

     2     3     1
    -1     3     1
     1     6     2

>> det(A);
>> det(A)

ans =

     0

>> [U S V]=svd(A);
>> x=V(:,end);
>> A*x

ans =

  1.0e-015 *

    0.2220
    0.2220
    0.4441
假设“0”代表零向量,而不是标量。

在您的情况下,可以:

>> A = [2 -1 1; 1 2 3; 3 0 -1]

A =

     2    -1     1
     1     2     3
     3     0    -1

>> b = [0; 0; 0]

b =

     0
     0
     0

>> x = A\b

x =

     0
     0
     0
或者您可以使用
linsolve

>> linsolve(A,b)

ans =

     0
     0
     0

但是如果
det(A==0)
你应该使用对应于零特征值的特征向量,类似于:

>> A = [2 -1 1; 1 2 3; 3 0 -1]

A =

     2    -1     1
     1     2     3
     3     0    -1

>> b = [0; 0; 0]

b =

     0
     0
     0

>> [v m] = eig(A)

v =

    1.0000    0.4472         0
         0    0.8944         0
         0         0    1.0000


m =

     0     0     0
     0     2     0
     0     0     3
您将有无限多个解,与
[1 0 0]
平行的每个向量都将是一个解

如果存在非平凡的解决方案,您可以使用获得满足
Ax=0
x

A = [2 -1 1; 2 -1 1; 3 2 1];
[U S V] = svd(A);
x = V(:,end)

x =

  -0.39057
   0.13019
   0.91132

A*x = 

   0
   0
   0

如果A的行列式为零?是的,但如果行列式为零,那么它必须给出非零解,对吗?不,它有无穷多的解,请阅读我的上一次修订。我有一些网络问题。现在它完成了,希望我知道,我知道它有无限解,我想感谢muchi已经测试并得到了以下结果如果矩阵的行列式为零,那么解又是零向量为什么?在你的第二个
A
中,显然有第3行=第1行+第2行,因此是一个奇异矩阵。@dato:是的,这是正确的!=)正如我在对我的答案的评论中所说的,由于浮点运算,你不能假设一个计算机程序将返回零。答案基本上是零。我应该用长格式直接显示零还是?因为它只是一个很小的数字,但不是零。你想对答案做什么?写在屏幕上就行了?不,没有,一切都是正确的
A = [2 -1 1; 2 -1 1; 3 2 1];
[U S V] = svd(A);
x = V(:,end)

x =

  -0.39057
   0.13019
   0.91132

A*x = 

   0
   0
   0