python - 在 Sympy 中,如何定义像 f(x) 这样的通用函数,以便 sympy.diff(f(x), x) 返回 f' 而不是 0。
问题描述
我正在尝试采用此功能的衍生物
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 无法知道P
并且q
是 的函数z
,可以吗?因此,它将它们视为常量——就像所有其他变量一样,除了z
. 你的表达式根本没有提到z
,所以它都是一个常量表达式 - 一个常量的推导是0
,没有例外。
确保sympy
知道P
并且q
是 的函数z
。显然,这些功能是什么很重要——你不能把它们留空。平方不同于平方根。如果您不知道,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
推荐阅读
- java - 为什么在打印奇偶条件后,我没有通过扫描仪从字符串变量“str”获取输入?
- reactjs - 通过 React-Router v5 Link 传递对象
- amazon-web-services - AWS Systems Manager Explorer 数据通过 CLI 检索
- android - 为什么我们在 Kotlin 用例中使用调用运算符重载?
- android - 如何使用接口将数据从片段传递到回收器视图
- postgresql - PostgreSQL 12.5 中未执行 AFTER INSERT 触发器(未打印通知,未执行表更新)
- asp.net-core-mvc - 无法下载大于 240 MB 的文件 ASP.NET Core 3.1,服务器返回文件 0 KB
- python - 如何在 Python 中检查 ANSI 字符
- c# - 错误“引用强命名程序集。这是不允许的!”
- django - question_on_approve() 缺少 1 个必需的位置参数:“已创建”