Текст подпрограммы и версий ( Фортран )
zf31r.zip  zf31d.zip 
Тексты тестовых примеров ( Фортран )
tzf31r.zip  tzf31d.zip 
Текст подпрограммы и версий ( Си )
zf31r_c.zip  zf31d_c.zip 
Тексты тестовых примеров ( Си )
tzf31r_c.zip  tzf31d_c.zip 
Текст подпрограммы и версий ( Паскаль )
zf31r_p.zip  zf31e_p.zip 
Тексты тестовых примеров ( Паскаль )
tzf31r_p.zip  tzf31e_p.zip 

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

Назначение

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

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

Пусть дана система  N нелинейных уравнений с  N неизвестными.

             fi ( x1, x2, ..., xN )  =  0 ,   i = 1, 2, ..., N  

Для решения заданной системы подпрограмма ZF31R на  k - м шаге итерационного процесса Ньютона вычисляет решение следующей линейной системы методом Гаусса с выбором ведущего элемента по столбцу:

                   N
                   ∑  αi j δx j( k )  =  β i ,
                  j =1 

где  αi j = ∂fi /∂xj - якобиан системы, и  βi = - fi, а затем вычисляет (k + 1) - е приближение к вектору решения на основе ранее найденного  k - го приближения:

            x ik+1  =  x i(k) + δx i(k) ,   i = 1, 2, ..., N 

Итерационный процесс по  k повторяется до тех пор, пока не будет выполнен один из двух критериев сходимости:

                    N
(1)               ∑   | δx i(k) |  ≤  EPSX
                  i =1
                    N
(2)               ∑   | f i ( x1(k+1), x2(k+1), ..., xN(k+1))  | ≤  EPSF
                  i =1 

Если же ни одно из этих двух условий не выполнено за ITMAX итераций, то ZF31R прекращает свою работу и выдает диагностическое сообщение

Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1979.

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

    SUBROUTINE  ZF31R (FUN, ROOT, N, EPSX, EPSF, ITMAX, ALPHA,
                                            BETA, NLEAD, IERR) 

Параметры

FUN - имя подпрограммы вычисления  fi (x1, x2, ..., xN) и
∂fi /∂xj ǀ (x1, x2, ..., xN) ,  i=1,2,...,N,  j=1,2,...,N; оформляется в виде подпрограммы с тремя формальными параметрами:
X - вещественный вектор длины N, содержащий текущее приближение к решению исходной системы;
ALPHA - двумерный вещественный вектор размеров N на N , в который помещаются значения элементов Якобиана системы в точке X, т.е.
∂fi /∂xj ǀ (x1, x2, ..., xN) ;
BETA - вещественный вектор длины N, в который помещаются значения  - f i ( x1, x2, ..., xN )
ROOT - вещественный вектор длины N, содержащий вычисленное решение системы; перед началом работы подпрограммы вектор ROOT должен содержать начальное приближение к решению;
N - заданное число уравнений системы (тип: целый);
EPSX - первый критерий сходимости (1) (тип: вещественный);
EPSF - второй критерий сходимости (2) (тип: вещественный);
ITMAX - целая переменная, значение которой перед началом работы подпрограммы должно быть положено равным максимальному числу итераций, ориентировочно требуемых для обеспечения сходимости в соответствии с заданными критериями;
ALPHA - двумерный вещественный массив размеров N на N, используемый в качестве рабочего;
BETA - вещественный вектор длины N, используемый в качестве рабочего;
NLEAD - целый вектор длины N, используемый в качестве рабочего;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженный в ходе работы подпрограммы; при этом:
IERR=65 - когда решение системы не может быть найдено в пределах заданного числа итераций;
IERR=66 - когда якобиан заданной системы имеет особенность

Версии

ZF31D - решение системы N нелинейных уравнений с N неизвестными методом Ньютона в режиме удвоенной точности; при этом параметры ROOT, EPSX, EPSF, ALPHA, BETA и формальные параметры подпрограммы FUN должны иметь тип DOUBLE PRECISION.

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

       ASG9R -
       ASG9D  
решение системы Ax = b или ATx = b методом Гаусса с выбором ведущего элемента по столбцу; используются в подпрограммах ZF31R и ZF31D соответственно.
      UTZF10 -
      UTZF11  
подпрограммы выдачи диагностических сообщений при работе подпрограмм ZF31R и ZF31D соответственно.

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

  В подпрограммах ZF31R и ZF31D имеется общий блок COMMON /ZF31RR/ ITER. Переменная ITER полагается равной количеству итераций, выполненных при решении системы.

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

      SUBROUTINE FUN (X, ALPHA, BETA) 
      DIMENSION X(3), ALPHA(3, 3), BETA(3) 
      BETA(1) = - (X(1) + EXP(X(1) - 1) + (X(2) + X(3))**2 - 27) 
      BETA(2) = - (X(1)*EXP(X(2) - 2) + X(3)**2 - 10) 
      BETA(3) = - (X(3) + SIN(X(2) - 2) + X(2)**2 - 7) 
      ALPHA(1, 1) = 1 + EXP(X(1) - 1) 
      ALPHA(1, 2) = 2*(X(2) + X(3)) 
      ALPHA(1, 3) = 2*(X(2) + X(3)) 
      ALPHA(2, 1) = EXP(X(2) - 2) 
      ALPHA(2, 2) = X(1)*EXP(X(2) - 2) 
      ALPHA(2, 3) = 2*X(3) 
      ALPHA(3, 1) = 0.0 
      ALPHA(3, 2) = COS(X(2) - 2) + 2*X(2) 
      ALPHA(3, 3) = 1.0 
      RETURN 
      END 

      EXTERNAL FUN 
      DIMENSION ROOT(3), ALPHA(3, 3), BETA(3), NLEAD(3) 
      COMMON /ZF31RR/ ITER 
      DATA ROOT /1.0, 1.0, 1.0/ 
      N = 3 
      EPSX = 1.E-5 
      EPSF = 1.E-5 
      ITMAX = 30 
      CALL  ZF31R (FUN, ROOT, N, EPSX, EPSF, ITMAX, ALPHA,  
     *                         BETA, NLEAD, IERR) 

 Результаты:  ROOT  =  ( 1.0, 2.0, 3.0 ) 
                       ITER  =  7 ,     IERR  =  0