|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/am_htm_p/amtgr_p.htm
Дата изменения: Mon Nov 9 15:29:48 2015 Дата индексирования: Sun Apr 10 03:42:08 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий amtgr_p.zip , amtge_p.zip , amtgc_p.zip |
Тексты тестовых примеров tamtgr_p.zip , tamtge_p.zip , tamtgc_p.zip |
Транспонирование прямоугольной матрицы на месте.
Транспонируемая прямоугольная матрица размеров М на N должна быть представлена в оперативной памяти по столбцам в виде вектора А длины МN = М * N. Подпрограмма находит такие циклы перестановок элементов, что в результате в векторе А будет получена транспонированная матрица размеров N на М, расположенная также по столбцам.
Версия подпрограммы АМТGR может быть использована также и для транспонирования прямоугольной матрицы, элементы которой имеют целый тип.
Сате Е.G., Тwigg D.W. Аnalysis of In - Situ Transposition. АCM Тransactions on Mathematical Software, Vol. 3, No. 1, 1977.
procedure AMTGR(var A :Array of Real; M :Integer; N :Integer;
var MOVE :Array of Integer; IWRK :Integer;
var IERR :Integer);
Параметры
| A - | вещественный вектор длины МN = М * N, в котором расположена транспонируемая прямоугольная матрица размеров М на N по столбцам; |
| M - | число строк транспонируемой матрицы (тип: целый); |
| N - | число столбцов транспонируемой матрицы (тип: целый); |
| MOVE - | целый вектор длины IWRК, используемый как рабочий; |
| IWRK - | длина вектора МОVЕ (тип: целый); |
| IERR - | целая переменная, служащая для сообщения об ошибках в ходе работы подпрограммы; при этом: |
| IЕRR= -1 - | если значение IWRК меньше 1; |
| IЕRR= -2 - | если М или N меньше 1; |
| IЕRR=К>0 - | если К - й цикл перестановок элементов был найден, но не выполнен. |
Версии
| AMTGE - | транспонирование прямоугольной матрицы на месте, элементы которой заданы с расширенной (Extended) точностью. |
| AMTGC - | транспонирование комплексной прямоугольной матрицы на месте. |
Вызываемые подпрограммы
| UTAM12 - | подпрограмма выдачи диагностических сообщений. |
Замечания по использованию
| 1. |
После работы подпрограммы исходная матрица не сохраняется. | |
| 2. | Для ускорения работы подпрограммы рекомендуется брать значение IWRК равным (М + N) / 2. |
Unit tamtgr_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AMTGR_p;
function tamtgr: String;
implementation
function tamtgr: String;
var
IERR,_i :Integer;
MOVE :Array [0..1] of Integer;
const
M :Integer = 3;
N :Integer = 4;
IWRK :Integer = 2;
A :Array [0..11] of Real = ( 11.0,21.0,31.0,12.0,22.0,32.0,13.0,23.0,33.0,
14.0,24.0,34.0 );
begin
Result := '';
Result := Result + Format('%s',[' A=']);
Result := Result + #$0D#$0A;
for _i:=0 to 11 do
begin
Result := Result + Format('%20.16f ',[A[_i]]);
if ( ((_i+1) mod 3)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
AMTGR(A,M,N,MOVE,IWRK,IERR);
Result := Result + Format('%s',[' IERR=']);
Result := Result + Format('%5d ',[IERR]) + #$0D#$0A;
Result := Result + Format('%s',[' A=']);
Result := Result + #$0D#$0A;
for _i:=0 to 11 do
begin
Result := Result + Format('%20.16f ',[A[_i]]);
if ( ((_i+1) mod 2)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('tamtgr',Result); { вывод результатов в файл tamtgr.res }
exit;
end;
end.
Результаты:
IERR = 0
A = (11., 12., 13., 14., 21., 22., 23., 24., 31., 32., 33., 34.)