c++ - 矩阵和 vector 乘法,输出不正确的乘积

标签 c++ matrix vector

我已经创建了一个 Vector 和 Matrix 类,我正在尝试执行诸如矩阵与 vector 的乘法、矩阵与矩阵的乘法以及矩阵与 float (标量)的乘法等操作。我似乎在为矩阵 * vector 和矩阵 * 矩阵获取正确的产品时遇到问题。 这是 Matrix 类的一部分,用于处理这些操作:

// Matrix * vector, result vector
Vector Matrix::operator*(const Vector & other) const
{
if (other.getDimensions() == 4)
{
    float floats[4];
    const float* temp = other.getData();
    for (int j = 0; j < 4; j++)
    {
        Vector myCol = column(j);
        floats[j] = (temp[0] * myCol.getData(0)) + (temp[1] * myCol.getData(1)) + (temp[2] * myCol.getData(2)) + (temp[3] * myCol.getData(3));
    }
    return Vector(floats[0], floats[1], floats[2], floats[3]);
}
else
{
    return Vector();
}
}

// Matrix * scalar, result matrix
Matrix Matrix::operator*(float c) const 
{
Matrix myMatrix;
for (int i = 0; i < 16; i++)
{
    myMatrix.data[i] = this->data[i] * c;
}
return myMatrix;
}

在我的 main.cpp 中,

Matrix m = Matrix(Vector(1, 0, 0, 1), Vector(0, 1, 0, 2), Vector(0, 0, 1, 3), Vector(0, 0, 0, 1));

是矩阵的值和

    v = Vector(1, 0, -1, 1);

是 vector 的值。 当我乘以 m * v 时,我得到 <1、0、-1、-1>,但答案是 <2、2、2、1>。

并且在使用上面相同的 m 矩阵和具有值的 vector v 执行矩阵 * 标量时

v = Vector(1, 0, -1, 0);

我得到的 m*v 是 <1, 0, -1, 2> 而它应该是 <1, 0, -1, 0>。 我的 Vector 类工作正常,所以我怀疑我在实现矩阵运算的数学方面搞砸了。

最佳答案

为了扩展@Klaus 的答案,从数学上讲,在表达式 M*V 中, vector V 是一个,并且结果是矩阵 V 的(点)积。将 column(j) 替换为 row(j)

关于c++ - 矩阵和 vector 乘法,输出不正确的乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42586313/

相关文章:

C++ 编写一个适当的类似函数的宏

c++ - 在 C++ 中使用非成员方法

c++ - 为什么要在std::vector::push_back(T object)方法中构造对象时调用析构函数?

ruby - 使用 Ruby 搜索矩阵

java - 在更大的数组中移动 Java 数组

c++ - 如何理解vector pop_back的实现?

C++ 结构/vector 编译问题

c++ - 我应该为 map 中的两个智能指针对制作自己的比较器吗?

c++ - 如何获取 wav 文件中的音符列表?

python - 将字典中的值转换为矩阵