首页 > 代码库 > 求逆矩阵
求逆矩阵
转自http://blog.csdn.net/abcjennifer/article/details/6693612
#include<stdio.h>#define N 10int getA(int arcs[N][N],int n)//按第一行展开计算|A|{ if(n==1) { return arcs[0][0]; } int ans = 0; int temp[N][N]; int i,j,k; for(i=0;i<n;i++) { for(j=0;j<n-1;j++) { for(k=0;k<n-1;k++) { temp[j][k] = arcs[j+1][(k>=i)?k+1:k]; } } int t = getA(temp,n-1); if(i%2==0) { ans += arcs[0][i]*t; } else { ans -= arcs[0][i]*t; } } return ans;}void getAStart(int arcs[N][N],int n,int ans[N][N])//计算每一行每一列的每个元素所对应的余子式,组成A*{ if(n==1) { ans[0][0] = 1; return; } int i,j,k,t; int temp[N][N]; for(i=0;i<n;i++) { for(j=0;j<n;j++) { for(k=0;k<n-1;k++) { for(t=0;t<n-1;t++) { temp[k][t] = arcs[k>=i?k+1:k][t>=j?t+1:t]; } } ans[j][i] = getA(temp,n-1); if((i+j)%2 == 1) { ans[j][i] = - ans[j][i]; } } }}int main(){ int arcs[N][N]; int astar[N][N]; int i,j; int n; while(scanf("%d",&n)!=EOF && n) { for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",&arcs[i][j]); } } int a = getA(arcs,n); if(a==0) { printf("The input data is error!\n"); } else { getAStart(arcs,n,astar); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%.3lf ",(double)astar[i][j]/a); } printf("\n"); } } } return 0;}
求逆矩阵
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。