Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.57 KB | None | 0 0
  1. #pragma once
  2. #include <iostream>
  3. #include<cmath>
  4. #include <fstream>
  5.  
  6. using namespace std;
  7.  
  8. int n0 = 2;
  9.  
  10. long double integer_sin(long double a, long double b) {
  11. return exp(b) - exp(a);
  12. }
  13.  
  14. /*
  15. long double integer_root(long double a, long double b) {
  16. return (2 / 3)*(pow(b, (3 / 2))) - (2 / 3)(pow(a, (3 / 2)));
  17. }*/
  18.  
  19. long double f(long double x) {
  20. return exp(x);
  21. }
  22.  
  23. /*long double f(long double x) {
  24. return pow(x, 0.5);
  25. }*/
  26.  
  27. /*long double fault_sin(long double x, long double a, long double b) {
  28. return integer_root(a, b) - x;
  29. }*/
  30.  
  31. /*
  32. long double f(long double x) {
  33. return sin(3.14*x);
  34. }*/
  35.  
  36. /*long double integer_sin(long double a, long double b) {
  37. return (-1 * (cos(3.14*b)) / 3.14) + (cos(3.14*a)) / 3.14;
  38. }
  39. */
  40.  
  41. long double gauss3(long double a, long double b, int n) {
  42. long double h = (b - a) / (n);
  43. long double res = 0;
  44. double x[3] = {-0.77459667, 0, 0.7745967};
  45. long double c[3] = { 5.0 / 9.0, 8.0 / 9.0, 5.0 / 9.0 };
  46. long double t1, t2, t3;
  47. for (int i = 0; i < n; i++) {
  48. t1 = h * i + 0.5*h*(-0.7745966692414834) + 0.5*h + a, t2 = 0.5*h + i * h + a, t3 = 0.5*h*0.7745966692414834 + 0.5*h + i*h+a;
  49. res = res +(0.5*(b - a)*(1.0/n)*((5.0 / 9.0)*f(t1) + (8.0 / 9.0)*f(t2) + (5.0 / 9.0)*f(t3)));
  50. }
  51. return res;
  52. }
  53.  
  54. long double simpson(long double a, long double b, int n) {
  55. long double h = (b - a) / n;
  56. long double res = 0;
  57. for (int i = 1; i <= n; i++) {
  58. res = res + (f(a + h * (i - 1)) + f(a + i * h) + 4 * f(a + h * i - h* 0.5));
  59. }
  60. return (h*res) / 6;
  61. }
  62.  
  63. long double prm(long double a, long double b, int n) {
  64. long double h = (b - a) / n;
  65. long double y = a;
  66. long double res = 0;
  67. for (int i = 1; i <= n; i++) {
  68. res = res + f(a+(h*i-h*0.5));
  69. }
  70. return h * res;
  71. }
  72.  
  73. long double fault_sin(long double x, long double a, long double b) {
  74. return integer_sin(a, b) - x;
  75. }
  76.  
  77.  
  78.  
  79. long double int_runge_simp(long double a, long double b, int n) {
  80. long double res = 0, h;
  81. h = (b - a) / 2.0;
  82. for (double i = a; i < b; i = i + h) {
  83. res = res + simpson(i, i + h, n);
  84. }
  85. return simpson(a, b, n) + (4.0 / 3.0)*(res - simpson(a, b, n));
  86. }
  87.  
  88. long double int_runge_tr(long double a, long double b, int n) {
  89. long double res = 0, h;
  90. h = (b - a) / 2.0;
  91. for (double i = a; i < b; i = i + h) {
  92. res = res + prm(i, i + h, n);
  93. }
  94. return prm(a, b, n) + (4.0 / 3.0)*(res - prm(a, b, n));
  95. }
  96.  
  97. long double int_runge_gauss(long double a, long double b, int n) {
  98. long double res = 0, h;
  99. h = (b - a) / 2.0;
  100. for (double i = a; i < b; i = i + h) {
  101. res = res + gauss3(i, i + h, n);
  102. }
  103. return gauss3(a, b, n) + (4.0/ 3.0)*(res - gauss3(a, b, n));
  104. }
  105.  
  106.  
  107. long double rh_runge_simp_sin(long double a, long double b, int n) {
  108. return (abs(simpson(a, b, 2 * n) - simpson(a, b, n))) / 15;
  109. }
  110.  
  111. //long double rh_runge_simp_sin(long double a, long double b, int n) {
  112. //return (abs(simpson(a,b, 2*n) - simpson(a, b, n)))/15;
  113. //}
  114.  
  115. long double rh_runge_tr_sin(long double a, long double b, int n) {
  116. return (abs(prm(a, b, n * 2) - prm(a, b, n))) / 3;
  117. }
  118.  
  119. long double rh_runge_g_sin(long double a, long double b, int n) {
  120. return (abs(gauss3(a, b, n * 2) - gauss3(a, b, n))) / 31;
  121. }
  122.  
  123.  
  124. long double log(long double a, long double b, long double n) {
  125. return log(abs((simpson(a,b, n)-simpson(a, b, 2*n))/(simpson(a, b, 2*n)-simpson(a,b, 4*n)))) / log(2);
  126. }
  127.  
  128. long double log_pr(long double a, long double b, long double n) {
  129. return log(abs((prm(a, b, n) - prm(a, b, 2 * n)) / (prm(a, b, 2 * n) - prm(a, b, 4 * n)))) / log(2);
  130. }
  131.  
  132. long double log_g(long double a, long double b, long double n) {
  133. return log(abs((gauss3(a, b, n) - gauss3(a, b, 2 * n)) / (gauss3(a, b, 2 * n) - gauss3(a, b, 4 * n)))) / log(2);
  134. }
  135.  
  136.  
  137. //long double log_RP(long double a, long double b, long double n) {
  138. // return log(abs((rh_runge_tr_sin(a, b, n) - rh_runge_tr_sin(a, b, 2 * n)) / (rh_runge_tr_sin(a, b, 2 * n) - rh_runge_tr_sin(a, b, 4 * n)))) / log(2);
  139. //}
  140. //
  141. //long double log_RS(long double a, long double b, long double n) {
  142. // return log(abs((int_runge_simp(a, b, n) - int_runge_simp(a, b, 2 * n)) / (int_runge_simp(a, b, 2 * n) - int_runge_simp(a, b, 4 * n)))) / log(2);
  143. //}
  144. //
  145. //long double log_RG(long double a, long double b, long double n) {
  146. // return log(abs((rh_runge_g_sin(a, b, n) - rh_runge_g_sin(a, b, 2 * n)) / (rh_runge_g_sin(a, b, 2 * n) - rh_runge_g_sin(a, b, 4 * n)))) / log(2);
  147. //}
  148.  
  149.  
  150. void writing_to_the_fail(ofstream &res, long double a, long double b) {
  151. res << setw(5) << "num" << setw(15) << "prm:" << setw(15) << "simpson:" << setw(15) << "Gauss:" << endl;
  152. int n;
  153. for (int i = 1; i <= 10; i++) {
  154. n = pow(n0, i);
  155. res << setw(5) << "F:" << setw(15) << fault_sin(prm(a, b, n), a, b) << setw(15) << fault_sin(simpson(a, b, n), a, b) << setw(15) << fault_sin(gauss3(a, b, n), a, b) << endl;
  156. }
  157. res << endl;
  158. for (int i = 1; i <= 10; i++) {
  159. n = pow(n0, i);
  160. res << setw(5) << "R:" << setw(15) << rh_runge_tr_sin(a, b, n) << setw(15) << rh_runge_simp_sin(a, b, n) << setw(15) << rh_runge_g_sin(a, b, n) << endl;
  161. }
  162. res << endl;
  163. for (int i = 1; i <= 10; i++) {
  164. n = pow(n0, i);
  165. res << setw(5) << "M:" << setw(15) << log_pr(a,b,n) << setw(15) << log(a,b,n) << setw(15) << log_g(a,b,n) << endl;
  166. }
  167. res << endl;
  168. for (int i = 1; i <= 10; i++) {
  169. n = pow(n0, i);
  170. res << setw(5) << "int_R" << setw(15) << int_runge_tr(a, b, n) << setw(15) << int_runge_simp(a, b, n) << setw(15) << int_runge_gauss(a, b, n) << endl;
  171. }
  172. res << endl;
  173. //for (int i = 1; i <= 10; i++) {
  174. // n = pow(n0, i);
  175. // res << setw(5) << "M:" << setw(15) << log_RP(a, b, n) << setw(15) << log_RS(a, b, n)<<setw(15) << log_RG(a, b, n) <<endl;
  176. //}
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement