Нахождение корней нелинейных уравнений вида f(x)=0 методом половинного деления - C#
Формулировка задачи:
Определить метод нахождения корней нелинейных уравнений вида f(x)=0 методом половинного деления, a*x4+b*x2+c*x+d=0, где a,b,c - массивы из трех чисел, d-const.
ситуация накаляется, без вашей помощи я не справлюсь, надеюсь на вашу благосклонность
Решение задачи: «Нахождение корней нелинейных уравнений вида f(x)=0 методом половинного деления»
textual
Листинг программы
- using Foo = System.Func<float, float>;
- class Program
- {
- const float Eps = 1e-5f;
- static float Solve(Foo f, float a, float b, float eps = Eps, int count = 0)
- {
- float fa = f(a), fb = f(b), c, fc;
- if (fa * fb > 0) throw new ArgumentException();
- do {
- c = (a + b) / 2; fc = f(c);
- if (fc * fa < 0) { b = c; fb = fc; }
- else { a = c; fa = fc; }
- } while (Math.Abs(fc) > eps && --count != 0);
- return c;
- }
- static float SolveR(Foo f, float x, float dx, float eps = Eps)
- {
- return Math.Abs(f(x)) < eps ? x :
- SolveR(f, f(x + dx / 2) * f(x) < 0 ? x : x + dx / 2, dx / 2, eps);
- }
- static void Main(string[] args)
- {
- // x^4 + 3x^3 + 3x^2 - x - 6 = 0
- float[] a = {1, 3, 3, -1, -6};
- Foo f = x => a.Aggregate((s, q) => s*x + q);
- Console.WriteLine("X1 = {0:0.00}; {1:0.00}", Solve(f, 0, 10), SolveR(f, 0, 10));
- Console.WriteLine("X2 = {0:0.00}; {1:0.00}", Solve(f, -10, 0), SolveR(f, -10, 10));
- Console.ReadLine();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д