如何在任何点绘制抛物线的斜率(切线)?

时间:2019-03-02 17:48:28

标签: python matplotlib plot

我想画一个简单的例子,说明如何使用导数来找出函数在任何点的斜率。看起来像这样:

我已经使用以下代码绘制了一个简单的抛物线:

import numpy as np
from matplotlib import pyplot as plt

inputs = 0.2
weights = np.arange(-6,14)
target_prediction = 0.7

prediction = inputs*weights
errors = (prediction - target_prediction) ** 2
plt.xlabel("Weight")
plt.ylabel("Error")
plt.plot(weights, error)

现在我要添加如下内容:

current_weight = 5
# draw a short fraction of a line to represent slope
x = np.arange(optimal_weight - 3, optimal_weight + 3)
# derivative
slope = 2 * (inputs*current_weight - target_prediction)
y = slope*x # How should this equation look like?
plt.plot(x, y)

绘制穿过current_weight的切线。

但是我似乎无法弄清楚,您能帮忙吗?

1 个答案:

答案 0 :(得分:1)

一旦在所需的点有斜率,就需要使用点斜率形式为切线写方程:

# Define parabola
def f(x): 
    return x**2

# Define parabola derivative
def slope(x): 
    return 2*x

# Define x data range for parabola
x = np.linspace(-5,5,100)

# Choose point to plot tangent line
x1 = -3
y1 = f(x1)

# Define tangent line
# y = m*(x - x1) + y1
def line(x, x1, y1):
    return slope(x1)*(x - x1) + y1

# Define x data range for tangent line
xrange = np.linspace(x1-1, x1+1, 10)

# Plot the figure
plt.figure()
plt.plot(x, f(x))
plt.scatter(x1, y1, color='C1', s=50)
plt.plot(xrange, line(xrange, x1, y1), 'C1--', linewidth = 2)

Parabola with tangent line

您可以对任何微分函数执行此操作,并可以使用导数逼近方法(例如有限差分)来消除提供解析导数的需要。