Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <math.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <time.h>
- #define Max(a,b) ((a)>(b)?(a):(b))
- #define N 10
- double maxeps = 0.1e-7;
- int itmax = 100;
- int i,j,k;
- double eps;
- double A[N][N], B[N][N];
- const double pi = acos(-1.0);
- void relax(double w)
- {
- for(i = 1; i <= N - 2; i++) {
- for(j = 1; j <= N - 2; j++) {
- B[i][j] = (A[i + 1][j] + A[i - 1][j] + A[i][j + 1] + A[i][j - 1]) / 4;
- }
- }
- for(i = 1; i <= N - 2; i++) {
- for(j = 1; j <= N - 2; j++) {
- eps = Max(eps, fabs(A[i][j] - w * B[i][j] - (1 - w) * A[i][j]));
- A[i][j] = w * B[i][j] + (1 - w) * A[i][j];
- }
- }
- /*for (i = 0; i < N; i++) {
- for (j = 0; j < N; j++) {
- printf("%.5lf ", A[i][j]);
- }
- printf("\n");
- }*/
- }
- void init();
- //void wtime(double *t);
- int main(int an, char **as)
- { int it, i, j;
- double time0, time1, r = 1 - (pi / (2 * N)) * (pi / (2 * N)), w;
- init();
- //wtime(&time0);
- w = 0.8;//1 / (1 - r * r / 2);
- for(it = 1; it <= itmax; it++) {
- eps = 0.;
- relax(w);
- printf( "it=%4i eps=%f\n", it,eps);
- //w = 1 / (1 - r * r * w / 4);
- if (eps < maxeps) break;
- }
- for (i = 0; i < N; i++) {
- for (j = 0; j < N; j++) {
- printf("%.5lf ", A[i][j]);
- }
- printf("\n");
- }
- printf("%.5lf\n", eps);
- //wtime(&time1);
- //printf("Time in seconds=%gs\t",time1 - time0);
- return 0;
- }
- void init()
- {
- for(i = 0; i <= N-1; i++) {
- for(j = 0; j <= N-1; j++) {
- if(i == N - 1) {
- A[i][j]= sin(pi * (j / double(N - 1)));
- } else {
- if (i == 0) {
- A[i][j]= sin(pi * (j / double(N - 1))) * exp(-j / double(N - 1));
- } else {
- A[i][j] = 0;
- }
- }
- B[i][j] = A[i][j];
- }
- }
- }
- /*void wtime(double *t)
- {
- static int sec = -1;
- struct timeval tv;
- gettimeofday(&tv, (void *)0);
- if (sec < 0) sec = tv.tv_sec;
- *t = (tv.tv_sec - sec) + 1.0e-6 * tv.tv_usec;
- } */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement