Slavik9510

Untitled

Dec 6th, 2022
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.32 KB | None | 0 0
  1. using System;
  2.  
  3. namespace CM_Lab10
  4. {
  5. class Program
  6. {
  7. static double f(double x)
  8. {
  9. return Math.Sqrt(x * x * x) * Math.Sin(Math.PI * x / 2);
  10. }
  11. static double calcDeriv(double x, int order)
  12. {
  13. const double h = 1.0e-3;
  14.  
  15. if (order == 0) return f(x);
  16.  
  17. double y1 = calcDeriv(x - h, order - 1);
  18. double y2 = calcDeriv(x + h, order - 1);
  19.  
  20. return (y2 - y1) / (2 * h);
  21. }
  22. static double rectanglesError(double borderA, double borderB, int N)
  23. {
  24. double h = (borderB - borderA) / N;
  25. double mid = (borderA + borderB) / 2;
  26. double error = (calcDeriv(mid, 2) / 24) * (borderB - borderA) * Math.Pow(h, 2);
  27. return Math.Abs(error);
  28. }
  29. static double trapezoidError(double borderA, double borderB, int N)
  30. {
  31. double error;
  32. double h = (borderA + borderA) / N;
  33. double mid = (borderB - borderA) / 2;
  34. error = -(calcDeriv(mid, 2) / 12) * (borderB - borderA) * Math.Pow(h, 2);
  35. return Math.Abs(error);
  36. }
  37. static double simpsonError(double borderA, double borderB, int N)
  38. {
  39. double error;
  40. double m;
  41.  
  42. double max = calcDeriv(borderA + borderB, 4) / 2;
  43. if (Math.Abs(max) < Math.Abs(calcDeriv(borderA, 4)))
  44. {
  45. max = calcDeriv(borderA, 4);
  46. }
  47. else if (Math.Abs(max) < Math.Abs(calcDeriv(borderB, 4)))
  48. {
  49. max = calcDeriv(borderB, 4);
  50. }
  51.  
  52. m = max - (Math.Pow(borderB - borderA, 5)) / (180 * Math.Pow(N, 4));
  53. error = -(Math.Pow(borderB - borderA, 5) * m) / (180 * Math.Pow(N, 4));
  54.  
  55. return error;
  56.  
  57. }
  58. static void leftRectanglesMethod(double borderA, double borderB)
  59. {
  60. Console.WriteLine("**********************");
  61. Console.WriteLine("Left Rectangles Method");
  62. Console.WriteLine("**********************\n");
  63.  
  64. int N;
  65. Console.Write("Enter N: ");
  66. N = Convert.ToInt32(Console.ReadLine());
  67. double h = (borderB - borderA) / N;
  68. double I = 0;
  69.  
  70. double Xi = borderA;
  71. for (int i = 0; i < N; i++)
  72. {
  73. I += f(Xi) * h;
  74. Console.WriteLine($"X{i} = {Xi:F4}\tY{i} = {f(Xi):F4}");
  75. Xi += h;
  76. }
  77. Console.WriteLine($"Integral from {borderA} to {borderB} = {I} ± {rectanglesError(borderA, borderB, N)}");
  78. }
  79. static void rightRectanglesMethod(double borderA, double borderB)
  80. {
  81. Console.WriteLine("***********************");
  82. Console.WriteLine("Right Rectangles Method");
  83. Console.WriteLine("***********************\n");
  84.  
  85. int N;
  86. Console.Write("Enter N: ");
  87. N = Convert.ToInt32(Console.ReadLine());
  88. double h = (borderB - borderA) / N;
  89. double I = 0;
  90.  
  91. double Xi = borderB;
  92. for (int i = 0; i < N; i++)
  93. {
  94. I += f(Xi) * h;
  95. Console.WriteLine($"X{i + 1} = {Xi:F4}\tY{i + 1} = {f(Xi):F4}");
  96. Xi -= h;
  97. }
  98. Console.WriteLine($"Integral from {borderA} to {borderB} = {I} ± {rectanglesError(borderA, borderB, N)}");
  99. }
  100. static void midpointRectanglesMethod(double borderA, double borderB)
  101. {
  102. Console.WriteLine("**************************");
  103. Console.WriteLine("Midpoint Rectangles Method");
  104. Console.WriteLine("**************************\n");
  105.  
  106. int N;
  107. Console.Write("Enter N: ");
  108. N = Convert.ToInt32(Console.ReadLine());
  109. double h = (borderB - borderA) / N;
  110. double I = 0;
  111.  
  112. double Xi = borderA + h / 2;
  113. for (int i = 0; i < N; i++)
  114. {
  115. I += f(Xi) * h;
  116. Console.WriteLine($"X{i + 1} = {Xi:F4}\tY{i + 1} = {f(Xi):F4}");
  117. Xi += h;
  118. }
  119. Console.WriteLine($"Integral from {borderA} to {borderB} = {I} ± {rectanglesError(borderA, borderB, N)}");
  120. }
  121. static void trapezoidMethod(double borderA, double borderB)
  122. {
  123. Console.WriteLine("****************");
  124. Console.WriteLine("Trapezoid Method");
  125. Console.WriteLine("****************\n");
  126.  
  127. int N;
  128. Console.Write("Enter N: ");
  129. N = Convert.ToInt32(Console.ReadLine());
  130. double h = (borderB - borderA) / N;
  131. double I = 0;
  132.  
  133. double Xi = borderA;
  134. for (int i = 0; i < N; i++)
  135. {
  136. I += h * (f(Xi) + f(Xi + h)) / 2;
  137. Console.WriteLine($"X{i + 1} = {Xi:F4}\tY{i + 1} = {f(Xi):F4}");
  138. Xi += h;
  139. }
  140. Console.WriteLine($"Integral from {borderA} to {borderB} = {I} ± {trapezoidError(borderA, borderB, N)}");
  141. }
  142. static void simpsonMethod(double borderA, double borderB)
  143. {
  144. Console.WriteLine("**************");
  145. Console.WriteLine("Simpson Method");
  146. Console.WriteLine("**************\n");
  147.  
  148. int N;
  149. Console.Write("Enter N: ");
  150. N = Convert.ToInt32(Console.ReadLine()) * 2;
  151. double h = (borderB - borderA) / N;
  152. double I = 0;
  153.  
  154. double Xi = borderA;
  155. int iter = 1;
  156. for (int i = 0; i < N; i += 2)
  157. {
  158. I += (h / 3) * (f(Xi) + 4 * f(Xi + h) + f(Xi + 2 * h));
  159. Console.WriteLine($"X{iter} = {Xi:F4}\tY{iter} = {f(Xi):F4}");
  160. Xi += 2 * h;
  161. iter++;
  162. }
  163. Console.WriteLine($"Integral from {borderA} to {borderB} = {I} ± {simpsonError(borderA, borderB, N)}");
  164. }
  165. static void Main(string[] args)
  166. {
  167. Console.OutputEncoding = System.Text.Encoding.UTF8;
  168. leftRectanglesMethod(1, 5);
  169. rightRectanglesMethod(1, 5);
  170. midpointRectanglesMethod(1, 5);
  171. trapezoidMethod(1, 5);
  172. simpsonMethod(1, 5);
  173. }
  174. }
  175. }
  176.  
Advertisement
Add Comment
Please, Sign In to add comment