当前位置:文档之家› 高斯消去法C语言程序

高斯消去法C语言程序

高斯消去法C语言程序XYYZ 2006年4月9日#include <stdio.h>#include <math.h>#define N 4void main(){int k,i,j,ii=0,jj=0,z[N],tt;double a[N][N],b[N],sum,x[N],y[N],sp,t;printf("请输入原始增广矩阵(按行输入):\n");for(i=0;i<N;i++){for(j=0;j<N;j++)scanf("%lf",&a[i][j]);scanf("%lf",&b[i]);}printf("你输入的原始增广矩阵为:\n");for(i=0;i<N;i++)z[i]=i;for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%f ",a[i][j]);printf("%f\n",b[i]);}printf("\n");for(k=0;k<N-1;k++){ii=k;jj=k;for(i=k;i<N;i++)for(j=k;j<N;j++)if(fabs(a[ii][jj])<fabs(a[i][j])){ii=i;jj=j;}if(a[ii][jj]==0)break;if(ii!=k)for(j=k;j<N;j++){t=0;t=a[ii][j];a[ii][j]=a[k][j];a[k][j]=t;} {t=0;t=b[ii];b[ii]=b[k];b[k]=t;}if(jj!=k)for(i=0;i<N;i++){t=0;t=a[i][jj];a[i][jj]=a[i][k];a[i][k]=t;}{tt=0;tt=z[jj];z[jj]=z[k];z[k]=tt;}for(i=k+1;i<N;i++) /*消元过程*/ {sp=a[i][k]/a[k][k];for(j=k;j<N;j++)a[i][j]=a[i][j]-a[k][j]*sp;b[i]=b[i]-b[k]*sp;}printf("第%d次消元后的结果\n",k+1);for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%f ",a[i][j]);printf("%f\n",b[i]);}printf("\n");}y[N-1]=b[N-1]/a[N-1][N-1]; /*回代过程*/ for(k=N-2;k>=0;k--){sum=0;for(j=k+1;j<N;j++)sum=sum+a[k][j]*y[j];y[k]=(b[k]-sum)/a[k][k];}for(i=0;i<N;i++)printf("z[%d]=%d ",i,z[i]);printf("\n");for(i=0;i<N;i++)x[z[i]]=y[i];for(i=0;i<N;i++)printf("y[%d]=%f ",i,y[i]); printf("\n");for(i=0;i<N;i++)printf("x[%d]=%f ",i,x[i]); printf("\n");}#include<stdio.h>#include <math.h>#define N 20int main(){ int n,i,j,k;int mi,tmp,mx;float a[N][N],b[N],x[N];printf("\nInput n:");scanf("%d",&n);if(n>N){ printf("The input n should in(0,N)!\n");getch();return 1;}if(n<=0){ printf("The input n should in(0,N)!\n");getch();return 1;}printf("Now input a(i,j),i,j=0...%d:\n",n-1); for(i=0;i<n;i++){ for(j=0;j<n;j++)scanf("%f",&a[i][j]);}printf("Now input b(i),i,j=0...%d:\n",n-1); for(i=0;i<n;i++)scanf("%f",&b[i]);for(i=0;i<n-2;i++){ for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++) if(fabs(a[j][i])>mx){ mi=j;mx=fabs(a[j][i]);}if(i<mi){ tmp=b[i];b[i]=b[mi];b[mi]=tmp;for(j=i;j<n;j++){ tmp=a[i][j];a[i][j]=a[mi][j];a[mi][j]=tmp;}}for(j=i+1;j<n;j++){ tmp=-a[j][i]/a[i][i];b[j]+=b[i]*tmp;for(k=i;k<n;k++)a[j][k]+=a[i][k]*tmp;}}x[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i>=0;i--){ x[i]=b[i];for(j=i+1;j<n;j++)x[i]-=a[i][j]*x[j];x[i]/=a[i][i];}for(i=0;i<n;i++)printf("Answer:\n x[%d]=%f\n",i,x[i]); getch();return 0;}#include<math.h>#include<stdio.h>#define NUMBER 20#define Esc 0x1b#define Enter 0x0dfloat A[NUMBER][NUMBER+1] ,ark;int flag,n;exchange(int r,int k);float max(int k);message();main(){float x[NUMBER];int r,k,i,j;char celect;clrscr();printf("\n\nUse Gauss.");printf("\n\n1.Jie please press Enter.");printf("\n\n2.Exit press Esc.");celect=getch();if(celect==Esc)exit(0);printf("\n\n input n=");scanf("%d",&n);printf(" \n\nInput matrix A and B:");for(i=1;i<=n;i++){printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]);}for(k=1;k<=n-1;k++){ark=max(k);if(ark==0){printf("\n\nIt's wrong!");message();}else if(flag!=k)exchange(flag,k);for(i=k+1;i<=n;i++)for(j=k+1;j<=n+1;j++)A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];}x[n]=A[n][n+1]/A[n][n];for( k=n-1;k>=1;k--){float me=0;for(j=k+1;j<=n;j++){me=me+A[k][j]*x[j];}x[k]=(A[k][n+1]-me)/A[k][k];}for(i=1;i<=n;i++){printf(" \n\nx%d=%f",i,x[i]);}message();}exchange(int r,int k){int i;for(i=1;i<=n+1;i++)A[0][i]=A[r][i];for(i=1;i<=n+1;i++)A[r][i]=A[k][i];for(i=1;i<=n+1;i++)A[k][i]=A[0][i];}float max(int k){int i;float temp=0;for(i=k;i<=n;i++)if(fabs(A[i][k])>temp){temp=fabs(A[i][k]);flag=i;}return temp;{float me=0;for(j=k+1;j<=n;j++){me=me+A[k][j]*x[j];}x[k]=(A[k][n+1]-me)/A[k][k];}for(i=1;i<=n;i++){printf(" \n\nx%d=%f",i,x[i]);}message();}exchange(int r,int k){int i;for(i=1;i<=n+1;i++)A[0][i]=A[r][i];for(i=1;i<=n+1;i++)A[r][i]=A[k][i];for(i=1;i<=n+1;i++)A[k][i]=A[0][i];}float max(int k){int i;float temp=0;for(i=k;i<=n;i++)if(fabs(A[i][k])>temp){temp=fabs(A[i][k]);flag=i;}return temp;。

相关主题