高斯消元

http://jingyan.baidu.com/article/39810a23e40c80b636fda63a.html

 

 

int I;


#include <stdio.h>
void input(float a[100][100],float b[100][1],int n)
{int i,j;
char infile[20];
FILE *input;
printf("input infile name:\n");
getch()();
scanf("%s",infile);
input=fopen(infile,"r");
if(input==0)
{
  printf("Can't open the file\n");
  exit(0);
}
for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   fscanf(input,"%f",&a[i][j]);
for(i=0;i<n;i++)
   fscanf(input,"%f",&b[i][0]);
fclose(input);
return;
}
float max_value(float a[100][100],int n,int k)
{float max;
int i;
max=a[k][k];
for(i=k+1;i<n;i++)
   if(max<a[i][k])
   {
     max=a[i][k];
     I=i;
   }
return(max);
}
void change(float *p,float *q)
{
float temp;
temp=*p; *p=*q;  *q=temp;
return;
}
main()
{float a[100][100],b[100][1],x[100],max,m,*c,*d;
int k=0,q=0,n,i,j;
printf("n=");
scanf("%d",&n);
input(a,b,n);
for(k=0;k<n && q==0;k++)
{
    max=max_value(a,n,k);
    if(max==0)
       q=1;
    else
  {      if(I!=k)
    {
     c=&b[I][0];
     d=&b[k][0];
     change(c,d);

     for(j=k;j<n;j++)
     {
       c=&a[I][j];
       d=&a[k][j];
       change(c,d);
     }
     }
    for(i=k+1;i<n;i++)
     {
       m=a[i][k]/a[k][k];
       b[i][0]=b[i][0]-b[k][0]*m;
         for(j=0;j<n;j++)
           a[i][j]=a[i][j]-a[k][j]*m;
     }
  }
}
for(i=n-1;i>=0;i--)
{
   for(j=i+1;j<n;j++)
     b[i][0]=b[i][0]-a[i][j]*x[j];
   x[i]=b[i][0]/a[i][i];
}
for(i=0;i<n;i++)
   printf("x[%d]=%6.2f\n",i,x[i]);
   /*printf("%f",max);*/
   /*for(i=0;i<n;i++)
   for(j=0;j<n;j++)
    printf("%f",a[i][j]);
    getch()();
  for(i=0;i<n;i++)
    printf("%f",b[i][0]);
    getch()();*/

}

你可能感兴趣的:(高斯消元)