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

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

Назначение

Треугольное разложение вещественной матрицы общего вида методом Гаусса с выбором ведущего элемента по столбцу.

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

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