【问题标题】:Solve linear recursive matrix求解线性递归矩阵
【发布时间】:2017-09-24 21:43:03
【问题描述】:

我有方程式:

S= C.(BSQ)+(1-C)I 其中 S,B,Q 是 nXn dim 的方阵,C 是常数,I 是单位矩阵。S 被初始化为单位矩阵 我想求解方程以找到 S。我可以在两边不取任何逆然后简化等等的情况下做到这一点吗?(我正在处理大型数据集,取逆可能非常慢)只需使用上面的方程,我得到了一些结果,但我不确定它是否正确,因为您不能同时进行三个矩阵乘法。我该怎么做才能解决 S?

the answer I am getting after plugging in all the matrices with values

【问题讨论】:

  • 由于您没有告诉我们CBQ 的值是什么,即使在您的图形中,我们如何回答您的问题?你说的“你不能[']不能同时做三个矩阵乘法”是什么意思?只需将前两个乘以第三个即可。使用简单的算法,矩阵求逆在最坏的情况下是 O(n**3),这是多项式时间,那有什么问题呢?您的具体示例可能具有可以加快速度甚至更短时间的功能。请以文本形式向我们展示您的完整示例,以便我们检查您的答案是否正确。
  • 另外,如果速度很重要,您可能应该使用 numpy 数组而不是基本的 Python list-of-lists。
  • 我不能将前两个矩阵相乘,然后第三个矩阵相乘,因为前两个矩阵是 B 和 S,相乘会改变 S 的值。这将是一个问题,因为 S 存在于等式所以计算的值是错误的。
  • 我正在使用一个 numpy 数组。我也应该发布我的代码吗?我只是没有发布它,因为它主要是如何使用某些条件等单独计算矩阵。主要部分是通过以下方式求解方程使用矩阵的值。
  • 获得S 的候选答案后,您可以将三个矩阵相乘来检查您的答案。这不是您所说的“我不确定它是否正确,因为您不能同时进行三个矩阵乘法”?您仍然需要显示一些示例值,以便我们确定您的意思。根据How to create a Minimal, Complete, and Verifiable example,它们应该是减少的、更小尺寸的示例。

标签: python-2.7 math linear-algebra


【解决方案1】:

根据您的矩阵,您也许可以迭代该公式并希望它收敛。 IE。从S=I 开始,然后重新计算S,直到它不再变化。当然,这并不能保证收敛,但你不妨试试。

如果你想直接解决这个问题,你可以推导出一个线性系统。只需将 RHS 分解出来(这样您就可以得到结果矩阵中每个条目的表达式)并为每个条目设置方程。例如。对于第一个条目,如下所示:

s11 = 1 - c + c * (q11 * (b11 * s11 + b12 * s21 + b13 * s31 + ...) + 
                   q21 * (b11 * s12 + b12 * s22 + b13 * s32 + ...) + 
                   q31 * (b11 * s13 + b12 * s23 + b13 * s33 + ...) + 
                   ...)

求解s.. 就完成了。当然,如果系统承认解决方案。否则,您可能需要求解最小二乘解。

【讨论】:

  • 谢谢。希望它在这种情况下会收敛,但如果不是,它是一个很好的提示
【解决方案2】:
for t in range(100):

        s=c*(sc.dot(sc.dot(Qin.T,s),Qin))+ (1-c)*I

这将递归求解方程 100 次。您可以进行收敛测试,即 Si-Si-1=某个小值也可以检查收敛。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    相关资源
    最近更新 更多