C++计算两个矩阵相乘

请用c++编写一个程序,输入两个矩阵,计算两个矩阵的乘积,并进行输出

你可以参考一下我的这份代码:

#include <iostream>
using namespace std;
void xiangcheng(int mat1[][100], int mat2[][100], int result[][100], int row1, int col1, int row2, int col2) {
    // 判断矩阵能否相乘
    if (col1 != row2) {
        cout << "无法进行矩阵相乘" << endl;
        return;
    }
    // 逐个元素相乘并求和
    for (int i = 0; i < row1; i++) {
        for (int j = 0; j < col2; j++) {
            result[i][j] = 0;
            for (int k = 0; k < col1; k++) {
                result[i][j] += mat1[i][k] * mat2[k][j];
            }
        }
    }
}
void shuchu(int matrix[][100], int row, int col) {
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
}
int main() {
    int mat1[100][100], mat2[100][100], result[100][100];
    int row1, col1, row2, col2;
    // 输入第一个矩阵的行数和列数
    cout << "输入第一个矩阵的行数和列数:\n";
    cin >> row1 >> col1;
    // 输入第一个矩阵的元素
    cout << "输入第一个矩阵的元素:" << endl;
    for (int i = 0; i < row1; i++) {
        for (int j = 0; j < col1; j++) {
            cin >> mat1[i][j];
        }
    }
    // 输入第二个矩阵的行数和列数
    cout << "输入第二个矩阵的行数和列数:\n";
    cin >> row2 >> col2;
    // 输入第二个矩阵的元素
    cout << "输入第二个矩阵的元素:" << endl;
    for (int i = 0; i < row2; i++) {
        for (int j = 0; j < col2; j++) {
            cin >> mat2[i][j];
        }
    }
    // 计算乘积并输出结果
    xiangcheng(mat1, mat2, result, row1, col1, row2, col2);
    cout << "两个矩阵的乘积为:\n" << endl;
    shuchu(result, row1, col2);
    return 0;
}

找了以下当年大一下的时候自己写的代码,水平一般,答主不嫌弃的话将就着看吧。

#include <iostream>
#include <stdio.h>
using namespace std;

// 函数用于计算两个矩阵的乘积
void matrixMultiply(int matrix1[][100], int matrix2[][100], int result[][100], int rows1, int cols1, int cols2) {
    for (int i = 0; i < rows1; ++i) {
        for (int j = 0; j < cols2; ++j) {
            result[i][j] = 0;
            for (int k = 0; k < cols1; ++k) {
                result[i][j] += matrix1[i][k] * matrix2[k][j];
            }
        }
    }
}

// 函数用于打印矩阵
void printMatrix(int matrix[][100], int rows, int cols) {
    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < cols; ++j) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
}

int main() {
    int rows1, cols1, rows2, cols2;

    cout << "请输入第一个矩阵的行数和列数:";
    cin >> rows1 >> cols1;

    cout << "请输入第二个矩阵的行数和列数:";
    cin >> rows2 >> cols2;

    if (cols1 != rows2) {
        cout << "无法进行矩阵乘法计算。" << endl;
        return 0;
    }

    int matrix1[100][100];
    int matrix2[100][100];
    int result[100][100];

    cout << "请输入第一个矩阵的元素:" << endl;
    for (int i = 0; i < rows1; ++i) {
        for (int j = 0; j < cols1; ++j) {
            cin >> matrix1[i][j];
        }
    }

    cout << "请输入第二个矩阵的元素:" << endl;
    for (int i = 0; i < rows2; ++i) {
        for (int j = 0; j < cols2; ++j) {
            cin >> matrix2[i][j];
        }
    }

    matrixMultiply(matrix1, matrix2, result, rows1, cols1, cols2);

    cout << "两个矩阵的乘积为:" << endl;
    printMatrix(result, rows1, cols2);

    return 0;
}
#include <iostream>
using namespace std;

int main ()
{
    int m,n,a,b,i,j,k;
    int **a1;
    int **b1;
    int **c1;
    
    cout<<"输入第一个矩阵的行数与列数:";
    cin>>m>>n;
    cout <<"输入第二个矩阵的行数与列数:";
    cin>>a>>b;
    if(n != a)
    {
        cout<<"维数不同无法相乘"<<endl;
        exit(-1);
    }

    //动态内存分配
    a1 = new int *[m]; 
    for (i=0; i<m; i++)
        if ((a1[i] = new int [n])==NULL)
            exit (0);
    
    b1 = new int * [a]; 
    for (i = 0;i<a;i++)
        if ((b1[i] = new int [b])==NULL)
            exit (0);
    
    c1 = new int * [m];
    for (i=0; i<m; i++)
        if ((c1[i] = new int [b])==NULL)
            exit (0);

    //创建矩阵a1
    cout<<"输入第一个矩阵的元素:";
    for (i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
            cin>>a1[i][j];
    }
    //创建矩阵b1
        cout<<"输入第二个矩阵的元素:";
    for (i=0; i<a; i++)
    {
        for (j=0; j<b; j++) 
            cin>>b1[i][j];
    }
    //将c1矩阵所有元素赋值为0
    for (i=0; i<m; i++)
        for (j=0; j<b; j++)
            c1[i][j] = 0;
    //计算c1
    for (i=0; i<m; i++)
        for(j=0; j<b; j++)
            for (k=0; k<n; k++)
                c1[i][j] += a1[i][k]*b1[k][j];

    //输出c1
    cout<<"输出结果为"<<endl;
    for (i=0; i<m; i++)
    {
        k = 0;
        for (j=0; j<b; j++)
        {
            cout<<c1[i][j];
            k = k+1;
            if (k==b)
                cout<<endl;
            else cout<<"\t";
        }
    }

    //释放内存空间
    for (i=0; i<m; i++)
        delete[]a1[i];
    delete []a1;
    for (i=0; i<a; i++)
        delete[]b1[i];
    delete []b1;
    for (i = 0;i<m;i++)
        delete[]c1[i];
    delete []c1;

    return 0;
}

https://blog.csdn.net/qq_43015237/article/details/102095652

参考如图

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7799131
  • 这篇博客也不错, 你可以看下楚列斯基分解法、求矩阵范数的C++实现
  • 除此之外, 这篇博客: 用c++从头开始实现决策树中的 可移植性是一个重要的考虑因素 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在Python中,你可以确信任何安装了Python解释器的系统都能够执行你的Python程序。而在c++中,你就没有这种特权了。由于c++是一种编译语言,在运行程序之前必须先编译程序,而且必须针对要运行程序的宿主的体系结构来编译它。

    当尝试使用Github Actions远程测试代码时,这成为一个重要的问题。由于主机是不同的操作系统和架构,因此需要在虚拟机上测试代码之前编译代码。这是部署代码时需要管理的额外开销。

  • 您还可以看一下 夏曹俊老师的C++实战精讲--商用软件中的C++工程开发技术实践课程中的 商用工程软件开发方法的逻辑:复用与扩展——面向对象技术之道小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    解决方案:

    要计算两个矩阵的乘积,可以使用嵌套循环来进行计算。假设我们有两个矩阵A和B,A的维度为m×n,B的维度为n×p。那么矩阵A和矩阵B的乘积C的维度为m×p,C中的每个元素c[i][j]都是由A的第i行和B的第j列对应元素的乘积之和得到的。

    以下是一个C++程序示例,用于计算两个矩阵的乘积并进行输出:

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    vector<vector<int>> matrixMultiplication(vector<vector<int>>& matrixA, vector<vector<int>>& matrixB) {
        int m = matrixA.size();
        int n = matrixA[0].size();
        int p = matrixB[0].size();
    
        vector<vector<int>> result(m, vector<int>(p, 0));
    
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < p; j++) {
                int sum = 0;
                for (int k = 0; k < n; k++) {
                    sum += matrixA[i][k] * matrixB[k][j];
                }
                result[i][j] = sum;
            }
        }
    
        return result;
    }
    
    void printMatrix(const vector<vector<int>>& matrix) {
        for (const auto& row : matrix) {
            for (const auto& element : row) {
                cout << element << " ";
            }
            cout << endl;
        }
    }
    
    int main() {
        vector<vector<int>> matrixA = {{1, 2, 3}, {4, 5, 6}};
        vector<vector<int>> matrixB = {{7, 8}, {9, 10}, {11, 12}};
    
        vector<vector<int>> result = matrixMultiplication(matrixA, matrixB);
    
        printMatrix(result);
    
        return 0;
    }
    

    这个程序首先定义了一个函数matrixMultiplication,用于计算矩阵乘积。函数接受两个参数:matrixAmatrixB,分别代表两个矩阵。函数返回一个新的矩阵作为结果。

    matrixMultiplication函数中,我们首先获取矩阵A和矩阵B的维度,并根据维度创建一个结果矩阵C。然后,通过三重嵌套循环来计算矩阵C的每个元素。最后,将结果矩阵C返回。

    main函数中,我们定义了两个示例矩阵matrixAmatrixB,并调用matrixMultiplication函数来计算它们的乘积。然后,使用printMatrix函数来打印结果矩阵。

    在运行程序时,输出将是:

    58  64  
    139 154  
    

    这是矩阵A和矩阵B的乘积的结果。

    请注意,这只是一个简单的示例程序,假设两个输入矩阵的维度是符合要求的。在实际情况中,您可能需要添加错误检查和边界条件来处理不同维度的矩阵。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^