| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 617 人关注过本帖
标题:多维数组求逆太慢的问题!!!!! 急
只看楼主 加入收藏
spring4676
Rank: 1
来 自:内蒙古大草原
等 级:新手上路
帖 子:103
专家分:0
注 册:2007-12-10
结帖率:100%
收藏
 问题点数:0 回复次数:3 
多维数组求逆太慢的问题!!!!! 急
以下是我变得一个多维实数对称数组快速求逆的程序,但是当增加到12维以上时,求逆变得特别慢!
急求如何能改进它,让它运算的快点,请高手们帮帮忙!!!!!!!
#define N 14      /*[注]:修改6为你所要的矩阵阶数*/
#include "stdio.h"
#include "conio.h"

/*js()函数用于计算行列式,通过递归算法实现*/
int js(s,n)
int s[][N],n;
{int z,j,k,r,total=0;
int b[N][N];/*b[N][N]用于存放,在矩阵s[N][N]中元素s[0]的余子式*/
if(n>2) {for(z=0;z<n;z++)
{for(j=0;j<n-1;j++)
for(k=0;k<n-1;k++)
if(k>=z) b[j][k]=s[j+1][k+1];
else b[j][k]=s[j+1][k];
if(z%2==0) r=s[0][z]*js(b,n-1);  /*递归调用*/
else  r=(-1)*s[0][z]*js(b,n-1);
total=total+r;
}
}
else if(n==2) total=s[0][0]*s[1][1]-s[0][1]*s[1][0];
return total;
}

/*n_1()函数用于求原矩阵各元素对应的余子式,存放在数组b[N][N]中,定义为float型*/
void n_1(s,b,n)
int s[][N],n;
float b[][N];
{int z,j,k,l,m,g,a[N][N];
for(z=0;z<n;z++)
   {l=z;
    for(j=0;j<n;j++)
{ m=j;
 for (k=0;k<n-1;k++)
      for(g=0;g<n-1;g++)
 { if(g>=m&&k<l) a[k][g]=s[k][g+1];
   else if(k>=l&&g<m)  a[k][g]=s[k+1][g];
   else if(k>=l&&g>=m) a[k][g]=s[k+1][g+1];
   else a[k][g]=s[k][g];
 }
         b[z][j]=js(a,n-1);
}
   }
}

main()
{int a[N][N];
float b[N][N];
int r,z,j;
float temp;
//clrscr();
printf("Input original data:\n");
for(z=0;z<N;z++)            
    for(j=0;j<N;j++)
scanf("%d",&a[z][j]);
printf("\nPress Enter continue......");
printf("The original matrix is:\n");
for(z=0;z<N;z++)
    {for(j=0;j<N;j++)
 printf("%5d",a[z][j]);
     printf("\n");
    }
r=js(a,N);                     /*调用js()函数计算原矩阵的行列式值*/
printf("\nThe original matrix hanglieshi is:|A|==%d\n",r);     
if (r==0) printf("Because |A|==0,the original matrix have no nijuzhen!");   
else
    {n_1(a,b,N);                                    
     for(z=0;z<N;z++)                           
          for(j=0;j<N;j++)
              if((z+j)%2!=0 && b[z][j]!=0) b[z][j]=-b[z][j];
     for(z=0;z<N;z++)  
  for(j=z+2;j<N;j++)
{temp=b[z][j];
b[z][j]=b[j][z];
b[j][z]=temp;
}
     printf("Because |A|!=0,the original matrix have nijuzhen!\n");
     printf("The bansuijuzhen A* is:\n");
     for(z=0;z<N;z++)
         {for(j=0;j<N;j++)
              printf("%4.0f\t",b[z][j]);
          printf("\n");
         }

     for(z=0;z<N;z++)                  
          for(j=0;j<N;j++)
b[z][j]=b[z][j]/r;
     printf("\nThe nijuzhen is:(A*)/|A|(|A|=%d)\n",r);   
     for(z=0;z<N;z++)
    {for(j=0;j<N;j++)
printf("%8.3f",b[z][j]);
   printf("\n");
  }
    }
}
搜索更多相关主题的帖子: 多维 
2007-12-30 20:15
spring4676
Rank: 1
来 自:内蒙古大草原
等 级:新手上路
帖 子:103
专家分:0
注 册:2007-12-10
收藏
得分:0 
帮帮忙!
大伙帮忙看看吧!
2007-12-31 16:06
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
求逆
用什么算法:?
2008-01-01 00:44
spring4676
Rank: 1
来 自:内蒙古大草原
等 级:新手上路
帖 子:103
专家分:0
注 册:2007-12-10
收藏
得分:0 
就是按数学书上的那种思路
好像是高斯消元法
2008-01-01 09:13
快速回复:多维数组求逆太慢的问题!!!!! 急
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016945 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved