www.pudn.com > matrixe.rar > Cmatrix.cpp
#include#include class Cmatrix { public: Cmatrix(); Cmatrix(int i,int j,double a[]); ~Cmatrix(); //void SetA(int,int,double );//设置矩阵元素值 //void SetA(double B[]);//矩阵整体赋值 double getA(int,int);//得到矩阵元素 int getH(); int getL(); double* getpt(); double getHL_value();//计算行列式的值 Cmatrix inv();//求逆 void setpt(double*);//设置矩阵元素值 Cmatrix T();//转置 //重载操作符 Cmatrix operator =(Cmatrix); Cmatrix operator *(Cmatrix); Cmatrix operator +(Cmatrix); Cmatrix operator -(Cmatrix); private: int H; //矩阵行数 int L;//矩阵列数 double* pt;//矩阵的值,以一维数组的形式存放 }; Cmatrix::Cmatrix() { H=0; L=0; pt=NULL; } Cmatrix::Cmatrix(int i,int j,double a[]) { H=i; L=j; pt=a; } Cmatrix::~Cmatrix() { } void Cmatrix::setpt(double* p) { pt=p; } double* Cmatrix::getpt() { return pt; } int Cmatrix::getH() { return H; } int Cmatrix::getL() { return L; } double Cmatrix::getA(int i,int j) { //return *(pt+(i-1)*H+(j-1)); return pt[(i-1)*H+(j-1)]; } Cmatrix Cmatrix::operator =(Cmatrix x) { delete []pt; pt=new double[x.getH()*x.getL()]; long i; for (i=0;i max) { max=fabs(p[s*H+i]); maxid=s; } } if(max==0) return 0; if(maxid!=i) { flag=flag*(-1); for(n=i;n<=H-1;n++) { temp=p[maxid*H+n]; p[maxid*H+n]=p[i*H+n]; p[i*H+n]=temp; } } for(j=i+1;j<=H-1;j++) { a=-p[j*H+i]/p[i*H+i]; for(k=i;k<=H-1;k++) { p[j*H+k]=p[j*H+k]+a*p[i*H+k]; } } } for(i=0;i<=H-1;i++) { num=num*p[i*H+i]; } delete []p; return flag*num; } Cmatrix Cmatrix::inv() { int i,j,k,n; int chax=0,chay=0; double add; double *p; double *q; p=new double[H*H]; q=new double[(H-1)*(H-1)]; Cmatrix temp1(H,H,NULL); Cmatrix temp2(H-1,H-1,NULL); add=1/this->getHL_value(); for(k=0;k