mldivide在MATLAB中总是和OLS一样吗?

时间:2013-10-31 15:34:35

标签: matlab statistics least-squares

我正在对一些替代线性回归技术进行比较。

显然,相对于OLS(普通最小二乘法),这些将是基准。

但我只想要一个纯粹的OLS方法,没有预处理数据来发现数据中的病态条件,就像你在使用regress()时发现的那样。

我曾希望简单地使用经典(XX)^ - 1XY表达式?但是,这需要使用inv()函数,但在inv()的MATLAB指南页面中,它建议您在进行最小二乘估计时使用mldivide,因为它在执行时间方面更优越数值精度。

但是,我担心是否可以使用mldivide来查找OLS估算值?作为一个操作员,似乎我无法通过调试器中的“踩踏”看到函数正在做什么。

我是否可以假设mldivide在所有条件下(包括在存在奇异/ i-ll条件矩阵的情况下)会产生与理论OLS相同的答案?

如果不是在没有任何数据预处理的情况下在MATLAB中计算纯OLS答案的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

The short answer是:

  

当系统A*x = b超定时,两种算法都提供相同的答案。当系统未确定时,PINV将返回具有最小范数(min x)的解NORM(x)。 MLDIVIDE将选择具有最少数量的非零元素的解决方案。

至于mldivide如何运作,MathWorks also posted a description of how the function operates

但是,当矩阵mldivide为方形时,您可能还想查看有关A与其他方法的讨论的第一部分this answer

根据矩阵的形状和组成,您可以使用Cholesky分解对称正定,LU分解用于其他方阵,否则使用QR。然后你可以坚持分解并使用linsolve基本上只为你进行反向替换。

mldivide不是方形(过度指定)或方形而是单数时,pinv是否优于Athe two options will give you two of the infinitely many solutions。根据这些文档,两种解决方案都将为您提供准确的解决方案:

  

这两个都是确切的解决方案,因为norm(A*x-b)norm(A*y-b)处于舍入错误的顺序。

答案 1 :(得分:1)

根据the help page pinv为方程组提供最小二乘解,因此要解决系统Ax=b,只需执行x=pinv(A)*b