深度学习入门——数值微分,求导数

# coding: utf-8
import numpy as np
import matplotlib.pylab as plt


# ------------------定义微分函数-------------------------------------------------------------
def numerical_diff(f, x):
    h = 1e-04 # 0.0001 利用极小值,但不能产生舍入误差
    return (f(x + h) - f(x - h)) / (2 * h) # 利用中心微分,减小误差


# ---------------------------定义 y=0.01x^2+0.1x 函数----------------------------------------
def function_1(x):
    return 0.01 * x ** 2 + 0.1 * x


# -------------------------定义切线导数-------------------------------------------------------
def tangent_line(f, x):
    d = numerical_diff(f, x) # function_1不打括号则直接返回函数
    print(d)
    b = f(x) - d * x # 与y轴的交点
    return lambda t: d*t + b # 切线函数,t为参量


# ------------------------画图------------------------------------------------------------------
"""注意:tangent_line函数在画图时,调用numerical_diff函数是为了求得导数,故不能将数组x带入function_1中"""
x = np.arange(0, 20, 0.1)

y = function_1(x)
plt.plot(x, y)
plt.xlabel('x', fontsize=14)
plt.ylabel('f(x)', fontsize=14)
plt.title('y=0.01x^2+0.1x')


tf = tangent_line(function_1, 5) # 返回的函数还缺少参量t
y2 = tf(x) # 赋值参量t
plt.plot(x, y2)

tf2 = tangent_line(function_1, 10)
y3 = tf2(x)
plt.plot(x, y3)

plt.show()

深度学习入门——数值微分,求导数_第1张图片

tf = tangent_line(function_1, 5) # 返回的函数还缺少参量t
y2 = tf(x) # 赋值参量t
  • 这段代码很重要,不能采用function_1(x),因为x为数组,而这里得函数要在特定点求导数
  • tf获得函数形式
  • y2 = tf(x): 还需要给函数的参量t赋值形成图形

你可能感兴趣的:(深度学习入门)