Matlab 为没有解的系统提供了解决方案

问题描述 投票:0回答:1

我想求解 3 个变量的线性系统

Ax=b
,其中
A
是 4x3 矩阵,
b
是向量。

A
是矩阵
A=[1 1 1 ; 1 2 1 ; 1 2 3 ; 1 4 1]
b=[1 1 1 2]
完整的 4x4 矩阵
A|b
的秩为 4:

> rank([A b'])
ans = 4

所以系统无解。

我用过

linsolve

> linsolve(A,b')
ans =

   0.6071
   0.3571
  -0.1071

从数学角度来看这是无稽之谈,因为

Ax=b
无解!

我唯一能想象到的是,该软件为系统提供了一个最小二乘解,即

A'Ax=A'b
的解;事实上你得到了

> linsolve(A'*A,A'*b')
ans =

   0.6071
   0.3571
  -0.1071

但它并没有警告我这一点:它提供了解决方案

linsolve(A,b')
,就好像它是一个实际解决方案,但事实并非如此!

我做错了什么或遗漏了什么吗?

matlab math linear-algebra
1个回答
0
投票

由于

A
的行数多于列数,因此它是一个 超定系统,这意味着方程的数量大于未知数的数量。一般没有解决办法*。

linsolve
输出一个使误差最小化的解,即
(b-A*x)
的范数。这是“MATLAB”能做到的最好的事情。

背后MATLAB使用“最小二乘法”和“欧几里得范数”来解决这个错误。正如您所写,这就是

linsolve(A'*A,A'*b')
所做的。或者等效地,
lsqr(A,b')
将输出相同的答案。

*注意:如果排名与变量数量相同,则此错误将为 0,但这里不是这种情况。例如,

A=[1 1 1 ; 1 2 1 ; 1 2 3 ; 1 1 1]
b = [1 1 1 1]
的超定系统具有
[1 0 0].'
的解(由
linsolve(A,b')
linsolve(A'*A,A'*b')
lsqr(A,b')
输出)。

© www.soinside.com 2019 - 2024. All rights reserved.