——我这里默认的是三维矩阵,如果想要求其他维数的矩阵,可以调整里面的参数,把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;
}
实验结果
求解和检验都在这,颇有王婆卖瓜自卖自夸的感觉,大家可以自行检验,有错的话欢迎评论(#^.^#)