• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C++矩阵运算的实现简单

c++ 搞代码 4年前 (2022-01-06) 136次浏览 已收录 0个评论
文章目录[隐藏]

本文主要介绍了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<p style="color:transparent">来源gao!%daima.com搞$代*!码网</p>; 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;irow;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;irow;i++){ a[i] = new int[this->col]; } for(int i = 0; i row; i++){ for(int j =0; j row; j++){ this->a[i][j] = num; } } } Matrix::~Matrix(){ for(int i=0;irow;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;icol != other.row){ cout<<"shape error"<row,other.col); for(int i=0; irow; i++){ for(int j=0;j<other.col;j++){ int sum = 0; for(int k=0;kcol;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 row; i++){ for(int j = 0; j  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 row; i++){ for(int j = 0; j  col; j++){ m.a[i][j] = this->a[i][j] - other.a[i][j]; } } return m; } void Matrix::shape(){ cout<<"("<row<<","<col<<")"<<endl; } void Matrix::Ma_pri(){ for(int i = 0; i row; i++){ for(int j =0; j row; j++){ cout<a[i][j]<<" "; } cout<<endl; } } 

矩阵求逆算法及程序实现

 在做课题时,遇到了求多项式问题,利用了求逆方法。矩阵求逆一般使用简单的算法,还有快速算法 如全选主元高斯-约旦消元法,但本文程序主要写了简单的矩阵求逆算法定义法之伴随矩阵求逆公式如下,其中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<n;i++) { for(int j=0;j<n;j++) { des[i][j]=t[i][j]/flag; } } } return true; }

计算|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<n;i++) { for(j=0;j<n-1;j++) { for(k=0;k=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<n;i++) { for(j=0;j<n;j++) { for(k=0;k<n-1;k++) { for(t=0;t=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++矩阵运算的实现简单的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C++矩阵运算的实现简单

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址