我想和你聊聊好吗
 2006-12-29 22:14
	    2006-12-29 22:14
  #include<stdio.h>
#include<math.h>
#define N 3
/*N为矩阵的阶数*/
int maxlie(float a[N][N],int flag);
void huanhang(float a[N][N],int p,int q);
void xiaoyuan(float a[N][N],int flag);
int main()
{
  int i,j,cur;
  float a[N][N],b[N][N];
   printf("请输入矩阵的各元素!\n");
  for(i=0;i<N;i++)
     for(j=0;j<N;j++)
        scanf("%f",&a[i][j]);
  for(i=0;i<N;i++)
    {
       cur=maxlie(a,i);
         if(cur!=i)
           huanhang(a,cur,i);
           xiaoyuan(a,i);
    }
    for(i=0;i<N;i++)
     {
       for(j=0;j<N;j++)
          printf("%-5.6f  ",a[i][j]);
          printf("\n");
        }
    getch();
  return 0;
}
int maxlie(float a[N][N],int flag)
{
int i,j;
  float f;
  f=fabs(a[i][flag]);
     j=flag;
   for(i=flag+1;i<N;i++)
     {
        if(f>=fabs(a[i][flag]))
           continue;
         else
          {
             f=fabs(a[i][flag]);
             j=i;
             }
}
   return j;
}
void huanhang(float a[N][N],int p,int q)
{
  int i;
  float b[N];
  for(i=0;i<N;i++)
    {
      b[i]=a[p][i];
      a[p][i]=a[q][i];
    }
    for(i=0;i<N;i++)
    {
      a[q][i]=b[i];
    }
}
void xiaoyuan(float a[N][N],int flag)
{
   float chushu;
   int i,j;
   for(i=flag+1;i<N;i++)
   {
     chushu=a[i][flag]/a[flag][flag];
      a[i][flag]=0;
     for(j=flag+1;j<N;j++)
       {
        a[i][j]=a[i][j]-a[flag][j]*chushu;
       }
}
}
时间不多写的不知道,满足你的要求不?真羡慕你们写这东西,我们直接考试,各种的矩阵变换及插值加速方法等等!
我又看了看,还以为是列主元的Gauss变换!我再看看吧,有时间的话给你回复!!
[此贴子已经被作者于2006-12-29 22:25:20编辑过]

 2006-12-29 22:17
	    2006-12-29 22:17
   2006-12-29 22:34
	    2006-12-29 22:34
  #include<stdio.h>
#include<math.h>
#define N 2
/*N为矩阵的阶数*/
int maxlie(float a[N][N],int flag);
void huanhang(float a[N][N],float b[N][N],int p,int q);
void xiaoyuan(float a[N][N],float b[N][N],int flag);
void rot(float a[N][N],float b[N][N]);
void qiujg(float a[N][N],float b[N][N]);
int main()
{
  int i,j,cur;
  float a[N][N],b[N][N];
   printf("请输入矩阵的各元素!\n");
  for(i=0;i<N;i++)
    {
       for(j=0;j<N;j++)
        {
          scanf("%f",&a[i][j]);
            if(i==j)
             b[i][j]=1;
            else
             b[i][j]=0;
         }
         }
  for(i=0;i<N;i++)
    {
       cur=maxlie(a,i);
         if(cur!=i)
           huanhang(a,b,cur,i);
           xiaoyuan(a,b,i);
    }
 rot(a,b);
   for(i=0;i<N;i++)
    {
       cur=maxlie(a,i);
         if(cur!=i)
           huanhang(a,b,cur,i);
           xiaoyuan(a,b,i);
      }
  rot(a,b);
   qiujg(a,b);
    for(i=0;i<N;i++)
     {
       for(j=0;j<N;j++)
          printf("%-5.6f  ",b[i][j]);
          printf("\n");
        }
    getch();
  return 0;
}
int maxlie(float a[N][N],int flag)
{
 int i,j;
  float f;
  f=fabs(a[i][flag]);
     j=flag;
   for(i=flag+1;i<N;i++)
     {
        if(f>=fabs(a[i][flag]))
           continue;
         else
          {
             f=fabs(a[i][flag]);
             j=i;
             }
}
   return j;
}
void huanhang(float a[N][N],float b[N][N],int p,int q)
{
  int i;
  float c[N];
  for(i=0;i<N;i++)
    {
      c[i]=a[p][i];
      a[p][i]=a[q][i];
    }
    for(i=0;i<N;i++)
    {
      a[q][i]=c[i];
    }
    for(i=0;i<N;i++)
    {
      c[i]=b[p][i];
      b[p][i]=b[q][i];
    }
   for(i=0;i<N;i++)
    {
      b[q][i]=c[i];
    }
}
void xiaoyuan(float a[N][N],float b[N][N],int flag)
{
   float chushu;
   int i,j;
   for(i=flag+1;i<N;i++)
   {
     chushu=a[i][flag]/a[flag][flag];
      a[i][flag]=0;
     for(j=flag+1;j<N;j++)
       {
        a[i][j]=a[i][j]-a[flag][j]*chushu;
       }
     for(j=0;j<N;j++)
       {
        b[i][j]=b[i][j]-b[flag][j]*chushu;
}
}
}
void rot(float a[N][N],float b[N][N])
 {
  int i,j;
  float c[N][N],d[N][N];
  for(i=0;i<N;i++)
    for(j=0;j<N;j++)
     {
       c[i][j]=a[N-i-1][N-j-1];
        d[i][j]=b[N-i-1][N-j-1];
       }
   for(i=0;i<N;i++)
    for(j=0;j<N;j++)
     {
       a[i][j]=c[i][j];
        b[i][j]=d[i][j];
       }
}
 void qiujg(float a[N][N],float b[N][N])
 {
    int i,j;
     for(i=0;i<N;i++)
       for(j=0;j<N;j++)
        b[i][j]=b[i][j]/a[i][i];
 }
我改了,看看能不能行!我用的是列主元行变换方法,与你说的应该是一样的!

 2006-12-29 22:59
	    2006-12-29 22:59