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

📄 ma.cpp

📁 该代码通过初等变换的形式实现了N阶方矩阵的求逆运算
💻 CPP
字号:
#include<iostream.h>
#include<iomanip.h>
#include<stdlib.h>
#include<math.h>
double det(double **p,int n)
{
	int i,j,k;
	double m,max,detp=1;
	if(n==1)
		return p[0][0];
	else
	{
		for(i=0;i<n;i++)
		{ 
			max=p[i][i];
			k=i;
			for(j=i+1;j<n;j++)
				if(fabs(max)<fabs(p[j][i]))
				{  max=p[i][j];
				   k=j;
				   detp*=-1;
				}
				for(j=i;j<n;j++)
					
				{  
					max=p[k][j];
					p[k][j]=p[i][j];
					p[i][j]=max;
				}
				m=p[i][i];
				for(j=i;j<n;j++)
					p[i][j]=p[i][j]/m;
				detp*=m;
				for(j=i+1;j<n;j++)
				{ 
					m=p[j][i];
				    for(k=i;k<n;k++)
					   p[j][k]=p[j][k]-m*p[i][k];
				}
		}
		for(i=0;i<n;i++)
				detp*=p[i][i];
		if(fabs(detp)<0.0000001)
			return 0;
		else
		    return detp;
	}
}
void main()
{
	int i,j,k,size;
	double m,temp;
    double **a;
	double **b;
	
	cout<<"请输入矩阵的阶数:\n";
	cin>>size;
	a=new double*[size];
	for(i=0;i<size;i++)
		a[i]=new double[size];

	b=new double*[size];
	for(i=0;i<size;i++)
		b[i]=new double[size];


	cout<<"请输入矩阵("<<size*size<<"个数):\n";
	for(i=0;i<size;i++)
	{
		for(j=0;j<size;j++)
			cin>>a[i][j];
	}
	cout<<"原矩阵为:\n";
	for(i=0;i<size;i++)
	{  
		for(j=0;j<size;j++)
			cout<<setw(12)<<a[i][j];
		cout<<endl;
	}



     for(i=0;i<size;i++)
	 {
		 for(j=0;j<size;j++)
		 {
			 b[i][j]=a[i][j];
		 }
		 for(j=size;j<2*size;j++)
		 {
			 if((i+size)==j)
				 b[i][j]=1;
			 else
				 b[i][j]=0;
		 }
	 }

    
	cout<<"求逆过程:\n";
	for(i=0;i<size;i++)
	{  
		for(j=0;j<2*size;j++)
			cout<<setw(12)<<b[i][j];
		cout<<endl;
	}
	cout<<"\n";
	cout<<"\n";

	for(i=0;i<size;i++)
	{ 
		m=b[i][i];
		for(j=i;j<size*2;j++)
			b[i][j]/=m;
		for(j=i+1;j<size;j++)
		{ 
			m=b[j][i];
			for(k=i;k<size*2;k++)
				b[j][k]=b[j][k]-m*b[i][k];
		}
	}
	for(i=0;i<size;i++)
	{  
		for(j=0;j<2*size;j++)
			cout<<setw(12)<<b[i][j];
		cout<<endl;
	}
	cout<<"\n";
	cout<<"\n";

	for(i=size-1;i>=0;i--)
	{ 
		m=b[i][i];
		for(j=i-1;j>=0;j--)
		{ 
			m=b[j][i];
			for(k=i;k<size*2;k++)
				b[j][k]=b[j][k]-m*b[i][k];
		}
	}
	for(i=0;i<size;i++)
	{  
		for(j=0;j<2*size;j++)
			cout<<setw(12)<<b[i][j];
		cout<<endl;
	}

	cout<<"逆矩阵为:\n";
	for(i=0;i<size;i++)
	{  
		for(j=size;j<size*2;j++)
			cout<<setw(12)<<b[i][j];
		cout<<endl;
	}	
}

⌨️ 快捷键说明

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