c++ - 3×3矩阵乘法

标签 c++ class matrix multiplication

我有一个无法正常工作的 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 岁时。我试着用括号弄乱,但似乎没有任何效果。

最佳答案

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

尝试这样的事情:

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

关于c++ - 3×3矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36367856/

相关文章:

java - 服务层静态对象字段有什么用

c - 将值放入矩阵

r - 在 R 中创建一个二元指标矩阵( bool 矩阵)

c++ - 在 UTF-8 内部工作然后仅在 Windows 需要时才转换为 UTF-16 是否有任何危险?

c++ - 获取 std::vector 的迭代器的更短方法

c++ - 类 '' 没有名为 '' 的成员

c++ - 以buffer为参数的类函数,一头雾水

c++ - 带有 MySQL Connector stmt->executeQuery() 错误的 VS Express 2013 C++

java - 检测Java类是否可加载

python - 从列创建 sympy 矩阵