Текст подпрограммы и версий ( Фортран )
afp6r.zip , afp6d.zip , afp6c.zip
Тексты тестовых примеров ( Фортран )
tafp6r.zip , tafp6d.zip , tafp6c.zip
Текст подпрограммы и версий ( Си )
afp6r_c.zip , afp6d_c.zip , afp6c_c.zip
Тексты тестовых примеров ( Си )
tafp6r_c.zip , tafp6d_c.zip , tafp6c_c.zip
Текст подпрограммы и версий ( Паскаль )
afp6r_p.zip , afp6e_p.zip , afp6c_p.zip
Тексты тестовых примеров ( Паскаль )
tafp6r_p.zip , tafp6e_p.zip , tafp6c_p.zip

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

Назначение

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

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

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

     RN M ... R2 1 A T2 3 ... TM-1 M = D , 

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

Матрицы Ri j и Ti 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) , 

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

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

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

    SUBROUTINE  AFP6R (A, N, M) 

Параметры

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

Версии

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

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

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

  1. 

В случае необходимости преобразования вектора матрицами вращения R2 1, R3 1, ..., RN 1, ..., RM+1 M, ..., RN M или ТM - 1 MM - 2 M, ..., Т2 3, упакованными в матрице А описанным выше образом, можно воспользоваться соответственно подпрограммами АМ07R и АМ08R.

  2. 

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

  3. 

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

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

      DIMENSION  A(5, 3)
      DATA  A /1., 4*0., 1.2, -1., -0.48, 0., 0.64, 1.6, 2., 0.36, 0., -0.48/
      N = 5
      M = 3
      CALL  AFP6R (A, N, M)

Результат:

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

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

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