Текст подпрограммы и версий ( Фортран )
afb2r.zip , afb2d.zip , afb2c.zip
Тексты тестовых примеров ( Фортран )
tafb2r.zip , tafb2d.zip , tafb2c.zip
Текст подпрограммы и версий ( Си )
afb2r_c.zip , afb2d_c.zip , afb2c_c.zip
Тексты тестовых примеров ( Си )
tafb2r_c.zip , tafb2d_c.zip , tafb2c_c.zip
Текст подпрограммы и версий ( Паскаль )
afb2r_p.zip , afb2e_p.zip , afb2c_p.zip
Тексты тестовых примеров ( Паскаль )
tafb2r_p.zip , tafb2e_p.zip , tafb2c_p.zip

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

Назначение

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

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

Для заданной в компактной форме ленточной вещественной матрицы А порядка N выполняется треугольная факторизация А = LU, где U - верхняя треугольная ленточная матрица, причем матрица L- 1 имеет вид:

     L-1 = LN-1 * PN-1 *...* L1 * P1 , 

где Рi,  i = 1, ..., N - 1, суть матрицы перестановок, обеспечивающие стратегию выбора ведущего элемента по столбцам; Li,  i = 1, ..., N - 1, суть элементарные матрицы исключения в методе Гаусса. Все матрицы Li являются нижними треугольными ленточными матрицами с единичными диагональными элементами. После выполнения факторизации вычисляется величина RСОND, обратная числу обусловленности матрицы А:

 RCOND = 1 / (|| A ||1 * || A-1 ||1) ,   где  || A ||1 = max j = 1,...,N  Sj ,
здесь     N
     Sj =  ∑ | ai j |
             i=1 

Дж. Форсайт, М. Малькольм, К. Моулер, Машинные методы математических вычислений. М.: Мир, 1980.

Использование

    SUBROUTINE AFB2R (A, MA, N, ML, MU, NLEAD, RCOND, Z,
                                             IERR) 

Параметры

A - вещественный двумерный массив размера МА*N, в первых МL + МU + 1 столбцах которого задается в компактном виде исходная ленточная матрица порядка N; на выходе в первых МL столбцах массива находятся нижние кодиагонали ленточной матрицы L1 *...* LN - 1, в следующих МU + МL + 1 столбцах содержится в компактном виде матрица U;
MA - первая размерность массива А в вызывающей программе (тип: целый);
N - порядок матрицы А (тип: целый);
ML - число нижних кодиагоналей матрицы А (тип: целый);
MU - число верхних кодиагоналей матрицы А (тип: целый);
NLEAD - целый вектор длины N, содержащий на выходе информацию о выполненных в процессе исключения перестановках (см. замечания по использованию);
RCOND - вещественная переменная, содержащая на выходе вычисленное значение величины, обратной числу обусловленности матрицы А (см. замечания по использованию);
Z - вещественный рабочий вектор длины N;
IERR - целая переменная, содержащая на выходе информацию о прохождении счета, при этом:
IЕRR=65 - если МА ≤ 0 или N ≤ 0;
IЕRR=66 - если в процессе работы произошло переполнение (это говорит о том, что либо || A ||1, либо некоторые элементы матрицы U превосходят по абсолютной величине максимальное представимое на данной машине число);
IЕRR=-К - если в результате факторизации диагональный элемент в К - й строке матрицы U равен нулю (это свидетельствует о вырожденности матрицы А). Если таких строк у матрицы U несколько, то значение К полагается равным номеру последней из них.

Версии

AFB2D - треугольное разложение методом Гаусса с выбором ведущего элемента по столбцу и оценка числа обусловленности ленточной вещественной матрицы, заданной с удвоенной точностью в компактной форме.
AFB2C - треугольное разложение методом Гаусса с выбором ведущего элемента по столбцу и оценка числа обусловленности ленточной комплексной матрицы, заданной в компактной форме.

Вызываемые подпрограммы

UTAFSI - подпрограмма выдачи диагностических сообщений.

Замечания по использованию

  1. 

В подпрограмме АFВ2С массивы А и Z имеют тип COMPLЕХ.

  2. 

В подпрограмме АFВ2D массивы А, Z и переменная RСОND имеют тип DОUВLЕ РRЕСISIОN.

  3. 

На выходе К - й элемент вектора NLЕАD равен номеру строки, переставленной на К - м шаге факторизации с К - й строкой матрицы А. Поскольку факторизация Гаусса требует N - 1 шагов, то NLЕАD (N) = N.

  4. 

Так как в результате выполненных в ходе факторизации перестановок число верхних кодиагоналей матрицы U равно МU + МL, а также в силу некоторых конструктивных особенностей подпрограммы, для правильной ее работы необходимо выполнение условия МА ≥ N >МU + 2*МL + 1. Если МU + 2*МL + 1 ≥ N, то более целесообразно, задав матрицу А не в компактной, а в полной форме, обратиться к подпрограмме АFG4R.

  5.  Если переменной IЕRR присвоено значение, отличное от нуля, то выдается соответствующее диагностическое сообщение, полагается RСОND = 0.0 и происходит выход из подпрограммы (если IЕRR < 0, то выход происходит по окончании факторизации).

Пример использования

      DIMENSION A(9, 9), Z(9), NLEAD(9)
      MA = 9
      N = 9
      ML = 2
      MU = 3
      DO 4 I = 1, MA
      J0 = MAX0(1, I-ML)
      J1 = MIN0(N, I + MU)
      DO 3 J = J0, J1
      K = J - I + ML + 1
      A(I, K) = FLOAT(I*10 + J)
   3 CONTINUE
   4 CONTINUE
      CALL AFB2R (A, MA, N, ML, MU, NLEAD, RCOND, Z, IERR)

Результат:

               |   0          0         31.0       32.0    33.0   34.0   35.0  36.0  0 |
               |   0        -0.68     42.0       43.0    44.0   45.0   46.0  47.0  0 |
               | -0.35    -0.02     53.0       54.0    55.0   56.0   57.0  58.0  0 |
               | -0.008  -0.006   64.0       65.0    66.0   67.0   68.0  69.0  0 |
      A  =  | -0.01    -0.01     75.0       76.0    77.0   78.0   79.0     0    0 |
               | -0.005  -0.004   86.0       87.0    88.0   89.0     0        0    0 |
               | -0.19      0.002   97.0       98.0    99.0     0       0        0    0 |
               |  0.3       -0.25     0.76       15.02    0        0       0        0    0 |
               | -0.13     -0.51     0.0003     0         0        0       0        0    0 |

      NLEAD  =   (3, 4, 5, 6, 7, 8, 9, 9, 9).

      RCOND  =  1.2017E-07