Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<math.h>
- #include<stdlib.h>
- #define pi 3.1415
- #define L 20
- #define T 18
- double* mkarr(int n, int l)
- {
- double* arr = (double*) malloc(l * n * sizeof(double));
- return arr;
- }
- double* solve_analitic(double K, double h)
- {
- double t = h * K;
- int n = lround(T / t + 1);
- int l = lround(L / h + 1);
- double* arr = mkarr(n,l);
- for(int i = 0; i < l; i++)
- for(int j = 0; j < n; j++)
- arr[j, i] = sin(4 * pi * (h * i - t * j)/ L);
- return arr;
- }
- double* solve_corner(double K, double h)
- {
- double t = h * K;
- int n = lround(T / t + 1);
- int l = lround(L / h + 1);
- double* arr = mkarr(n, l);
- arr [0, 0] = 0;
- for(int i = 0; i < l; i++)
- arr[0, i] = sin(4 * pi * (i) * h/L);
- for(int i = 1; i < n; i++)
- {
- arr[i, 0] = arr[i - 1, l] * t / h + arr[i - 1, 0] * (1-t / h);
- for(int j = 0; j < l; j++)
- arr[i, j] = arr[i - 1, j - 1] * t / h + arr[i - 1,j] * (1 - t / h);
- arr[i,0] = arr[i, l - 1];
- }
- return arr;
- }
- double* solve_LV(double K, double h)
- {
- double t = h * K;
- int n = lround(T / t + 1);
- int l = lround(L / h + 1);
- double* arr = mkarr(n, l);
- int j = 0;
- arr[0, 0] = 0;
- for(int i = 0; i < l; i++)
- arr[0, i] = sin(4 * pi * i * h / L);
- for(j = 1; j < l; j++)
- {
- arr[j, 0] = arr[j - 1,0] * (1 - t * t / h * h) + (arr[j - 1, 1] + arr[j - 1,n - 1]) * (t * t / 2 / h * h) - (arr[j,1] - arr[j - 1,n - 1]) * t / 2 /h;
- for(int i = 1; i < n; i++)
- arr[j,i] = arr[j - 1,i] * (1 - t * t / h * h) + (arr[j - 1,i + 1] + arr[j - 1, i - 1]) * (t * t / 2 / h * h) - (arr[j - 1 , i + 1] - arr[j - 1, i - 1]) * t / 2 /h;
- }
- arr[j, n] = arr[j, 0];
- return arr;
- }
- int main ()
- {
- FILE* out = fopen("out.txt", "w");
- if( out == 0)
- perror("err");
- double K = 1;
- double h = 0.5;
- double t = h * K;
- int n = lround(T / t + 1);
- int l = lround(L / h + 1);
- double* analitic = solve_analitic(K,h);
- double* corner = solve_corner(K,h);
- double* LV = solve_LV(K,h);
- printf("%d %d \n", n, l);
- int x = 0;
- for (int i = 0; i < l; i++)
- {
- for(int j = 0; j < n; j++)
- {
- fprintf(out,"%f ",(analitic[i,j]));
- }
- x++;
- fprintf(out, "\n");
- }
- printf("%d \n", x);
- fclose(out);
- free (analitic);
- free (corner);
- free (LV);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement