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

📄 nizhen.c

📁 这是求矩阵逆的一种方法的源代码.用的是代数余子式求的
💻 C
字号:
#include<stdio.h>
#include<math.h>
double Z[4][4];   /*定义一个全局二维数组用来存放N-1阶余子式,因为A的伴随矩阵除以|A|时会产生小数,因此定义成float而非int*/ 
double R[4][4];
double daishu(double *p,int n);
void bansui(double Z[4][4],double R[4][4]);
/////////////////////////////////////////////
void main() 
{
	double w[4][4]; 
	int m=4,i,j; 
	double r;
	memset(w,0,sizeof(w));
	memset(R,0,sizeof(R));
	Z[0][0]=1;Z[0][1]=1;Z[0][2]=1;Z[0][3]=1;
	Z[1][0]=0;Z[1][1]=1;Z[1][2]=1;Z[1][3]=1;
	Z[2][0]=0;Z[2][1]=0;Z[2][2]=1;Z[2][3]=1;
	Z[3][0]=0;Z[3][1]=0;Z[3][2]=0;Z[3][3]=1;
	
	r=daishu(&Z[0][0],m); 
//	printf("%f\n",r);
	bansui(Z,R);  /*调用n_1()函数*/ 
    for(i=0;i<m;i++)    /*打印A的逆矩阵*/ 
	{
		for(j=0;j<m;j++) 
		{
			w[i][j]=R[i][j]/r;
//			printf("%f\t",w[i][j]);
		} 
//		printf("\n");
	}	 
	
}
double daishu(double *p,int n)               /*计算行列式的函数*/ 
{
	int k=0,i,s2=0,s1=0,j,s,t; 
	for(j=0;j<n;j++) 
	{ 
		k=j;t=1; 
		for(i=1;i<=n;i++) /*对角线元素乘积*/
		{ 
			t=t*p[k]; 
			if ((k+1)%n==0) k=k+1; 
			else  k=k+n+1; 
		} 
		s1=s1+t;     /*对角线乘积求和*/
	} 
	for(j=0;j<n;j++) 
   	{ 
		k=j;t=1; 
		for(i=1;i<=n;i++) 
		{ 
			t=t*p[k]; 
			if(k%n==0) k=k+(2*n-1); 
			else k=k+(n-1); 
		} 
		s2=s2+t; 
   	} 
	s=s1-s2; 
	return s; 
} 
/////////////////////////////////////////////////////
void bansui(double Z[4][4],double R[4][4])      /*把除第i行j列后的N-1阶矩阵的每个元素赋给一维数组d[]的函数*/ 
{
	int i,j,e,f,l,m,k,t;
	double q[3][3];
	double y[4][4];
	double tt;
	//double daishu(int *p,int n);   
	memset(q,0,sizeof(q));
	memset(y,0,sizeof(y));
	for(i=0;i<4;i++) 
   	{
		l=i; 
		for(j=0;j<4;j++) 
		{
			m=j;
			k = 0;
			for(e=0;e<4;e++) 
			{
				t = 0;
				if(e==l) 
					continue; 
				for(f=0;f<4;f++) 
				{ 
					if(f==m) 
						continue; 
					q[k][t] = Z[e][f];
					t++;
				}
				k++;
			} 
			/*每得到一个一维数组d[]的值,便调用JS()函数,得到除第i行j列后的N-1阶矩阵的行列式的值,也即是余子式M[j]*/ 
			tt=daishu(&q[0][0],3);
			R[m][l]=tt*pow((-1),(l+m)); /*并把余子式的值存放在全局二维数组z[]中*/ 
		} 
   	} 
}

⌨️ 快捷键说明

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