Advertisement
Guest User

Untitled

a guest
May 16th, 2018
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.30 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. namespace Laba
  5. {
  6.  
  7. class MainClass
  8. {
  9.  
  10. public static double L(double X, double[] x, double[] f, int n)
  11. {
  12. double ans = f[0];
  13. double mulx = 1;
  14. for (int j = 1; j < n; j++)
  15. {
  16. mulx *= (X - x[j - 1]);
  17. ans += mulx * f[j];
  18. }
  19. return ans;
  20. }
  21. public static double F(double x, double eps)
  22. {
  23. double sum = 0;
  24. int sign = -1;
  25. double myx = x * x;
  26. double twon = 2;
  27. double facttwon = 2;
  28. double prevsum = 2 * eps;
  29. int n = 1;
  30. while (Math.Abs(prevsum - sum) > eps)
  31. {
  32. prevsum = sum;
  33. sum += sign * myx / twon / facttwon;
  34. sign *= -1;
  35. myx *= x * x;
  36. n++;
  37. twon = 2 * n;
  38. facttwon *= (2 * n * (2 * n - 1));
  39. }
  40.  
  41. return sum;
  42. }
  43.  
  44.  
  45. public static void Newton(double a, double b, double eps)
  46. {
  47.  
  48. double[] f = new double[100];
  49. double[] x = new double[100];
  50.  
  51. for (int n = 6; n < 100; n++)
  52. {
  53.  
  54. double h = (b - a) / (n - 1);
  55. for (int i = 0; i < n; i++)
  56. {
  57. x[i] = a + h * i;
  58.  
  59. f[i] = F(x[i], eps);
  60. }
  61. for (int i = 1; i < n; i++)
  62. for (int j = n - 1; j >= i; j--)
  63. f[j] = (f[j] - f[j - 1]) / (x[j] - x[j - i]);
  64.  
  65. int step = 2*n-1;
  66. h = (b - a) / (step - 1);
  67. double maxeps = 0;
  68. for (int i = 0; i < step; i++)
  69. {
  70. double X = a + i * h;
  71. // Console.WriteLine("{0}\t {1}\t {2}\t {3}", X, F(X, eps), L(X, x, f, n), Math.Abs(F(X, eps) - L(X, x, f, n)));
  72. maxeps = Math.Max(maxeps, Math.Abs(F(X, eps) - L(X, x, f, n)));
  73. }
  74. Console.WriteLine("{0:00.} {1:0.0000000000}", n, maxeps);
  75. }
  76.  
  77. }
  78. public static void Chebishev(double a, double b, double eps)
  79. {
  80. double[] f = new double[100];
  81. double[] x = new double[100];
  82.  
  83. for (int n = 6; n < 100; n++)
  84. {
  85.  
  86. for (int i = 0; i < n; i++)
  87. {
  88. x[i] = (b - a) / 2 * Math.Cos((2 * i + 1) * Math.PI / (2 * n + 2)) + (b + a) / 2;
  89.  
  90. f[i] = F(x[i], eps);
  91. }
  92. for (int i = 1; i < n; i++)
  93. for (int j = n - 1; j >= i; j--)
  94. f[j] = (f[j] - f[j - 1]) / (x[j] - x[j - i]);
  95.  
  96. int step = 2*n-1;
  97. double h = (b - a) / (step - 1);
  98. double maxeps = 0;
  99. for (int i = 0; i < step; i++)
  100. {
  101. double X = a + i * h;
  102. // Console.WriteLine("{0}\t {1}\t {2}\t {3}", X, F(X, eps), L(X, x, f, n), Math.Abs(F(X, eps) - L(X, x, f, n)));
  103. maxeps = Math.Max(maxeps, Math.Abs(F(X, eps) - L(X, x, f, n)));
  104. }
  105. Console.WriteLine("{0:00.} {1:0.0000000000}", n, maxeps);
  106. }
  107.  
  108. }
  109.  
  110. public static void tab(double a, double b, double eps, double h)
  111. {
  112. for (double x = a; x - eps <= b; x += h)
  113. Console.WriteLine("{0:0.0} {1:0.0000000000}", x, F(x, eps));
  114. }
  115.  
  116. public static double ff(double t)
  117. {
  118. if (t == 0)
  119. return 1;
  120. return (Math.Cos(t) - 1) / t;
  121. }
  122. static double z(double a, double h, int i)
  123. {
  124. return a + i * h;
  125. }
  126. public static double CenterSum(double a, double b, int n)
  127. {
  128. double h = (b - a) / n;
  129. double sum = 0;
  130. for (int i = 1; i <= n; i++)
  131. {
  132.  
  133. sum += ff((z(a, h, i) + z(a, h, i - 1)) / 2);
  134. }
  135. return sum * h;
  136. }
  137. public static double LeftSum(double a, double b, int n)
  138. {
  139. double h = (b - a) / n;
  140. double sum = 0;
  141. for (int i = 1; i <= n; i++)
  142. {
  143.  
  144. sum += ff(z(a, h, i - 1));
  145. }
  146. return sum * h;
  147. }
  148. public static double RightSum(double a, double b, int n)
  149. {
  150. double h = (b - a) / n;
  151. double sum = 0;
  152. for (int i = 1; i <= n; i++)
  153. {
  154.  
  155. sum += ff(z(a, h, i));
  156. }
  157. return sum * h;
  158. }
  159.  
  160. public static double TrapSum(double a, double b, int n)
  161. {
  162. double h = (b - a) / n;
  163. double sum = 0;
  164. for (int i = 1; i < n; i++)
  165. {
  166. sum += ff(z(a, h, i));
  167. }
  168. sum *= 2; sum += ff(z(a, h, 0)) + ff(z(a, h, n));
  169. return sum * h / 2;
  170. }
  171. public static double SimpsSum(double a, double b, int n)
  172. {
  173. double h = (b - a) / n;
  174.  
  175. double sum1 = 0;
  176. double sum2 = 0;
  177. for (int i = 1; i < n; i += 2)
  178. {
  179. sum1 += ff(z(a, h, i));
  180.  
  181. }
  182. for (int i = 2; i < n; i += 2)
  183. {
  184. sum2 += ff(z(a, h, i));
  185.  
  186. }
  187. sum1 *= 4;
  188. sum2 *= 2;
  189. double sum = ff(z(a, h, 0)) + ff(z(a, h, n)) + sum1 + sum2;
  190. return sum * h / 3;
  191. }
  192.  
  193.  
  194. public static double GaussSum(double a, double b, int n)
  195.  
  196. {
  197.  
  198. double h = (b - a) / n;
  199. double sum = 0;
  200. double sqrt3 = Math.Sqrt(3);
  201. for (int i = 1; i <= n; i++)
  202. {
  203.  
  204.  
  205. sum += ff(z(a, h, i - 1) + h / 2 * (1 - 1 / sqrt3));
  206.  
  207. sum += ff(z(a, h, i - 1) + h / 2 * (1 + 1 / sqrt3));
  208.  
  209. }
  210.  
  211. return sum * h / 2;
  212. }
  213. public static KeyValuePair<double, int> CenterRect(double a, double b, double eps)
  214. {
  215. int n = 2;
  216. while (Math.Abs(CenterSum(a, b, 2 * n) - CenterSum(a, b, n)) >= eps)
  217. n *= 2;
  218. return new KeyValuePair<double, int>(CenterSum(a, b, n), n);
  219. }
  220.  
  221. public static KeyValuePair<double, int> LeftRect(double a, double b, double eps)
  222. {
  223. int n = 2;
  224. while (Math.Abs(LeftSum(a, b, 2 * n) - LeftSum(a, b, n)) >= eps)
  225. n *= 2;
  226. return new KeyValuePair<double, int>(LeftSum(a, b, n), n);
  227. }
  228.  
  229. public static KeyValuePair<double, int> RightRect(double a, double b, double eps)
  230. {
  231. int n = 2;
  232. while (Math.Abs(RightSum(a, b, 2 * n) - RightSum(a, b, n)) >= eps)
  233. n *= 2;
  234. return new KeyValuePair<double, int>(RightSum(a, b, n), n);
  235. }
  236.  
  237. public static KeyValuePair<double, int> Trap(double a, double b, double eps)
  238. {
  239. int n = 2;
  240. while (Math.Abs(TrapSum(a, b, 2 * n) - TrapSum(a, b, n)) >= eps)
  241. n *= 2;
  242. return new KeyValuePair<double, int>(TrapSum(a, b, n), n);
  243. }
  244.  
  245. public static KeyValuePair<double, int> Simps(double a, double b, double eps)
  246. {
  247. int n = 2;
  248. while (Math.Abs(SimpsSum(a, b, 2 * n) - SimpsSum(a, b, n)) >= eps)
  249. n *= 2;
  250. return new KeyValuePair<double, int>(SimpsSum(a, b, n), n);
  251. }
  252. public static KeyValuePair<double, int> Gauss(double a, double b, double eps)
  253. {
  254. int n = 2;
  255. while (Math.Abs(GaussSum(a, b, 2 * n) - GaussSum(a, b, n)) >= eps)
  256. n *= 2;
  257. return new KeyValuePair<double, int>(GaussSum(a, b, n), n);
  258. }
  259.  
  260. public static void CalcIntegral(double a, double b, double h, double eps)
  261. {
  262. Console.WriteLine("Центральные прямоугольники");
  263. for (double x = a; x - eps <= b; x += h)
  264. {
  265. var ans = CenterRect(0, x, eps);
  266. Console.WriteLine("{0:0.0} {1:0.0000} {2:0.0000} {3}", x, F(x, eps), ans.Key, ans.Value);
  267. }
  268. Console.WriteLine("Левые прямоугольники");
  269. for (double x = a; x - eps <= b; x += h)
  270. {
  271. var ans = LeftRect(0, x, eps);
  272. Console.WriteLine("{0:0.0} {1:0.0000} {2:0.0000} {3}", x, F(x, eps), ans.Key, ans.Value);
  273. }
  274.  
  275. Console.WriteLine("Правые прямоугольники");
  276. for (double x = a; x - eps <= b; x += h)
  277. {
  278. var ans = RightRect(0, x, eps);
  279. Console.WriteLine("{0:0.0} {1:0.0000} {2:0.0000} {3}", x, F(x, eps), ans.Key, ans.Value);
  280. }
  281.  
  282. Console.WriteLine("Трапеции");
  283. for (double x = a; x - eps <= b; x += h)
  284. {
  285. var ans = Trap(0, x, eps);
  286. Console.WriteLine("{0:0.0} {1:0.0000} {2:0.0000} {3}", x, F(x, eps), ans.Key, ans.Value);
  287. }
  288.  
  289. Console.WriteLine("Симпсон");
  290. for (double x = a; x - eps <= b; x += h)
  291. {
  292. var ans = Simps(0, x, eps);
  293. Console.WriteLine("{0:0.0} {1:0.0000} {2:0.0000} {3}", x, F(x, eps), ans.Key, ans.Value);
  294. }
  295.  
  296. Console.WriteLine("Гаусс");
  297. for (double x = a; x - eps <= b; x += h)
  298. {
  299. var ans = Gauss(0, x, eps);
  300. Console.WriteLine("{0:0.0} {1:0.0000} {2:0.0000} {3}", x, F(x, eps), ans.Key, ans.Value);
  301. }
  302. }
  303. public static void Main(string[] args)
  304. {
  305. double a = 0.4, b = 4, h = 0.2, eps = 1e-6;
  306. Console.WriteLine("Табуляция");
  307. tab(a, b, eps, h);
  308. Console.WriteLine("Ньютон");
  309.  
  310. Newton(a, b, eps);
  311. Console.WriteLine("Чебышев");
  312. Chebishev(a, b, eps);
  313.  
  314.  
  315. CalcIntegral(a, b, h, 1e-5);
  316. }
  317. }
  318. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement