反转4x4矩阵算法

问题描述:

我想反转4x4矩阵,我已经看到了几个计算行列式计算的一些例子,这似乎不适用于我,我可能只是搞砸了某个地方,但我一直在试图寻找另一种方式来解决这个问题,我的回答是这样的:反转4x4矩阵算法

public Matrix inverse() 
{ 
    double[] array = new double[]{ 
     1/m[0], m[4], m[8],  0, 
     m[1], 1/m[5], m[9],  0, 
     m[2], m[6], 1/m[10], 0, 
     -m[12], -m[13], -m[14],  1/m[15] 
    }; 
    return new Matrix(array); 
} 

Basicly我做的是,计算它的所有部件,这一直相当不错的反转,期待对于第15号,最后一个号码,出于某种原因它已经喷出无穷大,有人知道为什么吗?我唯一的猜测是除以零,但接下来的问题是什么是0的倒数?答案是0吗?

(不知道这是相关的,但我的矩阵是行优先)

+3

你的矩阵反转不好,你应该感觉不好。 – 2013-05-04 13:07:06

+1

你提出的'解决方案'是纯粹的废话... – 2013-05-04 13:07:58

您试图写下一个4x4矩阵的逆是完全错误的。尝试修复它绝对没有意义,因为它无法工作。

你问1/0的结果是什么。那么,这是零除,结果没有定义。没有实际编号x满足1/0 == x。如果那时有1 == x*0 == 0,是矛盾的。在计算机上,尝试执行除零有时会导致错误,或者有时会返回一个特殊的浮点值Inf。后者似乎是在你的环境中发生的事情。我不知道你为什么拒绝determinant based code。也许你发现实施起来很棘手。但事实就是这样。你不会简化这种复杂性。

+0

我想我会尝试很长的路,然后感谢至少看。 – user2037921 2013-05-04 13:11:42

+0

难道你用'double [,]'更好吗?或者是一个包含成员m00,m01,...,m10,m11等的结构体。然后您可以使用以下代码:http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index热媒 – 2013-05-04 13:13:52