summaryrefslogtreecommitdiff
path: root/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers
diff options
context:
space:
mode:
authorPurusharth Saxena2020-06-30 02:25:46 +0530
committerGitHub2020-06-30 02:25:46 +0530
commit95b35efe6166fe145e44314e11e0a7d3ac638874 (patch)
tree200eb34921deaae1ba440420d852ad3e82c0b839 /FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers
parent8ad6529190a9ee7e3324b71b555c6807c2a8cf15 (diff)
parent6eaafd2b199661ba0b2221ed8f75bfc4c5e18514 (diff)
downloadFSF-mathematics-python-code-archive-95b35efe6166fe145e44314e11e0a7d3ac638874.tar.gz
FSF-mathematics-python-code-archive-95b35efe6166fe145e44314e11e0a7d3ac638874.tar.bz2
FSF-mathematics-python-code-archive-95b35efe6166fe145e44314e11e0a7d3ac638874.zip
Merge pull request #43 from vnb09/fsf_tasks
Updated animations
Diffstat (limited to 'FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers')
-rw-r--r--FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file1_Extrema_over_g(x,y)=k.gifbin499796 -> 595677 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file1_Extrema_over_g(x,y)=k.py18
-rw-r--r--FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file2_Geometric_Proof.gifbin419262 -> 0 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file2_Geometric_Proof.py48
4 files changed, 46 insertions, 20 deletions
diff --git a/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file1_Extrema_over_g(x,y)=k.gif b/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file1_Extrema_over_g(x,y)=k.gif
index 1e1782e..9d64d50 100644
--- a/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file1_Extrema_over_g(x,y)=k.gif
+++ b/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file1_Extrema_over_g(x,y)=k.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file1_Extrema_over_g(x,y)=k.py b/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file1_Extrema_over_g(x,y)=k.py
index 17f31ac..da17aac 100644
--- a/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file1_Extrema_over_g(x,y)=k.py
+++ b/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file1_Extrema_over_g(x,y)=k.py
@@ -1,14 +1,19 @@
from manimlib.imports import*
+import math as m
-class firstScene(ThreeDScene):
+#---- optimizing funtion f(x,y) w.r.t to g(x,y)
+class ConstrainedExtrema(ThreeDScene):
def construct(self):
- axes = ThreeDAxes()
+ axes = ThreeDAxes().fade(0.4)
+ label_x = TextMobject("$x$").shift([5.5,-0.5,0]).fade(0.4) #---- x axis
+ label_y = TextMobject("$y$").shift([-0.5,5.5,0]).rotate(-4.5).fade(0.4) #---- y axis
+
surface = ParametricSurface(
lambda u, v: np.array([
u,
v,
u**2+v**2+u**3-v**3
- ]),u_min=-0.5,u_max=0.5, v_min=-0.5,v_max=0.5).scale(5).shift([0,1,2.5]).set_color('#F0FFFF').fade(0.4)
+ ]),u_min=-0.5,u_max=0.5, v_min=-0.5,v_max=0.5).scale(5).shift([0,1,2.5]).set_color(TEAL).fade(0.4)
c = Circle().set_color('#FF00FF').shift([-0.4,0,1.5]).rotate(1.9,UP).scale(0.7)
@@ -26,10 +31,11 @@ class firstScene(ThreeDScene):
max_text = TextMobject("maximum over $g(x,y)=k$",color = '#FFA074').shift([-1.7,0,0]).scale(0.5).shift(2.2*UP)
min_text = TextMobject("minimum over $g(x,y)=k$",color = '#FFA074').shift([2.5,0.5,1]).scale(0.5).shift(0.5*UP)
label_f = TextMobject("$z=f(x,y)$",color = '#8A2BE2').scale(0.5).shift(3*UP+3*RIGHT)
- label_g = TextMobject("$g(x,y)=k$",color = '#8A2BE2').scale(0.5).shift(2*RIGHT)
-
+ label_g = TextMobject("$g(x,y)=k$",color = '#8A2BE2').scale(0.5).shift(2*RIGHT)
self.add(axes)
+ self.add(label_x)
+ self.add(label_y)
self.set_camera_orientation(phi=75*DEGREES,theta=45*DEGREES)
self.play(Write(surface))
self.add_fixed_in_frame_mobjects(label_f)
@@ -49,5 +55,3 @@ class firstScene(ThreeDScene):
self.play(Write(maxima_refl))
self.play(Write(minima_refl))
self.wait(1)
-
-
diff --git a/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file2_Geometric_Proof.gif b/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file2_Geometric_Proof.gif
deleted file mode 100644
index b22afb3..0000000
--- a/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file2_Geometric_Proof.gif
+++ /dev/null
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file2_Geometric_Proof.py b/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file2_Geometric_Proof.py
index 4374ff7..2c2a9de 100644
--- a/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file2_Geometric_Proof.py
+++ b/FSF-2020/calculus-of-several-variables/approximations-and-optimizations/Lagrange-Multipliers/file2_Geometric_Proof.py
@@ -1,8 +1,12 @@
from manimlib.imports import*
-class firstScene(ThreeDScene):
+#---- visualization of geometric proof of Lagrange multiplier
+class GeometricProof(ThreeDScene):
def construct(self):
- axes = ThreeDAxes().scale(0.7).rotate(math.radians(180))
+ axes = ThreeDAxes().scale(0.7).rotate(math.radians(180))
+ label_x = TextMobject("$x$").shift(4*RIGHT).fade(0.4) #---- x axis
+ label_y = TextMobject("$y$").shift(3.2*DOWN+0.2*RIGHT).rotate(math.radians(180)).fade(0.4) #---- y axis
+
surface = ParametricSurface(
lambda u, v: np.array([
1*np.sin(u)*np.cos(v),
@@ -11,15 +15,16 @@ class firstScene(ThreeDScene):
]),u_min=0,u_max=PI/2,v_min=0,v_max=2*PI,checkerboard_colors=[GREEN_C, GREEN_E]).scale(1).shift([-1.5,-1.5,0])
d = Dot([-2,-2.55,0],color = '#800000')
- a_df = Arrow(color = '#00FFFF').rotate(-2).shift(3.2*DOWN+2.3*LEFT) #---- f parallel to g
- a_dg = Arrow(color = '#FF00FF').scale(0.8).shift(3.2*DOWN+2.3*LEFT).rotate(-2) #---- f parallel to g
+ a_df = Arrow(color = '#00FFFF').rotate(-2).shift(3.2*DOWN+2.3*LEFT) #---- f parallel to g at maxima
+ a_dg = Arrow(color = '#FF00FF').scale(0.8).shift(3.2*DOWN+2.3*LEFT).rotate(-2) #---- g parallel to f at maxima
- b_df = Arrow(color = '#00FFFF').rotate(1.1).shift(0.82*LEFT+0.15*UP) #---- f parallel to g
- b_dg = Arrow(color = '#FF00FF').scale(0.6).rotate(-2).shift(1.43*LEFT+1.1*DOWN) #---- f parallel to g
+ b_dg = Arrow(color = '#00FFFF').rotate(1.1).shift(0.82*LEFT+0.15*UP) #---- g parallel to f at minima
+ b_df = Arrow(color = '#FF00FF').scale(0.6).rotate(-2).shift(1.43*LEFT+1.1*DOWN) #---- f parallel to g at minima
qd = Dot(color = '#800000').shift(1.2*LEFT+0.6*DOWN)
+ #---- level curves
l1 = Line([-1,-3.1,0],[-4,-3.1,0],color = PINK).rotate(-0.3).fade(0.6)
l2 = Line([-0.9,-2.9,0],[-4,-2.9,0],color = PINK).rotate(-0.3).fade(0.6)
l3= Line([-0.8,-2.7,0],[-4,-2.7,0],color = PINK).rotate(-0.3).fade(0.6)
@@ -36,19 +41,36 @@ class firstScene(ThreeDScene):
l14= Line([-0,-0.35,0],[-4,-0.35,0],color = PINK).rotate(-0.3).fade(0.6)
l15= Line([-0.,-0.15,0],[-4,-0.15,0],color = PINK).rotate(-0.3).fade(0.6)
- level_Curve = VGroup(l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12,l13,l14,l15)
-
rel_text = TextMobject("$\\nabla f = \\lambda \\nabla g$",color = TEAL).shift([3,3.2,0]).scale(0.5)
f_text = TextMobject("$\\nabla f$",color = '#800000').shift([1,1,0]).scale(0.5)
g_text = TextMobject("$\\nabla g$").shift([1.2,-0.8,0]).scale(0.5)
p_text= TextMobject("$P$").shift([1.8,2.6,0]).scale(0.5)
-
-
- self.add(axes)
+ #---- labelling of level curves
+ l1_text = TextMobject("$w=$ 17").rotate(math.radians(180)).scale(0.4).shift(2.7*DOWN+4.36*LEFT)
+ l2_text = TextMobject("$w=$ 16").rotate(math.radians(180)).scale(0.4).shift(2.46*DOWN+4.36*LEFT)
+ l3_text = TextMobject("$w=$ 15").rotate(math.radians(180)).scale(0.4).shift(2.2*DOWN+4.36*LEFT)
+ l4_text = TextMobject("$w=$ 14").rotate(math.radians(180)).scale(0.4).shift(1.97*DOWN+4.36*LEFT)
+ l5_text = TextMobject("$w=$ 13").rotate(math.radians(180)).scale(0.4).shift(1.74*DOWN+4.36*LEFT)
+ l6_text = TextMobject("$w=$ 12").rotate(math.radians(180)).scale(0.4).shift(1.5*DOWN+4.36*LEFT)
+ l7_text = TextMobject("$w=$ 11").rotate(math.radians(180)).scale(0.4).shift(1.26*DOWN+4.36*LEFT)
+ l8_text = TextMobject("$w=$ 10").rotate(math.radians(180)).scale(0.4).shift(1.05*DOWN+4.36*LEFT)
+ l9_text = TextMobject("$w=$ 9").rotate(math.radians(180)).scale(0.4).shift(0.8*DOWN+4.32*LEFT)
+ l10_text = TextMobject("$w=$ 8").rotate(math.radians(180)).scale(0.4).shift(0.6*DOWN+4.32*LEFT)
+ l11_text = TextMobject("$w=$ 7").rotate(math.radians(180)).scale(0.4).shift(0.4*DOWN+4.32*LEFT)
+ l12_text = TextMobject("$w=$ 6").rotate(math.radians(180)).scale(0.4).shift(0.2*DOWN+4.32*LEFT)
+ l13_text = TextMobject("$w=$ 5").rotate(math.radians(180)).scale(0.4).shift(-0.02*DOWN+4.32*LEFT)
+ l14_text = TextMobject("$w=$ 4").rotate(math.radians(180)).scale(0.4).shift(-0.23*DOWN+4.32*LEFT)
+ l15_text = TextMobject("$w=$ 3").rotate(math.radians(180)).scale(0.4).shift(-0.44*DOWN+4.32*LEFT)
+
+ level_Curve = VGroup(l1,l1_text,l2,l2_text,l3,l3_text,l4,l4_text,l5,l5_text,l6,l6_text,l7,l7_text,l8,l8_text,l9,l9_text,l10,l10_text,l11,l11_text,l12,l12_text,l13,l13_text,l14,l14_text,l15,l15_text)
+
self.set_camera_orientation(phi=0 * DEGREES, theta = 90*DEGREES)
+ self.add(axes)
+ self.add(label_x)
+ self.add(label_y)
self.play(Write(surface))
self.wait(1)
self.play(ShowCreation(level_Curve))
@@ -61,8 +83,8 @@ class firstScene(ThreeDScene):
self.play(Write(qd))
self.wait(1)
self.play(ShowCreation(b_df))
- self.play(ShowCreation(b_dg))
- self.wait(1)
self.add_fixed_in_frame_mobjects(f_text)
+ self.wait(1)
+ self.play(ShowCreation(b_dg))
self.add_fixed_in_frame_mobjects(g_text)
self.wait(1)