【发布时间】:2016-08-13 13:24:36
【问题描述】:
请问在Matlab中以下两种方式求解x的区别:
方式一:x = A\b
方式二:x = inv((A.').*A)*(A.'*b)
(p.s: 逆矩阵是可逆的)
我认为这两种方式应该给出相同的结果,但我无法实现这种匹配。我想应用最小二乘时尚。然而,它包括许多不同类型的矩阵(转置、反转和多重),并且在使用 Matlab 语言编写时,我感到困惑。请您帮我指出方式2中的错误之处。
非常感谢你们的cmets!
【问题讨论】:
-
inv上的文档明确指出:x = A\b的计算方式与x = inv(A)*b不同,建议用于求解线性方程组。 即使用` and notinv ` -
理论上,两种方法在寻找解决方案方面是相同的,但强烈建议您使用第一种方法。但是,做
inv((A.').*A)是不正确的。您必须矩阵相乘,而不是逐元素相乘:inv((A.')*A)。在任何情况下,如果A的条件数很大,则使用inv在数值上是不稳定的,尤其是在求解线性系统时。如果您有一个超定或未定方程组,请使用 (1) 第一种方法或使用 (2)pinv(A)*b。
标签: matlab algebra least-squares