summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pst-func
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-09-03 16:33:26 +0000
committerKarl Berry <karl@freefriends.org>2007-09-03 16:33:26 +0000
commit8e1addeb313836534d067bb5f1818d0b9a5c1dd7 (patch)
treea2027db9392e9fe75d7b32c0fdc77aab18a34b22 /Master/texmf-dist/tex/generic/pst-func
parentf1a51e596292491bcc441288a51aaec8af7dab1e (diff)
pst-func 0.50
git-svn-id: svn://tug.org/texlive/trunk@4854 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/pst-func')
-rw-r--r--Master/texmf-dist/tex/generic/pst-func/pst-func.tex171
1 files changed, 141 insertions, 30 deletions
diff --git a/Master/texmf-dist/tex/generic/pst-func/pst-func.tex b/Master/texmf-dist/tex/generic/pst-func/pst-func.tex
index ab399eb9ec9..2d0dcae366e 100644
--- a/Master/texmf-dist/tex/generic/pst-func/pst-func.tex
+++ b/Master/texmf-dist/tex/generic/pst-func/pst-func.tex
@@ -28,11 +28,12 @@
% interface to the `xkeyval' package
\pst@addfams{pst-func}
-\def\fileversion{0.49}
-\def\filedate{2007/12/23}
+\def\fileversion{0.50}
+\def\filedate{2007/08/27}
\message{`PST-func' v\fileversion, \filedate\space (hv)}
%
\pstheader{pst-func.pro}
+\pstheader{pst-math.pro}% for GAMMALN
%
\define@key[psset]{pst-func}{xShift}{\def\psk@xShift{#1}}
\psset[pst-func]{xShift=0}
@@ -195,7 +196,8 @@
%
\define@key[psset]{pst-func}{sigma}{\def\psk@sigma{#1 }}
\define@key[psset]{pst-func}{mue}{\def\psk@mue{#1 }}
-\psset[pst-func]{sigma=0.5,mue=0}
+\define@key[psset]{pst-func}{nue}{\def\psk@nue{#1 }}
+\psset[pst-func]{sigma=0.5,mue=0,nue=1}
%
\def\psGauss{\@ifnextchar[{\psGauss@i}{\psGauss@i[]}}
\def\psGauss@i[#1]#2#3{{%
@@ -386,26 +388,44 @@
\psset[pst-func]{printValue=false,barwidth=1}
%
\def\psBinomial{\pst@object{psBinomial}}
-\def\psBinomial@i#1#2{%
+\def\psBinomial@i#1#2{\psBinomial@ii#1,,,\@nil{#2}}%
+\def\psBinomial@ii#1,#2,#3,#4\@nil#5{%
+ \def\pst@tempA{#2}%
+ \ifx\pst@tempA\@empty
+ \psBinomial@iii{0}{#1}{#1}{#5}%
+ \else
+ \def\pst@tempA{#3}%
+ \ifx\pst@tempA\@empty\psBinomial@iii{#1}{#2}{#2}{#5}%
+ \else\psBinomial@iii{#1}{#2}{#3}{#5}\fi
+ \fi}%
+\def\psBinomial@iii#1#2#3#4{%
\begin@SpecialObj%
\addto@pscode{
/scx { \pst@number\psxunit mul } def
/scy { \pst@number\psyunit mul } def
- /N #1 def
- /p #2 def
+ /m #1 def
+ /n #2 def
+ /N #3 def
+ /p #4 def
/dx \psFunc@barwidth 2 div def
/q 1 p sub def
- /kOld dx neg def
+ /kOld dx neg m add def
kOld scx 0 moveto % starting point
-% /Y 1 def % start value
- 0 1 N { % N times
+ 0 1 m 1 sub {
+ /k exch def % save loop variable
+ k 0 eq
+ { /Y q N exp def }
+ { /Y Y N k sub 1 add mul k div p mul q div def }
+ ifelse
+ } for
+ m 1 n { % n-m+1 times
/k exch def % save loop variable
k 0 eq
{ /Y q N exp def }
{ /Y Y N k sub 1 add mul k div p mul q div def }
ifelse % recursive definition
- kOld scx 0 L kOld scx Y scy L k dx add scx Y scy L
- \ifPst@markZeros k dx add scx 0 L \fi
+ kOld scx Y scy L k dx add scx Y scy L
+ \ifPst@markZeros k dx add scx 0 L kOld 1 add scx 0 L \fi
\ifPst@printValue
gsave \psk@PSfont findfont \psk@fontscale scalefont setfont
Y \psk@valuewidth string cvs
@@ -417,11 +437,10 @@
} for
\ifPst@markZeros\else k dx add scx 0 L \fi % last line down to x-axis
}%
- \psk@fillstyle
- \pst@stroke
+ \psk@fillstyle%
+ \pst@stroke%
\end@SpecialObj%
-}
-%
+}%
\def\psBinomialN{\pst@object{psBinomialN}}
\def\psBinomialN@i#1#2{%
\pst@killglue
@@ -476,24 +495,33 @@
\ignorespaces%
}
%
-\def\psPoisson{\pst@object{psPoisson}}
-\def\psPoisson@i#1#2{%
+\def\psPoisson{\pst@object{psPoisson}}% with contributions from Gerry Coombes
+\def\psPoisson@i#1#2{\psPoisson@ii#1,,\@nil{#2}}%
+\def\psPoisson@ii#1,#2,#3\@nil#4{%
+ \def\pst@tempA{#2}%
+ \ifx\pst@tempA\@empty\psPoisson@iii{0}{#1}{#4}\else
+ \psPoisson@iii{#1}{#2}{#4}\fi}%
+\def\psPoisson@iii#1#2#3{% M N lambda
\begin@SpecialObj%
\addto@pscode{
/scx { \pst@number\psxunit mul } def
/scy { \pst@number\psyunit mul } def
- /N #1 def
- /lambda #2 def
- /elambda Euler #2 neg exp def % e^-lambda
+ /M #1 def
+ /N #2 def
+ /lambda #3 def
+ /elambda Euler #3 neg exp def % e^-lambda
/dx \psFunc@barwidth 2 div def
- /kOld dx neg def
- kOld scx 0 moveto % starting point
- /Y elambda def % start value
- 0 1 N { % N times
- /k exch def % save loop variable
- k 0 eq { /kFaculty 1 def }{ /kFaculty kFaculty k mul def } ifelse
- /Y lambda k exp kFaculty div elambda mul def
- kOld scx 0 L kOld scx Y scy L k dx add scx Y scy L
+ /kOld dx neg M add def % addition of M here
+ kOld scx 0 moveto % starting point
+ /Y elambda def % start value
+ 0 1 M 1 sub { % skip over first M-1 rectangles
+ /k exch def % whilst recursing probabilities
+ k 0 eq { /Y elambda def }{ /Y Y lambda mul k div def } ifelse
+ } for % nothing happens if M=0
+ M 1 N { % N-M+1 times
+ /k exch def % save loop variable
+ k 0 eq { /Y elambda def }{ /Y Y lambda mul k div def } ifelse
+ kOld scx Y scy L k dx add scx Y scy L
\ifPst@markZeros k dx add scx 0 L \fi
\ifPst@printValue
gsave \psk@PSfont findfont \psk@fontscale scalefont setfont
@@ -511,6 +539,86 @@
\end@SpecialObj%
}
%
+\define@key[psset]{pst-func}{alpha}{\pst@checknum{#1}\psk@alpha } % gamma
+\define@key[psset]{pst-func}{beta}{\pst@checknum{#1}\psk@beta } % gamma
+\psset[pst-func]{alpha=0.5,beta=0.5}
+%
+\def\psGammaDist{\pst@object{psGammaDist}}
+\def\psGammaDist@i#1#2{%
+ \ifdim#1pt<\z@ \psframebox*{\color{red}!!!\#1 must be greater than 0!!!}
+ \else
+ \addbefore@par{plotpoints=500,alpha=0.5,beta=0.5}%
+ \begin@SpecialObj
+ \psplot{#1}{#2}{
+ \psk@beta x mul \psk@alpha exp x div Euler \psk@beta neg x mul \psk@alpha GAMMALN sub exp mul}
+ \end@SpecialObj%
+ \ignorespaces%
+ \fi%
+}
+%
+\def\psBetaDist{\pst@object{psBetaDist}}
+\def\psBetaDist@i#1#2{%
+ \ifdim#1pt<\z@ \psframebox*{\color{red}!!!\#1 must be greater than 0!!!}
+ \else
+ \addbefore@par{plotpoints=200,alpha=1,beta=1}%
+ \begin@SpecialObj
+ \psplot{#1}{#2}{
+ \psk@beta \psk@alpha add GAMMA
+ \psk@beta GAMMA \psk@alpha GAMMA mul div
+ 1 x sub \psk@beta 1.0 sub exp mul
+ x \psk@alpha 1.0 sub exp mul }
+ \end@SpecialObj%
+ \ignorespaces%
+ \fi%
+}
+%
+\def\psChiIIDist{\pst@object{psChiIIDist}}
+\def\psChiIIDist@i#1#2{%
+ \addbefore@par{plotpoints=500,nue=1}%
+ \begin@SpecialObj
+% \ifdim\psk@nue pt<\z@ \psframebox*{\color{red}!!!nue must be greater than 0!!!}
+% \else
+ \psplot{#1}{#2}{%
+ x 2 div \psk@nue 2 div exp x div Euler -0.5 x mul \psk@nue 2 div GAMMALN sub exp mul }%
+% \fi%
+ \end@SpecialObj%
+ \ignorespaces%
+}
+%
+\def\psTDist{\pst@object{psTDist}}
+\def\psTDist@i#1#2{%
+ \addbefore@par{plotpoints=500}%
+ \begin@SpecialObj
+ \ifdim\psk@nue pt<\z@ \psframebox*{\color{red}!!!nue must be greater than 0!!!}
+ \else
+ \psplot{#1}{#2}{
+ 1 x 2 exp \psk@nue div 1 add \psk@nue 1 add 2 div exp div
+ \psk@nue Pi mul sqrt div
+ Euler \psk@nue 1 add 2 div GAMMALN \psk@nue 2 div GAMMALN sub exp mul
+ }%
+ \fi%
+ \end@SpecialObj%
+ \ignorespaces%
+}
+%
+\def\psFDist{\pst@object{psFDist}}
+\def\psFDist@i#1#2{%
+ \ifdim#1pt<\z@ \psframebox*{\color{red}!!!\#1 must be greater than 0!!!}
+ \else
+ \addbefore@par{plotpoints=500,mue=1}%
+ \begin@SpecialObj
+ \psplot{#1}{#2}{
+ x \psk@mue mul \psk@nue div dup \psk@mue 2 div exp x div
+ exch 1 add \psk@mue \psk@nue add 2 div exp div
+ Euler \psk@mue \psk@nue add 2 div GAMMALN
+ \psk@mue 2 div GAMMALN sub \psk@nue 2 div GAMMALN sub exp mul
+ }%
+ \end@SpecialObj%
+ \fi%
+ \ignorespaces%
+}
+
+%
% Superellipese / Lamefunction
\define@key[psset]{pst-func}{radiusA}{\pst@getlength{#1}\pst@radiusA}
\define@key[psset]{pst-func}{radiusB}{\pst@getlength{#1}\pst@radiusB}
@@ -554,10 +662,13 @@
/Func \ifPst@algebraic (#5) tx@addDict begin AlgParser end cvx \else { #5 } \fi def
\fi
/xPixel xMax xMin sub \pst@number\psxunit mul round cvi def
- /yPixel yMax yMin sub \pst@number\psxunit mul round cvi def
+ /yPixel yMax yMin sub \pst@number\psyunit mul round cvi def
/dx xMax xMin sub xPixel div def
/dy yMax yMin sub yPixel div def
- /setpixel { dy div exch dx div exch \pst@number\pslinewidth 2 div 0 360 arc fill } bind def
+ /setpixel {
+ dy div exch
+ dx div exch
+ \pst@number\pslinewidth 2 div 0 360 arc fill } bind def
%
/VZ true def % suppose that F(x,y)>=0
/x xMin def /y yMin def Func 0.0 lt { /VZ false def } if % erster Wert