【问题标题】:Matrix inversion is difficult in matlab when deal with sparse matrixmatlab处理稀疏矩阵时矩阵求逆很困难
【发布时间】:2019-02-23 02:15:18
【问题描述】:

我实现了一个与稀疏矩阵求逆相关的算法。

代码:

kapa_t=phi_t*F_x'*(inv(inv(R_t)+F_x*phi_t*F_x'))*F_x*phi_t;

我在matlab中写下代码。它给了我一个警告矩阵接近奇异或严重缩放。结果可能不准确。 RCOND = 4.419037e-18。。但根据我的算法矩阵求逆是重要的部分。所以,我正在尝试寻找一些有效的矩阵求逆方法。所以我找到了这个链接how to compute inverse of a matrix accurately?
所以我按照建议更改了我的代码。

kapa_t=phi_t*F_x'*(inv(inv(R_t)+F_x*phi_t*F_x'))\F_x*phi_t;

之后我得到一个错误错误使用\ 矩阵尺寸必须一致。

EKF_SLAM_known 错误(第 105 行) kapa_t=phi_tF_x'(inv(inv(R_t)+F_xphi_tF_x'))\F_x*phi_t;

我使用的算法是

这里第8行算法等价于代码kapa_t=phi_tF_x'(inv(inv(R_t)+F_xphi_tF_x'))F_xphi_t;

我应该如何处理我的代码以消除此警告。

【问题讨论】:

    标签: matlab sparse-matrix matrix-inverse


    【解决方案1】:
    kapa_t=phi_t*F_x'*(inv(inv(R_t)+F_x*phi_t*F_x'))\F_x*phi_t;
    

    应该是

    kapa_t=phi_t*F_x'*((inv(R_t)+F_x*phi_t*F_x')\F_x)*phi_t;
    

    A \ B 运算符在A 为正方形时大致相当于inv(A) * B,因此您不需要外部inv

    【讨论】:

    • 好的,谢谢。现在是工作。但同样的警告一次又一次地出现。 矩阵接近奇异或缩放不良。结果可能不准确。 RCOND = 4.419037e-18.。有什么办法可以停止警告。因为我有 40000 个数据,所以这个警告将被迭代 40000 次。
    • @Saswati 不应忽略警告。这是说你的矩阵(或矩阵)被反转是病态的。可以把它想象成相当于除以 0 的矩阵。您应该使用 cond 函数来检查 R_t 的条件数(如果不确定,请在 Google 上搜索)以及括号内的倒置表达式。然后决定你是否有计算它们中的任何一个的错误,或者是由于你的数据使它们排名低。否则还有其他技巧可以改善它们的状况(例如,向它们添加少量单位矩阵),但这取决于您的问题
    • @Saswati 该警告不应被视为滋扰。它告诉您您的结果可能无效。如果您无法找出问题所在,您可能需要针对代码的相关部分发布一个单独的问题,尤其是那些计算该表达式中的矩阵的部分。
    • 我在这里使用的大多数矩阵都是稀疏的。我可以创建由矩阵维度和其中的值组成的单独链接。
    • 我使用的是稀疏矩阵。使用排名不足的确切含义是什么?你能帮我理解吗?
    猜你喜欢
    • 2013-03-02
    • 2015-09-23
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2014-05-12
    相关资源
    最近更新 更多