|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/zf/zf31r.htm
Дата изменения: Wed Nov 25 10:51:32 2015 Дата индексирования: Sun Apr 10 00:47:16 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий ( Фортран ) 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 |
Решение системы 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