Поиск интервала корней нелинейного уравнения
Я реализую метод секущей, в котором мне надо найти интервал, в котором расположены корни уравнения. Но у меня он не работает, в чем ошибка может быть?
#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;
}