gpt4 book ai didi

sympy - 在 Sympy 中定义符号的范围

转载 作者:行者123 更新时间:2023-12-02 00:40:31 40 4
gpt4 key购买 nike

在 Sympy 中,可以定义符号可能采用的值的约束

x = symbols('x', real=True)

是否可以说一个符号只能在一定范围内取值,比如-1 < x < 1 ?我对此感兴趣的原因是因为我试图让 sympy 自动简化如下所示的表达式

expr = sqrt(1+x) * sqrt((1-x)*(1+x)) / sqrt(1-x)

正在运行simplify(expr)不会产生任何简化,而当-1<x<1时简化的结果应该是 1+x 。我如何获得 sympy 来简化上面的表达式?

最佳答案

虽然单个符号不能满足该假设,但表达式可以。让我们定义一个具有所需范围的表达式:

>>> p = Symbol('p', positive=True)
>>> neg1to1 = (p - 1)/(p + 1)

现在用该值替换 x 并简化

>>> asp = expr.subs(x, neg1to1).simplify(); asp
2*p/(p + 1)

现在从 x 与 neg1to1 之间的关系恢复 x:

>>> p_as_x = solve(neg1to1 - x, p)[0]
>>> asp.subs(p, p_as_x).simplify()
x + 1

您可以将其转换为一个函数,以允许 x 的任何范围:

>>> def simplify_assuming_range(expr, x, lo, hi):
... from sympy import Dummy, solve
... p = Dummy(positive=True)
... xr = (p - 1)/(p + 1)*(hi - lo) + lo
... rx = solve(xr - x, p)[0]
... return expr.subs(x, xr).simplify().subs(p, rx).simplify()
...
>>> simplify_assuming_range(expr,x,-1,1)
x + 1

关于sympy - 在 Sympy 中定义符号的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33027352/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com