|
Текст подпрограммы и версий 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