gpt4 book ai didi

python - 在 Sympy 中,如何定义像 f(x) 这样的通用函数,以便 sympy.diff(f(x), x) 返回 f' 而不是 0。

转载 作者:行者123 更新时间:2023-12-02 03:23:52 25 4
gpt4 key购买 nike

我正在尝试对该函数求导

x, y, z, P, k, q = sp.symbols('x y z P k q')
expr = sp.exp(-sp.I*(P+k/(2*q)*(x**2 + y**2)))

其中 P 和 q 是 z 的函数。如何定义 P 和 q 以使 sp.diff(P, z) 返回 P' 而不是 0?

最佳答案

从你写的内容来看,sympy 无法知道 Pqz 的函数,可以吗?因此它将它们视为常量 - 就像除 z 之外的所有其他变量一样。您的表达式根本没有提及 z,因此它都是一个常量表达式 - 并且常量的派生是 0,没有异常(exception)。

确保sympy知道Pqz的函数。显然,这些功能是什么很重要 - 你不能将它们留空。平方与平方根的微分不同。如果您不知道,sympy 将尽力而为:

x, y, z, k = sp.symbols('x y z k')
P = sp.Function('P')
q = sp.Function('q')
expr = sp.exp(-sp.I*(P(z)+k/(2*q(z))*(x**2 + y**2)))
sp.diff(expr, z)
# => -I*(-k*(x**2 + y**2)*Derivative(q(z), z)/(2*q(z)**2) + Derivative(P(z), z))*
# exp(-I*(k*(x**2 + y**2)/(2*q(z)) + P(z)))

但如果你知道,它可以准确地计算出来:

x, y, z, k = sp.symbols('x y z k')
P = sp.Lambda(z, z * z)
q = sp.Lambda(z, sp.sqrt(z))
expr = sp.exp(-sp.I*(P(z)+k/(2*q(z))*(x**2 + y**2)))
sp.diff(expr, z)
# => -I*(-k*(x**2 + y**2)/(4*z**(3/2)) + 2*z)*
# exp(-I*(k*(x**2 + y**2)/(2*sqrt(z)) + z**2))

同样,我认为您无法区分 P,但这有效:

sp.diff(P(z), z)
# => 2*z

关于python - 在 Sympy 中,如何定义像 f(x) 这样的通用函数,以便 sympy.diff(f(x), x) 返回 f' 而不是 0。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54027321/

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