?? gaosisuanfa.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 + -