矩阵求逆的C语言实现
来源:互联网 发布:c语言 整数奇偶排序 编辑:程序博客网 时间:2024/05/01 08:32
#include<stdio.h>
#define N 10
int 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("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[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("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;
}
0 0
- 矩阵求逆的C语言实现
- 矩阵的乘法和求逆(C语言实现)
- c语言实现求逆矩阵
- C语言求矩阵的行列式、伴随矩阵、逆矩阵
- n阶多项式拟合与n阶矩阵求逆的C语言实现
- 求逆矩阵——C语言
- C语言 n*n矩阵求值及求逆矩阵
- C/C++语言实现矩阵求逆运算—高斯约化/消元法
- C语言 矩阵的相乘实现
- 矩阵乘法的C语言实现
- C语言实现矩阵的转置
- C语言实现矩阵的四则运算
- c语言练习 8-2. 求矩阵的局部极大值
- C语言之单位下三角矩阵求逆
- 课程设计:用C语言编写的稀疏矩阵运算器(加、减、乘、求逆)
- 求图像质心的C语言实现
- 求des算法的c语言实现
- 矩阵求逆计算的实现
- 浅谈HTTP中Get与Post的区别
- JDK 6 目录结构介绍以及JDK中的工具研究
- SQL 日期转换
- MySQL之功能1 --- Percona-Server5.6首发提供日志审计功能
- ACM:DAG上的动态规划------嵌套矩形
- 矩阵求逆的C语言实现
- iOS下的UILocalNotification的使用
- java的几种常用的排序
- 计算器实验
- 有胃病怎么吃最好
- python操作mysql数据库(常用函数)
- android实现记住用户名和密码以及实现自动登录
- uml类图关系
- 一个用 C++ 实现的快速无锁队列