Ошибка при нахождении точки минимума методом дихотомии
Я пытался реализовать алгоритм дихотомии, представленный на блоксхеме ниже:
схеме ниже:
Чтобы удостовериться, что программа работает как надо, я воспользовался сервисом сайта маth.semestr.ru и сравнил результаты вычислений на нем при f(x) = 3*x-x^2-1, при a = -1, b = 5, шаге приращения и точности 0.1(приняв за истину, что на сайте реализовали алгоритм правильно) и моей программы выяснилось, что в моей реализации по какой-то причине неверно вычисляется результат. Код программы:
// See https://aka.ms/new-console-template for more information
DichotomyMethod(-1, 5, 0.1, 0.1, -1);
double F(double x)
{
return 3 * x - Math.Pow(x, 2) - 1;
}
void DichotomyMethod(double a, double b, double e, double h, int c)
{ //a, b: концы отрезка, где происходит поиск точки экстремума
//e: точность
//h: шаг приращения
//c: константа. При поиске минимума 1, максимума -1.
double fm, x, f1, f2;
while (Math.Abs(b - a) > e)
{
x = (a + b) / 2;
f1 = F(x - h);
f2 = F(x + h);
if (c * f1 < c * f2)
{
b = x;
}
else
{
a = x;
}
}
x = (b + a) / 2;
fm = F(x);
Console.WriteLine("x = " + x + "F(x) = " + F(x));
}