如何用SymPy求解隐函数的二阶混合偏导数
用SymPy的idiff计算隐函数的二阶混合偏导数
对于由方程$\cos^2(x) + \cos^2(y) + \cos^2(z) = 1$定义的隐函数$z=f(x,y)$,要计算二阶混合偏导数$\frac{\partial^2 z}{\partial x \partial y}$,可以通过以下两种方式使用SymPy的idiff函数实现:
方法1:直接传递多阶求导变量序列
idiff函数支持传入多个求导变量,按顺序表示求导的先后顺序。要计算$\frac{\partial^2 z}{\partial x \partial y}$,只需将求导变量按x、y的顺序传入:
# 计算二阶混合偏导 ∂²z/∂x∂y mixed_deriv = sp.idiff(F, z, x, y) # 简化结果 sp.simplify(mixed_deriv)
方法2:先求一阶偏导,再对另一变量求偏导
先计算一阶偏导数$\frac{\partial z}{\partial x}$,再对该结果关于y求偏导(保持隐函数关系,仍用idiff处理):
# 先求一阶偏导 ∂z/∂x dz_dx = sp.idiff(F, z, x) # 对dz_dx关于y求偏导,得到∂²z/∂x∂y mixed_deriv_2 = sp.idiff(dz_dx, z, y) # 简化结果 sp.simplify(mixed_deriv_2)
完整代码示例
将混合偏导计算整合到原有代码中:
#!/usr/bin/env python # coding: utf-8 import sympy as sp sp.init_printing(use_latex='mathjax') # 启用美观的MathJax输出 sp.var('x y z') # 定义隐函数方程 F(x,y,z)=0 F = (sp.cos(x))**2 + (sp.cos(y))**2 + (sp.cos(z))**2 - 1 # 一阶偏导数 dz_dx = sp.idiff(F, z, x) dz_dy = sp.idiff(F, z, y) # 二阶纯偏导数 d2z_dx2 = sp.simplify(sp.idiff(F, z, x, 2)) d2z_dy2 = sp.simplify(sp.idiff(F, z, y, 2)) # 二阶混合偏导数(方法1) d2z_dxdy = sp.simplify(sp.idiff(F, z, x, y)) # 二阶混合偏导数(方法2,验证结果一致) d2z_dxdy_alt = sp.simplify(sp.idiff(dz_dx, z, y)) print("二阶混合偏导数 ∂²z/∂x∂y:") display(d2z_dxdy)
两种方法得到的结果完全一致,因为在函数连续可导的条件下,混合偏导数满足$\frac{\partial^2 z}{\partial x \partial y} = \frac{\partial^2 z}{\partial y \partial x}$,你也可以通过sp.idiff(F, z, y, x)验证这一特性。
内容的提问来源于stack exchange,提问作者peter.petrov
相关产品推荐
相关产品推荐

