001 function x = wtinv(F,df)
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026 error(nargchk(2,2,nargin))
027 [errorcode F,df] = comnsize(F,df);
028 if errorcode>0,
029 error('F and df must be of common size or scalar');
030 end
031 x = zeros(size(F));
032
033 mxdf = 10^2;
034
035 ok = (df>0 & floor(df)==df & 0 <=F & F<=1 );
036 region1 = ((0 < F) & (F < 1));
037
038 k1 = find((df == 1) & region1 & ok);
039 if any(k1)
040 x(k1) = tan(pi * (F(k1) - 0.5));
041 end
042
043 k2 = find((df == 2)& region1 & ok);
044 if (any(k2))
045 R = (2*F(k2)-1);
046 x(k2) = sqrt(2)*R./sqrt(1-R.*R);
047 end
048
049 k = find(ok & region1 & 2 < df & df<=mxdf);
050 if any(k),
051 s = (F(k)<0.5);
052 tmp = F(k) + (1-2*F(k)).*s;
053 tmp2 = wbetainv(1-(2*(1-tmp)),1/2,df(k)/2);
054 tmp3 = tmp2.*df(k)./((1-tmp2));
055 x(k) = (1-2*s).*sqrt(tmp3);
056 end
057 k=find(ok & region1 & df>mxdf);
058 if any(k),
059 x(k) = wnorminv(F(k));
060 k0=find(df(k)<inf);
061 if any(k0)
062 k1=k(k0);
063 Y=x(k1);
064 g1=1/4*(Y.^3+Y);
065 g2=1/96*(5*Y.^5+16*Y.^3+3*Y);
066 g3=1/384*(3*Y.^7+19*Y.^5+17*Y.^3-15*Y);
067 g4=1/92160*(79*Y.^9+776*Y.^7+1482*Y.^5-1920*Y.^3-945*Y);
068 x(k1)=Y+g1./df(k1)+g2./df(k1).^2+g3./df(k1).^3+g4./df(k1).^4;
069 end
070 end
071
072
073 k2=find(ok&F==0);
074 if any(k2)
075 x(k2)=-inf;
076 end
077
078 k3=find(ok&F==1);
079 if any(k3)
080 x(k3)=inf;
081 end
082
083
084
085
086 k4=find(~ok);
087 if any(k2)
088 x(k4)=NaN;
089 end
090
091