查看: 177|回复: 0

Python复数运算详解:complex函数与cmath模块使用教程

[复制链接]
发表于 半小时前 | 显示全部楼层 |阅读模式
Python中处理复数并不需要额外安装库,内建的complex类型就能完成基本的复数定义与四则运算。本文基于Python交互环境演示实际用法,覆盖complex函数、带j字面量、算术运算、cmath模块、math模块差异以及numpy复数数组操作。

一、创建复数与基本属性

复数可以用complex(real, imag)函数创建,也可以直接使用带后缀j的浮点数字面量。虚数部分不能单独存在,必须与实部一起组成复数,而且虚部必须以j或J结尾。
  1. >>> a = complex(2, 4)
  2. >>> b = 3 - 5j
  3. >>> a
  4. (2+4j)
  5. >>> b
  6. (3-5j)
  7. >>> a.real
  8. 2.0
  9. >>> a.imag
  10. 4.0
  11. >>> a.conjugate()
  12. (2-4j)
复制代码

a.real返回实部,a.imag返回虚部,a.conjugate()返回共轭复数。可以看出,实部和虚部在Python内部都是以浮点数保存的。

二、四则运算与模长计算

Python的复数支持加法、减法、乘法、除法以及abs()求模长,运算结果会保持复数类型,除法结果也会自动计算为最简复数形式:
  1. >>> a + b
  2. (5-1j)
  3. >>> a * b
  4. (26+2j)
  5. >>> a / b
  6. (-0.4117647058823529+0.6470588235294118j)
  7. >>> abs(a)
  8. 4.47213595499958
复制代码

abs()返回的是复数的模,即sqrt(real^2 + imag^2)。

三、使用cmath模块处理复数函数

如果要对复数执行正弦、余弦、指数或平方根等数学运算,需要导入cmath模块,而不是math模块。cmath中的函数接受并返回复数:
  1. >>> import cmath
  2. >>> cmath.sin(a)
  3. (24.83130584894638-11.356612711218174j)
  4. >>> cmath.cos(a)
  5. (-11.36423470640106-24.814651485634187j)
  6. >>> cmath.exp(a)
  7. (-4.829809383269385-5.5920560936409816j)
  8. >>> cmath.sqrt(-1)
  9. 1j
复制代码

cmath.sqrt(-1)会返回复数1j,这是solve实数负数开平方问题的关键方式。

四、math模块与cmath模块的差异

Python的标准数学函数math模块默认不产生复数值,当遇到负数开平方这类需要复数结果的操作时会直接抛出异常:
  1. >>> import math
  2. >>> math.sqrt(-1)
  3. Traceback (most recent call last):
  4.   File "<stdin>", line 1, in <module>
  5. ValueError: math domain error
复制代码

因此在数学计算中如果需要复数结果,必须显式使用cmath模块,或者使用支持复数的第三方库来声明复数类型的运算。

五、numpy中的复数数组支持

Python中大部分与数学相关的模块都能处理复数。使用numpy时,可以直接构造复数数组并对每个元素执行向量化操作:
  1. >>> import numpy as np
  2. >>> a = np.array([2+3j, 4+5j, 6-7j, 8+9j])
  3. >>> a
  4. array([ 2.+3.j, 4.+5.j, 6.-7.j, 8.+9.j])
  5. >>> a + 2
  6. array([ 4.+3.j, 6.+5.j, 8.-7.j, 10.+9.j])
  7. >>> np.sin(a)
  8. array([ 9.15449915 -4.16890696j, -56.16227422 -48.50245524j,
  9.        -153.20827755-526.47684926j, 4008.42651446-589.49948373j])
复制代码

numpy的数组广播机制对复数同样有效,a + 2会把整数2自动转为实数部分并加到每个元素的实部上。

六、复数语法要点与对象属性

复数的表示形式可以用下面的规则概括:

1. 复数由实部和虚部构成,形式为real + imagj,虚部后缀必须是j或J。
2. 虚数不能单独存在,它总是和实部一起构成复数,即使实部为0.0也会显示。
3. 实部和虚部都以浮点数形式存储。
4. 复数对象包含real、imag属性用于获取实部和虚部,conjugate()方法用于返回共轭复数。

实际开发中,如果涉及信号处理、图像计算或科学计算,Python的复数对象配合cmath和numpy能很大程度简化代码,避免自己实现复数运算逻辑。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-9-5 13:58 , Processed in 0.022068 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部