summaryrefslogtreecommitdiff
path: root/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces
diff options
context:
space:
mode:
Diffstat (limited to 'FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces')
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/README.md30
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file10_Left_Null_Space_pSv8iio_d5Sy9qS.gifbin0 -> 1744023 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file11.gifbin0 -> 2669469 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file12.gifbin0 -> 14917563 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file13.gifbin0 -> 4257387 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file14.gifbin0 -> 28796385 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file15.gifbin0 -> 16130920 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file16.gifbin0 -> 15623398 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file17.gifbin0 -> 15546537 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file18_NOT_in_lecture_note_Column_Space.py30
-rwxr-xr-xFSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file1_Axb.py77
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file2_CSasImage.py169
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file3_solution.py77
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file4_null_space.py91
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file5_Row_Space_part_1.py68
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file6_Row_Space_part_2.py145
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file7_Row_space_Orthogonal_Complements.py150
-rwxr-xr-xFSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file8_Left_Null_Space.py26
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file9_left_null_space.py186
19 files changed, 1049 insertions, 0 deletions
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/README.md b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/README.md
new file mode 100644
index 0000000..6c90bf4
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/README.md
@@ -0,0 +1,30 @@
+# Contributer: Archit Sangal
+My Github Account : <a href="https://github.com/architsangal">architsangal</a> (https://github.com/architsangal)
+<br/></br>
+
+## Sub-Topics Covered:
++ The Four Fundamental Subspaces
+
+#### Video 1: Writing System of linear equations in form of Ax=b
+![GIF1](file11.gif)
+
+#### Video 2: Column Space is same as the image of Linear Transformation
+![GIF2](file14.gif)
+
+#### Video 3: Existance of Solution w.r.t. vector b
+![GIF3](file17.gif)
+
+#### Video 4: Null Space (Visually)
+![GIF4](file12.gif)
+
+#### Video 5: Definition 1 is equivalent to Definition 2
+![GIF5](file13.gif)
+
+#### Video 6: Relation between Row Space and Null Space
+![GIF6](file16.gif)
+
+#### Fig. 1 Naming of the left null space
+![GIF7](file10_Left_Null_Space_pSv8iio_d5Sy9qS.gif)
+
+#### Video 7: Left Null Space(Visually)
+![GIF8](file15.gif) \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file10_Left_Null_Space_pSv8iio_d5Sy9qS.gif b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file10_Left_Null_Space_pSv8iio_d5Sy9qS.gif
new file mode 100644
index 0000000..3f50635
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file10_Left_Null_Space_pSv8iio_d5Sy9qS.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file11.gif b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file11.gif
new file mode 100644
index 0000000..8f74202
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file11.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file12.gif b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file12.gif
new file mode 100644
index 0000000..aa7403b
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file12.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file13.gif b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file13.gif
new file mode 100644
index 0000000..34b54c7
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file13.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file14.gif b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file14.gif
new file mode 100644
index 0000000..b77791b
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file14.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file15.gif b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file15.gif
new file mode 100644
index 0000000..8bb24bf
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file15.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file16.gif b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file16.gif
new file mode 100644
index 0000000..87e0026
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file16.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file17.gif b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file17.gif
new file mode 100644
index 0000000..eec819a
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file17.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file18_NOT_in_lecture_note_Column_Space.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file18_NOT_in_lecture_note_Column_Space.py
new file mode 100644
index 0000000..afe4f9a
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file18_NOT_in_lecture_note_Column_Space.py
@@ -0,0 +1,30 @@
+from manimlib.imports import *
+
+class Column_Space(Scene):
+ def construct(self):
+
+ A = TextMobject(r"$A = $",r"$\left( \begin{array}{c c c} 1 & 2 & 1 \\ 1 & 3 & 1 \\ 2 & 1 & 4 \\ 3 & 2 & 3 \end{array} \right)$")
+ A.move_to(2*UP)
+ A[1].set_color(color = DARK_BLUE)
+ A.scale(0.75)
+
+ self.play(Write(A),run_time = 1)
+
+ CS_A = TextMobject(r"Column Space of $A = x_{1}$",r"$\left( \begin{array}{c} 1 \\ 1 \\ 2 \\ 3 \end{array} \right)$",r"$+x_{2}$",r"$ \left( \begin{array}{c} 2 \\ 3 \\ 1 \\ 2 \end{array} \right)$",r"$ + x_{3}$",r"$\left( \begin{array}{c} 1 \\ 1 \\ 4 \\ 3 \end{array} \right)$")
+ CS_A.move_to(1.5*LEFT+1*DOWN)
+ CS_A[1].set_color(color = DARK_BLUE)
+ CS_A[3].set_color(color = DARK_BLUE)
+ CS_A[5].set_color(color = DARK_BLUE)
+ CS_A.scale(0.75)
+
+ self.play(Write(CS_A),run_time = 2)
+
+ arrow1 = Arrow(start = 1.25*UP,end = 0.25*DOWN+1.75*LEFT)
+ arrow2 = Arrow(start = 1.35*UP+0.5*RIGHT,end = 0.25*DOWN+0.5*RIGHT)
+ arrow3 = Arrow(start = 1.25*UP+0.75*RIGHT,end = 0.25*DOWN+2.9*RIGHT)
+
+ Defn = TextMobject("Linear Combination of Columns of Matrix")
+ Defn.move_to(3*DOWN)
+
+ self.play(Write(Defn), ShowCreation(arrow1), ShowCreation(arrow2), ShowCreation(arrow3),run_time = 1)
+ self.wait(1) \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file1_Axb.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file1_Axb.py
new file mode 100755
index 0000000..95d1021
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file1_Axb.py
@@ -0,0 +1,77 @@
+from manimlib.imports import *
+
+class Axb(Scene):
+
+ def construct(self):
+
+ text0 = TextMobject("Linear System Of Equations")
+ text1 = TextMobject(r"$x_{1}+x_{2}+x_{3} =b_{1}$")
+ text2 = TextMobject(r"$x_{1}+2x_{2}+x_{3} =b_{2}$")
+ text3 = TextMobject(r"$x_{1}+x_{2}+3x_{3} =b_{3}$")
+ text0.move_to(UP*2+LEFT*2)
+ text0.set_color(DARK_BLUE)
+ text1.move_to(UP)
+ text2.move_to(ORIGIN)
+ text3.move_to(DOWN)
+
+ text0.scale(0.75)
+ text1.scale(0.75)
+ text2.scale(0.75)
+ text3.scale(0.75)
+ self.play(Write(text0))
+ self.play(Write(text1))
+ self.play(Write(text2))
+ self.play(Write(text3))
+ self.play(ApplyMethod(text0.move_to,3*UP+LEFT*2), ApplyMethod(text1.move_to,2.5*UP), ApplyMethod(text2.move_to,2*UP), ApplyMethod(text3.move_to,1.5*UP))
+
+ A = TextMobject(r"$\left( \begin{array}{c c c} 1 & 1 & 1 \\ 1 & 2 & 1 \\ 1 & 1 & 3 \end{array}\right) \left[ \begin{array} {c} x_{1} \\ x_{2} \\ x_{3} \end{array}\right] =$", r"$\left[ \begin{array}{c} x_{1}+x_{2}+x_{3} \\ x_{1}+2x_{2}+x_{3} \\ x_{1}+x_{2}+3x_{3} \end{array}\right]$")
+ A.scale(0.75)
+ self.play(FadeIn(A))
+
+ textA = TextMobject("A")
+ textx = TextMobject("x")
+ textb = TextMobject("Ax")
+
+ textA.move_to(DOWN+3*LEFT)
+ textx.move_to(1.1*DOWN+0.5*LEFT)
+ textb.move_to(DOWN-2*LEFT)
+
+ self.play(Write(textA), Write(textx), Write(textb))
+
+ circle1 = Circle(radius = 0.24)
+ circle2 = Circle(radius = 0.24)
+ square = Square(side_length = 0.6)
+
+ circle1.move_to(UP*0.5+LEFT*3.05)
+ circle2.move_to(UP*0.4+LEFT*0.5)
+ square.move_to(UP*0.4+RIGHT*1.3)
+
+ self.play(FadeIn(circle1), FadeIn(circle2),FadeIn(square))
+
+ self.play(ApplyMethod(circle1.move_to,UP*0.5+LEFT*2.45), ApplyMethod(circle2.move_to,LEFT*0.5), ApplyMethod(square.move_to,UP*0.4+RIGHT*2.2))
+ self.play(ApplyMethod(circle1.move_to,UP*0.5+LEFT*1.85), ApplyMethod(circle2.move_to,DOWN*0.5+LEFT*0.5), ApplyMethod(square.move_to,UP*0.4+RIGHT*3.1))
+
+ self.play(ApplyMethod(circle1.move_to,LEFT*3.05), ApplyMethod(circle2.move_to,UP*0.4+LEFT*0.5), ApplyMethod(square.move_to,RIGHT*1.3))
+ self.play(ApplyMethod(circle1.move_to,LEFT*2.45), ApplyMethod(circle2.move_to,LEFT*0.5), ApplyMethod(square.move_to,RIGHT*2.2))
+ self.play(ApplyMethod(circle1.move_to,LEFT*1.85), ApplyMethod(circle2.move_to,DOWN*0.5+LEFT*0.5), ApplyMethod(square.move_to,RIGHT*3.1))
+
+ self.play(ApplyMethod(circle1.move_to,0.4*DOWN+LEFT*3.05), ApplyMethod(circle2.move_to,UP*0.4+LEFT*0.5), ApplyMethod(square.move_to,0.4*DOWN+RIGHT*1.3))
+ self.play(ApplyMethod(circle1.move_to,0.4*DOWN+LEFT*2.45), ApplyMethod(circle2.move_to,LEFT*0.5), ApplyMethod(square.move_to,0.4*DOWN+RIGHT*2.2))
+ self.play(ApplyMethod(circle1.move_to,0.4*DOWN+LEFT*1.85), ApplyMethod(circle2.move_to,DOWN*0.5+LEFT*0.5), ApplyMethod(square.move_to,0.4*DOWN+RIGHT*3.1))
+
+ self.play(FadeOut(circle1), FadeOut(circle2), FadeOut(square))
+ self.play(FadeOut(A[0]), ApplyMethod(A[1].move_to,2*LEFT),ApplyMethod(textb.move_to,DOWN+1.7*LEFT), FadeOut(textx), FadeOut(textA))
+ b = TextMobject(r"$=\left[ \begin{array}{c} b_{1} \\ b_{2} \\ b_{3} \end{array}\right]$")
+ b.move_to(RIGHT)
+ textB = TextMobject("b")
+ textB.move_to(1.2*DOWN+1.1*RIGHT)
+ self.play(FadeIn(b),FadeIn(textB))
+
+ self.wait()
+
+ self.play(FadeOut(text0), FadeOut(text1), FadeOut(text2), FadeOut(text3))
+
+ axb = TextMobject("Ax = b")
+ self.play(FadeIn(axb), FadeOut(textb), FadeOut(textB), FadeOut(b), FadeOut(A[1]))
+
+ self.wait() \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file2_CSasImage.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file2_CSasImage.py
new file mode 100644
index 0000000..70547cb
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file2_CSasImage.py
@@ -0,0 +1,169 @@
+from manimlib.imports import *
+
+class Column_Space(Scene):
+ def construct(self):
+
+ A = TextMobject(r"$A = $",r"$\left( \begin{array}{c c} 1 & 2 \\ 3 & 4 \end{array} \right)$")
+ A.move_to(2*UP)
+ A[1].set_color(color = DARK_BLUE)
+ A.scale(0.75)
+
+ self.play(Write(A),run_time = 1)
+
+ CS_A = TextMobject(r"Column Space of $A = x_{1}$",r"$\left( \begin{array}{c} 1 \\ 3 \end{array} \right)$",r"$+x_{2}$",r"$ \left( \begin{array}{c} 2 \\ 4\end{array} \right)$")
+ CS_A.move_to(1.5*LEFT+1*DOWN)
+ CS_A[1].set_color(color = DARK_BLUE)
+ CS_A[3].set_color(color = DARK_BLUE)
+ CS_A.scale(0.75)
+
+ self.play(Write(CS_A),run_time = 2)
+
+ arrow1 = Arrow(start = 1.25*UP,end = (0.25*DOWN+1.75*LEFT+0.25*DOWN+1.2*RIGHT)/2)
+ arrow3 = Arrow(start = 1.25*UP+0.75*RIGHT,end = (0.25*DOWN+2.9*RIGHT+0.25*DOWN)/2)
+
+ arrow1.scale(1.5)
+ arrow3.scale(1.5)
+
+ Defn = TextMobject("Linear Combination of Columns of Matrix")
+ Defn.move_to(3*DOWN)
+
+ self.play(Write(Defn), ShowCreation(arrow1), ShowCreation(arrow3),run_time = 1)
+ self.wait(1)
+
+class solution(LinearTransformationScene):
+ def construct(self):
+
+ self.setup()
+ self.wait()
+
+ o = TextMobject(r"Consider the vector space $R^2$")
+ o.move_to(2*DOWN)
+ o.scale(0.75)
+ o.add_background_rectangle()
+ self.play(Write(o))
+ self.wait()
+ self.play(FadeOut(o))
+
+ A = TextMobject(r"Let $A$ be ",r"$\left[\begin{array}{c c} 1 & -1 \\ 1 & -1 \end{array}\right]$",r". $A$ denotes the matrix the of this linear transformation.")
+ A.move_to(2*DOWN)
+ A.scale(0.75)
+ A.add_background_rectangle()
+ self.play(Write(A))
+ matrix = [[1,-1],[1,-1]]
+ self.apply_matrix(matrix)
+ self.wait()
+ self.play(FadeOut(A))
+
+ o = TextMobject(r"This is the transformed vector space")
+ o.move_to(2*DOWN)
+ o.scale(0.75)
+ o.add_background_rectangle()
+ self.play(Write(o))
+ self.wait()
+ self.play(FadeOut(o))
+
+ texti = TextMobject(r"$\left[\begin{array}{c}1\\1\end{array}\right]$")
+ textj = TextMobject(r"$\left[\begin{array}{c}-1\\-1\end{array}\right]$")
+ texti.set_color(GREEN)
+ textj.set_color(RED)
+ texti.scale(0.7)
+ textj.scale(0.7)
+ texti.move_to(1.35*RIGHT+0.5*UP)
+ textj.move_to(-(1.5*RIGHT+0.5*UP))
+
+ text1 = TextMobject("[")
+ text2 = TextMobject(r"$\begin{array}{c} 1 \\ 1 \end{array}$")
+ text3 = TextMobject(r"$\begin{array}{c} -1 \\ -1 \end{array}$")
+ text4 = TextMobject("]")
+
+ text2.set_color(GREEN)
+ text3.set_color(RED)
+
+ text1.scale(2)
+ text4.scale(2)
+ text2.scale(0.7)
+ text3.scale(0.7)
+
+ text1.move_to(2.5*UP+6*LEFT)
+ text2.move_to(2.5*UP+5.75*LEFT)
+ text3.move_to(2.5*UP+5.25*LEFT)
+ text4.move_to(2.5*UP+5*LEFT)
+
+ self.play(Write(texti), Write(textj))
+ self.wait()
+ self.play(FadeIn(text1), Transform(texti,text2), Transform(textj,text3), FadeIn(text4))
+ self.wait()
+
+ o = TextMobject(r"Now, you can observe the Image of Linear Transformation")
+ o1 = TextMobject(r"and Column Space(i.e. span of columns of matrix $A$) are same")
+ o.move_to(2.5*DOWN)
+ o1.move_to(3*DOWN)
+ o.scale(0.75)
+ o1.scale(0.75)
+ o.add_background_rectangle()
+ o1.add_background_rectangle()
+ self.play(Write(o))
+ self.play(Write(o1))
+ self.wait()
+ self.play(FadeOut(o),FadeOut(o1))
+
+class solution2nd(LinearTransformationScene):
+ def construct(self):
+
+ self.setup()
+ self.wait()
+
+ arrow1 = Arrow(start = ORIGIN,end = 2*DOWN+RIGHT)
+ arrow2 = Arrow(start = ORIGIN,end = UP+LEFT)
+ arrow3 = Arrow(start = ORIGIN,end = 3*UP+4*RIGHT)
+ arrow1.set_color(YELLOW)
+ arrow2.set_color(ORANGE)
+ arrow3.set_color(PURPLE)
+ arrow1.scale(1.3)
+ arrow2.scale(1.5)
+ arrow3.scale(1.1)
+
+ self.play(ShowCreation(arrow1), ShowCreation(arrow2), ShowCreation(arrow3))
+
+ self.add_transformable_mobject(arrow1)
+ self.add_transformable_mobject(arrow2)
+ self.add_transformable_mobject(arrow3)
+ o = TextMobject(r"Consider any vector in the original vector space $R^2$")
+ o.move_to(2.5*DOWN)
+ o.scale(0.75)
+ o.add_background_rectangle()
+ self.play(Write(o))
+ self.wait()
+ self.play(FadeOut(o))
+
+ A = TextMobject(r"Let the matrix the of this linear transformation be $A$ =",r"$\left[\begin{array}{c c} 1 & -1 \\ 1 & -1 \end{array}\right]$",r" again.")
+ A.move_to(2*DOWN)
+ A.scale(0.75)
+ A.add_background_rectangle()
+ self.play(Write(A))
+ matrix = [[1,-1],[1,-1]]
+ self.apply_matrix(matrix)
+ self.wait()
+ self.play(FadeOut(A))
+
+ o = TextMobject(r"This is the transformed vector space")
+ o.move_to(2*DOWN)
+ o.scale(0.75)
+ o.add_background_rectangle()
+ self.play(Write(o))
+ self.wait()
+ self.play(FadeOut(o))
+
+ o = TextMobject(r"Each and every vector of original vector space $R^2$ will transform")
+ o1 = TextMobject(r"to this new vector space which is spanned by $\mathbf{CS}(A)$")
+ o.move_to(2.5*DOWN)
+ o1.move_to(3*DOWN)
+ o.scale(0.75)
+ o1.scale(0.75)
+ o.add_background_rectangle()
+ o1.add_background_rectangle()
+ self.play(Write(o))
+ self.play(Write(o1))
+ self.wait()
+ self.play(FadeOut(o))
+ self.play(FadeOut(o1)) \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file3_solution.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file3_solution.py
new file mode 100644
index 0000000..eb310f3
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file3_solution.py
@@ -0,0 +1,77 @@
+from manimlib.imports import *
+class solution(LinearTransformationScene):
+ def construct(self):
+
+ self.setup()
+ self.wait()
+
+ o = TextMobject(r"This is the original vector space $R^2$ (before Linear Transformation)")
+ o.move_to(3*DOWN)
+ o.scale(0.75)
+ o.add_background_rectangle()
+ self.play(Write(o))
+ self.wait()
+ self.play(FadeOut(o))
+
+ A = TextMobject(r"Consider the matrix the of this linear transformation $A$ = $\left[\begin{array}{c c} 1 & -1 \\ 1 & -1 \end{array}\right]$")
+ A.move_to(3*DOWN)
+ A.scale(0.75)
+ A.add_background_rectangle()
+ self.play(Write(A))
+ matrix = [[1,-1],[1,-1]]
+ self.apply_matrix(matrix)
+ self.wait()
+ self.play(FadeOut(A))
+
+ o = TextMobject(r"This is the transformed vector space")
+ o.move_to(3*DOWN)
+ o.scale(0.75)
+ o.add_background_rectangle()
+ self.play(Write(o))
+ self.wait()
+ self.play(FadeOut(o))
+
+ arrow2 = Arrow(start = ORIGIN, end = 2*DOWN+2*LEFT)
+ arrow2.set_color(PURPLE)
+ arrow2.scale(1.2)
+ self.play(ShowCreation(arrow2))
+ self.wait()
+
+ o1 = TextMobject("If the ","vector b"," lies in the transformed vector space")
+ o2 = TextMobject("(the line) then the solution exist")
+ o1.move_to(2.5*DOWN+2*RIGHT)
+ o1[1].set_color(PURPLE)
+ o2.move_to(3*DOWN+2.5*RIGHT)
+ o1.scale(0.75)
+ o2.scale(0.75)
+ o1.add_background_rectangle()
+ o2.add_background_rectangle()
+ self.play(Write(o1))
+ self.play(Write(o2))
+ self.wait()
+ self.play(FadeOut(o1), FadeOut(o2))
+
+ self.play(FadeOut(arrow2))
+
+ arrow1 = Arrow(start = ORIGIN, end = 2*UP+RIGHT)
+ arrow1.set_color(ORANGE)
+ arrow1.scale(1.3)
+ self.play(ShowCreation(arrow1))
+ self.wait()
+
+ o1 = TextMobject("If the ","vector b"," does lies in the transformed")
+ o2 = TextMobject("vector space then the does not solution exist")
+ o1.move_to(2.5*DOWN+2*RIGHT)
+ o1[1].set_color(ORANGE)
+ o2.move_to(3*DOWN+2.5*RIGHT)
+ o1.scale(0.75)
+ o2.scale(0.75)
+ o1.add_background_rectangle()
+ o2.add_background_rectangle()
+ self.play(Write(o1))
+ self.play(Write(o2))
+ self.wait()
+ self.play(FadeOut(o1), FadeOut(o2))
+
+ self.play(FadeOut(arrow1))
+ \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file4_null_space.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file4_null_space.py
new file mode 100644
index 0000000..3c52677
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file4_null_space.py
@@ -0,0 +1,91 @@
+from manimlib.imports import *
+class null_space(LinearTransformationScene):
+ def construct(self):
+
+ self.setup()
+ self.wait()
+
+ o = TextMobject(r"This is the original vector space $R^2$(before Linear Transformation)")
+ o.move_to(3*DOWN)
+ o.scale(0.75)
+ o.add_background_rectangle()
+ self.play(Write(o))
+ self.wait()
+ self.play(FadeOut(o))
+
+ o1 = TextMobject("Consider a set of vectors which are linear")
+ o2 = TextMobject(r"span of a particular vector $\left(\begin{array}{c} 1 \\ 1 \end{array}\right)$")
+ o1.move_to(2*DOWN+3*RIGHT)
+ o2.move_to(2.75*DOWN+3*RIGHT)
+ o1.scale(0.7)
+ o2.scale(0.7)
+ o1.add_background_rectangle()
+ o2.add_background_rectangle()
+ self.play(Write(o1))
+ self.play(Write(o2))
+
+ arrow = Arrow(start = ORIGIN, end = UP+RIGHT)
+ arrow1 = Arrow(start = ORIGIN, end = 2*(UP+RIGHT))
+ arrow2 = Arrow(start = ORIGIN, end = 3*(UP+RIGHT))
+ arrow3 = Arrow(start = ORIGIN, end = 4*(UP+RIGHT))
+ arrow4 = Arrow(start = ORIGIN, end = DOWN+LEFT)
+ arrow5 = Arrow(start = ORIGIN, end = 2*(DOWN+LEFT))
+ arrow6 = Arrow(start = ORIGIN, end = 3*(DOWN+LEFT))
+ arrow7 = Arrow(start = ORIGIN, end = 4*(DOWN+LEFT))
+
+ arrow.scale(1.5)
+ arrow1.scale(1.2)
+ arrow2.scale(1.15)
+ arrow3.scale(1.1)
+ arrow4.scale(1.5)
+ arrow5.scale(1.2)
+ arrow6.scale(1.15)
+ arrow7.scale(1.1)
+
+ self.play(ShowCreation(arrow),
+ ShowCreation(arrow1),
+ ShowCreation(arrow2),
+ ShowCreation(arrow3),
+ ShowCreation(arrow4),
+ ShowCreation(arrow5),
+ ShowCreation(arrow6),
+ ShowCreation(arrow7),
+ )
+
+ self.wait(2)
+ self.play(FadeOut(o1), FadeOut(o2))
+
+ self.add_transformable_mobject(arrow)
+ self.add_transformable_mobject(arrow1)
+ self.add_transformable_mobject(arrow2)
+ self.add_transformable_mobject(arrow3)
+ self.add_transformable_mobject(arrow4)
+ self.add_transformable_mobject(arrow5)
+ self.add_transformable_mobject(arrow6)
+ self.add_transformable_mobject(arrow7)
+
+ o1 = TextMobject("Notice, entire set of vectors which belongs to the vector")
+ o2 = TextMobject(r"subspace(Linear Span of $\left(\begin{array}{c} 1 \\ 1 \end{array}\right)$) transforms to zero")
+ o1.move_to(2*DOWN+2.5*RIGHT)
+ o2.move_to(2.75*DOWN+2.5*RIGHT)
+ o1.scale(0.7)
+ o2.scale(0.7)
+ o1.add_background_rectangle()
+ o2.add_background_rectangle()
+ self.play(Write(o1))
+ self.play(Write(o2))
+ self.wait()
+
+ matrix = [[1,-1],[1,-1]]
+ self.apply_matrix(matrix)
+ self.wait()
+
+ self.play(FadeOut(o1), FadeOut(o2))
+
+ o = TextMobject(r"Hence, the vector space formed by linear span of $\left(\begin{array}{c} 1 \\ 1 \end{array}\right)$ is the null space of $A$")
+ o.move_to(3*DOWN)
+ o.scale(0.75)
+ o.add_background_rectangle()
+ self.play(Write(o))
+ self.wait(2)
+ self.play(FadeOut(o), FadeOut(arrow), FadeOut(arrow1), FadeOut(arrow2), FadeOut(arrow3), FadeOut(arrow4), FadeOut(arrow5), FadeOut(arrow6), FadeOut(arrow7))
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file5_Row_Space_part_1.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file5_Row_Space_part_1.py
new file mode 100644
index 0000000..5259eb4
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file5_Row_Space_part_1.py
@@ -0,0 +1,68 @@
+from manimlib.imports import *
+class LS(Scene):
+ def construct(self):
+ text1 = TextMobject(r"Consider a matrix $A =$")
+ text2 = TextMobject(r"[")
+ text3 = TextMobject(r"$\begin{array}{c c} 1 & -2\end{array}$")
+ text4 = TextMobject(r"$\begin{array}{c c} 1 & -1\end{array}$")
+ text5 = TextMobject(r"]")
+
+ text2.scale(2)
+ text5.scale(2)
+
+ text1.set_color(DARK_BLUE)
+ text2.set_color(DARK_BLUE)
+ text3.set_color(PURPLE)
+ text4.set_color(YELLOW)
+ text5.set_color(DARK_BLUE)
+
+ text1.move_to(3.5*LEFT+3*UP+2*RIGHT)
+ text2.move_to(0.75*LEFT+3*UP+2*RIGHT)
+ text3.move_to(3.25*UP+2*RIGHT)
+ text4.move_to(2.75*UP+2*RIGHT)
+ text5.move_to(0.75*RIGHT+3*UP+2*RIGHT)
+
+ self.play(FadeIn(text1), FadeIn(text2), FadeIn(text3), FadeIn(text4), FadeIn(text5))
+ self.wait()
+
+ ttext1 = TextMobject(r"$A^T =$")
+ ttext2 = TextMobject(r"[")
+ ttext3 = TextMobject(r"$\begin{array}{c} 1 \\ -2\end{array}$")
+ ttext4 = TextMobject(r"$\begin{array}{c} 1 \\ -1\end{array}$")
+ ttext5 = TextMobject(r"]")
+
+ ttext2.scale(2)
+ ttext5.scale(2)
+
+ ttext1.set_color(DARK_BLUE)
+ ttext2.set_color(DARK_BLUE)
+ ttext3.set_color(PURPLE)
+ ttext4.set_color(YELLOW)
+ ttext5.set_color(DARK_BLUE)
+
+ ttext1.move_to(2*LEFT+1.5*UP+2*RIGHT)
+ ttext2.move_to(1*LEFT+1.5*UP+2*RIGHT)
+ ttext3.move_to(0.5*LEFT+1.5*UP+2*RIGHT)
+ ttext4.move_to(0.5*RIGHT+1.5*UP+2*RIGHT)
+ ttext5.move_to(1*RIGHT+1.5*UP+2*RIGHT)
+
+ self.play(FadeIn(ttext1), FadeIn(ttext2), FadeIn(ttext3), FadeIn(ttext4), FadeIn(ttext5))
+
+ rtext = TextMobject(r"Row Space of $A$ = Column Space of $A^T = a_1$",r"$\left[\begin{array}{c} 1 \\ -2\end{array}\right]$",r"$+a_2$",r"$\left[\begin{array}{c} 1 \\ -1\end{array}\right]$")
+ rtext[1].set_color(PURPLE)
+ rtext[3].set_color(YELLOW)
+ rtext.move_to(2*DOWN+1.5*LEFT)
+ rtext.scale(0.75)
+
+ self.play(Write(rtext))
+ self.wait()
+
+ arrow1 = Arrow(start = 1.5*RIGHT+UP, end = 1.25*(DOWN+RIGHT))
+ arrow2 = Arrow(start = 2.5*RIGHT+UP, end = 1.25*DOWN+3.25*RIGHT)
+ arrow1.scale(1.25)
+ arrow2.scale(1.25)
+ arrow1.set_color(PURPLE)
+ arrow2.set_color(YELLOW)
+
+ self.play(ShowCreation(arrow1), ShowCreation(arrow2))
+ self.wait(2)
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file6_Row_Space_part_2.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file6_Row_Space_part_2.py
new file mode 100644
index 0000000..b16a32a
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file6_Row_Space_part_2.py
@@ -0,0 +1,145 @@
+from manimlib.imports import *
+
+class Row_Space(Scene):
+ def construct(self):
+
+ Heading = TextMobject("Row Space")
+ defn1 = TextMobject("Definition 1: Row Space of a matrix is the linear combination of the rows of that matrix.")
+ defn2 = TextMobject("Definition 2: It is a vector space generated by a linear combination of the columns of $A^{T}$.")
+ equivalent = TextMobject(r"Definition 1 $\equiv$ Definition 2")
+
+ Heading.move_to(2*UP)
+ Heading.set_color(color = DARK_BLUE)
+
+ defn1.move_to(UP)
+ defn1.scale(0.75)
+
+ defn2.scale(0.75)
+
+ equivalent.move_to(DOWN)
+
+ self.play(Write(Heading))
+ self.play(Write(defn1))
+ self.play(Write(defn2))
+ self.play(Write(equivalent))
+
+ self.wait(2)
+ self.play(FadeOut(Heading),FadeOut(defn1),FadeOut(defn2),ApplyMethod(equivalent.move_to,2*UP))
+
+ how = TextMobject("Let us see, How?")
+ how.move_to(UP)
+ self.play(Write(how))
+ self.play(FadeOut(equivalent),FadeOut(how))
+
+ A = TextMobject(r"$A = $",r"$\left( \begin{array}{c c c} 1 & 2 & 1 \\ 1 & 3 & 1 \\ 2 & 1 & 4 \\ 3 & 2 & 3 \end{array} \right)$")
+ A.move_to(2*UP+3*LEFT)
+ A[1].set_color(color = DARK_BLUE)
+ A.scale(0.80)
+
+ self.play(Write(A))
+
+ rows = TextMobject(r"Rows of A $\rightarrow$",
+ r"$\left( \begin{array}{c c c} 1 & 2 & 1 \end{array} \right)$,",
+ r"$ \left( \begin{array}{c c c} 1 & 3 & 1 \end{array} \right)$,",
+ r"$\left( \begin{array}{c c c} 2 & 1 & 4 \end{array} \right)$,",
+ r"$ \left( \begin{array}{c c c} 3 & 2 & 3 \end{array} \right)$")
+ rows.scale(0.75)
+ rows[1:5].set_color(DARK_BLUE)
+ self.play(Write(rows))
+
+ ac_defn1 = TextMobject("According to Definition 1 : ")
+ ac_defn1.move_to(DOWN)
+
+ RS_A = TextMobject(r"Row Space of $A = x_{1}$",
+ r"$\left( \begin{array}{c c c} 1 & 2 & 1 \end{array} \right)$",
+ r"$+x_{2}$",
+ r"$ \left( \begin{array}{c c c} 1 & 3 & 1 \end{array} \right)$",
+ r"$ + x_{3}$",
+ r"$\left( \begin{array}{c c c} 2 & 1 & 4 \end{array} \right)$",
+ r"$+x_{4}$",
+ r"$ \left( \begin{array}{c c c} 3 & 2 & 3 \end{array} \right)$")
+ RS_A.move_to(DOWN+DOWN)
+ RS_A[6].move_to(2*DOWN+DOWN)
+ RS_A[7].move_to(2*DOWN+2*RIGHT+DOWN)
+ RS_A[1].set_color(color = DARK_BLUE)
+ RS_A[3].set_color(color = DARK_BLUE)
+ RS_A[5].set_color(color = DARK_BLUE)
+ RS_A[7].set_color(color = DARK_BLUE)
+ RS_A.scale(0.75)
+
+ self.play(FadeOut(rows[0]),Transform(rows[1],RS_A[1]),Transform(rows[2],RS_A[3]),Transform(rows[3],RS_A[5]),Transform(rows[4],RS_A[7]))
+ self.play(FadeIn(ac_defn1), Write(RS_A))
+ self.wait(1)
+
+ self.play(FadeOut(rows[1]), FadeOut(rows[2]), FadeOut(rows[3]), FadeOut(rows[4]), FadeOut(RS_A), FadeOut(ac_defn1))
+
+ A_T = TextMobject(r"$A^{T} = $",r"$\left( \begin{array}{c c c c} 1 & 1 & 2 & 3 \\ 2 & 3 & 1 & 2 \\ 1 & 1 & 4 & 3 \end{array} \right)$")
+ A_T.move_to(2*UP+3*RIGHT)
+ A_T[1].set_color(color = DARK_BLUE)
+ A_T.scale(0.80)
+
+ self.play(Write(A_T))
+
+ change1 = TextMobject(r"Rows of $A\equiv$ Columns of $A^{T}$")
+ change2 = TextMobject(r"Columns of $A\equiv$ Rows of $A^{T}$")
+ change2.move_to(DOWN)
+
+ change3 = TextMobject(r"Row Space of $A$ = Linear Combination of",r"Rows","of",r"A")
+ change3.move_to(2*DOWN)
+ change3[1].set_color(DARK_BLUE)
+ change3[3].set_color(DARK_BLUE)
+
+ self.play(Write(change1))
+ self.play(Write(change2))
+ self.play(Write(change3))
+
+ columns = TextMobject("Columns")
+ columns.scale(0.6)
+ columns.set_color(DARK_BLUE)
+ columns.move_to(2*DOWN+4.1*RIGHT)
+
+ a = TextMobject(r"$A^{T}$")
+ a.set_color(DARK_BLUE)
+ a.move_to(1.95*DOWN+5.6*RIGHT)
+
+ self.wait(0.5)
+
+ self.play(Transform(change3[1],columns), Transform(change3[3],a))
+
+ equal = TextMobject(r"= Column Space($A^{T}$)")
+ equal.move_to(3*DOWN+0.5*RIGHT)
+
+ self.play(Write(equal))
+
+ self.play(FadeOut(A_T), FadeOut(change1), FadeOut(change2), FadeOut(change3), FadeOut(A), FadeOut(equal))
+
+ ac_defn1.move_to(3*UP)
+ RS_A.move_to(1.5*UP)
+ RS_A[6].move_to(UP)
+ RS_A[7].move_to(UP+1.5*RIGHT)
+
+ self.play(Write(RS_A),FadeIn(ac_defn1))
+
+ CS_AT = TextMobject(r"Row Space of $A = x_{1}$",
+ r"$\left( \begin{array}{c} 1 \\ 2 \\ 1 \end{array} \right)$",
+ r"$+x_{2}$",
+ r"$ \left( \begin{array}{c} 1 \\ 3 \\ 1 \end{array} \right)$",
+ r"$ + x_{3}$",
+ r"$\left( \begin{array}{c} 2 \\ 1 \\ 4 \end{array} \right)$",
+ r"$+x_{4}$",
+ r"$ \left( \begin{array}{c} 3 \\ 2 \\ 3 \end{array} \right)$")
+ CS_AT.move_to(1.5*DOWN)
+ CS_AT[1].set_color(color = DARK_BLUE)
+ CS_AT[3].set_color(color = DARK_BLUE)
+ CS_AT[5].set_color(color = DARK_BLUE)
+ CS_AT[7].set_color(color = DARK_BLUE)
+ CS_AT.scale(0.75)
+
+ ac_defn2 = TextMobject("According to Definition 2 : ")
+ equivalent = TextMobject(r"Hence, Definition 1 $\equiv$ Definition 2")
+ equivalent.move_to(3*DOWN)
+
+ self.play(Write(CS_AT),FadeIn(ac_defn2))
+ self.play(Write(equivalent))
+
+ self.wait()
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file7_Row_space_Orthogonal_Complements.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file7_Row_space_Orthogonal_Complements.py
new file mode 100644
index 0000000..c81d370
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file7_Row_space_Orthogonal_Complements.py
@@ -0,0 +1,150 @@
+from manimlib.imports import *
+class row_space(LinearTransformationScene):
+ def construct(self):
+
+ self.setup()
+ self.wait()
+
+ o = TextMobject(r"This is the original vector space $R^2$(before Linear Transformation)")
+ o.move_to(DOWN)
+ o.scale(0.75)
+ o.add_background_rectangle()
+ self.play(Write(o))
+ self.wait()
+ self.play(FadeOut(o))
+
+ o1 = TextMobject("Consider a set of vectors which are linear")
+ o2 = TextMobject(r"span of a $\left(\begin{array}{c} 1 \\ 1 \end{array}\right)$i.e. the null space.")
+ o1.move_to(2*DOWN+3*RIGHT)
+ o2.move_to(2.75*DOWN+3*RIGHT)
+ o1.scale(0.7)
+ o2.scale(0.7)
+ o1.add_background_rectangle()
+ o2.add_background_rectangle()
+ self.play(Write(o1))
+ self.play(Write(o2))
+
+ arrow = Arrow(start = ORIGIN, end = UP+RIGHT)
+ arrow.set_color(YELLOW)
+ arrow1 = Arrow(start = ORIGIN, end = 2*(UP+RIGHT))
+ arrow1.set_color(YELLOW)
+ arrow2 = Arrow(start = ORIGIN, end = 3*(UP+RIGHT))
+ arrow2.set_color(YELLOW)
+ arrow3 = Arrow(start = ORIGIN, end = 4*(UP+RIGHT))
+ arrow3.set_color(YELLOW)
+ arrow4 = Arrow(start = ORIGIN, end = DOWN+LEFT)
+ arrow4.set_color(YELLOW)
+ arrow5 = Arrow(start = ORIGIN, end = 2*(DOWN+LEFT))
+ arrow5.set_color(YELLOW)
+ arrow6 = Arrow(start = ORIGIN, end = 3*(DOWN+LEFT))
+ arrow6.set_color(YELLOW)
+ arrow7 = Arrow(start = ORIGIN, end = 4*(DOWN+LEFT))
+ arrow7.set_color(YELLOW)
+
+ arrow.scale(1.5)
+ arrow1.scale(1.2)
+ arrow2.scale(1.15)
+ arrow3.scale(1.1)
+ arrow4.scale(1.5)
+ arrow5.scale(1.2)
+ arrow6.scale(1.15)
+ arrow7.scale(1.1)
+
+ self.play(ShowCreation(arrow),
+ ShowCreation(arrow1),
+ ShowCreation(arrow2),
+ ShowCreation(arrow3),
+ ShowCreation(arrow4),
+ ShowCreation(arrow5),
+ ShowCreation(arrow6),
+ ShowCreation(arrow7),
+ )
+
+ self.wait(2)
+ self.play(FadeOut(o1), FadeOut(o2))
+
+ o1 = TextMobject("Consider a set of vectors which are linear")
+ o2 = TextMobject(r"span of a $\left(\begin{array}{c} 1 \\ -1 \end{array}\right)$i.e. the row space.")
+ o1.move_to(2*DOWN+3*RIGHT)
+ o2.move_to(2.75*DOWN+3*RIGHT)
+ o1.scale(0.7)
+ o2.scale(0.7)
+ o1.add_background_rectangle()
+ o2.add_background_rectangle()
+ self.play(Write(o1))
+ self.play(Write(o2))
+
+ rarrow = Arrow(start = ORIGIN, end = -UP+RIGHT)
+ rarrow.set_color(PURPLE)
+ rarrow1 = Arrow(start = ORIGIN, end = 2*(-UP+RIGHT))
+ rarrow1.set_color(PURPLE)
+ rarrow2 = Arrow(start = ORIGIN, end = 3*(-UP+RIGHT))
+ rarrow2.set_color(PURPLE)
+ rarrow3 = Arrow(start = ORIGIN, end = 4*(-UP+RIGHT))
+ rarrow3.set_color(PURPLE)
+ rarrow4 = Arrow(start = ORIGIN, end = -DOWN+LEFT)
+ rarrow4.set_color(PURPLE)
+ rarrow5 = Arrow(start = ORIGIN, end = 2*(-DOWN+LEFT))
+ rarrow5.set_color(PURPLE)
+ rarrow6 = Arrow(start = ORIGIN, end = 3*(-DOWN+LEFT))
+ rarrow6.set_color(PURPLE)
+ rarrow7 = Arrow(start = ORIGIN, end = 4*(-DOWN+LEFT))
+ rarrow7.set_color(PURPLE)
+
+ rarrow.scale(1.5)
+ rarrow1.scale(1.2)
+ rarrow2.scale(1.15)
+ rarrow3.scale(1.1)
+ rarrow4.scale(1.5)
+ rarrow5.scale(1.2)
+ rarrow6.scale(1.15)
+ rarrow7.scale(1.1)
+
+ self.play(ShowCreation(rarrow),
+ ShowCreation(rarrow1),
+ ShowCreation(rarrow2),
+ ShowCreation(rarrow3),
+ ShowCreation(rarrow4),
+ ShowCreation(rarrow5),
+ ShowCreation(rarrow6),
+ ShowCreation(rarrow7),
+ )
+
+ self.wait(2)
+ self.play(FadeOut(o1), FadeOut(o2))
+
+ self.add_transformable_mobject(arrow)
+ self.add_transformable_mobject(arrow1)
+ self.add_transformable_mobject(arrow2)
+ self.add_transformable_mobject(arrow3)
+ self.add_transformable_mobject(arrow4)
+ self.add_transformable_mobject(arrow5)
+ self.add_transformable_mobject(arrow6)
+ self.add_transformable_mobject(arrow7)
+
+ self.add_transformable_mobject(rarrow)
+ self.add_transformable_mobject(rarrow1)
+ self.add_transformable_mobject(rarrow2)
+ self.add_transformable_mobject(rarrow3)
+ self.add_transformable_mobject(rarrow4)
+ self.add_transformable_mobject(rarrow5)
+ self.add_transformable_mobject(rarrow6)
+ self.add_transformable_mobject(rarrow7)
+
+ o1 = TextMobject("Notice, entire set of vectors which belong to the null space of $A$ transforms to zero")
+ o2 = TextMobject(r"and entire set of vectors which belong to the row space of $A$ transforms to column space of $A$.")
+ o1.move_to(2.5*DOWN)
+ o2.move_to(3.5*DOWN)
+ o1.scale(0.7)
+ o2.scale(0.7)
+ o1.add_background_rectangle()
+ o2.add_background_rectangle()
+ self.play(Write(o1))
+ self.play(Write(o2))
+ self.wait()
+
+ matrix = [[1,-1],[1,-1]]
+ self.apply_matrix(matrix)
+ self.wait(3)
+
+ self.play(FadeOut(o1), FadeOut(o2)) \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file8_Left_Null_Space.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file8_Left_Null_Space.py
new file mode 100755
index 0000000..fd05e75
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file8_Left_Null_Space.py
@@ -0,0 +1,26 @@
+from manimlib.imports import *
+
+class Left_Null_Space(Scene):
+ def construct(self):
+
+ A = TextMobject(r"Left Null Space of A")
+ A.move_to(3*UP)
+ defn = TextMobject(r"It is a vector space that consists of all the solution $x$ to the equation $A^{T}x=0$")
+ defn.move_to(2*UP)
+ defn.scale(0.75)
+ eqn1 = TextMobject(r"$A^{T}x=0 \cdots (i)$")
+ eqn1.move_to(UP)
+ self.play(Write(A), Write(defn), Write(eqn1),run_time=1)
+ statement = TextMobject(r"Taking transpose of eqn $(i)$")
+ eqn = TextMobject(r"$(A^{T}x)^{T}=0$")
+ eqn.move_to(DOWN)
+ eqn2 = TextMobject(r"$x^{T}(A^{T})^{T}=0$")
+ eqn2.move_to(DOWN)
+ eqn3 = TextMobject(r"$x^{T}A=0$")
+ eqn3.move_to(DOWN)
+ self.play(Write(statement),Write(eqn),run_time=1)
+ self.wait(0.5)
+ self.play(Transform(eqn,eqn2),run_time=1)
+ self.wait(0.5)
+ self.play(Transform(eqn,eqn3),run_time=1)
+ self.wait(0.5) \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file9_left_null_space.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file9_left_null_space.py
new file mode 100644
index 0000000..61285be
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file9_left_null_space.py
@@ -0,0 +1,186 @@
+from manimlib.imports import *
+class row_space(LinearTransformationScene):
+ def construct(self):
+
+ self.setup()
+ self.wait()
+
+ o = TextMobject(r"This is the original vector space $R^2$(before Linear Transformation)")
+ o.move_to(DOWN)
+ o.scale(0.75)
+ o.add_background_rectangle()
+ self.play(Write(o))
+ self.wait()
+ self.play(FadeOut(o))
+
+ o1 = TextMobject("Consider a set of vectors which are linear")
+ o2 = TextMobject(r"span of a $\left(\begin{array}{c} 1 \\ 1 \end{array}\right)$i.e. the null space.")
+ o1.move_to(2*DOWN+3*RIGHT)
+ o2.move_to(2.75*DOWN+3*RIGHT)
+ o1.scale(0.7)
+ o2.scale(0.7)
+ o1.add_background_rectangle()
+ o2.add_background_rectangle()
+ self.play(Write(o1))
+ self.play(Write(o2))
+
+ arrow = Arrow(start = ORIGIN, end = UP+RIGHT)
+ arrow.set_color(YELLOW)
+ arrow1 = Arrow(start = ORIGIN, end = 2*(UP+RIGHT))
+ arrow1.set_color(YELLOW)
+ arrow2 = Arrow(start = ORIGIN, end = 3*(UP+RIGHT))
+ arrow2.set_color(YELLOW)
+ arrow3 = Arrow(start = ORIGIN, end = 4*(UP+RIGHT))
+ arrow3.set_color(YELLOW)
+ arrow4 = Arrow(start = ORIGIN, end = DOWN+LEFT)
+ arrow4.set_color(YELLOW)
+ arrow5 = Arrow(start = ORIGIN, end = 2*(DOWN+LEFT))
+ arrow5.set_color(YELLOW)
+ arrow6 = Arrow(start = ORIGIN, end = 3*(DOWN+LEFT))
+ arrow6.set_color(YELLOW)
+ arrow7 = Arrow(start = ORIGIN, end = 4*(DOWN+LEFT))
+ arrow7.set_color(YELLOW)
+
+ arrow.scale(1.5)
+ arrow1.scale(1.2)
+ arrow2.scale(1.15)
+ arrow3.scale(1.1)
+ arrow4.scale(1.5)
+ arrow5.scale(1.2)
+ arrow6.scale(1.15)
+ arrow7.scale(1.1)
+
+ self.play(ShowCreation(arrow),
+ ShowCreation(arrow1),
+ ShowCreation(arrow2),
+ ShowCreation(arrow3),
+ ShowCreation(arrow4),
+ ShowCreation(arrow5),
+ ShowCreation(arrow6),
+ ShowCreation(arrow7),
+ )
+
+ self.wait(2)
+ self.play(FadeOut(o1), FadeOut(o2))
+
+ o1 = TextMobject("Consider a set of vectors which are linear")
+ o2 = TextMobject(r"span of a vector $\left(\begin{array}{c} 1 \\ -1 \end{array}\right)$i.e. the row space.")
+ o1.move_to(2*DOWN+3*RIGHT)
+ o2.move_to(2.75*DOWN+3*RIGHT)
+ o1.scale(0.7)
+ o2.scale(0.7)
+ o1.add_background_rectangle()
+ o2.add_background_rectangle()
+ self.play(Write(o1))
+ self.play(Write(o2))
+
+ rarrow = Arrow(start = ORIGIN, end = -UP+RIGHT)
+ rarrow.set_color(PURPLE)
+ rarrow1 = Arrow(start = ORIGIN, end = 2*(-UP+RIGHT))
+ rarrow1.set_color(PURPLE)
+ rarrow2 = Arrow(start = ORIGIN, end = 3*(-UP+RIGHT))
+ rarrow2.set_color(PURPLE)
+ rarrow3 = Arrow(start = ORIGIN, end = 4*(-UP+RIGHT))
+ rarrow3.set_color(PURPLE)
+ rarrow4 = Arrow(start = ORIGIN, end = -DOWN+LEFT)
+ rarrow4.set_color(PURPLE)
+ rarrow5 = Arrow(start = ORIGIN, end = 2*(-DOWN+LEFT))
+ rarrow5.set_color(PURPLE)
+ rarrow6 = Arrow(start = ORIGIN, end = 3*(-DOWN+LEFT))
+ rarrow6.set_color(PURPLE)
+ rarrow7 = Arrow(start = ORIGIN, end = 4*(-DOWN+LEFT))
+ rarrow7.set_color(PURPLE)
+
+ rarrow.scale(1.5)
+ rarrow1.scale(1.2)
+ rarrow2.scale(1.15)
+ rarrow3.scale(1.1)
+ rarrow4.scale(1.5)
+ rarrow5.scale(1.2)
+ rarrow6.scale(1.15)
+ rarrow7.scale(1.1)
+
+ self.play(ShowCreation(rarrow),
+ ShowCreation(rarrow1),
+ ShowCreation(rarrow2),
+ ShowCreation(rarrow3),
+ ShowCreation(rarrow4),
+ ShowCreation(rarrow5),
+ ShowCreation(rarrow6),
+ ShowCreation(rarrow7),
+ )
+
+ self.wait(2)
+ self.play(FadeOut(o1), FadeOut(o2))
+
+ self.add_transformable_mobject(arrow)
+ self.add_transformable_mobject(arrow1)
+ self.add_transformable_mobject(arrow2)
+ self.add_transformable_mobject(arrow3)
+ self.add_transformable_mobject(arrow4)
+ self.add_transformable_mobject(arrow5)
+ self.add_transformable_mobject(arrow6)
+ self.add_transformable_mobject(arrow7)
+
+ self.add_transformable_mobject(rarrow)
+ self.add_transformable_mobject(rarrow1)
+ self.add_transformable_mobject(rarrow2)
+ self.add_transformable_mobject(rarrow3)
+ self.add_transformable_mobject(rarrow4)
+ self.add_transformable_mobject(rarrow5)
+ self.add_transformable_mobject(rarrow6)
+ self.add_transformable_mobject(rarrow7)
+
+ matrix = [[1,-1],[1,-1]]
+ self.apply_matrix(matrix)
+ self.wait(3)
+
+ o1 = TextMobject("Consider a set of vectors which are linear span of a vector")
+ o2 = TextMobject(r"$\left(\begin{array}{c} 1 \\ -1 \end{array}\right)$ which is orthogonal to column space i.e. Left Null Space")
+ o1.move_to(2*DOWN)
+ o2.move_to(2.75*DOWN)
+ o1.scale(0.7)
+ o2.scale(0.7)
+ o1.add_background_rectangle()
+ o2.add_background_rectangle()
+ self.play(Write(o1))
+ self.play(Write(o2))
+
+ rarrow = Arrow(start = ORIGIN, end = -UP+RIGHT)
+ rarrow.set_color(YELLOW)
+ rarrow1 = Arrow(start = ORIGIN, end = 2*(-UP+RIGHT))
+ rarrow1.set_color(YELLOW)
+ rarrow2 = Arrow(start = ORIGIN, end = 3*(-UP+RIGHT))
+ rarrow2.set_color(YELLOW)
+ rarrow3 = Arrow(start = ORIGIN, end = 4*(-UP+RIGHT))
+ rarrow3.set_color(YELLOW)
+ rarrow4 = Arrow(start = ORIGIN, end = -DOWN+LEFT)
+ rarrow4.set_color(YELLOW)
+ rarrow5 = Arrow(start = ORIGIN, end = 2*(-DOWN+LEFT))
+ rarrow5.set_color(YELLOW)
+ rarrow6 = Arrow(start = ORIGIN, end = 3*(-DOWN+LEFT))
+ rarrow6.set_color(YELLOW)
+ rarrow7 = Arrow(start = ORIGIN, end = 4*(-DOWN+LEFT))
+ rarrow7.set_color(YELLOW)
+
+ rarrow.scale(1.5)
+ rarrow1.scale(1.2)
+ rarrow2.scale(1.15)
+ rarrow3.scale(1.1)
+ rarrow4.scale(1.5)
+ rarrow5.scale(1.2)
+ rarrow6.scale(1.15)
+ rarrow7.scale(1.1)
+
+ self.play(ShowCreation(rarrow),
+ ShowCreation(rarrow1),
+ ShowCreation(rarrow2),
+ ShowCreation(rarrow3),
+ ShowCreation(rarrow4),
+ ShowCreation(rarrow5),
+ ShowCreation(rarrow6),
+ ShowCreation(rarrow7),
+ )
+
+ self.wait(2)
+ self.play(FadeOut(o1), FadeOut(o2))