Поиск интервала корней нелинейного уравнения

Я реализую метод секущей, в котором мне надо найти интервал, в котором расположены корни уравнения. Но у меня он не работает, в чем ошибка может быть?

#pragma once
#include "SecantMethod.h"
#include "Func1.h"
#include <iostream>
#include <math.h>
#define eps 0.000001

double SecantMethod::method(functions* fx)
{
    double a, b, x0 = 1;
    double d0 = 2; //начальный интервал
    double dmax = 200.0; //максимальный интервал
    a = x0 - d0;
    b = x0 + d0;
    double Fx0 = fx->f(x0);
    double Fa = fx->f(a);
    double Fb = fx->f(b);

    while ((d0++) < dmax)
    {
        if (Fx0 >= 0)
        {
            if (Fa < 0)
            {
                b = x0;
                return 1;
            }
            if (Fb < 0)
            {
                a = x0;
                return 1;
            }
            if (Fa > Fb)
            {
                a = x0, x0 = b;
                b += d0;
                Fa = Fx0, Fx0 = Fb;
                Fb = fx->f(b);
            }
            else
                if (Fa < Fb)
                {
                    b = x0, x0 = a;
                    a -= d0;
                    Fb = Fx0, Fx0 = Fa;
                    Fa = fx->f(a);
                }
                else
                {
                    a -= d0, b += d0;
                    Fb = fx->f(b);
                    Fa = fx->f(a);
                }
        }
        else
            if (Fx0 < 0)
            {
                if (Fa >= 0)
                {
                    b = x0;
                    return 1;
                }
                else
                    if (Fb >= 0)
                    {
                        a = x0;
                        return 1;
                    }
                if (Fa < Fb)
                {
                    a = x0, x0 = b;
                    b += d0;
                    Fa = Fx0, Fx0 = Fb;
                    Fb = fx->f(b);
                }
                else
                    if (Fa > Fb)
                    {
                        b = x0, x0 = a;
                        a -= d0;
                        Fb = Fx0, Fx0 = Fa;
                        Fa = fx->f(a);
                    }
                    else
                    {
                        a -= d0, b += d0;
                        Fb = fx->f(b);
                        Fa = fx->f(a);
                    }
        }
    }

    while (fabs(b - a) > eps)
    {
        Fa = fx->f(a);
        Fb = fx->f(b);
        a = b - (b - a) * Fb / (Fb - Fa);
        b = a - (a - b) * Fa / (Fa - Fb);
    }

    std::cout << "\nx: " << b << "\nf(x): " << fx->f(b) << std::endl;
    return 0;
}

Ответы (0 шт):