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

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

Назначение

Умножение матрицы, обратной к заданной вещественной матрице общего вида, на прямоугольную матрицу.

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

Для заданной вещественной квадратной матрицы А порядка 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 |