Метод Мюллера(парабол) в решении нелинейных уравнений
Не могу написать метод парабол так, чтобы решал все уравнения. Перерыл просто тонну информации но ни к какому выводу так и не пришел. Проблема в том, что где-то в цикле совершается невозможная операция, по-типу деления на ноль и программа вылетает. Выводит "nan", или "-nan(ind)". И в каком месте ошибка понять невозможно - весь код проверен сто раз. Возможно проблема в вводимых начальных приближениях, но никакой закономерности по поводу этого мне также выяснить не удалось.
Это код расчетной функции.
double parabl(double coef[], int n, double x0, double x1, double x2, double eps) {
double y0, y1, y2, a, b, d, c, x3, y, z0, z1;
while (fabs(x2 - x1) > eps)
{
y0 = func(coef, n, x0);
y1 = func(coef, n, x1);
y2 = func(coef, n, x2);
z0 = x0 - x2;
z1 = x1 - x2;
a = ((y0 - y2) / z0 - (y1 - y2) / z1) / (z0 - z1);
b = (y0 - y2) / z0 - a*z0;
c = y2;
d = min(fabs((-b + sqrt(pow(b,2) - 4*a*c)) / (2*a)),fabs((-b - sqrt(pow(b,2) - 4*a*c)) / (2*a)));
x3 = x2 + d;
if (x3 < x1) {
x2 = x1;
x1 = x3;
}
else {
x0 = x1;
x1 = x3;
}
}
return x3;
}