Нахождение корней нелинейных уравнений вида f(x)=0 методом половинного деления - C#

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

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

Определить метод нахождения корней нелинейных уравнений вида f(x)=0 методом половинного деления, a*x4+b*x2+c*x+d=0, где a,b,c - массивы из трех чисел, d-const.
ситуация накаляется, без вашей помощи я не справлюсь, надеюсь на вашу благосклонность

Решение задачи: «Нахождение корней нелинейных уравнений вида f(x)=0 методом половинного деления»

textual
Листинг программы
  1. using Foo = System.Func<float, float>;
  2.  
  3. class Program
  4. {
  5.     const float Eps = 1e-5f;
  6.  
  7.     static float Solve(Foo f, float a, float b, float eps = Eps, int count = 0)
  8.     {
  9.         float fa = f(a), fb = f(b), c, fc;
  10.         if (fa * fb > 0) throw new ArgumentException();
  11.  
  12.         do {
  13.             c = (a + b) / 2; fc = f(c);
  14.             if (fc * fa < 0) { b = c; fb = fc; }
  15.             else { a = c; fa = fc; }
  16.         } while (Math.Abs(fc) > eps && --count != 0);
  17.  
  18.         return c;
  19.     }
  20.  
  21.     static float SolveR(Foo f, float x, float dx, float eps = Eps)
  22.     {
  23.     return Math.Abs(f(x)) < eps ? x :
  24.         SolveR(f, f(x + dx / 2) * f(x) < 0 ? x : x + dx / 2, dx / 2, eps);
  25.     }
  26.  
  27.     static void Main(string[] args)
  28.     {
  29.         // x^4 + 3x^3 + 3x^2 - x - 6 = 0
  30.         float[] a = {1, 3, 3, -1, -6};
  31.         Foo f = x => a.Aggregate((s, q) => s*x + q);
  32.         Console.WriteLine("X1 = {0:0.00}; {1:0.00}", Solve(f, 0, 10), SolveR(f, 0, 10));
  33.         Console.WriteLine("X2 = {0:0.00}; {1:0.00}", Solve(f, -10, 0), SolveR(f, -10, 10));
  34.  
  35.         Console.ReadLine();
  36.     }
  37. }

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


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

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

7   голосов , оценка 3.857 из 5

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

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

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