首页 > 解决方案 > sympy 中的 global_assumptions 和 sqrt 简化

问题描述

我正在简化表达式,例如sqrt(a**2*b**2)积极ab希望得到a*b. 设置假设的所谓“旧式”似乎可行。但是在相当简单的情况下,global_assumptions对象以及技术的使用都失败了。assuming出于某种原因,我更喜欢“新风格”。任何想法,我做错了什么?

from sympy import *
from sympy.assumptions.assume import global_assumptions

x = Symbol('x', positive=True)
f = Function('f', positive=True)

y = Symbol('y')
g = Function('g')
global_assumptions.add(Q.positive(y), Q.positive(g(y)))

print(refine(sqrt(x**2))) #ok
print(refine(sqrt(y**2))) #ok
print(refine(sqrt(f(x)**2))) #ok
print(refine(sqrt(g(y)**2))) #ok

print(refine(sqrt(x**2*f(x)**2))) #ok
print(refine(sqrt(y**2*f(x)**2))) #ok
print(refine(sqrt(x**2*g(y)**2))) #ok
print(refine(sqrt(y**2*g(y)**2))) # doesn't work - no simplification

标签: pythonsympysimplifysqrt

解决方案


推荐阅读