首页 > 解决方案 > 用我自己的输入将矩阵乘以向量

问题描述

我想使用这种方法将矩阵乘以一个向量cin>>,为矩阵的行和列以及向量数据引入我自己的向量,这是我的乘法方法。

int multiply()
{
    int a[3][3]= //MY OWN INPUT
    int b[]={1,2,3}; //MY OWN INPUT
    int c[3]; //SOLUTION

    for (int i=0;i<3;i++)
    {
         c[i]=0;
    }

    for (int i=0;i<3;i++)
    {
        for (int j=0;j<3;j++)
        {
            c[i]+=(a[i][j]*b[j]);
        }
    }

    for (int i=0;i<3;i++){
        cout<<c[i]<<"  "<<endl;
    }
    system ("pause>0");

}

我想对于矩阵,读取输入会是这样的,

void leerMatriz( int **M, int fil, int col )
{
    cout << "\nRellenar la matriz:\n";
    for( int i = 0; i < fil; i++ ){
        for( int j = 0; j < col; j++ ){
            cout << "Matriz[" << i << "][" << j << "]: ";
            cin >> M[i][j];
        }
    }
}
int main()
{
    int filA, colA, filB, colB;



    cout << "\nDimension de la matriz A:";
    cout << "\nFilas de la matriz: "; cin >> filA;
    cout << "Columnas de la matriz: "; cin >> colA;

    int** A = new int*[filA];
    for( int i = 0; i < filA; i++ )
        A[i] = new int[colA];

    leerMatriz( A, filA, colA );

    cout << "\nDimension de la matriz B:";
    cout << "\nFilas de la matriz: "; cin >> filB;
    cout << "Columnas de la matriz: "; cin >> colB;

    int** B = new int*[filB];
    for( int i = 0; i < filB; i++ )
        B[i] = new int[colB];

    leerMatriz( B, filB, colB );

但是向量呢?有没有更简单的方法?

标签: c++c++11matrixvectormatrix-multiplication

解决方案


您与我们共享的代码存在一些问题,但这里有一些编写此代码的提示:

1)避免使用原始指针,因为你正在做你的主,可能会看看这样的东西A proper way to create a matrix in c ++ where a class is defined。例如,该类可以有一个“getInput”函数来捕获用户的输入。你也可以为向量写一些类似的东西。

2)我相信你知道,在矩阵向量乘积中,大小很重要。确保您的向量大小对应于矩阵的行数。并确保在您的程序中初始化大小。

3) 当通过标准输入将多元素输入作为列表的值时,定义分隔符很重要。(向量 [0,1,2,3,4] 可以写成"0,1,2,3,4")然后您必须将该字符串解析为值。或者只是逐个字符地获取您的输入。

4)根据您的输入,您的乘法功能需要“适应性”吗?所以它必须接受一些参数作为输入。

在 C++ 中,很容易迷失在非数学问题上,很容易做“坏”代码,放轻松,从两个向量的乘法开始可能是?


推荐阅读