summaryrefslogtreecommitdiff
path: root/FSF-2020/calculus-of-several-variables/multivariable-functions-and-paritial-derivatives/Multivariable Functions/multivariable_func_derivative_vectorvf.py
blob: 466e3894fc6fe7acd8c31742a0f890341d64f634 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
from manimlib.imports import *

class Derivative(GraphScene):
    CONFIG = {
    "x_min": 0,
    "x_max": 3,
    "y_min": 0,
    "y_max": 5,
    "graph_origin": ORIGIN+6*LEFT+3*DOWN,
    "x_axis_width": 6,
    "x_labeled_nums": list(range(0, 4)),
    "y_labeled_nums": list(range(0, 6)),
    }
    def construct(self):

        XTD = self.x_axis_width/(self.x_max - self.x_min)
        YTD = self.y_axis_height/(self.y_max - self.y_min)

        self.setup_axes(animate = True)

        graph = self.get_graph(lambda x :  x*x, x_min = 0.5, x_max = 2, color = GREEN)

        point1 = Dot().shift(self.graph_origin+0.25*YTD*UP + 0.5*XTD*RIGHT)
        point1_lab = TextMobject(r"$t = a$") 
        point1_lab.scale(0.7)
        point1_lab.next_to(point1, RIGHT)

        point2 = Dot().shift(self.graph_origin+2*XTD*RIGHT+4*YTD*UP)
        point2_lab = TextMobject(r"$t = b$") 
        point2_lab.scale(0.7)
        point2_lab.next_to(point2, RIGHT)


        vector1 = Arrow(self.graph_origin, self.graph_origin+1*YTD*UP + 1*XTD*RIGHT, buff=0.02, color = RED)
        vector1_lab = TextMobject(r"$\vec r(t)$", color = RED) 
        vector1_lab.move_to(self.graph_origin+1.2*XTD*RIGHT+ 0.75*YTD*UP)
        vector1_lab.scale(0.8)

        vector2 = Arrow(self.graph_origin, self.graph_origin+2.25*YTD*UP + 1.5*XTD*RIGHT, buff=0.02, color = YELLOW_C)
        vector2_lab = TextMobject(r"$\vec r(t + h)$", color = YELLOW_C) 
        vector2_lab.move_to(self.graph_origin+0.5*XTD*RIGHT+ 2*YTD*UP)
        vector2_lab.scale(0.8)

        vector3 = Arrow(self.graph_origin+1*YTD*UP + 1*XTD*RIGHT, self.graph_origin+2.25*YTD*UP + 1.5*XTD*RIGHT, buff=0.02, color = PINK)
        vector3_lab = TextMobject(r"$\vec r(t + h) - \vec r(t)$", color = PINK) 
        vector3_lab.move_to(self.graph_origin+2*XTD*RIGHT+ 1.5*YTD*UP)
        vector3_lab.scale(0.8)
        

        self.play(ShowCreation(graph))
        self.play(ShowCreation(point1), Write(point1_lab))
        self.play(ShowCreation(point2), Write(point2_lab))

        self.play(GrowArrow(vector1),Write(vector1_lab))
        self.play(GrowArrow(vector2),Write(vector2_lab))
        self.play(GrowArrow(vector3),Write(vector3_lab))
        self.wait(1)

        self.display_text()

        self.play(ApplyMethod(vector3_lab.move_to,(self.graph_origin+2.3*XTD*RIGHT+ 2.2*YTD*UP)))

        vector4 = Arrow(self.graph_origin+1*YTD*UP + 1*XTD*RIGHT, self.graph_origin+1*YTD*UP + 1.5*XTD*RIGHT, buff=0.02, color = PURPLE)
        vector4_lab = TextMobject(r"$dx$", color = PURPLE) 
        vector4_lab.move_to(self.graph_origin+1.7*XTD*RIGHT+ 0.8*YTD*UP)
        vector4_lab.scale(0.7)

        vector5 = Arrow(self.graph_origin+1*YTD*UP + 1.5*XTD*RIGHT, self.graph_origin+2.25*YTD*UP + 1.5*XTD*RIGHT, buff=0.02, color = ORANGE)
        vector5_lab = TextMobject(r"$dy$", color = ORANGE) 
        vector5_lab.move_to(self.graph_origin+1.7*XTD*RIGHT+ 1.4*YTD*UP)
        vector5_lab.scale(0.7)

        self.play(GrowArrow(vector4),Write(vector4_lab))
        self.play(GrowArrow(vector5),Write(vector5_lab))
        self.wait(2)

        

    def display_text(self):
        text1 = TextMobject(r"$\vec r(t)$",r"+", r"$\vec r(t + h) - \vec r(t)$")
        text1[0].set_color(RED)
        text1[2].set_color(PINK)
        text1.scale(0.7)

        text2 = TextMobject(r"$\vec r(t + h)$", color = YELLOW_C)
        text2.scale(0.7)

        text3 = TextMobject(r"$ \vec r(t + h) - \vec r(t)$", color = PINK)
        text3.scale(0.7)

        text4 = TextMobject(r"[", r"$x(t+h)$", r"$\vec i$", r"+", r"$y(t+h)$", r"$\vec j$", r"$]  - [$", r"$x(t)$", r"$\vec i$", r"+", r"y(t)", r"$\vec j$", r"]")
        text4.set_color_by_tex(r"\vec i", BLUE)
        text4.set_color_by_tex(r"\vec j", GREEN)
        text4[1].set_color(YELLOW_C)
        text4[4].set_color(YELLOW_C)
        text4[-6].set_color(RED)
        text4[-3].set_color(RED)
        text4.scale(0.7)

        text5 = TextMobject(r"$[x(t+h) - x(t)]$", r"$\vec i$", r"+", r"$[y(t+h) + y(t)]$", r"$\vec j$")
        text5.set_color_by_tex(r"\vec i", BLUE)
        text5.set_color_by_tex(r"\vec j", GREEN)
        text5[0].set_color(PURPLE)
        text5[3].set_color(ORANGE)
        text5.scale(0.7)

        text6 = TextMobject(r"$\frac{[\vec r(t + h) - \vec r(t)]}{h}$", r"=", r"$\frac{[x(t+h) - x(t)]}{h}$", r"$\vec i$", r"+", r"$\frac{[y(t+h) + y(t)]}{h}$", r"$\vec j$")
        text6.set_color_by_tex(r"\vec i", BLUE)
        text6.set_color_by_tex(r"\vec j", GREEN)
        text6[0].set_color(PINK)
        text6[2].set_color(PURPLE)
        text6[-2].set_color(ORANGE)
        text6.scale(0.8)

        text7 = TextMobject(r"$\lim_{h \rightarrow 0}$", r"$\frac{[\vec r(t + h) - \vec r(t)]}{h}$", r"=", r"$\lim_{h \rightarrow 0}$", r"$\frac{[x(t+h) - x(t)]}{h}$", r"$\vec i$", r"+", r"$\lim_{h \rightarrow 0}$", r"$\frac{[y(t+h) + y(t)]}{h}$", r"$\vec j$")
        text7.set_color_by_tex(r"\vec i", BLUE)
        text7.set_color_by_tex(r"\vec j", GREEN)
        text7[1].set_color(PINK)
        text7[4].set_color(PURPLE)
        text7[-2].set_color(ORANGE)
        text7.scale(0.6)

        text8 = TextMobject(r"$\vec r'(t)$", r"=",r"$\vec x'(t)$", r"$\vec i$", r"+", r"$\vec y'(t)$", r"$\vec j$")
        text8.set_color_by_tex(r"\vec i", BLUE)
        text8.set_color_by_tex(r"\vec j", GREEN)
        text8[0].set_color(PINK)
        text8[2].set_color(PURPLE)
        text8[5].set_color(ORANGE)
        text8.scale(0.7)

        text9 = TextMobject(r"$\frac{d \vec r}{dt}$", r"=", r"$\frac{d \vec x}{dt}$", r"$\vec i$", r"+", r"$\frac{d \vec y}{dt}$", r"$\vec j$")
        text9.set_color_by_tex(r"\vec i", BLUE)
        text9.set_color_by_tex(r"\vec j", GREEN)
        text9[0].set_color(PINK)
        text9[2].set_color(PURPLE)
        text9[5].set_color(ORANGE)
        text9.scale(0.7)


        text10 = TextMobject(r"$d \vec r$", r"=", r"$\frac{d \vec x}{dt}dt$", r"$\vec i$", r"+", r"$\frac{d \vec y}{dt}dt$", r"$\vec j$")
        text10.set_color_by_tex(r"\vec i", BLUE)
        text10.set_color_by_tex(r"\vec j", GREEN)
        text10[0].set_color(PINK)
        text10[2].set_color(PURPLE)
        text10[5].set_color(ORANGE)
        text10.scale(0.7)

        text11 = TextMobject(r"$d \vec r$", r"=", r"$x'(t)dt$", r"$\vec i$", r"+", r"$y'(t)dt$", r"$\vec j$")
        text11.set_color_by_tex(r"\vec i", BLUE)
        text11.set_color_by_tex(r"\vec j", GREEN)
        text11[0].set_color(PINK)
        text11[2].set_color(PURPLE)
        text11[5].set_color(ORANGE)
        text11.scale(0.7)

        text12 = TextMobject(r"$d \vec r$", r"=", r"$dx$", r"$\vec i$", r"+", r"$dy$", r"$\vec j$")
        text12.set_color_by_tex(r"\vec i", BLUE)
        text12.set_color_by_tex(r"\vec j", GREEN)
        text12[0].set_color(PINK)
        text12[2].set_color(PURPLE)
        text12[5].set_color(ORANGE)
        text12.scale(0.7)


        text1.move_to(1*UP+2.7*RIGHT)
        text2.move_to(1*UP+2.7*RIGHT)
        text3.move_to(1*UP+2.7*RIGHT)
        text4.move_to(1*UP+2.7*RIGHT)
        text5.move_to(1*UP+2.7*RIGHT)
        text6.move_to(1*UP+2.7*RIGHT)
        text7.move_to(1*UP+2.5*RIGHT)
        text8.move_to(1*UP+2.7*RIGHT)
        text9.move_to(1*UP+2.7*RIGHT)
        text10.move_to(1*UP+2.7*RIGHT)
        text11.move_to(1*UP+2.7*RIGHT)
        text12.move_to(1*UP+2.7*RIGHT)

        brace1 = Brace(text7[0:2], DOWN, buff = SMALL_BUFF)
        brace2 = Brace(text7[3:6], UP, buff = SMALL_BUFF)
        brace3 = Brace(text7[7:], DOWN, buff = SMALL_BUFF)
        t1 = brace1.get_text(r"$\vec r'(t)$")
        t1.set_color(PINK)

        t2 = brace2.get_text(r"$\vec x'(t)$")
        t2.set_color(PURPLE)

        t3 = brace3.get_text(r"$\vec y'(t)$")
        t3.set_color(ORANGE)


        self.play(Write(text1))
        self.play(Transform(text1, text2))
        self.wait(1)

        self.play(Transform(text1, text3))
        self.wait(1)

        self.play(Transform(text1, text4))
        self.wait(1)

        self.play(Transform(text1, text5))
        self.wait(1)

        self.play(Transform(text1, text6))
        self.wait(1)

        self.play(Transform(text1, text7))
        self.wait(1)

        self.play(
            GrowFromCenter(brace1),
            FadeIn(t1),
            )
        self.wait()
        self.play(
            ReplacementTransform(brace1.copy(),brace2),
            ReplacementTransform(t1.copy(),t2)
            )
        self.wait()
        self.play(
            ReplacementTransform(brace2.copy(),brace3),
            ReplacementTransform(t2.copy(),t3)
            )
        self.wait()

        self.play(FadeOut(brace1), FadeOut(t1), FadeOut(brace2), FadeOut(t2), FadeOut(brace3), FadeOut(t3),)
        self.wait()

        self.play(Transform(text1, text8))
        self.wait(1)

        self.play(Transform(text1, text9))
        self.wait(1)

        self.play(Transform(text1, text10))
        self.wait(1)

        self.play(Transform(text1, text11))
        self.wait(1)

        self.play(Transform(text1, text12))
        self.wait(1)