反转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吗?
(不知道这是相关的,但我的矩阵是行优先)
您试图写下一个4x4矩阵的逆是完全错误的。尝试修复它绝对没有意义,因为它无法工作。
你问1/0
的结果是什么。那么,这是零除,结果没有定义。没有实际编号x
满足1/0 == x
。如果那时有1 == x*0 == 0
,是矛盾的。在计算机上,尝试执行除零有时会导致错误,或者有时会返回一个特殊的浮点值Inf
。后者似乎是在你的环境中发生的事情。我不知道你为什么拒绝determinant based code。也许你发现实施起来很棘手。但事实就是这样。你不会简化这种复杂性。
我想我会尝试很长的路,然后感谢至少看。 – user2037921 2013-05-04 13:11:42
难道你用'double [,]'更好吗?或者是一个包含成员m00,m01,...,m10,m11等的结构体。然后您可以使用以下代码:http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index热媒 – 2013-05-04 13:13:52
你的矩阵反转不好,你应该感觉不好。 – 2013-05-04 13:07:06
你提出的'解决方案'是纯粹的废话... – 2013-05-04 13:07:58