С.И.Хашин
class polynom : public MathFunc1 { private: int size; // размер массива int deg; // степень, <=size-1. !Степень нулевого многочлена равна -1! int rRoots; // количество действительных корней int cRoots; // количество пар комплексно-сопряженных корней // deg = rRoots + 2*cRoots double *a; // коэффициенты double *roots; // корни *** };
Создание многочлена, бином ((a0 + a1x)d), сложение, взятие производной, значение в точке, 1-я и 2-я производные в точке, корни многочленов степени 1,2,3,4 (точные решения).
Существенные методы:
double NewtonStep( double x); // return x-f(x)/f'(x)Если модуль производной в точке не превышает 1e-14, то функция возвращает 1e99.
void HichkokStep( double &a, double &b); // one step of Hichkok methodМетод описан в книге «Березин И.С. Жидков Н.П. Методы вычислений (том 1) 1962», все вычисления в точности совпадают, с указанными в книге (стр. 172). Отметим только некоторые упрощения при вычислениях. А именно, пусть остаток от деления многочлена f на (x2+ax+b)2 равен p3x3 + p2x2 + p1x + p0 . Тогда следующее приближение для (a,b) можно найти по формулам:
a' = ( -p2*a^2*p3+p3^2*a^3+p3^2*a*b+p2*p1-p3*a*p1-p3*p0)/Det, b' = ( -b*p3*a*p2+b*p3^2*a^2+b*p3*p1-2*p0*p3*a+p0*p2)/Det, где Det = p2^2-3*p2*p3*a+2*p3^2*a^2+b*p3^2.