【问题标题】:solving lower triangular matrix using least square fashion matlab [duplicate]使用最小二乘时尚matlab求解下三角矩阵[重复]
【发布时间】: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 not inv `
  • 理论上,两种方法在寻找解决方案方面是相同的,但强烈建议您使用第一种方法。但是,做inv((A.').*A) 是不正确的。您必须矩阵相乘,而不是逐元素相乘:inv((A.')*A)。在任何情况下,如果A 的条件数很大,则使用inv 在数值上是不稳定的,尤其是在求解线性系统时。如果您有一个超定或未定方程组,请使用 (1) 第一种方法或使用 (2) pinv(A)*b

标签: matlab algebra least-squares


【解决方案1】:

最小二乘公式,即

拼写错误。在后者b<-->yp<-->x

inv() 函数内部,A.'A 之间的乘积不是元素乘积。
另外,根据 PEMDAS 规则,将 A.'b 加入括号内是不正确的,因此此类术语相对于前者具有优先级。

总之,LS的Matlab公式为:

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

最后,您还可以通过计算 Moore-Penrose 伪逆的 pinv() 函数来简化上述公式,即 inv((A.')*A)*(A.')。事实上pinv(A) 将导致与inv((A.')*A)*(A.') 相同的结果,因此您可以将 LS 解决方案重写为

x=pinv(A)*b;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2015-01-23
    • 2023-03-23
    • 2017-06-17
    • 2017-03-19
    相关资源
    最近更新 更多