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;imax) 
			{ 
				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