矩阵运算:C++ 代码实现

概述

矩阵运算在数学和计算机科学领域中有着广泛的应用。本篇博客将介绍矩阵的基本运算(加、减、乘),并提供相应的 C++ 代码实现。文章还涵盖了矩阵运算的规则和示例,帮助读者更好地了解矩阵运算的概念和应用。

矩阵运算规则

矩阵加减法

  • 运算规则:只有当参与运算的两个矩阵的行数和列数都相同时,才能进行加减运算。
  • 结果矩阵:结果矩阵的行列数与参与运算的矩阵相同。
  • 运算公式:Cij = Aij + Bij (加法) 或 Cij = Aij - Bij (减法),其中 Cij 表示结果矩阵 C 的第 i 行第 j 列元素,AijBij 分别表示矩阵 AB 的第 i 行第 j 列元素。

矩阵乘法

  • 运算规则:只有当矩阵 A 的列数等于矩阵 B 的行数时,才能进行矩阵乘法。
  • 结果矩阵:结果矩阵的行数等于矩阵 A 的行数,列数等于矩阵 B 的列数。
  • 运算公式:Cij = Σ(k=1 to m) Aik * Bkj,其中 Cij 表示结果矩阵 C 的第 i 行第 j 列元素,Aik 表示矩阵 A 的第 i 行第 k 列元素,Bkj 表示矩阵 B 的第 k 行第 j 列元素。

C++ 代码实现

#include<bits/stdc++.h>
using namespace std;
const int N = 25;
int tt, p;
struct Matrix{
    int n, m;
    int a[N][N];
    Matrix operator+(Matrix &b){
        Matrix t;
        memset(t.a, 0, sizeof t.a);
        if(n != b.n || m != b.m){
            t.n = t.m = -1;
            return t;
        }
        t.n = n;
        t.m = m;
        for(int i = 1; i <= n; ++i)
            for(int j = 1; j <= m; ++j)
                t.a[i][j] = a[i][j] + b.a[i][j];
        return t;
    }
    Matrix operator-(Matrix &b){
        Matrix t;
        memset(t.a, 0, sizeof t.a);
        if(n != b.n || m != b.m){
            t.n = t.m = -1;
            return t;
        }
        t.n = n;
        t.m = m;
        for(int i = 1; i <= n; ++i)
            for(int j = 1; j <= m; ++j)
                t.a[i][j] = a[i][j] - b.a[i][j];
        return t;
    }
    Matrix operator*(Matrix &b){
        Matrix t;
        memset(t.a, 0, sizeof t.a);
        if(m != b.n){
            t.n = t.m = -1;
            return t;
        }
        t.n = n;
        t.m = b.m;
        for(int i = 1; i <= n; ++i)
            for(int j = 1; j <= b.m; ++j)
                for(int k = 1; k <= m; ++k)
                    t.a[i][j] += a[i][k] * b.a[k][j];
        return t;
    }
    void print(){
        if(n == -1 && m == -1){
            printf('error\n');
            return;
        }
        printf('%d %d\n', n, m);
        for(int i = 1; i <= n; ++i){
            for(int j = 1; j <= m; ++j)
                printf('%d ', a[i][j]);
            printf('\n');
        }
    }
} m[N], ans;
int main() {
	 scanf('%d%d', &tt, &p);
    for(int i = 1; i <= tt; ++i){
        scanf('%d%d', &m[i].n, &m[i].m);
        for(int r = 1; r <= m[i].n; ++r)
            for(int s = 1; s <= m[i].m; ++s)
                scanf('%d', &m[i].a[r][s]);
    }
    for(int i = 1; i <= p; ++i){
        int op, r, s;
        scanf('%d%d%d', &op, &r, &s);
        if(op == 1)
            ans = m[r] + m[s];
        else if(op == 2)
            ans = m[r] - m[s];
        else if(op == 3)
            ans = m[r] * m[s];
        ans.print();
    }
    
	return 0;
}

示例

假设我们有两个矩阵 A 和 B:

矩阵 A:
1 2 3
4 5 6

矩阵 B:
7 8
9 10
11 12

加法

矩阵 A + 矩阵 B = error,因为矩阵 A 和 B 的列数不同,无法进行加法运算。

减法

矩阵 A - 矩阵 B = error,因为矩阵 A 和 B 的列数不同,无法进行减法运算。

乘法

矩阵 A * 矩阵 B =

58 64
139 154

总结

本文介绍了矩阵的基本运算(加、减、乘),并提供了相应的 C++ 代码实现。矩阵运算在很多领域中都有重要的应用,希望本文能帮助读者更好地理解和运用矩阵运算。

矩阵运算:C++ 代码实现

原文地址: http://www.cveoy.top/t/topic/fPpq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录