如何在SymPy中获取变量的微分形式而非对t的导数?
SymPy 简化微分表达式:保留 dx/dy 形式而非含 dt 的导数
问题场景
使用SymPy对依赖于t的函数x(t)、y(t)求导时,sympy.diff会返回带dt的导数形式(如dx(t)/dt),但我们需要得到dx、dy这类微分形式(如xdy + ydx)。
解决方法:替换导数项
通过定义dx、dy作为符号,将求导结果中的diff(x, t)和diff(y, t)替换为对应的微分符号即可。完整代码如下:
from sympy import Function, diff, simplify, symbols # 定义变量和函数 t = symbols('t') x = Function('x', real=True)(t) y = Function('y', real=True)(t) # 计算原表达式的导数 original_diff = simplify(diff(x * y, t)) # 定义微分符号并替换 dx, dy = symbols('dx dy') target_expr = original_diff.subs({diff(x, t): dx, diff(y, t): dy}) print(target_expr)
运行后输出:
x(t)*dy + y(t)*dx
如果需要去掉函数括号(即显示xdy + ydx),可以进一步替换函数符号:
# 替换x(t)为x,y(t)为y x_sym, y_sym = symbols('x y') final_expr = target_expr.subs({x: x_sym, y: y_sym}) print(final_expr)
输出结果:
x*dy + y*dx
说明
这种替换方法通用性强,即使原始表达式更复杂,只需按同样逻辑添加对应的替换规则(如diff(z, t): dz)即可得到目标形式。
内容的提问来源于stack exchange,提问作者Naas van Rooyen
相关产品推荐
相关产品推荐

