Текст подпрограммы и версий ( Фортран )
afp7r.zip , afp7d.zip , afp7c.zip
Тексты тестовых примеров ( Фортран )
tafp7r.zip , tafp7d.zip , tafp7c.zip
Текст подпрограммы и версий ( Си )
afp7r_c.zip , afp7d_c.zip , afp7c_c.zip
Тексты тестовых примеров ( Си )
tafp7r_c.zip , tafp7d_c.zip , tafp7c_c.zip
Текст подпрограммы и версий ( Паскаль )
afp7r_p.zip , afp7c_p.zip , afp7e_p.zip
Тексты тестовых примеров ( Паскаль )
tafp7r_p.zip , tafp7c_p.zip , tafp7e_p.zip

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

Назначение

Приведение прямоугольной матрицы размера N*М (N ≤ М) к нижнему двухдиагональному виду преобразованиями вращения.

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

Для прямоугольной матрицы А размера N*М (N ≤ М) строятся две последовательности матриц вращения R3 2,R4 2, ..., RN N - 1 размера N*N и Т1 21 3, ..., ТN M размера М*М, такие, что

     RN N-1 ... R3 2 A T1 2 ... TN M = D , 

где D - нижняя двухдиагональная матрица размера N*М. В pезультате двухдиагональная матрица D запоминается на месте соответствующих диагоналей матрицы А, а матрицы вращения Ti j,   i = 1, 2, ..., N,  j = 2, 3, ..., М,  i < j  и  Ri j,   i = 3, 4, ..., N,  j = 2, ..., N-1,   i > j, строятся следующим образом.

Матрицы Ti j и Ri j являются матрицами плоского вращения в плоскости ( i, j ), у которых элементы Ri i = Rj j = C, Ri j = - S, Rj i = S, а остальные элементы главной диагонали равны 1, свертываются в число t = S / (1 + С), по которому они восстанавливаются с помощью формул

       C = (1 - | t |2) / (1 + | t |2) ,        S = 2t / (1 + | t |2) , 

и упаковываются соответственно над и под нижней двухдиагональной частью матрицы А: информация о матрице Ti j запоминается на месте элемента с индексами ( i, j ), а информация о матрице Ri j - на месте элемента с индексами ( i, j - 1).

В.В.Воеводин, Вычислительные основы линейной алгебры, М., Наука, 1977.

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

    SUBROUTINE AFP7R (A, N, M) 

Параметры

A - двумерный массив размера N*М (N ≤ М), в котором задается исходная матрица А; в результате работы подпрограммы нижняя двухдиагональная матрица D запоминается на месте соответствующих диагоналей матрицы А, а матрицы вращения Тi j и Ri j упаковываются соответственно над и под нижней двухдиагональной частью матрицы А (тип: вещественный);
N, M - число строк и столбцов матрицы А, причем N ≤ М (тип: целый).

Версии

AFP7D - приведение прямоугольной матрицы размера N*М (N ≤ М) заданной с двойной точностью, к нижнему двухдиагональному виду преобразованиями вращения.
AFP7C - приведение комплексной прямоугольной матрицы размера N*М (N ≤ М) к нижнему двухдиагональному виду преобразованиями вращения.

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

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

  1. 

В случае необходимости преобразования вектора матрицами вращения ТN MN M - 1,...,Т1 2 или R3 2,R4 2,...,RN N - 1, упакованными в матрице А описанным выше способом, можно воспользоваться соответственно подпрограммами АМ10R или АМ09R.

  2. 

В подпрограмме АFР7D параметр А имеет тип DОUВLЕ РRЕСISIОN.

  3. 

В подпрограмме АFР7С параметр А имеет тип СОМРLЕХ.

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

      DIMENSION  A(3, 5)
      DATA  A /1., 1.2, -1.6, 0., 2.2, 0.4, 0., 0.48, 0.36, 3*0., 0., 0.64,
     *                    0.48/
      N = 3
      M = 5
      CALL  AFP7R (A, N, M)

Результат:

                 |  1     0   0   0   0    |
      A  =    |  2     1   0   0   0    |
                 | 0.5   2   1   0   0.5 |

Это означает, что

                 | 1   0   0   0   0 |
      D  =    | 2   1   0   0   0 |
                 | 0   2   1   0   0 |