Текст подпрограммы и версий ( Фортран ) ammgr.zip , ammgd.zip , ammgc.zip |
Тексты тестовых примеров ( Фортран ) tammgr.zip , tammgd.zip , tammgc.zip |
Текст подпрограммы и версий ( Си ) ammgr_c.zip , ammgd_c.zip , ammgc_c.zip |
Тексты тестовых примеров ( Си ) tammgr_c.zip , tammgd_c.zip , tammgc_c.zip |
Текст подпрограммы и версий ( Паскаль ) ammgr_p.zip , ammge_p.zip , ammgc_p.zip |
Тексты тестовых примеров ( Паскаль ) tammgr_p.zip , tammge_p.zip , tammgc_p.zip |
Умножение матрицы, обратной к заданной вещественной матрице общего вида, на прямоугольную матрицу.
Для заданной вещественной квадратной матрицы А порядка N выполняется треугольная факторизация L- 1 А = U, где U - верхняя треугольная матрица, и затем для заданной вещественной прямоугольной матрицы B размера N на NN вычисляется прямоугольная матрица С = A- 1 B размера N на NN путем решения NN систем линейных алгебраических уравнений А*С (J) = В(J), где С(J) и В(J) - J - е столбцы матриц C и B, J = 1, ...,NN.
Дж. Форсайт, М. Малькольм, К. Моулер. Машинные методы математических вычислений. Изд-во "Мир", М: 1980.
SUBROUTINE AMMGR (A, M, N, NLEAD, B, MM, NN, IERR)
Параметры
A - | вещественный двумерный массив размера М*N, в котором задается исходная матрица A; на выходе на соответствующих местах находятся элементы матрицы U и поддиагональные элементы матриц исключения метода Гаусса Li , i = 1, ...,N - 1; |
M - | первая размерность массива А в вызывающей программе (тип: целый); |
N - | порядок матрицы А и число строк матриц B и C (тип: целый); |
NLEAD - | целый вектор длины N, содержащий на выходе информацию о выполненых в ходе факторизации перестановках (см. замечания по использованию); |
B - | вещественный двумерный массив размера ММ*NМ, в котором задается матрица B; на выходе на соответствующих местах находятся элементы матрицы С = A-1 B; |
MM - | первая размерность массива B в вызывающей программе (тип: целый); |
NN - | число столбцов матриц B и C (тип: целый); |
IERR - | целая переменная, содержащая на выходе информацию о прохождении счета; при этом: |
IЕRR=65 - | если хотя бы одна из переменных М, N, MM, NN имеет значение, меньшее единицы; |
IЕRR=66 - | если в процессе счета произошло переполнение (это говорит о том, что некоторые элементы матрицы U или матрицы C превосходят по абсолютной величине максимальное представимое на данной машине число); |
IЕRR= -К - | если в результате факторизации в К - й строке матрицы U диагональный элемент равен нулю (это свидетельствует о вырожденности матрицы А). Если таких строк у матрицы U несколько, то значение K полагается равным номеру последней из них; |
IЕRR=67 - | если для некоторого J, 1 ≤ J ≤ NN, система А*С (J) = В (J) несовместна. |
Версии
AMMGD - | умножение матрицы, обратной к вещественной матрице, заданной с удвоенной точностью, на вещественную прямоугольную матрицу, заданную с удвоенной точностью. |
AMMGC - | умножение матрицы, обратной к заданной комплексной матрице, на комплексную прямоугольную матрицу. |
Вызываемые подпрограммы
AFG5R - | подпрограмма треугольной факторизации матрицы А методом Гаусса с выбором ведущего элемента по столбцу. |
UTAFSI - | подпрограмма выдачи диагностических сообщений. |
Замечания по использованию
1. |
В подпрограмме АММGD массивы А и B имеют тип DОUВLЕ РRЕСISIОN, для треугольного разложения матрицы А вызывается подпрограмма АFG5D. | |
2. |
В подпрограмме АММGС массивы А и B имеют тип СОМРLЕХ, для треугольного разложения матрицы А вызывается подпрограмма АFG5С. | |
3. |
На выходе К - й элемент вектора NLЕАD равен номеру строки, перестановленной на К - м шаге факторизации с К - й строкой матрицы А. Так как факторизация Гаусса требует N - 1 шагов, то NLЕАD(N) = N. | |
4. |
При обращении к подпрограмме необходимо соблюдение условия ММ ≥ N. | |
5. | Если вырабатывается значение переменной IЕRR, отличное от нуля, то выдается соответствующее диагностическое сообщение и, если IЕRR > 0, то происходит выход из подпрограммы. |
DIMENSION A(4, 4), NLEAD(4), B(4, 8) 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 MM = 4 NN = 8 DO 2 I = 1, 4 DO 1 J = 1, 4 B(I, J) = A(I, J) B(I, J + 4) = A(I, J) 1 CONTINUE 2 CONTINUE CALL AMMGR (A, M, N, NLEAD, B, MM, NN, IERR) Результаты: NLEAD = (2, 2, 4, 4) | 8.5 -4.8 0.8 3.5 | A = | -0.92941 10.06118 4.95647 -10.45294 | | -0.50588 -0.65879 -9.40171 2.40526 | | -0.37647 -0.04046 -0.73072 12.65817 | | 1 0 0 0 1 0 0 0 | B = | 0 1 0 0 0 1 0 0 | | 0 0 1 0 0 0 1 0 | | 0 0 0 1 0 0 0 1 |