C++ 3x3矩阵与3x1向量的乘法

C++ 3x3矩阵与3x1向量的乘法,c++,arrays,calculator,C++,Arrays,Calculator,我的程序要求用户输入一个三维双向量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

我的程序要求用户输入一个三维双向量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;
}
#包括
使用名称空间std;
int main()
{
双v[3][1];
双M[3][3];
双Mv[3][1];
int i,j;

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

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

而不是:

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

coutPut
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;
}

对于(i=0;i您打印
Mv[4][0]
这是UB,您想打印
Mv[0][0]
Mv[1][0]
Mv[3][0]
cout[OT],
double v[3][1][/code>的意义是什么,而您可以使用
double v[3][/code>(并摆脱
[0]
)这将打印行Mv的乘积是三倍;)好吧,
printf(“Mv[%d][0]=%.3f\n”,i,Mv[i][0]);
看起来会更好。:)你可以按照Olia的建议将这个循环与你的计算循环合并。哦,谢谢,我这样做了。我知道我不能将“矩阵的乘积”放在同一个循环中。
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;
}