home *** CD-ROM | disk | FTP | other *** search
- {***************************************************************************}
- {* DICHTE.INC *}
- {* Wahrscheinlichkeiten *}
- {***************************************************************************}
- FUNCTION dichte (v_fkt: Verteilungstyp; p: Parametervector; x: REAL): REAL;
-
- VAR a, b : REAL;
- p_vec : Parametervector;
-
- BEGIN
- CASE v_fkt OF
- sta : BEGIN dichte := Exp(-x*x/2.0)/Sqrt(2.0*Pi); END;
- nor : dichte := dichte(sta,p_vec,((x-p[1])/p[2]));
- bin : BEGIN
- IF p[2] > 0.5 THEN
- BEGIN p[2] := 1.0-p[2]; x := p[1]-x; END;
- IF x < 0.0 THEN dichte := 0.0;
- IF x >= 0.0 THEN
- IF p[1] > 48.0 THEN
- BEGIN
- p_vec[1] := p[1]*p[2];
- p_vec[2] := Sqrt(p[1]*p[2]*(1.0-p[2]));
- dichte := dichte(nor,p_vec,(x+0.5)) -
- dichte(nor,p_vec,(x-0.5));
- END
- ELSE
- dichte := binkoeff(p[2],x)*power(p[2],x)*power((1.0-p[2]),
- (p[1]-x));
- END;
- hyp : BEGIN
- a := 0.0;
- IF (p[3]+p[2]-p[1]) > a THEN a := p[3]+p[2]-p[1];
- b := p[3];
- IF p[2] < p[3] THEN b := p[2];
- IF (x >= a) AND (x <= b) THEN
- IF ((p[2]/p[1]) > 0.1) AND ((p[2]/p[1]) < 0.9) AND
- ((p[3]/p[1]) < 0.05) AND (p[3] > 10.0) THEN
- BEGIN
- p_vec[1] := p[3]; p_vec[2] := p[2]/p[1];
- dichte := dichte(bin,p_vec,x);
- END
- ELSE IF ((p[2]/p[1]) > 0.1) AND ((p[2]/p[1]) < 0.9) AND
- ((p[3]/p[1]) < 0.05) AND (p[3] > 30.0) THEN
- BEGIN
- a := (p[2]/p[1]); b := (p[1]-p[3])/(p[1]-1.0);
- p_vec[1] := p[3]*a; p_vec[2] := p[3]*a*(1.0-a)*b;
- dichte := dichte(nor,p_vec,(x+0.5)) -
- dichte(nor,p_vec,(x-0.5));
- END
- ELSE
- BEGIN
- a := binkoeff(p[2],x)*binkoeff((p[1]-p[2]),(p[3]-x));
- b := binkoeff(p[1],p[3]);
- dichte := a/b;
- END
- ELSE dichte := 0.0;
- END;
- expo : BEGIN
- IF x >= 0.0 THEN dichte := p[1]*Exp(-p[1]*x) ELSE dichte := 0.0;
- END;
- gch : BEGIN
- IF x > 0.0 THEN dichte := 1.0/(p[2]-p[1]) ELSE dichte := 0.0;
- END;
- poi : BEGIN
- IF x < 0.0 THEN dichte := 0.0;
- IF x >= 0.0 THEN
- IF p[1] >= 14.0 THEN
- BEGIN
- p_vec[1] := p[1]; p_vec[2] := Sqrt(p[1]);
- dichte := dichte(nor,p_vec,(x+0.5)) -
- dichte(nor,p_vec,(x-0.5));
- END
- ELSE dichte := power(p[1],x)/fac(x)*Exp(-p[1])
- END;
- stu : BEGIN
- IF p[1] > 0.0 THEN
- IF p[1] > 60.0 THEN dichte := dichte(sta,p_vec,x)
- ELSE
- BEGIN
- a := gamma((p[1]+1.0)/2.0)*power((1.0+Sqr(x)/p[1]),
- -(p[1]+1.0)/2.0);
- dichte := a/gamma(p[1]/2.0)/Sqrt(p[1]*Pi);
- END;
- END;
- chi : BEGIN
- IF x <= 0.0 THEN dichte := 0.0;
- IF x > 0.0 THEN
- IF p[1] > 100.0 THEN
- BEGIN
- p_vec[1] := p[1]; p_vec[2] := Sqrt(2.0*p[1]);
- dichte := dichte(nor,p_vec,x);
- END
- ELSE
- BEGIN
- a := power(x,(p[1]-2.0)/2.0)/gamma(p[1]/2.0);
- b := Exp(-x/2.0)/power(2.0,p[1]/2.0);
- dichte := a*b;
- END
- END;
- fis : BEGIN
- IF ((p[1] > 1.0) AND (p[2] > 200.0)) THEN
- BEGIN
- p_vec[1] := p[1];
- dichte := dichte(chi,p_vec,x);
- END
- ELSE
- BEGIN
- a := gamma((p[1]+p[2])/2.0) /
- gamma(p[1]/2.0)/gamma(p[2]/2.0);
- b := power(x,p[1]/2.0-1.0) /
- power(x*p[1]+p[2],(p[1]+p[2])/2.0);
- dichte := a*b*power(p[1],p[2]/2.0)*power(p[2],p[2]/2.0);
- END;
- END;
- ber : BEGIN
- IF x = 0.0 THEN dichte := 1.0-p[1]
- ELSE IF x = 1.0 THEN dichte := p[1]
- ELSE dichte := 0.0;
- END;
- END;
- END;
- {---------------------------------------------------------------------------}
- { Ende DICHTE.INC }