Текст подпрограммы и версий ( Фортран ) 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 |
Решение системы 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