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

📄 matrix.cpp

📁 实现矩阵的各种操作
💻 CPP
字号:
// matrix.cpp: implementation of the matrix class.
//
//////////////////////////////////////////////////////////////////////

#include "matrix.h"
#include "iostream.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

matrix::matrix()
{

}

matrix::~matrix()
{
	for(int i=0;i<n;i++)
		delete []x;
	delete x;

 
}

matrix::matrix(int a, int b)
{
	m=a;
	n=b;
	x=new double *[n];
	for(int i=0;i<m;i++)
		x[i]=new double [m];
}

void matrix::input()
{
	cout<<"输入矩阵的"<<m*n<<"个元素:\n";
	for(int i=0;i<m;i++)
		for (int j=0;j<n;j++)
			cin>>x[i][j];
}

void matrix::output()
{

	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
			cout<<x[i][j]<<" ";
		cout<<endl;
	}
}
matrix & matrix::operator=(matrix &oth)
{
	if(m==oth.m&&n==oth.n)
		for(int i=0;i<m;i++)
			for (int j=0;j<n;j++)
				x[i][j]=oth.x[i][j];

    else
		cout<<"matrix don't match!\n";
	return *this;
}

matrix & matrix::operator +(matrix &oth)
{
	if(m==oth.m&&n==oth.n)
	{
		matrix *res=new matrix(m,n);
		for(int i=0;i<m;i++)
			for (int j=0;j<n;j++)
				res->x[i][j]=x[i][j]+oth.x[i][j];
         return *res;
    	}
	else
	{	cout<<"matrix don't match!!\n";
	    return *this;
	}
}

matrix & matrix::operator -(matrix &oth)
{
	if(m==oth.m&&n==oth.n)
	{
		matrix *res=new matrix(m,n);
		for(int i=0;i<m;i++)
			for (int j=0;j<n;j++)
				res->x[i][j]=x[i][j]+oth.x[i][j];
         return *res;
    	}
	else
	{	cout<<"matrix don't match!!\n";
	    return *this;
	}
}
matrix & matrix::operator *(matrix &oth)
{
	if(m==oth.m&&n==oth.n)
	{
		matrix *res=new matrix(m,n);
		for(int i=0;i<m;i++)
			for (int j=0;j<n;j++)
			{
				res->x[i][j]=0;
				for(int k=0;k<n;k++)
				   res->x[i][j]+=x[i][k]*oth.x[k][j];
			}
         return *res;
    	}
	else
	{	cout<<"matrix don't match!!\n";
	    return *this;
	}
}

matrix & matrix::zhuanzhi()
{	  
	    cout<<"矩阵的转置矩阵为:\n";
		matrix *res=new matrix(n,m);
		for(int i=0;i<n;i++)
			for (int j=0;j<m;j++)
				res->x[i][j]=x[j][i];
			return *res;
}
            

double matrix::surplus()/*求矩阵行列式*/ 
{
     int i,j,k,p,r; 
     double X,temp=1,temp1=1,s=0,s1=0; 
     
     if(n==2) 
     {
		 for(i=0;i<m;i++)
			 for(j=0;j<n;j++)
				 if((i+j)%2) temp1*=x[i][j]; 
				 else temp*=x[i][j]; 
     
				 X=temp-temp1;
	 } 
     else
	 {
		for(k=0;k<n;k++)
		{
			 for(i=0,j=k;i<m,j<n;i++,j++) 
                  temp*=x[i][j]; 
             if(m-i) 
			 {
			  for(p=m-i,r=m-1;p>0;p--,r--) 
                  temp*=x[r][p-1];
			 } 
             s+=temp; 
             temp=1; 
     } 
     
     for(k=n-1;k>=0;k--) 
	 {
		 for(i=0,j=k;i<m,j>=0;i++,j--) 
            temp1*=x[i][j]; 
		 if(m-i)
		 {
			 for(p=m-1,r=i;r<m;p--,r++) 
                temp1*=x[r][p];
		 } 
         s1+=temp1; 
         temp1=1; 
	 } 
     
     X=s-s1;
	 } 
	 return X; 
}

matrix & matrix::ni()
{
	matrix *c=new matrix(m,m);
	double x=surplus();
		
		if(x==0)
			return *this;
	     
		for(int i=0;i<m-1;i++)
			for(int j=0;j<m-1;j++)
			{
				int k,l;
			    matrix	*b=new matrix(m-1,m-1);
				for( k=0;k<i-1;k++)
					for( l=0;l<j-1;l++)
						b->x[k][l]=this->x[k][l];
				for( k=0;k<i-1;k++)
					for(  l=i-1;l<m-1;l++)
					   b->x[k][l]=this->x[k][l+1];
				for( k=i-1;k<m-1;k++)
					for( l=0;l<j-1;l++)
						b->x[k][l]=this->x[k+1][l];
				for( k=i-1;k<m-1;k++)
					for( l=j-1;l<m-1;l++)
						b->x[k][l]=this->x[k+1][l+1];
                c->x[j][i]=1/x*b->surplus();
              delete b;
			}

			return *c;


}

⌨️ 快捷键说明

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