Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.26 KB | None | 0 0
  1. #include <iostream>
  2. #include<vector>
  3. using namespace std;
  4. double function(double x) {
  5. double func = tanh(x);
  6. return func;
  7. }
  8. double INTEGRAL_Trapecia(double a, double b,int n) {
  9. double dy = abs((b - a) / n);
  10. double y = (function(a) + function(b))/2;
  11. for (int i =1; i <n; i++) {
  12. y += function(a+i*dy);
  13. }
  14. y *= dy;
  15. return y;
  16. }
  17.  
  18. double INTEGRAL_Simpsona(double a, double b, int n) {
  19. double dy = abs((b - a) /(double)n);
  20. double y1 = 0, y2 = 0;
  21. double y = function(a) + function(b);
  22. for (int k = 1; k <n ; k+=2) {
  23. y1 += function(a+k*dy);
  24. }
  25. for (int k = 2; k < n ; k+=2) {
  26. y2 += function(a+k*dy);
  27. }
  28. y += 4. * y1 + 2. * y2;
  29. y *= dy / 3.;
  30. return y;
  31. }
  32.  
  33. double INTEGRAL_Rectangle(double a, double b, int n) {
  34. double dy = (b - a) / n;
  35. double m=0;
  36. for (int k = 1; k < n; k++) {
  37. m += function((a + k * dy) - dy / 2);
  38. }
  39. m *= dy;
  40. return m;
  41. }
  42. int main() {
  43. setlocale(LC_ALL, "russian");
  44. cout << "Выберите метод которым хотите посчитать:\n1.Метод трапеций\n2.Метод Симпсона\n3.Метод прямоугольников\n";
  45. while (true) {
  46.  
  47. int z;
  48. cin >> z;
  49. if (z == 1) {
  50. double a, b, eps;
  51. cout << "Введите пределы интегрирования" << endl;
  52. cout << "a=";
  53. cin >> a;
  54. cout << "b=";
  55. cin >> b;
  56. cout << "Введите точность ";
  57. cin >> eps;
  58. int count = 0;
  59. int n = 2;
  60. while (abs(INTEGRAL_Trapecia(a, b, n) - INTEGRAL_Trapecia(a, b, 2 * n)) > eps) {
  61. cout.precision(15);
  62. cout << INTEGRAL_Trapecia(a, b, n) << endl;
  63. count++;
  64. n*=2;
  65. }
  66. cout << count << endl;
  67. double y = INTEGRAL_Trapecia(a, b, n);
  68. cout << "Значение интеграла в этих пределах " << y << endl;
  69. cout << "Количество разбиений " << n << endl;
  70. }
  71. if (z == 2) {
  72. double a, b, eps;
  73. cout << "Введите пределы интегрирования" << endl;
  74. cout << "a=";
  75. cin >> a;
  76. cout << "b=";
  77. cin >> b;
  78. cout << "Введите точность ";
  79. cin >> eps;
  80. int count = 0;
  81. int n = 2;
  82. while (abs(INTEGRAL_Simpsona(a, b, n) - INTEGRAL_Simpsona(a, b, 2 * n)) > eps) {
  83. cout.precision(15);
  84. cout << INTEGRAL_Simpsona(a, b, n) << endl;
  85. n *= 2;
  86. count++;
  87. }
  88. cout << count << endl;
  89. double y = INTEGRAL_Simpsona(a, b, n);
  90. cout << "Значение интеграла в этих пределах " << y << endl;
  91. cout << "Количество разбиений " << n << endl;
  92. }
  93. if (z == 3) {
  94. double a, b, eps;
  95. cout << "Введите пределы интегрирования" << endl;
  96. cout << "a=";
  97. cin >> a;
  98. cout << "b=";
  99. cin >> b;
  100. cout << "Введите точность ";
  101. cin >> eps;
  102. int n = 2;
  103. int count = 0;
  104. while (abs(INTEGRAL_Rectangle(a, b, n) - INTEGRAL_Rectangle(a, b, 2 * n)) > eps) {
  105. cout.precision(15);
  106. cout << INTEGRAL_Rectangle(a, b, n) << endl;
  107. count++;
  108. n*=2;
  109. }
  110. cout << count << endl;
  111. double y = INTEGRAL_Rectangle(a, b, n);
  112. cout << "Значение интеграла в этих пределах " << y << endl;
  113. cout << "Количество разбиений " <<n<< endl;
  114. }
  115. }
  116. return 0;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement