cmath 是 Python 专用于复数计算的标准库,功能与 math 模块类似,但支持复数作为参数与结果。当需要处理复数时,就应使用 cmath 模块。

常见应用场景:

(1)电路计算中的复阻抗。

(2)频域分析、信号处理。

(3)复平面绘图(如曼德布罗集)。

(4)高等数学中涉及复数的函数(如 log(-1)、sqrt(-3))。

◆ ◆

核心概念

1、cmath 与 math 模块类似,提供三角函数、对数、指数、幂运算等数学函数,但都适用于复数。

2、输入参数和返回值都是复数类型(complex)。

3、默认使用弧度制(角度请先转换)。

4、提供极坐标和直角坐标系之间的转换函数。

◆ ◆

应用举例

例 1:计算复数的平方根

import cmath

z = -4
result = cmath.sqrt(z)  # sqrt(-4) 会返回复数结果
print("√-4 =", result)  # 输出:2j

例 2:将复数转换为极坐标

import cmath

z = 1 + 1j
r, theta = cmath.polar(z)  # 极坐标:模长 r,角度 theta(弧度)
print("模长:", r)
print("幅角:", theta)

例 3:从极坐标生成复数

import cmath
z = cmath.rect(2, cmath.pi/4)  # 2∠45° = √2 + √2j
print("复数:", z)

例 4:验证欧拉公式 e^(iπ) + 1 = 0

import cmath

z = cmath.exp(cmath.pi * 1j)  # e^(iπ)
print("e^(iπ) =", z)           # ≈ -1 + 0j
print("e^(iπ) + 1 =", z + 1)   # ≈ 0j

欧拉公式是复数与指数函数的重要连接桥梁。该示例输出 0j,即复平面上的原点。

例 5:复数乘方运算

import cmath

z = 1 + 1j
result = z ** 3  # 复数的立方
print("(1 + i)^3 =", result)

Python 原生支持复数的幂运算,但使用 cmath 保证更高的数学兼容性与可解释性。

◆ ◆

常用函数速览

cmath.acos(z) / asin(z) / atan(z)

复数的反余弦、反正弦、反正切函数。

参数:复数 z

返回:复数

cmath.cos(z) / sin(z) / tan(z)

三角函数(支持复数)。

参数:复数 z

返回:复数

cmath.exp(z)

e 的 z 次幂。

参数:复数 z

返回:复数

cmath.isclose(a, b, rel_tol=1e-9, abs_tol=0.0)

判断两个复数是否近似相等。

参数:a, b 为复数;rel_tol 为相对容差;abs_tol 为绝对容差

返回:布尔值

cmath.log(z, base=cmath.e)

返回复数的对数(自然对数或指定底)。

参数:复数 z,底数 base

返回:复数

示例:cmath.log(-1) = πj

cmath.phase(z)

返回复数的幅角(极角),单位为弧度。

参数:复数 z

返回:浮点数(弧度)

cmath.polar(z)

将复数转为极坐标形式 (r, θ)。

返回:元组(模长 r,角度 θ)

cmath.rect(r, θ)

从极坐标还原复数 r∠θ。

参数:r 为模长,θ 为角度(弧度)

返回:复数

cmath.sqrt(z)

返回复数 z 的平方根

参数:复数

返回:复数

内置常量

cmath.pi

圆周率,值约为 3.141592653589793,用于角度与弧度之间的转换。

cmath.e

自然对数的底数,值约为 2.718281828459045。

cmath.tau

圆周常数 τ = 2π,值约为 6.283185307179586,常用于完整周期、频域计算中。

cmath.inf

表示正无穷大(infinity),可用于极限比较或避免除零错误。

cmath.nan

表示“不是一个数”(Not a Number)。

通常由非法操作(如 0/0、sqrt(-∞))产生。

示例:

import cmath

z = cmath.sqrt(cmath.inf + 1j)   # √(∞ + i)
print(z)

z2 = cmath.log(-1) / cmath.pi    # = iπ / π = i
print(z2)

◆ ◆

补充说明

1、当需要计算涉及负数开方、复数三角函数、对数等运算时,应使用 cmath,避免 math domain error。

2、cmath 中所有运算都安全地返回复数,即使结果是实数,也会以复数表示,如 1+0j。

3、对于科学、工程类任务(尤其是电子学、信号处理),cmath 是基础工具。

点赞有美意,赞赏是鼓励