导入
单变量函数的微分
学习使用有限差分法计算一元函数的导数。
f'(x) = \frac{df(x)}{dx} = \lim_{h \rightarrow 0} \frac{f(x+h) - f(x)}{h}
f'(x) = \frac{f(x + dx) - f(x - dx)}{2 dx}
v(x) = \frac{df(x)}{dx}
1import numpy as np 2import matplotlib.pyplot as plt 3from scipy.misc import derivative 4 5# 目标函数 6def objective(x): 7 return (x + 2) * (x - 6) 8 9x0 = 5 # 在该点计算导数 10y0 = objective(x0) 11dfy = derivative(objective, x0, dx=1e-6) # 计算导数 12 13print('dy/dx 在 x = %.3f 处的值为 %.3f' % (x0, dfy)) 14 15# 绘制曲线以进行图形化可视化 16plt.figure(figsize=(10, 10)) 17plt.rcParams.update({'font.size': 22}) 18xs = np.arange(-8, 12, 0.1) 19plt.plot(xs, objective(xs), linewidth=2, label='y = (x+2)*(x-6)') 20 21# 绘制在点 x0 处与曲线相切且斜率为 dy/dx 的切线 22tangent_fn = lambda x: dfy * x + (y0 - dfy * x0) 23xs = np.arange(-3, 11, 0.1) 24plt.plot(xs, tangent_fn(xs), linewidth=2, ls='-', color='red', label='dy/dx') 25 26# 绘制点 (x0, y0),以及 x 轴和 y 轴 27plt.scatter(x0, y0, label='(x,y) = ({},{})'.format(x0, y0)) 28plt.axhline(y=0, ls='-', color='black') 29plt.axvline(x=0, ls='-', color='black') 30plt.legend() 31plt.savefig('./output/plot.png')