Текст подпрограммы и версий sf76r_p.zip |
Тексты тестовых примеров tsf76r_p.zip |
Вычисление функций Эйри AI и BI и их производных AI ' и BI '.
Данная подпрограмма вычисляет функции Эйри Ai (z) и Bi (z) и их производные Ai ' (z) и Bi ' (z) для вещественных значений аргумента при помощи разложений в ряды Чебышева.
(a) Для z ≤ -7 используются такие асимптотические разложения:
Ai (-z) ~ z -1/4 ( sf(z) - cg(z) ); Ai ' (-z) ~ -z 1/4 ( cp(z) + sq(z) ); Bi (-z) ~ z -1/4 ( cf(z) + sg(z) ); Bi ' (-z) ~ z 1/4 ( sp(z) - cg(z) );
где s = sin (ζ + π/4), c = cos (ζ + π/4), ζ = 2/3 z3/2, а функции f, g, p, q приближаются следующими чебышевскими разложениями
m1 m2 f ~ ∑ ar Tr*(t) , g ~ ζ -1 ∑ br Tr*(t) , r=0 r=0 m3 m4 p ~ ∑ cr Tr*(t) , q ~ ζ -1 ∑ dr Tr*(t) , r=0 r=0
Здесь t = -(7/z)3, Tr* являются чебышевскими полиномами со сдвигом; ar, br, cr и dr являются заданными коэффициентами Чебышева.
(б) Для -7 ≤ z ≤ 0 используются следующие разложения в ряды Тейлора
Ai = e1 f(z) - e2 g(z) ; Ai ' = e1 f '(z) - e2 g'(z) Bi = sqrt( 3(e1 f(z) + e2 g(z) ) ) ; Bi ' = sqrt( 3(f '(z) + e2 g'(z) ) ) где e1 и e2 - заданные константы и m1 m2 f ~ ∑ ar Tr*(t) , g ~ z ∑ br Tr*(t) , r=0 r=0 m3 m4 f ' ~ z2 ∑ cr Tr*(t) , g ' ~ ∑ dr Tr*(t) , r=0 r=0 Здесь t = - (z/7)3.
(в) Для 0 < z < 7 предыдущие разложения в ряды Тейлора не позволяют вычислить функции с достаточной точностью во всех точках интервала, поскольку на интервале имеют место значительные отклонения по абсолютной величине значений функций. Поэтому используются следующие чебышевские разложения для взвешенных функций:
m1 Ai exp (1.75z) ~ ∑ ar Tr*(t) ; r=0 m3 Ai ' exp (1.75z) ~ ∑ cr Tr*(t) ; r=0 m2 Bi exp (- 1.75z) ~ ∑ br Tr*(t) ; r=0 m4 Bi ' exp (- 1.75z) ~ ∑ dr Tr*(t) r=0 Здесь t = z / 7.
(г) Для z ≥ 7 используются следующие асимптотические разложения:
m1 Ai (z) ~ z - 1/4 exp(- ζ) ∑ ar Tr*(t) ; r=0 m3 Ai ' (z) ~ - z 1/4 exp(- ζ) ∑ cr Tr*(t) ; r=0 m2 Bi (z) ~ z - 1/4 exp(ζ) ∑ br Tr*(t) ; r=0 m4 Bi ' (z) ~ z 1/4 exp(ζ) ∑ dr Tr*(t) r=0 Здесь t = (7 / z) 3/2.
B каждом из рассмотреных случаях степени аппроксимации mi выбираются такими, чтобы значения функций вычислялись по крайней меpе с девятью значащими цифрами, если функции по абсолютной величине больше единицы, и с девятью десятичными знаками в противном случае.
B случае (a) окончательная точность ограничена точностью, с которой могут быть вычислены значения функций синуса и косинуса от ζ + π / 4.
procedure SF76R(Z :Real; var AI :Real; var BI :Real; var AID :Real; var BID :Real; L1 :Integer; L2 :Integer; var IERR :Integer);
Параметры
Z - | заданное значение аргумента (тип: вещественный); |
AI, BI - | вещественные переменные, содержащие вычисленные значения функций Эйри Ai и Bi в точке Z; |
AID - BID | вещественные переменные, содержащие вычисленные значения производных функций Эйри Ai ' и Bi ' в точке Z; |
L1 - | задает режим работы подпрограммы (тип: целый); |
L1 = -1 - | если необходимо вычислить только Ai ' и Bi '; |
L1 = 0 - | если необходимо вычислить Ai, Bi, Ai ' и Bi '; |
L1 = 1 - | если необходимо вычислить только Ai и Bi; |
L2 - | задает режим масштабирования (тип: целый); |
L2 = 0 - | если масштабирование не должно осуществляться; |
L2 = 1 - |
если необходимо осуществить следующее масштабирование: (Ai, Ai ') = (Ai, Ai ') exp (ζ) , (Bi, Bi ') = (Bi, Bi ') exp (- ζ) , где ζ = 2/3 z 3/2 . |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы, при этом: |
IERR=1 - | когда значение ABS (Z) > SYS053 1/3, где SYS053 - максимальное число, представимое на данной машине; значение функций Эйри и их производных полагаются равными нулю; |
IERR=2 - | когда возможна потеря точности вычисления функций синуса и косинуса от промежуточных величин; |
IERR=3 - | когда значение Z 3/2 > SYS053, где SYS053 - максимальное число, представимое на данной машине; значения функций Эйри и их производных полагаются равными нулю; |
IERR=4 - | когда значение 2/3 Z 3/2 > SYS076, где SYS076 - максимальная степень экспоненты для данной машины; значения AI и AID полагаются равными нулю, а значения BI и BID полагаются равными 3.4E38. |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию
B качестве рабочих используются подпрограммы SF76R1, SF76R2, SF76R3, SF76R4, SF76R5. |
Unit tsf76r_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, SF76R_p; function tsf76r: String; implementation function tsf76r: String; var L1,L2,IERR :Integer; Z,AI,BI,AID,BID :Real; begin Result := ''; { результат функции } L1 := 0; L2 := 0; Z := 0.99; SF76R(Z,AI,BI,AID,BID,L1,L2,IERR); Result := Result + Format(' %16.7f %16.7f %16.7f %16.7f ',[AI,BI,AID,BID]) + #$0D#$0A; UtRes('tsf76r',Result); { вывод результатов в файл tsf76r.res } exit; end; end. Результаты: AI = 0.1368906592506591 BI = 1.1981592513739683 AID = -0.1605015276718778 BID = 0.9204681805946717