erfi, erfw (w(z)) functions - Printable Version +- HP Forums (https://www.hpmuseum.org/forum) +-- Forum: HP Software Libraries (/forum-10.html) +--- Forum: HP Prime Software Library (/forum-15.html) +--- Thread: erfi, erfw (w(z)) functions (/thread-9415.html) |
erfi, erfw (w(z)) functions - salvomic - 11-01-2017 06:03 PM hi everybody, Luckily Prime has inside its CAS two useful functions to magare problems connected to error treatment and statistics: the error function, erf() and the complementary error function, erfc(). If one want to "complete" that series, could think to implement also other two "sisters": the imaginary error function, erfi() and a function that I call "erfw", otherwise w(z) that handles every complex number. See here for theory. The code: erfi() Code:
erfw() Code:
Enjoy with the Prime! Salvo Micciché RE: erfi, erfw (w(z)) functions - Albert Chan - 08-22-2020 04:10 PM A mnemonic I find useful swap -1 and i, and swap the function (erf ↔ erfi, sin ↔ sinh, cos ↔ cosh, tan ↔ tanh) Code: erf (-x) = - erf(x) → erf (ix) = i erfi(x) Update: we could replace i by 1/i, and get a new set of identities cosh(x) = cos(i*x) = cos(-i*x) = cos(x/i) atan(x) = atanh(ix)/i = atanh(-ix)/(-i) = atanh(x/i)*i ... Update2: A better mnemonic maybe to turn function even sin(x)/x = sinh(±i*x)/(±i*x) = 1 − x^2/6 + x^4/120 − ... sinh(x)/x = sin(±i*x)/(±i*x) = 1 + x^2/6 + x^4/120 + ... RE: erfi, erfw (w(z)) functions - Albert Chan - 09-03-2021 10:39 AM For odd functions (erf ↔ erfi, sin ↔ sinh, tan ↔ tanh, and their inverse), we can swap the parts. Let swap(x + y*i) = y + x*i sinh(z) = swap(sin(swap(z))) sin(z) = swap(sinh(swap(z))) ... >>> from cmath import * >>> sin(3+4j) (3.8537380379193773-27.016813258003932j) >>> sinh(4+3j) (-27.016813258003932+3.8537380379193773j) This is easier to remember, without worrying signs of ×/÷ i Code is likely simpler, since ×/÷ i is usually implemented by swap parts, then fix sign. From HP-71B cpr.a, http://www.jeffcalc.hp41.eu/emu71/mathrom.html Code: * ************************ Proof is trivial, since swap(z) = i*conj(z) sinh(z) = sin(i*z) / i conj(sinh(z)) = sinh(conj(z)) = sin(i*conj(z)) / i Multiply-by-i, and replace i*conj() by swap() swap(sinh(z)) = sin(swap(z)) |