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

How to use least squares method in Matlab?

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

您可以通过以下方式计算 x:

x = (A'*A)\A'*B

解决这个问题的最通用方法是使用伪逆:

X = pinv(A) * B;

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

A * x = b

可以通过反转正规方程找到(见Linear Least Squares):

x = inv(A' * A) * A' * b

如果A不是满秩,A' * A是不可逆的。相反,可以使用 A

pseudoinverse
x = pinv(A) * b

或 Matlab 的 left-division 运算符

x = A \ b

两者给出相同的解决方案,但左除法的计算效率更高。

后两种计算方法也可以处理确定的线性方程组,但它们在这种情况下给出不同的解:伪逆给出解x具有最小的平方和,而左除运算符给出了尽可能多的0系数的解决方案。