1. 首页 » 生活常识

Python微积分:二阶偏导数计算方法与实例

本文讲述如何用python的sympy、scipy工具包,求函数的二阶导数及 n 阶导数,文中代码和截图都选自Jupter notebook编辑环境。

先导入必要的工具包:

import sympy as smp
import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
from scipy.misc import derivative

把数值变量 x 定义为符号:

x = smp.symbols('x')

例1(如图1),求f(x)和g(x)的一阶导数和二阶导数

Python微积分—导数(3) 二阶及 n 阶导数

图1说明:截图包括两行cell,都为markdown类型;上面一行为 函数表达式的显示形态,下面一行为函数表达式的输入形态。在输入状态行,按Ctrl + Enter键运行该行cell,即可显示上一行内容。

用python自定义函数表述函数f(x)和g(x):
def f(x): return x**4+3*x**2 
def g(x): return -x**4-3*x**2
求例 1 中f(x)和g(x)的一阶导数:
# 定义函数
def df(x): return 4*x**3+6*x
def df(x): return -4*x**3-6*x

df(1)
-10   (x =1, df(1) 的计算结果)

dg(-0.2)
1.2320000000000002    (x = -0.2, dg(-0.2) 的计算结果)
求例 1 中f(x)和g(x)的二阶导数:
def ddf(x): return 12*x**2+6
def ddg(x): return -12*x**2-6

ddf(1)
18  (当x =1时, ddf(x)的计算结果)

ddg(-0.2)
-6.48 (当x = -0.2时, ddg(x)的计算结果)

例2(如图2),求f(x)的一阶导数和二阶导数

Python微积分—导数(3) 二阶及 n 阶导数

图2说明:(见图1说明)

定义函数:
  def f(x): return 5*x**3 - 3*x
求例题 2 中f(x)的一阶导数:
x =  smp.symbols('x')
smp.diff(f(x),x)

#(计算结果如下)
15x*x -3 
求例题 2 中f(x)的二阶导数:
smp.diff(f(x),x,2)

#(计算结果如下)
30x

例3,求f(x)的 n 阶导数

例3-1:求f(x) = sin(x) 的 n 阶导数

def f(x): return smp.sin(x)

d3f = smp.diff(f(x), x, 3)  # 其中的 3 ,表示求 3 阶导数
d3f
#(计算结果)
-cos(x) 

d4f = smp.diff(f(x), x, 4)  # 其中的 4 ,表示求 4 阶导数
d4f
#(计算结果)
sin(x)

有些函数很复杂,即使函数表达非常明确,但是人工求解这类函数的 n 阶导数很难, 如例 3-2。

例3-2(如图3),求f(x)的 n 阶导数

Python微积分—导数(3) 二阶及 n 阶导数

图3说明:(见图1说明)

定义符号
x, a, b, c = smp.symbols('x a b c', real=True)
定义例 3-2 中f(x)计算表达式的函数
def f(x):
      return smp.exp(-a*smp.sin(x**2)) * smp.sin(b**x) * smp.log(c*smp.sin(x)**2 /x)
求例 3-2 中f(x)的 4 阶导数
d4f = smp.diff(f(x), x, 4)
d4f

计算结果略去,非常复杂啊!

给定x, a, b, c的值,计算例 3-2 中f(x)的4阶导数的值
d4f.subs([(x,0.5),(a,1),(b,2),(c,3)]).evalf()

(计算结果)
−34.8746096991241

声明:本文由"麦兜"发布,不代表"破站"立场,转载联系作者并注明出处:https://www.848586.cn/159407.html