如何在Matlab中使用最小二乘法?

nas*_*sim 3 math matlab curve-fitting best-fit-curve least-squares

我有37个线性方程和36个变量的矩阵方程; A*X = B. 方程没有确切的答案.我想使用Matlab最小二乘法找到误差最小的答案.我是Matlab的新手,所以任何评论都会有所帮助.谢谢

A. *_*nda 9

如果A是满秩,即A线性独立的列,则是超定线性方程组的最小二乘解

A * x = b
Run Code Online (Sandbox Code Playgroud)

可以通过反演正规方程找到(参见线性最小二乘法):

x = inv(A' * A) * A' * b
Run Code Online (Sandbox Code Playgroud)

如果A不是满级,A' * A则不可逆.相反,人们可以使用伪逆A

x = pinv(A) * b
Run Code Online (Sandbox Code Playgroud)

或Matlab的左分区运算符

x = A \ b
Run Code Online (Sandbox Code Playgroud)

两者都提供相同的解决方案,但左侧划分更具计算效率.

后两种计算方法也可以处理下,线性方程组的决定,但这一系统给在这种情况下,不同的解决方案:伪逆给出,其中溶液x具有平方的总和最小,而左除法运算给出了尽可能多的解决方案0个系数尽可能.


rlb*_*ond 5

解决此问题的最常用方法是使用pseudoinverse:

X = pinv(A) * B;
Run Code Online (Sandbox Code Playgroud)

  • 你需要`lsqlin`函数.我相信语法是`x = lsqlin(A,B,[],[],0,inf)`. (2认同)
  • 在计算复杂性和数值稳定性方面,这在数值上不如使用"mldivide"(反斜杠算子). (2认同)
  • 我同意knedlsepp.计算矩阵逆(或伪逆)几乎绝不是一个好主意,如果您想要做的就是解决线性系统,无论是出于效率还是稳定性原因. (2认同)