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

📄 逆矩阵.cpp

📁 高斯赛德尔全主元逆矩阵
💻 CPP
字号:

//全主元矩阵求逆程序

# include<iostream.h>
# include<math.h>
# include<malloc.h>


double **a;
int row;

 
   void divn(double **a,int row )
{
	int* is;
	int *js;
	js=new int[row];
	is=new int[row];
	for(int m=0;m<row;m++)
		is[m]=js[m]=m;
	double d=0;
	for(int k=0;k<row;k++)
	{
		
		for(int i=k;i<row;i++)
		{
			for(int j=k;j<row;j++)
			{
				if(fabs(a[i][j])>d)
				{
					d=fabs(a[i][j]);
					is[k]=i;
					js[k]=j;
				}
			}
		}
		if(d+1.0==1.0)
		{
			cout<<"矩阵求逆失败,无逆矩阵!"<<endl;
			return;
		}
		if(is[k]!=k)
		{   double mi;
			for(int j=0;j<row;j++)
			{
				mi=a[k][j];
				a[k][j]=a[is[k]][j];
				a[is[k]][j]=mi;
			}

		}
		if(js[k]!=k)
		{
			double mi;
			for(i=0;i<row;i++)
			{
                mi=a[i][k];
				a[i][k]=a[i][js[k]];
				a[i][js[k]]=mi;
			}
				
		}
		a[k][k]=1/a[k][k];
		for(int j=0;j<row;j++)
		{
			if(j!=k)
				a[k][j]=a[k][j]*a[k][k];
		}
		for(i=0;i<row;i++)
		{
			if(i!=k)
			{
				for(j=0;j<row;j++)
				{
					if(j!=k)
						a[i][j]=a[i][j]-a[i][k]*a[k][j];
				}
			}
		}
		for(i=0;i<row;i++)
		{
			if(i!=k)
				a[i][k]=-a[i][k]*a[k][k];
		}
	}
	for(k=row-1;k>=0;k--)
	{
		double mi;
		for(int j=0;j<row;j++)
		{
			if(js[k]!=k)
			{
				mi=a[k][j];
				a[k][j]=a[js[k]][j];
				a[js[k]][j]=mi;
			}


		}
		for(int i=0;i<row;i++)
		{
			if(is[k]!=k)
			{
				mi=a[i][k];
                a[i][k]=a[i][is[k]];
				a[i][is[k]]=mi;
			}
		}
	

	}
		if(d=0)
		{
			cout<<"error"<<endl;
		}
		else
		{
			cout<<"得到的逆矩阵为: "<<endl;
    	for(int i=0;i<row;i++)
			{
				for(int j=0;j<row;j++)
				{
					cout<<a[i][j]<<' ';
				}
				cout<<endl;
			}
		}
		
}  



void main()
{
	cout<<"请输入矩阵的维数: ";
	
	cin>>row;
	a=(double**)malloc(row*sizeof(double*));
	for(int i=0;i<row;i++)
		a[i]=(double*)malloc(row*sizeof(double));
	cout<<"请输入矩阵的元素: "<<endl;
	
	   
	for( i=0;i<row;i++)
	{
		for(int j=0;j<row;j++)
		{
			int get;
			cin>>get;
			a[i][j]=get;
		}
	}
	cout<<endl;
	cout<<"你输入的矩阵为: "<<endl;
	for( i=0;i<row;i++)
	{
		for(int j=0;j<row;j++)
		{
			cout<<a[i][j]<<' ';
		}
		cout<<endl;
	}
	divn(a,row);
	

}

⌨️ 快捷键说明

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