fork download
  1. #include <iostream>
  2. #include <mpi.h>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. // Функция для вычисления интеграла методом прямоугольников
  8. double rectangular_method(double a, double b, int n, double (*func)(double)) {
  9. double h = (b - a) / n;
  10. double sum = 0.0;
  11. for (int i = 0; i < n; ++i) {
  12. double x = a + i * h;
  13. sum += func(x);
  14. }
  15. return sum * h;
  16. }
  17.  
  18. // Функция для вычисления интеграла методом Симпсона
  19. double simpson_method(double a, double b, int n, double (*func)(double)) {
  20. double h = (b - a) / n;
  21. double sum = func(a) + func(b);
  22. for (int i = 1; i < n; i += 2) {
  23. double x = a + i * h;
  24. sum += 4 * func(x);
  25. }
  26. for (int i = 2; i < n - 1; i += 2) {
  27. double x = a + i * h;
  28. sum += 2 * func(x);
  29. }
  30. return sum * h / 3;
  31. }
  32.  
  33. // Функция для интегрирования
  34. double example_function(double x) {
  35. return x / sqrt(x - x * x);
  36. }
  37.  
  38. int main(int argc, char* argv[]) {
  39. MPI_Init(&argc, &argv);
  40.  
  41. int rank, size;
  42. MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  43. MPI_Comm_size(MPI_COMM_WORLD, &size);
  44.  
  45. double a = 1.0 / 2.0;
  46. double b = 3.0 / 4.0;
  47. int n = 100000; // Количество разбиений
  48.  
  49. double local_a = a + rank * (b - a) / size;
  50. double local_b = a + (rank + 1) * (b - a) / size;
  51.  
  52. double local_rectangular_result = rectangular_method(local_a, local_b, n / size, example_function);
  53. double local_simpson_result = simpson_method(local_a, local_b, n / size, example_function);
  54.  
  55. double global_rectangular_result = 0.0;
  56. double global_simpson_result = 0.0;
  57.  
  58. MPI_Reduce(&local_rectangular_result, &global_rectangular_result, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
  59. MPI_Reduce(&local_simpson_result, &global_simpson_result, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
  60.  
  61. if (rank == 0) {
  62. cout << "Rectangular Method Result: " << global_rectangular_result << endl;
  63. cout << "Simpson Method Result: " << global_simpson_result << endl;
  64. }
  65.  
  66. MPI_Finalize();
  67. return 0;
  68. }
  69.  
Success #stdin #stdout #stderr 0.27s 40224KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Error: unexpected symbol in "using namespace"
Execution halted