You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取SymPy表达式的实部?实部分离异常问题

SymPy中无法正确提取表达式实部的解决方法

问题出在你定义的符号a和b默认属于复数域,SymPy无法确定它们是否存在虚部,因此调用re()时会展开成包含re()和im()的通用形式,而非你预期的实数项。

解决方法:定义符号时指定实数属性

在创建符号时添加real=True参数,明确告知SymPy a和b是实数:

from sympy import *
# 定义a、b为实符号
a, b = symbols('a b', real=True)
z1 = a + b*I
z2 = expand(z1**3)  # expand已足够,无需额外simplify
print(z2)
# 提取实部
print(re(z2))

执行后输出:

a**3 + 3*I*a**2*b - 3*a*b**2 - I*b**3
a**3 - 3*a*b**2

原理说明

SymPy的符号默认属于复数空间,当未明确实数属性时,re()函数会对每个符号的实部、虚部分别计算,得到最通用的复数实部表达式。而当指定real=True后,SymPy会认定a和b的虚部为0,实部就是它们本身,此时re()可以直接筛选出表达式中的实数项。

补充:事后添加实数假设

如果已经定义了符号,也可以通过assume()补充实数假设:

a, b = symbols('a b')
assume(a, real=True)
assume(b, real=True)

z1 = a + b*I
z2 = expand(z1**3)
print(re(z2))  # 同样得到a**3 - 3*a*b**2

内容的提问来源于stack exchange,提问作者gpv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 08:50:00