能否使用SymPy库化简数学表达式 例如将sqrt(x²)化简为abs(x)?
SymPy实现sqrt(x²)化简为abs(x)的解决方案
SymPy默认将未指定定义域的符号视为复数域变量,复数域下sqrt(x²)不存在等价于abs(x)的通用规则,因此直接调用simplify()方法不会触发该化简操作,可通过以下两种方式实现需求:
- 方式1:为符号变量指定实数域属性
代码示例:
若额外指定x为非负实数,还可直接化简为x:from sympy import symbols, sqrt, simplify # 定义x为实数类型 x = symbols('x', real=True) res = simplify(sqrt(x**2)) print(res) # 输出为Abs(x)x = symbols('x', nonnegative=True) res = simplify(sqrt(x**2)) print(res) # 输出为x - 方式2:使用refine函数临时指定约束条件
如果不想全局修改符号变量的定义域属性,可以通过refine()函数临时传入约束规则实现化简:from sympy import symbols, sqrt, refine, Q x = symbols('x') # 未指定定义域 res = refine(sqrt(x**2), Q.real(x)) print(res) # 输出为Abs(x)
内容的提问来源于stack exchange,提问作者danil4ik
相关产品推荐
相关产品推荐

