pin_drop当前位置:知识文库 ❯ 图文

Python复数类型complex详解

复数(Complex)是Python内置的数字类型之一,用于表示形如a + bj的复数,其中a为实部,b为虚部,j为虚数单位(满足j² = -1)。Python是少数将复数作为内置数据类型的编程语言之一,这使得它在科学计算和工程领域有着天然的优势。复数在信号处理、电气工程、量子力学等领域有广泛应用。


复数定义

字面量定义

Python使用j(或J)作为虚数单位,而非数学中常用的i

代码示例

c1 = 3 + 4j
c2 = 2j
c3 = -1 - 2j
c4 = 5 + 0j

print(type(c1))
print(c1)
print(c2)
print(c3)
print(c4)

输出:

代码示例

<class 'complex'>
(3+4j)
2j
(-1-2j)
(5+0j)

提示:虚数单位使用j而非i,这是工程学中的惯例。纯虚数写作2j,不能写成j2

使用complex()函数

代码示例

c1 = complex(3, 4)
c2 = complex(2)
c3 = complex(0, 2)
c4 = complex('3+4j')

print(c1)
print(c2)
print(c3)
print(c4)

输出:

代码示例

(3+4j)
(2+0j)
2j
(3+4j)

提示:使用字符串构造复数时,字符串中不能包含空格,否则会报错。例如complex('3 + 4j')是错误的。


实部与虚部

复数由实部和虚部组成,可以通过.real.imag属性访问:

代码示例

c = 3 + 4j

print(c.real)
print(c.imag)
print(type(c.real))
print(type(c.imag))

输出:

代码示例

3.0
4.0
<class 'float'>
<class 'float'>

提示:实部和虚部都是浮点数类型,即使定义时使用的是整数。

共轭复数

使用.conjugate()方法获取共轭复数:

代码示例

c = 3 + 4j
print(c.conjugate())

输出:

代码示例

(3-4j)

复数的模

使用abs()函数计算复数的模(绝对值):

代码示例

c = 3 + 4j
print(abs(c))

输出:

代码示例

5.0

复数的模计算公式为:|a + bj| = √(a² + b²)


复数运算

基本算术运算

代码示例

a = 3 + 4j
b = 1 + 2j

print(a + b)
print(a - b)
print(a * b)
print(a / b)

输出:

代码示例

(4+6j)
(2+2j)
(-5+10j)
(2.2-0.4j)

运算详解

乘法运算的推导:

代码示例

(3 + 4j) * (1 + 2j)
= 3*1 + 3*2j + 4j*1 + 4j*2j
= 3 + 6j + 4j + 8j²
= 3 + 10j + 8*(-1)
= 3 + 10j - 8
= -5 + 10j

复数不支持整除和取模

代码示例

c = 3 + 4j
# c // 2  # TypeError: can't take floor of complex number.
# c % 2   # TypeError: can't mod complex numbers.

提示:复数不支持//(整除)和%(取模)运算,也不支持比较运算(<><=>=),但支持==!=


cmath模块

cmath模块是math模块的复数版本,提供了复数域的数学函数:

代码示例

import cmath

c = 3 + 4j

print(cmath.phase(c))
print(cmath.polar(c))
print(cmath.rect(5, 0.9272952180016122))
print(cmath.sqrt(-1))
print(cmath.exp(1j * cmath.pi))

输出:

代码示例

0.9272952180016122
(5.0, 0.9272952180016122)
(3+4j)
1j
(6.123233995736766e-17+1.2246467991473532e-16j)

cmath常用函数

函数 功能 示例
cmath.phase() 计算辐角(相位角) cmath.phase(3+4j) → 0.927
cmath.polar() 转换为极坐标(r, φ) cmath.polar(3+4j) → (5.0, 0.927)
cmath.rect() 极坐标转复数 cmath.rect(5, 0.927) → (3+4j)
cmath.sqrt() 复数平方根 cmath.sqrt(-1) → 1j
cmath.exp() 复数指数 cmath.exp(1j*π) ≈ -1
cmath.log() 复数对数 cmath.log(1j)
cmath.sin() 复数正弦 cmath.sin(1j)
cmath.cos() 复数余弦 cmath.cos(1j)

代码示例

示例1:复数运算器

代码示例

def complex_calculator(a_real, a_imag, b_real, b_imag, op):
    a = complex(a_real, a_imag)
    b = complex(b_real, b_imag)

    if op == '+':
        return a + b
    elif op == '-':
        return a - b
    elif op == '*':
        return a * b
    elif op == '/':
        return a / b
    else:
        return None

result = complex_calculator(3, 4, 1, 2, '*')
print(f"(3+4j) * (1+2j) = {result}")

输出:

代码示例

(3+4j) * (1+2j) = (-5+10j)

示例2:极坐标与直角坐标转换

代码示例

import cmath

c = 1 + 1j

r, phi = cmath.polar(c)
print(f"直角坐标: {c}")
print(f"极坐标: 模={r:.4f}, 辐角={phi:.4f}弧度")
print(f"辐角(角度): {phi * 180 / cmath.pi:.4f}°")

recovered = cmath.rect(r, phi)
print(f"还原为直角坐标: {recovered}")

输出:

代码示例

直角坐标: (1+1j)
极坐标: 模=1.4142, 辐角=0.7854弧度
辐角(角度): 45.0000°
还原为直角坐标: (1.0000000000000002+1j)

注意事项

  • 虚数单位是jJ,不是i

  • 纯虚数必须写成2j,不能写成j2,单独的j会被当作变量名。

  • 复数的实部和虚部都是浮点数类型。

  • 复数不支持整除//、取模%和大小比较运算。

  • 使用complex()函数从字符串创建时,字符串中不能有空格。

  • math模块的函数不支持复数参数,需使用cmath模块。

  • 复数支持==!=比较,但不支持<>等大小比较。


小结

本节介绍了Python复数类型的核心知识:

  • 复数使用a + bj格式定义,虚数单位为j

  • complex()函数可以创建复数

  • .real.imag属性分别获取实部和虚部

  • .conjugate()方法获取共轭复数

  • abs()函数计算复数的模

  • cmath模块提供了复数域的数学函数

  • 复数不支持整除、取模和大小比较运算


练习题

练习1

编写一个函数,接受一个复数,返回它的模、辐角(角度制)和共轭复数。

提示:使用abs()cmath.phase().conjugate(),角度转换公式为弧度 * 180 / π

练习2

验证欧拉公式:e^(iπ) + 1 = 0。使用cmath.exp()计算cmath.exp(1j * cmath.pi),观察结果是否接近0。

提示:由于浮点数精度问题,结果不会精确为0,但虚部和实部都应非常接近0。


常见问题

为什么Python用j而不是i表示虚数单位?

这是工程学和电子领域的惯例。在电气工程中,i通常表示电流,所以虚数单位用j表示。Python继承了这一惯例。

复数在哪些实际场景中有应用?

复数广泛应用于信号处理(傅里叶变换)、电气工程(交流电路分析)、量子力学、图像处理、流体力学等领域。Python的内置复数支持使其成为科学计算的理想选择。

cmath和math模块有什么区别?

math模块只支持实数运算,对复数会报错;cmath模块是math的复数版本,支持复数域的数学运算,如复数平方根、复数三角函数等。

如何获取复数的模和相位角?

使用abs()函数获取复数的模,使用cmath.phase()获取相位角(弧度制),使用cmath.polar()可以同时获取模和相位角。

标签: Python 复数 cmath 数据类型 科学计算

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python浮点数float详解 下一篇: Python布尔类型详解

poll相关推荐

作者头像 智能小晨 python

Python类型转换详解

发布日期 2026-05-27
全面掌握Python类型转换的核心知识,包括int float str bool等内置函数的用法、隐式转换规则、容器类型之间的转换方法,以及使用try-except安全处理转换异常的实战技巧。通过丰富的代码示例,帮助你写出更健壮的Python代码。
作者头像 智能小晨 python

Python字符串类型详解

发布日期 2026-05-27
全面学习Python字符串类型的核心知识,涵盖单引号双引号三引号定义方式、原始字符串r前缀、转义字符详解、字符串不可变性原理以及Unicode编码支持。
作者头像 智能小晨 python

Python布尔类型详解

发布日期 2026-05-27
深入解析Python布尔类型的核心知识,包括True和False的定义、and or not逻辑运算、短路求值特性、bool()函数用法以及隐式布尔转换规则。通过丰富的代码示例,帮助你掌握Python布尔类型的实际应用,写出更优雅的条件判断代码。
作者头像 智能小晨 python

Python浮点数float详解

发布日期 2026-05-27
深入讲解Python浮点数float类型的核心概念,包括IEEE 754标准、浮点数精度问题、decimal精确计算模块和math数学函数。帮助你理解0.1+0.2≠0.3的原因并掌握解决方案。