@@ -100,7 +100,9 @@ function _lambertw(z::Complex{T}, k::Integer, maxits::Integer) where T<:Real
100
100
k != 0 ? w += complex (0 , k * 2 * pi ) : nothing
101
101
end
102
102
elseif k == 0 && imag (z) <= pointseven && abs (z) <= pointseven
103
- w = abs (z+ 1 // 2 ) < 1 // 10 ? imag (z) > 0 ? complex (pointseven, pointseven) : complex (pointseven, - pointseven) : z
103
+ w = abs (z+ 1 // 2 ) < 1 // 10 ? imag (z) > 0 ?
104
+ complex (pointseven, pointseven) :
105
+ complex (pointseven, - pointseven) : z
104
106
else
105
107
if real (z) == convert (T, Inf )
106
108
k == 0 && return z
@@ -118,16 +120,15 @@ end
118
120
# Use Halley's root-finding method to find
119
121
# x = lambertw(z) with initial point x0.
120
122
function lambertw_root_finding (z:: T , x0:: T , maxits:: Integer ) where T <: Number
121
- two_t = convert (T, 2 )
122
123
x = x0
123
124
lastx = x
124
125
lastdiff = zero (real (T))
125
126
converged = false
126
- for i in 1 : maxits
127
+ for _ in 1 : maxits
127
128
ex = exp (x)
128
129
xexz = x * ex - z
129
130
x1 = x + 1
130
- x -= xexz / (ex * x1 - (x + two_t ) * xexz / (two_t * x1 ))
131
+ x -= xexz / (ex * x1 - (x + 2 ) * xexz / (2 * x1))
131
132
xdiff = abs (lastx - x)
132
133
if xdiff <= 3 * eps (lastdiff) || lastdiff == xdiff # second condition catches two-value cycle
133
134
converged = true
@@ -136,7 +137,7 @@ function lambertw_root_finding(z::T, x0::T, maxits::Integer) where T <: Number
136
137
lastx = x
137
138
lastdiff = xdiff
138
139
end
139
- converged || @warn (" lambertw with z= " , z, " did not converge in " , maxits, " iterations." )
140
+ converged || @warn (" lambertw( " , z, " ) did not converge in " , maxits, " iterations." )
140
141
return x
141
142
end
142
143
0 commit comments