对于矩阵而言,我们首先要学习他的基本概念,其次就如同学习常规数字一样需要掌握基本的加减乘,再者,更具相关的概念学会求诸如秩,点阵,矩阵运算值等,接着学习一些特殊的矩阵操作,如矩阵的翻转,最后这些概念完善之后,请开始学习诸如矩阵的卷积核运算,稀疏矩阵,增广矩阵等这些特殊的矩阵。

1. 矩阵加法

运算规则,将两个矩阵的每一行每一列进行对齐,再直接进行元素间的相加,如a11和b11相加,详情参考图,如:


设矩阵,矩阵A矩阵B


矩阵相加


简言之,两个矩阵相加,即它们相同位置的元素相加!

注意:只有对于两个行数、列数分别相等的矩阵(即同型矩阵),加减法运算才有意义,即加减运算是可行的.同时,对于加法而言,A+B与B+A是没有什么不同的,他们的结果运算是一样的,详情可以参考代码:

#include<iostream>
using namespace std;
const int maxn=505;
int a[maxn][maxn]; 
int b[maxn][maxn]; 
int ans[maxn][maxn];
 
int main(){
    //矩阵加法
    int n,m;
    cin >>n>>m;
 
    //输入a 
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin >>a[i][j];
        }
    }
    //输入b 
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin >>b[i][j];
        }
    }
    //相加 
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            ans[i][j]=a[i][j]+b[i][j];
        }
    }
    //输出
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cout<<ans[i][j]<<' ';
        }
        cout<<endl;
    }
 
    return 0;
}

2. 矩阵减法

通上文,简言之,两个矩阵相减,即它们相同位置的元素相减!

对于上文而言,我们只需要在算法中将符号+替换成符号-进行减法运算即可。

简言之,两个矩阵相加减,即它们相同位置的元素相加减!

#include<iostream>
using namespace std;
const int maxn=505;
int a[maxn][maxn]; 
int b[maxn][maxn]; 
int ans[maxn][maxn];
 
int main(){
    //矩阵加法
    int n,m;
    cin >>n>>m;
 
    //输入a 
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin >>a[i][j];
        }
    }
    //输入b 
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin >>b[i][j];
        }
    }
    //相减
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            ans[i][j]=a[i][j]-b[i][j];
        }
    }
    //输出
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cout<<ans[i][j]<<' ';
        }
        cout<<endl;
    }
 
    return 0;
}

3.练习:将加减乘除写一个简单的类

从C一路学习到C++,我们了解了面向对象的设计思路,那么,就让我们结合上一节学习的乘除法,设计一个简单的矩阵运算类,这样的设计,有助于以后的多次使用。

要求,(一阶段)在自己的电脑上使用C++编程软件,设计一个类,其中要保证可以输入两个矩阵,然后设计类的方法,方法包括实现加减乘等基本运算,可以使用符号重载的方式进行优化实现。

(二阶段)可以扩展一些其余的快速算法,如矩阵的幂运算(多个矩阵相乘)乃至快速幂运算(利用特殊的计算机技巧进行快速多矩阵相乘)。


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)