Текст подпрограммы и версий av18r_p.zip av18e_p.zip |
Тексты тестовых примеров tav18r_p.zip tav18e_p.zip |
Построение плоского вращения Гивенса.
Для заданных вещественных чисел А и В последовательно вычисляются величины
σ = 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