高斯消去法C语言程序 一.docx
《高斯消去法C语言程序 一.docx》由会员分享,可在线阅读,更多相关《高斯消去法C语言程序 一.docx(9页珍藏版)》请在冰豆网上搜索。
高斯消去法C语言程序一
高斯消去法C语言程序一
高斯消去法C语言程序
XYYZ2006年4月9日
#include<stdio.h>
#include<math.h>
#defineN4
voidmain()
{
intk,i,j,ii=0,jj=0,z[N],tt;
doublea[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>
#defineN20
intmain()
{intn,i,j,k;
intmi,tmp,mx;
floata[N][N],b[N],x[N];
printf("\nInputn:
");
scanf("%d",&n);
if(n>N)
{printf("Theinputnshouldin(0,N)!
\n");
getch();
return1;
}
if(n<=0)
{printf("Theinputnshouldin(0,N)!
\n");
getch();
return1;
}
printf("Nowinputa(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("Nowinputb(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:
\nx[%d]=%f\n",i,x[i]);
getch();
return0;
}
#include<math.h>
#include<stdio.h>
#defineNUMBER20
#defineEsc0x1b
#defineEnter0x0d
floatA[NUMBER][NUMBER+1],ark;
intflag,n;
exchange(intr,intk);
floatmax(intk);
message();
main()
{
floatx[NUMBER];
intr,k,i,j;
charcelect;
clrscr();
printf("\n\nUseGauss.");
printf("\n\n1.JiepleasepressEnter.");
printf("\n\n2.ExitpressEsc.");
celect=getch();
if(celect==Esc)
exit(0);
printf("\n\ninputn=");
scanf("%d",&n);
printf("\n\nInputmatrixAandB:
");
for(i=1;i<=n;i++)
{
printf("\n\nInputa%d1--a%d%dandb%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'swrong!
");message();
}
elseif(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--)
{
floatme=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(intr,intk)
{
inti;
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];
}
floatmax(intk)
{
inti;
floattemp=0;
for(i=k;i<=n;i++)
if(fabs(A[i][k])>temp)
{
temp=fabs(A[i][k]);
flag=i;
}
returntemp;
}
message()
{
printf("\n\nGoonEnter,ExitpressEsc!
");
switch(getch())
{
caseEnter:
main();
caseEsc:
exit(0);
default:
{printf("\n\nInputerror!
");message();}
}
}