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

📄 inverse.c

📁 C语言实现的矩阵的常用计算!包括:矩阵乘法
💻 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 + -