当前位置:  开发笔记 > 编程语言 > 正文

反转4x4矩阵 - 需要数值最稳定的解决方案

如何解决《反转4x4矩阵-需要数值最稳定的解决方案》经验,为你挑选了3个好方法。

我想反转一个4x4矩阵.我的数字以定点格式存储(准确地说是1.15.16).

使用浮点运算,我通常只需构建伴随矩阵并除以行列式(例如强力解决方案).到目前为止,这对我有用,但在处理定点数时,由于使用了所有乘法,我得到了不可接受的精度损失.

注意:在定点运算中,我总是丢弃一些立即结果的最低有效位.

那么 - 反转矩阵的数值最稳定的方法是什么?我不太关心性能,但简单地说浮点就是放慢我的目标架构.



1> Adrian..:

元答案:它真的是一般的4x4矩阵吗?如果你的矩阵有一个特殊的形式,那么有反向的直接公式可以很快并且保持你的操作倒数.

例如,如果它是来自图形的标准同质坐标变换,例如:

[ux vx wx tx]
[uy vy wy ty]
[uz vz wz tz]
[ 0  0  0  1]

(假设旋转,比例,平移矩阵的组合)

然后有一个易于推导的直接公式,即

[ux uy uz -dot(u,t)]
[vx vy vz -dot(v,t)]
[wx wy wz -dot(w,t)]
[ 0  0  0     1    ]

(从链接页面中窃取的ASCII矩阵.)

你可能无法击败固定点的精度损失.

如果你的矩阵来自某个域,你知道它有更多的结构,那么可能会有一个简单的答案.


如果涉及缩放因素,我认为这不起作用?

2> Chris Johnso..:

我认为答案取决于矩阵的确切形式.具有旋转(基本)的标准分解方法(LU,QR,Cholesky等)在固定点上相当好,特别是对于小的4x4矩阵.请参阅Press等人的"Numerical Recipes"一书.有关这些方法的描述.

本文提供了一些有用的算法,但不幸的是它背后是付费墙.他们建议使用(旋转)Cholesky分解,其中一些额外的功能太复杂,无法在此处列出.



3> John D. Cook..:

我想回答Jason S提出的问题:你确定你需要反转你的矩阵吗?这几乎是不必要的.不仅如此,这通常是一个坏主意.如果你需要求解Ax = b,那么直接求解系统在数值上更稳定,而不是将b乘以A逆.

即使你必须为b的许多值反复解决Ax = b,反转A仍然不是一个好主意.你可以考虑 A(比如LU分解或Cholesky分解)并保存因子,这样你就不会重做每次都有效,但每次使用分解时你仍然可以解决系统问题.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有