📜  切线和法线方程(1)

📅  最后修改于: 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,而是一个非常小的数。实际使用时,应该对这种情况进行处理。