Какие существуют способы решения простых уравнений? - C#

Узнай цену своей работы

Формулировка задачи:

уравнения вида y = x^2 * x и т.п можно ли решить не используя стандартных функций как pow т.п ну и естественно без переумножений только решение не пишите прошу) нужно только пнуть в нужное направление, ссылки на методы может быть)

Решение задачи: «Какие существуют способы решения простых уравнений?»

textual
Листинг программы
  1. namespace nonlinear
  2. {
  3.     class Program
  4.     {
  5.         public delegate double Function(double x);
  6.  
  7.         #region Linear Search
  8.         public static double LinearIncrementalSearch(Function f, double xstart, double deltaX, int nMaxInc)
  9.         {
  10.             double x = xstart;
  11.             double fstart = f(x);
  12.             double fx = fstart;
  13.             double fProd = 0;
  14.             for (int i = 0; i < nMaxInc; i++)
  15.             {
  16.                 x = xstart + i * deltaX;
  17.                 fx = f(x);
  18.                 fProd = fstart * fx;
  19.                 if (fProd < 0)
  20.                     break;
  21.             }
  22.             if (fProd > 0)
  23.                 throw new Exception("Solution not found!");
  24.             else
  25.             {
  26.                 return x = x - deltaX * fx / (fx - f(x - deltaX));
  27.             }
  28.         }
  29.         #endregion
  30.  
  31.         #region Bisection Method
  32.         public static double BisectionMethod(Function f, double a, double b, double epsilon)
  33.         {
  34.             double x1 = a;
  35.             double x2 = b;
  36.             double fb = f(b);
  37.             while (Math.Abs(x2 - x1) > epsilon)
  38.             {
  39.                 double midpt = 0.5 * (x1 + x2);
  40.                 if (fb * f(midpt) > 0)
  41.                     x2 = midpt;
  42.                 else
  43.                     x1 = midpt;
  44.             }
  45.             return x2 - (x2 - x1) * f(x2) / (f(x2) - f(x1));
  46.         }
  47.         #endregion
  48.  
  49.         #region Secant Method
  50.         public static double SecantMethod(Function f, double a, double b, double epsilon)
  51.         {
  52.             double x1 = a;
  53.             double x2 = b;
  54.             double fb = f(b);
  55.             while (Math.Abs(f(x2)) > epsilon)
  56.             {
  57.                 double mpoint = x2 - (x2 - x1) * fb / (fb - f(x1));
  58.                 x1 = x2;
  59.                 x2 = mpoint;
  60.                 fb = f(x2);
  61.             }
  62.             return x2;
  63.         }
  64.         #endregion
  65.  
  66.         #region False Position Method
  67.         public static double FalsePositionMethod(Function f, double a, double b, double epsilon)
  68.         {
  69.             double x1 = a;
  70.             double x2 = b;
  71.             double fb = f(b);
  72.             while (Math.Abs(x2 - x1) > epsilon)
  73.             {
  74.                 double xpoint = x2 - (x2 - x1) * f(x2) / (f(x2) - f(x1));
  75.                 if (fb * f(xpoint) > 0)
  76.                     x2 = xpoint;
  77.                 else
  78.                     x1 = xpoint;
  79.                 if (Math.Abs(f(xpoint)) < epsilon)
  80.                     break;
  81.             }
  82.             return x2 - (x2 - x1) * f(x2) / (f(x2) - f(x1));
  83.         }
  84.         #endregion
  85.  
  86.         #region Fixed Point Method
  87.         public static double FixedPointMethod(Function f, double x0, double epsilon, int nMaxIter)
  88.         {
  89.             double x1 = x0;
  90.             double x2 = x0;
  91.             double currEpsilon = 0.0;
  92.             for (int i = 0; i < nMaxIter; i++)
  93.             {
  94.                 x2 = f(x1);
  95.                 currEpsilon = Math.Abs(x1 - x2);
  96.                 x1 = x2;
  97.                 if (currEpsilon < epsilon)
  98.                     break;
  99.             }
  100.             if (currEpsilon > epsilon)
  101.             {
  102.                 throw new Exception("Solution not found!");
  103.             }
  104.             return x1;
  105.         }
  106.         #endregion
  107.  
  108.         #region Newton-Raphson Method
  109.         public static double NewtonRaphsonMethod(Function f, Function fprime, double x0, double epsilon)
  110.         {
  111.             double f0 = f(x0);
  112.             double x = x0;
  113.             while (Math.Abs(f(x)) > epsilon)
  114.             {
  115.                 x -= f0 / fprime(x);
  116.                 f0 = f(x);
  117.             }
  118.             return x;
  119.         }
  120.         #endregion
  121.  
  122.         #region Test Functions
  123.         static double F(double x)
  124.         {
  125.             //Setup for test case: x^3 - 5x + 3 = 0
  126.             return x * x * x - 5.0 * x + 3.0;
  127.         }
  128.  
  129.         static double Ffixpt(double x)
  130.         {
  131.             //Setup for test case: x^2 + 2x - 35 = 0
  132.             //Test function = sqrt(35 - 2x)
  133.             return Math.Sqrt(35.0 - 2.0 * x);
  134.         }
  135.  
  136.         static double F1(double x)
  137.         {
  138.             return Math.Sin(x) - x * x * x * x;
  139.         }
  140.  
  141.         static double F1prime(double x)
  142.         {
  143.             return Math.Cos(x) - 4.0 * x * x * x;
  144.         }
  145.         #endregion
  146.        
  147.         static void Main(string[] args)
  148.         {
  149.             try
  150.             {
  151.                 Console.WriteLine("\n\nTesting Linear Incremental Search Methodn");
  152.                 double deltaX = 0.01;
  153.                 int n = 500;
  154.                 double x = -4.0;
  155.                 for (int i = 1; i <= 3; i++)
  156.                 {
  157.                     x = LinearIncrementalSearch(F, x, deltaX, n);
  158.                     Console.WriteLine("\nSolution " + i.ToString() + " = " + x.ToString());
  159.                     Console.WriteLine("Solution confirmation: f(x) = " + F(x).ToString());
  160.                 }
  161.                 Console.ReadLine();
  162.  
  163.                 Console.WriteLine("\n\nTesting Bisection Method\n");
  164.                 x = BisectionMethod(F, 1.0, 2.0, 0.0001);
  165.                 Console.WriteLine("Solution from the bisection method: " + x.ToString());
  166.                 Console.WriteLine("Solution confirmation: f(x) = " + F(x).ToString());
  167.                 Console.ReadLine();
  168.  
  169.                 Console.WriteLine("\n\nTesting Secant Method\n");
  170.                 x = SecantMethod(F, 1.0, 1.5, 0.0001);
  171.                 Console.WriteLine("Solution from the secant method: " + x.ToString());
  172.                 Console.WriteLine("Solution confirmation: f(x) = " + F(x).ToString());
  173.                 Console.ReadLine();
  174.  
  175.                 Console.WriteLine("\n\nTesting False Position Method\n");
  176.                 x = FalsePositionMethod(F, 1.0, 2.0, 0.0001);
  177.                 Console.WriteLine("Solution from the false position method: " + x.ToString());
  178.                 Console.WriteLine("Solution confirmation: f(x) = " + F(x).ToString());
  179.                 Console.ReadLine();
  180.  
  181.                 Console.WriteLine("\n\nTesting Fixed Point Method\n");
  182.                 double tol = 0.0001;
  183.                 n = 10000;
  184.                 double x0 = 1.6;
  185.                 x = FixedPointMethod(Ffixpt, x0, tol, n);
  186.                 Console.WriteLine("solution from the fixed point method: " + x.ToString());
  187.                 Console.WriteLine("Expected solution = 5.00");
  188.                 Console.ReadLine();
  189.  
  190.                 Console.WriteLine("\n\nTesting Testing Newton-Raphson Method\n");
  191.                 x = NewtonRaphsonMethod(F1, F1prime, 1.0, 0.0001);
  192.                 Console.WriteLine("Solution from the Newton-Raphson method: " + x.ToString());
  193.                 Console.WriteLine("Solution confirmation: f(x) = " + F1(x).ToString());
  194.                 Console.ReadLine();
  195.             }
  196.             catch (Exception ex)
  197.             {
  198.                 Console.WriteLine("Fatal error: " + ex.Message);
  199.                 Console.ReadLine();
  200.             }
  201.         }
  202.     }
  203. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы