实现代码:
定义函数:
import numpy as np
from IPython import display
import matplotlib.pyplot as plt
def f(x):
# 3x^2 -4x
return 3 *x **2 - 4*x
函数求导:令并让接近0
def numerial_lim(f,x,h):
return (f(x + h) - f(x))/h
h = 0.1
for i in range(5):
print(f'h ={h:.5f},numerical limit ={numerial_lim(f,1,h):.5f}')
h *= 0.1
可视化相关代码:
def use_svg_display():
display.set_matplotlib_formats('svg')
def set_figsize(figsize=(3.5,2.5)):
use_svg_display()
plt.rcParams['figure.figsize']= figsize
def set_axes(axes,xlabel,ylabel,xlim,ylim,xscale,yscale,legend):
axes.set_xlabel(xlabel)
axes.set_ylabel(ylabel)
axes.set_xscale(xscale)
axes.set_yscale(yscale)
axes.set_xlim(xlim)
axes.set_ylim(ylim)
if legend:
axes.legend(legend)
axes.grid()
def plot(X,Y=None,xlabel = None,ylabel=None,legend=None,xlim=None,ylim=None, xscale='linear', yscale='linear',fmts=('-', 'm--', 'g-.', 'r:'), figsize=(3.5, 2.5), axes=None):
if legend is None:
legend = []
set_figsize(figsize)
axes = axes if axes else plt.gca()
def has_one_axis(X):
return (hasattr(X,'ndim') and X.ndim ==1 or isinstance(X,list) and not hasattr(X[0] ,'__len__'))
if has_one_axis(X):
X = [X]
if Y is None:
X,Y =[[]] * len(X),X
elif has_one_axis(Y):
Y = [Y]
if len(X) != len(Y):
X = X * len(Y)
axes.cla()
for x, y, fmt in zip(X, Y, fmts):
if len(x):
axes.plot(x,y,fmt)
else:
axes.plot(y,fmt)
set_axes(axes,xlabel,ylabel,xlim,ylim,xscale,yscale,legend)
设置相关参数,并运行
x = np.arange(0,3,0.1)
plot(x,[f(x),2*x -3],'x','f(x)',legend=['f(X),','target line (X=1)'])
运行截图:
参考:
《动手学深度学习》