【发布时间】:2022-01-17 21:33:51
【问题描述】:
我正在尝试实现一种数值方法,这需要我在某个点计算 6x6 矩阵 (A) 的逆。该矩阵由四个 3x3 矩阵 (B1...4) A = [[B1, B2], [B3, B4]] 组成。
虽然 3x3 矩阵中条目的大小大致相同,但 3x3 矩阵中的大小差异很大。 (下面是6x6矩阵的例子)
问题:在计算这个矩阵的逆时,得到的矩阵与预期的结果有很大的偏差。我试图通过计算I = A*A^-1 来确认这一点,但结果与单位矩阵相差甚远。
我认为这是由于矩阵状况不佳,因为每个 3x3 矩阵之间的差异如此之大。
有谁知道计算这种矩阵的逆矩阵的方法吗?
我目前的想法是将每个 3x3 矩阵乘以一个系数,以降低每个 3x3 矩阵 A = [[B1*a, B2*b], [B3*c, B4*d]] 之间的差异。之后,我将计算逆,然后尝试从结果矩阵中扣除系数。但是,我发现很难确定执行最后一步的方法。
示例:
[1.28872490245158e-06 1.4637613938654e-07 -1.70029707059287e-07 -18.6570630324193 -239.692934347905 -314.364362678385;
1.4637613938654e-07 1.6625715962304e-08 -1.9312338927429e-08 -2.1191092480495 -27.2248377456929 -35.7061787834127;
-1.70029707059287e-07 -1.9312338927429e-08 2.24331051783591e-08 2.46154548263497 31.6242196715729 41.4760981140375;
-18.6570630324193 -2.1191092480495 2.46154548263497 13813398787722.4 -52045116012728.7 59648566307319.4;
-239.692934347905 -27.2248377456929 31.6242196715729 -52045116012728.7 456984106570523 1138610755446.41;
-314.364362678385 -35.7061787834127 41.4760981140375 59648566307319.4 1138610755446.41 453138063298379]
【问题讨论】:
-
你用的是matlab还是python
-
做原型我用的是matlab,不过最终版本会用python实现的。
-
你的输入不清楚,你只有2个维度。你能提供一个真正的 python 对象和匹配的预期输出吗?
-
@Nicdew 解决此类问题的一种方法是使用preconditioner。我怀疑在这种情况下,Jacobi 预处理器就足够了。
标签: python numpy matlab matrix matrix-inverse