Текст подпрограммы и версий ( Фортран )
zf13r.zip  zf13d.zip 
Тексты тестовых примеров ( Фортран )
tzf13r.zip  tzf13d.zip 
Текст подпрограммы и версий ( Си )
zf13r_c.zip  zf13d_c.zip 
Тексты тестовых примеров ( Си )
tzf13r_c.zip  tzf13d_c.zip 
Текст подпрограммы и версий ( Паскаль )
zf13r_p.zip  zf13e_p.zip 
Тексты тестовых примеров ( Паскаль )
tzf13r_p.zip  tzf13e_p.zip 

Подпрограмма:  ZF13R

Назначение

Вычисление нулей вещественной функции методом Мюллера, когда начальное приближение нулей плохое.

Математическое описание

ZF13R вычисляет  N вещественных нулей вещественной функции Y = F (Х), когда начальное приближение нулей ROOT (1), ROOT (2), ..., ROOT (N) плохое, используя метод Мюллера.

Алгоритм, реализованный в подпрограмме, предполагает, что у функции  F (X) существует  N различных вещественных нулей, при этом ни один изолированный нуль не может быть получен из двух различных элементов вектоpа ROOT, содержащего начальные приближения.

Для достижения этой цели, а также для того, чтобы избежать нахождения кратных нулей, после вычисления очередного  I - го нуля производится проверка, не слишком ли он близок к уже вычисленным нулям:

(1)      | ROOT( I ) - ROOT( J ) | < | EPS1 |  ,       J = 1, 2,..., I - 1  , 

где EPS1 задается перед обращением к подпрограмме. Если условие (1) выполнено для какого - нибудь  J, вычисление  I - го нуля возобновляется с начальным приближением ROOT ( I ) + ЕРS2, где EPS2 также задается перед обращением к подпрограмме. Таким образом, EPS1 и EPS2 определяют критерий отделения кратных нулей.

B.Leavenworth, Algorithm 25: Real Zeros of an Arbitrary Function, Comm. of the A.C.M, 3 (11), 1960.

Использование

    SUBROUTINE  ZF13R (F, N, EPS, NDIG, EPS1, EPS2,
                                            ROOT, ITMAX, IERR) 

Параметры

F - имя вещественной подпрограммы - функции вычисления  F (X);
N - заданное число искомых нулей функции (тип: целый);
EPS - первый критерий сходимости: заданная абсолютная погрешность вычисления нулей функции (тип: вещественный);
NDIG - второй критерий сходимости: заданное число значащих цифр, с которыми предполагается вычислить нули функции (тип: целый);
      EPS1 -
      EPS2  
определяют критерий отделения кратных нулей (тип: вещественный);
ROOT - вещественный вектоp длины  N, в который в pезультате работы подпрограммы помещаются вычисленные нули функции; перед началом работы подпрограммы вектоp ROOT содержит начальные приближения к искомым нулям;
ITMAX - целая переменная, значение которой перед началом работы подпрограммы должно быть положено равным максимальному числу итераций, ориентировочно требуемых для обеспечения сходимости; в pезультате работы подпрограммы ее значение полагается равным числу итераций, проводившихся при нахождении последнего нуля;
IERR - целая переменная, значение которой в результате работы подпрограммы полагается равным 1, если хотя бы один нуль не может быть посчитан в пределах заданного числа итераций; соответствующая компонента вектоpа ROOT полагается равной 3.4E38.

Версии

ZF13D - вычисление нулей вещественной функции методом Мюллера с повышенной точностью, когда начальное приближение нулей плохое. При этом EPS, EPS1, EPS2, а также вектоp ROOT должны иметь тип DOUBLE PRECISION.

Вызываемые подпрограммы

UTZF10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы ZF13R.
UTZF11 - подпрограмма выдачи диагностических сообщений при работе подпрограммы ZF13D.

Замечания по использованию

 

При обращении к подпрограмме может быть задан только первый критерий сходимости (тогда NDIG задается равным 0), либо только второй критерий (тогда EPS задается равным 0), либо оба критерия одновременно.

Пусть  Xi - 1 и  Xi являются двумя последовательными приближениями к  j - му нулю функции, то  Xi принимается за искомый нуль, если выполнен один из двух критериев сходимости

       | F(Xi) | ≤ | EPS |   или   | Xi-1 - Xi | < | Xi | * 10 (- NDIG ) . 
Если в ZP13D хотя бы один нуль не может быть посчитан в пределах заданного числа итераций, то соответствующая компонента вектоpа ROOT полагается равной 1.7D308 и IERR = 1.

Пример использования

       FUNCTION  F(X)
       F = X*X + 2.0*X - 6.0
       RETURN
       END

       EXTERNAL  F
       DIMENSION  ROOT(2)
       N = 2
       EPS = 0.00001
       NDIG = 5
       EPS1 = 0.00001
       EPS2 = 0.01
       ROOT(1) = 4.6
       ROOT(2) = - 193.3
       ITMAX = 100
       CALL  ZF13R (F, N, EPS, NDIG, EPS1, EPS2, ROOT, ITMAX, IERR)

Результаты:    ROOT(1)  =  1.645751 ,    ROOT(2)  =  - 3.645751 ,
                         ITMAX  =  4