## Sunday, October 3, 2021

### HP Prime Python: Complex Number Arithmetic and Lambert Function - and Firmware Update!

HP Prime Python:  Complex Number Arithmetic and  Lambert Function

HP Prime Python:  Complex Number Arithmetic and  Lambert Function - and Firmware Update!

Firmware Update!

There is a new firmware update (10/1/2021) - v. 14596 for both the Hardware versions (Version 1 and Version 2) of the HP Prime.   The link to the MHPoC entry and download links:

Now on to complex numbers and the Lambert function.

Python File Introduction

A work around of having separate Python files is to create separate apps for each application.  Both applications are available to download at the blog.

Complex Number Arithmetic

The HP Prime App "Python-Complex Arithmetic" performs the four arithmetic functions on two complex numbers.

Script:

from cmath import *

print("Complex Number Arithmetic")

x1=float(input("real_1: "))

# input values are not auto printed

print(x1)

y1=float(input("imag_y: "))

print(y1)

z1=complex(x1,y1)

print("z1 = "+str(z1))

x2=float(input("real_2: "))

print(x2)

y2=float(input("imag_2: "))

print(y2)

z2=complex(x2,y2)

print("z2 = "+str(z2))

print()

print("z1 + z2 = "+str(z1+z2))

print("z1 - z2 = "+str(z1-z2))

print("z1 * z2 = "+str(z1*z2))

print("z1 / z2 = "+str(z1/z2))

Example:

x1 = 9

y1 = -8  (use [ +/- ] to enter negative numbers)

x2 = -1

y2 = 4

Results:

z1 = 9-8j

z2 = -1+4j

z1 + z2 = 8-4j

z1 - z2 = 10-12j

z1 * z2 = 23+44j

z1 / z2 = -2.411764705882353-1.647058823529412j

Lambert W Function

The HP Prime App "Python-Lambert W Function" approximates the Lambert W function.   The Python script estimates w given complex number z using Newtons Method:

w * e^w = z

Script:

from cmath import *

print("Lambert W Function - approx")

print("w * exp(w) = z, find w")

zr=float(input("z_real: "))

print(zr)

zj=float(input("z_imag: "))

print(zj)

z=complex(zr,zj)

w0=complex(1,1)

w1=complex(1,1)

while abs(w1)>1*10**-10:

w1=(w0*exp(w0)-z)/(exp(w0)+w0*exp(w0))

w0=w0-w1

# round low parts to zero

# z.real, z.imag are read only

wr=w0.real

if abs(wr)<1*10**-10:

wr=0

wj=w0.imag

if abs(wj)<1*10**-10:

wj=0

w0=complex(wr,wj)

print("w = "+str(w0))

Example:

Result:  approx -1.223152769062088e-06+1.57079554811127j

Input:  2+3j

Result:  approx 1.090076534485791+0.5301397207748389j

Source:

Wikipedia.  "Lambert W Function" Last updated June 13, 2021.

https://en.wikipedia.org/wiki/Lambert_W_function Retrieved July 9, 2021

Eddie

All original content copyright, © 2011-2021.  Edward Shore.   Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited.  This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author.