📄 revers matrix.txt
字号:
#include <stdio.h>
#include <math.h>
#include <malloc.h>
void main()
{
int n;
printf("请输入你所求解的逆矩阵的阶数:n=");
scanf("%d",&n);
float choose_the_main(float **a,float *b,int k,int n);
void input_output(float **a,float **c,float **q,int n);
void course(float **a,float **c,float **q,float *b,int n);
float **a,*b,**c,**q;
int i;
a=(float **)malloc(sizeof(float *)*n);
b=(float *)malloc(sizeof(float )*n);
c=(float **)malloc(sizeof(float *)*n);
q=(float **)malloc(sizeof(float *)*n);
for(i=0;i<n;i++)
{
*(a+i)=(float *)malloc(sizeof(float )*n);
*(c+i)=(float *)malloc(sizeof(float )*n);
*(q+i)=(float *)malloc(sizeof(float )*n);
}
printf("您现在做的是%d阶矩阵的逆矩阵求解\n",n);
input_output(a,c,q,n);
course(a,c,q,b,n);
}
float choose_the_main(float **a,float *b,int k,int n)
{
float d,t;
int l,i,j;
d=a[k-1][k-1];
l=k-1;
for(i=k;i<n;i++)
{
if(fabs(a[i][k-1]>fabs(d)))
{
d=a[i][k-1];
l=i;
}
}
if(d==0)
printf("The system is error!\n");
else
{
if(l!=k-1)
{
for(j=k-1;j<n;j++)
{
t=a[l][j];
a[l][j]=a[k-1][j];
a[k-1][j]=t;
}
t=b[l];b[l]=b[k-1];b[k-1]=t;
}
}
return (d);
}
void input_output(float **a,float **c,float **q,int n)
{
int i,j;
printf("请按行的顺序依次输入矩阵中元素的值(共%d项):",n*n);
for(i=0;i<=n-1;i++)
for(j=0;j<=n-1;j++)
scanf("%f",&a[i][j]);
for(i=0;i<n;i++)
for(j=0;j<=n-1;j++)
{
if(i==j) c[i][j]=1;
else c[i][j]=0;
q[i][j]=a[i][j];
}
printf("您输入的(AE)矩阵为(利用(AE)-->(E(A的逆)):\n");
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
printf("%.5f ",a[i][j]);
for(j=0;j<=n-1;j++)
printf("%.5f ",c[i][j]);
printf("\n");
}
printf("\n");
}
void course(float **a,float **c,float **q,float *b,int n)
{
float sum=0,h;
int i,j,k,p,flag=0;
for(p=0;p<n;p++)
{
for(j=0;j<n;j++)
b[j]=c[j][p];
for(i=0;i<n;i++)
for(j=0;j<=n-1;j++)
{
a[i][j]=q[i][j];
}
for(k=1;k<=n-1;k++)
{
h=choose_the_main(a,b,k,n);
if(h==0)
{
printf("因为矩阵的行列式的值为0,所以不能用此程序做!程序退出!\n");
flag=1;
break;
}
else
{
for(i=k;i<n;i++)
a[i][k-1]=a[i][k-1]/a[k-1][k-1];
for(i=k;i<n;i++)
for(j=k;j<n;j++)
a[i][j]=a[i][j]-a[i][k-1]*a[k-1][j];
for(i=k;i<n;i++)
b[i]=b[i]-(a[i][k-1]*b[k-1]);
}
}
if(flag==1) break;
if(h!=0)
{
b[n-1]=b[n-1]/a[n-1][n-1];
for(i=n-2;i>=0;i--)
{
for(j=i+1;j<n;j++)
sum=sum+a[i][j]*b[j];
b[i]=(b[i]-sum)/a[i][i];
sum=0;
}
for(j=0;j<n;j++)
c[j][p]=b[j];
}
}
if(flag==0)
{
printf("所求矩阵的逆矩阵为:\n");
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
printf("%.5f ",c[i][j]);
printf("\n");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -