complex_functions¶
shortfx.fxNumeric.complex_functions
¶
Complex number operations and formulas.
Classical complex number formulas from Murray R. Spiegel's Mathematical Handbook of Formulas and Tables: arithmetic, polar/rectangular conversion, De Moivre's theorem, roots of unity, and Euler's formula.
Functions¶
complex_add(a: Tuple[float, float], b: Tuple[float, float]) -> Tuple[float, float]
¶
Adds two complex numbers represented as (real, imag) tuples.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
a
|
Tuple[float, float]
|
First complex number (re, im). |
required |
b
|
Tuple[float, float]
|
Second complex number (re, im). |
required |
Returns:
| Type | Description |
|---|---|
Tuple[float, float]
|
Sum as (re, im). |
Example
complex_add((1, 2), (3, 4)) (4, 6)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_argument(z: Tuple[float, float]) -> float
¶
Computes the argument (phase angle) of a complex number in radians.
arg(z) = atan2(im, re), result in (-π, π].
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
Tuple[float, float]
|
Complex number (re, im). |
required |
Returns:
| Type | Description |
|---|---|
float
|
Argument in radians. |
Example
round(complex_argument((1, 1)), 6) 0.785398
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_argument_degrees(z: tuple[float, float]) -> float
¶
Compute the argument (phase) of a complex number in degrees.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
tuple[float, float]
|
Complex number as (re, im). |
required |
Returns:
| Type | Description |
|---|---|
float
|
Argument in degrees [-180, 180]. |
Usage Example
complex_argument_degrees((1.0, 1.0)) 45.0
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_conjugate(z: tuple[float, float]) -> tuple[float, float]
¶
Compute the complex conjugate.
conj(a + bi) = a - bi
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
tuple[float, float]
|
Complex number as (re, im). |
required |
Returns:
| Type | Description |
|---|---|
tuple[float, float]
|
Conjugate as (re, im). |
Usage Example
complex_conjugate((3.0, 4.0)) (3.0, -4.0)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_cos(z: Tuple[float, float]) -> Tuple[float, float]
¶
Computes cos(z) for complex z.
cos(a+bi) = cos(a)cosh(b) - i·sin(a)sinh(b)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
Tuple[float, float]
|
Complex number (re, im). |
required |
Returns:
| Type | Description |
|---|---|
Tuple[float, float]
|
Result as (re, im). |
Example
re, im = complex_cos((0, 1)) round(re, 6) # cos(i) = cosh(1) 1.543081
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_cosh(z: tuple[float, float]) -> tuple[float, float]
¶
Compute the hyperbolic cosine of a complex number.
cosh(a+bi) = cosh(a)cos(b) + i·sinh(a)sin(b)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
tuple[float, float]
|
Complex number as (re, im). |
required |
Returns:
| Type | Description |
|---|---|
tuple[float, float]
|
Result as (re, im). |
Usage Example
re, im = complex_cosh((1.0, 0.0)) round(re, 4) 1.5431
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_distance(z1: tuple[float, float], z2: tuple[float, float]) -> float
¶
Compute the distance between two complex numbers.
|z1 - z2| = √((a1-a2)² + (b1-b2)²)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z1
|
tuple[float, float]
|
First complex number (re, im). |
required |
z2
|
tuple[float, float]
|
Second complex number (re, im). |
required |
Returns:
| Type | Description |
|---|---|
float
|
Distance. |
Usage Example
complex_distance((0.0, 0.0), (3.0, 4.0)) 5.0
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_divide(a: Tuple[float, float], b: Tuple[float, float]) -> Tuple[float, float]
¶
Divides complex number a by b.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
a
|
Tuple[float, float]
|
Numerator (re, im). |
required |
b
|
Tuple[float, float]
|
Denominator (re, im). |
required |
Returns:
| Type | Description |
|---|---|
Tuple[float, float]
|
Quotient as (re, im). |
Raises:
| Type | Description |
|---|---|
ZeroDivisionError
|
If b is zero. |
Example
complex_divide((4, 2), (1, 1)) (3.0, -1.0)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_exp(z: Tuple[float, float]) -> Tuple[float, float]
¶
Computes the complex exponential e^z.
e^(a+bi) = e^a (cos b + i sin b)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
Tuple[float, float]
|
Complex number (re, im). |
required |
Returns:
| Type | Description |
|---|---|
Tuple[float, float]
|
Result as (re, im). |
Example
re, im = complex_exp((0, math.pi)) (round(re, 6), round(im, 6)) (-1.0, 0.0)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_from_polar(r: float, theta: float) -> tuple[float, float]
¶
Create a complex number from polar form.
z = r·(cos θ + i·sin θ)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
r
|
float
|
Modulus. |
required |
theta
|
float
|
Argument in radians. |
required |
Returns:
| Type | Description |
|---|---|
tuple[float, float]
|
Complex number as (re, im). |
Raises:
| Type | Description |
|---|---|
TypeError
|
If arguments are not numeric. |
Usage Example
re, im = complex_from_polar(1.0, 0.0) (round(re, 4), round(im, 4)) (1.0, 0.0)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_lerp(z1: tuple[float, float], z2: tuple[float, float], t: float) -> tuple[float, float]
¶
Linear interpolation between two complex numbers.
z = z1 + t·(z2 - z1)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z1
|
tuple[float, float]
|
Start complex number (re, im). |
required |
z2
|
tuple[float, float]
|
End complex number (re, im). |
required |
t
|
float
|
Interpolation parameter (0 to 1). |
required |
Returns:
| Type | Description |
|---|---|
tuple[float, float]
|
Interpolated complex number as (re, im). |
Raises:
| Type | Description |
|---|---|
TypeError
|
If t is not numeric. |
Usage Example
complex_lerp((0.0, 0.0), (4.0, 6.0), 0.5) (2.0, 3.0)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_ln(z: Tuple[float, float]) -> Tuple[float, float]
¶
Computes the principal complex logarithm ln(z).
ln(z) = ln|z| + i·arg(z)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
Tuple[float, float]
|
Complex number (re, im). Must not be (0, 0). |
required |
Returns:
| Type | Description |
|---|---|
Tuple[float, float]
|
Result as (re, im). |
Raises:
| Type | Description |
|---|---|
ValueError
|
If z is zero. |
Example
re, im = complex_ln((-1, 0)) (round(re, 6), round(im, 6)) (0.0, 3.141593)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_log(z: tuple[float, float]) -> tuple[float, float]
¶
Compute the principal natural logarithm of a complex number.
ln(z) = ln|z| + i·arg(z)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
tuple[float, float]
|
Complex number as (re, im). |
required |
Returns:
| Type | Description |
|---|---|
tuple[float, float]
|
Result as (re, im). |
Raises:
| Type | Description |
|---|---|
ValueError
|
If z is zero. |
Usage Example
re, im = complex_log((1.0, 0.0)) (round(re, 4), round(im, 4)) (0.0, 0.0)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_midpoint(z1: tuple[float, float], z2: tuple[float, float]) -> tuple[float, float]
¶
Compute the midpoint between two complex numbers.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z1
|
tuple[float, float]
|
First complex number (re, im). |
required |
z2
|
tuple[float, float]
|
Second complex number (re, im). |
required |
Returns:
| Type | Description |
|---|---|
tuple[float, float]
|
Midpoint as (re, im). |
Usage Example
complex_midpoint((0.0, 0.0), (4.0, 6.0)) (2.0, 3.0)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_modulus(z: Tuple[float, float]) -> float
¶
Computes the modulus (absolute value) of a complex number.
|z| = sqrt(re² + im²)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
Tuple[float, float]
|
Complex number (re, im). |
required |
Returns:
| Type | Description |
|---|---|
float
|
Modulus |z|. |
Example
complex_modulus((3, 4)) 5.0
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_multiply(a: Tuple[float, float], b: Tuple[float, float]) -> Tuple[float, float]
¶
Multiplies two complex numbers.
(a+bi)(c+di) = (ac-bd) + (ad+bc)i
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
a
|
Tuple[float, float]
|
First complex number (re, im). |
required |
b
|
Tuple[float, float]
|
Second complex number (re, im). |
required |
Returns:
| Type | Description |
|---|---|
Tuple[float, float]
|
Product as (re, im). |
Example
complex_multiply((1, 2), (3, 4)) (-5, 10)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_nth_root(z: tuple[float, float], n: int, k: int = 0) -> tuple[float, float]
¶
Compute the k-th n-th root of a complex number.
z^(1/n) = |z|^(1/n) · e^(i(arg(z) + 2πk)/n)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
tuple[float, float]
|
Complex number as (re, im). |
required |
n
|
int
|
Root degree (≥ 1). |
required |
k
|
int
|
Which root (0 to n-1, default 0 for principal root). |
0
|
Returns:
| Type | Description |
|---|---|
tuple[float, float]
|
k-th n-th root as (re, im). |
Raises:
| Type | Description |
|---|---|
TypeError
|
If n or k is not int. |
ValueError
|
If n < 1 or z is zero. |
Usage Example
re, im = complex_nth_root((1.0, 0.0), 3) (round(re, 4), round(im, 4)) (1.0, 0.0)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_polar_form(z: tuple[float, float]) -> tuple[float, float]
¶
Convert a complex number to polar form (modulus, argument).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
tuple[float, float]
|
Complex number as (re, im). |
required |
Returns:
| Type | Description |
|---|---|
tuple[float, float]
|
(modulus, argument) where argument is in radians [-π, π]. |
Usage Example
complex_polar_form((1.0, 1.0)) (1.4142135623730951, 0.7853981633974483)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_power(z: Tuple[float, float], w: Tuple[float, float]) -> Tuple[float, float]
¶
Computes z^w for complex z and w via z^w = e^(w·ln(z)).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
Tuple[float, float]
|
Base complex number (re, im). Must not be (0, 0). |
required |
w
|
Tuple[float, float]
|
Exponent complex number (re, im). |
required |
Returns:
| Type | Description |
|---|---|
Tuple[float, float]
|
Result as (re, im). |
Raises:
| Type | Description |
|---|---|
ValueError
|
If z is zero. |
Example
re, im = complex_power((0, 1), (0, 1)) # i^i = e^(-π/2) round(re, 6) 0.207880
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_reciprocal(z: tuple[float, float]) -> tuple[float, float]
¶
Compute the reciprocal (multiplicative inverse) of a complex number.
1/(a+bi) = (a-bi)/(a²+b²)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
tuple[float, float]
|
Complex number as (re, im). |
required |
Returns:
| Type | Description |
|---|---|
tuple[float, float]
|
Reciprocal as (re, im). |
Raises:
| Type | Description |
|---|---|
ValueError
|
If z is zero. |
Usage Example
complex_reciprocal((2.0, 0.0)) (0.5, -0.0)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_rotate(z: tuple[float, float], angle: float) -> tuple[float, float]
¶
Rotate a complex number by an angle.
z' = z · e^(iθ)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
tuple[float, float]
|
Complex number as (re, im). |
required |
angle
|
float
|
Rotation angle in radians. |
required |
Returns:
| Type | Description |
|---|---|
tuple[float, float]
|
Rotated complex number as (re, im). |
Raises:
| Type | Description |
|---|---|
TypeError
|
If angle is not numeric. |
Usage Example
re, im = complex_rotate((1.0, 0.0), math.pi / 2) (round(re, 4), round(im, 4)) (0.0, 1.0)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_sin(z: Tuple[float, float]) -> Tuple[float, float]
¶
Computes sin(z) for complex z.
sin(a+bi) = sin(a)cosh(b) + i·cos(a)sinh(b)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
Tuple[float, float]
|
Complex number (re, im). |
required |
Returns:
| Type | Description |
|---|---|
Tuple[float, float]
|
Result as (re, im). |
Example
re, im = complex_sin((0, 1)) round(im, 6) # sin(i) = i·sinh(1) 1.175201
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_sinh(z: tuple[float, float]) -> tuple[float, float]
¶
Compute the hyperbolic sine of a complex number.
sinh(a+bi) = sinh(a)cos(b) + i·cosh(a)sin(b)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
tuple[float, float]
|
Complex number as (re, im). |
required |
Returns:
| Type | Description |
|---|---|
tuple[float, float]
|
Result as (re, im). |
Usage Example
re, im = complex_sinh((1.0, 0.0)) round(re, 4) 1.1752
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_sqrt(z: tuple[float, float]) -> tuple[float, float]
¶
Compute the principal square root of a complex number.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
tuple[float, float]
|
Complex number as (re, im). |
required |
Returns:
| Type | Description |
|---|---|
tuple[float, float]
|
Principal square root as (re, im). |
Usage Example
re, im = complex_sqrt((-1.0, 0.0)) (round(re, 4), round(im, 4)) (0.0, 1.0)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_subtract(a: Tuple[float, float], b: Tuple[float, float]) -> Tuple[float, float]
¶
Subtracts complex number b from a.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
a
|
Tuple[float, float]
|
First complex number (re, im). |
required |
b
|
Tuple[float, float]
|
Second complex number (re, im). |
required |
Returns:
| Type | Description |
|---|---|
Tuple[float, float]
|
Difference as (re, im). |
Example
complex_subtract((5, 3), (2, 1)) (3, 2)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_tan(z: tuple[float, float]) -> tuple[float, float]
¶
Compute the tangent of a complex number.
tan(z) = sin(z) / cos(z)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
tuple[float, float]
|
Complex number as (re, im). |
required |
Returns:
| Type | Description |
|---|---|
tuple[float, float]
|
Result as (re, im). |
Raises:
| Type | Description |
|---|---|
TypeError
|
If z is not a tuple of two numerics. |
Usage Example
re, im = complex_tan((1.0, 0.0)) round(re, 4) 1.5574
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
complex_to_polar(z: Tuple[float, float]) -> Tuple[float, float]
¶
Converts a complex number from rectangular to polar form.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
Tuple[float, float]
|
Complex number (re, im). |
required |
Returns:
| Type | Description |
|---|---|
Tuple[float, float]
|
Tuple (r, theta) where r is modulus and theta is argument in radians. |
Example
r, theta = complex_to_polar((1, 1)) (round(r, 6), round(theta, 6)) (1.414214, 0.785398)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
de_moivre(r: float, theta: float, n: int) -> Tuple[float, float]
¶
Applies De Moivre's theorem: (r e^(iθ))^n = r^n e^(i·n·θ).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
r
|
float
|
Modulus of the complex number. |
required |
theta
|
float
|
Argument in radians. |
required |
n
|
int
|
Integer exponent. |
required |
Returns:
| Type | Description |
|---|---|
Tuple[float, float]
|
Result as (re, im). |
Example
re, im = de_moivre(1, math.pi / 4, 2) (round(re, 6), round(im, 6)) (0.0, 1.0)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
euler_formula(theta: float) -> Tuple[float, float]
¶
Evaluates Euler's formula e^(iθ) = cos θ + i sin θ.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
theta
|
float
|
Angle in radians. |
required |
Returns:
| Type | Description |
|---|---|
Tuple[float, float]
|
Complex number as (re, im). |
Example
re, im = euler_formula(math.pi) (round(re, 6), round(im, 6)) (-1.0, 0.0)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
nth_roots_complex(z: Tuple[float, float], n: int) -> List[Tuple[float, float]]
¶
Computes all n-th roots of a complex number z.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
z
|
Tuple[float, float]
|
Complex number (re, im). |
required |
n
|
int
|
Root degree (n >= 1). |
required |
Returns:
| Type | Description |
|---|---|
List[Tuple[float, float]]
|
List of n roots as (re, im) tuples. |
Example
roots = nth_roots_complex((0, 1), 2) len(roots) 2
Complexity: O(n)
Source code in shortfx/fxNumeric/complex_functions.py
polar_to_complex(r: float, theta: float) -> Tuple[float, float]
¶
Converts a complex number from polar to rectangular form.
z = r(cos θ + i sin θ)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
r
|
float
|
Modulus (r >= 0). |
required |
theta
|
float
|
Argument in radians. |
required |
Returns:
| Type | Description |
|---|---|
Tuple[float, float]
|
Complex number as (re, im). |
Example
re, im = polar_to_complex(2, math.pi / 4) (round(re, 6), round(im, 6)) (1.414214, 1.414214)
Complexity: O(1)
Source code in shortfx/fxNumeric/complex_functions.py
roots_of_unity(n: int) -> List[Tuple[float, float]]
¶
Computes the n-th roots of unity: e^(2πik/n) for k = 0, 1, ..., n-1.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
n
|
int
|
Number of roots (n >= 1). |
required |
Returns:
| Type | Description |
|---|---|
List[Tuple[float, float]]
|
List of (re, im) tuples. |
Example
roots = roots_of_unity(4) [(round(r, 6), round(i, 6)) for r, i in roots][(1.0, 0.0), (0.0, 1.0), (-1.0, 0.0), (-0.0, -1.0)]
Complexity: O(n)