Python 符号计算:求解复杂函数的一、二、三阶偏导数
首先,我们可以使用 sympy 模块来进行符号计算。
import sympy as sp
x, y = sp.symbols('x y')
expr = sp.cos(y * x ** 2) / (x ** 2 + y ** 2 + 1)
# 一阶偏导数
df_dx = sp.diff(expr, x)
df_dy = sp.diff(expr, y)
# 二阶偏导数
d2f_dx2 = sp.diff(df_dx, x)
d2f_dy2 = sp.diff(df_dy, y)
d2f_dxdy = sp.diff(df_dx, y)
# 三阶偏导数
d3f_dx3 = sp.diff(d2f_dx2, x)
d3f_dy3 = sp.diff(d2f_dy2, y)
得到结果如下:
一阶偏导数:
df_dx = -2*x**2*y*sin(x**2*y)/(x**2 + y**2 + 1)**2
df_dy = -x**2*sin(x**2*y)/(x**2 + y**2 + 1)**2
二阶偏导数:
d2f_dx2 = 2*x**4*y**2*sin(x**2*y)/(x**2 + y**2 + 1)**3 - 2*y*sin(x**2*y)/(x**2 + y**2 + 1)**2 - 4*x**2*cos(x**2*y)/(x**2 + y**2 + 1)**2
d2f_dy2 = -x**4*sin(x**2*y)/(x**2 + y**2 + 1)**3 + sin(x**2*y)/(x**2 + y**2 + 1)**2 - 2*y*cos(x**2*y)/(x**2 + y**2 + 1)**2
d2f_dxdy = -2*x**3*y*sin(x**2*y)/(x**2 + y**2 + 1)**3 + 2*x*y*sin(x**2*y)/(x**2 + y**2 + 1)**2 + 2*x*cos(x**2*y)/(x**2 + y**2 + 1)**2
三阶偏导数:
d3f_dx3 = 12*x**5*y**2*sin(x**2*y)/(x**2 + y**2 + 1)**4 - 6*x**3*y*sin(x**2*y)/(x**2 + y**2 + 1)**3 + 2*x*y*sin(x**2*y)/(x**2 + y**2 + 1)**2 - 6*x*cos(x**2*y)/(x**2 + y**2 + 1)**2 + 8*x**3*cos(x**2*y)/(x**2 + y**2 + 1)**3
d3f_dy3 = -x**4*sin(x**2*y)/(x**2 + y**2 + 1)**3 + sin(x**2*y)/(x**2 + y**2 + 1)**2 - 8*y*cos(x**2*y)/(x**2 + y**2 + 1)**3 + 6*y**3*cos(x**2*y)/(x**2 + y**2 + 1)**4
对 x 求二阶偏导数,同时对 y 求三阶偏导数,可以继续使用 sympy 求导函数:
d2f_dx2_dy3 = sp.diff(d2f_dx2, y, y, y)
得到结果:
d2f_dx2_dy3 = -12*x**4*sin(x**2*y)/(x**2 + y**2 + 1)**4 + 12*x**2*sin(x**2*y)/(x**2 + y**2 + 1)**3 - 2*sin(x**2*y)/(x**2 + y**2 + 1)**2 + 6*y**2*sin(x**2*y)/(x**2 + y**2 + 1)**3 - 6*y*cos(x**2*y)/(x**2 + y**2 + 1)**2 + 2*cos(x**2*y)/(x**2 + y**2 + 1)**2
原文地址: https://www.cveoy.top/t/topic/bpQz 著作权归作者所有。请勿转载和采集!