c语言实现矩阵的加减乘除求逆运算.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-datec语言实现矩阵的加减乘除求逆运算c语言实现矩阵的加减乘除求逆运算#include<stdio.h>#include<stdlib.h>#define col 3#define row 3class matrix/类的定义private:double mcolrow;/矩阵设置为私有的,public:matrix()/无参数的构造函数matrix(double acolrow);/有参数的构造函数matrix Add(matrix &b);/加法运算声明matrix Sub(matrix &b);/减法运算声明matrix Mul(matrix &b);/乘法运算声明matrix Div(matrix &b);/除法运算声明matrix Inverse();/求逆运算声明matrix();/析构函数声明void display();/显示函数声明;matrix:matrix(double acolrow)/构造函数的定义int i,j;for(i=0;i<col;i+)for(j=0;j<row;j+)mij=aij;matrix matrix:Add(matrix &b)/加法运算int i,j;matrix*c=(matrix*)malloc(sizeof(matrix);for(i=0;i<col;i+)for(j=0;j<row;j+)c->mij=mij+b.mij;return(*c);matrix matrix:Sub(matrix &b)/减法运算int i,j;matrix*c=(matrix*)malloc(sizeof(matrix);for(i=0;i<col;i+)for(j=0;j<row;j+)c->mij=mij-b.mij;return *c;matrix matrix:Mul(matrix &b)/乘法运算int i,j,k;double sum=0;matrix*c=(matrix*)malloc(sizeof(matrix);for(i=0;i<col;i+)for(j=0;j<row;j+)for(k=0;k<row;k+)sum+=mik*(b.mkj);c->mij=sum;sum=0;return(*c);matrix matrix:Div(matrix &b)/除法运算/除法直接求解,参见主函数matrix c;return(c);matrix matrix:Inverse()/求逆运算 /参考博客:int i,j,k,M=col,N=2*col;double bcolcol*2;matrix*c=(matrix*)malloc(sizeof(matrix);for(i=0;i<M;i+) /赋值 for(j=0;j<M;j+) bij=mij; for(i=0;i<M;i+) /扩展 for(j=M;j<N;j+) if(i=(j-M) bij=1; else bij=0; /*下面进行求逆运算*/for(i=0;i<M;i+) if(bii=0) for(k=i;k<M;k+) if(bki!=0) /作者的博客里面此处为bkk,貌似是不正确的, /因为这对比如说是0,0,1,1,0,1,0,1,1的矩阵就会判断为不可逆, /而实际上该矩阵是可逆的,这里应该是作者笔误,待进一步求证 for(int j=0;j<N;j+) double temp; temp=bij; bij=bkj; bkj=temp; break; if(k=M)printf("该矩阵不可逆!n"); exit(0); for(j=N-1;j>=i;j-) bij/=bii; for(k=0;k<M;k+) if(k!=i) double temp=bki; for(j=0;j<N;j+) bkj-=temp*bij; /*导出结果*/for(i=0;i<M;i+) for(j=3;j<N;j+) c->mij-3=bij; return (*c);matrix:matrix()void matrix:display()int i,j;for(i=0;i<col;i+)for(j=0;j<row;j+)printf("%f ",mij);printf("n");void main()double a33=1,0,1,0,1,1,0,3,1;double b33=0,0,1,1,0,1,0,1,0;matrix ma(a),mb(b),mc;int flag;printf("-n请选择要进行的操作:n1、打印t2、加法");printf("t3、减法n4、乘法t5、除法t6、求逆n7、退出n");printf("-n");scanf("%d",&flag);while(flag=1)|(flag=2)|(flag=3)|(flag=4)|(flag=5)|(flag=6)|(flag=7)if(flag=1)printf("矩阵a为:n");ma.display();printf("矩阵b为:n");mb.display();if(flag=2)/矩阵加法运算printf("矩阵加法运算结果:n");mc=ma.Add(mb); mc.display();else if(flag=3)/矩阵减法运算printf("矩阵减法运算结果:n");mc=ma.Sub(mb); mc.display();else if(flag=4)/矩阵乘法运算printf("矩阵乘法运算结果:n");mc=ma.Mul(mb);mc.display();else if(flag=5)/矩阵除法运算printf("矩阵除法运算结果:n");printf("矩阵的除法分成两类:n 1、AB=inverse(A)*B n 2、B/A=B*inverse(A)n");printf("采用第1类,则ab的结果为:n");mc=ma.Inverse();mc=mc.Mul(mb);mc.display();printf("采用第2类,则a/b的结果为:n");mc=mb.Inverse();mc=ma.Mul(mc);mc.display();else if (flag=6)/矩阵求逆运算printf("矩阵a求逆运算结果为:n");mc=ma.Inverse();mc.display();printf("矩阵b求逆运算结果为:n");mc=mb.Inverse();mc.display();else exit(0);printf("-n请选择要进行的操作:n1、打印t2、加法");printf("t3、减法n4、乘法t5、除法t6、求逆n7、退出n");printf("-n");scanf("%d",&flag);-