用Manim计算和可视化某个函数图的微分切割线

时间:2024-10-29 22:17:38

   一,介绍 

       在微积分中,切线是函数图形在某一点的瞬时变化率,表示该点的导数。相较于割线,切线与函数在该点的斜率一致。利用 Manim,可以通过选择一个特定的 x 值,在该点计算函数图的切线。首先,确定该点的 y 值和切线的斜率(导数)。然后,生成切线并将其可视化,帮助人们更直观地理解函数的局部行为。这种可视化不仅清晰展现切线的特点,还能为学习微分提供直观支持,激发对数学的兴趣。

二,实现可视化

构造函数:

  1. get_secant_slope_group(x, graph, dx=None, dx_line_color=ManimColor('#FFFF00'),
  2. dy_line_color=None, dx_label=None, dy_label=None, include_secant_line=True,
  3. secant_line_color=ManimColor('#83C167'), secant_line_length=10)

         该函数 get_secant_slope_group 用于计算和可视化某个函数图形的割线(secant line)。割线是连接函数图形上两点的直线,其斜率表示两点之间的平均变化率(或称为割线斜率)。

参数说明

  • x: 一个特定的 x 值,用于确定割线的计算位置。
  • graph: 需要可视化的图形对象,通常是某个函数的图形。
  • dx: x 方向的增量,用来确定割线的两个点。若未提供,可能使用默认值。
  • dx_line_color: dx 线的颜色,默认设置为明亮的黄色。
  • dy_line_color: dy 线的颜色。可以根据需求自定义。
  • dx_label: dx 线的标签,通常是增量的数值或含义。
  • dy_label: dy 线的标签,表示 y 方向的增量。
  • include_secant_line: 一个布尔值,决定是否包含割线。如果为 True,则会包含割线。
  • secant_line_color: 割线的颜色,默认设置为绿色。
  • secant_line_length: 割线的长度,用于调整可视化中的割线长度。

示例1:

  1. class GetSecantSlopeGroupExample(Scene):
  2. def construct(self):
  3. ax = Axes(x_range=[-1, 7],
  4. y_range=[-1, 7],x_length=15, # x轴长度
  5. y_length=8, # y轴长度
  6. ).add_coordinates().set_color(PURPLE)
  7. graph = (lambda x: 1 / 4 * x ** 2, color=BLUE)
  8. slopes = ax.get_secant_slope_group(
  9. x=2.0,
  10. graph=graph,
  11. dx=0.5,
  12. dx_label=Tex("dx = 1.0"),
  13. dy_label="dy",
  14. dx_line_color=GREEN_B,
  15. secant_line_length=6,
  16. secant_line_color=RED_D,
  17. )
  18. (ax, graph, slopes)

运行结果:

 示例2:

  1. from manim import *
  2. class SecantSlope1234(Scene):
  3. def construct(self):
  4. ax = Axes( ).add_coordinates().set_color(PURPLE)
  5. # 定义一个函数
  6. graph = (lambda x: x**2, x_range=[-2, 2])
  7. # 显示函数图像
  8. (ax)
  9. (graph)
  10. # 设置x位置和增量
  11. x_value = 1
  12. dx = 0.5
  13. # 获取割线及其相关可视化元素
  14. secant_slope_group = ax.get_secant_slope_group(
  15. x=x_value,
  16. graph=graph,
  17. dx=dx,
  18. dx_line_color=PURPLE,
  19. dy_line_color=GRAY_A,
  20. dx_label=Tex("dx") ,
  21. dy_label=Tex("dy") ,
  22. include_secant_line=True,
  23. secant_line_color=RED_D,
  24. secant_line_length=5
  25. )
  26. # 显示割线和相应的标签
  27. (Create(secant_slope_group))
  28. (2)

运行结果: