
本文介绍在 SymPy 中对形如 $ V = f(r) \cdot x^2 $(其中 $ r = \sqrt{x^2+y^2+z^2} $)的复合符号表达式进行偏微分的正确方法,避免出现 Subs 和 _xi_1 等不直观中间变量,获得结构清晰、数学意义明确的导数表达式。
本文介绍在 sympy 中对形如 $ v = f(r) \cdot x^2 $(其中 $ r = \sqrt{x^2+y^2+z^2} $)的复合符号表达式进行偏微分的正确方法,避免出现 `subs` 和 `_xi_1` 等不直观中间变量,获得结构清晰、数学意义明确的导数表达式。
在使用 SymPy 处理含未指定具体形式的符号函数(如 f_A(r))的复合表达式时,直接将 r 定义为表达式(如 sp.sqrt(x**2 + y**2 + z**2))再代入函数调用(如 sp.Function('f_A')(r)),虽语法合法,但会导致 diff() 返回含 Subs(Derivative(...), ...) 的冗余结果——这是 SymPy 为保证链式法则严格性而引入的占位机制,不利于解读与后续推导。
✅ 正确做法是:将 r 显式声明为一个依赖于 (x, y, z) 的符号函数,再通过 .subs() 手动注入其具体表达式及其偏导数。这样可清晰分离“函数依赖关系”与“具体实现”,使导数结果自然呈现为链式法则的标准形式:
import sympy as sp
x, y, z = sp.symbols('x y z')
# ✅ 步骤1:声明 r 为符号函数 r(x, y, z),而非直接赋值为 sqrt(...)
r = sp.Function("r")(x, y, z)
r_expr = sp.sqrt(x**2 + y**2 + z**2) # r 的实际表达式
# ✅ 步骤2:构建复合函数 f_A(r(x,y,z))
f_A = sp.Function('f_A')(r)
# ✅ 步骤3:构造目标表达式 V = f_A(r) * x^2
V = f_A * x**2
# 求偏导:自动应用链式法则,保留符号导数 Derivative(f_A(r), r)
dV_dx_chain = V.diff(x)
print("链式法则形式(符号化):")
sp.pprint(dV_dx_chain)
# 输出:
# ⎛ d ⎞ ⎛∂ ⎞ ⎛ ⎞
# x²⋅⎜───(f_A(r(x, y, z)))⎟⋅⎜──(r(x, y, z))⎟ + 2⋅x⋅f_A⎝r(x, y, z)⎠
# ⎝dr ⎠ ⎝∂x ⎠
此时结果中 Derivative(f_A(r(x,y,z)), r(x,y,z)) 表示 $ \frac{df_A}{dr} $,而 Derivative(r(x,y,z), x) 表示 $ \frac{\partial r}{\partial x} $,完全符合数学习惯。
接下来,只需代入 $ r $ 的具体表达式及其偏导数即可得到最终简洁形式:
# ✅ 步骤4:代入 r 的具体表达式和 ∂r/∂x
dr_dx = r_expr.diff(x) # = x / sqrt(x**2 + y**2 + z**2)
dV_dx_final = dV_dx_chain.subs({
sp.Derivative(r, x): dr_dx,
r: r_expr # 可选:同时替换 r(x,y,z) → sqrt(...)
})
print("\n代入后最终结果:")
sp.pprint(dV_dx_final)
# 输出(等价于 LaTeX):
# 3 d x⋅f_A⎛√(x² + y² + z²)⎞
# x ⋅───(f_A(r)) ⎝ ⎠
# ─────────────────── + 2⋅x⋅f_A⎛√(x² + y² + z²)⎞
# √(x² + y² + z²) ⎝ ⎠
该结果即为所求的清晰符号导数:
$$
\frac{\partial V}{\partial x} = \frac{x^3}{r} \frac{df_A}{dr} + 2x\, f_A(r), \quad \text{其中 } r = \sqrt{x^2 + y^2 + z^2}
$$
⚠️ 注意事项:
- 不要直接用
f_A = sp.Function('f_A')(sp.sqrt(...))—— 这会使 SymPy 丧失对r作为独立中间变量的跟踪能力; - 若需进一步化简(如合并同类项或展开),可调用
.simplify()或.expand(),但需注意Derivative(f_A(r), r)是原子符号,不会被自动展开; - 对高阶导数或多变量导数,此模式同样适用,只需补充对应偏导替换(如
r.diff(y)→y/r)。
掌握这一模式,即可在 SymPy 中稳健处理任意嵌套的符号函数微分问题,兼顾数学严谨性与结果可读性。










