#include #define N 1024 float x[N+2][N+2][2]; #define myabs(a) (((a) > 0) ? (a):(-(a))) int main(void) { float a1, a2, a3, a4, a5, a6; float MAXDIFF; int i, j; int t, t1, t2; float maxdiff1; int iteration; /* scanf("%f %f %f %f %f %f %f", &a1, &a2, &a3, &a4, &a5, &a6, &MAXDIFF); */ a1 = a2 = a3 = a4 = 0.25; a6 = 0; a5 = 0.1; MAXDIFF = 0.0001; printf("maxdiff = %13.12f\n", MAXDIFF); for (i=1; i<=N+1; i++) { x[i][0][0] = 0.0; x[i][0][1] = 0.0; x[i][N+1][0] = 0.0; x[i][N+1][1] = 0.0; x[0][i][0] = a5*i; x[0][i][1] = a5*i; x[N+1][i][0] = a6*i; x[N+1][i][1] = a6*i; } for (i=1; i<=N; i++) for (j=1; j<=N; j++) { x[i][j][0] = 0.0; x[i][j][1] = 0.0; } printf("maxdiff=%13.12f\n", MAXDIFF); t = 0; t1 = 1; maxdiff1 = 1.0; iteration = 0; while (maxdiff1 > MAXDIFF) { maxdiff1 = -1.0; for (i=1; i <= N; i++) for (j=1; j <=N; j++) { x[i][j][t] = a1*x[i-1][j][t1] + a2 * x[i+1][j][t1] + a3*x[i][j-1][t1] + a4 * x[i][j+1][t1]; if (myabs(x[i][j][t] - x[i][j][t1]) > maxdiff1) maxdiff1 = myabs(x[i][j][t] - x[i][j][t1]); } t2 = t; t = t1; t1 = t2; printf("iteration = %d, maxdiff1 = %f, MAXDIFF = %f\n", iteration++, maxdiff1, MAXDIFF); } printf("MAXDIFF = %f, maxdiff = %f\n", MAXDIFF, maxdiff1); }