fork download
  1. #include <iostream>
  2. #include <math.h>
  3.  
  4. using namespace std;
  5.  
  6. #define PI 4*atan(1)
  7.  
  8. void f2c(double * f, int N, int M, double hx, double hy) {
  9. double * c = (double*) malloc(sizeof(double) * (N) * (M));
  10. double * t = (double*) malloc(sizeof(double) * (N));
  11. for (int i = 0; i < M; i++) {
  12. for (int j = 0; j < N; j++) {
  13. double tmp = 0.0;
  14. for (int k = 0; k < M; k++) {
  15. tmp += sqrt(2)*f[k*(N) + j] * sin(PI * (i + 0.5) * (k + 1) * hy) * hy;
  16. }
  17. t[j] = tmp;
  18. }
  19. for (int j = 0; j < N; j++) {
  20. double tmp = 0.0;
  21. for (int k = 0; k < N - 1; k++) {
  22. tmp += sqrt(2)*sin(PI * (k + 1) * (j + 1) * hx) * t[k] * hx;
  23. }
  24. c[j * (N) + i] = tmp;
  25. //cout << t << " ";
  26. }
  27. }
  28. double max_er = 0.0;
  29. for (int i = 0; i < M; i++) {
  30. for (int j = 0; j < N ; j++) {
  31. double tmp = 0.0;
  32. for (int k = 0; k < M ;k++) {
  33. for (int m = 0; m < N; m++) {
  34. if (i == M - 1) {
  35. tmp += 2*sin(PI * (i + 1) * (k + 0.5) * hy) * sin(PI * (j + 1) * (m + 1) * hx) * c[m*(M) + k];
  36. cout << tmp << " ";
  37. }
  38. }
  39. }
  40. if (i == M - 1) {
  41. cout << endl;
  42. }
  43. cout << tmp << " ";
  44. /*if (j == N - 2) {
  45. if (max_er < fabs(f[i*(M - 1) + j] - tmp / 2)) {
  46. max_er = fabs(f[i*(M - 1) + j] - tmp / 2);
  47. }
  48. } else {
  49. if (max_er < fabs(f[i*(M - 1) + j] - tmp)) {
  50. max_er = fabs(f[i*(M - 1) + j] - tmp);
  51. }
  52. }*/
  53. }
  54. cout << endl;
  55. }
  56. }
  57.  
  58. double scal(double * x, double * y, int N, double h) {
  59. double t = 0.0;
  60. for (int i = 0;i < N - 1; i++) {
  61. t+= x[i] * y[i] * h;
  62. }
  63. return t;
  64. }
  65.  
  66. int main() {
  67. int N, M;
  68. cin >> N >> M;
  69. double hx = 1.0 / (N);
  70. double hy = 1.0 / (M);
  71. double * f = (double *) malloc(sizeof(double) * (N) * (M));
  72. for (int i = 0; i < M; i++) {
  73. for (int j = 0; j < N; j++) {
  74. double x = (j + 1) * hx;
  75. double y = (i + 0.5) * hy;
  76. f[i*(N) + j] = sin(PI * x) * sin(PI * y);
  77. cout << f[i*(N) + j] << " ";
  78. }
  79. cout << endl;
  80. }
  81. cout << endl;
  82. f2c(f,N,M,hx,hy);
  83. return 0;
  84. }
Success #stdin #stdout 0s 4556KB
stdin
5 5
stdout
0.181636 0.293893 0.293893 0.181636 3.78437e-17 
0.475528 0.769421 0.769421 0.475528 9.9076e-17 
0.587785 0.951057 0.951057 0.587785 1.22465e-16 
0.475528 0.769421 0.769421 0.475528 9.9076e-17 
0.181636 0.293893 0.293893 0.181636 3.78437e-17 

0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0.578022 0.578022 0.578022 0.578022 0.578022 0.450145 0.450145 0.450145 0.450145 0.450145 0.36034 0.36034 0.36034 0.36034 0.36034 0.370659 0.370659 0.370659 0.370659 0.370659 0.363271 0.363271 0.363271 0.363271 0.363271 
0.363271 0.935259 0.935259 0.935259 0.935259 0.935259 0.72835 0.72835 0.72835 0.72835 0.72835 0.583042 0.583042 0.583042 0.583042 0.583042 0.59974 0.59974 0.59974 0.59974 0.59974 0.587785 0.587785 0.587785 0.587785 0.587785 
0.587785 0.935259 0.935259 0.935259 0.935259 0.935259 0.72835 0.72835 0.72835 0.72835 0.72835 0.583042 0.583042 0.583042 0.583042 0.583042 0.59974 0.59974 0.59974 0.59974 0.59974 0.587785 0.587785 0.587785 0.587785 0.587785 
0.587785 0.578022 0.578022 0.578022 0.578022 0.578022 0.450145 0.450145 0.450145 0.450145 0.450145 0.36034 0.36034 0.36034 0.36034 0.36034 0.370659 0.370659 0.370659 0.370659 0.370659 0.363271 0.363271 0.363271 0.363271 0.363271 
0.363271 1.20431e-16 1.20431e-16 1.20431e-16 1.20431e-16 1.20431e-16 9.37875e-17 9.37875e-17 9.37875e-17 9.37875e-17 9.37875e-17 7.50765e-17 7.50765e-17 7.50765e-17 7.50765e-17 7.50765e-17 7.72266e-17 7.72266e-17 7.72266e-17 7.72266e-17 7.72266e-17 7.56873e-17 7.56873e-17 7.56873e-17 7.56873e-17 7.56873e-17 
7.56873e-17