⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matclass.cpp

📁 普通平差程序
💻 CPP
字号:
#include <stdlib.h>
#include <math.h>

class MAT
{        
	
    public:
        MAT();	
		MAT(int hang,int lie);
 MAT convert();
		~MAT();
		int row;
		int rank; 

		double *elem;	
       	void print();//print out the Max
		void input();
        void input1();
	private:
		char *name; 
};
void MAT::input()
{
	cout<<"input the elements of this mat:"<<endl;
	for(int i=0;i<row*rank;i++)
		cin>>elem[i];

}
void MAT::input1()
{
	for(int i=0;i<row*rank;i++)
		this->elem[i]=1;

}
MAT::MAT()
{
}

void MAT::print()
{
		for(int i=0;i<row;i++)
	{
		for(int j=0;j<rank;j++)
		cout<<" "<<*(elem+i+j+i*(rank-1));
		cout<<endl;}
}


MAT::MAT(int hang,int lie)
{//1.input the number of row and rank
   	row=hang;
   	rank=lie;
//2.input the elements of the Mat
	elem=new double[hang*lie];

	for(int i=0;i<row*rank;i++)
		elem[i]=0;
//			
		
}
MAT::~MAT()
{
	;
}

MAT MAT::convert()
{
	MAT B;
	B.row=rank;
	B.rank=row;
	B.elem=new double[B.row*B.rank];
	  for(int i=0;i<B.rank;i++)
     for(int j=0;j<B.row;j++)
		{
		 int k=i+j+j*(B.rank-1);
		 B.elem[k]=*(elem+i+j+i*(B.row-1));
	 
	 }
 return B; 
}
int tim(MAT A,MAT B,MAT C)
{   int i;  	
	if(A.rank!=B.row) return 0;
    
		 for(i=0;i<(C.row*C.rank);i++) C.elem[i]=0;
		for(i=0;i<C.row;i++)
		for(int j=0;j<C.rank;j++)
				for(int k=0;k<B.row;k++)
					C.elem[i+j+i*(C.rank-1)]+=A.elem[i+k+i*(A.rank-1)]*B.elem[k+j+k*(B.rank-1)];
		return 1;

}
//*********矩阵求逆函数定义:***************
	//函数说明:
	//1 MAX定义矩阵最大维数;
	//2 形参C[][]为输入矩阵,B[][]为输出矩阵
	//3 矩阵可逆,返回值为1/否则,返回值为-1;
int inverse(MAT C,MAT B)
{
	MAT A(C.row,C.row);
double b,js(0);
int m, i,j,k;
if(C.row!=C.rank) return 0;
m=C.row;
for(i=0;i<m;i++)
 for(j=0;j<m;j++)
 {
	 	A.elem[i+j+i*(A.rank-1)]=C.elem[i+j+i*(C.rank-1)]; 
     if(i==j)	B.elem[i+j+i*(B.rank-1)]=1;
	 else 	B.elem[i+j+i*(B.rank-1)]=0;
 }
	for(i=0;i<m;i++)
       { 
		  if(A.elem[i+i+i*(A.rank-1)]==0)
		    for(int l=i+1;l<m;l++)
			{if(A.elem[l+i+l*(A.rank-1)]!=0)
							{
								for(int k1=0;k1<m;k1++)
                                {A.elem[i+k1+i*(A.rank-1)]+=A.elem[l+k1+k1*(A.rank-1)];B.elem[i+k1+i*(B.rank-1)]+=B.elem[l+k1+l*(B.rank-1)];}
								goto BB;
			}}
			  	  
								  
BB:	        for(j=0;j<m;j++)  
			{
		  b=A.elem[j+i+j*(A.rank-1)]/A.elem[i+i+i*(A.rank-1)];
	    for(k=0;k<m;k++) 
			  if(i!=j) 
			  { 
				A.elem[j+k+j*(A.rank-1)]-=b*A.elem[i+k+i*(A.rank-1)];
				B.elem[j+k+j*(B.rank-1)]-=b*B.elem[i+k+i*(B.rank-1)];
			  }
			}
	  }
	  for(i=0;i<m;i++)
	  {
		  b=A.elem[i+i+i*(A.rank-1)]; 
		  if(fabs(b)<0.000000001) goto ss;
         for(j=0;j<m;j++)
		 {
            A.elem[i+j+i*(A.rank-1)]/=b; 
			B.elem[i+j+i*(B.rank-1)]/=b;	  
		 }
	  } 
	  
 return 1; 
ss:return 0; 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -