本文共 1231 字,大约阅读时间需要 4 分钟。
#include#include #define maxn 3int main(){ double a[maxn][maxn + 1], x[maxn] = { 0}; double eps = 1e-9, w = 1.05; int n, k, kmax = 100; freopen("gauss.txt", "r", stdin); scanf("%d", &n); for(int i = 0; i < n; i++) for(int j = 0; j < n + 1; j++) scanf("%lf", &a[i][j]); //for(int i = 0; i < n; i++) //{ //for(int j = 0; j < n + 1; j++) printf("%-15f", a[i][j]); //printf("\n"); //} for(k = 0; k < kmax; k++) { double norm = 0; for(int i = 0; i < n; i++) { double x0 = x[i]; double sum = 0; for(int j = 0; j < n; j++) if(j != i) sum += a[i][j] * x[j]; /// x[i] = (1 - w) * x0 + (a[i][n] - sum) / a[i][i]; ///w松弛因子 if(fabs(x[i] - x0) > norm) norm = fabs(x[i] - x0); //norm计算范数 } printf("\nk = %2d x = ", k + 1); for(int i = 0; i < n; i++) printf("%-15f", x[i]); if(norm < eps) break; } if(k < kmax) { printf("\n\nk = %d\n", k + 1); for(int i = 0; i < n; i++) printf("x%d = %-15f\n", i + 1, x[i]); } else printf("\n\nfailed\n"); return 0;}
数据文件
实验结果