C++如何实现矩阵运算
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章将为大家详细讲解有关C++如何实现矩阵运算,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。利用C++实现矩阵的构造,通过运算符的重载实现矩阵的乘法、加法等。并
千家信息网最后更新 2025年11月14日C++如何实现矩阵运算
这篇文章将为大家详细讲解有关C++如何实现矩阵运算,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
利用C++实现矩阵的构造,通过运算符的重载实现矩阵的乘法、加法等。并且实现矩阵形状的打印,矩阵的打印。
#include#include #include #include using namespace std;class Matrix{ public: Matrix(int row, int col); //构造函数 Matrix(int row, int col, int num);//构造函数重载 ~Matrix(); //析构函数 Matrix(const Matrix & other); //赋值函数 Matrix operator*(const Matrix& other); //矩阵相乘 Matrix operator+(const Matrix& other); //矩阵相加 Matrix operator-(const Matrix& other); //矩阵相减 int **a = nullptr; //初始化一共空指针 int row, col; void shape(); //打印矩阵形状 void Ma_pri(); //打印矩阵};int main(){ Matrix a(2,1); //构造一个(2,1)矩阵 Matrix b(1,2); //构造一个(1,2)矩阵 a.a[0][0] = 4; //初始化矩阵 a.a[1][0] = 2; b.a[0][0] = 3; b.a[0][1] = 5; a.shape(); //矩阵形状打印 b.shape(); Matrix c = a*b; //矩阵相乘 c.shape(); c.Ma_pri(); //矩阵打印 Matrix d(3,3,1); d.Ma_pri(); system("pause"); return 0;}Matrix::Matrix(int row, int col){ this->row = row; this->col = col; this->a = new int*[row]; for(int i=0;i row;i++){ a[i] = new int[this->col]; }}Matrix::Matrix(int row, int col, int num){ this->row = row; this->col = col; this->a = new int*[row]; for(int i=0;i row;i++){ a[i] = new int[this->col]; } for(int i = 0; i < this->row; i++){ for(int j =0; j row; j++){ this->a[i][j] = num; } }}Matrix::~Matrix(){ for(int i=0;i row;i++){ if(a[i] != nullptr){ delete[] a[i]; a[i] = nullptr; } } if(a != nullptr){ delete[] a; a = nullptr; }}Matrix::Matrix(const Matrix& other){ row = other.row; col = other.col; a = new int*[row]; for(int i=0;i col != other.row){ cout<<"shape error"<
row,other.col); for(int i=0; i row; i++){ for(int j=0;j col;k++){ sum += this->a[i][k] * other.a[k][j]; } m.a[i][j] = sum; } } return m;}Matrix Matrix::operator+(const Matrix& other){ if(this->col != other.col or this->row != other.row){ cout<<"shape error"< row,this->col); for(int i = 0;i < this->row; i++){ for(int j = 0; j < this-> col; j++){ m.a[i][j] = this->a[i][j] + other.a[i][j]; } } return m;}Matrix Matrix::operator-(const Matrix& other){ if(this->col != other.col or this->row != other.row){ cout<<"shape error"< row,this->col); for(int i = 0;i < this->row; i++){ for(int j = 0; j < this-> col; j++){ m.a[i][j] = this->a[i][j] - other.a[i][j]; } } return m;}void Matrix::shape(){ cout<<"("< row<<","< col<<")"< row; i++){ for(int j =0; j row; j++){ cout< a[i][j]<<" "; } cout< 矩阵求逆算法及程序实现
在做课题时,遇到了求多项式问题,利用了求逆方法。矩阵求逆一般使用简单的算法,还有快速算法 如全选主元高斯-约旦消元法,但本文程序主要写了简单的矩阵求逆算法定义法之伴随矩阵求逆公式如下,其中A可逆:A^{-1}=\frac{A^*}{|A|},其中A^*是A的伴随矩阵。。
1.给定一个方阵,非奇异(不是也可,程序有考虑);
2.由矩阵得到其行列式,求其值如|A|;
3.求其伴随矩阵A^*;
4.得到其逆矩阵。
主要函数如下:
//得到给定矩阵src的逆矩阵保存到des中。bool GetMatrixInverse(double src[N][N],int n,double des[N][N]){ double flag=getA(src,n); double t[N][N]; if(flag==0) { return false; } else { getAStart(src,n,t); for(int i=0;i计算|A|:
//按第一行展开计算|A|double getA(double arcs[N][N],int n){ if(n==1) { return arcs[0][0]; } double ans = 0; double temp[N][N]={0.0}; int i,j,k; for(i=0;i=i)?k+1:k]; } } double t = getA(temp,n-1); if(i%2==0) { ans += arcs[0][i]*t; } else { ans -= arcs[0][i]*t; } } return ans;} 计算伴随矩阵:
//计算每一行每一列的每个元素所对应的余子式,组成A*void getAStart(double arcs[N][N],int n,double ans[N][N]){ if(n==1) { ans[0][0] = 1; return; } int i,j,k,t; double temp[N][N]; for(i=0;i=i?k+1:k][t>=j?t+1:t]; } } ans[j][i] = getA(temp,n-1); if((i+j)%2 == 1) { ans[j][i] = - ans[j][i]; } } }} 关于"C++如何实现矩阵运算"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
矩阵
函数
算法
j++
C++
运算
形状
程序
篇文章
m.a
一行
更多
a.a
b.a
不错
实用
奇异
乘法
元素
公式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库有4nf吗
杭州网络安全保障
船舶数据库更新
联合成功网络技术有限公司
大学二级学院网络安全责任制细则
网络安全巅峰技术是什么
服务器安装安全狗有必要吗
95女想转行软件开发
更换蓄电池 网络安全
数据库与文件系统
软件测试和软件开发选哪个好
云服务器安全组该如何设置
服务器装2个数据库
node.js部署到云服务器
网络安全与道德内容
加强网络安全保护的视频
2017三级网络技术考纲
服务器管理器功能灰色
网言网语网络安全
网络安全招商
2020年网络安全大事件
苹果app网页封装软件开发
交行软件开发中心有员工宿舍
网络安全不能干的太认真
网络安全应急专家推荐
网络安全角度看薇娅
计算机网络软件开发专业如何
物理网数据库
西安天一网络技术有限公司
北邮网络安全领导小组