Sympy无法正确处理实数平方根的共轭运算问题求助
SymPy实数符号共轭乘积化简问题
问题场景
已将符号delta声明为实数,但计算conjugate(sqrt(1/delta)) * sqrt(1/delta)时,无法得到预期的1/delta,调用simplify()也无法达成目标。
复现代码:
import sympy as sp delta = sp.Symbol('delta', real=True) f = sp.sqrt(1/delta) prod = sp.conjugate(f)*f prod.subs(delta,delta)
解决方案
SymPy默认不会自动推断实数开方的共轭等于自身,除非明确限定符号为正实数,有两种处理方式:
- 修改符号声明,添加正实数约束
import sympy as sp delta = sp.Symbol('delta', real=True, positive=True) f = sp.sqrt(1/delta) prod = sp.conjugate(f)*f print(prod.simplify()) # 输出: 1/delta
- 使用
refine()明确指定符号为正
无需修改原符号声明,通过refine()结合Q.positive告知SymPy符号的正性:
import sympy as sp from sympy import Q, refine delta = sp.Symbol('delta', real=True) f = sp.sqrt(1/delta) prod = sp.conjugate(f)*f refined_prod = refine(prod, Q.positive(delta)) print(refined_prod) # 输出: 1/delta
内容的提问来源于stack exchange,提问作者Dylan VanAllen
相关产品推荐
相关产品推荐

