daily pastebin goal
50%
SHARE
TWEET

Untitled

a guest May 16th, 2018 117 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top