Текст подпрограммы и версий ( Фортран )
zf30r.zip  zf30d.zip 
Тексты тестовых примеров ( Фортран )
tzf30r.zip  tzf30d.zip 
Текст подпрограммы и версий ( Си )
zf30r_c.zip  zf30d_c.zip 
Тексты тестовых примеров ( Си )
tzf30r_c.zip  tzf30d_c.zip 
Текст подпрограммы и версий ( Паскаль )
zf30r_p.zip  zf30e_p.zip 
Тексты тестовых примеров ( Паскаль )
tzf30r_p.zip  tzf30e_p.zip 

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

Назначение

Решение системы  N нелинейных уравнений с  N неизвестными методом Брауна.

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

ZF30R находит решение системы  N нелинейных уравнений  F (X) = 0 с  N неизвестными. Подпрограмма использует метод Брауна, который имеет по крайней меpе квадратичную сходимость и требует N2/2 + 3N/2 вычислений  F (X) за один шаг итерации.

K.M.Brown, A Quadratically Convergent Newton - like Method Based upon Gaussian Elimination, SIAM on Numerical Analysis, 6 (4), 1969.

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

    SUBROUTINE  ZF30R (F, N, EPS, NDIG, ITMAX, ROOT,
                                            RAB, IERR) 

Параметры

F - имя подпрограммы - функции последовательного вычисления компонент системы  F (X) = 0 , которая должна быть оформлена как REAL FUNCTION  F (X, K), где  K - номеp вычисляемой компоненты системы,  K = 1, 2, ..., N;
N - заданное число уравнений системы (тип: целый);
EPS - первый критерий сходимости:  X0 принимается за решение системы  F (X), если | F (X0) | ≤ | EPS | (тип: вещественный);
NDIG - второй критерий сходимости: заданное число значащих цифр, с которыми ищется решение системы (тип: целый);
ITMAX - целая переменная, значение которой перед началом работы подпрограммы должно быть положено равным максимальному числу итераций, ориентировочно требуемых для обеспечения сходимости; в pезультате работы подпрограммы ее значение полагается равным действительному числу итераций, потребовавшихся для обеспечения сходимости в соответствии с заданными критериями;
ROOT - вещественный вектоp длины  N, содержащий вычисленное решение заданной системы; перед началом работы подпрограммы вектоp ROOT должен содержать начальное приближение к решению;
RAB - вещественный вектоp длины ((N + 2) (N - 1)) / 2 + 3N, используемый в подпрограмме как рабочий;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
IERR=65 - когда решение системы не может быть найдено в пределах заданного числа итераций;
IERR=66 - когда якобиан заданной системы имеет особенность.

Версии

ZF30D - решение системы N нелинейных уравнений с  N неизвестными методом Брауна с повышенной точностью. При этом параметры EPS, ROOT и RAB должны иметь тип DOUBLE PRECISION, а подпрограмма - функция последовательного вычисления компонент заданной системы должна быть оформлена как DOUBLE PRECISION  FUNCTION  F (X, K), где вектоp  X также должен иметь тип DOUBLE PRECISION.

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

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

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

 

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

Пусть  Xi - 1 и  Xi являются двумя последовательными приближениями к искомому решению системы  F (X) = 0. Тогда  Xi принимается за искомое решение, если выполнен один из двух критериев сходимости:

         | F(Xi) | ≤ | EPS |   для всех компонент системы
   или 
         | Xi -1 - Xi | < | Xi | * 10 (- NDIG ) . 

B случае IERR = 65 или IERR = 66 можно попробовать другое начальное приближение и (или) дополнительно исследовать систему с целью возможного исключения лишних уравнений или переменных, а также с целью возможного выражения одних переменных через другие.

Подпрограмма может быть использована для вычисления нуля вещественной функции.

Подпрограмма - функция последовательного вычисления компонент заданной системы должна иметь вид:

      FUNCTION  F(X, K)
      DIMENSION  X(1)
      GO TO (1, 2, ...), K
  1  F = (вычисление первой компоненты  системы для заданного  X)
      RETURN
  2  F = (вычисление второй компоненты  системы для заданного  X)
      RETURN
      .
      .
      END 

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

       FUNCTION  F(X, K)
       DIMENSION  X(1)
       GO TO (1, 2, 3),  K
   1  F = X(1) + EXP(X(1) - 1.) + (X(2) + X(3))**2 - 27.
       RETURN
   2  F = X(1) * EXP(X(2) - 2.) + X(3)**2 - 10.
       RETURN
   3  F = X(3) + SIN(X(2) - 2.) + X(2)**2 - 7.
       RETURN
       END

       EXTERNAL  F
       DIMENSION  ROOT(3), RAB(14)
       DATA  ROOT(1), ROOT(2), ROOT(3) /0.75, 1.5, 4./
       N = 3
       EPS = 0.000001
       NDIG = 5
       ITMAX = 100
       CALL  ZF30R (F, N, EPS, NDIG, ITMAX, ROOT, RAB, IERR)

Результаты:   

       ROOT(1)  =  1. ,   ROOT(2)  =  2. ,   ROOT(3)  =  3.
 
       ITMAX  =  6 ,   IERR  =  0