C++如何实现矩阵运算
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章将为大家详细讲解有关C++如何实现矩阵运算,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。利用C++实现矩阵的构造,通过运算符的重载实现矩阵的乘法、加法等。并
千家信息网最后更新 2025年01月18日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安全错误
数据库的锁怎样保障安全
信大捷安网络安全接入
江苏手机软件开发管理
数据库应用技术教程北师大
vs统计数据库数据数量
初中 网络安全 教案
杭州家教平台软件开发
棋牌 欺骗服务器
数据库主键删除
易语言数据库可以存多少条数据
全方位信息和网络安全
西安wms软件开发
短信提醒网络安全
网络安全教育演讲活动
通信网络技术服务市场
网络安全法 的迫切需要
中职计算机网络技术有用吗
落实网络安全责任制的通知
陌陌网络安全验证失败原因
分布式数据库用哪个软件
sql数据库怎么查日均数据
vs统计数据库数据数量
网络安全管理员工作总结
数据库运维工程师招聘信息
国家网络安全战略教育
徐汇区市场软件开发活动方案
cluster 数据库设计
上海喜氏互联网科技面试
随州市网络技术创业
sql连接数据库失败
安装程序不能连接到服务器