我希望 sympy 能够在任何时候看到以下形式的表达式时进行替换
因子1 * exp^{ - 因子2 * x^2}
使用表达式 expr1。
在这里,我希望 sympy 能够在每次 Factor1 和 Factor 2 不包含符号 x 时识别该模式。
问题是,只有我知道因子 1 和因子 2 的确切形式,我现在才能进行替换工作。
一般我该怎么做?
例如,在下面的代码中,我得到了 -b + c 的预期输出
import sympy as sp
a, b, c, q = sp.symbols('a b c q')
f= (a)*sp.exp(c *q) - b
y = sp.Wild('y', properties=[lambda x: isinstance(x, sp.Symbol)])
x = sp.Wild('x', properties=[lambda x: isinstance(x, sp.Symbol)])
f.replace(x*sp.exp(y * q), c)
但是,在下面稍作修改的代码中,替换不起作用
import sympy as sp
a, b, c, q = sp.symbols('a b c q')
f= (a/b)*sp.exp(c *q) - b
y = sp.Wild('y', properties=[lambda x: isinstance(x, sp.Symbol)])
x = sp.Wild('x', properties=[lambda x: isinstance(x, sp.Symbol)])
ans = f.replace(x*sp.exp(y * q), c)
print(ans)
输出:aexp(cq)/b - b
我通常通过明确定义我要查找的内容(而不是使用 Wild)来进行这些更改:
def hit(e,q):
if not e.is_Mul: return False
i, ex = e.as_independent(q)
if not isinstance(ex, exp): return False
i, d = ex.args[0].as_independent(q,as_Add=False)
if d == q:
return True
您说过您对
x**2
中的 exp
表达式感兴趣,但在您的示例中使用了 q
。所以我使用了一个可以指定的参数q
。
>>> from sympy.abc import *
>>> from sympy import *
# your code
>>> f.replace(lambda x:hit(x,q), lambda x:y)
-b + y
>>> ((a/b)*exp(c/d*x**2)+e).replace(lambda i: hit(i,x**2), lambda i: A)
A + e
`