Текст подпрограммы и версий sf86r_p.zip |
Тексты тестовых примеров tsf86r_p.zip |
Вычисление функции распределения вероятностей Эрланга (распределения Пирсона 3 - го типа).
Подпрограмма SF86R вычисляет функцию распределения Эрланга (распределения Пирсона 3 - го типа) для i - го интервала группировки [xi - 1, xi] ( i = 1, 2, ..., N) при заданном x0 = x0 по формуле
x i x i-1 P = ∫ f(x) dx - ∫ f(x) dx , 0 0 где f(x) = [ (x - x0)k - 1 / (k - 1)! ] (k/m)k e - k/m (x - x0) ; m - среднее значение распределения Эрланга; k = (m - x0) 2 / vars; x0 - нижняя граница первого интервала группировки; vars - дисперсия распределения Эрланга; N - количество интервалов группировки; xi = xi ; xi-1 = xi-1 .
Абрамовиц М., Стиган И. Справочник по специальным функциям. М.: Наука, 1979.
procedure SF86R(RM :Real; VARS :Real; N :Integer; var X :Array of Real; X0 :Real; var P :Array of Real);
Параметры
RM - | заданное среднее значение M распределения Эрланга (тип: вещественный); |
VARS - | заданная дисперсия vars распределения Эрланга (тип: вещественный); |
N - | заданное количество интервалов группировки (тип: целый); |
X - | вещественный одномерный массив длины N, содержащий заданные границы xi интервалов группировки, i = 1, 2, ..., N; |
X0 - | заданная нижняя граница первого интервала группировки (тип: вещественный); |
P - |
вещественный одномерный массив длины N + 1, содержащий вычисленные значения
pi (i = 1, 2, ..., N) функции
распределения вероятностей Эрланга для i - го интервала группировки, причем
N P(N+1) = 1 - ∑ pi . i=1 |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию: нет
Unit tsf86r_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, SF86R_p; function tsf86r: String; implementation function tsf86r: String; var N,_i :Integer; RM,VARS,X0 :Real; P :Array [0..10] of Real; const X :Array [0..9] of Real = ( 0.05,0.15,0.25,0.35,0.45,0.55,0.65,0.75,0.85, 0.95 ); begin Result := ''; { результат функции } RM := 2.0; VARS := 1.0; N := 10; X0 := 0.0; SF86R(RM,VARS,N,X,X0,P); Result := Result + #$0D#$0A; for _i:=0 to 10 do begin Result := Result + Format('%16.7f ',[P[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('tsf86r',Result); { вывод результатов в файл tsf86r.res } exit; end; end. Результаты: P = ( 0.3841996E-5, 0.2620249E-3, 0.1485732E-2, 0.4001807E-2, 0.7705259E-2, 0.1228324E-1, 0.1735353E-1, 0.2254702E-1, 0.2754702E-1, 0.3210832E-1, 0.8747022 )