manim动画:利用极限的定义证明极限。

2024-08-29 10:20

本文主要是介绍manim动画:利用极限的定义证明极限。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

函数的证明

用极限的定义来证明下面的极限。

\mathop {\lim }\limits_{x \to 4} {x^2} + x - 11 = 9

 要用极限的定义证明 \mathop {\lim }\limits_{x \to 4} {x^2} + x - 11 = 9,我们可以使用极限的定义:

 设f(x)在包含a的开区间中对所有x≠a有定义,设L为实数。然后

\displaystyle{\lim_{x\to{a}}}f\,(x)=L

 如果,任意一个\epsilon\,>\,0,存在一个 \delta\,>\,0以至于如果0\,<\,|x-a|\,<\delta对于所有x在f的定义域内,然后

\left| {f\left( x \right) - L} \right| < \varepsilon \hspace{0.5in}{\mbox{whenever}}\hspace{0.5in}0 < \left| {x - a} \right| < \delta

 用定义我们得到:f(x)=x^{2}+x-11,L=9  同时 a=4

要用极限的定义证明 \lim_{x \to 4} (x^2 + x - 11) = 9,我们可以使用极限的定义:对任意的\epsilon > 0,存在 \delta > 0,使得当0 < |x - 4| < \delta 时,有 |f(x) - L| < \epsilon,其中 f(x) = x^2 + x - 11L = 9。  

证明步骤如下: 

1. 计算 f(4)

        f(4) = 4^2 + 4 - 11 = 16 + 4 - 11 = 9

2. 设|f(x) - 9| < \epsilon  :  我们需要证明,当 x 足够接近 4 时,|(x^2 + x - 11) - 9| < \epsilon。  

   这可以简化为:   |x^2 + x - 20| < \epsilon


   因为        x^2 + x - 11 - 9 = x^2 + x - 20。  

3. 因此,我们需要分析:  
                                          |x^2 + x - 20|
   进行分解,x^2 + x - 20 = (x - 4)(x + 5)。  

   所以我们需要找到\delta使得当|x - 4| < \delta 时,  
         ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                                        ​​​​​​​ |(x - 4)(x + 5)| < \epsilon

4. 为了简化分析,我们假设 x 接近 4,假设 |x - 4| < 1,则 3 < x < 5。  

   因此,x + 5 的范围为:  
                                         3 + 5 < x + 5 < 5 + 5 \Rightarrow 8 < x + 5 < 10
   这意味着 |x + 5| < 10。  

5. 因此,我们有:  
   |(x - 4)(x + 5)| < |x - 4| \cdot |x + 5| <\frac{|x - 4|}{10}

6. 因此,可以选择|x - 4| < \frac{\epsilon}{10},于是|(x - 4)(x + 5)| < \epsilon。  

7. 最终,我们可以设定 \delta = \min(1, \frac{\epsilon}{10})。  

综上所述,对于任意的\epsilon > 0,我们可以找到\delta使得当0 < |x - 4| < \delta 时,有 |x^2 + x - 11 - 9| < \epsilon,因此证明了:  
        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \lim_{x \to 4} (x^2 + x - 11) = 9

 

用manim代码,播放计算结果: 

from manim import *  class LimitProofEx88(Scene):  def construct(self):  # 创建标题和极限表达式  title = MarkupText("证明极限:").scale(0.9)  t1 = MathTex(r"\lim_{x \to 4} (x^2 + x - 11) = 9").scale(0.9)  tt = VGroup(title, t1).arrange(RIGHT)  tt.to_edge(UP)tt.shift(LEFT*2)self.add(tt)# 创建步骤和方程  elements = []  # Step 1  step1 = MarkupText("1. 计算:")  equation1 = MathTex(r"f(4) = 4^2 + 4 - 11 = 9")  elements.append(step1)  elements.append(equation1)  # Step 2  step2 = MarkupText("2. 设 ")  step2_equation = MathTex(r"|f(x) - 9| < \epsilon:")  equation2 = MathTex(r"|x^2 + x - 20| < \epsilon")  elements.append(step2)  elements.append(step2_equation)  elements.append(equation2)  # Step 3  step3 = MarkupText("3. 分解: ")  step3_equation = MathTex(r"x^2 + x - 20 = (x - 4)(x + 5)")  elements.append(step3)  elements.append(step3_equation)  # Step 4  step4 = MarkupText("4. 假设 ")  step4_equation = MathTex(r"|x - 4| < 1: 3 < x < 5 : 8 < x + 5 < 10")  elements.append(step4)  elements.append(step4_equation)  # Step 5  step5 = MarkupText("5. 由此得: ")  step5_equation = MathTex(r"| (x - 4)(x + 5) | < |x - 4| \cdot 10")  elements.append(step5)  elements.append(step5_equation)  # Step 6  step6 = MarkupText("6. 选择: ")  step6_equation = MathTex(r"|x - 4| < \frac{\epsilon}{10}")  elements.append(step6)  elements.append(step6_equation)  # Step 7  step7 = MarkupText("7. 设定: ")  step7_equation = MathTex(r"\delta = \min\left(1, \frac{\epsilon}{10}\right)")  elements.append(step7)  elements.append(step7_equation)  # Conclusion  conclusion_text = MarkupText("因此: ").scale(1.2)  conclusion_equation = MathTex(r"\lim_{x \to 4} (x^2 + x - 11) = 9")  elements.append(conclusion_text)  elements.append(conclusion_equation)  # 创建函数图像  axes = Axes(x_range=[0,6], y_range=[3, 12], axis_config={"color": BLUE}).add_coordinates() graph = axes.plot(lambda x: x**2 + x - 11, color=YELLOW)  graph_label = axes.get_graph_label(graph, label='f(x) = x^2 + x - 11') self.add(Dot(axes.c2p(4,9),radius=0.25,color=RED))# 显示页面内容  for i in range(0, len(elements), 7):  # 添加坐标系和图像  self.play(Create(axes), Create(graph), Write(graph_label))  # 逐行添加说明内容,同时翻页  for element in elements[i:i + 7]:  self.play(Write(element))self.play(FadeOut(element))self.wait(1)  # 翻页时清除页面  self.play(FadeOut(*elements[i:i + 7]))  self.wait(0.5)  # 等待一段时间后再显示下一页  # 最后显示结论  self.play(Write(conclusion_text), Write(conclusion_equation))  self.wait(2)  # 清除所有元素  self.play(FadeOut(*self.mobjects))%manim -qm -v WARNING LimitProofEx88

解释代码:

  1. 标题和极限表达式创建

    title = MarkupText("证明极限:").scale(0.9) 
    t1 = MathTex(r"\lim_{x \to 4} (x^2 + x - 11) = 9").scale(0.9) 
    tt = VGroup(title, t1).arrange(RIGHT) 
    tt.to_edge(UP) 
    tt.shift(LEFT * 2) self.add(tt) 
    • MarkupText 用于创建带有格式的中文文本。
    • MathTex 用于创建数学公式。
    • VGroup 把两个元素组合在一起并以右对齐的方式排列。
    • 将组合移动到顶部,并略微向左偏移。
    • 最后把 tt 添加到场景中。
  2. 创建步骤和方程

    elements = [] 

    初始化一个空列表,用于存储将要展示的步骤和方程。

    接下来逐步创建每个步骤:

    • # Step 1 
      step1 = MarkupText("1. 计算:") 
      equation1 = MathTex(r"f(4) = 4^2 + 4 - 11 = 9") 
      elements.append(step1) 
      ​​​​​​​elements.append(equation1) 
    • 重复以上过程为每个步骤创建内容,包括假设、计算等,且每个元素添加至elements列表。

  3. 创建结论

    conclusion_text = MarkupText("因此: ").scale(1.2) 
    conclusion_equation = MathTex(r"\lim_{x \to 4} (x^2 + x - 11) = 9") 
    elements.append(conclusion_text) 
    elements.append(conclusion_equation) 

    这里创建了总结部分,即用文字和数学公式表明计算最后的结论。

  4. 创建函数图像

    axes = Axes(x_range=[0, 6], y_range=[3, 12], axis_config={"color": BLUE}).add_coordinates() 
    graph = axes.plot(lambda x: x**2 + x - 11, color=YELLOW) 
    graph_label = axes.get_graph_label(graph, label='f(x) = x^2 + x - 11') 
    self.add(Dot(axes.c2p(4, 9), radius=0.25, color=RED)) 
    • Axes 创建坐标系,x_range 和 y_range 分别定义x轴和y轴的显示范围。
    • 使用 lambda 定义函数 f(x) = x^2 + x - 11来绘制图像。
    • add_coordinates() 在坐标系中添加坐标标记。
    • 添加图形的标签。
    • 在位置 (4, 9) 上添加一个红色的点,标记极限点。
  5. 显示内容

    for i in range(0, len(elements), 7): 

    这个循环用于分页显示元素,每页最多显示7个元素。

    • 添加坐标系和图像

      self.play(Create(axes), Create(graph), Write(graph_label)) 
    • 逐行添加步骤内容

      for element in elements[i:i + 7]: ​​​​​​​self.play(Write(element)) self.play(FadeOut(element)) self.wait(1) 

      逐个写出每个步骤内容,每次写出后立即淡出下一步内容,并在每步之间等待1秒。

    • 翻页效果

      self.play(FadeOut(*elements[i:i + 7])) 
      self.wait(0.5) # 等待一段时间后再显示下一页 

      每次展示后清除上一页的内容,保持页面整洁。

  6. 最后显示结论

    self.play(Write(conclusion_text), Write(conclusion_equation)) 
    self.wait(2) 

    在所有步骤结束后,展示结论的内容,并等待2秒以便观众可以阅读。

  7. 清除所有元素

    self.play(FadeOut(*self.mobjects)) 

在场景结束时,淡出所有的元素以完成动画。

可能的改进或注意事项:

  1. 协调显示时间:根据演示需求,您可能需要调整每个元素的显示时间,以确保观众有足够的时间理解内容。
  2. 图像刷新:通过修改逻辑,可以让函数图像在翻页过程中更平滑地呈现,特别是在需要强调的点时。
  3. 元素管理:可以考虑将步骤和结论内容单独封装为方法,以提高代码的可读性和复用性。
  4. 交互性:如果想增加观众的参与感,可以考虑运用一些交互性元素,比如提问或使用反转效果。

这段代码很完整,通过使用Manim的功能很好地展示了一个极限的证明过程。希望这个解释能帮助您更好地理解代码的逻辑和意图!

局部运行结果

 想看完整视频可以看看资源里https://download.csdn.net/download/qq_45449625/89688627icon-default.png?t=N7T8https://download.csdn.net/download/qq_45449625/89688627

这篇关于manim动画:利用极限的定义证明极限。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117588

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

浙大数据结构:树的定义与操作

四种遍历 #include<iostream>#include<queue>using namespace std;typedef struct treenode *BinTree;typedef BinTree position;typedef int ElementType;struct treenode{ElementType data;BinTree left;BinTre

动画AnimationDrawable、转动

现实开发中:很多地方都用到 点击动画的特效; 本案例本人做了三个关于“动” 画 的效果; 先上图: 总体图: A: B: 1:点击图片按钮,效果是:图片闪动; 通过在xml中定义:标签:animation-list来实现点击动画的效果;  是否循环标签:oneshot ;   时间间隔标签:duration ; 要显示的图片标签:drawable ;

类和对象的定义和调用演示(C++)

我习惯把类的定义放在头文件中 Student.h #define _CRT_SECURE_NO_WARNINGS#include <string>using namespace std;class student{public:char m_name[25];int m_age;int m_score;char* get_name(){return m_name;}int set_name

13 transition数组的动画使用

划重点 动画:transitiontransition-group :数组动画数组的 添加 / 删除 豆腐粉丝汤 清淡又健康 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><me

12 动画transition的使用2

划重点 Vue 动画:transition / transform在动画周期中执行动动画(上一篇是通过动画样式控制动画) 清蒸扇贝 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><

c++ 定义二位数组

在 C++ 中,定义二维数组有几种常见的方式。以下是几个示例: 1. 静态二维数组 定义: int array[3][4]; 这里,array 是一个 3 行 4 列的整数二维数组。 初始化: int array[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}}; 2. 动态二维数组 使用指针和动态内存分配: 定义: