summaryrefslogtreecommitdiff
path: root/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file9_left_null_space.py
blob: 61285be5cb3fba953b3d09a1189b4d22a0f5a9d5 (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
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))