Текст подпрограммы и версий
av18r_p.zip  av18e_p.zip 
Тексты тестовых примеров
tav18r_p.zip  tav18e_p.zip 

Подпрограмма:  AV18R (модуль AV18R_p)

Назначение

Построение плоского вращения Гивенса.

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

Для заданных вещественных чисел  А и  В последовательно вычисляются величины

               σ  =  sign(A)  ,     если     | A | ≥ | B |
               σ  =  sign(B)  ,     если     | B | ≥ | A | ,

               R  =  σ ( A2 + B2 )1/2 ,

               C  =   A / R  ,     если     R ≠ 0
               C  =   1  ,           если     R = 0 ,

               S  =   B / R  ,     если     R ≠ 0
               S  =   0  ,           если     R = 0  . 

Полученные таким образом числа С, S и R удовлетворяют матричному уравнению

                        |   C  S  |        | A |        | R |
                        | - S  C |   *   |  B |   =   | 0  | 

Дж.Форсайт, М.Малькольм, К.Моулер. Машинные методы математических вычислений. М.: Мир, 1980.

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

procedure AV18R(var SA :Real; var SB :Real; var C :Real; var S :Real);
               

Параметры

SA - вещественная переменная, в которой задается величина  А; на выходе содержит вычисленное значение величины  R;
SB - вещественная переменная, в которой задается величина  В; на выходе содержит вычисленное значение величины  Z, где
 
     Z  =  S  ,         если     | A | > | B |
     Z  =  1 / C  ,   если      | B | ≥ | A |   и   C ≠ 0
     Z  =  1  ,         если     C = 0  ; 
C - вещественная переменная, содержащая на выходе вычисленное значение величины  С;
S - вещественная переменная, содержащая на выходе вычисленное значение величины  S.

Версии

AV18E - построение плоского вращения Гивенса для вещественных  А и  В, заданных с расширенной (Extended) точностью.

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

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

  1. 

В подпрограмме АV18E переменные SА, SВ, С, S имеют тип Extended.

  2. 

Введение величины  σ не является необходимым для построения матрицы вращения Гивенса, но позволяет однозначно восстанавливать  С и  S, зная лишь одно число  Z, а именно:

- если  Z = 1,    то  С = 0  и  S = 1;

- если  | Z | < 1, то  С = ( 1 - Z2 )1/2  и  S = Z;

- если  | Z | > 1, то  С = 1/Z  и   S = ( 1 - C2 )1/2.

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

Unit TAV18R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AV18R_p;

function TAV18R: String;

implementation

function TAV18R: String;
var
SA,SB,C,S :Real;
begin
Result := '';
SА := 4.2;
SB := -3.7;
AV18R(SA,SB,C,S);
Result := Result + Format('%s',['   SA=']);
Result := Result + Format('%20.16f',[SA]) + #$0D#$0A;
Result := Result + Format('%s',['   SB=']);
Result := Result + Format('%20.16f',[SB]) + #$0D#$0A;
Result := Result + Format('%s',['    C=']);
Result := Result + Format('%20.16f',[C]) + #$0D#$0A;
Result := Result + Format('%s',['    S=']);
Result := Result + Format('%20.16f',[S]) + #$0D#$0A;
UtRes('TAV18R',Result);  { вывод результатов в файл TAV18R.res }
exit;
end;

end.

Результаты:

       SA  =  5.597 ,    SB  =  - 0.661 ,
       C    =  0.7503 ,    S     =  - 0.661