%%HP: T(0)A(D)F(.);
@ Library of Complex Numbers in Cartesian Form
@ Author: compsystems
@ Version: alpha 0.5 April 10 2017
@ Coded with HPUserEdit 6
@ Bibliography: Complex Variables and Applications - James Ward Brown, Ruel ...
@ ƒ = SQRT
@ [] = -> (STORE)
UPDIR 'cplx' PGDIR -27 CF -128 SF -114 CF
RAD
RECT
DIR
cplx1 '(x1,y1)'
cplx2 '(x2,y2)'
cplx3 '(x1,0)'
cplx4 '(x2,0)'
cplx5 '(x,0)'
cplx6 '(0,y)'
cplx6 '(0,1)'
cplx '(re,im)'
addComplex
«
0 CP1 CP2 ans
«
delVars CP1 CP2 + 'ans' STO
cplx 're' ans RE EVAL = SUBST 'im' ans IM EVAL = SUBST
»
»
subtractComplex
«
0 CP1 CP2 ans
«
delVars CP1 CP2 - 'ans' STO
cplx 're' ans RE EVAL = SUBST 'im' ans IM EVAL = SUBST
»
»
multiplyComplex
«
0 CP1 CP2 ans
«
delVars CP1 CP2 * 'ans' STO
cplx 're' ans RE EVAL = SUBST 'im' ans IM EVAL = SUBST
»
»
negativeComplex
«
0 CP1 ans
«
delVars CP1 NEG 'ans' STO
cplx 're' ans RE EVAL = SUBST 'im' ans IM EVAL = SUBST
»
»
invComplex
«
0 CP1 ans
«
delVars
IF
CP1 RE IP 0. SAME
CP1 IM IP 0. SAME AND
THEN
"Undefined, complex number must be nonzero" DUP MSGBOX
ELSE
CP1 INV 'ans' STO
cplx 're' ans RE EVAL = SUBST 'im' ans IM EVAL = SUBST
END
»
»
divComplex
«
0 CP1 CP2 ans
«
delVars
IF
CP2 RE IP 0. SAME
CP2 IM IP 0. SAME AND
THEN
"Undefined, the complex number of the divisor must be nonzero" DUP MSGBOX
ELSE
CP1 CP2 / 'ans' STO
cplx 're' ans RE EVAL = SUBST 'im' ans IM EVAL = SUBST
END
»
»
scalarMulCplx
«
0 CP1 scl ans
«
delVars
scl EVAL 'scl' STO
cplx 're' CP1 RE scl * EVAL = SUBST 'im' CP1 IM EVAL scl * = SUBST
»
»
scalarMulCplx
«
0 CP1 scl ans
«
delVars
scl EVAL 'scl' STO
cplx 're' CP1 RE scl / EVAL = SUBST 'im' CP1 IM EVAL scl / = SUBST
»
»
absComplex
«
CP1
«
delVars
CP1 RE EVAL 2 ^ CP1 IM EVAL 2 ^ + ƒ
»
»
argComplex
«
CP1
«
delVars
RAD CP1 ARG
IFERR NUM '1_°' CONVERT @ QPI
THEN
END
»
»
conjComplex
«
0 CP1 ans
«
delVars CP1 CONJ 'ans' STO
cplx 're' ans RE EVAL = SUBST 'im' ans IM EVAL = SUBST
»
»
simplifyComplex
«
0 CP1 ans
«
delVars CP1 EVAL 'ans' STO
cplx 're' ans RE EVAL = SUBST 'im' ans IM EVAL = SUBST
»
»
delVars
«
{ x, y, x1, x2, y1, y2 } PURGE
»
Demo0
«
CLEAR
'(x1, y1)' negativeComplex @ '(-x1, -y1)'
'(x1, y1)' '(x2, y2)' addComplex @ '(x1+x2, y1+y2)'
'(x1, y1)' '(x2, y2)' subtractComplex @ '(x1-x2, y1-y2)'
'(x1, y1)' '(x2, y2)' multiplyComplex @ '(x2*x1-y2*y1, y2*x1+y1*x2)'
'(x1, y1)' '(x2, y2)' divComplex @ '( (x2*x1+y2*y1)/(x2^2+y2^2), -((y2*x1-y1*x2)/(x2^2+y2^2)) )'
'(x1, y1)' invComplex @ '( x1/(x1^2+y1^2), -y1/(x1^2+y1^2) )'
'(x, y)' 2 ^ simplifyComplex @ '(x^2-y^2, 2*y*x)'
'(x, y)' absComplex @ 'ƒ(x^2+y^2)'
'(3, 4)' absComplex @ 5
'(3, 4)' argComplex @ '53.1301023542_°'
'(3, 4)' conjComplex @ (3, -4)
»
Demo1
«
'(x1, 0)' '(x2, 0)' addComplex @ '(x1+x2, 0)'
'(x1, 0)' '(x2, 0)' subtractComplex @ '(x1-x2, 0)'
'(x1, 0)' '(x2, 0)' multiplyComplex @ '(x2*x1, 0)'
'(x, 0)' '(0, y)' addComplex @ '(x, y)'
'(0, 1)' '(y, 0)' multiplyComplex @ '(0, y)'
'(x, 0)' '(0, 1)' '(y, 0)' multiplyComplex addComplex @ '(x, y)'
'(x, 0)' i '(y, 0)' multiplyComplex addComplex @ '(x, y)'
'(x, 0)' '(x, 0)' multiplyComplex @ '(x^2, 0)'
'(x, y)' '(x, y)' multiplyComplex @ '(x^2-y^2, 2*y*x)'
'(x, y)' 2 ^ simplifyComplex @ '(x^2-y^2, 2*y*x)'
'(x, y)' 3 ^ simplifyComplex @ '(x^3-3*y^2*x, 3*y*x^2-y^3)'
'(0, 1)' 2 ^ simplifyComplex @ '(-1, 0)'
'-(x, y)' simplifyComplex @ '(-x1, -y1)'
'(x, y)' '(0, 0)' addComplex @ '(x, y)'
'(x, y)' '(1, 0)' multiplyComplex @ '(x, y)'
'(x, y)' '-(x, y)' addComplex @ '(0, 0)'
'(x1, y1)' '(x2, y2)' negativeComplex addComplex @ '(x1-x2, y1-y2)'
'(x1, y1)' '(x2, y2)' invComplex multiplyComplex @ '((x2*x1+y2*y1)/(x2^2+y2^2), -((y2*x1-y1*x2)/(x2^2+y2^2)))'
'(x, y)' argComplex @ 'ATAN(y/x)+(1-x/ABS(x))*(‡/2)'
'(x, y)' conjComplex @ '(x, -y)'
'i^2' simplifyComplex @ (-1, 0)
'(x, y)' '(x, y)' conjComplex multiplyComplex @ '(1, 0)'
'(3, -2)' '(3, -2)' conjComplex multiplyComplex '(13, 0)'
'(4, 5)' '(3, -2)' conjComplex multiplyComplex '(3, -2)' '(3, -2)' conjComplex multiplyComplex scalarMulCplx @ '(2/13, 22/13)'
'(4, 5)' '(3, -2)' divComplex @ '(2/13, 23/13)'
'(4, 5)' 3 scalarMulCplx '(4, 5)' '-2*i' scalarMulCplx addComplex @ '(22, 7)'
»
Demo2
«
'(2/13, 3/13)' '(1/2, -1/2)' multiplyComplex @ '(5/26, 1/26)' -> 1/(2,-3) * 1/(1,1)
'(x1, y1)' '(x2, y2)' addComplex 2 ^ simplifyComplex @ '(x1^2+2*x2*x1+(x2^2-(y1^2+2*y2*y1+y2^2)), (2*y1+2*y2)*x1+(2*y1+2*y2)*x2)'
'(-3, 2)' absComplex (1, 4) absComplex < @ true
'(3, 3)' argComplex @ '45_°'
'(3, 4)' argComplex @ '53.1301023542_°'
'(3, -4)' argComplex @ '-53.1301023542_°'
'(-3, -4)' argComplex @ '-126.86_°'
'(-3, 4)' argComplex @ '126.86_°'
'(3, 4)' conjComplex @ (3, -4)
'(3, 4)' conjComplex conjComplex @ (3, 4)
'(x1, y1)' '(x2, y2)' addComplex conjComplex @ '(x1+x2, -(y1+y2))'
'(x1, y1)' conjComplex '(x2, y2)' conjComplex addComplex @ '(x1+x2, -(y1+y2))'
'(x1, -y1)' '(x2, -y2)' addComplex @ '(x1+x2, -(y1+y2))'
»
Demo3
«
(3,4) (1,1) addComplex
'(3.68201941381+1.56292451396*i)' '(5+7*i)' multiplyComplex
'(4,€23)_°' '(5+7*i)' multiplyComplex
'(3, 0)' invComplex @ '(.333333333333,0.)'
'(0, 4)' invComplex @ '(0.,-.25)'
'(0, 0)' invComplex
»
Demo4
«
(-3, 2) absComplex (1, 4) absComplex < @ true
(3, 3) argComplex @ 45_°
(3, 4) argComplex @ 53.1301023542_°
(3, -4) argComplex @ -53.1301023542_°
(-3, -4) argComplex @ -126.86_°
(-3, 4) argComplex @ 126.86_°
(3, 4) conjComplex @ (3, -4)
(3, 4) conjComplex conjComplex @ (3, 4)
»
END
'cplx' STO cplx Demo4