C语言,求逆矩阵,检验两个矩阵是否互为逆矩阵

——我这里默认的是三维矩阵,如果想要求其他维数的矩阵,可以调整里面的参数,把3改成你想要求的矩阵维数即可。

求逆矩阵源代码:

#include<stdio.h>
void F(double arr1[3][3],double arr2[3][3])
{
	int i;
	int j;
	int k; 
	int g;
	double arr1tmp[3]={0};
	double arr2tmp[3]={0};
	int h;
	int m;
	double tmp; 
	for(i=0;i<3;i++)
	{
		h=i+1;
		while(arr1[i][i]==0)//找调整主元 
		{
			for(j=0;j<3;j++)
			{
				arr1tmp[j]=arr1[i][j];
				arr1[i][j]=arr1[h][j];
				arr1[h][j]=arr1tmp[j];
				arr2tmp[j]=arr2[i][j];
				arr2[i][j]=arr2[h][j];
				arr2[h][j]=arr2tmp[j];
			}
			h++;
		}
		tmp=arr1[i][i];
		for(j=0;j<3;j++)
		{
			
			arr1[i][j]=(arr1[i][j]/tmp);
			arr2[i][j]=(arr2[i][j]/tmp);
		}
			for(k=0;k<3;k++)
			{
				if(k==i)
				{
					continue;
				}
				tmp=arr1[k][i];
				for(g=0;g<3;g++)
				{
					
					arr1[k][g]=(arr1[k][g]-tmp*arr1[i][g]);
					arr2[k][g]=(arr2[k][g]-tmp*arr2[i][g]);
				}
			}
	}

}
int main()
{
	int i,j;
	double arr[3][3]={0};
	double arr_[3][3]={0};
	for(i=0;i<3;i++)
	{
		arr_[i][i]=1;//化单位矩阵 
	}
	printf("输入需要求逆的矩阵\n");
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			scanf("%lf",&arr[i][j]);//输入矩阵 
		}
	}
	F(arr,arr_);//求逆矩阵 
	printf("\n");
	printf("该矩阵的逆矩阵为:\n");
		for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			if(j==2)
			{
			printf("%lf\n",arr_[i][j]);	
			}
			else
			{
			printf("%lf ",arr_[i][j]);	
			}
			
		}
	}
	return 0;
}

实验结果 

 

判断两个矩阵是否互为逆矩阵源代码

#include<stdio.h>//检验两个矩阵是否互为逆矩阵 
int main()
{
	int n;
	int i;
	int j;
	int k;
	printf("输入矩阵维数:\n");
	scanf("%d",&n);
	double arr1[n][n];
	double arr2[n][n]; 
	double arr3[n][n]={0};
	int check=1;
	printf("输入矩阵1:\n");
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%lf",&arr1[i][j]);
		}
	}
	printf("输入矩阵2:\n");
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%lf",&arr2[i][j]);
		}
	}
	for(k=0;k<n;k++)
	{
		for(i=0;i<n;i++)
		{
			for(j=0;j<n;j++)
			{
				arr3[i][k]+=arr1[i][j]*arr2[j][k];
			}
		}
	}
	printf("矩阵1*矩阵2为:\n");
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			if(j==(n-1))
			{
				printf("%lf \n",arr3[i][j]);
			}
			else
			{
				printf("%lf ",arr3[i][j]);
			}
		}
	}
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			if(i==j)
			{
				if(arr3[i][j]!=1)
				{
					check=0;
					break;
				}
			}
			else
			{
				if(arr3[i][j]!=0)
				{
					check=0;
					break;
				}
			}
		}
	}
	if(check==1)
	{
		printf("矩阵1和矩阵2互为逆矩阵\n");
	}
	else if(check==0)
	{
		printf("两个矩阵不互为逆矩阵\n");
	}
	return 0;
}

 实验结果

求解和检验都在这,颇有王婆卖瓜自卖自夸的感觉,大家可以自行检验,有错的话欢迎评论(#^.^#) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值