矩阵和矢量乘法,输出不正确的产品
Matrix and vector multiplication, outputting incorrect product
我已经创建了一个向量和矩阵类,我正在尝试执行操作,例如矩阵和向量的乘法,矩阵和矩阵的乘法以及乘法矩阵和浮点(标量)。我似乎有问题为矩阵 *向量和矩阵 *矩阵获得正确的产品。这是旨在处理这些操作的矩阵类的一部分:
// 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);
是向量的值。当我乘以m * v时,我得到&lt; 1,0,-1,-1>,但答案是&lt; 2,2,2,1>。
以及在上面使用相同M矩阵的矩阵 *标量时,值
向量Vv = Vector(1, 0, -1, 0);
i得到m*v be&lt; 1,0,-1,2>应为&lt; 1,0,-1,0>。我的矢量类工作正常,所以我怀疑我用数学数以实现矩阵操作而搞砸了。
在@klaus答案上展开,在表达式中,数学上是 M*V
中的 V
是a 列,结果的元素是(dot-)产物矩阵行和V
。用column(j)
替换CC_4。
我现在用手计算您的示例,如果您期望结果为&lt; 2、2、2、1>,那么您肯定会在矩阵中交换行和列。当您将矩阵乘以向量时,您想将矩阵行和向量的行的产物放在结果向量中。一种:
Vector Matrix::operator*(const Vector & other) const
{
float floats[4];
const float* temp = other.getData();
for (int j = 0; j < 4; j++)
{
Vector my_row = row(j);
floats[j] = 0;
for(int i=0; i!=4; ++i)
floats[j]+=temp[i] * myCol.getData(i);
}
//(maybe provide a better constructor to take an array)
return Vector(floats[0], floats[1], floats[2], floats[3]);
}
对于标量的示例,我没有明白。我不明白,如果您将矩阵乘以向量。
还可以通过仅接受4号的向量(将其作为向量类中的要求)来改善错误处理,如果您只使用大小4的向量。
ps:也许您还应该将添加代码放入第二个循环中,以便更可读和扩展。
相关文章:
- 不正确的比较和交换计数器输出用于快速排序功能
- Windows 10命令提示符的输出不正确
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- C++ - 为什么 unicode 输出不正确?
- 连接的组件程序产生不正确的输出
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 我的叉子输出不正确
- 输出使用 cout 转换为 ASCII 的文本时输出格式不正确,C++
- 堆排序,我无法弄清楚我的代码出了什么问题,输出顺序不正确
- C++使用 CEIL 和长度输出不正确的值
- 使用 iconv 进行 UTF8 转换的输出不正确
- C strftime()输出不正确
- 不正确的输出和变量未用Eclipse CDT初始化构造函数
- 当行数和列不匹配时,输出不正确
- 合并排序不正确的输出 c++
- 从堆栈中读取字符后,如何修复不正确的文件输出
- C++ 嵌套循环输出不正确
- 矩阵和矢量乘法,输出不正确的产品
- 我对这个问题有问题,我的输出不正确
- 测试整数是否在范围内时,逻辑错误和不正确输出