Sympy solve()处理复数问题:求解|sqrt(x)|<1遗漏负区间
解决Sympy求解复数模不等式遗漏负区间的问题
问题原因
默认创建的Symbol("x")属于实数域,Sympy会自动排除x<0的情况——因为实数域内负数的平方根无意义,所以solve仅返回非负区间的解0≤x<1,遗漏了复数域中x∈(-1,0)的有效解。
解决方案
方案1:将x定义为复数变量
创建符号时指定complex=True,让Sympy在复数域内处理问题:
from sympy import * x = Symbol("x", complex=True) expr = sqrt(x) print(solve(abs(expr) < 1, x))
运行结果:(-1 < x) & (x < 1),包含了负区间的解。
方案2:手动拆分实数/复数场景求解
针对x的正负区间分别推导模的条件,再合并结果:
from sympy import * x = Symbol("x") # 非负区间:直接求解|sqrt(x)| < 1 sol_pos = solve((abs(sqrt(x)) < 1) & (x >= 0), x) # 负区间:sqrt(x)是纯虚数,模为sqrt(-x),求解sqrt(-x) < 1且x<0 sol_neg = solve((sqrt(-x) < 1) & (x < 0), x) # 合并两个区间的解 total_sol = sol_pos | sol_neg print(total_sol)
运行结果同样为(-1 < x) & (x < 1)。
内容的提问来源于stack exchange,提问作者reloh100
相关产品推荐
相关产品推荐

