home *** CD-ROM | disk | FTP | other *** search
- {***************************************************************************}
- {* QUANTILE.INC *}
- {* Umkehrfunktionen der Standardverteilungen *}
- {***************************************************************************}
- FUNCTION quantil (v_fkt: Verteilungstyp; p: Parametervector; x: REAL): REAL;
- { 0 <= x <= 1 fuer alle x !!! }
-
- VAR a, b, c, d, dummy1, dummy2 : REAL;
- signum : BOOLEAN;
- p_vec : Parametervector;
-
-
- FUNCTION korrektur (x : REAL) : REAL;
- CONST a0 = 2.515517;
- a1 = 0.802853;
- a2 = 0.010328;
- b1 = 1.432788;
- b2 = 0.189269;
- b3 = 0.001308;
-
- VAR t : REAL;
-
- BEGIN
- t := Sqrt(-2.0*Ln(1.0-x));
- korrektur := t-(a0+a1*t+a2*t*t)/(1.0+b1*t+b2*t*t+b3*t*t*t);
- END;
-
- BEGIN { quantil }
- CASE v_fkt OF
- expo : BEGIN quantil := -1.0*(Ln(1.0-x))/p[1]; END;
- sta : BEGIN
- IF x <= 0.5 THEN BEGIN signum := TRUE; dummy1 := 1.0-x; END
- ELSE BEGIN signum := FALSE; dummy1 := x; END;
- IF NOT signum THEN quantil := korrektur(dummy1)
- ELSE quantil := -1.0*korrektur(dummy1);
- END;
- nor : BEGIN
- dummy1 := quantil(sta,p_vec,x); quantil := p[1]+dummy1*p[2];
- END;
- stu : BEGIN
- IF x <= 0.5 THEN BEGIN signum := TRUE; dummy1 := 1.0-x; END
- ELSE BEGIN signum := FALSE; dummy1 := x; END;
- c := (p[1]-5.0/6.0)/Sqr(p[1]-2.0/3.0+0.1/p[1]);
- dummy2 := Sqrt(p[1]*Exp(c*Sqr(korrektur(dummy1)))-p[1]);
- IF NOT signum THEN quantil := dummy2
- ELSE quantil := -1.0*dummy2;
- END;
- chi : BEGIN
- dummy1 := 1.0-2.0/(9.0*p[1])+korrektur(x)*Sqrt(2.0/(9.0*p[1]));
- quantil := p[1]*dummy1*dummy1*dummy1;
- END;
- fis : BEGIN
- IF x <= 0.5 THEN BEGIN signum := TRUE; dummy1 := 1.0-x; END
- ELSE BEGIN signum := FALSE; dummy1 := x; END;
- c := (Sqr(korrektur(dummy1))-3.0)/6.0;
- d := 1.0/(p[1]-1.0)+1.0/(p[2]-1.0);
- b := 2.0*(1.0/(p[1]-1.0)-1.0/(p[2]-1.0))*(c+5.0/6.0-d/3.0);
- a := Sqrt(2.0*d+c*d*d);
- dummy2 := Exp(korrektur(dummy1)*a+b);
- IF NOT signum THEN quantil := dummy2
- ELSE quantil := 1.0/dummy2;
- END;
- END;
- END;
- {---------------------------------------------------------------------------}
- { Ende QUANTILE.INC }