Текст подпрограммы и версий av19r_p.zip av19e_p.zip av19c_p.zip |
Тексты тестовых примеров tav19r_p.zip tav19e_p.zip tav19c_p.zip |
Применение плоского вращения Гивенса.
Для двух заданных вещественных векторов Х и Y размерности N выполняется преобразование
| Xi | | Xi | | | : = A * | | , i = 1, ..., N , где | Yi | | Yi | | G S | A = | | - матрица вращения Гивенса. | - S G |
Векторы Х и Y не обязательно должны занимать
последовательные слова памяти машины и могут располагаться в памяти с
некоторыми постоянными интервалами между компонентами, которые
называются параметрами приращения.
Эти параметры могут быть меньше нуля, если обработка вектора
должна производиться в обратном порядке.
Дж.Форсайт, М.Малькольм, К.Моулер. Машинные методы математических вычислений. М.: Мир, 1980.
procedure AV19R(N :Integer; var SX :Array of Real; INCX :Integer; var SY :Array of Real; INCY :Integer; G :Real; S :Real; var IERR :Integer);
Параметры
N - | размерность векторов (тип: целый); |
SX, SY - | вещественные одномерные массивы длины N * | INСХ | и N * | INСY | соответственно, отвечающие векторам Х и Y; |
INCX - INCY | параметры приращения, задающие расположение векторов в массивах SХ и SY соответственно (тип: целый); |
G, S - | переменные, содержащие значения элементов матриц вращения Гивенса (тип: вещественный); |
IERR - | целая переменная, содержащая на выходе информацию о прохождении счета, при этом: |
IЕRR=65 - | если задано N = 0 . |
Версии
AV19E - | применение плоского вращения Гивенса для вещественных Х и Y, заданных с расширенной (Extended) точностью. |
AV19C - | применение плоского вращения Гивенса для комплексных Х и Y. |
Вызываемые подпрограммы
UTAV10 - | подпрограмма выдачи диагностических сообщений при работе подпрограмм АV19R и АV19С. |
UTAV11 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы АV19E. |
Замечания по использованию
1. |
В подпрограмме АV19E параметры SХ, SY, G и S имеют тип Extended. | |
2. |
В подпрограмме АV19С параметры SХ, SY, G и S имеют тип Complex. | |
3. | Если вырабатывается значение IЕRR ≠ 0, то выдается соответствующее диагностическое сообщение и происходит выход из подпрограммы. Выход из подпрограммы происходит также в том случае, когда G = 1. и S = 0. |
Unit TAV19R_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, AV19R_p; function TAV19R: String; implementation function TAV19R: String; var N,J,INCX,INCY,IERR :Integer; C,S :Real; SX :Array [0..49] of Real; SY :Array [0..49] of Real; label _3; begin Result := ''; N := 8; for J:=1 to 50 do begin SX[J-1] := (J); _3: SY[J-1] := (J); end; C := 3.0; S := 7.0; INСХ := -7; INCY := 4; AV19R(N,SX,INCX,SY,INCY,C,S,IERR); Result := Result + Format('%s',[' SX=']); Result := Result + #$0D#$0A; J := 1; WHILE ( J<=50 ) do begin Result := Result + Format('%20.16f',[SX[J-1]]) + #$0D#$0A; inc(J,7); end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' SY=']); Result := Result + #$0D#$0A; J := 1; WHILE ( J<=50 ) do begin Result := Result + Format('%20.16f',[SY[J-1]]) + #$0D#$0A; inc(J,4); end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' IERR=']); Result := Result + Format('%3d',[IERR]) + #$0D#$0A; UtRes('TAV19R',Result); { вывод результатов в файл TAV19R.res } exit; end; end. Результаты: SX = ( 206., 199., 192., 185., 178., 171., 164., 157. ) ( 8 элементов с интервалом 7 ) SY = ( - 347, - 286., - 225., - 164., - 103., - 42., 19., 80. ) ( 8 элементов с интервалом 4 )