📄 prob_kuiper.pro
字号:
pro prob_kuiper, D, N_eff, probks;+; NAME:; PROB_KUIPER; PURPOSE:; Return the significance of the Kuiper statistic; EXPLANATION:; Returns the significance level of an observed value of the; Kuiper statistic D for an effective number of data points; N_eff. Called by KUIPERONE;; CALLING SEQUENCE:; prob_kuiper, D, N_eff, probks;; INPUT PARAMATERS:; D - Kuiper statistic, floating scalar, always non-negative; N_eff - Effective number of data points, scalar. For a 2 sided test; this is given by (N1*N2)/(N1+N2) where N1 and N2 are the number; of points in each data set.;; OUTPUT PARAMETERS:; probks - floating scalar between 0 and 1 giving the significance level of; the Kuiper statistic. Small values of PROB suggest that the; distribution being tested are not the same;; REVISION HISTORY:; Written W. Landsman August, 1992; Corrected typo (termbv for termbf) H. Ebeling/W.Landsman March 1996; Probably did not affect numeric result, but iteration went longer; than necessary; Converted to IDL V5.0 W. Landsman September 1997; Adapted from PROB_KS J. Ballet July 2003;- On_error,2 if N_params() LT 3 then begin print,'Syntax - prob_kuiper, D, N_eff, prob' print,' D - Kuiper statistic, input' print,' N_eff - effective number of data points, input' print,' prob - Significance level of D, output' return endif eps1 = 0.001 ;Stop if current term less than EPS1 times previous term eps2 = 1.e-8 ;Stop if current term changes output by factor less than EPS2 en = sqrt( N_eff ) lambda = (en + 0.155 + 0.24/en)*D; No iteration if lambda is smaller than 0.4 if lambda le 0.4 then begin probks = 1.0 return endif a2 = -2.*lambda^2 probks = 0. termbf = 0. for j = 1,100 do begin a2j2 = a2 * j^2 term = 2 * (-2*a2j2-1) * exp(a2j2) probks = probks + term if ( abs(term) LE eps1*termbf ) or $ ( abs(term) LE eps2*probks ) then return termbf = abs(term) endfor probks = 1. ;Sum did not converge after 100 iterations return end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -