Текст подпрограммы и версий ( Фортран ) afg5r.zip , afg5d.zip , afg5c.zip |
Тексты тестовых примеров ( Фортран ) tafg5r.zip , tafg5d.zip , tafg5c.zip |
Текст подпрограммы и версий ( Си ) afg5r_c.zip , afg5d_c.zip , afg5c_c.zip |
Тексты тестовых примеров ( Си ) tafg5r_c.zip , tafg5d_c.zip , tafg5c_c.zip |
Текст подпрограммы и версий ( Паскаль ) afg5r_p.zip , afg5e_p.zip , afg5c_p.zip |
Тексты тестовых примеров ( Паскаль ) tafg5r_p.zip , tafg5e_p.zip , tafg5c_p.zip |
Треугольное разложение вещественной матрицы общего вида методом Гаусса с выбором ведущего элемента по столбцу.
Для заданной квадратной вещественной матрицы А порядка N выполняется треугольная факторизация А = LU , где U - верхняя треугольная матрица, причем матрица L- 1 имеет вид:
L-1 = LN-1 * PN-1 *...* L1 * P1 ,
где Рi, i = 1, ..., N - 1, суть матрицы перестановок, обеспечивающие стратегию выбора ведущего элемента по столбцам; Li, i = 1, ..., N - 1, суть элементарные матрицы исключения в методе Гаусса.
Все матрицы Li, i = 1, ..., N - 1, имеют нижне - треугольный вид с единичными диагональными элементами.
Дж. Форсайт, М. Малькольм, К. Моулер. Машинные методы математических вычислений. М.: Мир, 1980.
SUBROUTINE AFG5R (A, M, N, NLEAD, IERR)
Параметры
A - | вещественный двумерный массив размера М*N, в котором задается исходная квадратная матрица порядка N; на выходе на соответствующих местах массива находятся элементы матрицы U и поддиагональные элементы матриц Li, i = 1, ..., N - 1; |
M - | первая размерность массива А в вызывающей программе (тип: целый); |
N - | порядок матрицы А (тип: целый); |
NLEAD - | целый вектор длины N, содержащий на выходе информацию о выполненных в процессе исключения перестановках (см. замечания по использованию); |
IERR - | целая переменная, содержащая на выходе информацию о прохождении счета, при этом: |
IЕRR=65 - | если М Ј 0 или N Ј 0; |
IЕRR=66 - | если в процессе работы подпрограммы произошло переполнение (это говорит о том, что некоторые элементы матрицы U превосходят по абсолютной величине максимально представимое на данной машине число); |
IЕRR=-К - | если в результате факторизации диагональный элемент в К - ой строке матрицы U равен нулю (это свидетельствует о вырожденности матрицы А). Если таких строк у матрицы U несколько, то значение К полагается равным номеру последней из них. |
Версии
AFG5D - | треугольное разложение вещественной матрицы, заданной с удвоенной точностью методом Гаусса с выбором ведущего элемента по столбцу. |
AFG5C - | треугольное разложение комплексной матрицы методом Гаусса с выбором ведущего элемента по столбцу. |
Вызываемые подпрограммы
UTAFSI - | подпрограмма выдачи диагностических сообщений. |
Замечания по использованию
1. |
В подпрограмме АFG5С массив А имеет тип СОМРLЕХ. | |
2. |
В подпрограмме АFG5D массив А имеет тип DОUВLЕ РRЕСISIОN. | |
3. |
На выходе К - ый элемент вектора NLЕАD равен номеру строки, переставленной на К - ом шаге факторизации с К - ой строкой матрицы А. Поскольку факторизация Гаусса требует N - 1 шагов, то NLЕАD (N) = N. | |
4. |
В отличие от подпрограммы АFG1R, матрицы Li, i = 1, ..., N - 1 состоят из множителей, используемых в методе Гаусса, взятых со знаком минус, а исключение производится с использованием сложения, а не вычитания. Кроме того, элементы матриц Li, i = 1, ..., N - 1 не подвергаются выполняемым в процессе исключения перестановкам, как это происходит в подпрограмме АFG1R. | |
5. | Диагностическое сообщение выдается, если переменной IЕRR присвоено значение, отличное от нуля. При этом, если IЕRR = 65 или 66, то выполнение факторизации прекращается, если же IЕRR < 0, то не прекращается. |
DIMENSION A(4, 4), NLEAD(4) DATA A /7.9, 8.5, 4.3, 3.2, 5.6, -4.8, 4.2, -1.4, 5.7, 0.8, -3.2, * -8.9, -7.2, 3.5, 9.3, 3.3/ M = 4 N = 4 CALL AFG5R (A, M, N, NLEAD, IERR) Результаты: | 8.500 -4.800 0.800 3.500 | | -0.929 10.061 4.956 -10.453 | A = | -0.506 -0.659 -9.402 2.405 | | -0.376 -0.040 -0.731 12.658 | NLEAD = (2, 2, 4, 4) Это означает, что | 1 0 0 0 | | -0.929 1 0 0 | L1*L2*L3 = | -0.506 -0.659 1 0 | | -0.376 -0.040 -0.731 1 | | 8.500 -4.800 0.800 3.500 | | 0 10.061 4.956 -10.453 | U = | 0 0 -9.402 2.405 | | 0 0 0 12.658 |