(28/48/50) Lambert W Function
|
04-03-2023, 10:47 PM
(This post was last modified: 04-04-2023 12:19 AM by Albert Chan.)
Post: #26
|
|||
|
|||
RE: (28/48/50) Lambert W Function
(04-02-2023 11:12 PM)Albert Chan Wrote: lua> a, k = 3+4*I, 5 With Newton's rapid convergence, it might be overkill for better W guess ... x = r cis(θ) e^x = e^(r*cos(θ)) cis(r*sin(θ)) x*e^x = r*e^(r*cos(θ)) cis(θ+r*sin(θ)) = a r*e^(r*cos(θ)) = |a| θ+r*sin(θ) = arg(a) + 2*k*pi = T // for W branch k cos(θ) = ln(|a|/r)/r sin(θ) = (T-θ)/r We assume k positive --> both r and x imag part positive too. lua> a, k = 3+4*I, 5 lua> A, T = I.abs(a), 2*k*pi + I.arg(a) lua> A, T 5 32.34322175389954 lua> c = 0 -- = cos(θ) lua> r = (T-acos(c)) / sqrt(1-c*c) -- = T - pi/2 lua> c = log(A/r)/r lua> x = r * I.new(c, sqrt(1-c*c)) lua> x -- Wk(a) guess (-1.81718109820366+30.71872424960138*I) Rinse and repeat ... lua> r = (T-acos(c)) / sqrt(1-c*c) lua> c = log(A/r)/r lua> x2 = r * I.new(c, sqrt(1-c*c)) lua> x2 (-1.8170057678766207+30.7133303234809*I) lua> r = (T-acos(c)) / sqrt(1-c*c) lua> c = log(A/r)/r lua> x3 = r * I.new(c, sqrt(1-c*c)) lua> x3 (-1.8170058919343504+30.713334139703402*I) lua> aitken(x, x2, x3) (-1.8170058918466334+30.71333413700532*I) We don't even need machine to support complex numbers. We could just iterate for (r, c), improve with Aitken's delta-squared process Assuming K is positve, after (r, c) converged, Wk(a) = complex(r*c, r*sqrt(1-c*c)) |
|||
« Next Oldest | Next Newest »
|
User(s) browsing this thread: 15 Guest(s)