Текст подпрограммы и версий ( Фортран )
amtgr.zip , amtgd.zip , amtgc.zip
Тексты тестовых примеров ( Фортран )
tamtgr.zip , tamtgd.zip , tamtgc.zip
Текст подпрограммы и версий ( Си )
amtgr_c.zip , amtgd_c.zip , amtgc_c.zip
Тексты тестовых примеров ( Си )
tamtgr_c.zip , tamtgd_c.zip , tamtgc_c.zip
Текст подпрограммы и версий ( Паскаль )
amtgr_p.zip , amtge_p.zip , amtgc_p.zip
Тексты тестовых примеров ( Паскаль )
tamtgr_p.zip , tamtge_p.zip , tamtgc_p.zip

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

Назначение

Транспонирование прямоугольной матрицы на месте

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

Транспонируемая прямоугольная матрица размеров М на N должна быть представлена в оперативной памяти по столбцам в виде вектора А длины МN = М * N. Подпрограмма находит такие циклы перестановок элементов, что в результате в векторе А будет получена транспонированная матрица размеров N на М, расположенная также по столбцам.

Версия подпрограммы АМТGR может быть использована также и для транспонирования прямоугольной матрицы, элементы которой имеют целый тип.

Сате Е.G., Тwigg D.W. Аnalysis of In - Situ Transposition. АCM Тransactions on Mathematical Software, Vol. 3, No. 1, 1977.

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

    SUBROUTINE  AMTGR (A, M, N, MOVE, IWRK, IERR) 

Параметры

A - вещественный вектор длины МN = М * N, в котором расположена транспонируемая прямоугольная матрица размеров М на N по столбцам;
M - число строк транспонируемой матрицы (тип: целый);
N - число столбцов транспонируемой матрицы (тип: целый);
MOVE - целый вектор длины IWRК, используемый как рабочий;
IWRK - длина вектора МОVЕ (тип: целый);
IERR - целая переменная, служащая для сообщения об ошибках в ходе работы подпрограммы; при этом:
IЕRR= -1    - если значение IWRК меньше 1;
IЕRR= -2    - если М или N меньше 1;
IЕRR=К>0 - если К - й цикл перестановок элементов был найден, но не выполнен.

Версии

AMTGD - транспонирование прямоугольной матрицы на месте, элементы которой заданы с удвоенной точностью.
AMTGC - транспонирование комплексной прямоугольной матрицы на месте.

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

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

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

  1. 

После работы подпрограммы исходная матрица не сохраняется.

  2.  Для ускорения работы подпрограммы рекомендуется брать значение IWRК равным (М + N) / 2.

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

      REAL A(3, 4)
      INTEGER MOVE(2)
      DATA  M /3/,  N /4/,  IWRK /2/
      DATA  A /11., 21., 31., 12., 22., 32., 13., 23., 33., 14., 24., 34./
      CALL  AMTGR (A, M, N, MOVE, IWRK, IERR)

Результаты:

      IERR  =  0
      A  =  (11., 12., 13., 14., 21., 22., 23., 24., 31., 32., 33., 34.)