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

📄 求逆.txt

📁 一个C语言求逆程序,可以用来给自己的程序中使用
💻 TXT
字号:
C程序 



/************************************************************************* 
* 逆矩阵法求解矩阵方程AX=B,其中A是N*N的矩阵,B是N*N矩阵 
* 输入: n----方阵A的行数 
*       a----矩阵A 
*       m----矩阵B的列数 
*       b----矩阵B 
* 输出: det----矩阵A的行列式值 
*       a----A的逆矩阵 
*       b----矩阵方程的解X 
**************************************************************************/ 
double gaussian_jodan_solve(int n,double a[N][N],int m,double b[N][M]) 
{ 
double det,f[N]; 
int i,j,k; 

det = gaussian_jodan(n,a); 
if(det==0) return (0); 
for(k=0;k<m;k++) /*做矩阵乘法AB*/ 
{ 
for(i=0;i<n;i++) 
{ 
f=0.0; 
for(j=0;j<n;j++) 
f=f+a[j]*b[j][k]; 
} 
for(i=0;i<n;i++) 
b[k]=f; 
} 
return(det); 
} 

 


调用到的求逆矩阵的子函数 

/************************************************************************* 
* 高斯--约当列主元素法求矩阵方程A的逆矩阵,其中A是N*N的矩阵 
* 输入: n----方阵A的行数 
*       a----矩阵A 
* 输出: det--A的行列式的值 
*       a----A的逆矩阵 
**************************************************************************/ 
double gaussian_jodan(int n,double a[N][N]) 
{ 
int i,j,k,mk; 
int p[N];  /*记录主行元素在原矩阵中的位置*/ 
double det,m,f; 

det = 1.0; 
for(k=0;k<n;k++) 
{ 
m=a[k][k];  /*选第K列主元素*/ 
mk=k; 
for(i=k+1;i<n;i++) 
if(fabs(m)<fabs(a[k])) 
{ 
m=a[k]; 
mk=i; 
} 
if(fabs(m)<EPS) return(0); 
if(mk!=k) 
{ 
for(j=0;j<n;j++) /*将第K列主元素换行到主对角线上*/ 
{ 
f=a[k][j]; 
a[k][j]=a[mk][j]; 
a[mk][j]=f; 
} 
p[k]=mk; 
det = -det; 
} 
else 
p[k]=k; 
det=det*m; 
for(j=0;j<n;j++)  /*计算主行元素*/ 
if(j!=k) 
a[k][j]=a[k][j]/a[k][k]; 
a[k][k]=1.0/a[k][k]; 
for(i=0;i<n;i++) /*消元*/ 
{ 
if(i!=k) 
{ 
for(j=0;j<n;j++) 
if(j!=k) 
a[j]=a[j]-a[k]*a[k][j]; 
a[k]=-a[k]*a[k][k]; 
} 
} 
} 
for(k=n-2;k>=0;k--) /*按主行在原矩阵中的位置交换列*/ 
{ 
if(p[k]!=k) 
for(i=0;i<n;i++) 
{ 
f=a[k]; 
a[k]=a[p[k]]; 
a[p[k]]=f; 
} 
} 
return(det); 
} 

 

⌨️ 快捷键说明

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