isotonicq

Całka

Dec 21st, 2016
110
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.Linq;
  4. using System.Reflection;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace Calka
  9. {
  10.     public interface Methods
  11.     {
  12.        void showMethod(double result, double steps);
  13.        double calculateResult(ref double k, double a, double b);
  14.     }
  15.  
  16.     public static class MathFunctions
  17.     {
  18.         public static readonly double M_E = 2.71828182845904523536;
  19.  
  20.         public static double f(double x) => (Math.Pow(M_E, x) + 1) / (Math.Pow(x, 2) + 1);
  21.        
  22.         public static double h(double k, double a, double b) => ((b - a) / Math.Pow(2, k));
  23.      
  24.         public static double x(double i, double k, double a, double b) => (a + i * h(k, a, b));
  25.        
  26.         public static double y(double i, double k, double a, double b) => (f(x(i, k, a, b)));      
  27.     }
  28.  
  29.     public static class SumFunctions
  30.     {
  31.        public static double sum1(double k, double a, double b)
  32.         {
  33.             double sum = 0;
  34.             for (int i = 1; i < Math.Pow(2, k); i++)
  35.             {
  36.                 sum += MathFunctions.y(i, k, a, b);
  37.             }
  38.             return sum;
  39.         }
  40.  
  41.         public static double sum2(double k, double a, double b)
  42.         {
  43.             double sum = 0;
  44.             for (int i = 1; i < Math.Pow(2, k); i += 2)
  45.             {
  46.                 sum += MathFunctions.y(i, k, a, b);
  47.             }
  48.             return sum;
  49.         }
  50.  
  51.         public static double sum3(double k, double a, double b)
  52.         {
  53.             double sum = 0;
  54.  
  55.             for (int i = 2; i < Math.Pow(2, k) - 1; i += 2)
  56.             {
  57.                 sum += MathFunctions.y(i, k, a, b);
  58.             }
  59.             return sum;
  60.         }
  61.  
  62.        public static double sum4(double k, double a, double b)
  63.         {
  64.             double sum = 0;
  65.             for (int i = 1; i <= Math.Pow(2, k - 1) - 1; i++)
  66.             {
  67.                 sum += MathFunctions.f(a + ((2 * i) - 1) * MathFunctions.h(k, a, b));
  68.             }
  69.             return sum;    
  70.         }
  71.     }
  72.  
  73.     public static class MathMethods
  74.     {
  75.         public static double T(double k, double a, double b) => (MathFunctions.h(k, a, b) / 2) * (MathFunctions.f(a) + MathFunctions.f(b) + 2 * SumFunctions.sum1(k, a, b));
  76.        
  77.         public static double S(double k, double a, double b) => (MathFunctions.h(k, a, b) / 3) * (MathFunctions.y(0, k, a, b) + MathFunctions.y(Math.Pow(2, k), k, a, b) + 4 * SumFunctions.sum2(k, a, b) + 2 * SumFunctions.sum3(k, a, b));
  78.        
  79.         public static double R(double k, double a, double b)
  80.         {
  81.             if (k == 0)
  82.                 return ((MathFunctions.f(a) + MathFunctions.f(b)) / 2) * (b - a);
  83.             else
  84.                 return (1 / 2 * R(k - 1, a, b)) + (MathFunctions.h(k, a, b) * SumFunctions.sum4(k, a, b));
  85.         }
  86.     }
  87.  
  88.     public static class ExecuteMethods
  89.     {
  90.         public static readonly double eps = 10e-4;
  91.  
  92.         public static double R(ref double kr,double a, double b)
  93.         {
  94.             double R1 = 0, R2 = 0;
  95.             do
  96.             {
  97.                 kr++;
  98.                 R2 = R1;
  99.                 R1 = MathMethods.R(kr,a,b);
  100.  
  101.             } while (Math.Abs(R1 - R2) > eps);
  102.             return R1;
  103.         }
  104.  
  105.         public static double S(ref double ks,double a, double b)
  106.         {
  107.             double S1 = 0, S2 = 0;
  108.             do
  109.             {
  110.                 ks++;
  111.                 S2 = S1;
  112.                 S1 = MathMethods.S(ks, a, b);
  113.  
  114.             } while (Math.Abs(S1 - S2) > eps);
  115.             return S1;
  116.         }
  117.  
  118.         public static double T(ref double kt,double a, double b)
  119.         {
  120.             double T1=0,T2 = 0;
  121.             do
  122.             {
  123.                 kt++;
  124.                 T2 = T1;
  125.                 T1 = MathMethods.T(kt, a, b);
  126.             } while (Math.Abs(T1 - T2) > eps);
  127.  
  128.             return T1;
  129.         }
  130.     }
  131.  
  132.     public class ShowResultsT : Methods
  133.     {
  134.         public double calculateResult(ref double k, double a, double b)
  135.         {
  136.             return ExecuteMethods.T(ref k, a, b);
  137.         }
  138.  
  139.         public void showMethod(double result, double steps)
  140.         {
  141.             Console.WriteLine($"Metoda trapezów:");
  142.             Console.WriteLine($" wynik: {result}");
  143.             Console.WriteLine($" kroki: {steps}");
  144.             Console.WriteLine();
  145.         }
  146.     }
  147.  
  148.     public class ShowResultsS : Methods
  149.     {
  150.         public double calculateResult(ref double k, double a, double b)
  151.         {
  152.             return ExecuteMethods.S(ref k, a, b);
  153.         }
  154.  
  155.         public void showMethod(double result, double steps)
  156.         {
  157.             Console.WriteLine($"Metoda parabol:");
  158.             Console.WriteLine($" wynik: {result}");
  159.             Console.WriteLine($" kroki: {steps}");
  160.             Console.WriteLine();
  161.         }
  162.     }
  163.  
  164.     public class ShowResultsR : Methods
  165.     {
  166.         public double calculateResult(ref double k, double a, double b)
  167.         {
  168.             return ExecuteMethods.R(ref k,a,b);
  169.         }
  170.  
  171.         public void showMethod(double result, double steps)
  172.         {
  173.             Console.WriteLine($"Metoda na r:");
  174.             Console.WriteLine($" wynik: {result}");
  175.             Console.WriteLine($" kroki: {steps}");
  176.             Console.WriteLine();
  177.         }
  178.     }
  179.  
  180.  
  181.     class Program
  182.     {
  183.         static void Main(string[] args)
  184.         {
  185.             #region user variables
  186.             double a = -2;
  187.             double b = 0;
  188.             #endregion
  189.  
  190.             #region program variables
  191.             double steps=1;
  192.             var methods = from t in Assembly.GetExecutingAssembly().GetTypes()
  193.                             where t.GetInterfaces().Contains(typeof(Methods))
  194.                                      && t.GetConstructor(Type.EmptyTypes) != null
  195.                             select Activator.CreateInstance(t) as Methods;
  196.             #endregion
  197.  
  198.             #region execute
  199.             foreach (var method in methods)
  200.             {
  201.                 method.showMethod(method.calculateResult(ref steps,a,b),steps);
  202.             }
  203.             #endregion
  204.         }
  205.     }
  206. }
RAW Paste Data