【问题标题】:3by3 matrix multiplication3by3 矩阵乘法
【发布时间】:2016-04-02 00:31:53
【问题描述】:

我有一个不能正常工作的 3by3 矩阵类。当我使用第三个实例相乘来存储答案并将其他两个实例相乘时,它可以正常工作。但是当我尝试做 *= 时,它给了我奇怪的数字。

这是常规的 * 和 *= 函数:

 threeby3matrix operator*(threeby3matrix& multiplier)
  {
    threeby3matrix m1;
    m1[0] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6];
    m1[1] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7];
    m1[2] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8];
    m1[3] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6];
    m1[4] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7];
    m1[5] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8];
    m1[6] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6];
    m1[7] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7];
    m1[8] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8];
    return m1;
  }
  threeby3matrix& operator*=(threeby3matrix& multiplier)
  {
    matrix[0] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6];
    matrix[1] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7];
    matrix[2] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8];
    matrix[3] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6];
    matrix[4] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7];
    matrix[5] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8];
    matrix[6] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6];
    matrix[7] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7];
    matrix[8] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8];
    return *this;
  }

由于某种原因,我得到 [18][18][18][108][228][18][108][708][1638]

他们都应该是 18 岁的时候。我试着摆弄括号,但似乎没有任何效果。

【问题讨论】:

  • 另外我忘了说,我用一维动态数组来存储二维数组
  • 你了解过“for”循环吗?
  • @SamVarshavchik - 我猜他们想让打字从头开始

标签: c++ class matrix multiplication


【解决方案1】:

您在使用矩阵进行计算时正在修改它。

试试这样的:

threeby3matrix& operator*=(threeby3matrix& multiplier)
{
    std::swap(*this, operator*(multiplier));
    return *this;
}

【讨论】:

  • 哦,哇,现在我看到它似乎是一个愚蠢的错误,谢谢。而且我们学习了循环,它看起来不太实用,因为它需要多个循环和变量,所以我只是输入了它
猜你喜欢
  • 2018-04-11
  • 2017-03-11
  • 2013-12-23
  • 2014-09-19
  • 1970-01-01
相关资源
最近更新 更多