矩阵求逆的C语言实现
2014-06-06 16:55
141 查看
#include<stdio.h>
#define N 10
int getA(int arcs
,int n)//按第一行展开计算|A|
{
if(n==1)
{
return arcs[0][0];
}
int ans = 0;
int temp
;
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
,int n,int ans
)//计算每一行每一列的每个元素所对应的余子式,组成A*
{
if(n==1)
{
ans[0][0] = 1;
return;
}
int i,j,k,t;
int temp
;
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
;
int astar
;
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("can not transform!\n");
}
else
{
getAStart(arcs,n,astar);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%.4lf ",(double)astar[i][j]/a);
}
printf("\n");
}
}
printf("\n");
}
return 0;
}
#define N 10
int getA(int arcs
,int n)//按第一行展开计算|A|
{
if(n==1)
{
return arcs[0][0];
}
int ans = 0;
int temp
;
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
,int n,int ans
)//计算每一行每一列的每个元素所对应的余子式,组成A*
{
if(n==1)
{
ans[0][0] = 1;
return;
}
int i,j,k,t;
int temp
;
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
;
int astar
;
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("can not transform!\n");
}
else
{
getAStart(arcs,n,astar);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%.4lf ",(double)astar[i][j]/a);
}
printf("\n");
}
}
printf("\n");
}
return 0;
}
相关文章推荐
- 矩阵求逆用C语言实现
- n阶多项式拟合与n阶矩阵求逆的C语言实现
- c语言实现求逆矩阵
- 求N*N矩阵对角线元素之和(C语言实现)
- 稀疏矩阵的三元组顺序表的C语言实现
- 图像处理之基础---矩阵求逆实现
- C语言实现矩阵连乘问题
- 十字链表实现矩阵加法(C语言实现)
- C语言实现矩阵乘法(4*5乘以5*3)
- C语言 矩阵的相乘实现
- C语言 动态生成矩阵,并实现其录入转置
- c语言实现矩阵的三元组表示 + 矩阵的转置
- 复数矩阵乘法C语言实现
- 复数矩阵乘法C语言实现
- 矩阵求逆计算的实现
- c++实现任意矩阵求逆
- C语言学习之用二维数组实现矩阵转置
- 个人实现的一个简单的蜗牛矩阵(c语言)
- C语言—用malloc函数实现任意阶矩阵的乘法
- 任意阶幻方(魔方矩阵)C语言实现