function RES=DFRidr(A,X,H);
% function RES=DFRidr(A,X,H);
% Знаходження похідної функції, заданої поліномом із коефіцієнтами A,
% у точці з абсцисою X та кроком H
% "Numerical recipes in C", 5.7, p.188, функція dfridr
% Арументи:
%   A - коефіцієнти полінома, що передаються функції GetPoly
%   X - абсциса точки, у якій необхідно знайти похідну
%   H - крок, що використовується у функції
% Результати:
%   RES - значення похідної
% Обмеження:
%   1) крок повинен бути не дуже великий, проте і не малий (будемо
%      використовувати значення H=0.1

NTAB=10;                                % максимальна кількість табульованих значень
BIG=1.0e30;                             % значення для ініціалізації похибки
CON=1.4;                                % кро буде кожного разу зменшуватись в CON разів
CON2=CON*CON;
SAFE=2;                                 % обчислення закінчуються, коли помилка у SAFE разів
                                        % гірша, ніж знайдена до цього моменту

T=zeros(NTAB,NTAB);                     % матриця, у яку записуватимуться результати проміжних розрахунків
HH=H;
T(1,1)=(GetPoly(A,X+HH)-GetPoly(A,X-HH))/(2*HH);
err=BIG;
for i=2:NTAB
    % наступні стовпчики у таблиці Невілла будуть переходити до менших
    % кроків та більшого порядку екстраполяції
    HH=HH/CON;
    % спробуємо новий, менший крок
    T(1,i)=(GetPoly(A,X+HH)-GetPoly(A,X-HH))/(2*HH);
    fac=CON2;
    % обчислюємо екстраполяцію різних порядків, не вимагаючи додаткових
    % обчислень значень функції
    for j=2:i
        T(j,i)=(T(j-1,i)*fac-T(j-1,i-1))/(fac-1);
        fac=CON2*fac;
        errt=max(abs(T(j,i)-T(j-1,i)),abs(T(j,i)-T(j-1,i-1)));
        % стратегія обчислення помилки полягає у порівнянні кожної нової
        % екстраполяції із такою ж меншого на 1 порядку, причому обидві
        % обчислені для одного кроку
        if (errt<=err) err=errt; RES=T(j,i); end
    end
    % якщо вищі порядки гірші у SAFE разів, то виходимо негайно
    if (abs(T(i,i)-T(i-1,i-1))>=SAFE*err) break; end
end

% очищуємо локальні змінні
clear NTAB BIG CON CON2 SAFE T HH err errt i j fac;