📄 inverse.c
字号:
#include "math.h"
int inverse(
const Matrix a,
Matrix b,
int m)
{
Matrix w;
int i,j,k;
int is[size];
int js[size];
double fmax;
for(i=0;i<m;i++)
for(j=0;j<m;j++)
w[i][j]=a[i][j];
for(k=0;k<m;k++)
{
//-------------------选主元----------------------------------------------------
fmax=0.0;
for(i=k;i<m;i++)
for (j=k;j<m;j++)
{
const double f=fabs(w[i][j]);
if(f>fmax)
{
fmax=f;
is[k]=i;
js[k]=j;
}
}
//--------------------------------------------------------------------------------
//--------------------换行列------------------------------------------------------
if(fmax<0.000100)
return(0);
if(is[k]!=k)
for(i=0;i<m;i++)
swap(&w[is[k]][i],&w[k][i]);
if(js[k]!=k)
for(i=0;i<m;i++)
swap(&w[i][js[k]],&w[i][k]);
//----------------------------------------------------------------------------------
//--------第一步--------------------------------------------------------------------
w[k][k]=1.0f/w[k][k];
//--------第二步--------------------------------------------------------------------
for(j=0;j<m;j++)
{
if(j!=k)
w[k][j]*=w[k][k];
}
//--------第三步--------------------------------------------------------------------
for(i=0;i<m;i++)
{
if(i!=k)
{
for(j=0;j<m;j++)
{
if(j!=k)
w[i][j]=w[i][j]-w[i][k]*w[k][j];
}
}
}
//--------第四步---------------------------------------------------------------------
for(i=0;i<m;i++)
{
if(i!=k)
w[i][k]*=-w[k][k];
}
}
//------------------------------------------------------------------------------------
//-----换回---------------------------------------------------------------------------
for(k=m-1;k>=0;k--)
{
if(js[k]!=k)
for(i=0;i<m;i++)
swap(&w[k][i],&w[js[k]][i]);
if(is[k]!=k)
for(i=0;i<m;i++)
swap(&w[i][k],&w[i][is[k]]);
}
for(i=0;i<m;i++)
for(j=0;j<m;j++)
b[i][j]=w[i][j];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -