📄 逆矩阵.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 + -