|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/av_htm_p/av18r_p.htm
Дата изменения: Tue Nov 10 13:47:36 2015 Дата индексирования: Sun Apr 10 02:32:17 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий 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