如何反转条件不佳的矩阵

计算科学 矩阵 麻木的 条件数
2021-12-03 18:43:54

在我的研究中,我需要反转 Fisher 矩阵以获得协方差矩阵来进行参数估计。不幸的是,Fisher 矩阵的值变化了许多数量级,并且数值误差很大(见最后的图片)。

我首先使用 scipy.linalg.inv 在 python 中尝试了这个,但它没有给出足够稳定的结果。你们有什么建议可以继续吗?

编辑:评论的一些上下文。我试图找到参数不确定性θi给定测量h(f,θi). 费希尔矩阵定义为

Γij=(hθi|hθj)=20Sn(f)1(hθihθj+hθihθi)df.
那么参数的不确定性是
ΔθiΔθj=(Γ1)ij.
因此,当我尝试查找时,会出现我的数字问题(Γ1)ij.

我试图反转的矩阵示例

1个回答

没有简单的解决方法。对于病态矩阵A,在你将这些数字写入一个 numpy 数组的那一刻,伤害(精度损失)已经完成,因为那个微小的1016来自确切的不可表示值的扰动已经是有害的。

您可以提高工作精度;但那时的问题是你的矩阵条目Aij真的可以用超过 16 个正确数字计算;对于依赖于实际测量的数据,答案几乎肯定是否定的。

另一个希望是对角线重新缩放可以改善条件数;看起来第 2 行和第 2 列在您的数据中具有最大值,因此您可以按比例缩小它们。这可能会在单个条目中为您提供更好的准确性(但如果您正在测量计算的准确性,则不一定BA1BA1)。

所以你永远不会有比这更好的范数误差的逆。由于您了解统计数据,因此您习惯于数据的功能不确定;您可以将其视为该现象的另一个实例。这不是算法的错;这是输入数据中的不确定性的错。