📄 列选主元.txt
字号:
/* 高斯列主元消去法解线代数方程组 */
#include "math.h"
#include "stdio.h"
#include "stdlib.h"
void max_ele(double af[][21],int n,int k) /* 选主元 */
{double max1,t;
int i,j;
max1=af[k][k]; i=k;
for (j=k+1;j<=n;j++)
if(fabs(af[j][k])>fabs(max1)) i=j;
if(i>k)
for (j=k;j<=n+1;j++)
{t=af[i][j],af[i][j]=af[k][j],af[k][j]=t;}
}
int gauss(double a[][20],double f[],double x[],int n)
/* Guass 消去法,引入af[20[21],x[]是为了不改变矩阵a[][],f[]
及简化程序 */
{int i,j,k;
double af[20][21],del,t;
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++) af[i][j]=a[i][j];
af[i][n+1]=f[i];
}
for (k=1;k<n;k++)
{ max_ele(af,n,k);
del=af[k][k];
if (fabs(del)<1e-7)
{printf("Single! press any key return...\n");
getchar();
return 0;}
for (j=k;j<=n+1;j++) af[k][j]/=del;
for (i=k+1;i<=n;i++)
{ t=af[i][k];
for (j=k;j<=n+1;j++)
af[i][j]-=af[k][j]*t;
}
}
del=af[n][n];
for (j=n;j<=n+1;j++) af[n][j]/=del;
for (j=1;j<=n;j++) x[j]=af[j][n+1];
for (i=n-1;i>0;i--)
for (j=n;j>i;j--) x[i]-=x[j]*af[i][j];
return 1;
}
main()
{ double a[20][20], f[20],x[20];
int i,j,n;
printf("Input n(<20)");
scanf("%d",&n);
/* 随机生成系数矩阵及右端项,进行检验 */
for (i=1;i<=n;i++)
for (j=1;j<=n;j++) a[i][j]=(float)rand()/100.0;
for (i=1;i<=n;i++)
{ for (j=1;j<=n;j++) printf("%8.4f ",a[i][j]);
printf("\n");}
for (i=1;i<=n;i++)
{ f[i]=0;
for (j=1;j<=n;j++) f[i]+=a[i][j];
}
gauss(a,f,x,n);
for (i=1;i<=n;i++) printf("%lf ",x[i]);
printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -