c 语言矩阵求逆算法,矩阵的逆 C 语言 算法一

#include #include

voidmain()

{inti,j;intdimension;double deterValue=1;double **array,**deterArray, **companionMatrix, *temp;//声明函数

void printfDouble2Dimension(int s, int n, double **array);double deter(int dimension, double **array);void copyDouble2Dimension(int s, int n, double **source, double **dest);void getCompanionMatrix(int dimension, double **array, double **companionMatrix);

printf("请输入方阵的阶数N:");

scanf("%d",&dimension);

array=(double**)malloc(dimension*sizeof(double*));

deterArray=(double**)malloc(dimension*sizeof(double*));

companionMatrix=(double**)malloc(dimension*sizeof(double*));//循环输入方阵

for(i=0;i

{

temp=(double*)malloc(dimension*sizeof(double));

deterArray[i]=(double*)malloc(dimension*sizeof(double));

companionMatrix[i]=(double*)malloc(dimension*sizeof(double));

printf("请输入方阵的第%d行:",i+1);for(j=0;j

scanf("%lf",temp+j);

array[i]=temp;

}//拷贝数组

copyDouble2Dimension(dimension,dimension,array,deterArray);//打印方阵

printf("方阵初等变换之前如下:\n");

printfDouble2Dimension(dimension,dimension,array);

deterValue=deter(dimension,deterArray);

printf("方阵初等变换之后如下:\n");

printfDouble2Dimension(dimension,dimension,deterArray);if(deterValue==0)

{

printf("方阵行列式值为零.\n");

system("pause");return;

}

printf("行列式的值:%.2lf\n",deterValue);//求伴随矩阵

getCompanionMatrix(dimension,array,companionMatrix);//打印伴随矩阵

printf("伴随矩阵如下:\n");

printfDouble2Dimension(dimension, dimension, companionMatrix);

system("pause");

}//求伴随矩阵

void getCompanionMatrix(int dimension, double **array, double **companionMatrix)

{inti,j,k,l,m,n,o;int flag;//标志代数余子式的符号

double **companionTemp;double deter(int dimension,double **array);

companionTemp=(double**)malloc((dimension-1)*sizeof(double*));for(i=0;i

companionTemp[i]=(double*)malloc((dimension-1)*sizeof(double));for(i=0;i

{for(j=0;j

{

flag=(i+j)%2==0?1:-1;for(k=0,m=0;k

{if(k==i)continue;for(l=0,n=0;l

{if(l==j)continue;*(*(companionTemp+m)+n) = *(*(array+k)+l);

n++;

}

m++;

}//第i行,第j列的代数余子式 赋值给第j行,第i列

*(*(companionMatrix+j)+i) = flag * deter(dimension-1,companionTemp);

}

}

}/** calculate the determinant value*/

double deter(int dimension,double **array)

{inti,j,k,l,b;int flag =1;double sum=1;doubletemp;for(i=0,j;i

{

j=i;if(*(*(array+i)+j)==0)

{

b=0;for(k=i+1;k

{if(*(*(array+k)+j)!=0)//找到一行不为0的,然后换行

{for(l=j;l

{

temp=*(*(array+k)+l);*(*(array+k)+l)= *(*(array+i)+l);*(*(array+i)+l)=temp;

}

flag*=-1;

b=1;break;

}

}if(!b)

{return 0;

}

i--;continue;

}for(;j

{if(*(*(array+j+1)+i)==0)continue;

temp= -*(*(array+j+1)+i)/ *(*(array+i)+i);for(k=i;k

}

}for(i=0;i

sum*= *(*(array+i)+i);return sum*flag;

}//打印数组

void printfDouble2Dimension(int s, int n, double **array)

{//printf("%d,%d",s,n);

inti,j;for(i=0;i

{for(j=0;j

{

printf("%6.2lf",*(*(array+i)+j));

}

printf("\n");

}

}//拷贝数组

void copyDouble2Dimension(int s, int n, double **source, double **dest)

{inti,j;for(i=0;i

{for(j=0;j

{*(*(dest+i)+j)=*(*(source+i)+j);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值