Текст подпрограммы и версий sf50r_p.zip , sf50e_p.zip |
Тексты тестовых примеров tsf50r_p.zip , tsf50e_p.zip |
Вычисление полных эллиптических интегралов третьего рода П (x, k).
Функция SF50R производит вычисление интегралов вида:
π/2 П (x, k) = ∫ dt / (1 + x sin 2 t) (1 - k 2 sin 2 t) 1 / 2 0 для 0 ≤ k 2 ≤ 1 и x ≠ - 1
J.F.Hart, E.W.Cheney, C.L.Lawson et al, Computer Approximations, Wiley, New York, 1968.
function SF50R(X :Real; RK2 :Real; var IERR :Integer): Real;
Параметры
X, RK2 - | заданные значения аргументов x и k2 соответственно (тип: вещественный); |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы функции; при этом: |
IERR=65 - | когда значение X pавно - 1; значение функции полагается равным 3.4E38; |
IERR=66 - | когда значение RK2 меньше 0 или больше или pавно 1; значение функции полагается равным 3.4E38. |
Версии
SF50E - | вычисление полных эллиптических интегралов третьего рода с расширенной (Extended) точностью. |
Вызываемые подпрограммы
SF14R - SF14E | вычисление полных эллиптических интегралов первого рода с обычной и расширенной (Extended) точностью (используются в SF50R и SF50E соответственно). |
SF15R - SF15E | вычисление полных эллиптических интегралов второго рода с обычной и расширенной (Extended) точностью (используются в SF50R и SF50E соответственно). |
SF19R - SF19E | вычисление неполных эллиптических интегралов первого рода с обычной и расширенной (Extended) точностью (используются в SF50R и SF50E соответственно). |
SF20R - SF20E | вычисление неполных эллиптических интегралов второго рода с обычной и расширенной (Extended) точностью (используются в SF50R и SF50E соответственно). |
UTSF14 - | подпрограмма выдачи диагностических сообщений при работе функции SF50R. |
UTSF15 - | подпрограмма выдачи диагностических сообщений при работе функции SF50E. |
Замечания по использованию
Для функции SF50E параметры X и RK2 имеют тип Extended. Значение SF50E при IERR ≠ 0 полагается pавным 1.7E308. |
Unit tsf50r_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, SF50R_p; function tsf50r: String; implementation function tsf50r: String; var IERR :Integer; X,RK2,R :Real; begin Result := ''; { результат функции } X := 1.0; RK2 := 0.5; R := SF50R(X,RK2,IERR); Result := Result + Format(' %20.16f %5d ',[R,IERR]) + #$0D#$0A; UtRes('tsf50r',Result); { вывод результатов в файл tsf50r.res } exit; end; end. Результаты: R = 1.27312736674 , IERR = 0