如何为SymPy变量t设置0到π的范围以简化sqrt(sin(t)**2)?
在SymPy中限定变量范围以简化表达式
当你运行以下代码时:
from sympy import sin, sqrt, symbols t = symbols('t') sqrt(sin(t)**2)
SymPy会返回sqrt(sin(t)**2)而非sin(t),这是因为它默认不知道变量t的取值范围。要让SymPy识别t处于0到π之间,从而完成简化,有两种实用方法:
方法一:定义变量时直接指定范围
定义t时,通过domain参数传入区间范围,明确限定t的取值:
from sympy import sin, sqrt, symbols, Interval, pi # 定义t为0到π闭区间内的实数 t = symbols('t', domain=Interval(0, pi)) expr = sqrt(sin(t)**2) # 执行简化 print(expr.simplify()) # 输出:sin(t)
方法二:简化时传入范围假设
如果t已提前定义,可在调用simplify函数时,通过assumptions参数补充t的范围条件:
from sympy import sin, sqrt, symbols, simplify, Interval, pi t = symbols('t') expr = sqrt(sin(t)**2) # 简化时指定t属于0到π区间 simplified_expr = simplify(expr, assumptions={t: Interval(0, pi)}) print(simplified_expr) # 输出:sin(t)
核心原因是:在0到π的区间内,sin(t)的值始终非负,因此sqrt(sin(t)**2)等价于sin(t),SymPy在明确这个范围后就能自动完成简化。
内容的提问来源于stack exchange,提问作者Diego Andres Alvarez Marin
相关产品推荐
相关产品推荐

