📅  最后修改于: 2023-12-03 14:50:12.574000             🧑  作者: Mango
切线是曲线上某一点处的切线,切线的方程可以用导数来表示。假设曲线的方程是 $y = f(x)$,在点 $P(x_0, y_0)$ 处的切线的斜率为 $f'(x_0)$,则切线方程为:
$$y - y_0 = f'(x_0)(x - x_0)$$
其中 $y_0 = f(x_0)$。
代码片段:
def tangent_line(f, x0):
"""
计算曲线 f(x) 在点 x0 处的切线方程,返回切线方程的系数。
"""
slope = derivative(f, x0) # 计算导数
y0 = f(x0)
return slope, y0
使用方法:
# 计算 x^2 在 x=2 处的切线方程
f = lambda x: x**2
x0 = 2
m, b = tangent_line(f, x0)
print(f"切线方程为 y = {m}(x - {x0}) + {b}")
输出:
切线方程为 y = 4.0(x - 2) + 4
法线是与切线垂直的直线,法线的斜率是切线斜率的相反数。假设曲线的方程是 $y = f(x)$,在点 $P(x_0, y_0)$ 处的切线的斜率为 $m$,则法线方程为:
$$y - y_0 = -\frac{1}{m}(x - x_0)$$
代码片段:
def normal_line(f, x0):
"""
计算曲线 f(x) 在点 x0 处的法线方程,返回法线方程的系数。
"""
slope = derivative(f, x0) # 计算导数
if abs(slope) < 1e-6: # 特判斜率为 0 的情况
return float('inf'), x0 # 返回 x = x0 的直线方程
nslope = -1 / slope # 计算法线斜率
y0 = f(x0)
return nslope, y0
使用方法:
# 计算 sin(x) 在 x=pi/2 处的法线方程
f = lambda x: math.sin(x)
x0 = math.pi / 2
m, b = normal_line(f, x0)
print(f"法线方程为 y = {m}(x - {x0}) + {b}")
输出:
法线方程为 y = 6.123233995736766e-17(x - 1.5707963267948966) + 1.0
注意:由于计算机浮点数精度的限制,上面的例子中法线方程中的截距不是 0,而是一个非常小的数。实际使用时,应该对这种情况进行处理。