3x3 矩阵和 3x1 向量的乘法

Multiplication of a 3x3 matrix and a 3x1 vector

本文关键字:向量 3x1 3x3      更新时间:2023-10-16

我的程序要求用户输入三维双向量v和3 x 3双矩阵M,程序将打印出矩阵/向量积Mv。但是,我没有得到一个向量作为我的输出,我得到了一个标量。我不知道为什么,我已经将我的输出定义为向量。这是代码

#include <iostream>
using namespace std;
int main()
{
    double v[3][1];
    double M[3][3];
    double Mv[3][1];
    int i,j;
    cout << "Enter in the components of the vector v:n";
for(i=0; i<3; i++)
{
    cout << "Component " << i+1 << ": ";
    cin >> v[i][0];
}
    cout << "Enter in the components of the 3 x 3 matrix M:n";
for(i=0; i<3; i++)
{
    for(j=0; j<3; j++)
    {
        cin >> M[i][j];
    }
}   
for(i=0; i<3; i++)
{
    Mv[i][0]= 0.0;
    for(j=0; j<3; j++)
    {
        Mv[i][0] += (M[i][j] * v[j][0]);
    }
}
cout << "The product of Mv is: " << Mv[i][0] << endl;   
return 0;
}

代码将产品打印为"1" - 如果我为两个向量的所有元素输入 1。

cout上面放一行:

for(i=0; i<3; i++)
{
    Mv[i][0]= 0.0;
    for(j=0; j<3; j++)
    {
        Mv[i][0] += (M[i][j] * v[j][0]);
    }
    cout << "The product of Mv is: " << Mv[i][0] << endl;
}

你只在输出调用中打印一个值 Mv[i][0]

您需要创建一个循环来打印所有矢量元素:

而不是:

cout << "The product of Mv is: " << Mv[i][0] << endl;

做:

cout << "The product of Mv is: [";
// start with the delimiter as a ',' but we need to change it 
// to ']' on the last iteration of the loop.
// so the result looks something like "[1.4,2.5,0.2]"
char delimiter = ',';
for(i=0; i<3; i++)
{
   if (i == 2)
   {
      // on last loop iteration change delimiter to ']'
      delimiter = ']'
   }
   cout << Mv[i][0] << delimiter;
}
cout << endl;