fork download
  1. #include <iostream>
  2. #include <math.h>
  3.  
  4. using namespace std;
  5.  
  6. #define PI 4*atan(1)
  7.  
  8.  
  9. double scal(double * x, double * y, int N, double h) {
  10. double t = 0.0;
  11. for (int i = 1; i < N; i++) {
  12. t+= x[i] * y[i] * h;
  13. }
  14. t += (h/2) * (x[0]*y[0] + x[N]*y[N]);
  15. return t;
  16. }
  17.  
  18. void f2c(double * f, int N, double h) {
  19. double * c = (double *) malloc(sizeof(double) * (N - 1));
  20. double * phi = (double *) malloc(sizeof(double) * (N + 1));
  21. for (int i = 0; i < N - 1; i++) {
  22. for (int j = 0; j < N + 1; j++) {
  23. double x = (j - 0.5) * h;
  24. phi[j] = sqrt(2) * sin(PI * x * (i + 1));
  25. }
  26. double l = 4.0 / (h*h) * sin(PI * h * (i + 1)) * sin(PI * h * (i + 1));
  27. c[i] = scal(f,phi,N,h)/l;
  28. }
  29. for (int i = 0; i < N + 1; i++) {
  30. double t = 0.0;
  31. for (int j = 0; j < N - 1; j++) {
  32. t += c[j] * sqrt(2) * sin(PI * (j + 1) * (i - 0.5) * h);
  33. }
  34. cout << t << " " << f[i] << endl;
  35. }
  36. }
  37.  
  38.  
  39. int main() {
  40. int N;
  41. cin >> N;
  42. //double h = 1.0 / (N - 1);
  43. double h = 1.0 / (N);
  44. double * f = (double *) malloc(sizeof(double) * (N - 1));
  45. double * phi = (double *) malloc(sizeof(double) * (N + 1));
  46. double * psi = (double *) malloc(sizeof(double) * (N + 1));
  47. for (int i = 0; i < N - 1; i++) {
  48. for (int j = 0; j < N + 1; j++) {
  49. phi[j] = sqrt(2) * sin(PI * (j-0.5) * h);
  50. psi[j] = sqrt(2) * sin(PI * (j-0.5) *(i + 1) * h);
  51. }
  52. cout << scal(phi,psi,N,h) << endl;
  53. }
  54. for (int i = 0; i < N - 1; i++) {
  55. f[i] = sin(PI * (i - 0.5) * h);
  56. }
  57. //f2c(f,N,h);
  58. return 0;
  59. }
Success #stdin #stdout 0s 4388KB
stdin
8
stdout
1
0.0186645
-1.07553e-16
0.0344874
9.71445e-17
0.04506
8.88178e-16