Skip to content

Commit 59a2831

Browse files
committed
invlogcdf_newton(): extract df(x)
1 parent 1f9b7a3 commit 59a2831

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

src/quantilealgs.jl

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,19 +92,21 @@ end
9292

9393
function invlogcdf_newton(d::ContinuousUnivariateDistribution, lp::Real, xs::Real=mode(d), tol::Real=1e-12)
9494
T = typeof(lp - logpdf(d,xs))
95+
f_a(x) = -exp(lp - logpdf(d,x) + logexpm1(max(logcdf(d,x)-lp,0)))
96+
f_b(x) = exp(lp - logpdf(d,x) + log1mexp(min(logcdf(d,x)-lp,0)))
9597
if -Inf < lp < 0
9698
x0 = T(xs)
9799
if lp < logcdf(d,x0)
98-
x = x0 - exp(lp - logpdf(d,x0) + logexpm1(max(logcdf(d,x0)-lp,0)))
100+
x = x0 + f_a(x0)
99101
while abs(x-x0) > max(abs(x),abs(x0)) * tol
100102
x0 = x
101-
x = x0 - exp(lp - logpdf(d,x0) + logexpm1(max(logcdf(d,x0)-lp,0)))
103+
x = x0 + f_a(x0)
102104
end
103105
else
104-
x = x0 + exp(lp - logpdf(d,x0) + log1mexp(min(logcdf(d,x0)-lp,0)))
106+
x = x0 + f_b(x0)
105107
while abs(x-x0) > max(abs(x),abs(x0))*tol
106108
x0 = x
107-
x = x0 + exp(lp - logpdf(d,x0) + log1mexp(min(logcdf(d,x0)-lp,0)))
109+
x = x0 + f_b(x0)
108110
end
109111
end
110112
return x

0 commit comments

Comments
 (0)