C++实训--矩阵乘法

作者: 简言之_ | 来源:发表于2019-05-13 19:27 被阅读0次

重要知识点:C++中路径要用“\\”,不然会报错
例如: ifstream in ("C:\\Users\\admin\\Desktop\\123.txt")
矩阵乘法A(m×k) * B(k×n)=C(m×n)

方法一:使用文件流fstream读入矩阵数据

#include<iostream>
#include<fstream>
using namespace std;
void multiply(int **A, int **B, int **C, int m, int k, int n)//C[m][n]=A[m][k]*B[k][n]
{
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            int s = 0;
            for (int x = 0; x < k; x++)
            {
                s += A[i][x] * B[x][j];
            }
            C[i][j] = s;
        }
    }
}
void DynamicCreate2Array(int **&p, int m, int n)//动态创建二维数组
{
    //动态开辟空间
    p = new int*[m]; //开辟行
    for (int i = 0; i < m; i++)
        p[i] = new int[n]; //开辟列

}
void delete2Array(int **p,int m)//释放开辟的资源
{
    for (int i = 0; i < m; i++)
        delete[] p[i];
    delete[] p;
}
void read(int **M, int row, int col, ifstream &infile) //从文件中读入矩阵初始化数据
{
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            infile >> M[i][j];
        }
    }
}
void show(int **M, int row, int col)//显示矩阵
{//raw行 col列

    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            cout << M[i][j]<<" ";
            
        }
        cout << endl;
    }
}

int main() {

    ifstream in("C:\\Users\\admin\\Desktop\\123.txt");//路径必须用“\\”
    int m, k, n;
    cout << "请输入m,k,n:" << endl;
        cin >> m >> k >> n;
    int **A, **B, **C;
    cout << "矩阵A:" << endl;
        DynamicCreate2Array(A, m, k);//开辟二维数组A 
        read(A, m, k, in);//从文件中读入矩阵A初始化数据
        show(A, m, k);//显示矩阵
    cout << "矩阵B:" << endl;
        DynamicCreate2Array(B, k, n);
        read(B, k, n, in);
        show(B, k, n);
    cout << "矩阵乘法C=A*B" << endl;
    cout << "矩阵C:" << endl;
        DynamicCreate2Array(C, m, n);
        multiply(A, B, C, m, k, n);
        show(C, m, n);
    delete2Array(A, m);
    delete2Array(B, k);
    delete2Array(C, m);
    system("pause");
    return 0;
}
123.txt
测试结果

方法二:手动输入矩阵数据

#include<iostream>
#include<fstream>
using namespace std;
void multiply(int **A, int **B, int **C, int m, int k, int n)//C[m][n]=A[m][k]*B[k][n]
{
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            int s = 0;
            for (int x = 0; x < k; x++)
            {
                s += A[i][x] * B[x][j];
            }
            C[i][j] = s;
        }
    }
}
void DynamicCreate2Array(int **&p, int m, int n)//动态创建二维数组
{
    //动态开辟空间
    p = new int*[m]; //开辟行
    for (int i = 0; i < m; i++)
        p[i] = new int[n]; //开辟列

}
void delete2Array(int **p,int m)//释放开辟的资源
{
    for (int i = 0; i < m; i++)
        delete[] p[i];
    delete[] p;
}
void init(int **M, int row, int col) //初始化数组
{    //raw行 col列
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            cin >> M[i][j];
        }
    }
}
void show(int **M, int row, int col)//显示矩阵
{//raw行 col列

    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            cout << M[i][j]<<" ";
            
        }
        cout << endl;
    }
}
int main() {

    int m, k, n;
    cout << "请输入m,k,n:" << endl;
        cin >> m >> k >> n;
    int **A, **B, **C;
    cout << "矩阵A:" << endl;
        DynamicCreate2Array(A, m, k);
        init(A, m, k);
    cout << "矩阵B:" << endl;
        DynamicCreate2Array(B, k, n);
        init(B, k, n);
    cout << "矩阵乘法C=A*B" << endl;
    cout << "矩阵C:" << endl;
        DynamicCreate2Array(C, m, n);
        multiply(A, B, C, m, k, n);
        show(C, m, n);
    delete2Array(A, m);
    delete2Array(B, k);
    delete2Array(C, m);
    system("pause");
    return 0;
}
测试结果

相关文章

  • C++实训--矩阵乘法

    重要知识点:C++中路径要用“\\”,不然会报错例如:ifstream in("C:\\Users\\admin\...

  • 图形变换原理

    概述: 图形变换大体分为缩放,平移,拉伸,旋转.他们的原理是矩阵的乘法. 矩阵的乘法: 矩阵的乘法规则:两个矩阵相...

  • 矩阵乘法在python中的表示

    从数学表达上来说,矩阵乘法有: 矩阵的乘法(matmul product):这就是线性代数里面的矩阵乘法 內积/点...

  • sparse matrix 的分布式存储和计算

    矩阵乘法 我们先来补充一下矩阵乘法的数学知识: 矩阵乘法的意义: 对一个矩阵进行左乘一个矩阵的运算,相当于对该矩阵...

  • 图形矩阵-----Matrix

    一、矩阵的定义 二、矩阵与矩阵的乘法 矩阵的乘法满足以下运算律:结合律,分配律,但是矩阵乘法不满足交换律。更详细的...

  • 卷积网络和卷积计算

    矩阵乘法和卷积乘法区别: 卷积的乘法和矩阵的乘法不一样,卷积的求和相当于加权求和,也可以称为加权叠加,矩阵相乘是将...

  • MIT-18.06-线性代数(第三讲)

    第三讲 —— 矩阵乘法和逆 1. 矩阵乘法 1.1 行列内积 假设矩阵乘矩阵,得到矩阵,。回顾单个元素的求法,取特...

  • 矩阵链乘法

    矩阵A和矩阵B能够相乘,只有当矩阵A和矩阵B相容。 矩阵链乘法的前提就是降低矩阵的乘法规模。之所以可以这样,是因为...

  • 理解线性代数核心算法:矩阵乘法就是“方法乘以对象”

    本文直指线性代数最最核心的算法——矩阵乘法。 记忆矩阵乘法的最速方法 矩阵乘法,在书本上有它的公式,但是太不直观了...

  • 理解线性代数核心算法:矩阵乘法就是“方法乘以对象”

    本文直指线性代数最最核心的算法——矩阵乘法。 记忆矩阵乘法的最速方法 矩阵乘法,在书本上有它的公式,但是太不直观了...

网友评论

    本文标题:C++实训--矩阵乘法

    本文链接:https://www.haomeiwen.com/subject/fenraqtx.html