如何在 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系数的解决方案。
我有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
x = pinv(A) * b
或 Matlab 的 left-division 运算符
x = A \ b
两者给出相同的解决方案,但左除法的计算效率更高。
后两种计算方法也可以处理下确定的线性方程组,但它们在这种情况下给出不同的解:伪逆给出解x
具有最小的平方和,而左除运算符给出了尽可能多的0系数的解决方案。