矩阵乘法误差 -

时间:2016-07-15 16:29:32

标签: c++ matrix

我不明白为什么以下代码为Matrix'提供了错误的答案。 Matrix' u'应该等于身份矩阵,但只有一些值是正确的。任何人都可以帮助我理解为什么会这样吗?

{{1}}

2 个答案:

答案 0 :(得分:0)

你的数学运算方式不正常的原因是因为你使用的是浮点数(Floating point numbers)而不是真正的“实数”。如果您希望使用浮点数或双精度数进行精确的工作,那么您需要了解浮点数学。

如果你真的不关心精度并且只想让东西看起来正确,那么快速修复就是定义一个数字零并将所有小于它的东西设置为实际零。像1e-6这样的东西可以工作。一些示例代码如下。

for (int i = 0; i < 3; i++) 
   for (int j = 0; j < 3; j++) 
      u[i][j] = abs(u[i][j]) < 1e-6 ? 0 : u[i][j];

答案 1 :(得分:0)

当您继续计算u[k][j]=0的不同元素的总和时,请初始化u。这应该可以正常工作。

for (k=0; k<3; k++)
{
    int j;
    for (j=0; j<3; j++) 
    {
        int u[k][j]=0;
        int h;
        for (h=0; h<3; h++)
        {
            u[k][j]+=(F[k][h])*(B[h][j]);
        }
    }
}