summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/README.md9
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/README.md14
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file1_area_under_func.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file1_area_under_func.gif)bin1277788 -> 1277788 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file2_volume_under_surface.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file2_volume_under_surface.gif)bin6614909 -> 6614909 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file3_y_limit_dependent_on_x.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file3_y_limit_dependent_on_x.gif)bin1165354 -> 1165354 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file4_non_rect_region.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file4_non_rect_region.gif)bin2529511 -> 2529511 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file5_elementary_area.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file5_elementary_area.gif)bin547368 -> 547368 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file6_doing_integration.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file6_doing_integration.gif)bin3349455 -> 3349455 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file7_int_process_of_example.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file7_int_process_of_example.gif)bin3031924 -> 3031924 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/README.md8
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file1_surface1.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file1_surface1.gif)bin3752052 -> 3752052 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file2_surface2.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file2_surface2.gif)bin3791121 -> 3791121 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file3.o_iteration_methods_checkpoint.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file3.o_iteration_methods_checkpoint.gif)bin465521 -> 465521 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file3_iteration_methods.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file3_iteration_methods.gif)bin1813461 -> 1813461 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file4_curvy_region.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file4_curvy_region.gif)bin1282583 -> 1282583 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/README.md6
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file1_grad_of_scalar_function.gifbin4012467 -> 0 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file1_grad_of_scalar_function.py55
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file2_line_int_independent_of_path.gifbin1403902 -> 0 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file2_line_int_independent_of_path.py2
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/gifs/file1_grad_of_scalar_function.gifbin0 -> 4058562 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/gifs/file2_line_int_independent_of_path.gifbin0 -> 1409001 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/gifs/file3_line_int_example.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file3_line_int_example.gif)bin1385308 -> 1385308 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/README.md13
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file1_scalar_line_int_as_sum.py12
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file2_scalar_line_integral.gifbin5612895 -> 0 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file2_scalar_line_integral.py18
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file4_vector_line_integral.py374
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file5_helix.py (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file4_helix.py)0
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file1_scalar_line_int_as_sum.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file1_scalar_line_int_as_sum.gif)bin1051018 -> 1058303 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file2_scalar_line_integral.gifbin0 -> 3301509 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file3_vector_line_int_as_sum.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file3_vector_line_int_as_sum.gif)bin1670998 -> 1670998 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file4_vector_line_integral.gifbin0 -> 2243758 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file5_helix.gif (renamed from FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file4_helix.gif)bin1237895 -> 1237895 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/README.md11
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file1_vector_fields.py350
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file2_grad_of_scalar_function.py320
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file3_constructing_vector_field.py196
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file4_slope_field.py247
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file1_vector_fields.gifbin0 -> 5384744 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file2_grad_of_scalar_function.gifbin0 -> 6913246 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file3_constructing_vector_field.gifbin0 -> 3838142 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file4_slope_field.gifbin0 -> 1860382 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/README.md4
-rw-r--r--FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file1_flux@_various_points.gifbin0 -> 4439959 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file1_flux@_various_points.py60
-rw-r--r--FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file2_different_valuesof_Div.gifbin0 -> 595705 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file2_different_valuesof_Div.py91
-rw-r--r--FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/README.md6
-rw-r--r--FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_circle.gifbin0 -> 3561130 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_circle.py43
-rw-r--r--FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_sphere.gifbin7695314 -> 0 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_sphere.py50
-rw-r--r--FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file2_mobius_strip.py81
-rw-r--r--FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file4_cube_surface.gifbin3620201 -> 14969816 bytes
-rw-r--r--FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file4_cube_surface.py174
-rw-r--r--FSF-2020/calculus/intro-to-calculus/introderivative/derivative1.py55
-rw-r--r--FSF-2020/calculus/intro-to-calculus/introderivative/derivative2.py78
-rw-r--r--FSF-2020/calculus/intro-to-calculus/introderivative/derivative3.py57
-rw-r--r--FSF-2020/calculus/intro-to-calculus/limit/Test1.py34
-rw-r--r--FSF-2020/calculus/intro-to-calculus/limit/Test2.py26
-rw-r--r--FSF-2020/calculus/intro-to-calculus/limit/limit1.py105
-rw-r--r--FSF-2020/calculus/intro-to-calculus/limit/limit3.py95
-rw-r--r--FSF-2020/calculus/intro-to-calculus/limit/limitdef.py73
-rw-r--r--FSF-2020/calculus/intro-to-calculus/riemannintegrals/README.md18
-rw-r--r--FSF-2020/calculus/intro-to-calculus/riemannintegrals/RiemannRectanglesAnimation.py64
-rw-r--r--FSF-2020/calculus/intro-to-calculus/riemannintegrals/mimi.py53
-rw-r--r--FSF-2020/calculus/intro-to-calculus/riemannintegrals/rierect1.py31
-rw-r--r--FSF-2020/calculus/intro-to-calculus/riemannintegrals/rierect2.py31
-rw-r--r--FSF-2020/calculus/intro-to-calculus/riemannintegrals/rierect3.py31
-rw-r--r--FSF-2020/calculus/series-and-transformations/Fourier Transform/README.md5
-rw-r--r--FSF-2020/calculus/series-and-transformations/Fourier Transform/gifs/file3.gifbin558677 -> 955375 bytes
-rw-r--r--FSF-2020/calculus/series-and-transformations/Fourier Transform/gifs/file6.gifbin0 -> 955375 bytes
-rw-r--r--FSF-2020/calculus/series-and-transformations/Fourier Transform/gifs/file7.gifbin0 -> 793582 bytes
-rw-r--r--FSF-2020/calculus/series-and-transformations/Fourier Transform/video1_DividingAToneIntoItsConstituents.py7
-rw-r--r--FSF-2020/calculus/series-and-transformations/Fourier Transform/video2_ColorsAnalogyForFourierSeries.py37
-rw-r--r--FSF-2020/calculus/series-and-transformations/Fourier Transform/video3_seriesVSTransform.py44
-rw-r--r--FSF-2020/calculus/series-and-transformations/Fourier Transform/video4_FourierSeriesOfSquarePulse.py13
-rw-r--r--FSF-2020/calculus/series-and-transformations/Power Series/README.md2
-rw-r--r--FSF-2020/calculus/series-and-transformations/Power Series/gifs/file4a_UniformConvergence.gifbin0 -> 476231 bytes
-rw-r--r--FSF-2020/calculus/series-and-transformations/Power Series/video2_convergence_of_a_function.py5
-rw-r--r--FSF-2020/calculus/series-and-transformations/Power Series/video3_radius_and_intervalOfConvergence.py7
-rw-r--r--FSF-2020/calculus/series-and-transformations/Power Series/video4_UniformConvergence.py24
-rw-r--r--FSF-2020/calculus/series-and-transformations/README.md11
-rw-r--r--FSF-2020/calculus/series-and-transformations/Taylor Series/README.md2
-rw-r--r--FSF-2020/calculus/series-and-transformations/Taylor Series/gifs/file2_TaylorExpansionGeneralForm.gifbin308980 -> 640160 bytes
-rw-r--r--FSF-2020/calculus/series-and-transformations/Taylor Series/gifs/file2a_TaylorExpansionGeneralForm.gifbin0 -> 640160 bytes
-rw-r--r--FSF-2020/calculus/series-and-transformations/Taylor Series/video1_Example_TaylorExpansion.py19
-rw-r--r--FSF-2020/calculus/series-and-transformations/Taylor Series/video2_TaylorExpansionGeneralForm.py97
-rw-r--r--FSF-2020/calculus/series-and-transformations/Taylor Series/video4_DivergentRemainder.py9
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Gram Schmidt Orthonormalization Process/file3_Non_Standard_Basis.py51
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/README.md18
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file1_introduction.py (renamed from FSF-2020/linear-algebra/linear-transformations/Gram Schmidt Orthonormalization Process/file_introduction.py)0
-rwxr-xr-xFSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file2_projections.py (renamed from FSF-2020/linear-algebra/linear-transformations/Gram Schmidt Orthonormalization Process/file1_projections.py)0
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file3_orthonormal.py (renamed from FSF-2020/linear-algebra/linear-transformations/Gram Schmidt Orthonormalization Process/file2_orthonormal.py)46
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file4_Non_Standard_Basis.py69
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file5.gifbin0 -> 17680572 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file6.gifbin0 -> 6343293 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file7.gifbin0 -> 603223 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file8.gifbin0 -> 1027000 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/README.md30
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file.txt3
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file10.gifbin0 -> 9471592 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file11.gifbin0 -> 52608896 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file12.gifbin0 -> 31583525 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file13.gifbin0 -> 3303032 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file14.gifbin0 -> 1389092 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file1_transformations.py34
-rwxr-xr-xFSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file2_before_matrix.py (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file_before_matrix.py)15
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file3_square.py (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/square.py)0
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Understand_Linear_Transformations_visually.py (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file2_Understand_Linear_Transformations_visually.py)0
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Uniform_Scaling.py (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file3_Uniform_Scaling.py)0
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_Horizontal_Shear.py (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Horizontal_Shear.py)0
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_Horizontal_Shear_gif.gif (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Horizontal_Shear_gif.gif)bin1566999 -> 1566999 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file7_Vertical_Shear.py (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Vertical_Shear.py)0
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file7_Vertical_Shear_gif.gif (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Vertical_Shear_gif.gif)bin1347079 -> 1347079 bytes
-rwxr-xr-xFSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file8_linear_transformation.py (renamed from FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_linear_transformation.py)0
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file9.gifbin0 -> 14973890 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/README.md15
-rwxr-xr-xFSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file1_orthogonal.py (renamed from FSF-2020/linear-algebra/linear-transformations/Orthonormal Basis/file1_orthogonal.py)0
-rwxr-xr-xFSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file2_sum_of_projections_part1.py (renamed from FSF-2020/linear-algebra/linear-transformations/Orthonormal Basis/file2_sum_of_projections_part1.py)6
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file3_sum_of_projections_part2.py (renamed from FSF-2020/linear-algebra/linear-transformations/Orthonormal Basis/file3_sum_of_projections_part2.py)46
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file4.gifbin0 -> 1733367 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file5.gifbin0 -> 5430037 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file6.gif (renamed from FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file2_mobius_strip.gif)bin20725583 -> 21739496 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/README.md7
-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.py (renamed from FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file1_Column_Space.py)0
-rwxr-xr-xFSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file1_Axb.py (renamed from FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/Axb.py)0
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file1_Column_Space.gifbin1182328 -> 0 bytes
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file2_CSasImage.py (renamed from FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/CSasImage.py)25
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file3_solution.py (renamed from FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/solution.py)30
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file4_null_space.py (renamed from FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/null_space.py)8
-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.py (renamed from FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file2_Row_Space.py)0
-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
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Rank-Nullity-Theorem/README.md9
-rw-r--r--FSF-2020/linear-algebra/linear-transformations/The-Rank-Nullity-Theorem/file2.gifbin0 -> 34430418 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Basis_of_a_dual_vector_space.py126
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Dual_Basis_Example.py97
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Dual_of_a_Cube.py38
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Duality_in_Sets.py25
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Linear_Functional.py29
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Basis_of_a_dual_vector_space.mp4bin0 -> 1001766 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Dual_Basis_Example.mp4bin0 -> 1075193 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Dual_of_a_Cube.mp4bin0 -> 1425728 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Duality_in_Sets.mp4bin0 -> 126824 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Linear_functional.mp4bin0 -> 261541 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/Function_Scalar_Multiplication.py62
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/Function_Space_Addition.py89
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/Integral_Properties.py77
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/gifs3/Addition_of_Functions.gifbin0 -> 510988 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/gifs3/Function_Space_Example.gifbin0 -> 1783321 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/gifs3/Scalar_Multiplicaton_of_Functions.gifbin0 -> 350289 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Conjugate_Symmetry_and_Positivity_of_Inner_Product.py141
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Inner_Product_Example.py182
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Inner_product.py28
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Instances_of_Topological_Spaces.py36
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Interpretation_of_Norm_as_Length.py42
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Linearity_of_Inner_Product.py28
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Projection-in-3D-space.py31
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Vector_Projection.py43
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Conjugate_Symmetry_and_Positivity_of_Inner_Product.mp4bin0 -> 2989426 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/InnerProduct.gifbin0 -> 219685 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Inner_Product_Space_Example.mp4bin0 -> 3881235 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Instances_of_Topological_Spaces.gifbin0 -> 513000 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Interpretation_of_norm_as_length.gifbin0 -> 98767 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Linerity_of_Inner_Product.mp4bin0 -> 3600375 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Projection.gifbin0 -> 1093343 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Projection_of_vectors_in-3D_plane.mp4bin0 -> 361410 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Basis.py174
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Intersection_of_Subspaces.py52
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Subspace_Example.py82
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Subspace_Non_Example.py25
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Basis_of_a_Subspace.mp4bin0 -> 10735096 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Intersection_of_Subspaces.mp4bin0 -> 1112086 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Subspace_Example.gifbin647405 -> 0 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Subspace_Non_Example.mp4bin0 -> 818876 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/Vector_Addition_and_Scalar_Multiplication.py177
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/Vector_Addition_and_Scaling.py137
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/gifs/Vector_Addition_and_Scalar_Multiplication.gifbin4954730 -> 0 bytes
-rw-r--r--FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/gifs/Vector_Addition_and_Scalar_Multiplication.mp4bin0 -> 2830120 bytes
192 files changed, 4946 insertions, 824 deletions
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/README.md b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/README.md
index 4de6c1d..9115c78 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/README.md
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/README.md
@@ -3,11 +3,12 @@ FSF2020--Somnath Pandit
# **Topics:**
## Double Integral
-
+Check the note [here](https://math.animations.fossee.in/contents/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals)
## Fubini's Theorem
-
+Check the note [here](https://math.animations.fossee.in/contents/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem)
## Line Integrals
-
+Check the note [here](https://math.animations.fossee.in/contents/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals)
## Fundamental Theorem of Line integrals
-
+Check the note [here](https://math.animations.fossee.in/contents/calculus-of-several-variables/div,-grad,-curl-and-all-that/the-fundamental-theorem-of-line-integrals)
## Vector Fields
+Check the note [here](https://math.animations.fossee.in/contents/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields)
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/README.md b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/README.md
index 5fa2146..f86f7e3 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/README.md
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/README.md
@@ -1,21 +1,21 @@
**file1_area_under_func**
-![file1_area_under_func](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file1_area_under_func.gif)
+![file1_area_under_func](gifs/file1_area_under_func.gif)
**file2_volume_under_surface**
-![file2_volume_under_surface](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file2_volume_under_surface.gif)
+![file2_volume_under_surface](gifs/file2_volume_under_surface.gif)
**file3_y_limit_dependent_on_x**
-![file3_y_limit_dependent_on_x](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file3_y_limit_dependent_on_x.gif)
+![file3_y_limit_dependent_on_x](gifs/file3_y_limit_dependent_on_x.gif)
**file4_non_rect_region**
-![file4_non_rect_region](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file4_non_rect_region.gif)
+![file4_non_rect_region](gifs/file4_non_rect_region.gif)
**file5_elementary_area**
-![file5_elementary_area](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file5_elementary_area.gif)
+![file5_elementary_area](gifs/file5_elementary_area.gif)
**file6_doing_integration**
-![file6_doing_integration](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file6_doing_integration.gif)
+![file6_doing_integration](gifs/file6_doing_integration.gif)
**file7_int_process_of_example**
-![file7_int_process_of_example](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file7_int_process_of_example.gif)
+![file7_int_process_of_example](gifs/file7_int_process_of_example.gif)
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file1_area_under_func.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file1_area_under_func.gif
index 223218b..223218b 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file1_area_under_func.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file1_area_under_func.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file2_volume_under_surface.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file2_volume_under_surface.gif
index 1455573..1455573 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file2_volume_under_surface.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file2_volume_under_surface.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file3_y_limit_dependent_on_x.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file3_y_limit_dependent_on_x.gif
index dcfacb6..dcfacb6 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file3_y_limit_dependent_on_x.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file3_y_limit_dependent_on_x.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file4_non_rect_region.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file4_non_rect_region.gif
index c8e7c8c..c8e7c8c 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file4_non_rect_region.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file4_non_rect_region.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file5_elementary_area.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file5_elementary_area.gif
index 5c9ac03..5c9ac03 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file5_elementary_area.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file5_elementary_area.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file6_doing_integration.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file6_doing_integration.gif
index 7a9271b..7a9271b 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file6_doing_integration.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file6_doing_integration.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file7_int_process_of_example.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file7_int_process_of_example.gif
index 9fbdde8..9fbdde8 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/file7_int_process_of_example.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/double-integrals/gifs/file7_int_process_of_example.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/README.md b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/README.md
index c1c6e8e..3aa9be2 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/README.md
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/README.md
@@ -1,14 +1,14 @@
**file1_surface1**
-![file1_surface1](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file1_surface1.gif)
+![file1_surface1](gifs/file1_surface1.gif)
**file2_surface2**
-![file2_surface2](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file2_surface2.gif)
+![file2_surface2](gifs/file2_surface2.gif)
**file3_iteration_methods**
-![file3_iteration_methods](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file3_iteration_methods.gif)
+![file3_iteration_methods](gifs/file3_iteration_methods.gif)
**file4_curvy_limits**
-![file4_curvy_limits](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file4_curvy_region.gif)
+![file4_curvy_limits](gifs/file4_curvy_region.gif)
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file1_surface1.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file1_surface1.gif
index 8c9fa0a..8c9fa0a 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file1_surface1.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file1_surface1.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file2_surface2.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file2_surface2.gif
index 37c4b1d..37c4b1d 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file2_surface2.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file2_surface2.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file3.o_iteration_methods_checkpoint.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file3.o_iteration_methods_checkpoint.gif
index 2e507f9..2e507f9 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file3.o_iteration_methods_checkpoint.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file3.o_iteration_methods_checkpoint.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file3_iteration_methods.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file3_iteration_methods.gif
index 4e1611b..4e1611b 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file3_iteration_methods.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file3_iteration_methods.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file4_curvy_region.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file4_curvy_region.gif
index b0620e5..b0620e5 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/file4_curvy_region.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fubini's-theorem/gifs/file4_curvy_region.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/README.md b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/README.md
index aa8c7f8..3cdddae 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/README.md
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/README.md
@@ -1,9 +1,9 @@
**file1_grad_of_scalar_function**
-![file1_grad_of_scalar_function](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file1_grad_of_scalar_function.gif)
+![file1_grad_of_scalar_function](gifs/file1_grad_of_scalar_function.gif)
**file2_line_int_independent_of_path**
-![file2_line_int_independent_of_path](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file2_line_int_independent_of_path.gif)
+![file2_line_int_independent_of_path](gifs/file2_line_int_independent_of_path.gif)
**file3_line_int_example**
-![file3_line_int_example](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file3_line_int_example.gif)
+![file3_line_int_example](gifs/file3_line_int_example.gif)
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file1_grad_of_scalar_function.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file1_grad_of_scalar_function.gif
deleted file mode 100644
index 5a6e102..0000000
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file1_grad_of_scalar_function.gif
+++ /dev/null
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file1_grad_of_scalar_function.py b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file1_grad_of_scalar_function.py
index c9f479c..fd3d9b5 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file1_grad_of_scalar_function.py
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file1_grad_of_scalar_function.py
@@ -1,6 +1,6 @@
from manimlib.imports import *
-class GradOfScalar(ThreeDScene):
+class GradOfScalarFunc(ThreeDScene):
CONFIG = {
"axes_config": {
@@ -27,7 +27,7 @@ class GradOfScalar(ThreeDScene):
"num_axis_pieces": 1,
},
"default_graph_style": {
- "stroke_width": 2,
+ "stroke_width": 5,
"stroke_color": WHITE,
},
"default_vector_field_config": {
@@ -38,8 +38,8 @@ class GradOfScalar(ThreeDScene):
"y_min": -3,
"y_max": 3,
"min_magnitude": 0,
- "max_magnitude": 2,
- "colors": [TEAL,GREEN,GREEN,GREEN,YELLOW,RED],
+ "max_magnitude": 3,
+ "colors": [TEAL,GREEN,YELLOW,RED],
"length_func": lambda norm : norm*np.exp(-.38*norm)/2,
"opacity": 1.0,
"vector_config": {
@@ -49,9 +49,9 @@ class GradOfScalar(ThreeDScene):
"default_surface_config": {
"fill_opacity": 0.5,
"checkerboard_colors": [BLUE_E],
- "stroke_width": .5,
+ "stroke_width": .2,
"stroke_color": WHITE,
- "stroke_opacity": 0.75,
+ "stroke_opacity": 0.5,
},
}
@@ -66,17 +66,24 @@ class GradOfScalar(ThreeDScene):
theta=-135 * DEGREES,
)
- scalar_fn_text=TexMobject("f(x,y,z)=","xy").set_color(BLUE)
+ scalar_fn_text=TexMobject("f(x,y)=","xy").set_color(BLUE)
scalar_fn_text.to_corner(UR,buff=.6)
operator=TexMobject("\\vec\\nabla").next_to(
scalar_fn_text,LEFT,buff=.2
).set_color(GOLD)
- grad_text=TexMobject(r"\dfrac{\partial f}{\partial x} \hat i+\dfrac{\partial f}{\partial y} \hat j+\dfrac{\partial f}{\partial z} \hat k").set_color(GOLD)
+
+ grad_text=TexMobject(r"\dfrac{\partial f}{\partial x} \hat i+\dfrac{\partial f}{\partial y} \hat j").set_color(GOLD)
grad_text.next_to(scalar_fn_text,DOWN).scale(.9)
- VGroup(grad_text[0][1],grad_text[0][9],grad_text[0][17]).set_color(BLUE)
- VGroup(grad_text[0][5:8],grad_text[0][13:16],grad_text[0][21:23]).set_color(WHITE)
+ VGroup(
+ grad_text[0][1],
+ grad_text[0][9]
+ ).set_color(BLUE)
+ VGroup(
+ grad_text[0][5:8],
+ grad_text[0][13:16]
+ ).set_color(WHITE)
vector_field_text=TexMobject("\\vec F=y\hat i+x\hat j").set_color_by_gradient(*self.default_vector_field_config["colors"])
vector_field_text.next_to(scalar_fn_text,DOWN)
@@ -108,30 +115,33 @@ class GradOfScalar(ThreeDScene):
self.play(Write(grad_text))
self.wait(2)
- self.play(FadeOut(grad_text))
- self.add_fixed_in_frame_mobjects(vector_field_text)
- show_vec_field=[
+
+ show_vects=[
FadeIn(v_field1),
- Write(vector_field_text),
]
self.begin_ambient_camera_rotation(rate=.2)
self.move_camera(
# distance=20,
phi=60 * DEGREES,
- added_anims=show_vec_field,
+ added_anims=show_vects,
run_time=4.5
)
-
+
+ self.play(FadeOut(grad_text))
self.wait(2)
self.stop_ambient_camera_rotation()
- fadeout= [FadeOut(s_field1)]
+ self.add_fixed_in_frame_mobjects(vector_field_text)
+ vector_field= [
+ FadeOut(s_field1),
+ Write(vector_field_text),
+ ]
self.move_camera(
# distance=20,
phi=0 * DEGREES,
theta=-90 * DEGREES,
- added_anims=fadeout,
+ added_anims=vector_field,
run_time=2
)
self.wait(2)
@@ -165,6 +175,7 @@ class GradOfScalar(ThreeDScene):
config.update(self.default_vector_field_config)
config.update(kwargs)
vector_field= VectorField(func,**config)
+ vector_field.move_to(self.axes.c2p(0,0,0))
self.vector_field=vector_field
if on_surface:
@@ -175,15 +186,14 @@ class GradOfScalar(ThreeDScene):
def get_vectors_on_surface(self):
- config = dict()
- config.update(self.default_vector_field_config["vector_config"])
vectors_on_surface = VGroup(*[
- self.vector_field.get_vector(point,**config)
+ self.vector_field.get_vector(point)
for point in self.surface_points
])
return vectors_on_surface
-
+
+
def get_surface(self, func, **kwargs):
axes=self.axes
@@ -305,4 +315,3 @@ class GradOfScalar(ThreeDScene):
-
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file2_line_int_independent_of_path.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file2_line_int_independent_of_path.gif
deleted file mode 100644
index 29c6d02..0000000
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file2_line_int_independent_of_path.gif
+++ /dev/null
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file2_line_int_independent_of_path.py b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file2_line_int_independent_of_path.py
index b9597b6..b8f7cfa 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file2_line_int_independent_of_path.py
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file2_line_int_independent_of_path.py
@@ -95,7 +95,7 @@ class LineIntegration(GraphScene):
def get_endpoints_of_curve(self):
points=[[-3,0],[2,2]]
- point_labels= ["P_i","P_f"]
+ point_labels= ["P_f","P_i"]
for point,label in zip(points,point_labels):
dot=Dot(self.coords_to_point(*point)).set_color(RED)
dot_label=TexMobject(label)
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/gifs/file1_grad_of_scalar_function.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/gifs/file1_grad_of_scalar_function.gif
new file mode 100644
index 0000000..1fd2e15
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/gifs/file1_grad_of_scalar_function.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/gifs/file2_line_int_independent_of_path.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/gifs/file2_line_int_independent_of_path.gif
new file mode 100644
index 0000000..8d375bb
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/gifs/file2_line_int_independent_of_path.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file3_line_int_example.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/gifs/file3_line_int_example.gif
index 20ed081..20ed081 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/file3_line_int_example.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/fundamental-theorem-of-line-integral/gifs/file3_line_int_example.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/README.md b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/README.md
index 17077b6..7e4299d 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/README.md
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/README.md
@@ -1,14 +1,15 @@
**file1_scalar_line_int_as_sum**
-![file1_scalar_line_int_as_sum](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file1_scalar_line_int_as_sum.gif)
+![file1_scalar_line_int_as_sum](gifs/file1_scalar_line_int_as_sum.gif)
**file2_scalar_line_integral**
-![file2_scalar_line_integral](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file2_scalar_line_integral.gif)
+![file2_scalar_line_integral](gifs/file2_scalar_line_integral.gif)
**file3_vector_line_int_as_sum**
-![file3_vector_line_int_as_sum](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file3_vector_line_int_as_sum.gif)
+![file3_vector_line_int_as_sum](gifs/file3_vector_line_int_as_sum.gif)
+**file4_vector_line_integral**
+![file4_vector_line_integral](gifs/file4_vector_line_integral.gif)
-
-**file4_helix**
-![file4_helix](https://github.com/panditsomnath10016git/FSF-mathematics-python-code-archive/blob/master/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file4_helix.gif)
+**file5_helix**
+![file5_helix](gifs/file5_helix.gif)
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file1_scalar_line_int_as_sum.py b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file1_scalar_line_int_as_sum.py
index e3f3574..af32ebf 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file1_scalar_line_int_as_sum.py
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file1_scalar_line_int_as_sum.py
@@ -155,17 +155,13 @@ class LineIntegrationAsSum(GraphScene):
sum_up_text.set_color_by_tex("summed",PURPLE)
sum_up_text.next_to(multiply_text,DOWN)
- dot.set_color(ORANGE).scale(1.2)
self.play(FadeIn(VGroup(
point_coord,dot
)))
self.play(Write(self.evaluate_text))
self.play(Write(func_val))
- self.play(FadeIn(VGroup(*[
- dot.set_color(ORANGE).scale(1.4)
- for dot in dots ]
- )))
+
self.wait(2)
self.remove(point_coord)
self.get_ds(dots,index)
@@ -182,7 +178,11 @@ class LineIntegrationAsSum(GraphScene):
func_val, RIGHT,buff=.2
))
self.play(Write(sum_up_text))
-
+ dot.set_color(ORANGE).scale(1.2)
+ self.play(FadeIn(VGroup(*[
+ dot.set_color(ORANGE).scale(1.4)
+ for dot in dots ]
+ )))
self.func_val=func_val
self.sum_text_group=VGroup(multiply_text,sum_up_text)
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file2_scalar_line_integral.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file2_scalar_line_integral.gif
deleted file mode 100644
index 71c97d6..0000000
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file2_scalar_line_integral.gif
+++ /dev/null
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file2_scalar_line_integral.py b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file2_scalar_line_integral.py
index 996ead1..200f768 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file2_scalar_line_integral.py
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file2_scalar_line_integral.py
@@ -47,8 +47,8 @@ class LineIntegrationProcess(SpecialThreeDScene):
axes=self.axes
self.set_camera_orientation(distance=35,
- phi=65 * DEGREES,
- theta=-65 * DEGREES,
+ phi=60 * DEGREES,
+ theta=-60 * DEGREES,
)
fn_text=TextMobject("$z=2+x^2y$").set_color(BLUE)
@@ -86,7 +86,14 @@ class LineIntegrationProcess(SpecialThreeDScene):
self.play(Write(area_text))
self.play(Write(self.area),run_time=2)
self.play(FadeOut(VGroup(surface,fn_text)))
- self.wait()
+ self.move_camera(
+ # distance=20,
+ phi=90 * DEGREES,
+ # theta=-90 * DEGREES,
+ # added_anims=into_graph,
+ run_time=2
+ )
+ self.wait(2)
self.stop_ambient_camera_rotation()
# self.get_lines()
@@ -307,7 +314,8 @@ class LineIntegrationProcess(SpecialThreeDScene):
line=DashedLine(start,end,color=color)
return line
-
+
+#-------------------------------------------------------
#customize 3D axes
def get_three_d_axes(self, include_labels=True, include_numbers=True, **kwargs):
config = dict(self.axes_config)
@@ -417,5 +425,3 @@ class LineIntegrationProcess(SpecialThreeDScene):
#uploaded by Somnath Pandit.FSF2020_Line_Integrals
-
-
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file4_vector_line_integral.py b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file4_vector_line_integral.py
new file mode 100644
index 0000000..6730820
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file4_vector_line_integral.py
@@ -0,0 +1,374 @@
+from manimlib.imports import *
+
+class LineIntegrationProcess(GraphScene):
+
+ CONFIG = {
+ "x_min" : -0,
+ "x_max" : 1,
+ "y_min" : -0,
+ "y_max" : 1,
+ "axes_color":WHITE,
+ "graph_origin": ORIGIN+6.3*LEFT+3*DOWN,
+ "x_axis_width": 5.5,
+ "y_axis_height": 5.5,
+ "x_tick_frequency": 1,
+ "y_tick_frequency": 1,
+ "default_vector_field_config": {
+ "delta_x": .5,
+ "delta_y": .5,
+ "min_magnitude": 0,
+ "max_magnitude": 15,
+ "colors": [BLUE],
+ "length_func": lambda norm : norm/35,
+ "opacity": 1.0,
+ "vector_config": {
+ "stroke_width":2
+ },
+ },
+ "default_graph_style": {
+ "stroke_width": 2,
+ "stroke_color": WHITE,
+ },
+ }
+
+
+ def construct(self):
+ X = RIGHT*self.x_axis_width/(self.x_max- self.x_min)
+ Y = UP*self.y_axis_height/(self.y_max- self.y_min)
+ self.X=X ;self.Y=Y
+
+ self.setup_axes(animate=False)
+
+ fn_text=TexMobject(
+ r"\vec F = x^2\hat i-xy\hat j",
+ stroke_width=2.5
+ ).set_color_by_gradient(
+ *self.default_vector_field_config["colors"]
+ )
+ fn_text.to_edge(TOP,buff=.1).shift(2*LEFT)
+
+ origin=self.graph_origin
+ v_field=self.get_vector_field(
+ lambda v: np.array([
+ (v[0]-origin[0])**2,
+ -(v[0]-origin[0])*(v[1]-origin[1]),
+ 0,
+ ]),
+ x_min= -.001+origin[0],
+ x_max= 5.4+origin[0],
+ y_min= -0+origin[1],
+ y_max= 5.5+origin[1],
+ )
+
+ self.add(v_field, fn_text)
+ self.play(Write(fn_text))
+ self.wait(2)
+ self.get_line_of_int()
+ self.get_dot_product_values()
+ self.wait(2)
+ self.remove(v_field,fn_text)
+ self.write_area_as_intgral_value()
+ self.wait(2)
+
+
+ def get_vector_field(self,func,**kwargs):
+ config = dict()
+ config.update(self.default_vector_field_config)
+ config.update(kwargs)
+ vector_field= VectorField(func,**config)
+ self.vector_field=vector_field
+
+ return vector_field
+
+ def get_line_of_int(self):
+ line_of_int_text=TextMobject(
+ r"Line of integration is\\",
+ "$\\vec r(t)=\cos(t)\hat i+\sin(t)\hat j$"
+ )
+ line_of_int_text[1].set_color(PINK)
+ line_of_int_text.to_corner(UR,buff=.8)
+
+
+ line_of_int= self.get_graph(
+ lambda x : np.sqrt(1-x**2),
+ x_min=1,
+ x_max=0,
+ )
+ line_of_int.set_style(
+ stroke_width=3,
+ stroke_color=PINK,
+ )
+
+ self.play(Write(line_of_int_text))
+ self.wait(.5)
+ self.play(ShowCreation(line_of_int),run_time=2)
+ # self.add(line_of_int)
+
+ self.line_of_int=line_of_int
+ self.line_of_int_text=line_of_int_text
+
+
+ def get_dot_product_values(self):
+ t_tracker = ValueTracker(0)
+ self.t_tracker = t_tracker
+ self.get_vector_and_tangent()
+ self.get_dot_product_graph()
+ self.wait(1.5)
+ self.play(ApplyMethod(
+ self.t_tracker.set_value, PI/6,
+ rate_func=linear,
+ run_time=2.5,
+ )
+ )
+ self.wait(1)
+ self.play(ApplyMethod(
+ self.t_tracker.set_value, PI/2,
+ rate_func=linear,
+ run_time=4,
+ )
+ )
+ self.dot_prod_graph.suspend_updating()
+
+ def get_vector_and_tangent(self):
+ vect_tangent_text=TextMobject(
+ "Get the"," vector",r" and\\"," tangent",
+ " on the"," line"
+ )
+ vect_tangent_text.set_color_by_tex_to_color_map({
+ "tangent": ORANGE, "vector": YELLOW, "line":PINK
+ })
+ vect_tangent_text.to_corner(UR,buff=.8)
+ self.vect_tangent_text= vect_tangent_text
+
+ self.play(FadeOut(self.axes))
+ self.remove(self.line_of_int_text)
+ self.play(Write(vect_tangent_text))
+ self.show_vector()
+ self.show_tangent()
+ self.wait(1.3)
+
+ def show_vector(self):
+ t = self.t_tracker.get_value
+ vect_label=TextMobject(
+ "$\\vec F(x_i,y_i)$",
+ color=YELLOW,
+ stroke_width=2
+ ).scale(.8)
+
+ vector = always_redraw( lambda:
+ self.vector_field.get_vector(
+ self.coords_to_point(
+ np.cos(t()), np.sin(t())
+ ),
+ stroke_width=6,
+ max_stroke_width_to_length_ratio= 8,
+ ).set_color(YELLOW),
+ )
+
+ vect_label.next_to(vector,RIGHT,buff=.1)
+ vector_group= VGroup(vector,vect_label)
+
+ # self.add(vector_group)
+ self.play(Write(vector_group),run_time=1)
+ self.wait(.4)
+
+ self.vect_label = vect_label
+ self.vector_group= vector_group
+
+ def show_tangent(self):
+ tangent_label=TextMobject(
+ "$\\vec T(x_i,y_i)$",
+ color=ORANGE,
+ stroke_width=2
+ ).scale(.8)
+
+ t = self.t_tracker.get_value
+
+ tangent = always_redraw(lambda:
+ Vector(
+ color=ORANGE,
+ stroke_width=6,
+ ).scale(1).next_to(
+ self.coords_to_point(
+ np.cos(t()), np.sin(t())
+ ),DR,buff=-.1
+ ).rotate(
+ self.angle_of_tangent(
+ np.cos(t()),
+ self.line_of_int,
+ dx=-0.00001
+ ),
+ about_point=self.coords_to_point(
+ np.cos(t()), np.sin(t())
+ )
+ )
+ )
+ tangent_label.next_to(tangent,UP,buff=.1)
+ tangent_group=VGroup(tangent,tangent_label)
+
+ # self.add(tangent_group)
+ self.play(Write(tangent_group))
+ self.wait(.6)
+
+ self.tangent_label=tangent_label
+ self.tangent_group=tangent_group
+
+ def get_dot_product_graph(self):
+ t = self.t_tracker.get_value
+
+ self.start_x= 1.3 ; self.end_x=2.3
+
+ t_axis= self.get_graph(
+ lambda x : 2.0/5,
+ x_min= self.start_x,
+ x_max= self.end_x,
+ ).set_style(
+ stroke_width=4,
+ )
+
+ dot_prod_axis= Vector(3*UP).next_to(
+ t_axis,LEFT,buff=-.1
+ ).set_color(GREEN)
+ dot_prod_label=TexMobject(
+ "\\vec F","\\cdot","\\vec T",
+ stroke_width= 1.5,
+ ).next_to(dot_prod_axis,UP).scale(.8)
+ dot_prod_label[0].set_color(YELLOW)
+ dot_prod_label[2].set_color(ORANGE)
+
+ dot_prod_graph_axes= VGroup(t_axis,dot_prod_axis)
+
+ self.write_about_graph()
+ self.wait(1)
+ # self.add(dot_prod_graph_axes)
+ self.play(Write(dot_prod_graph_axes))
+ self.show_the_parameter(t,t_axis)
+ self.wait(.6)
+ self.play(ReplacementTransform(
+ self.vect_label,dot_prod_label[0]
+ ))
+ self.play(ReplacementTransform(
+ self.tangent_label,dot_prod_label[1:3]
+ ))
+ self.show_graph_area(t_axis)
+
+ self.dot_prod_graph_axes= dot_prod_graph_axes
+ self.dot_prod_label= dot_prod_label
+
+ def write_about_graph(self):
+ graph_text=TextMobject(
+ "Graph",r" of the "," vector",r" $-$\\ ",
+ r"tangent",r" dot product\\",
+ " with the parameter ","$t$"
+ )
+ graph_text.set_color_by_tex_to_color_map({
+ "Graph":GREEN, "vector": YELLOW,
+ "tangent":ORANGE, "$t$":RED
+ })
+ graph_text.to_corner(UR,buff=.5)
+ self.graph_text=graph_text
+
+ self.remove(self.vect_tangent_text)
+ self.play(Write(graph_text),run_time=4)
+
+ def show_the_parameter(self,t,t_axis):
+ t_dot=Dot(color=RED).next_to(t_axis,LEFT,buff=0)
+ t_dot.add_updater(lambda obj :
+ obj.move_to(self.c2g([t(),0])
+ ))
+ t_text=TextMobject("$t$=").next_to(t_dot,UP,buff=.25)
+ t_val=always_redraw(
+ lambda: DecimalNumber(
+ t()/PI,
+ color=GOLD
+ ).next_to(t_text,RIGHT,buff=0).scale(.8)
+ )
+ t_label=VGroup(
+ t_text,t_val
+ ).set_color(RED)
+
+
+ pi = TexMobject(
+ "\\pi ",
+ color=GOLD,
+ ).next_to(t_val,RIGHT,buff=0.05)
+ t_label.add(pi)
+
+ t_label.add_updater(lambda label :
+ label.next_to(t_dot,UP)
+ )
+
+ t_group=VGroup(t_dot,t_label)
+
+ # self.add(t_group)
+ self.play(Write(t_group))
+
+ self.t_group= t_group
+
+
+ def show_graph_area(self,t_axis):
+ t = self.t_tracker.get_value
+ dot_prod_graph= always_redraw(lambda: Polygon(
+ *[
+ self.c2g([t,-2*np.cos(t)**2*np.sin(t)])
+ for t in np.arange(0,t(),0.01)
+ ],
+ *[
+ self.c2g([t,0])
+ for t in [ t(),0 ]
+ ],
+ stroke_width=2.5,
+ fill_color=TEAL_D,
+ fill_opacity=.6,
+ ))
+
+ self.add(dot_prod_graph)
+
+ self.dot_prod_graph=dot_prod_graph
+
+ def c2g(self,coord):
+ """ get points for the dot product graph
+ from its coordinates"""
+
+ return self.coords_to_point(
+ self.start_x+coord[0]/(PI/2),
+ 2.0/5+coord[1]/2,
+ )
+
+
+ def write_area_as_intgral_value(self):
+ area_text=TextMobject(
+ "Value of the "," line"," integral in the",
+ r"Vector field\\",
+ "is equal to this ","area"
+ )
+ area_text.set_color_by_tex_to_color_map({
+ "Vector field": BLUE, "line":PINK, "area":TEAL_C
+ })
+ area_text.to_edge(TOP,buff=MED_SMALL_BUFF)
+
+
+ self.play(FadeOut(VGroup(
+ self.line_of_int,
+ self.vector_group,
+ self.tangent_group,
+ self.t_group,
+ self.dot_prod_graph_axes,
+ self.dot_prod_label,
+ self.graph_text
+ )
+ ))
+ area= self.dot_prod_graph.copy().scale(1.3)
+ area.next_to(area_text,DOWN,buff=1.5)
+
+ # self.add(area_text)
+ self.play(Write(area_text),run_time=4)
+ self.play(ReplacementTransform(
+ self.dot_prod_graph,
+ area
+ ))
+ self.wait(.5)
+
+ #uploaded by Somnath Pandit.FSF2020_Line_Integrals
+
+
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file4_helix.py b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file5_helix.py
index 50aeb33..50aeb33 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file4_helix.py
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file5_helix.py
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file1_scalar_line_int_as_sum.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file1_scalar_line_int_as_sum.gif
index 1984b08..17ea3f0 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file1_scalar_line_int_as_sum.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file1_scalar_line_int_as_sum.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file2_scalar_line_integral.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file2_scalar_line_integral.gif
new file mode 100644
index 0000000..f9a8f98
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file2_scalar_line_integral.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file3_vector_line_int_as_sum.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file3_vector_line_int_as_sum.gif
index 46b35bc..46b35bc 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file3_vector_line_int_as_sum.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file3_vector_line_int_as_sum.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file4_vector_line_integral.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file4_vector_line_integral.gif
new file mode 100644
index 0000000..1be7e1e
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file4_vector_line_integral.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file4_helix.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file5_helix.gif
index ceedb1f..ceedb1f 100644
--- a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/file4_helix.gif
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/line-integrals/gifs/file5_helix.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/README.md b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/README.md
new file mode 100644
index 0000000..d8c0956
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/README.md
@@ -0,0 +1,11 @@
+**file1_vector_fields**
+![file1_vector_fields](gifs/file1_vector_fields.gif)
+
+**file2_grad_of_scalar_function**
+![file2_grad_of_scalar_function](gifs/file2_grad_of_scalar_function.gif)
+
+**file3_constructing_vector_field**
+![file3_constructing_vector_field](gifs/file3_constructing_vector_field.gif)
+
+**file4_slope_field**
+![file4_slope_field](gifs/file4_slope_field.gif)
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file1_vector_fields.py b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file1_vector_fields.py
new file mode 100644
index 0000000..6b1b686
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file1_vector_fields.py
@@ -0,0 +1,350 @@
+from manimlib.imports import *
+
+class VectorFields(ThreeDScene):
+
+ CONFIG = {
+ "axes_config": {
+ "x_min": -4,
+ "x_max": 4,
+ "y_min": -4,
+ "y_max": 4,
+ "z_min": -3,
+ "z_max": 3,
+ "a":-4 ,"b": 4, "c":-4 , "d":4,
+ "axes_shift": ORIGIN+2*LEFT,
+ "x_axis_config": {
+ "tick_frequency": 1,
+ # "include_tip": False,
+ },
+ "y_axis_config": {
+ "tick_frequency": 1,
+ # "include_tip": False,
+ },
+ "z_axis_config": {
+ "tick_frequency": 1,
+ # "include_tip": False,
+ },
+ "num_axis_pieces": 10,
+ },
+ "default_graph_style": {
+ "stroke_width": 2,
+ "stroke_color": WHITE,
+ },
+ "default_vector_field_config": {
+ "delta_x": .5,
+ "delta_y": .5,
+ "x_min": -3,
+ "x_max": 3,
+ "y_min": -3,
+ "y_max": 3,
+ "min_magnitude": 0,
+ "max_magnitude": 4,
+ "colors": [BLUE,GREEN,ORANGE,RED],
+ "length_func": lambda norm : .45*sigmoid(norm),
+ "opacity": 1.0,
+ "vector_config": {
+ "stroke_width":3.5,
+ "max_tip_length_to_length_ratio": 0.35,
+ "max_stroke_width_to_length_ratio": 8,
+ },
+ },
+
+ }
+
+
+ def construct(self):
+
+ self.setup_axes()
+ axes=self.axes
+
+ self.set_camera_orientation(distance=35,
+ phi=0 * DEGREES,
+ theta=-90 * DEGREES,
+ )
+ self.move_camera(frame_center=axes.c2p(0,0,0))
+
+ self.show_2d_field()
+ self.wait(3)
+
+ self.show_3d_field()
+ self.begin_ambient_camera_rotation(rate=-.3,)
+ self.wait(1.5)
+ axes.x_axis.rotate(
+ -90 * DEGREES, LEFT,
+ about_point=axes.c2p(0, 0, 0),
+ ),
+ axes.y_axis.rotate(
+ 90 * DEGREES, UP,
+ about_point=axes.c2p(0, 0, 0),
+ ),
+ self.move_camera(
+ # distance=20,
+ phi=85 * DEGREES,
+ rate_func=linear,
+ run_time=8
+ )
+ self.wait(5)
+
+
+ def show_2d_field(self):
+ d2_field_text=TexMobject(
+ r"\vec F(x,y)=-y\hat i+x\hat j",
+ stroke_width=1.5
+ ).set_color_by_gradient(
+ *self.default_vector_field_config["colors"]
+ )
+ d2_field_text.to_corner(UR,buff=.5)
+
+ d2_field = self.get_vector_field(
+ lambda v: np.array([
+ -v[1],
+ v[0],
+ 0
+ ]),
+ )
+ self.add_fixed_in_frame_mobjects(d2_field_text)
+ # self.add(d2_field)
+ self.play(Write(d2_field_text))
+ self.play(FadeIn(d2_field))
+
+ self.d2_field=d2_field
+ self.d2_field_text=d2_field_text
+
+ def show_3d_field(self):
+ d3_field_text=TexMobject(
+ r"\vec F(x,y,z)=-y\hat i+x\hat j+0 \hat k",
+ stroke_width=1.5
+ ).set_color_by_gradient(
+ *self.default_vector_field_config["colors"]
+ )
+ d3_field_text.to_corner(UR,buff=.5)
+
+ d3_field= self.get_vector_field(
+ lambda v: np.array([
+ -v[1],
+ v[0],
+ 0
+ # v[0]*v[2]
+ ]),
+ z_min=-2,
+ z_max= 2,
+ delta_x= 1,
+ delta_y= 1,
+ delta_z= 1,
+ length_func=lambda norm : .5*sigmoid(norm),
+ opacity= 1,
+ ThreeD=True
+ )
+
+ self.remove(self.d2_field,self.d2_field_text)
+ self.add_fixed_in_frame_mobjects(d3_field_text)
+ # self.add(d3_field)
+ self.play(Write(d3_field_text))
+ self.play(FadeIn(d3_field))
+
+ def get_vector_field(self,func,ThreeD=False,**kwargs):
+ config = dict()
+ config.update(self.default_vector_field_config)
+ config.update(kwargs)
+ if ThreeD:
+ vector_field= VectorField3D(func,**config)
+ else:
+ vector_field= VectorField(func,**config)
+
+ vector_field.move_to(self.axes.c2p(0,0,0))
+ self.vector_field=vector_field
+
+ return vector_field
+
+
+
+#-------------------------------------------------------
+ #customize 3D axes
+ def get_three_d_axes(self, include_labels=True, include_numbers=False, **kwargs):
+ config = dict(self.axes_config)
+ config.update(kwargs)
+ axes = ThreeDAxes(**config)
+ axes.set_stroke(width=2)
+ self.axes=axes
+
+ if include_numbers:
+ self.add_axes_numbers(axes)
+
+ if include_labels:
+ self.add_axes_labels(axes)
+
+ # Adjust axis orientation
+ axes.x_axis.rotate(
+ -0 * DEGREES, LEFT,
+ about_point=axes.c2p(0, 0, 0),
+ )
+ axes.y_axis.rotate(
+ 0 * DEGREES, UP,
+ about_point=axes.c2p(0, 0, 0),
+ )
+
+ return axes
+
+
+ def setup_axes(self):
+ axes = self.get_three_d_axes(include_labels=True)
+ axes.scale(1)
+ # axes.center()
+ axes.shift(axes.axes_shift)
+
+ self.add(axes)
+ self.axes = axes
+
+ def add_axes_numbers(self, axes):
+ x_axis = axes.x_axis
+ y_axis = axes.y_axis
+ tex_vals_x = [
+
+ ("1", axes.b),
+ ]
+ tex_vals_y=[
+
+ ("1", axes.d)
+ ]
+ x_labels = VGroup()
+ y_labels = VGroup()
+ for tex, val in tex_vals_x:
+ label = TexMobject(tex)
+ label.scale(1)
+ label.next_to(x_axis.n2p(val), DOWN)
+ # label.rotate(180 * DEGREES)
+ x_labels.add(label)
+ x_axis.add(x_labels)
+ x_axis.numbers = x_labels
+
+ for tex, val in tex_vals_y:
+ label = TexMobject(tex)
+ label.scale(1)
+ label.next_to(y_axis.n2p(val), LEFT)
+ label.rotate(90 * DEGREES)
+ y_labels.add(label)
+
+ y_axis.add(y_labels)
+ y_axis.numbers = y_labels
+
+ return axes
+
+ def add_axes_labels(self, axes):
+ x_label = TexMobject("x")
+ x_label.next_to(axes.x_axis.get_end(), RIGHT)
+ axes.x_axis.label = x_label
+
+ y_label = TextMobject("y")
+ y_label.rotate(90 * DEGREES, OUT)
+ y_label.next_to(axes.y_axis.get_end(), UP)
+ axes.y_axis.label = y_label
+
+ z_label = TextMobject("z")
+ z_label.rotate(90 * DEGREES, RIGHT)
+ z_label.next_to(axes.z_axis.get_zenith(), LEFT)
+ axes.z_axis.label = z_label
+ for axis in axes:
+ axis.add(axis.label)
+ return axes
+
+#-----------------------------------------------------------
+
+class VectorField3D(VGroup):
+ CONFIG = {
+ "delta_x": 1,
+ "delta_y": 1,
+ "delta_z": 1,
+ "x_min": int(np.floor(-FRAME_WIDTH / 2)),
+ "x_max": int(np.ceil(FRAME_WIDTH / 2)),
+ "y_min": int(np.floor(-FRAME_HEIGHT / 2)),
+ "y_max": int(np.ceil(FRAME_HEIGHT / 2)),
+ "z_min":-1,
+ "z_max": 1,
+ "min_magnitude": 0,
+ "max_magnitude": 4,
+ "colors": DEFAULT_SCALAR_FIELD_COLORS,
+ # Takes in actual norm, spits out displayed norm
+ "length_func": lambda norm: 0.45 * sigmoid(norm),
+ "opacity": 1.0,
+ "vector_config": {},
+ }
+ '''Position of the tip of vector to be fixed'''
+ def __init__(self, func, **kwargs):
+ VGroup.__init__(self, **kwargs)
+ self.func = func
+ self.rgb_gradient_function = get_rgb_gradient_function(
+ self.min_magnitude,
+ self.max_magnitude,
+ self.colors,
+ flip_alphas=False
+ )
+ x_range = np.arange(
+ self.x_min,
+ self.x_max + self.delta_x,
+ self.delta_x
+ )
+ y_range = np.arange(
+ self.y_min,
+ self.y_max + self.delta_y,
+ self.delta_y
+ )
+ z_range = np.arange(
+ self.z_min,
+ self.z_max + self.delta_z,
+ self.delta_z
+ )
+ for x, y, z in it.product(x_range, y_range, z_range):
+ point = x * RIGHT + y * UP + z * OUT
+ # print(point)
+ self.add(self.get_vector(point))
+ self.set_opacity(self.opacity)
+
+ def get_vector(self, point, **kwargs):
+ output = np.array(self.func(point))
+ norm = get_norm(output)
+ if norm == 0:
+ output *= 0
+ else:
+ output *= self.length_func(norm) / norm
+ # norm=np.linalg.norm(output)
+ vector_config = dict(self.vector_config)
+ vector_config.update(kwargs)
+
+ vect = Vector(
+ output,
+ **vector_config
+ )
+ vect_perp=vect.copy().rotate(PI/2, axis=output)
+ vect= VGroup(vect,vect_perp)
+ # vect= self.position_vector(vect,point,output,norm)
+ vect.shift(point)
+ fill_color = rgb_to_color(
+ self.rgb_gradient_function(np.array([norm]))[0]
+ )
+ vect.set_color(fill_color)
+ return vect
+
+ '''def position_vector(self,vect,point,output,norm):
+ theta,phi=self.get_theta_phi(output,norm)
+ vect.rotate(PI-phi, axis=RIGHT)
+ vect.rotate(theta, axis=IN)
+ # or apply rotation matrix?
+ return vect
+
+ def get_theta_phi(self,output,norm):
+ if norm==0:
+ phi,theta=0,0
+ else:
+ phi= np.arccos(output[-1]/norm)
+ if output[0]!=0:
+ theta= np.arccos(output[0]/(norm*np.sin(phi)))
+ else:
+ theta= 0
+ return phi,theta'''
+
+
+
+ #uploaded by Somnath Pandit. FSF2020_Vector_fields
+
+
+
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file2_grad_of_scalar_function.py b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file2_grad_of_scalar_function.py
new file mode 100644
index 0000000..231b15c
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file2_grad_of_scalar_function.py
@@ -0,0 +1,320 @@
+from manimlib.imports import *
+
+class GradOfScalarFunc(ThreeDScene):
+
+ CONFIG = {
+ "axes_config": {
+ "x_min": -3,
+ "x_max": 3,
+ "y_min": -3,
+ "y_max": 3,
+ "z_min": 0,
+ "z_max": 3,
+ "a":-3 ,"b": 3, "c":-3 , "d":3,
+ "axes_shift": ORIGIN+IN+LEFT,
+ "x_axis_config": {
+ "tick_frequency": 1,
+ # "include_tip": False,
+ },
+ "y_axis_config": {
+ "tick_frequency": 1,
+ # "include_tip": False,
+ },
+ "z_axis_config": {
+ "tick_frequency": 1,
+ # "include_tip": False,
+ },
+ "num_axis_pieces": 1,
+ },
+ "default_graph_style": {
+ "stroke_width": 2,
+ "stroke_color": WHITE,
+ },
+ "default_vector_field_config": {
+ "delta_x": .5,
+ "delta_y": .5,
+ "x_min": -3,
+ "x_max": 3,
+ "y_min": -3,
+ "y_max": 3,
+ "min_magnitude": 0,
+ "max_magnitude": 2,
+ "colors": [BLUE,GREEN,GREEN,ORANGE,RED],
+ "length_func": lambda norm : .45*sigmoid(norm),
+ "opacity": 1.0,
+ "vector_config": {
+ "stroke_width":6
+ },
+ },
+ "default_surface_config": {
+ "fill_opacity": 0.5,
+ "checkerboard_colors": [BLUE_D],
+ "stroke_width": .5,
+ "stroke_color": WHITE,
+ "stroke_opacity": 0.2,
+ },
+ }
+
+
+ def construct(self):
+
+ self.setup_axes()
+ axes=self.axes
+
+ self.set_camera_orientation(distance=35,
+ phi=80 * DEGREES,
+ theta=-80 * DEGREES,
+ )
+
+ scalar_fn_text=TexMobject("f(x,y)=","\cos(xy)").set_color(BLUE)
+ scalar_fn_text.to_corner(UR,buff=.6)
+
+ operator=TexMobject("\\vec\\nabla").next_to(
+ scalar_fn_text,LEFT,buff=.2
+ ).set_color(GOLD)
+
+ grad_text=TexMobject(r"\dfrac{\partial f}{\partial x} \hat i+\dfrac{\partial f}{\partial y} \hat j+\dfrac{\partial f}{\partial z} \hat k").set_color(GOLD)
+ grad_text.next_to(scalar_fn_text,DOWN).scale(.9)
+
+ VGroup(
+ grad_text[0][1],
+ grad_text[0][9],
+ grad_text[0][17]
+ ).set_color(BLUE)
+ VGroup(
+ grad_text[0][5:8],
+ grad_text[0][13:16],
+ grad_text[0][21:23]
+ ).set_color(WHITE)
+
+ vector_field_text=TexMobject(
+ r"\vec F&=-y\sin(xy)\hat i\\ &-x\sin(xy)\hat j"
+ ).set_color_by_gradient(
+ *self.default_vector_field_config["colors"]
+ )
+ vector_field_text.next_to(scalar_fn_text,DOWN)
+
+
+ '''always generate the scalar field first'''
+ s_field=self.get_scalar_field(
+ func= lambda x ,y : np.cos(x*y/2),
+ dn=.25
+ )
+ v_field=self.get_vector_field(
+ lambda v: np.array([
+ -(v[1]-axes.c2p(0,0,0)[1])*np.sin((v[0]-axes.c2p(0,0,0)[0])*(v[1]-axes.c2p(0,0,0)[1])),
+ -(v[0]-axes.c2p(0,0,0)[0])*np.sin((v[0]-axes.c2p(0,0,0)[0])*(v[1]-axes.c2p(0,0,0)[1])),
+ 0,
+ ]),
+ on_surface=True,
+ )
+
+ self.add_fixed_in_frame_mobjects(scalar_fn_text)
+
+ self.begin_ambient_camera_rotation(rate=.2)
+ self.play(Write(s_field),run_time=2)
+ self.wait(4)
+ self.stop_ambient_camera_rotation()
+
+ self.add_fixed_in_frame_mobjects(operator)
+ self.play(Write(operator),FadeOut(scalar_fn_text[1]))
+ self.add_fixed_in_frame_mobjects(grad_text)
+ self.play(Write(grad_text))
+ self.wait(1.5)
+
+ self.play(FadeOut(grad_text))
+ self.add_fixed_in_frame_mobjects(vector_field_text)
+ show_vec_field=[
+ FadeIn(v_field),
+ Write(vector_field_text),
+ ]
+ # self.play(*show_vec_field,run_time=.5)
+ self.begin_ambient_camera_rotation(rate=.2)
+ self.move_camera(
+ # distance=20,
+ phi=50 * DEGREES,
+ added_anims=show_vec_field,
+ run_time=3
+ )
+
+ self.wait(5)
+ self.stop_ambient_camera_rotation()
+
+ fadeout= [FadeOut(s_field)]
+ # self.play(*fadeout)
+ self.move_camera(
+ # distance=20,
+ phi=0 * DEGREES,
+ theta=-90 * DEGREES,
+ added_anims=fadeout,
+ run_time=2
+ )
+ self.wait(2)
+
+
+
+
+
+ def get_scalar_field(self,func,dn=.5):
+ surface= self.get_surface(
+ lambda x , y:
+ func(x,y),
+ )
+
+ self.surface_points=self.get_points(func,dn)
+ return surface
+
+ def get_points(self,func,dn):
+ axes=self.axes
+
+ x_vals=np.arange(axes.a,axes.b,dn)
+ y_vals=np.arange(axes.c,axes.d,dn)
+ points=[]
+ for x_val in x_vals:
+ for y_val in y_vals:
+ points+=[axes.c2p(x_val,y_val,func(x_val,y_val)+.05)]
+ return points
+
+ def get_vector_field(self,func,on_surface=True,**kwargs):
+ config = dict()
+ config.update(self.default_vector_field_config)
+ config.update(kwargs)
+ vector_field= VectorField(func,**config)
+ vector_field.move_to(self.axes.c2p(0,0,0))
+ self.vector_field=vector_field
+
+ if on_surface:
+ vector_field=self.get_vectors_on_surface()
+
+ return vector_field
+
+
+
+ def get_vectors_on_surface(self):
+ vectors_on_surface = VGroup(*[
+ self.vector_field.get_vector(point)
+ for point in self.surface_points
+ ])
+
+ return vectors_on_surface
+
+
+ def get_surface(self, func, **kwargs):
+ axes=self.axes
+ config = {
+ "u_min": axes.a,
+ "u_max": axes.b,
+ "v_min": axes.c,
+ "v_max": axes.d,
+ "resolution": (
+ 4*(axes.y_max - axes.y_min) // axes.y_axis.tick_frequency,
+ 4*(axes.x_max - axes.x_min) // axes.x_axis.tick_frequency,
+ ),
+ }
+
+ config.update(self.default_surface_config)
+ config.update(kwargs)
+ return ParametricSurface(
+ lambda x,y : axes.c2p(
+ x, y, func(x, y)
+ ),
+ **config
+ )
+
+
+#-------------------------------------------------------
+ #customize 3D axes
+ def get_three_d_axes(self, include_labels=True, include_numbers=False, **kwargs):
+ config = dict(self.axes_config)
+ config.update(kwargs)
+ axes = ThreeDAxes(**config)
+ axes.set_stroke(width=2)
+ self.axes=axes
+
+ if include_numbers:
+ self.add_axes_numbers(axes)
+
+ if include_labels:
+ self.add_axes_labels(axes)
+
+ # Adjust axis orientation
+ axes.x_axis.rotate(
+ -90 * DEGREES, LEFT,
+ about_point=axes.c2p(0, 0, 0),
+ )
+ axes.y_axis.rotate(
+ 90 * DEGREES, UP,
+ about_point=axes.c2p(0, 0, 0),
+ )
+
+ return axes
+
+
+ def setup_axes(self):
+ axes = self.get_three_d_axes(include_labels=True)
+ axes.scale(1)
+ # axes.center()
+ axes.shift(axes.axes_shift)
+
+ self.add(axes)
+ self.axes = axes
+
+ def add_axes_numbers(self, axes):
+ x_axis = axes.x_axis
+ y_axis = axes.y_axis
+ tex_vals_x = [
+
+ ("1", axes.b),
+ ("-1", axes.a),
+ ]
+ tex_vals_y=[
+
+ ("1", axes.d)
+ ]
+ x_labels = VGroup()
+ y_labels = VGroup()
+ for tex, val in tex_vals_x:
+ label = TexMobject(tex)
+ label.scale(1)
+ label.next_to(x_axis.n2p(val), DOWN)
+ # label.rotate(180 * DEGREES)
+ x_labels.add(label)
+ x_axis.add(x_labels)
+ x_axis.numbers = x_labels
+
+ for tex, val in tex_vals_y:
+ label = TexMobject(tex)
+ label.scale(1)
+ label.next_to(y_axis.n2p(val), LEFT)
+ label.rotate(90 * DEGREES)
+ y_labels.add(label)
+
+ y_axis.add(y_labels)
+ y_axis.numbers = y_labels
+
+ return axes
+
+ def add_axes_labels(self, axes):
+ x_label = TexMobject("x")
+ x_label.next_to(axes.x_axis.get_end(), RIGHT)
+ axes.x_axis.label = x_label
+
+ y_label = TextMobject("y")
+ y_label.rotate(90 * DEGREES, OUT)
+ y_label.next_to(axes.y_axis.get_end(), UP)
+ axes.y_axis.label = y_label
+
+ z_label = TextMobject("z")
+ z_label.rotate(90 * DEGREES, RIGHT)
+ z_label.next_to(axes.z_axis.get_zenith(), LEFT)
+ axes.z_axis.label = z_label
+ for axis in axes:
+ axis.add(axis.label)
+ return axes
+
+
+
+ #uploaded by Somnath Pandit. FSF2020_Vector_fields
+
+
+
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file3_constructing_vector_field.py b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file3_constructing_vector_field.py
new file mode 100644
index 0000000..fc56306
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file3_constructing_vector_field.py
@@ -0,0 +1,196 @@
+from manimlib.imports import *
+
+
+class VectorFields(GraphScene):
+ CONFIG = {
+ "x_min" : -4,
+ "x_max" : 4,
+ "y_min" : -4,
+ "y_max" : 4,
+ "graph_origin": ORIGIN+2.5*LEFT,
+ "x_axis_width": 7,
+ "y_axis_height": 7,
+ "x_tick_frequency": 1,
+ "y_tick_frequency": 1,
+ "default_vector_field_config": {
+ "delta_x": .5,
+ "delta_y": .5,
+ "min_magnitude": 0,
+ "max_magnitude": 4,
+ "colors": [GREEN,GREEN,YELLOW,RED],
+ "length_func": lambda n: n/2.5,
+ "opacity": .75,
+ "vector_config": {
+ "stroke_width":6,
+ "max_stroke_width_to_length_ratio":4
+ },
+ },
+
+ "a":-3.5 ,"b": 4, "c": -3.5 ,"d": 4,
+ }
+
+ def construct(self):
+ X = RIGHT*self.x_axis_width/(self.x_max- self.x_min)
+ Y = UP*self.y_axis_height/(self.y_max- self.y_min)
+ self.X=X ;self.Y=Y
+
+ self.setup_axes(animate=False)
+ vector_function = lambda v: np.array([
+ (v[0]-self.graph_origin[0])*(v[1]-self.graph_origin[1]),
+ -(v[0]-self.graph_origin[0]),
+ 0,
+ ])
+
+ vector_field=self.get_vector_field(
+ vector_function,
+ colors= [GREEN]
+ )
+
+ self.show_points()
+ self.wait(.5)
+ self.show_func_machine()
+ self.wait(1)
+ self.produce_vectors(vector_field)
+ self.wait(.5)
+ self.scale_down_vectors(vector_function)
+ self.wait(2)
+
+
+
+ def show_points(self):
+ dn=1
+ x_vals=np.arange(self.a,self.b,dn)
+ y_vals=np.arange(self.c,self.d,dn)
+ dots=VGroup()
+ for x_val in x_vals:
+ for y_val in y_vals:
+ dot=Dot(
+ self.coords_to_point(x_val,y_val),
+ radius=.05,
+ color=TEAL,
+ )
+ dots.add(dot)
+ self.play(ShowCreation(dots, run_time=1))
+ self.dots=dots
+
+ def show_func_machine(self):
+ machine=RoundedRectangle(
+ height=2,
+ width=3.5,
+ color=PURPLE,
+ stroke_width=8
+ ).to_edge(RIGHT, buff=.4)
+
+ machine_label=TexMobject(
+ r"\vec F=xy\hat i-x\hat j",
+ stroke_width=1.5,
+ ).set_color_by_gradient(
+ *self.default_vector_field_config["colors"]
+ ).next_to(machine,IN)
+
+ machine=VGroup(machine,machine_label)
+ self.add(machine)
+
+ self.func_machine=machine
+
+
+ def produce_vectors(self,vector_field):
+ count,i=3,0
+ self.run_time=1
+ non_scaled_vectors=VGroup()
+ for dot in self.dots:
+ if i==count:
+ self.run_time=.05
+ position=dot.get_center()
+ vect= vector_field.get_vector(position)
+ self.go_to_machine(dot)
+ self.take_vec_from_machine(vect,position)
+ non_scaled_vectors.add(vect)
+ i+=1
+
+ self.non_scaled_vectors=non_scaled_vectors
+
+ def go_to_machine(self,dot):
+ if self.run_time>.5:
+ self.play(ApplyMethod(
+ dot.next_to,
+ self.func_machine,4*UP,
+ ),
+ run_time=self.run_time
+ )
+ self.dot=dot
+
+ def take_vec_from_machine(self,vect,position):
+ vect.next_to(self.func_machine,DOWN,buff=.1)
+
+ if self.run_time>.5:
+ point_coord=TexMobject(
+ "(x_i,y_i)"
+ ).next_to(self.dot,RIGHT,buff= .01).scale(.75)
+ input_point=VGroup(point_coord, self.dot)
+ self.play(
+ ApplyMethod(
+ input_point.shift,DOWN,
+ run_time=self.run_time
+ )),
+ self.play(
+ FadeOut(input_point),
+ run_time=.2
+ )
+ self.play(
+ FadeIn(vect),
+ run_time=.4
+ )
+ else:
+ self.remove(self.dot)
+ self.add(vect)
+ self.wait(1.0/15)
+
+ self.play(
+ vect.move_to,position,
+ run_time=self.run_time
+ )
+
+ def scale_down_vectors(self,vector_function):
+ scale_down_text=TextMobject(
+ r"Vectors are rescaled\\ for clarity\\ and \\",
+ r"colors are used to \\ indicate magnitudes",
+ stroke_width=1.2
+ )
+ scale_down_text[0][:7].set_color(BLUE)
+ scale_down_text[1].set_color_by_gradient(
+ *self.default_vector_field_config["colors"]
+ )
+ scale_down_text.to_corner(UR).shift(DOWN)
+ scaled_vector_field= self.get_vector_field(
+ vector_function,
+ length_func= lambda norm : .75*sigmoid(norm)
+ )
+ for vector in self.non_scaled_vectors:
+ scaled_vect= scaled_vector_field.get_vector(vector.get_center())
+ vector.target= scaled_vect
+
+ self.play(FadeOut(self.func_machine))
+ self.play(Write(scale_down_text))
+ self.wait(1.2)
+ self.play(LaggedStartMap(
+ MoveToTarget, self.non_scaled_vectors,
+ run_time=3
+ ))
+
+ def get_vector_field(self,func,**kwargs):
+ config = dict()
+ config.update(self.default_vector_field_config)
+ config.update(kwargs)
+ vector_field= VectorField(func,**config)
+
+ return vector_field
+
+
+
+
+
+#uploaded by Somnath Pandit. FSF2020_Vector_fields
+
+
+
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file4_slope_field.py b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file4_slope_field.py
new file mode 100644
index 0000000..8ebb6f5
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/file4_slope_field.py
@@ -0,0 +1,247 @@
+from manimlib.imports import *
+
+
+class SlopeFields(GraphScene):
+ CONFIG = {
+ "x_min" : -2,
+ "x_max" : 2,
+ "y_min" : -2,
+ "y_max" : 2,
+ "graph_origin": ORIGIN+2.5*LEFT,
+ "x_axis_width": 7,
+ "y_axis_height": 7,
+ "x_tick_frequency": 1,
+ "y_tick_frequency": 1,
+ "default_slope_field_config": {
+ "delta_x": .2,
+ "delta_y": .2,
+ "opacity": 1,
+ "color": BLUE_A,
+ "slope_length_factor": .2,
+ "line_config": {
+ "stroke_width":2.5,
+ },
+ },
+
+ "a":-1.9 ,"b": 2, "c": -1.9 ,"d": 2,
+ }
+
+ def construct(self):
+ X = RIGHT*self.x_axis_width/(self.x_max- self.x_min)
+ Y = UP*self.y_axis_height/(self.y_max- self.y_min)
+ self.X=X ;self.Y=Y
+
+ self.setup_axes(animate=False)
+
+ slope_field=self.get_slope_field(
+ lambda x,y:-2.0*(x-self.graph_origin[0])*(y-self.graph_origin[1]),
+ x_min=self.graph_origin[0]+self.a,
+ x_max=self.graph_origin[0]+self.b,
+ y_min=self.graph_origin[1]+self.c,
+ y_max=self.graph_origin[1]+self.d,
+ color= GREEN_B
+ )
+
+ self.show_points()
+ self.wait(.5)
+ self.show_func_machine()
+ self.wait(1)
+ self.produce_slopes(slope_field)
+ # self.add(slope_field)
+ self.glimpse_of_solutions()
+ self.wait(2)
+
+
+
+
+ def show_points(self):
+ dn=1.0/5
+ x_vals=np.arange(self.a,self.b,dn)
+ y_vals=np.arange(self.c,self.d,dn)
+ dots=VGroup()
+ for x_val in x_vals:
+ for y_val in y_vals:
+ dot=Dot(
+ self.coords_to_point(x_val,y_val),
+ radius=.04,
+ color=TEAL,
+ )
+ dots.add(dot)
+ self.play(ShowCreation(dots, run_time=1))
+ self.dots=dots
+
+ def show_func_machine(self):
+ machine=RoundedRectangle(
+ height=3,
+ width=4,
+ color=PURPLE,
+ stroke_width=8
+ ).to_edge(RIGHT, buff=.4)
+
+ machine_label=TextMobject(
+ r"Line segment\\ with slope\\"," $y'=-2xy$",
+ stroke_width=1.2,
+ color=BLUE
+ ).next_to(machine,IN)
+ machine_label[1].set_color(GREEN)
+ machine=VGroup(machine, machine_label)
+ self.play(FadeIn(machine))
+
+ self.func_machine = machine
+
+
+ def produce_slopes(self,slope_field):
+ count,i=3,0
+ self.run_time=1
+ for dot in self.dots:
+ if i==count:
+ self.run_time=.05
+ position=dot.get_center()
+ line= slope_field.get_slope(position)
+ self.go_to_machine(dot)
+ self.take_line_from_machine(line,position)
+ i+=1
+
+ def go_to_machine(self,dot):
+ if self.run_time>.5:
+ self.play(ApplyMethod(
+ dot.next_to,
+ self.func_machine,4*UP,
+ ),
+ run_time=self.run_time
+ )
+ self.dot=dot
+
+ def take_line_from_machine(self,vect,position):
+
+ if self.run_time>.5:
+ vect.next_to(self.func_machine,DOWN,buff=.1)
+ self.play(
+ ApplyMethod(
+ self.dot.shift,DOWN,
+ run_time=self.run_time
+ )),
+ self.play(
+ FadeOut(self.dot),
+ run_time=.2
+ )
+ self.play(
+ FadeIn(vect),
+ run_time=.4
+ )
+ self.play(
+ ApplyMethod(
+ vect.move_to,position
+ ),
+ run_time=self.run_time
+ )
+ else:
+ self.remove(self.dot)
+ self.add(vect)
+ vect.move_to(position)
+
+
+ def get_slope_field(self,func,**kwargs):
+ config = dict()
+ config.update(self.default_slope_field_config)
+ config.update(kwargs)
+ slope_field= SlopeField(func,**config)
+
+ return slope_field
+
+ def glimpse_of_solutions(self):
+ sol_text= TextMobject(
+ r"The solution curves\\ seem to be like...",
+ color= BLUE,
+ stroke_width=1.2
+ )
+ sol_text.to_corner(UR, buff=1)
+ condition_text= TextMobject(
+ r"for different\\ initial conditions",
+ color= GOLD,
+ stroke_width=1.1
+ )
+ condition_text.next_to(sol_text,DOWN,buff=1)
+ solution1 = self.get_graph(
+ lambda x : np.exp(-x**2),
+ x_min = self.a,
+ x_max = self.b,
+ color = PINK)
+ solution2 = self.get_graph(
+ lambda x : .5*np.exp(-x**2),
+ x_min = self.a,
+ x_max = self.b,
+ color = YELLOW)
+ solution3 = self.get_graph(
+ lambda x : 1.5*np.exp(-x**2),
+ x_min = self.a,
+ x_max = self.b,
+ color = BLUE)
+ solution4 = self.get_graph(
+ lambda x : -np.exp(-x**2),
+ x_min = self.a,
+ x_max = self.b,
+ color = RED_E)
+
+ self.play(FadeOut(self.func_machine))
+ self.play(Write(sol_text))
+ self.wait(.6)
+ self.play(ShowCreation(solution1))
+ self.play(Write(condition_text))
+ self.play(ShowCreation(solution2))
+ self.wait(.5)
+ self.play(ShowCreation(solution3))
+ self.wait(.5)
+ self.play(ShowCreation(solution4))
+
+
+class SlopeField(VGroup):
+ CONFIG = {
+ "delta_x": 0.5,
+ "delta_y": 0.5,
+ "x_min": int(np.floor(-FRAME_WIDTH / 2)),
+ "x_max": int(np.ceil(FRAME_WIDTH / 2)),
+ "y_min": int(np.floor(-FRAME_HEIGHT / 2)),
+ "y_max": int(np.ceil(FRAME_HEIGHT / 2)),
+ "opacity": 1.0,
+ "color": WHITE,
+ "slope_length_factor": .25,
+ "line_config": {},
+ }
+
+ def __init__(self, func, **kwargs):
+ VGroup.__init__(self, **kwargs)
+ self.func = func
+
+ x_range = np.arange(
+ self.x_min,
+ self.x_max + self.delta_x,
+ self.delta_x
+ )
+ y_range = np.arange(
+ self.y_min,
+ self.y_max + self.delta_y,
+ self.delta_y
+ )
+ for x, y in it.product(x_range, y_range):
+ point = x * RIGHT + y * UP
+ self.add(self.get_slope(point))
+ self.set_opacity(self.opacity)
+
+ def get_slope(self, point, **kwargs):
+ slope = self.func(*point[:2])
+ line_config = dict(self.line_config)
+ line_config.update(kwargs)
+ line = Line(ORIGIN,self.slope_length_factor*RIGHT, **line_config)
+ line.move_to(point).rotate(np.arctan(slope/3.2))
+
+ line.set_color(self.color)
+ return line
+
+
+
+
+#uploaded by Somnath Pandit. FSF2020_Vector_fields
+
+
+
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file1_vector_fields.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file1_vector_fields.gif
new file mode 100644
index 0000000..96e50ac
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file1_vector_fields.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file2_grad_of_scalar_function.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file2_grad_of_scalar_function.gif
new file mode 100644
index 0000000..c1ab66a
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file2_grad_of_scalar_function.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file3_constructing_vector_field.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file3_constructing_vector_field.gif
new file mode 100644
index 0000000..6a57cab
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file3_constructing_vector_field.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file4_slope_field.gif b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file4_slope_field.gif
new file mode 100644
index 0000000..c39ec54
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/integrals-of-multivariable-functions/vector-fields/gifs/file4_slope_field.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/README.md b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/README.md
index e69de29..17fcde0 100644
--- a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/README.md
+++ b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/README.md
@@ -0,0 +1,4 @@
+**file1_flux@_various_points.py**
+![file1_flux@_various_points](file1_flux@_various_points.gif)
+**file2_different_valuesof_Div.py**
+![file2_different_valuesof_Div](file2_different_valuesof_Div.gif)
diff --git a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file1_flux@_various_points.gif b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file1_flux@_various_points.gif
new file mode 100644
index 0000000..6c32b94
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file1_flux@_various_points.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file1_flux@_various_points.py b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file1_flux@_various_points.py
new file mode 100644
index 0000000..6727982
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file1_flux@_various_points.py
@@ -0,0 +1,60 @@
+from manimlib.imports import *
+def pendulum_vector_field_func(point):
+ #theta, omega = point[:2]
+ return np.array([
+ 5*point[0]+point[1],
+ 3*point[1]+3*point[1],
+ 0,
+ ])
+class SF(Scene):
+ CONFIG = {
+ #"func": cylinder_flow_vector_field,
+ "flow_time": 5,
+ }
+ def initialize_vector_field(self):
+ self.vector_field = VectorField(
+ pendulum_vector_field_func,
+ )
+ self.vector_field.sort(get_norm)
+ def construct(self):
+ # plane = NumberPlane(color=RED)
+ # plane.add(plane.get_axis_labels())
+ # self.add(plane)
+
+ A=TextMobject("The net flux through the green circular region is zero",tex_to_color_map={"green": GREEN})
+ B=TextMobject("The net flux through the blue circular region is non-zero",tex_to_color_map={"blue": BLUE})
+
+ c1=Circle(color=GREEN, radius=1.5)
+ c1.shift(4*LEFT+2.2*UP)
+ c2=Circle(color=BLUE, radius=1.5)
+
+
+
+
+ self.play(ShowCreation(A))
+ self.wait(0.5)
+ self.play(ApplyMethod(A.shift, (0.8*UP+0.2*LEFT)))
+ self.play(ShowCreation(B))
+ # self.play(ApplyMethod(B.shift, (2*UP)))
+ self.wait(2)
+ self.play(FadeOut(A),FadeOut(B))
+ self.initialize_vector_field()
+ field = self.vector_field
+ self.play(ShowCreation(field), run_time=4)
+ self.play(ShowCreation(c1))
+ self.play(ShowCreation(c2))
+ self.wait(1)
+ lines = StreamLines(
+ pendulum_vector_field_func,
+ virtual_time=3,
+ min_magnitude=0,
+ max_magnitude=2,
+ )
+ self.add(AnimatedStreamLines(
+ lines,
+ line_anim_class=ShowPassingFlash
+ ))
+ self.wait(2)
+ phase_point = VectorizedPoint(1*UP+1*RIGHT)
+ self.add(move_along_vector_field(phase_point, pendulum_vector_field_func))
+ self.wait(2)
diff --git a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file2_different_valuesof_Div.gif b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file2_different_valuesof_Div.gif
new file mode 100644
index 0000000..477c311
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file2_different_valuesof_Div.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file2_different_valuesof_Div.py b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file2_different_valuesof_Div.py
new file mode 100644
index 0000000..921047d
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/divergence-gauss-theorem/file2_different_valuesof_Div.py
@@ -0,0 +1,91 @@
+from manimlib.imports import *
+class Div(Scene):
+ def construct(self):
+ one=TextMobject(r"Div$ \vec{F} < 0$ ").set_color(RED)
+ two=TextMobject(r"Div$ \vec{F} = 0$ ").set_color(BLUE)
+ three=TextMobject(r"Div$ \vec{F} > 0$ ").set_color(YELLOW)
+
+ one.shift(2.3*DOWN)
+ two.shift(2.3*DOWN)
+ three.shift(2.3*DOWN)
+
+
+ a=Dot(color=RED)
+ a.shift(0.1*LEFT)
+ b=Dot(color=BLUE)
+ b.shift(0.1*LEFT)
+ c=Dot(color=YELLOW)
+ c.shift(0.1*LEFT)
+
+ rot=[0*DEGREES,45*DEGREES,90*DEGREES,135*DEGREES,180*DEGREES,225*DEGREES,270*DEGREES,315*DEGREES]
+ rot2=[180*DEGREES,180*DEGREES,180*DEGREES,180*DEGREES,180*DEGREES,180*DEGREES,180*DEGREES,180*DEGREES]
+ shift=[RIGHT,0.7*RIGHT+0.7*UP,UP,0.7*LEFT+0.7*UP,LEFT,0.7*LEFT+0.7*DOWN,DOWN,0.7*RIGHT+0.7*DOWN]
+ shift2=[RIGHT,RIGHT+UP,RIGHT+DOWN,UP,DOWN,LEFT,LEFT+UP,LEFT+DOWN]
+
+
+
+ u=[Vector(color=RED),Vector(color=RED),Vector(color=RED),Vector(color=RED),
+ Vector(color=RED),Vector(color=RED),Vector(color=RED),Vector(color=RED)]
+
+
+ [u[i].rotate(rot[i]) for i in range(8) ]
+ [u[i].rotate(rot2[i]) for i in range(8) ]
+ [u[i].shift(shift[i]) for i in range(8) ]
+
+
+ divone=VGroup(*u)
+ divone.shift(0.6*LEFT)
+
+
+ v=[Vector(color=BLUE),Vector(color=BLUE),Vector(color=BLUE),Vector(color=BLUE),
+ Vector(color=BLUE),Vector(color=BLUE),Vector(color=BLUE),Vector(color=BLUE)]
+
+
+ [v[i].rotate(45*DEGREES) for i in range(8)]
+ [v[i].shift(shift2[i]) for i in range(8) ]
+
+ divtwo=VGroup(*v)
+ divtwo.shift(0.6*LEFT)
+
+
+ w=[Vector(color=YELLOW),Vector(color=YELLOW),Vector(color=YELLOW),Vector(color=YELLOW),
+ Vector(color=YELLOW),Vector(color=YELLOW),Vector(color=YELLOW),Vector(color=YELLOW)]
+
+
+ [w[i].rotate(rot[i]) for i in range(8)]
+ [w[i].shift(shift[i]) for i in range(8) ]
+
+
+ divthree=VGroup(*w)
+ divthree.shift(0.6*LEFT)
+
+
+
+
+ self.play(ShowCreation(a),ShowCreation(divone))
+ self.play(ShowCreation(one))
+ self.wait(1)
+ self.play(FadeOut(a),FadeOut(divone),FadeOut(one))
+
+ self.play(ShowCreation(b),ShowCreation(divtwo))
+ self.play(ShowCreation(two))
+ self.wait(1)
+ self.play(FadeOut(b),FadeOut(divtwo),FadeOut(two))
+
+
+ self.play(ShowCreation(c),ShowCreation(divthree))
+ self.play(ShowCreation(three))
+ self.wait(1)
+ self.play(FadeOut(c),FadeOut(divthree),FadeOut(three))
+ self.wait(0.5)
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/README.md b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/README.md
index 0af7aa1..97d6d10 100644
--- a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/README.md
+++ b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/README.md
@@ -1,7 +1,5 @@
-**file1_flux_through_sphere.py**
-![file1_flux_through_sphere](file1_flux_through_sphere.gif)
-**file2_mobius_strip.py**
-![file2_mobius_strip](file2_mobius_strip.gif)
+**file1_flux_through_circle.py**
+![file1_flux_through_circle](file1_flux_through_circle.gif)
**file3_normal_vector.py**
![file3_normal_vector](file3_normal_vector.gif)
**file4_cube_surface.py**
diff --git a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_circle.gif b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_circle.gif
new file mode 100644
index 0000000..c00076b
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_circle.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_circle.py b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_circle.py
new file mode 100644
index 0000000..e418a96
--- /dev/null
+++ b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_circle.py
@@ -0,0 +1,43 @@
+from manimlib.imports import *
+def pendulum_vector_field_func(point):
+ #theta, omega = point[:2]
+ return np.array([
+ point[0],
+ point[1],
+ point[2],
+ ])
+class F2D(Scene):
+ CONFIG = {
+ # "func": cylinder_flow_vec or_field,
+ "flow_time": 5,
+ }
+ def initialize_vector_field(self):
+ self.vector_field = VectorField(
+ pendulum_vector_field_func,
+ )
+ self.vector_field.sort(get_norm)
+ def construct(self):
+ # plane = NumberPlane(color=RED)
+ # plane.add(plane.get_axis_labels())
+ # self.add(plane)
+ self.initialize_vector_field()
+
+ field = self.vector_field
+ c1=Circle(radius=3,color=BLUE)
+ self.play(ShowCreation(field), run_time=7)
+ self.play(ShowCreation(c1))
+ self.wait(3)
+ lines = StreamLines(
+ pendulum_vector_field_func,
+ virtual_time=3,
+ min_magnitude=0,
+ max_magnitude=2,
+ )
+ self.add(AnimatedStreamLines(
+ lines,
+ line_anim_class=ShowPassingFlash
+ ))
+ self.wait(2)
+ phase_point = VectorizedPoint(1*UP+1*RIGHT)
+ self.add(move_along_vector_field(phase_point, pendulum_vector_field_func))
+ self.wait(2)
diff --git a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_sphere.gif b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_sphere.gif
deleted file mode 100644
index 43327bf..0000000
--- a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_sphere.gif
+++ /dev/null
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_sphere.py b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_sphere.py
deleted file mode 100644
index e07715e..0000000
--- a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file1_flux_through_sphere.py
+++ /dev/null
@@ -1,50 +0,0 @@
-from manimlib.imports import *
-class fluxsphere(ThreeDScene):
-
-
- def construct(self):
- s = Sphere(checkerboard_colors=[BLUE_D,BLUE_D])
- s.scale(2.3)
-
- n = VGroup(
- *[self.n(*self.func(u, v))
- for u in np.arange(0, PI, 0.4)
- for v in np.arange(0, TAU, 0.8)]
- )
-
-
-
- self.move_camera(0.8 * PI / 2, -0.45 * PI)
- self.play(Write(s))
- # self.play(Write(f))
- self.play(ShowCreation(n), run_time=4)
- # self.add(n)
- self.begin_ambient_camera_rotation(rate=0.1)
- self.wait(5)
-
-
- def func(self, u, v):
- return [
- np.cos(v) * np.sin(u),
- np.sin(v) * np.sin(u),
- np.cos(u)
- ]
-
- def vect(self, x, y, z):
- return np.array([
- x, y, z
- ])
-
- def n(self, x, y, z):
- vect = np.array([
- x,
- y,
- z
- ])
-
- mag = math.sqrt(vect[0] ** 2 + vect[1] ** 2 + vect[2] ** 2)
- v = Vector(
- (1.5/mag) * vect,
- color=RED_B,
- stroke_width=4).shift(2*x * RIGHT + 2*y * UP + 2*z * OUT)
- return v
diff --git a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file2_mobius_strip.py b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file2_mobius_strip.py
deleted file mode 100644
index 31b1990..0000000
--- a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file2_mobius_strip.py
+++ /dev/null
@@ -1,81 +0,0 @@
-from manimlib.imports import *
-
-class Mobius(ThreeDScene):
- def construct(self):
- axes=ThreeDAxes()
-
-
-
- R=2.5
-
-
- mobius = ParametricSurface(
- lambda u, v: np.array([
- (R+u*np.cos(v/2))*np.cos(v),
- (R+u*np.cos(v/2))*np.sin( v),
- u*np.sin(v/2)
- ]),
- u_min = -0.5, u_max = 0.5, v_min = 0, v_max = 2*PI,
-
- resolution=(6, 32)).fade(0.5) #Resolution of the surfaces
- circle=Circle(radius=2.5, color=BLUE)
-
-
-
- mobius.rotate(PI/2, axis=RIGHT)
- mobius.rotate(PI/2, axis=OUT)
- # # mobius.shift(RIGHT+OUT+DOWN)
-
-
-
-
-
- along = ParametricSurface(
- lambda u, v: np.array([
- (R+u*np.cos(v/2))*np.cos(v),
- (R+u*np.cos(v/2))*np.sin(v),
- 0
- ]),
- u_min = -0.5, u_max = 0.5, v_min = 0, v_max = 2*PI,
-
- resolution=(6, 32)).fade(0.5) #Resolution of the surfaces
- circle=Circle(radius=2.5, color=BLUE)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- self.set_camera_orientation(phi=75 * DEGREES,theta=-75*DEGREES)
-
- self.play(Write(mobius))
-
- self.wait(1)
- self.begin_ambient_camera_rotation(rate=0.65)
-
- self.wait(10)
- self.stop_ambient_camera_rotation()
- self.wait(1)
-
-
-
-
-
-
diff --git a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file4_cube_surface.gif b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file4_cube_surface.gif
index c6101cf..001edb8 100644
--- a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file4_cube_surface.gif
+++ b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file4_cube_surface.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file4_cube_surface.py b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file4_cube_surface.py
index 9301a00..146d955 100644
--- a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file4_cube_surface.py
+++ b/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file4_cube_surface.py
@@ -1,7 +1,4 @@
from manimlib.imports import*
-
-
-
class cuber(ThreeDScene):
def construct(self):
@@ -41,6 +38,7 @@ class cuber(ThreeDScene):
n1=TextMobject(r"$\vec{n}$",color=YELLOW)
n1.scale(0.8)
n1.rotate(PI/2,axis=RIGHT)
+ n1.rotate(PI,axis=OUT)
n1.shift(3*RIGHT+1.3*OUT+DOWN)
spaceloc = [[0,0,2],[1,0,2],[-1,0,2],[2,0,2],[-2,0,2],[3,0,2],[-3,0,2],
@@ -59,158 +57,128 @@ class cuber(ThreeDScene):
[0,3,2],[1,3,2],[-1,3,2],[2,3,2],[-2,3,2],[3,3,2],[-3,3,2]]
- veclist1=[Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E)]
+ veclist1=[Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY)]
- [veclist1[i].rotate(PI/4,axis=RIGHT) for i in range(10,30,1)]
- [veclist1[i].rotate(PI/4,axis=RIGHT) for i in range(40,80,2)]
- [veclist1[i].rotate(PI/6,axis=OUT) for i in range(98)]
- [veclist1[i].rotate(PI/8,axis=DOWN) for i in range(98)]
+ [veclist1[i].rotate(PI/4,axis=RIGHT) for i in range(42)]
+ [veclist1[i].rotate(PI/6,axis=OUT) for i in range(42)]
+ [veclist1[i].rotate(PI/8,axis=DOWN) for i in range(42)]
vectorfield1=VGroup(*veclist1)
- [veclist1[i].shift(spaceloc[i]) for i in range(98)]
+ [veclist1[i].shift(spaceloc[i]) for i in range(42)]
- veclist2=[Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),
- Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E),Vector(color=GOLD_E)]
+ veclist2=[Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY)]
- [veclist2[i].rotate(PI/4,axis=RIGHT) for i in range(10,30,1)]
- [veclist2[i].rotate(PI/4,axis=RIGHT) for i in range(40,80,2)]
- [veclist2[i].rotate(PI/6,axis=OUT) for i in range(98)]
- [veclist2[i].rotate(PI/8,axis=DOWN) for i in range(98)]
+ [veclist2[i].rotate(PI/4,axis=RIGHT) for i in range(42)]
+ [veclist2[i].rotate(PI/4,axis=RIGHT) for i in range(42)]
+ [veclist2[i].rotate(PI/6,axis=OUT) for i in range(42)]
+ [veclist2[i].rotate(PI/8,axis=DOWN) for i in range(42)]
vectorfield2=VGroup(*veclist2)
- [veclist2[i].shift(spaceloc[i]) for i in range(98)]
+ [veclist2[i].shift(spaceloc[i]) for i in range(42)]
- veclist3=[Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector()]
+ veclist3=[Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY)]
- [veclist3[i].rotate(PI/4,axis=RIGHT) for i in range(10,30,1)]
- [veclist3[i].rotate(PI/4,axis=RIGHT) for i in range(40,80,2)]
- [veclist3[i].rotate(PI/6,axis=OUT) for i in range(98)]
- [veclist3[i].rotate(PI/8,axis=DOWN) for i in range(98)]
+ [veclist3[i].rotate(PI/4,axis=RIGHT) for i in range(42)]
+ [veclist3[i].rotate(PI/4,axis=RIGHT) for i in range(42)]
+ [veclist3[i].rotate(PI/6,axis=OUT) for i in range(42)]
+ [veclist3[i].rotate(PI/8,axis=DOWN) for i in range(42)]
vectorfield3=VGroup(*veclist3)
- [veclist3[i].shift(spaceloc[i]) for i in range(98)]
+ [veclist3[i].shift(spaceloc[i]) for i in range(42)]
- veclist4=[Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector(),
- Vector(color=RED),Vector(color=GREEN),Vector(color=BLUE),Vector(color=PINK),Vector(color=MAROON),Vector(color=GREEN),Vector()]
+ veclist4=[Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY)]
- [veclist4[i].rotate(PI/4,axis=RIGHT) for i in range(10,30,1)]
- [veclist4[i].rotate(PI/4,axis=RIGHT) for i in range(40,80,2)]
- [veclist4[i].rotate(PI/6,axis=OUT) for i in range(98)]
- [veclist4[i].rotate(PI/8,axis=DOWN) for i in range(98)]
+ [veclist4[i].rotate(PI/4,axis=RIGHT) for i in range(42)]
+ [veclist4[i].rotate(PI/4,axis=RIGHT) for i in range(42)]
+ [veclist4[i].rotate(PI/6,axis=OUT) for i in range(42)]
+ [veclist4[i].rotate(PI/8,axis=DOWN) for i in range(42)]
vectorfield4=VGroup(*veclist4)
- [veclist4[i].shift(spaceloc[i]) for i in range(98)]
+ [veclist4[i].shift(spaceloc[i]) for i in range(42)]
vectorfield1.shift(1.5*DOWN)
vectorfield2.shift(IN+1.5*DOWN)
vectorfield3.shift(2*IN+1.5*DOWN)
- vectorfield4.shift(3*IN+1.5*DOWN)
+ vectorfield4.shift(3*IN+1.5*DOWN)
+
vectors=[vectorfield1,vectorfield2,vectorfield3,vectorfield4]
vectorfield=VGroup(*vectors)
- vectorfield.scale(1.25)
+ vectorfield.scale(1.3)
+
- fv=[Vector(color=ORANGE),Vector(color=ORANGE),Vector(color=ORANGE),Vector(color=ORANGE),
- Vector(color=ORANGE),Vector(color=ORANGE),Vector(color=ORANGE),Vector(color=ORANGE),
- Vector(color=ORANGE),Vector(color=ORANGE),Vector(color=ORANGE),Vector(color=ORANGE),
- Vector(color=ORANGE),Vector(color=ORANGE),Vector(color=ORANGE),Vector(color=ORANGE),
+ fv=[Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),Vector(color=GREY),
+ Vector(color=GREY)
]
- spaceloc2 = [[1.5,0.5,0.5],[1.5,1,0.5],[1.5,1.5,0.5],[1.5,2,0.5],
- [1.5,0.5,1],[1.5,1,1],[1.5,1.5,1],[1.5,2,1],
- [1.5,0.5,1.5],[1.5,1,1.5],[1.5,1.5,1.5],[1.5,2,1.5],
- [1.5,0.5,2],[1.5,1,2],[1.5,1.5,2],[1.5,2,2]]
-
- [fv[i].rotate(PI/4,axis=RIGHT) for i in range(1)]
- [fv[i].rotate(PI/6,axis=OUT) for i in range(16)]
- [fv[i].rotate(PI/8,axis=DOWN) for i in range(16)]
- [fv[i].shift(spaceloc2[i]) for i in range(16)]
+ spaceloc2 = [[1.5,0.5,0.5],[1.5,1,0.5],[1.5,1.5,0.5],
+ [1.5,0.5,1],[1.5,1,1],[1.5,1.5,1],
+ [1.5,0.5,1.5],[1.5,1,1.5],[1.5,1.5,1.5]
+ ]
+ [fv[i].rotate(PI/4,axis=RIGHT) for i in range(9)]
+ [fv[i].rotate(PI/6,axis=OUT) for i in range(9)]
+ [fv[i].rotate(PI/8,axis=DOWN) for i in range(9)]
+ [fv[i].shift(spaceloc2[i]) for i in range(9)]
fvfield=VGroup(*fv)
- fvfield.shift(0.5*IN+2*DOWN)
+ fvfield.shift(2*DOWN)
+ fvfield.scale(1.3)
- flux=TextMobject("Flux through one side of the cube").set_color(ORANGE)
- flux.shift(3*UP+1.5*LEFT)
+ flux=TextMobject("Flux through one side of the cube").set_color(GOLD)
+ flux.shift(3.5*UP+0.5*LEFT)
+ alll=[vectorfield1,vectorfield2,vectorfield3,vectorfield4,fvfield]
+ alllvectors=VGroup(*alll)
self.set_camera_orientation(phi=70 * DEGREES,theta=-75*DEGREES)
self.play(ShowCreation(axes),ShowCreation(axis_label))
- self.play(ShowCreation(vectorfield))
- self.add(fvfield)
- self.begin_ambient_camera_rotation(rate=0.01)
+ self.begin_ambient_camera_rotation(rate=0.2)
+ self.play(ShowCreation(alllvectors))
+ # self.add(fvfield)
self.play(ShowCreation(cube, run_time=1))
@@ -223,6 +191,6 @@ class cuber(ThreeDScene):
# self.play(ShowCreation(flux))
self.wait(1)
self.play(ShowCreation(v1),ShowCreation(n1))
- self.wait(6)
- # self.stop_ambient_camera_rotation()
-
+ self.wait(5)
+ self.stop_ambient_camera_rotation()
+ self.wait(1)
diff --git a/FSF-2020/calculus/intro-to-calculus/introderivative/derivative1.py b/FSF-2020/calculus/intro-to-calculus/introderivative/derivative1.py
new file mode 100644
index 0000000..79a6fc6
--- /dev/null
+++ b/FSF-2020/calculus/intro-to-calculus/introderivative/derivative1.py
@@ -0,0 +1,55 @@
+from manimlib.imports import *
+class derivative1(GraphScene, Scene):
+ def setup(self):
+ GraphScene.setup(self)
+ CONFIG = {
+ "y_max" : 4,
+ "y_min" : -2,
+ "x_max" : 4,
+ "x_min" : -2,
+ "y_tick_frequency" : 1,
+ "x_tick_frequency" : 1,
+ "axes_color" : WHITE,
+ "num_graph_anchor_points": 3000, #this is the number of points that graph manim
+ "graph_origin" : ORIGIN+2*DOWN+4*LEFT,
+ "x_labeled_nums": list(range(-2,5)),
+ "y_labeled_nums": list(range(-2,5)),
+ "x_axis_label":"$x$",
+ "y_axis_label":r"$f(x)=y= 3-\frac { 3 }{ 2 } x$",
+ "x_axis_width": 5,
+ "y_axis_height": 5,
+ }
+ 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)
+
+ text1 = TextMobject("")
+ text2 = TexMobject("{y}_{2}-{y}_{1}")
+ text2 = TexMobject("{x}_{2}-{x}_{1}")
+ text3 = TexMobject(r"m\quad =\frac { { y }_{ 2 }-{ y }_{ 1 } }{ { x }_{ 2 }-{ x }_{ 1 } }").move_to(np.array([3,0,0]))
+ text4 = TexMobject(r"m\quad =\frac { 3 }{ -2 }").move_to(np.array([3,0,0]))
+ text5 = TexMobject(r"m\quad =\quad -1.5").move_to(np.array([3,0,0]))
+ self.setup_axes()
+ graph_1 = self.get_graph(lambda x : 3-1.5*x, color = GREEN_SCREEN, x_min = -1, x_max = 3)
+ graph_2 = self.get_graph(lambda x : 3.1-1.5*x, color = ORANGE, x_min = 0, x_max = 2)
+ dot1 = Dot()
+ dot2 = SmallDot(self.graph_origin+1.7*RIGHT, color = PINK)
+ dot3 = SmallDot(self.graph_origin+2.5*UP, color = RED_B)
+ vec1 = Vector(2.5*DOWN, color = PINK).shift(self.graph_origin+2.5*UP)
+ vec2 = Vector(1.7*RIGHT, color = RED_B).shift(self.graph_origin)
+ brace1 = Brace(vec1, LEFT)
+ brace2 = Brace(vec2, DOWN)
+ br1text = brace1.get_text(r"${y}_{2}-{y}_{1}$").next_to(brace1, LEFT)
+ br2text = brace2.get_text(r"${x}_{2}-{x}_{1}$").next_to(brace2, DOWN)
+ self.play(ShowCreation(graph_1), ShowCreation(dot2), ShowCreation(dot3))
+ self.play(MoveAlongPath(dot1, graph_2), ShowCreation(vec1), ShowCreation(vec2), run_time = 3)
+ self.wait(1)
+ self.play(ShowCreation(brace1), ShowCreation(brace2))
+ self.play(ShowCreation(br1text), ShowCreation(br2text))
+ self.wait(2)
+ self.play(GrowFromCenter(text3))
+ self.wait(2.5)
+ self.play(ReplacementTransform(text3, text4))
+ self.wait(2)
+ self.play(ReplacementTransform(text4, text5))
+ self.wait(2)
diff --git a/FSF-2020/calculus/intro-to-calculus/introderivative/derivative2.py b/FSF-2020/calculus/intro-to-calculus/introderivative/derivative2.py
new file mode 100644
index 0000000..d6aab15
--- /dev/null
+++ b/FSF-2020/calculus/intro-to-calculus/introderivative/derivative2.py
@@ -0,0 +1,78 @@
+from manimlib.imports import *
+class derivative2(GraphScene, MovingCameraScene):
+ def setup(self):
+ GraphScene.setup(self)
+ MovingCameraScene.setup(self)
+ CONFIG = {
+ "y_max" : 100,
+ "y_min" : 0,
+ "x_max" : 10,
+ "x_min" : 0,
+ "y_tick_frequency" : 100,
+ "x_tick_frequency" : 10,
+ "axes_color" : WHITE,
+ "num_graph_anchor_points": 3000, #this is the number of points that graph manim
+ "graph_origin" : ORIGIN,
+ "x_labeled_nums": None,#list(range(0,11)),
+ "y_labeled_nums": None,#list(range(0,101))[::10],
+ "x_axis_label":"$x$",
+ "y_axis_label":"$f(x)$",
+ "x_axis_width": 5,
+ "y_axis_height": 5,
+ "start_x" : 2,
+ "start_dx" : 6,
+ "df_color" : YELLOW,
+ "dx_color" : GREEN,
+ "secant_line_color" : MAROON_B,
+ "zoomed_camera_frame_starting_position": ORIGIN+2*DOWN+6*LEFT,
+ }
+ def construct(self):
+ self.setup()
+ self.camera_frame.save_state()
+ self.graph_origin = ORIGIN+2*DOWN+6*LEFT
+ self.setup_axes()
+ graph23 = self.get_graph(lambda x : x**2+7, color = GREEN_SCREEN, x_min = 0, x_max = 10)
+ graph24 = self.get_graph(lambda x : x**2+7, color = GREEN_SCREEN, x_min = 8, x_max = 2.01)
+ line_1 = DashedVMobject(Line(np.array([-5,-2,0]), np.array([-5,-1.42,0])))
+ textdef = TextMobject("")
+ text1 = TexMobject("{ x }_{ 0 }").move_to(np.array([-5,-2.2,0]))
+ text2 = TextMobject("The line becomes tangential to the curve").move_to(self.graph_origin+RIGHT+0.5*UP).scale(0.01)
+ text3 = TexMobject(r"\frac { df }{ dx } =\frac { f({ x }_{ 0 }+h)-f({ x }_{ 0 }) }{ h-0 }").move_to(2*RIGHT)
+ text4 = TexMobject(r"\frac { df }{ dx } =\lim _{ h\rightarrow 0 }{ \frac { f({ x }_{ 0 }+h)-f({ x }_{ 0 }) }{ h } }").move_to(2*RIGHT)
+ squareobj = Square(side_length = 15).move_to(self.graph_origin+RIGHT+0.53*UP)
+ ss_group = self.get_secant_slope_group(
+ self.start_x, graph23,
+ dx = self.start_dx,
+ dx_label = "h",
+ df_label = "df",
+ df_line_color = self.df_color,
+ dx_line_color = self.dx_color,
+ secant_line_color = self.secant_line_color,
+ dot_df_top = True,
+ dot_dx_start = True,
+ dot_df_top_label = "Q",
+ dot_dx_start_label = "P",
+ secant_line_length = 8
+ )
+ self.play(ShowCreation(graph23))
+ self.wait()
+ self.play(ShowCreation(ss_group.secant_line))
+ self.add(text1)
+ self.play(ShowCreation(line_1))
+ self.wait(3)
+ self.play(ShowCreation(ss_group.dx_line))
+ self.play(ShowCreation(ss_group.dx_label))
+ self.play(ShowCreation(ss_group.df_line))
+ self.play(Write(ss_group.df_label))
+ self.play(ShowCreation(ss_group.dot_df_top), ShowCreation(ss_group.dot_dx_start))
+ self.play(ShowCreation(ss_group.dot_df_top_label), ShowCreation(ss_group.dot_dx_start_label))
+ self.wait()
+ self.play(ShowCreation(text3))
+ self.wait(2)
+ self.play(ReplacementTransform(text3, text4))
+ self.animate_secant_slope_group_change(ss_group, target_dx = 0.01, run_time = 5)
+ self.wait(2)
+ self.play(self.camera_frame.set_width,0.2,self.camera_frame.move_to,squareobj,run_time = 2)
+ self.wait()
+ self.play(ShowCreation(text2))
+ self.wait(3)
diff --git a/FSF-2020/calculus/intro-to-calculus/introderivative/derivative3.py b/FSF-2020/calculus/intro-to-calculus/introderivative/derivative3.py
new file mode 100644
index 0000000..ebbacb1
--- /dev/null
+++ b/FSF-2020/calculus/intro-to-calculus/introderivative/derivative3.py
@@ -0,0 +1,57 @@
+from manimlib.imports import *
+class derivative3(GraphScene, Scene):
+ def setup(self):
+ Scene.setup(self)
+ #ZoomedScene.setup(self)
+ CONFIG = {
+ "y_max" : 8,
+ "y_min" : 0,
+ "x_max" : 11,
+ "x_min" : 0,
+ "y_tick_frequency" : 1,
+ "x_tick_frequency" : 1,
+ "axes_color" : WHITE,
+ "num_graph_anchor_points": 3000, #this is the number of points that graph manim
+ "graph_origin" : ORIGIN+3*DOWN+6.5*LEFT,
+ "x_labeled_nums": list(range(0,12))[::1],
+ "y_labeled_nums": list(range(0,9))[::1],
+ "x_axis_label":"$t$",
+ "y_axis_label":"$s$",
+ "x_axis_width": 5,
+ "y_axis_height": 5,
+ }
+ 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()
+ graph_1 = self.get_graph(lambda x : -(x-2)**2+4, color = GOLD_A, x_min = 0, x_max = 1.5)
+ graph_2 = self.get_graph(lambda x : 1*x+2.25, color = GOLD_A, x_min = 1.5, x_max = 5)
+ graph_3 = self.get_graph(lambda x : 7.25, color = GOLD_A, x_min = 5, x_max = 8)
+ graph_4 = self.get_graph(lambda x : -3.625*x + 36.25, color = GOLD_A, x_min = 8, x_max = 10)
+
+ self.y_max = 5
+ self.x_max = 10
+ self.x_min = 0
+ self.y_min = -5
+ self.x_labeled_nums = list(range(0,11))
+ self.y_labeled_nums = list(range(-5,6))[::1]
+ self.x_axis_label = r"$t$"
+ self.y_axis_label = r"$v$"
+ self.y_tick_frequency = 1
+ self.x_tick_frequency = 1
+ self.graph_origin = ORIGIN+1*RIGHT
+ self.setup_axes()
+ graph_5 = self.get_graph(lambda x : 2*(x-2)+4, color = GREEN_SCREEN, x_min = 0, x_max = 1.5)
+ graph_6 = self.get_graph(lambda x : 3, color = GREEN_SCREEN, x_min = 1.5, x_max = 5)
+ graph_7 = self.get_graph(lambda x : 0, color = GREEN_SCREEN, x_min = 5, x_max = 8)
+ graph_8 = self.get_graph(lambda x : -3.625, color = GREEN_SCREEN, x_min = 8, x_max = 10)
+ line1 = DashedVMobject(Line(self.graph_origin+2.5*RIGHT, self.graph_origin+2.5*RIGHT+1.5*UP))
+ line2 = DashedVMobject(Line(self.graph_origin+4*RIGHT, self.graph_origin+4*RIGHT+1.835*DOWN))
+ self.play(ShowCreation(graph_1), ShowCreation(graph_5), run_time = 3)
+ self.play(ShowCreation(graph_2), ShowCreation(graph_6), run_time = 3)
+ self.add(line1)
+ self.play(ShowCreation(graph_3), ShowCreation(graph_7), run_time = 3)
+ self.add(line2)
+ self.play(ShowCreation(graph_4), ShowCreation(graph_8), run_time = 3)
+ self.wait(3)
diff --git a/FSF-2020/calculus/intro-to-calculus/limit/Test1.py b/FSF-2020/calculus/intro-to-calculus/limit/Test1.py
new file mode 100644
index 0000000..bd7d2a6
--- /dev/null
+++ b/FSF-2020/calculus/intro-to-calculus/limit/Test1.py
@@ -0,0 +1,34 @@
+from manimlib.imports import *
+class Test1(GraphScene):
+ CONFIG = {
+ "y_max" : 5,
+ "y_min" : -5,
+ "x_max" : 5,
+ "x_min" : -5,
+ "y_tick_frequency" : 1,
+ "x_tick_frequency" : 1,
+ "axes_color" : BLUE,
+ "num_graph_anchor_points": 3000, #this is the number of points that graph manim
+ "graph_origin" : ORIGIN,
+ "x_labeled_nums": list(range(-5,6)),
+ "y_labeled_nums": list(range(-5,6)),
+ "x_axis_label":"$x$",
+ "y_axis_label":"${ f }_{ 1 }(x)$"
+ }
+ def construct(self):
+ self.setup_axes()
+ cir1 = Circle(radius = 0.1, color = BLUE)
+ graph_1 = self.get_graph(lambda x : x+2,
+ color = GREEN,
+ x_min = -5, # Domain 1
+ x_max = +1.9
+ )
+ graph_2 =self.get_graph(lambda x : x+2,
+ color = GREEN,
+ x_min = 2.1, # Domain 2
+ x_max = 5
+ )
+ cir1.move_to(np.array([1,2,0]))
+ self.play(ShowCreation(graph_1))
+ self.play(ShowCreation(cir1))
+ self.play(ShowCreation(graph_2))
diff --git a/FSF-2020/calculus/intro-to-calculus/limit/Test2.py b/FSF-2020/calculus/intro-to-calculus/limit/Test2.py
new file mode 100644
index 0000000..0efb565
--- /dev/null
+++ b/FSF-2020/calculus/intro-to-calculus/limit/Test2.py
@@ -0,0 +1,26 @@
+from manimlib.imports import *
+class Test2(GraphScene):
+ CONFIG = {
+ "y_max" : 5,
+ "y_min" : -5,
+ "x_max" : 5,
+ "x_min" : -5,
+ "y_tick_frequency" : 1,
+ "x_tick_frequency" : 1,
+ "axes_color" : BLUE,
+ "num_graph_anchor_points": 3000, #this is the number of points that graph manim
+ "graph_origin" : ORIGIN,
+ "x_labeled_nums": list(range(-5,6)),
+ "y_labeled_nums": list(range(-5,6)),
+ "x_axis_label":"$x$",
+ "y_axis_label":"${ f }_{ 1 }(x)$"
+ }
+ def construct(self):
+ self.setup_axes()
+ graph_1 = self.get_graph(lambda x : x+2,
+ color = GREEN,
+ x_min = -5, # Domain 1
+ x_max = +5
+ )
+ self.play(ShowCreation(graph_1))
+ self.wait()
diff --git a/FSF-2020/calculus/intro-to-calculus/limit/limit1.py b/FSF-2020/calculus/intro-to-calculus/limit/limit1.py
new file mode 100644
index 0000000..fe5cb1e
--- /dev/null
+++ b/FSF-2020/calculus/intro-to-calculus/limit/limit1.py
@@ -0,0 +1,105 @@
+from manimlib.imports import *
+class limit1(GraphScene,MovingCameraScene):
+ def setup(self):
+ GraphScene.setup(self)
+ MovingCameraScene.setup(self)
+ CONFIG = {
+ "y_max" : 1,
+ "y_min" : 0,
+ "x_max" : 1,
+ "x_min" : -1,
+ "y_tick_frequency" : 0.2,
+ "x_tick_frequency" : 0.2,
+ "axes_color" : WHITE,
+ "num_graph_anchor_points": 3000, #this is the number of points that graph manim
+ "graph_origin" : ORIGIN+3*DOWN,
+ "x_labeled_nums": list(range(-1,2)),
+ "y_labeled_nums": list(range(0,2)),
+ "x_axis_label":"$x$",
+ "y_axis_label":"$f(x)$",
+ "x_axis_width": 10,
+ "y_axis_height": 5,
+ }
+ 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)
+
+ dot1 = SmallDot(np.array([0.025,-2.975,0]))
+ dot2 = SmallDot(np.array([-0.025,-2.975,0]))
+ sqr = Square(side_length = 15.0).move_to(np.array([0,-3,0]))
+ brline1 = DashedVMobject(Line(np.array([0.15,-3,0]), np.array([0.15,-2.85,0])))
+ brline2 = DashedVMobject(Line(np.array([0.025,-3,0]), np.array([0.025,-2.975,0])))
+ brline3 = DashedVMobject(Line(np.array([-0.15,-3,0]), np.array([-0.15,-2.85,0])))
+ brline4 = DashedVMobject(Line(np.array([-0.025,-3,0]), np.array([-0.025,-2.975,0])))
+ textdef = TextMobject("")
+ text003 = TextMobject("0.03").move_to(np.array([0.15,-3.05,0])).scale(0.1)
+ textazero1 = TexMobject(r"\approx 0").move_to(np.array([0.04,-3.05,0])).scale(0.1)
+ textazero2 = TexMobject(r"\approx 0").move_to(np.array([-0.04,-3.05,0])).scale(0.1)
+ textm003 = TextMobject("-0.03").move_to(np.array([-0.15,-3.05,0])).scale(0.1)
+ text2 = TextMobject("Let f(x) = |x|. We'll check neighbourhood of origin")
+ text3 = TextMobject("h has to be a very small number greater than 0").move_to(np.array([0,-3.3,0])).scale(0.2)
+ text4 = TextMobject("The point travels through range of neighbourhood").move_to(np.array([0,-3.3,0])).scale(0.19)
+ text5 = TextMobject("let h be equal to 0.03").move_to(np.array([0,-3.3,0])).scale(0.25)
+ text6 = TextMobject("Notice how the point never touches the origin").move_to(np.array([0,-3.3,0])).scale(0.2)
+ text7 = TextMobject("Green line shows the Right hand neighbourhood of origin").move_to(np.array([0,-3.3,0])).scale(0.17)
+ text8 = TextMobject("The point is approaching (0,0) for the values of x which are positive").move_to(np.array([0,-3.3,0])).scale(0.1)
+ text9 = TextMobject("Values of x are tending to 0 from positive side").move_to(np.array([0,-3.3,0])).scale(0.19)
+ text10 = TexMobject(r"\text {Notation for this is }",r"x\rightarrow { 0 }^{ + }").move_to(np.array([0,-3.3,0])).scale(0.25)
+ text11 = TextMobject("Similar case can be made for negative values of x").move_to(np.array([0,-3.3,0])).scale(0.19)
+ text12 = TextMobject("The point is approaching (0,0) for the values of x which are negative").move_to(np.array([0,-3.3,0])).scale(0.1)
+ text13 = TextMobject("Values of x are tending to 0 from negative side").move_to(np.array([0,-3.3,0])).scale(0.19)
+ text14 = TexMobject(r"\text {Notation for this is }",r"x\rightarrow { 0 }^{ - }").move_to(np.array([0,-3.3,0])).scale(0.25)
+
+
+ self.play(FadeIn(text2), run_time = 1.5)
+ self.wait(2.5)
+ self.setup_axes()
+ graph_1 = self.get_graph(lambda x : x, color = RED, x_min = 0, x_max = 1)
+ graph_2 = self.get_graph(lambda x : -x, color = RED, x_min = 0, x_max = -1)
+ graph_3 = self.get_graph(lambda x : x,color = RED, x_min = 0.005, x_max = 0.03)
+ graph_4 = self.get_graph(lambda x : x,color = GREEN_SCREEN, x_min = 0.03, x_max = 0.005)
+ graph_5 = self.get_graph(lambda x : -x,color = GREEN_SCREEN, x_min = -0.03, x_max = -0.005)
+ grp1 = VGroup(graph_1,graph_2)
+ grp2 = VGroup(brline2, textazero1)
+ grp3 = VGroup(textazero2, textm003, brline3, brline4)
+ self.play(ShowCreation(grp1))
+ self.add(sqr)
+ self.play(ReplacementTransform(text2, text3))
+ self.camera_frame.save_state()
+ self.play(self.camera_frame.set_width,2.25,self.camera_frame.move_to,sqr,run_time = 2)
+ self.wait(2.5)
+ self.play(ReplacementTransform(text3, text4), ShowCreation(dot1))
+ self.wait(2.5)
+ self.play(ReplacementTransform(text4, text5), ShowCreation(brline1), ShowCreation(text003))
+ self.wait(2.5)
+ for i in range(0,3):
+ self.play(MoveAlongPath(dot1,graph_3), run_time = 0.5)
+ self.play(MoveAlongPath(dot1,graph_4), run_time = 0.5)
+ self.play(ReplacementTransform(text5, text6), ShowCreation(grp2))
+ self.wait(2)
+ self.play(FadeOut(dot1))
+ self.add(graph_4)
+ self.play(ReplacementTransform(text6, text7))
+ self.wait(2.5)
+ self.play(ReplacementTransform(text7,text8))
+ for i in range(0,3):
+ self.play(MoveAlongPath(dot1,graph_4), run_time = 0.7)
+ self.play(ReplacementTransform(text8, text9))
+ self.wait(2.5)
+ self.play(ReplacementTransform(text9, text10))
+ self.wait(2.5)
+ self.play(ShowCreation(grp3), ReplacementTransform(text10, text11), FadeOut(dot1))
+ self.add(graph_5)
+ for i in range(0,3):
+ self.play(MoveAlongPath(dot2, graph_5), run_time = 0.7)
+ self.play(ReplacementTransform(text11, text12))
+ self.wait(2.5)
+ self.play(ReplacementTransform(text12, text13))
+ self.wait(2.5)
+ self.play(ReplacementTransform(text13, text14))
+ self.wait(2)
+ self.play(FadeOut(dot2), ReplacementTransform(text14, textdef))
+ self.wait(2)
+ self.play(Restore(self.camera_frame))
+
+ self.wait(2.5)
diff --git a/FSF-2020/calculus/intro-to-calculus/limit/limit3.py b/FSF-2020/calculus/intro-to-calculus/limit/limit3.py
new file mode 100644
index 0000000..a4f07d7
--- /dev/null
+++ b/FSF-2020/calculus/intro-to-calculus/limit/limit3.py
@@ -0,0 +1,95 @@
+from manimlib.imports import *
+class limit3(GraphScene, MovingCameraScene):
+ def setup(self):
+ GraphScene.setup(self)
+ MovingCameraScene.setup(self)
+ CONFIG = {
+ "y_max" : 10,
+ "y_min" : 0,
+ "x_max" : 100,
+ "x_min" : 0,
+ "y_tick_frequency" : 1,
+ "x_tick_frequency" : 10,
+ "axes_color" : WHITE,
+ "num_graph_anchor_points": 3000, #this is the number of points that graph manim
+ "graph_origin" : ORIGIN+3*DOWN+4*LEFT,
+ "x_labeled_nums": list(range(0,101))[::10],
+ "y_labeled_nums": list(range(0,11)),
+ "x_axis_label":"$x$",
+ "y_axis_label":"$f(x)$",
+ "x_axis_width": 10,
+ "y_axis_height": 5,
+ }
+ 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)
+ sqr1 = Square(side_length = 15).move_to(np.array([1,0.5,0]))
+ sqr2 = Square(side_length = 15).move_to(np.array([-4,-3,0]))
+
+ textdef = TextMobject("")
+ text20 = TextMobject("f(x) is not defined at x=50").move_to(np.array([1,0.3,0])).scale(0.2)
+ text21 = TexMobject(r"\text {f(x) is not defined in interval }",r" (-\infty ,\quad 1]").move_to(np.array([-4,-3.2,0])).scale(0.18)
+ text22 = TextMobject("1").move_to(np.array([-3.9,-3.05,0])).scale(0.2)
+ text1 = TexMobject(r"\text {Let }" ,r"f\left( x \right) =\begin{cases} \sqrt { x-1 } ,x\in \quad (1,\infty )-50 \end{cases}")
+ text2 = TextMobject("Graph of f(x) is ")
+ text3 = TextMobject("Right hand neighbour of 50 will approximately be 50.000001").move_to(np.array([1,0.3,0])).scale(0.15)
+ text4 = TextMobject("Left hand neighbour of 50 will approximately be 49.999999").move_to(np.array([1,0.3,0])).scale(0.15)
+ text5 = TexMobject(r"\text {Hence R.H.L }", r"=\lim _{ x\rightarrow { 50 }^{ + } }{ \sqrt { 50.000001 - 1 } } \approx 7.000000071").move_to(np.array([1,0.3,0])).scale(0.13)
+ text6 = TexMobject(r"\text{Hence L.H.L }", r" = \lim _{ x\rightarrow { 50 }^{ - } }{ \sqrt { 49.999999-1 } }\approx 6.999999929").move_to(np.array([1,0.3,0])).scale(0.13)
+ text7 = TextMobject("7.000000071").move_to(np.array([1.9,0.25,0])).scale(0.1)
+ text8 = TextMobject("6.999999929").move_to(np.array([0.1,0.25,0])).scale(0.1)
+ text9 = TexMobject(r"6.999999929\quad \approx \quad 7.000000071 \quad \approx 7").move_to(np.array([1,0.25,0])).scale(0.2)
+ text10 = TexMobject(r"\text{Because LHL }" ,r"\approx" ,r"\text{ RHL, Limit exists at x=50 and equals 7").move_to(np.array([1,0.25,0])).scale(0.13)
+ text11 = TextMobject("There is no Left hand neighbour of x=1").move_to(np.array([-4,-3.2,0])).scale(0.22)
+ text12 = TexMobject(r"\therefore\quad \lim _{ x\rightarrow 0 }{ f(x) } \quad =\quad \lim _{ x\rightarrow { 0 }^{ + } }{ f(x) } ").move_to(np.array([-4,-3.2,0])).scale(0.25)
+ text13 = TexMobject(r"\text {R.H.L =}",r" \lim _{ x\rightarrow { 0 }^{ + } }{ \sqrt { 1.000000000001-1 } } \quad \approx 0").move_to(np.array([-4,-3.2,0])).scale(0.13)
+ text14 = TexMobject(r"\therefore \quad \lim _{ x\rightarrow 0 }{ f(x)\quad =\quad 0 }").move_to(np.array([-4,-3.2,0])).scale(0.13)
+ self.camera_frame.save_state()
+ self.play(ShowCreation(text1))
+ self.wait(3)
+ self.play(ReplacementTransform(text1, text2))
+ self.wait()
+ self.play(ReplacementTransform(text2, textdef))
+ self.setup_axes()
+ self.setup()
+ graph_1 = self.get_graph(lambda x : (x-1)**(1/2),color = PINK, x_min = 1, x_max = 49.9)
+ graph_2 = self.get_graph(lambda x : (x-1)**(1/2),color = PINK, x_min = 50.1, x_max = 100)
+ graph_3 = self.get_graph(lambda x : (x-1)**(1/2),color = PINK, x_min = 1.05, x_max = 1.001)
+ dot1 = SmallDot(color = PURPLE_A)
+ cir = Circle(radius = 0.01, color = GREEN_SCREEN).move_to(np.array([1,0.5,0]))
+ grp1 = VGroup(graph_1, graph_2, cir)
+ grp2 = VGroup(text7, text8)
+ self.play(ShowCreation(grp1))
+ self.wait(2)
+ self.play(self.camera_frame.set_width,2.25,self.camera_frame.move_to,sqr1,run_time = 2)
+ self.wait(1)
+ self.play(ShowCreation(text20))
+ self.wait(2)
+ self.play(ReplacementTransform(text20, text3))
+ self.wait(3)
+ self.play(ReplacementTransform(text3, text5))
+ self.wait(3)
+ self.play(ReplacementTransform(text5, text7), ShowCreation(text4))
+ self.wait(4)
+ self.play(ReplacementTransform(text4, text6))
+ self.wait(3)
+ self.play(ReplacementTransform(text6, text8))
+ self.wait(1.5)
+ self.play(ReplacementTransform(grp2, text9))
+ self.wait(1.5)
+ self.play(ReplacementTransform(text9, text10))
+ self.wait(3)
+ self.play(self.camera_frame.set_width,2.25,self.camera_frame.move_to,sqr2,run_time = 2)
+ self.play(ShowCreation(text21), ShowCreation(text22))
+ self.play(MoveAlongPath(dot1, graph_3), run_time = 3)
+ self.wait(3)
+ self.play(ReplacementTransform(text21, text11))
+ self.wait(3)
+ self.play(ReplacementTransform(text11, text12))
+ self.wait(3)
+ self.play(ReplacementTransform(text12, text13))
+ self.wait(2)
+ self.play(ReplacementTransform(text13, text14))
+ self.wait(3)
+ self.play(ReplacementTransform(text14, textdef))
+ self.wait(2)
diff --git a/FSF-2020/calculus/intro-to-calculus/limit/limitdef.py b/FSF-2020/calculus/intro-to-calculus/limit/limitdef.py
new file mode 100644
index 0000000..15f2845
--- /dev/null
+++ b/FSF-2020/calculus/intro-to-calculus/limit/limitdef.py
@@ -0,0 +1,73 @@
+from manimlib.imports import *
+class limitdef(GraphScene, Scene):
+ CONFIG = {
+ "y_max" : 5,
+ "y_min" : 0,
+ "x_max" : 5,
+ "x_min" : -5,
+ "y_tick_frequency" : 1,
+ "x_tick_frequency" : 1,
+ "axes_color" : WHITE,
+ "num_graph_anchor_points": 3000, #this is the number of points that graph manim
+ "graph_origin" : ORIGIN+2*DOWN,
+ "x_labeled_nums": None,#list(range(-1,2)),
+ "y_labeled_nums": None,#list(range(0,2)),
+ "x_axis_label":"$x$",
+ "y_axis_label":"$f(x)$",
+ "x_axis_width": 10,
+ "y_axis_height": 5,
+ }
+ def construct(self):
+ Ldot = MediumDot(self.graph_origin+2.1*UP).set_color(GREEN_SCREEN)
+ adot = MediumDot(self.graph_origin+3*RIGHT).set_color(PINK)
+ epline1 = DashedVMobject(Line(self.graph_origin+1*LEFT+2.5*UP, self.graph_origin+4*RIGHT+2.5*UP))
+ epline2 = DashedVMobject(Line(self.graph_origin+1*LEFT+1.7*UP, self.graph_origin+4*RIGHT+1.7*UP))
+ epline3 = DashedVMobject(Line(self.graph_origin+3.5*RIGHT+0.5*DOWN, self.graph_origin+3.5*RIGHT+2.5*UP))
+ epline4 = DashedVMobject(Line(self.graph_origin+2.5*RIGHT+0.5*DOWN, self.graph_origin+2.5*RIGHT+2.5*UP))
+ Lline = Line(self.graph_origin+2.1*UP, self.graph_origin+3*RIGHT+2.1*UP).set_color(GREEN_SCREEN)
+ aline = Line(self.graph_origin+3*RIGHT, self.graph_origin+3*RIGHT+2.1*UP).set_color(PINK)
+ vertical_rectangle = Rectangle(width = 1, height = 0.8, color = PINK, fill_opacity = 0.5, fill_color = LIGHT_PINK).move_to(self.graph_origin+3*RIGHT+2.1*UP)
+ horizontal_rectangle = Rectangle(width = 1, height = 0.8, color = GREEN_SCREEN, fill_opacity = 0.5, fill_color = GREEN).move_to(self.graph_origin+3*RIGHT+2.1*UP)
+ vec1 = Line(self.graph_origin+2.5*UP, self.graph_origin+2.1*UP)
+ vec2 = Line(self.graph_origin+2.1*UP, self.graph_origin+1.7*UP)
+ vec3 = Line(self.graph_origin+2.5*RIGHT, self.graph_origin+3*RIGHT)
+ vec4 = Line(self.graph_origin+3*RIGHT, self.graph_origin+3.5*RIGHT)
+ brace1 = Brace(vec1, LEFT)
+ brace2 = Brace(vec2, LEFT)
+ brace3 = Brace(vec3, DOWN)
+ brace4 = Brace(vec4, DOWN)
+ br1text = brace1.get_text(r"$\epsilon$").next_to(brace1, LEFT)
+ br2text = brace2.get_text(r"$\epsilon$").next_to(brace2, LEFT)
+ br3text = brace3.get_text(r"$\delta$").next_to(brace3, DOWN)
+ br4text = brace4.get_text(r"$\delta$").next_to(brace4, DOWN)
+ epgrp = VGroup(epline1, epline2, Ldot, adot, Lline, aline, epline4, epline3)
+ recgrp = VGroup(vertical_rectangle, horizontal_rectangle)
+ epbrgrp = VGroup(brace1, brace2, br1text, br2text)
+ delbrgrp = VGroup(brace3, brace4, br3text, br4text)
+ self.setup_axes()
+ graph_1 = self.get_graph(lambda x :0.1*(x+1)**2 +0.5, x_min = -5, x_max = 5)
+ graph_2 = self.get_graph(lambda x : 0.1*(x+1)**2 +0.5, x_min = 2.5, x_max = 3.5, color = YELLOW_A)
+ graph_2.shift(2.5*LEFT)
+ self.play(ShowCreation(graph_1))
+ self.wait(2)
+ self.play(ShowCreation(epgrp), ShowCreation(horizontal_rectangle), ShowCreation(vertical_rectangle))
+ self.wait(2)
+ self.play(ShowCreation(epbrgrp))
+ self.play(ShowCreation(delbrgrp))
+ self.wait(2)
+ self.play(FadeOut(recgrp))
+ self.wait(2)
+ for i in range(0,1):
+ self.play(ApplyMethod(graph_2.shift, 2.5*RIGHT))
+ self.wait(1)
+ self.play(ApplyMethod(graph_2.shift, 1.7*DOWN))
+ self.play(ApplyMethod(graph_2.shift, 1.7*UP))
+ self.wait(1)
+ self.play(ApplyMethod(graph_2.shift, 2.5*LEFT))
+ self.play(ApplyMethod(graph_2.shift, 2.5*RIGHT))
+ self.wait(1)
+ self.play(ApplyMethod(graph_2.shift, 1.7*DOWN))
+ self.play(ApplyMethod(graph_2.shift, 1.7*UP))
+ self.wait(1)
+ self.play(ApplyMethod(graph_2.shift, 2.5*LEFT))
+ self.wait()
diff --git a/FSF-2020/calculus/intro-to-calculus/riemannintegrals/README.md b/FSF-2020/calculus/intro-to-calculus/riemannintegrals/README.md
new file mode 100644
index 0000000..a9ad0bb
--- /dev/null
+++ b/FSF-2020/calculus/intro-to-calculus/riemannintegrals/README.md
@@ -0,0 +1,18 @@
+rierect1.gif
+![rierect1](https://user-images.githubusercontent.com/61246381/87141790-3ad90800-c2c1-11ea-86e4-af05cb93fa2d.gif)
+
+
+rierect2.gif
+![rierect2](https://user-images.githubusercontent.com/61246381/87141870-5ba15d80-c2c1-11ea-9307-40acc2884d77.gif)
+
+
+rierect3.gif
+![rierect3](https://user-images.githubusercontent.com/61246381/87141949-6e1b9700-c2c1-11ea-9433-4f6be752aa55.gif)
+
+
+RiemannRectanglesAnimation.
+![RiemannRectanglesAnimation](https://user-images.githubusercontent.com/61246381/87142531-4a0c8580-c2c2-11ea-8f5e-9e854eae6eec.gif)
+
+
+mimi.gif
+![mimi](https://user-images.githubusercontent.com/61246381/87142127-b3d85f80-c2c1-11ea-864e-627e41d87ea2.gif)
diff --git a/FSF-2020/calculus/intro-to-calculus/riemannintegrals/RiemannRectanglesAnimation.py b/FSF-2020/calculus/intro-to-calculus/riemannintegrals/RiemannRectanglesAnimation.py
new file mode 100644
index 0000000..a278c9d
--- /dev/null
+++ b/FSF-2020/calculus/intro-to-calculus/riemannintegrals/RiemannRectanglesAnimation.py
@@ -0,0 +1,64 @@
+from manimlib.imports import *
+class RiemannRectanglesAnimation(GraphScene):
+ CONFIG = {
+ "y_max": 5,
+ "x_max": 6,
+ "x_min": 0,
+ "y_min": 0,
+ "x_axis_width": 5,
+ "y_axis_height": 5,
+ "init_dx":0.5,
+ "graph_origin": ORIGIN+2*DOWN+6*LEFT,
+ }
+ def construct(self):
+ self.setup_axes()
+ def func(x):
+ return 0.1*(x)*(x-3)*(x-7)+3
+
+ graph1=self.get_graph(func,x_min=0,x_max=6)
+ kwargs = {
+ "x_min" : 1.5,
+ "x_max" : 5.5,
+ "fill_opacity" : 0.75,
+ "stroke_width" : 0.25,
+ "input_sample_type": "right",
+ }
+ flat_rectangles1 = self.get_riemann_rectangles(self.get_graph(lambda x : 0),dx=self.init_dx,start_color=invert_color(PURPLE),end_color=invert_color(ORANGE),**kwargs)
+ riemann_rectangles_list1 = self.get_riemann_rectangles_list(graph1,8,max_dx=self.init_dx,power_base=2,start_color=PURPLE,end_color=ORANGE,**kwargs)
+ self.add(graph1)
+ self.graph_origin = ORIGIN+2*DOWN+1*RIGHT
+ self.setup_axes()
+ graph2=self.get_graph(func,x_min=0,x_max=6)
+ kwargs = {
+ "x_min" : 1.5,
+ "x_max" : 5.5,
+ "fill_opacity" : 0.75,
+ "stroke_width" : 0.25,
+ "input_sample_type": "left",
+ }
+ flat_rectangles2 = self.get_riemann_rectangles(self.get_graph(lambda x : 0),dx=self.init_dx,start_color=invert_color(PURPLE),end_color=invert_color(ORANGE),**kwargs)
+ riemann_rectangles_list2 = self.get_riemann_rectangles_list(graph2,8,max_dx=self.init_dx,power_base=2,start_color=PURPLE,end_color=ORANGE,**kwargs)
+ self.add(graph2)
+ text1 = TextMobject("Left Riemann sum").move_to(np.array([-3,-2.5,0]))
+ text2 = TextMobject("Right Riemann sum").move_to(np.array([4,-2.5,0]))
+ grp1 = VGroup(text1, text2)
+ text3 = TexMobject(r"n \rightarrow \infty").move_to(np.array([0, -3, 0]))
+ text4 = TextMobject("Left and Right Riemann sums are equal").move_to(np.array([0, -3, 0]))
+ text5 = TextMobject("Hence function is Riemann integrable and value of integral equals area covered").move_to(np.array([0, -3, 0])).scale(0.6)
+ grp2 = VGroup(text1, text2, text3)
+ # Show Riemann rectangles
+ self.play(ReplacementTransform(flat_rectangles1,riemann_rectangles_list1[0]), ReplacementTransform(flat_rectangles2, riemann_rectangles_list2[0]))
+ self.wait()
+ self.play(ShowCreation(grp1))
+ for r in range(1,len(riemann_rectangles_list1)-5):
+ self.transform_between_riemann_rects(riemann_rectangles_list1[r-1],riemann_rectangles_list1[r],replace_mobject_with_target_in_scene = True,)
+ self.transform_between_riemann_rects(riemann_rectangles_list2[r-1],riemann_rectangles_list2[r],replace_mobject_with_target_in_scene = True,)
+ self.play(ShowCreation(text3))
+ for r in range(len(riemann_rectangles_list1)-5,len(riemann_rectangles_list1)):
+ self.transform_between_riemann_rects(riemann_rectangles_list1[r-1],riemann_rectangles_list1[r],replace_mobject_with_target_in_scene = True,)
+ self.transform_between_riemann_rects(riemann_rectangles_list2[r-1],riemann_rectangles_list2[r],replace_mobject_with_target_in_scene = True,)
+ self.wait(2)
+ self.play(ReplacementTransform(grp2, text4))
+ self.wait(2)
+ self.play(ReplacementTransform(text4, text5))
+ self.wait(4)
diff --git a/FSF-2020/calculus/intro-to-calculus/riemannintegrals/mimi.py b/FSF-2020/calculus/intro-to-calculus/riemannintegrals/mimi.py
new file mode 100644
index 0000000..2471c87
--- /dev/null
+++ b/FSF-2020/calculus/intro-to-calculus/riemannintegrals/mimi.py
@@ -0,0 +1,53 @@
+class mimi(GraphScene):
+ CONFIG = {
+ "y_max": 5,
+ "x_max": 6,
+ "x_min": 0,
+ "y_min": 0,
+ "x_axis_width": 5,
+ "y_axis_height": 5,
+ "init_dx":0.5,
+ "graph_origin": ORIGIN+2*DOWN+6*LEFT,
+ }
+ def construct(self):
+ self.setup_axes()
+ def func(x):
+ return 0.1*(x)*(x-3)*(x-7)+3
+
+ graph=self.get_graph(func,x_min=0,x_max=6)
+ kwargs = {
+ "x_min" : 1.5,
+ "x_max" : 5.5,
+ "fill_opacity" : 0.5,
+ "stroke_width" : 0.25,
+ }
+ flat_rectangles = self.get_riemann_rectangles(self.get_graph(lambda x : 0),dx=self.init_dx,**kwargs)
+ riemann_rectangles_list = self.get_riemann_rectangles_list(graph,8,max_dx=self.init_dx,power_base=2,start_color=PURPLE,end_color=ORANGE,**kwargs, input_sample_type = "right")
+ riemann_rectangles_list1 = self.get_riemann_rectangles_list(graph,8,max_dx=self.init_dx,power_base=2,start_color=PURPLE,end_color=ORANGE,**kwargs, input_sample_type = "left")
+ self.add(graph)
+ self.play(ReplacementTransform(flat_rectangles,riemann_rectangles_list[0]), ReplacementTransform(flat_rectangles,riemann_rectangles_list1[0]))
+ #self.play(ReplacementTransform(flat_rectangles,riemann_rectangles_list1[0]))
+ self.wait(2)
+ kwargs = {
+ "x_min" : 3,
+ "x_max" : 3.5,
+ "fill_opacity" : 0.5,
+ "stroke_width" : 0.25,
+ }
+ riemann_rectangles_list2 = self.get_riemann_rectangles_list(graph,8,max_dx=self.init_dx,power_base=2,start_color=PURPLE,end_color=ORANGE,**kwargs, input_sample_type = "right")
+ riemann_rectangles_list3 = self.get_riemann_rectangles_list(graph,8,max_dx=self.init_dx,power_base=2,start_color=PURPLE,end_color=ORANGE,**kwargs, input_sample_type = "left")
+ #self.play(FadeOut(riemann_rectangles_list[0]), FadeOut(riemann_rectangles_list1[0]))
+ self.play(ReplacementTransform(flat_rectangles,riemann_rectangles_list2[0]), ReplacementTransform(flat_rectangles,riemann_rectangles_list3[0]), FadeOut(riemann_rectangles_list[0]), FadeOut(riemann_rectangles_list1[0]))
+ minlim = self.get_vertical_line_to_graph(3,graph,DashedLine)
+ maxlim = self.get_vertical_line_to_graph(3.5,graph,DashedLine)
+ line2 = Line(self.graph_origin+2.5*RIGHT, self.graph_origin+2.9*RIGHT)
+ brace1 = Brace(minlim, LEFT)
+ brace2 = Brace(line2, DOWN)
+ brace3 = Brace(maxlim, RIGHT)
+ br1text = brace1.get_text(r"${M}_{i}$").next_to(brace1, LEFT)
+ br2text = brace2.get_text(r"$\Delta x$").next_to(brace2, DOWN)
+ br3text = brace3.get_text(r"${m}_{i}$").next_to(brace3, RIGHT)
+ text1 = TexMobject(r"\Delta x=(b-a)/n").shift(2*RIGHT)
+ grp3 = VGroup(br1text, br2text, br3text, brace1, brace2, brace3, text1)
+ self.play(ShowCreation(grp3))
+ self.wait(5)
diff --git a/FSF-2020/calculus/intro-to-calculus/riemannintegrals/rierect1.py b/FSF-2020/calculus/intro-to-calculus/riemannintegrals/rierect1.py
new file mode 100644
index 0000000..748d766
--- /dev/null
+++ b/FSF-2020/calculus/intro-to-calculus/riemannintegrals/rierect1.py
@@ -0,0 +1,31 @@
+from manimlib.imports import *
+class rierect1(GraphScene):
+ CONFIG = {
+ "y_max" : 6,
+ "y_min" : 0,
+ "x_max" : 4,
+ "x_min" : 0,
+ "y_tick_frequency" : 1,
+ "x_tick_frequency" : 1,
+ "axes_color" : WHITE,
+ "num_graph_anchor_points": 3000, #this is the number of points that graph manim
+ "graph_origin" : ORIGIN+2*DOWN+4*LEFT,
+ "x_labeled_nums": None,#list(range(-1,2)),
+ "y_labeled_nums": None,#list(range(0,2)),
+ "x_axis_label":"$x$",
+ "y_axis_label":"$f(x)$",
+ "x_axis_width": 10,
+ "y_axis_height": 5,
+ }
+ def construct(self):
+ self.setup_axes()
+ graph1 = self.get_graph(lambda x : (0.1*(1.5*x+1)**2 +0.5), x_min = 0, x_max = 4)
+ minlim = self.get_vertical_line_to_graph(1,graph1,DashedLine, color = PINK)
+ maxlim = self.get_vertical_line_to_graph(3,graph1,DashedLine,color = PINK)
+ x1 = TexMobject(r"{x}_{1}").next_to(minlim, DOWN)
+ x2 = TexMobject(r"{x}_{2}").next_to(maxlim, DOWN)
+ rie1 = self.get_riemann_rectangles(graph1, x_min = 1, x_max = 3, dx = 0.4, input_sample_type = "left", fill_opacity = 1, start_color = YELLOW, end_color = YELLOW)
+ #rie2 = self.get_riemann_rectangles(graph1, x_min = 1, x_max = 3, dx = 0.01, input_sample_type = "right", fill_opacity = 0.5, start_color = PINK, end_color = LIGHT_PINK)
+ group = VGroup(graph1, minlim, maxlim, x1, x2, rie1)
+ self.play(ShowCreation(group))
+ self.wait(1.5)
diff --git a/FSF-2020/calculus/intro-to-calculus/riemannintegrals/rierect2.py b/FSF-2020/calculus/intro-to-calculus/riemannintegrals/rierect2.py
new file mode 100644
index 0000000..e300250
--- /dev/null
+++ b/FSF-2020/calculus/intro-to-calculus/riemannintegrals/rierect2.py
@@ -0,0 +1,31 @@
+from manimlib.imports import *
+class rierect2(GraphScene):
+ CONFIG = {
+ "y_max" : 6,
+ "y_min" : 0,
+ "x_max" : 4,
+ "x_min" : 0,
+ "y_tick_frequency" : 1,
+ "x_tick_frequency" : 1,
+ "axes_color" : WHITE,
+ "num_graph_anchor_points": 3000, #this is the number of points that graph manim
+ "graph_origin" : ORIGIN+2*DOWN+4*LEFT,
+ "x_labeled_nums": None,#list(range(-1,2)),
+ "y_labeled_nums": None,#list(range(0,2)),
+ "x_axis_label":"$x$",
+ "y_axis_label":"$f(x)$",
+ "x_axis_width": 10,
+ "y_axis_height": 5,
+ }
+ def construct(self):
+ self.setup_axes()
+ graph1 = self.get_graph(lambda x : (0.1*(1.5*x+1)**2 +0.5), x_min = 0, x_max = 4)
+ minlim = self.get_vertical_line_to_graph(1,graph1,DashedLine, color = PINK)
+ maxlim = self.get_vertical_line_to_graph(3,graph1,DashedLine,color = PINK)
+ x1 = TexMobject(r"{x}_{1}").next_to(minlim, DOWN)
+ x2 = TexMobject(r"{x}_{2}").next_to(maxlim, DOWN)
+ rie1 = self.get_riemann_rectangles(graph1, x_min = 1, x_max = 3, dx = 0.1, input_sample_type = "left", fill_opacity = 1, start_color = YELLOW, end_color = YELLOW)
+ #rie2 = self.get_riemann_rectangles(graph1, x_min = 1, x_max = 3, dx = 0.01, input_sample_type = "right", fill_opacity = 0.5, start_color = PINK, end_color = LIGHT_PINK)
+ group = VGroup(graph1, minlim, maxlim, x1, x2, rie1)
+ self.play(ShowCreation(group))
+ self.wait(1.5)
diff --git a/FSF-2020/calculus/intro-to-calculus/riemannintegrals/rierect3.py b/FSF-2020/calculus/intro-to-calculus/riemannintegrals/rierect3.py
new file mode 100644
index 0000000..3542358
--- /dev/null
+++ b/FSF-2020/calculus/intro-to-calculus/riemannintegrals/rierect3.py
@@ -0,0 +1,31 @@
+from manimlib.imports import *
+class rierect3(GraphScene):
+ CONFIG = {
+ "y_max" : 6,
+ "y_min" : 0,
+ "x_max" : 4,
+ "x_min" : 0,
+ "y_tick_frequency" : 1,
+ "x_tick_frequency" : 1,
+ "axes_color" : WHITE,
+ "num_graph_anchor_points": 3000, #this is the number of points that graph manim
+ "graph_origin" : ORIGIN+2*DOWN+4*LEFT,
+ "x_labeled_nums": None,#list(range(-1,2)),
+ "y_labeled_nums": None,#list(range(0,2)),
+ "x_axis_label":"$x$",
+ "y_axis_label":"$f(x)$",
+ "x_axis_width": 10,
+ "y_axis_height": 5,
+ }
+ def construct(self):
+ self.setup_axes()
+ graph1 = self.get_graph(lambda x : (0.1*(1.5*x+1)**2 +0.5), x_min = 0, x_max = 4)
+ minlim = self.get_vertical_line_to_graph(1,graph1,DashedLine, color = PINK)
+ maxlim = self.get_vertical_line_to_graph(3,graph1,DashedLine,color = PINK)
+ x1 = TexMobject(r"{x}_{1}").next_to(minlim, DOWN)
+ x2 = TexMobject(r"{x}_{2}").next_to(maxlim, DOWN)
+ rie1 = self.get_riemann_rectangles(graph1, x_min = 1, x_max = 3, dx = 0.01, input_sample_type = "left", fill_opacity = 1, start_color = YELLOW, end_color = YELLOW)
+ #rie2 = self.get_riemann_rectangles(graph1, x_min = 1, x_max = 3, dx = 0.01, input_sample_type = "right", fill_opacity = 0.5, start_color = PINK, end_color = LIGHT_PINK)
+ group = VGroup(graph1, minlim, maxlim, x1, x2, rie1)
+ self.play(ShowCreation(group))
+ self.wait(1.5)
diff --git a/FSF-2020/calculus/series-and-transformations/Fourier Transform/README.md b/FSF-2020/calculus/series-and-transformations/Fourier Transform/README.md
index c5d8389..2fa4e04 100644
--- a/FSF-2020/calculus/series-and-transformations/Fourier Transform/README.md
+++ b/FSF-2020/calculus/series-and-transformations/Fourier Transform/README.md
@@ -7,9 +7,12 @@
### Applying the same on Graphs
![GIF3](gifs/file2b.gif)
-### Fourier series for non-periodic functions
+### Fourier series for non-periodic functions-a
![GIF4](gifs/file3.gif)
+### Fourier series for non-periodic functions-b
+![GIF4a](gifs/file7.gif)
+
### Fourier Series of Square pulse
![GIF5](gifs/file4.gif)
diff --git a/FSF-2020/calculus/series-and-transformations/Fourier Transform/gifs/file3.gif b/FSF-2020/calculus/series-and-transformations/Fourier Transform/gifs/file3.gif
index 533368b..de94810 100644
--- a/FSF-2020/calculus/series-and-transformations/Fourier Transform/gifs/file3.gif
+++ b/FSF-2020/calculus/series-and-transformations/Fourier Transform/gifs/file3.gif
Binary files differ
diff --git a/FSF-2020/calculus/series-and-transformations/Fourier Transform/gifs/file6.gif b/FSF-2020/calculus/series-and-transformations/Fourier Transform/gifs/file6.gif
new file mode 100644
index 0000000..de94810
--- /dev/null
+++ b/FSF-2020/calculus/series-and-transformations/Fourier Transform/gifs/file6.gif
Binary files differ
diff --git a/FSF-2020/calculus/series-and-transformations/Fourier Transform/gifs/file7.gif b/FSF-2020/calculus/series-and-transformations/Fourier Transform/gifs/file7.gif
new file mode 100644
index 0000000..ab4eed8
--- /dev/null
+++ b/FSF-2020/calculus/series-and-transformations/Fourier Transform/gifs/file7.gif
Binary files differ
diff --git a/FSF-2020/calculus/series-and-transformations/Fourier Transform/video1_DividingAToneIntoItsConstituents.py b/FSF-2020/calculus/series-and-transformations/Fourier Transform/video1_DividingAToneIntoItsConstituents.py
index 39db6d8..fdb8719 100644
--- a/FSF-2020/calculus/series-and-transformations/Fourier Transform/video1_DividingAToneIntoItsConstituents.py
+++ b/FSF-2020/calculus/series-and-transformations/Fourier Transform/video1_DividingAToneIntoItsConstituents.py
@@ -1,13 +1,6 @@
from manimlib.imports import*
import numpy as np
-# def func(t,n):
-# s=0
-# for i in range(1,n+1):
-# s+=((-2/(i*np.pi))*((-1)**i)*np.sin(2*np.pi*i*t))
-# return s
-
-
class intro(GraphScene):
CONFIG = {
"x_min": -3,
diff --git a/FSF-2020/calculus/series-and-transformations/Fourier Transform/video2_ColorsAnalogyForFourierSeries.py b/FSF-2020/calculus/series-and-transformations/Fourier Transform/video2_ColorsAnalogyForFourierSeries.py
index 8f3706b..c87e58e 100644
--- a/FSF-2020/calculus/series-and-transformations/Fourier Transform/video2_ColorsAnalogyForFourierSeries.py
+++ b/FSF-2020/calculus/series-and-transformations/Fourier Transform/video2_ColorsAnalogyForFourierSeries.py
@@ -101,27 +101,27 @@ class divideColors(GraphScene):
self.get_graph(lambda x:func(x,6,24),x_min=-1,x_max=1).set_color([DARK_BROWN,RED_C]),
self.get_graph(lambda x:func(x,7,24),x_min=-1,x_max=1).set_color(DARK_BROWN)
]
- #self.y_axis_label="$\\frac { 2 }{ \pi } sin(2\pi t)$"
+
self.setup_axes(scalee=1)
axes.append(self.axes)
graph1=self.get_graph(lambda x:func(x,1,1),x_min=-1,x_max=1,color=GREEN_E)
- #self.y_axis_label="$\\frac { -1 }{ \pi } sin(4\pi t)$"
+
self.setup_axes(scalee=1)
axes.append(self.axes)
graph2=self.get_graph(lambda x:func(x,2,2),x_min=-1,x_max=1,color=GREEN_C)
- #self.y_axis_label="$\\frac { 2 }{ 3\pi } sin(6\pi t)$"
+
self.setup_axes(scalee=1)
axes.append(self.axes)
graph3=self.get_graph(lambda x:func(x,3,3),x_min=-1,x_max=1,color=GOLD_E)
- #self.y_axis_label="$\\frac { -1 }{ 2\pi } sin(8\pi t)$"
+
self.setup_axes(scalee=1)
axes.append(self.axes)
graph4=self.get_graph(lambda x:func(x,4,4),x_min=-1,x_max=1,color=GOLD_C)
- #self.y_axis_label="$\\frac { 2 }{ 5\pi } sin(10\pi t)$"
+
self.setup_axes(scalee=1)
axes.append(self.axes)
graph5=self.get_graph(lambda x:func(x,5,5),x_min=-1,x_max=1,color=ORANGE)
- #self.y_axis_label="$\\frac { -1 }{ 3\pi } sin(12\pi t)$"
+
self.setup_axes(scalee=1)
axes.append(self.axes)
graph6=self.get_graph(lambda x:func(x,6,6),x_min=-1,x_max=1,color=RED_C)
@@ -132,9 +132,7 @@ class divideColors(GraphScene):
self.play(ShowCreation(graphs[0]))
self.play(Write(coeff[0]))
self.wait(1)
- # self.play(ApplyMethod(axes[0].scale,0.4),ApplyMethod(graphs[0].scale,0.4),ApplyMethod(axes[1].scale,0.4),
- # ApplyMethod(axes[2].scale,0.4),ApplyMethod(axes[3].scale,0.4),
- # ApplyMethod(axes[4].scale,0.4),ApplyMethod(axes[5].scale,0.4),ApplyMethod(axes[6].scale,0.4))
+
self.play(ReplacementTransform(graphs[0],graphs[1]),ApplyMethod(groups[0].shift,4*LEFT+UP),ReplacementTransform(coeff[0],coeff[2]),FadeIn(coeff[1]))
self.play(ReplacementTransform(graphs[1],graphs[2]),ApplyMethod(groups[1].shift,4*RIGHT+UP),ReplacementTransform(coeff[2],coeff[4]),FadeIn(coeff[3]))
self.play(ReplacementTransform(graphs[2],graphs[3]),ApplyMethod(groups[2].shift,4*LEFT+2*DOWN),ReplacementTransform(coeff[4],coeff[6]),FadeIn(coeff[5]))
@@ -142,24 +140,7 @@ class divideColors(GraphScene):
self.play(ReplacementTransform(graphs[4],graphs[5]),ApplyMethod(groups[4].shift,2.5*UP),ReplacementTransform(coeff[8],coeff[10]),FadeIn(coeff[9]))
self.play(ReplacementTransform(graphs[5],graphs[6]),ApplyMethod(groups[5].shift,2.5*DOWN),ReplacementTransform(coeff[10],coeff[12]),FadeIn(coeff[11]))
- # self.play(ReplacementTransform(graphs[0],graphs[1]),ApplyMethod(groups[0].shift,3*LEFT))
- # self.play(ReplacementTransform(graphs[0],graphs[1]),)
- # self.play(ReplacementTransform(graphs[0],graphs[1]),)
- # self.play(ReplacementTransform(graphs[0],graphs[1]),)
- # self.play(ReplacementTransform(graphs[0],graphs[1]),)
- # self.play(ReplacementTransform(graphs[0],graphs[1]),)
-
-
+
self.wait(2)
- # self.play(ReplacementTransform(function,const))
- # self.play(ShowCreation(sinx),ShowCreation(cosx))
- # self.play(ShowCreation(sin2x),ShowCreation(cos2x))
- # self.play(ShowCreation(sin3x),ShowCreation(cos3x))
- # self.play(ShowCreation(sin4x),ShowCreation(cos4x))
- # sintext=TextMobject("Infinite","sines").shift(5*RIGHT).set_color_by_tex_to_color_map({"Infinite":[YELLOW,RED],"sines":BLUE})
- # costext=TextMobject("Infinite","cosines").shift(5*LEFT).set_color_by_tex_to_color_map({"Infinite":[YELLOW,RED],"cosines":BLUE})
- # sintext.scale(0.6)
- # costext.scale(0.6)
- # self.play(FadeIn(sintext),FadeIn(costext))
- # self.wait(2) \ No newline at end of file
+
diff --git a/FSF-2020/calculus/series-and-transformations/Fourier Transform/video3_seriesVSTransform.py b/FSF-2020/calculus/series-and-transformations/Fourier Transform/video3_seriesVSTransform.py
index f23e54f..d35f8bf 100644
--- a/FSF-2020/calculus/series-and-transformations/Fourier Transform/video3_seriesVSTransform.py
+++ b/FSF-2020/calculus/series-and-transformations/Fourier Transform/video3_seriesVSTransform.py
@@ -1,7 +1,7 @@
from manimlib.imports import *
import numpy as np
-class compare(GraphScene):
+class compare(GraphScene,MovingCameraScene):
CONFIG = {
"x_min": -3,
"x_max": 3,
@@ -14,6 +14,9 @@ class compare(GraphScene):
"exclude_zero_label": True,
"x_labeled_nums": range(-2, 3, 1),
}
+ def setup(self):
+ GraphScene.setup(self)
+ MovingCameraScene.setup(self)
def returnPairLines(self,left,right,y_each_unit):
lineLeft=DashedLine(start=(0,5*y_each_unit,0),end=(0,-5*y_each_unit,0)).shift(left)
lineRight=DashedLine(start=(0,5*y_each_unit,0),end=(0,-5*y_each_unit,0)).shift(right)
@@ -58,7 +61,7 @@ class compare(GraphScene):
self.graph_origin=3.5*RIGHT
self.y_axis_label="$\\frac { { l }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ \infty }{ \\frac { 2{ (-1) }^{ n }{ l }^{ 2 }cos(\\frac { n\pi x }{ l } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } }$"
self.setup_axes(animate=True,scalee=1)
- axes.append(self.axes)
+ axes.append(self.axes)
coeffResult=[
TextMobject("$\\frac { { 1 }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ 1 }{ \\frac { 2{ (-1) }^{ n }{ 1 }^{ 2 }cos(\\frac { n\pi x }{ 1 } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } } $").scale(0.3).shift(4.5*RIGHT+UP).set_color(YELLOW),
TextMobject("$\\frac { { 1 }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ 3 }{ \\frac { 2{ (-1) }^{ n }{ 1 }^{ 2 }cos(\\frac { n\pi x }{ 1 } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } } $").scale(0.3).shift(4.5*RIGHT+UP).set_color(YELLOW),
@@ -77,7 +80,13 @@ class compare(GraphScene):
result1g=self.returnPartResult(1,13)
self.play(ApplyMethod(partFunction1.shift,0.2*UP))
self.wait(0.5)
+
self.play(ReplacementTransform(partFunction1,result1a),Write(coeffResult[0]))
+ self.play(FadeOut(axes[0]),FadeOut(left),FadeOut(right),FadeOut(function))
+ self.camera_frame.save_state()
+ self.play(self.camera_frame.set_width, 5,self.camera_frame.move_to, 3.5*RIGHT)
+
+
self.play(ReplacementTransform(result1a,result1b),ReplacementTransform(coeffResult[0],coeffResult[1]))
self.play(ReplacementTransform(result1b,result1c),ReplacementTransform(coeffResult[1],coeffResult[2]))
self.play(ReplacementTransform(result1c,result1d),ReplacementTransform(coeffResult[2],coeffResult[3]))
@@ -85,6 +94,9 @@ class compare(GraphScene):
self.play(ReplacementTransform(result1e,result1f),ReplacementTransform(coeffResult[4],coeffResult[5]))
self.play(ReplacementTransform(result1f,result1g),ReplacementTransform(coeffResult[5],coeffResult[6]))
+ self.wait(0.5)
+ self.play(self.camera_frame.set_width, 14,self.camera_frame.move_to, 0)
+
text4=TextMobject("Here the","obtained function","will always be","periodic","with period equal to the chosen interval").scale(0.4).shift(3.3*DOWN).set_color_by_tex_to_color_map({"obtained function":YELLOW,"periodic":RED})
self.play(Write(text4))
@@ -93,6 +105,7 @@ class compare(GraphScene):
self.play(FadeOut(text4))
text5=TextMobject("As we","increase","the","interval of $x$,").scale(0.5).shift(3*DOWN).set_color_by_tex_to_color_map({"increase":RED,"interval of $x$,":YELLOW})
text6=TextMobject("We get","approximation","for","higher intervals!").scale(0.5).shift(3.5*DOWN).set_color_by_tex_to_color_map({"approximation":GREEN,"higher intervals!":YELLOW})
+ self.play(FadeIn(axes[0]),FadeIn(left),FadeIn(right),FadeIn(function))
self.play(Write(text5))
self.play(Write(text6))
result2=self.returnPartResult(1.5,20)
@@ -101,10 +114,10 @@ class compare(GraphScene):
result5=self.returnPartResult(3,20)
finalCoeff=coeffResult[6]
coeffResult=[
- TextMobject("$\\frac { { 1.5 }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ 20 }{ \\frac { 2{ (-1) }^{ n }{ 1.5 }^{ 2 }cos(\\frac { n\pi x }{ 2 } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } }$").scale(0.3).shift(4.5*RIGHT+1.5*UP).set_color(YELLOW),
- TextMobject("$\\frac { { 2 }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ 20 }{ \\frac { 2{ (-1) }^{ n }{ 2 }^{ 2 }cos(\\frac { n\pi x }{ 2 } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } } $").scale(0.3).shift(4.5*RIGHT+1.5*UP).set_color(YELLOW),
- TextMobject("$\\frac { { 2.5 }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ 20 }{ \\frac { 2{ (-1) }^{ n }{ 2.5 }^{ 2 }cos(\\frac { n\pi x }{ 2 } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } } $").scale(0.3).shift(4.5*RIGHT+1.5*UP).set_color(YELLOW),
- TextMobject("$\\frac { { 3 }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ 20 }{ \\frac { 2{ (-1) }^{ n }{ 3 }^{ 2 }cos(\\frac { n\pi x }{ 2 } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } } $").scale(0.3).shift(4.5*RIGHT+1.5*UP).set_color(YELLOW),
+ TextMobject("$\\frac { { 1.5 }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ 20 }{ \\frac { 2{ (-1) }^{ n }{ 1.5 }^{ 2 }cos(\\frac { n\pi x }{ 2 } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } }$").scale(0.4).shift(5*RIGHT+1.5*UP).set_color(YELLOW),
+ TextMobject("$\\frac { { 2 }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ 20 }{ \\frac { 2{ (-1) }^{ n }{ 2 }^{ 2 }cos(\\frac { n\pi x }{ 2 } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } } $").scale(0.4).shift(5*RIGHT+1.5*UP).set_color(YELLOW),
+ TextMobject("$\\frac { { 2.5 }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ 20 }{ \\frac { 2{ (-1) }^{ n }{ 2.5 }^{ 2 }cos(\\frac { n\pi x }{ 2 } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } } $").scale(0.4).shift(5*RIGHT+2.2*UP).set_color(YELLOW),
+ TextMobject("$\\frac { { 3 }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ 20 }{ \\frac { 2{ (-1) }^{ n }{ 3 }^{ 2 }cos(\\frac { n\pi x }{ 2 } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } } $").scale(0.4).shift(5*RIGHT+2.2*UP).set_color(YELLOW),
]
self.play(ApplyMethod(left.shift,LEFT*x_each_unit*0.5),ApplyMethod(right.shift,RIGHT*x_each_unit*0.5),ReplacementTransform(result1g,result2),ReplacementTransform(finalCoeff,coeffResult[0]))
self.play(ApplyMethod(left.shift,LEFT*x_each_unit*0.5),ApplyMethod(right.shift,RIGHT*x_each_unit*0.5),ReplacementTransform(result2,result3),ReplacementTransform(coeffResult[0],coeffResult[1]))
@@ -112,22 +125,5 @@ class compare(GraphScene):
self.play(ApplyMethod(left.shift,LEFT*x_each_unit*0.5),ApplyMethod(right.shift,RIGHT*x_each_unit*0.5),ReplacementTransform(result4,result5),ReplacementTransform(coeffResult[2],coeffResult[3]))
- # coeffResult=[
- # TextMobject("$\\frac { { 2 }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ 1 }{ \\frac { 2{ (-1) }^{ n }{ 2 }^{ 2 }cos(\\frac { n\pi x }{ 2 } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } }$").scale(0.3).shift(4.5*RIGHT+1.5*UP),
- # TextMobject("$\\frac { { 2 }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ 4 }{ \\frac { 2{ (-1) }^{ n }{ 2 }^{ 2 }cos(\\frac { n\pi x }{ 2 } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } } $").scale(0.3).shift(4.5*RIGHT+1.5*UP),
- # TextMobject("$\\frac { { 2 }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ 10 }{ \\frac { 2{ (-1) }^{ n }{ 2 }^{ 2 }cos(\\frac { n\pi x }{ 2 } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } } $").scale(0.3).shift(4.5*RIGHT+1.5*UP),
- # TextMobject("$\\frac { { 2 }^{ 2 } }{ 6 } +\sum _{ n=1 }^{ 20 }{ \\frac { 2{ (-1) }^{ n }{ 2 }^{ 2 }cos(\\frac { n\pi x }{ 2 } ) }{ { \pi }^{ 2 }{ n }^{ 2 } } } $").scale(0.3).shift(4.5*RIGHT+1.5*UP),
- # ]
- # result2a=self.returnPartResult(2,1)
- # result2b=self.returnPartResult(2,4)
- # result2c=self.returnPartResult(2,10)
- # result2d=self.returnPartResult(2,20)
-
- # self.play(ReplacementTransform(partFunction2,result2a),ReplacementTransform(coeffResult[0],coeffResult[1]))
- # self.play(ReplacementTransform(result2a,result2b),ReplacementTransform(coeffResult[0],coeffResult[1]))
- # self.play(ReplacementTransform(result2b,result2c),ReplacementTransform(coeffResult[0],coeffResult[1]))
- # self.play(ReplacementTransform(result2c,result2d),ReplacementTransform(coeffResult[0],coeffResult[1]))
- # self.wait(0.5)
-
- self.wait(2) \ No newline at end of file
+ self.wait(2)
diff --git a/FSF-2020/calculus/series-and-transformations/Fourier Transform/video4_FourierSeriesOfSquarePulse.py b/FSF-2020/calculus/series-and-transformations/Fourier Transform/video4_FourierSeriesOfSquarePulse.py
index 5d33fbe..fdf4bb3 100644
--- a/FSF-2020/calculus/series-and-transformations/Fourier Transform/video4_FourierSeriesOfSquarePulse.py
+++ b/FSF-2020/calculus/series-and-transformations/Fourier Transform/video4_FourierSeriesOfSquarePulse.py
@@ -33,9 +33,9 @@ class fourierSeries(GraphScene,MovingCameraScene):
x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
- equation=TextMobject("$f(x)=\\frac { 4 }{ \pi } \sum _{ k=1,3,5.. }^{ \infty }{ \\frac { 1 }{ k } \sin { 2\pi kx } }$").shift(5*RIGHT+3*UP).set_color(RED).scale(0.4)
+ equation=TextMobject("$f(x)=\\frac { 4 }{ \pi } \sum _{ k=1,3,5.. }^{ \infty }{ \\frac { 1 }{ k } \sin { 2\pi kx } }$").shift(5*RIGHT+3*UP).set_color(RED).scale(0.5)
self.add(equation)
- self.setup_axes(animate=True)
+ self.setup_axes(animate=True,scalee=1)
line1=Line(start=(-x_each_unit,y_each_unit,0),end=(-(1/2)*x_each_unit,y_each_unit,0),color=RED)
line2=Line(start=(-(1/2)*x_each_unit,y_each_unit,0),end=(-(1/2)*x_each_unit,-y_each_unit,0),color=RED)
line3=Line(start=(-(1/2)*x_each_unit,-y_each_unit,0),end=(0,-y_each_unit,0),color=RED)
@@ -87,6 +87,11 @@ class fourierSeries(GraphScene,MovingCameraScene):
self.wait(1)
self.camera_frame.save_state()
self.play(self.camera_frame.set_width, 2.25,self.camera_frame.move_to, y_each_unit*UP+RIGHT*x_each_unit*0.3)
- self.wait(1)
- self.play(self.camera_frame.set_width,14,self.camera_frame.move_to,0)
+ circleMark=Circle(radius=0.1,color=GREEN).shift(x_each_unit*RIGHT*0.47+UP*y_each_unit*1.1)
+ text=TextMobject("Gibbs","phenomenon").set_color_by_tex_to_color_map({"Gibbs":BLUE,"phenomenon":YELLOW}).scale(0.1).shift(RIGHT*x_each_unit*0.65+UP*y_each_unit*1.1)
+ self.wait(0.7)
+ self.play(ShowCreation(circleMark))
+ self.play(Write(text))
+ self.wait(0.5)
+ self.play(self.camera_frame.set_width,14,self.camera_frame.move_to,0,FadeOut(circleMark),FadeOut(text))
self.wait(2)
diff --git a/FSF-2020/calculus/series-and-transformations/Power Series/README.md b/FSF-2020/calculus/series-and-transformations/Power Series/README.md
index 6885837..2fd400d 100644
--- a/FSF-2020/calculus/series-and-transformations/Power Series/README.md
+++ b/FSF-2020/calculus/series-and-transformations/Power Series/README.md
@@ -11,4 +11,4 @@
![GIF3](gifs/file3_radius_and_intervalOfConvergence.gif)
#### Uniform Convergence
-![GIF4](gifs/file4_UniformConvergence.gif)
+![GIF4](gifs/file4a_UniformConvergence.gif)
diff --git a/FSF-2020/calculus/series-and-transformations/Power Series/gifs/file4a_UniformConvergence.gif b/FSF-2020/calculus/series-and-transformations/Power Series/gifs/file4a_UniformConvergence.gif
new file mode 100644
index 0000000..e284b83
--- /dev/null
+++ b/FSF-2020/calculus/series-and-transformations/Power Series/gifs/file4a_UniformConvergence.gif
Binary files differ
diff --git a/FSF-2020/calculus/series-and-transformations/Power Series/video2_convergence_of_a_function.py b/FSF-2020/calculus/series-and-transformations/Power Series/video2_convergence_of_a_function.py
index 19b8b8b..8680792 100644
--- a/FSF-2020/calculus/series-and-transformations/Power Series/video2_convergence_of_a_function.py
+++ b/FSF-2020/calculus/series-and-transformations/Power Series/video2_convergence_of_a_function.py
@@ -69,10 +69,7 @@ class graphScene(GraphScene):
eqText[i].scale(0.6)
eqText[i].set_color(BLUE)
eqText[i].shift(ORIGIN+UP*2*y_each_unit+RIGHT*3.3*x_each_unit)
- # eqTextTerm=TextMobject("And so on..!")
- # eqTextTerm.set_color(BLUE)
- # eqTextTerm.scale(0.6)
- # eqTextTerm.shift(ORIGIN+UP*2*y_each_unit+3*RIGHT*x_each_unit)
+
equation1 = self.get_graph(lambda x : 1,color = RED,x_min = -8,x_max=8)
equation2 = self.get_graph(lambda x : 1-math.pow(x,2),color = RED,x_min = -1.7,x_max=1.7)
equation3 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4),color = RED,x_min = -1.6,x_max=1.6)
diff --git a/FSF-2020/calculus/series-and-transformations/Power Series/video3_radius_and_intervalOfConvergence.py b/FSF-2020/calculus/series-and-transformations/Power Series/video3_radius_and_intervalOfConvergence.py
index f35fea8..af4bdea 100644
--- a/FSF-2020/calculus/series-and-transformations/Power Series/video3_radius_and_intervalOfConvergence.py
+++ b/FSF-2020/calculus/series-and-transformations/Power Series/video3_radius_and_intervalOfConvergence.py
@@ -105,9 +105,4 @@ class graphScene(GraphScene,MovingCameraScene):
self.wait(1)
self.play(self.camera_frame.set_width,14)
self.wait(1.3)
- # self.camera_frame.save_state()
- # self.camera_frame.set_width(5.5)
- # self.play(self.camera_frame.move_to, ORIGIN)
- # self.wait(1)
- # self.camera_frame.set_width(14)
- # self.wait(1.5)
+
diff --git a/FSF-2020/calculus/series-and-transformations/Power Series/video4_UniformConvergence.py b/FSF-2020/calculus/series-and-transformations/Power Series/video4_UniformConvergence.py
index 1f3e26c..b75da59 100644
--- a/FSF-2020/calculus/series-and-transformations/Power Series/video4_UniformConvergence.py
+++ b/FSF-2020/calculus/series-and-transformations/Power Series/video4_UniformConvergence.py
@@ -3,19 +3,15 @@ import math
class uniformlyConvergent(Scene):
def construct(self):
- #introText1=TextMobject("Again consider the","above","example")
introText2=TextMobject("Let","$g(x)=\\frac { 1 }{ 1+{ x }^{ 2 } }$","and","x=0.5 $\in$(-1,1)")
introText3=TextMobject("Lets analyse..","!")
- #introText1.scale(0.8)
+
introText2.scale(0.7)
introText3.scale(0.9)
introText3.shift(DOWN)
- #introText1.set_color_by_tex_to_color_map({"above":YELLOW})
+
introText2.set_color_by_tex_to_color_map({"$g(x)=\\frac { 1 }{ 1+{ x }^{ 2 } }$":BLUE,"x=0.5 $\in$(-1,1)":YELLOW})
introText3.set_color_by_tex_to_color_map({"!":GREEN})
- #self.play(Write(introText1))
- #self.wait(0.5)
- #self.play(FadeOut(introText1))
self.play(Write(introText2))
self.play(FadeIn(introText3))
self.wait(2)
@@ -65,7 +61,7 @@ class graphScene(GraphScene,ZoomedScene):
def setup(self):
GraphScene.setup(self)
- #MovingCameraScene.setup(self)
+
ZoomedScene.setup(self)
@@ -110,19 +106,7 @@ class graphScene(GraphScene,ZoomedScene):
self.activate_zooming(animate=True)
for p in range(0,5):
self.play(Write(lines[p]))
- # self.wait(0.5)
- # self.camera_frame.save_state()
- # self.camera_frame.set_width(0.6)
- # self.play(self.camera_frame.move_to, points[0])
- # self.wait(0.4)
- # self.play(self.camera_frame.move_to, points[1])
- # self.wait(0.4)
- # self.play(self.camera_frame.move_to, points[2])
- # self.wait(0.3)
- # self.play(self.camera_frame.move_to, points[3])
- # self.wait(1)
- # self.play(self.camera_frame.move_to,ORIGIN)
- # self.camera_frame.set_width(14)
+
self.wait(1)
self.get_zoomed_display_pop_out_animation()
diff --git a/FSF-2020/calculus/series-and-transformations/README.md b/FSF-2020/calculus/series-and-transformations/README.md
index 4747205..0ca6397 100644
--- a/FSF-2020/calculus/series-and-transformations/README.md
+++ b/FSF-2020/calculus/series-and-transformations/README.md
@@ -4,10 +4,9 @@ GitHub Handle: <a href="https://github.com/GSri30/">GSri30</a>
Sub-Topics Covered:
<ul>
- <li>Power Series
- <li>Taylor Series
- <li>Laplace Transformation
- <li>Fourier Transformation
- <li>z-Transform
- <li>Constant-Q transform
+ <li><a href="https://math.animations.fossee.in/contents/series-and-transformations/series/taylor-series">Taylor Series</a>
+ <li><a href="https://math.animations.fossee.in/contents/series-and-transformations/series/power-series">Power Series</a>
+ <li><a href="https://math.animations.fossee.in/contents/series-and-transformations/transformations/fourier-transform">Fourier Transformation</a>
+ <li><a href="https://math.animations.fossee.in/contents/series-and-transformations/transformations/laplace-transform">Laplace Transformation</a>
+ <li><a href="https://math.animations.fossee.in/contents/series-and-transformations/transformations/z-transform">Z-Transform</a>
</ul>
diff --git a/FSF-2020/calculus/series-and-transformations/Taylor Series/README.md b/FSF-2020/calculus/series-and-transformations/Taylor Series/README.md
index ce3b088..88eb772 100644
--- a/FSF-2020/calculus/series-and-transformations/Taylor Series/README.md
+++ b/FSF-2020/calculus/series-and-transformations/Taylor Series/README.md
@@ -2,7 +2,7 @@
![GIF1](gifs/file1_Example_TaylorExpansion.gif)
#### Taylor Series GeneralForm
-![GIF2](gifs/file2_TaylorExpansionGeneralForm.gif)
+![GIF2](gifs/file2a_TaylorExpansionGeneralForm.gif)
#### Radius Of Convergence
![GIF3](gifs/file3_radiusOfConvergence.gif)
diff --git a/FSF-2020/calculus/series-and-transformations/Taylor Series/gifs/file2_TaylorExpansionGeneralForm.gif b/FSF-2020/calculus/series-and-transformations/Taylor Series/gifs/file2_TaylorExpansionGeneralForm.gif
index e6d9171..33dfa81 100644
--- a/FSF-2020/calculus/series-and-transformations/Taylor Series/gifs/file2_TaylorExpansionGeneralForm.gif
+++ b/FSF-2020/calculus/series-and-transformations/Taylor Series/gifs/file2_TaylorExpansionGeneralForm.gif
Binary files differ
diff --git a/FSF-2020/calculus/series-and-transformations/Taylor Series/gifs/file2a_TaylorExpansionGeneralForm.gif b/FSF-2020/calculus/series-and-transformations/Taylor Series/gifs/file2a_TaylorExpansionGeneralForm.gif
new file mode 100644
index 0000000..33dfa81
--- /dev/null
+++ b/FSF-2020/calculus/series-and-transformations/Taylor Series/gifs/file2a_TaylorExpansionGeneralForm.gif
Binary files differ
diff --git a/FSF-2020/calculus/series-and-transformations/Taylor Series/video1_Example_TaylorExpansion.py b/FSF-2020/calculus/series-and-transformations/Taylor Series/video1_Example_TaylorExpansion.py
index b132811..a0c7176 100644
--- a/FSF-2020/calculus/series-and-transformations/Taylor Series/video1_Example_TaylorExpansion.py
+++ b/FSF-2020/calculus/series-and-transformations/Taylor Series/video1_Example_TaylorExpansion.py
@@ -95,7 +95,6 @@ class graphScene(GraphScene,MovingCameraScene):
obj.set_color(GOLD_A)
group=VGroup(coeff[0],coeff[1],coeff[2])
- #group.shift(2*LEFT+2*DOWN)
firstApprox=[self.get_graph(lambda x:1,color=BLUE)]
secondApprox=[self.get_graph(lambda x:1,color=BLUE),
@@ -142,13 +141,6 @@ class graphScene(GraphScene,MovingCameraScene):
bottomText8.scale(0.5)
bottomText1.shift(4.5*RIGHT+2.5*DOWN)
- # bottomText2.shift(4.5*RIGHT+2.5*DOWN)
- # bottomText3.shift(4.5*RIGHT+2.5*DOWN)
- # bottomText4.shift(4.5*RIGHT+2.5*DOWN)
- # bottomText5.shift(4.5*RIGHT+2.5*DOWN)
- # bottomText6.shift(4.5*RIGHT+2.5*DOWN)
- # bottomText7.shift(4.5*RIGHT+2.5*DOWN)
- # bottomText8.shift(4.5*RIGHT+2.5*DOWN)
bottomText2.shift(3*RIGHT*x_each_unit+2.5*DOWN*y_each_unit)
bottomText3.shift(3*RIGHT*x_each_unit+2.5*DOWN*y_each_unit)
bottomText4.shift(3*RIGHT*x_each_unit+2.5*DOWN*y_each_unit)
@@ -230,16 +222,7 @@ class graphScene(GraphScene,MovingCameraScene):
self.play(FadeOut(self.axes),FadeOut(textFinal),FadeOut(secondGraph),FadeOut(trTextGrup),FadeOut(mainfunction),FadeOut(fx),FadeOut(coeff[0]),FadeOut(coeff[1]),FadeOut(coeff[2]))
self.play(Write(finalFormula))
self.wait(2)
- # self.play(ReplacementTransform(secondApprox[2],secondApprox[3]))
- # self.wait(0.5)
- # self.play(ReplacementTransform(secondApprox[3],secondApprox[4]))
- # self.wait(0.5)
- # self.play(ReplacementTransform(secondApprox[4],secondApprox[5]))
- # self.wait(0.5)
- # self.play(ReplacementTransform(secondApprox[0],secondApprox[0]))
- # self.wait(0.5)
- # self.play(ReplacementTransform(secondApprox[0],secondApprox[0]))
- # self.wait(0.5)
+
diff --git a/FSF-2020/calculus/series-and-transformations/Taylor Series/video2_TaylorExpansionGeneralForm.py b/FSF-2020/calculus/series-and-transformations/Taylor Series/video2_TaylorExpansionGeneralForm.py
index c177ab4..5be336b 100644
--- a/FSF-2020/calculus/series-and-transformations/Taylor Series/video2_TaylorExpansionGeneralForm.py
+++ b/FSF-2020/calculus/series-and-transformations/Taylor Series/video2_TaylorExpansionGeneralForm.py
@@ -7,7 +7,7 @@ class intro(Scene):
equation=TextMobject("$f(x)=$","${ e }^{ -x^{ 2 } }$")
equation.scale(2)
equation.set_color_by_tex_to_color_map({"${ e }^{ -x^{ 2 } }$":RED})
- text=TextMobject("at $a=1$")
+ text=TextMobject("about $x=1$")
text.scale(0.7)
text.shift(DOWN)
@@ -41,7 +41,7 @@ def formFormula(coeff_list,variable_list):
return expansion,coeff_list
-class graphScene(GraphScene):
+class graphScene(GraphScene,MovingCameraScene):
CONFIG = {
"x_min": -8,
"x_max": 8,
@@ -55,6 +55,9 @@ class graphScene(GraphScene):
"exclude_zero_label": True,
"x_labeled_nums": range(-8, 8, 1),
}
+ def setup(self):
+ GraphScene.setup(self)
+ MovingCameraScene.setup(self)
def construct(self):
x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
@@ -62,7 +65,7 @@ class graphScene(GraphScene):
equation=TextMobject("$f(x)=$","${ e }^{ -x^{ 2 } }$")
equation.scale(0.55)
equation.set_color_by_tex_to_color_map({"${ e }^{ -x^{ 2 } }$":RED})
- text=TextMobject("$a=1$")
+ text=TextMobject("about $x=1$")
text.scale(0.55)
equation.shift(3.39*UP+5*LEFT)
text.shift(3*UP+5*LEFT)
@@ -80,7 +83,7 @@ class graphScene(GraphScene):
trTextGrup.scale(0.5)
trTextGrup.to_corner(UP+RIGHT)
self.play(Write(trTextGrup))
- self.setup_axes(animate=True)
+ self.setup_axes(animate=True,scalee=1)
fx=TextMobject("${ e }^{ -x^{ 2 } }$")
fx.scale(0.5)
@@ -91,29 +94,29 @@ class graphScene(GraphScene):
self.wait(1.4)
coeff=[TextMobject("$e^{-1}$"),TextMobject("$f'(x)$"),TextMobject("$\\frac { f''(x) }{ 2! } $")]
- coeff[0].shift(3.33*UP+3.65*RIGHT)
- coeff[0].scale(0.45)
- coeff[1].shift(3.33*UP+4.13*RIGHT)
- coeff[1].scale(0.275)
- coeff[2].shift(3.33*UP+5.36*RIGHT)
- coeff[2].scale(0.28)
+ coeff[0].shift(4.1*y_each_unit*UP+5.15*RIGHT*x_each_unit)
+ coeff[0].scale(0.3)
+ coeff[1].shift(4*y_each_unit*UP+5.7*RIGHT*x_each_unit)
+ coeff[1].scale(0.2)
+ coeff[2].shift(4*y_each_unit*UP+7.3*RIGHT*x_each_unit)
+ coeff[2].scale(0.18)
for obj in coeff:
obj.set_color(GOLD_A)
- firstApprox=[self.get_graph(lambda x:math.exp(-1),color=BLUE,x_min=-5.5,x_max=5.5)]
- secondApprox=[self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1),color=BLUE,x_min=-5.5,x_max=5.5),
- self.get_graph(lambda x:math.exp(-1)+3*(x-1)*math.exp(-1),color=BLUE,x_min=-5.5,x_max=5.5),
- self.get_graph(lambda x:math.exp(-1)-4*(x-1)*math.exp(-1),color=BLUE,x_min=-5.5,x_max=5.5)]
- thirdApprox=[self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)-2*math.exp(-1)*(x-1)**2,color=BLUE,x_max=5.5,x_min=-5.5),
- self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)-0.1*math.exp(-1)*(x-1)**2,color=BLUE,x_max=5.5,x_min=-5.5),
- self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1),color=BLUE,x_max=5.5,x_min=-5.5),
- self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)+0.5*math.exp(-1)*(x-1)**2,color=BLUE,x_max=5.5,x_min=-5.5),
- self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)+2*math.exp(-1)*(x-1)**2,color=BLUE,x_max=5.5,x_min=-5.5)]
+ firstApprox=[self.get_graph(lambda x:math.exp(-1),color=BLUE,x_min=-3,x_max=4)]
+ secondApprox=[self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1),color=BLUE,x_min=-3,x_max=4),
+ self.get_graph(lambda x:math.exp(-1)+3*(x-1)*math.exp(-1),color=BLUE,x_min=-3,x_max=4),
+ self.get_graph(lambda x:math.exp(-1)-4*(x-1)*math.exp(-1),color=BLUE,x_min=-3,x_max=4)]
+ thirdApprox=[self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)-2*math.exp(-1)*(x-1)**2,color=BLUE,x_max=4,x_min=-3),
+ self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)-0.1*math.exp(-1)*(x-1)**2,color=BLUE,x_max=4,x_min=-3),
+ self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1),color=BLUE,x_max=4,x_min=-3),
+ self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)+0.5*math.exp(-1)*(x-1)**2,color=BLUE,x_max=4,x_min=-3),
+ self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)+2*math.exp(-1)*(x-1)**2,color=BLUE,x_max=4,x_min=-3)]
- firstGraph=self.get_graph(lambda x:math.exp(-1),color=BLUE,x_min=-5.5,x_max=5.5)
- secondGraph=self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1),color=BLUE,x_min=-5.5,x_max=5.5)
- thirdGraph=self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)+math.exp(-1)*(x-1)**2,color=BLUE,x_max=5.5,x_min=-5.5)
+ firstGraph=self.get_graph(lambda x:math.exp(-1),color=BLUE,x_min=-3,x_max=4)
+ secondGraph=self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1),color=BLUE,x_min=-3,x_max=4)
+ thirdGraph=self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)+math.exp(-1)*(x-1)**2,color=BLUE,x_max=4,x_min=-3)
bottomText1=TextMobject("Apply","$f(1)=T_{n}(1)$")
bottomText2=TextMobject("This gives","$a_{ 0 }=e^{-1}$")
@@ -147,16 +150,35 @@ class graphScene(GraphScene):
bottomText8.scale(0.5)
bottomText1.shift(4.5*RIGHT+2.5*DOWN)
- bottomText2.shift(4.5*RIGHT+2.5*DOWN)
- bottomText3.shift(4.5*RIGHT+2.5*DOWN)
- bottomText4.shift(4.5*RIGHT+2.5*DOWN)
- bottomText5.shift(4.5*RIGHT+2.5*DOWN)
- bottomText6.shift(4.5*RIGHT+2.5*DOWN)
- bottomText7.shift(4.5*RIGHT+2.5*DOWN)
- bottomText8.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText2.shift(5*RIGHT*x_each_unit+2.5*DOWN*y_each_unit)
+ bottomText3.shift(5*RIGHT*x_each_unit+2.5*DOWN*y_each_unit)
+ bottomText4.shift(5*RIGHT*x_each_unit+2.5*DOWN*y_each_unit)
+ bottomText5.shift(5*RIGHT*x_each_unit+2.5*DOWN*y_each_unit)
+ bottomText6.shift(5.7*RIGHT*x_each_unit+2.5*DOWN*y_each_unit)
+ bottomText7.shift(5.7*RIGHT*x_each_unit+2.5*DOWN*y_each_unit)
+ bottomText8.shift(5.7*RIGHT*x_each_unit+2.5*DOWN*y_each_unit)
+
+ bottomText2.scale(0.7)
+ bottomText3.scale(0.7)
+ bottomText4.scale(0.7)
+ bottomText5.scale(0.7)
+ bottomText6.scale(0.7)
+ bottomText7.scale(0.7)
+ bottomText8.scale(0.7)
self.play(Write(bottomText1))
- self.wait(1)
+ self.wait(0.8)
+ self.camera_frame.save_state()
+ self.play(self.camera_frame.set_width, 8,
+ self.camera_frame.move_to, x_each_unit*UP+x_each_unit*2*RIGHT,
+ ApplyMethod(trTextGrup.move_to,4*y_each_unit*UP+6.1*RIGHT*x_each_unit),
+ ApplyMethod(bottomText1.move_to,5.4*RIGHT*x_each_unit+2.5*DOWN*y_each_unit),
+ ApplyMethod(equation.shift,1.39*DOWN+2*RIGHT+RIGHT*x_each_unit*2),
+ ApplyMethod(text.shift,1.39*DOWN+2*RIGHT+RIGHT*x_each_unit*2),)
+ self.play(ApplyMethod(text.scale,0.5),ApplyMethod(equation.scale,0.5),ApplyMethod(bottomText1.scale,0.6),ApplyMethod(trTextGrup.scale,0.7))
+ self.play(ApplyMethod(text.shift,0.25*UP))
+ self.wait(0.6)
+
self.play(ShowCreation(firstApprox[0]),ReplacementTransform(bottomText1,bottomText2))
#change coeff in tn(x)
self.play(ReplacementTransform(generalized_eq_coeff[0],coeff[0]))
@@ -166,8 +188,6 @@ class graphScene(GraphScene):
self.play(ReplacementTransform(firstApprox[0],secondApprox[1]))
self.wait(0.5)
self.play(ReplacementTransform(secondApprox[1],secondApprox[2]))
- # self.wait(0.5)
- # self.play(ReplacementTransform(secondApprox[2],secondApprox[0]))
self.wait(1)
self.play(ReplacementTransform(bottomText3,bottomText4),FadeOut(secondApprox[2]))
self.wait(1)
@@ -179,8 +199,6 @@ class graphScene(GraphScene):
self.play(ReplacementTransform(secondGraph,thirdApprox[0]))
self.wait(0.6)
self.play(ReplacementTransform(thirdApprox[0],thirdApprox[1]))
- # self.wait(0.6)
- # self.play(ReplacementTransform(thirdApprox[1],thirdApprox[2]))
self.wait(0.6)
self.play(ReplacementTransform(thirdApprox[1],thirdApprox[3]))
self.wait(0.6)
@@ -193,10 +211,13 @@ class graphScene(GraphScene):
self.wait(2)
textFinal=TextMobject("And so on..!")
- textFinal.scale(0.7)
- textFinal.shift(4.5*RIGHT+2.5*DOWN)
+ textFinal.scale(0.35)
+ textFinal.shift(5.7*RIGHT*x_each_unit+2.5*DOWN*y_each_unit)
self.play(ReplacementTransform(bottomText8,textFinal))
- self.wait(2.5)
+ self.wait(1)
+ self.play(FadeOut(equation),FadeOut(text))
+ self.play(self.camera_frame.set_width, 15,
+ self.camera_frame.move_to, 0)
finalFormula=TextMobject("Hence","$T_{ n }(x)$","=","$f(1)+f'(1)(x-1)+\\frac { f''(1) }{ 2! }(x-1)^2+..+\\frac { { f }^{ n }(1) }{ n! } { (x-1) }^{ n }$")
finalFormula.scale(0.8)
@@ -204,4 +225,4 @@ class graphScene(GraphScene):
self.play(FadeOut(self.axes),FadeOut(textFinal),FadeOut(thirdGraph),FadeOut(trTextGrup),FadeOut(mainfunction),FadeOut(fx),FadeOut(coeff[0]),FadeOut(coeff[1]),FadeOut(coeff[2]))
self.play(Write(finalFormula))
- self.wait(2) \ No newline at end of file
+ self.wait(2)
diff --git a/FSF-2020/calculus/series-and-transformations/Taylor Series/video4_DivergentRemainder.py b/FSF-2020/calculus/series-and-transformations/Taylor Series/video4_DivergentRemainder.py
index 1f41c97..6b368da 100644
--- a/FSF-2020/calculus/series-and-transformations/Taylor Series/video4_DivergentRemainder.py
+++ b/FSF-2020/calculus/series-and-transformations/Taylor Series/video4_DivergentRemainder.py
@@ -43,7 +43,6 @@ class graphScene(GraphScene):
bottomText1=TextMobject("$R_{n}(x)=\\frac { d }{ dx } ($","area bounded","$)$")
bottomText1.set_color_by_tex_to_color_map({"area bounded":ORANGE})
- #bottomText2.set_color_by_tex_to_color_map({"area bounded":BLUE})
arrow=TextMobject("$\downarrow$")
arrow.scale(2.5)
arrow.shift(ORIGIN+x_each_unit*RIGHT*9.5+UP*y_each_unit)
@@ -56,12 +55,8 @@ class graphScene(GraphScene):
increasingText.scale(0.4)
bottomText1.scale(0.5)
- #bottomText2.scale(0.5)
- #bottomText3.scale(0.5)
bottomText1.shift(3.5*LEFT+2*DOWN)
- #bottomText2.shift(3.5*LEFT+2.4*DOWN)
- #bottomText3.shift(3.5*LEFT+2.8*DOWN)
dline=DashedLine(start=ORIGIN+8*y_each_unit*UP,end=ORIGIN+8*y_each_unit*DOWN)
dline.shift(ORIGIN+x_each_unit*4*RIGHT)
@@ -72,11 +67,9 @@ class graphScene(GraphScene):
self.play(Write(dline))
self.wait(0.5)
self.play(ShowCreation(area1),ShowCreation(area2),Write(bottomText1))
- # self.play(Write(bottomText2))
- # self.play(FadeIn(bottomText3))
self.play(Write(arrow))
self.wait(0.7)
self.play(Write(increasingText))
self.play(FadeIn(followupText))
self.wait(2)
- \ No newline at end of file
+
diff --git a/FSF-2020/linear-algebra/linear-transformations/Gram Schmidt Orthonormalization Process/file3_Non_Standard_Basis.py b/FSF-2020/linear-algebra/linear-transformations/Gram Schmidt Orthonormalization Process/file3_Non_Standard_Basis.py
deleted file mode 100644
index 6410a2c..0000000
--- a/FSF-2020/linear-algebra/linear-transformations/Gram Schmidt Orthonormalization Process/file3_Non_Standard_Basis.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from manimlib.imports import *
-
-class NSB(ThreeDScene):
- def construct(self):
-
- axes = ThreeDAxes(x_min = -4,x_max=4,y_min=-4,y_max=4,z_min=-4,z_max=4)
- self.play(ShowCreation(axes))
- self.move_camera(phi=60*DEGREES,theta=45*DEGREES,run_time=3)
- self.begin_ambient_camera_rotation(rate=0.5)
-
- matrix = [[0.577,0.577,0.577],[-0.577,0.577,0.577],[0.577,-0.577,0.577]]
-
- line1 = Line(start = ORIGIN,end = 1*RIGHT)
- line1.set_color(DARK_BLUE)
- tip1 = Polygon(RIGHT,0.9*RIGHT-0.1*DOWN,0.9*RIGHT-0.1*UP)
- tip1.set_opacity(1)
- tip1.set_fill(DARK_BLUE)
- tip1.set_color(DARK_BLUE)
-
- arrow2 = Line(start = ORIGIN,end = 1*UP)
- arrow2.set_color(DARK_BLUE)
- tip2 = Polygon(UP,0.9*UP-0.1*RIGHT,0.9*UP-0.1*LEFT)
- tip2.set_opacity(1)
- tip2.set_fill(DARK_BLUE)
- tip2.set_color(DARK_BLUE)
- arrow2.set_color(DARK_BLUE)
-
- arrow3 = Line(start = ORIGIN,end = [0,0,1])
- arrow3.set_color(DARK_BLUE)
- tip3 = Polygon([0,0,1],[0,0,0.9]-0.1*RIGHT,[0,0,0.9]-0.1*LEFT)
- tip3.set_opacity(1)
- tip3.set_fill(DARK_BLUE)
- tip3.set_color(DARK_BLUE)
-
- line1.apply_matrix(matrix)
- tip1.apply_matrix(matrix)
- arrow2.apply_matrix(matrix)
- tip2.apply_matrix(matrix)
- arrow3.apply_matrix(matrix)
- tip3.apply_matrix(matrix)
-
- self.play(ShowCreation(line1), ShowCreation(tip1), ShowCreation(arrow2), ShowCreation(tip2), ShowCreation(arrow3), ShowCreation(tip3))
-
- text = TextMobject(r"This is also a set of Orthonormal Vectors")
- text.set_color(DARK_BLUE)
- self.add_fixed_in_frame_mobjects(text)
- text.scale(0.6)
- text.move_to(3*DOWN+3.5*RIGHT)
- self.play(Write(text))
-
- self.wait(7) \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/README.md b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/README.md
new file mode 100644
index 0000000..832aa5d
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/README.md
@@ -0,0 +1,18 @@
+# Contributer: Archit Sangal
+My Github Account : <a href="https://github.com/architsangal">architsangal</a> (https://github.com/architsangal)
+<br/></br>
+
+## Sub-Topics Covered:
++ Gramm-Schmidt Orthogonalization Process
+
+#### Video 1: Introduction to Gram-Schmidt Orthogonalization Process
+![GIF1](file7.gif)
+
+#### Video 2: Obtaining orthogonal vectors using projections
+![GIF2](file8.gif)
+
+#### Video 3: Visual Explanation of how Gram-Schmidt Orthogonalization Process give mutually orthonormal vectors
+![GIF3](file5.gif)
+
+#### Video 4: Example of Orthonormal Vectors which are different from standard basis
+![GIF4](file6.gif) \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/linear-transformations/Gram Schmidt Orthonormalization Process/file_introduction.py b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file1_introduction.py
index ccd23c9..ccd23c9 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Gram Schmidt Orthonormalization Process/file_introduction.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file1_introduction.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/Gram Schmidt Orthonormalization Process/file1_projections.py b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file2_projections.py
index dd4b8d4..dd4b8d4 100755
--- a/FSF-2020/linear-algebra/linear-transformations/Gram Schmidt Orthonormalization Process/file1_projections.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file2_projections.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/Gram Schmidt Orthonormalization Process/file2_orthonormal.py b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file3_orthonormal.py
index af51fc6..a74b641 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Gram Schmidt Orthonormalization Process/file2_orthonormal.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file3_orthonormal.py
@@ -6,7 +6,7 @@ class Algo(ThreeDScene):
axes = ThreeDAxes(x_min = -5,x_max=5,y_min=-3,y_max=3,z_min=-4,z_max=4)
self.play(ShowCreation(axes))
- text = TextMobject(r"This is the vector $\beta_1(=\left[\begin{array}{c} 4\\0\\0 \end{array}\right])$")
+ text = TextMobject(r"This is the vector $\beta_1 =\left[\begin{array}{c} 4\\0\\0 \end{array}\right]$")
text.set_color(GREEN)
text.scale(0.6)
text.move_to(3*UP+5*LEFT)
@@ -42,7 +42,7 @@ class Algo(ThreeDScene):
self.wait()
self.play(FadeOut(text))
- text = TextMobject(r"Consider another vector $\beta_2(=\left[\begin{array}{c} 2\\2\\0 \end{array}\right])$")
+ text = TextMobject(r"Consider another vector $\beta_2=\left[\begin{array}{c} 2\\2\\0 \end{array}\right]$")
text1 = TextMobject(r"which is linearly independent to $\beta_1$")
text.set_color(GREEN)
text1.set_color(GREEN)
@@ -141,15 +141,15 @@ class Algo(ThreeDScene):
self.add_fixed_orientation_mobjects(axis[1])
#############################################################################
- text = TextMobject(r"These are the same two orthonormal vectors $\alpha_{1}$ and $\alpha_{2}$")
- text.scale(0.6)
- text.set_color(DARK_BLUE)
- self.add_fixed_in_frame_mobjects(text)
- text.move_to(3*(DOWN+RIGHT))
- self.play(Write(text))
+ self.move_camera(phi=70*DEGREES,theta=30*DEGREES,run_time=3)
+ xy_plane = Polygon(5*RIGHT+3*UP,-5*RIGHT+3*UP,-5*RIGHT-3*UP,5*RIGHT-3*UP)
+ xy_plane.set_color("#333333")
+ xy_plane.set_fill("#333333")
+ xy_plane.set_opacity(1)
+ xy_plane.fade(0.7)
+ self.play(ShowCreation(xy_plane))
- self.move_camera(phi=60*DEGREES,theta=45*DEGREES,run_time=3)
- self.begin_ambient_camera_rotation(rate=0.3)
+ #self.begin_ambient_camera_rotation(rate=0.1)
line1 = Line(start = ORIGIN,end = 1*RIGHT)
line1.set_color(DARK_BLUE)
@@ -183,9 +183,9 @@ class Algo(ThreeDScene):
a_tip_c1.set_fill(GOLD_E)
a_tip_c1.set_color(GOLD_E)
- self.play(FadeOut(text), ShowCreation(a_line), ShowCreation(a_tip), ShowCreation(a_line_c1), ShowCreation(a_tip_c1))
+ self.play(ShowCreation(a_line), ShowCreation(a_tip), ShowCreation(a_line_c1), ShowCreation(a_tip_c1))
- text = TextMobject(r"Now, we have a vector $\beta_3(=\left[\begin{array}{c} 2\\2\\2 \end{array}\right])$")
+ text = TextMobject(r"Now, we have a vector $\beta_3=\left[\begin{array}{c} 2\\2\\2 \end{array}\right]$")
text.set_color(GOLD_E)
text.scale(0.7)
self.add_fixed_in_frame_mobjects(text)
@@ -197,8 +197,8 @@ class Algo(ThreeDScene):
p_line1 = Line(start = ORIGIN,end = 2*RIGHT)
p_line1.set_color(GOLD_E)
- p_tip1 = Polygon(RIGHT,0.8*RIGHT+0.2*DOWN,0.8*RIGHT+0.2*UP)
- p_tip1.move_to(2*RIGHT)
+ p_tip1 = Polygon(2*RIGHT,1.8*RIGHT+0.2*DOWN,1.8*RIGHT+0.2*UP)
+
p_tip1.set_opacity(1)
p_tip1.set_fill(GOLD_E)
p_tip1.set_color(GOLD_E)
@@ -211,6 +211,7 @@ class Algo(ThreeDScene):
self.add_fixed_in_frame_mobjects(text)
text.move_to(3*(DOWN+RIGHT))
self.play(Write(text))
+ self.begin_ambient_camera_rotation(rate=0.05)
self.wait()
self.play(FadeOut(text))
@@ -241,6 +242,7 @@ class Algo(ThreeDScene):
self.add_fixed_in_frame_mobjects(text)
text.move_to(3*(DOWN+RIGHT))
self.play(Write(text))
+
self.play(ShowCreation(o_line1), ShowCreation(o_tip1))
self.wait(2)
self.play(FadeOut(a_line_c1), FadeOut(a_tip_c1),
@@ -266,7 +268,7 @@ class Algo(ThreeDScene):
last_a_tip.set_fill(PURPLE_E)
last_a_tip.set_color(PURPLE_E)
- self.wait()
+ self.wait(5)
text = TextMobject(r"Take projection on $\alpha_2$")
text.scale(0.6)
text.set_color(GOLD_E)
@@ -283,7 +285,7 @@ class Algo(ThreeDScene):
self.add_fixed_in_frame_mobjects(text)
text.move_to(3*DOWN+3.5*RIGHT)
self.play(Write(text))
- self.play(ShowCreation(o_line1), ShowCreation(o_tip1))
+ #self.play(ShowCreation(o_line1), ShowCreation(o_tip1))
self.wait(2)
self.play(ShowCreation(last_a_tip), ShowCreation(last_a))
self.wait()
@@ -299,16 +301,16 @@ class Algo(ThreeDScene):
self.play(FadeOut(o_line1), FadeOut(o_tip1), FadeOut(a_line1_c1), FadeOut(a_tip1_c1), Transform(last_a,larrow3), Transform(last_a_tip,ltip3))
text = TextMobject(r"Normalize, the vector")
- text1 = TextMobject(r"$\beta_3$-(projection of $\beta_3$ on $\alpha_1$ + projection of $\beta_3$ on $\alpha_2$")
+ text1 = TextMobject(r"$\beta_3$-(projection of $\beta_3$ on $\alpha_1$ + projection of $\beta_3$ on $\alpha_2)$")
text.set_color(PURPLE_E)
text1.set_color(PURPLE_E)
- text.scale(0.6)
- text1.scale(0.6)
+ text.scale(0.55)
+ text1.scale(0.55)
self.add_fixed_in_frame_mobjects(text)
- self.add_fixed_in_frame_mobjects(text1)
text.move_to(3*DOWN+3*RIGHT)
- text1.move_to(3.5*DOWN+3*RIGHT)
+ text1.move_to(3.5*DOWN+3.25*RIGHT)
self.play(Write(text))
+ self.add_fixed_in_frame_mobjects(text1)
self.play(Write(text1))
arrow3 = Line(start = ORIGIN,end = [0,0,1])
@@ -330,4 +332,4 @@ class Algo(ThreeDScene):
text.move_to(3*DOWN+3.5*RIGHT)
self.play(Write(text))
- self.wait(3) \ No newline at end of file
+ self.wait(8)
diff --git a/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file4_Non_Standard_Basis.py b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file4_Non_Standard_Basis.py
new file mode 100644
index 0000000..1d23aa2
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file4_Non_Standard_Basis.py
@@ -0,0 +1,69 @@
+from manimlib.imports import *
+
+class NSB(ThreeDScene):
+ def construct(self):
+
+ line1 = Line(start = ORIGIN,end = 1*RIGHT)
+ line1.set_color(DARK_BLUE)
+ tip1 = Polygon(RIGHT,0.9*RIGHT-0.1*DOWN,0.9*RIGHT-0.1*UP)
+ tip1.set_opacity(1)
+ tip1.set_fill(DARK_BLUE)
+ tip1.set_color(DARK_BLUE)
+
+ arrow2 = Line(start = ORIGIN,end = 1*UP)
+ arrow2.set_color(DARK_BLUE)
+ tip2 = Polygon(UP,0.9*UP-0.1*RIGHT,0.9*UP-0.1*LEFT)
+ tip2.set_opacity(1)
+ tip2.set_fill(DARK_BLUE)
+ tip2.set_color(DARK_BLUE)
+ arrow2.set_color(DARK_BLUE)
+
+ arrow3 = Line(start = ORIGIN,end = [0,0,1])
+ arrow3.set_color(DARK_BLUE)
+ tip3 = Polygon([0,0,1],[0,0,0.9]-0.1*RIGHT,[0,0,0.9]-0.1*LEFT)
+ tip3.set_opacity(1)
+ tip3.set_fill(DARK_BLUE)
+ tip3.set_color(DARK_BLUE)
+
+ axes = ThreeDAxes(x_min = -3,x_max=3,y_min=-3,y_max=3,z_min=-3,z_max=3)
+ self.play(ShowCreation(axes))
+ self.move_camera(phi=70*DEGREES,theta=0*DEGREES,run_time=3)
+ self.begin_ambient_camera_rotation(rate=0.2)
+
+ #matrix = [[1,0,0],[0,1,0],[0,0,1]]
+ matrix = [[0.70710678118,-0.57735026919,-0.57735026919],[0.70710678118,0.57735026919,0.57735026919],[0,-0.57735026919,0.57735026919]]
+ matrix1 = [[0.70710678118,0,0],[0.70710678118,1,0],[0,0,1]]
+
+ matrix1 = [[0.70710678118,-0.70710678118,0],[0.70710678118,0.70710678118,0],[0,0,1]]
+ matrix2 = [[1,0,0],[0,0.70710678118,0.70710678118],[0,-0.70710678118,0.70710678118]]
+
+
+ line1.apply_matrix(matrix1)
+ tip1.apply_matrix(matrix1)
+ arrow2.apply_matrix(matrix1)
+ tip2.apply_matrix(matrix1)
+ arrow3.apply_matrix(matrix1)
+ tip3.apply_matrix(matrix1)
+
+ line1.apply_matrix(matrix2)
+ tip1.apply_matrix(matrix2)
+ arrow2.apply_matrix(matrix2)
+ tip2.apply_matrix(matrix2)
+ arrow3.apply_matrix(matrix2)
+ tip3.apply_matrix(matrix2)
+
+ self.play(ShowCreation(line1),
+ ShowCreation(tip1),
+ ShowCreation(arrow2),
+ ShowCreation(tip2),
+ ShowCreation(arrow3),
+ ShowCreation(tip3))
+
+ text = TextMobject(r"This is also a set of Orthonormal Vectors")
+ text.set_color(DARK_BLUE)
+ self.add_fixed_in_frame_mobjects(text)
+ text.scale(0.6)
+ text.move_to(3*DOWN+3.5*RIGHT)
+ self.play(Write(text))
+
+ self.wait(22)
diff --git a/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file5.gif b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file5.gif
new file mode 100644
index 0000000..cdc0f2d
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file5.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file6.gif b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file6.gif
new file mode 100644
index 0000000..e03f265
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file6.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file7.gif b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file7.gif
new file mode 100644
index 0000000..19a13dd
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file7.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file8.gif b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file8.gif
new file mode 100644
index 0000000..0ef4551
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Gram-Schmidt-Orthonormalization-Process/file8.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/README.md b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/README.md
new file mode 100644
index 0000000..2a46424
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/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:
++ Linear Transformations (Linear Maps)
+
+#### Video 1: Visually understanding linear transformation(using grid)
+![GIF1](file12.gif)
+
+#### Video 2: Linear Transformation when form 1 is given
+![GIF2](file11.gif)
+
+#### Video 3: Matrix Representation Of Linear Transformation
+![GIF3](file9.gif)
+
+#### Video 4: Understand Linear Transformations visually
+![GIF4](file13.gif)
+
+#### Video 5: Uniform Scaling
+![GIF5](file14.gif)
+
+#### Fig.1 Horizontal Shear
+![GIF6](file6_Horizontal_Shear_gif.gif)
+
+#### Fig.2 Vertical Shear
+![GIF7](file7_Vertical_Shear_gif.gif)
+
+#### Video 6: Rotation by an angle of in anticlockwise direction
+![GIF8](file10.gif) \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file.txt b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file.txt
deleted file mode 100644
index cae98ce..0000000
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-file 'text.mp4'
-file 'LinearTransformation.mp4'
-file 'NonLinearTransformation.mp4'
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file10.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file10.gif
new file mode 100644
index 0000000..d996130
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file10.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file11.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file11.gif
new file mode 100644
index 0000000..d8c64b7
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file11.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file12.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file12.gif
new file mode 100644
index 0000000..92bdff6
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file12.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file13.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file13.gif
new file mode 100644
index 0000000..ba6c156
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file13.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file14.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file14.gif
new file mode 100644
index 0000000..fd9bc7b
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file14.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file1_transformations.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file1_transformations.py
index 677f890..0182bd9 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file1_transformations.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file1_transformations.py
@@ -2,16 +2,20 @@ from manimlib.imports import *
class text(Scene):
def construct(self):
- text1 = TextMobject("For a grid, undergoing a linear transformation, all it's straight lines")
+ text1 = TextMobject("For a grid, undergoing a linear transformation, all its straight lines")
text1.scale(0.9)
text2 = TextMobject("must either remain straight lines or sends to a point in the grid formed")
text2.scale(0.9)
+ text3 = TextMobject("Origin must remain where it was before transformation.")
+ text3.scale(0.9)
text1.move_to(ORIGIN+UP)
text2.move_to(ORIGIN)
+ text3.move_to(ORIGIN+DOWN)
self.play(Write(text1))
self.play(Write(text2))
+ self.play(Write(text3))
self.wait()
- self.play(FadeOut(text1),FadeOut(text2))
+ self.play(FadeOut(text1),FadeOut(text2),FadeOut(text3))
class LinearTransformation(LinearTransformationScene):
CONFIG = {
@@ -34,6 +38,7 @@ class NonLinearTransformation(Scene):
def construct(self):
grid = NumberPlane()
self.play(ShowCreation(grid),run_time =2)
+ # I have taken reference from purusharth's code
NonLinearTrans = lambda coordinates : coordinates + np.array([np.sin(coordinates[1]),np.sin(coordinates[0]),0,])
grid.prepare_for_nonlinear_transform()
self.play(grid.apply_function,NonLinearTrans)
@@ -42,4 +47,27 @@ class NonLinearTransformation(Scene):
text[1].move_to(1.5*DOWN+4*LEFT)
text.add_background_rectangle()
self.play(Write(text))
- self.wait() \ No newline at end of file
+ self.wait()
+
+class MoveOrigin(LinearTransformationScene):
+
+ CONFIG = {
+ "show_basis_vectors": False,
+ }
+ def construct(self):
+ self.wait()
+
+ dot = Dot(ORIGIN, color = YELLOW)
+ self.add_transformable_mobject(dot)
+ self.apply_nonlinear_transformation(self.func)
+ text = TextMobject("This is also not a linear transformation as the origin moves from its original position")
+ text.move_to(2*DOWN)
+ text.scale(0.5)
+ text.set_color(YELLOW)
+ text.add_background_rectangle()
+ self.play(Write(text))
+ self.wait()
+
+ def func(self, point):
+ matrix_transform = self.get_matrix_transformation([[1, -1], [1, 1]])
+ return matrix_transform(point) + UP+ RIGHT
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file_before_matrix.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file2_before_matrix.py
index 96e456d..1f6badd 100755
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file_before_matrix.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file2_before_matrix.py
@@ -69,7 +69,7 @@ class Linear(GraphScene):
class withgrid(LinearTransformationScene):
def construct(self):
- heading = TextMobject(r"Now, Imagine this happening for all the vectors")
+ heading = TextMobject(r"Now, imagine this happening for all the points")
heading.scale(0.5)
heading.move_to(UP*2.5+LEFT*4)
self.play(Write(heading))
@@ -141,6 +141,7 @@ class ThreeDExplanation(ThreeDScene):
text = TextMobject(r"$T(x,y) = (x+y,x-y,x+2y)$")
text.scale(0.75)
text.move_to(UP*2.5+LEFT*4)
+ text.move_to(-UP*3+LEFT*4)
self.add_fixed_in_frame_mobjects(text)
self.play(Write(text))
self.wait()
@@ -218,15 +219,15 @@ class ThreeDExplanation(ThreeDScene):
self.wait(3)
self.stop_ambient_camera_rotation()
- ending = TextMobject(r"$T(\left[\begin{array}{c}x \\ y\end{array}\right]) = \left[\begin{array}{c} x+y \\ x-y \\ x+2y \end{array}\right]$")
+ ending = TextMobject(r"$T(\left[\begin{array}{c}x \\ y\end{array}\right])$ = ",r"$\left[\begin{array}{c} x+y \\ x-y\\ x+2y \end{array}\right]$") #\begin{array}{c} x+y \\ x-y -- \\ x+2y -- \end{array}\right]$")
ending.scale(0.75)
- ending.move_to(-UP*2+LEFT*4)
- self.play(Transform(text,ending))
+ ending.move_to(-UP*3+LEFT*4)
self.add_fixed_in_frame_mobjects(ending)
+ self.play(FadeOut(text),Write(ending))
self.play(FadeOut(plane))
- self.wait(3)
+ self.wait(2)
- self.begin_ambient_camera_rotation(rate=0.5)
- self.wait(5)
+ self.begin_ambient_camera_rotation(rate=0.3)
+ self.wait(8)
self.stop_ambient_camera_rotation()
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/square.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file3_square.py
index e828de4..e828de4 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/square.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file3_square.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file2_Understand_Linear_Transformations_visually.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Understand_Linear_Transformations_visually.py
index 577032d..577032d 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file2_Understand_Linear_Transformations_visually.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Understand_Linear_Transformations_visually.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file3_Uniform_Scaling.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Uniform_Scaling.py
index a7856a5..a7856a5 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file3_Uniform_Scaling.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Uniform_Scaling.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Horizontal_Shear.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_Horizontal_Shear.py
index 91f098e..91f098e 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Horizontal_Shear.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_Horizontal_Shear.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Horizontal_Shear_gif.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_Horizontal_Shear_gif.gif
index 9bef1b6..9bef1b6 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file4_Horizontal_Shear_gif.gif
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_Horizontal_Shear_gif.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Vertical_Shear.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file7_Vertical_Shear.py
index 718e4e0..718e4e0 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Vertical_Shear.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file7_Vertical_Shear.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Vertical_Shear_gif.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file7_Vertical_Shear_gif.gif
index 7ca323f..7ca323f 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file5_Vertical_Shear_gif.gif
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file7_Vertical_Shear_gif.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_linear_transformation.py b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file8_linear_transformation.py
index 01a0cef..01a0cef 100755
--- a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file6_linear_transformation.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file8_linear_transformation.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file9.gif b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file9.gif
new file mode 100644
index 0000000..017e0c7
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Linear-Transformations-(Linear-Maps)/file9.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/README.md b/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/README.md
new file mode 100644
index 0000000..e287fa1
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/README.md
@@ -0,0 +1,15 @@
+# Contributer: Archit Sangal
+My Github Account : <a href="https://github.com/architsangal">architsangal</a> (https://github.com/architsangal)
+<br/></br>
+
+## Sub-Topics Covered:
++ Orthonormal Bases
+
+#### Video 1: Example of Orthonormal bases
+![GIF1](file4.gif)
+
+#### Video 2: Adding the projections of a vector on orthonormal basis will produce the same vector
+![GIF2](file5.gif)
+
+#### Video 3: Relating the example and the property
+![GIF3](file6.gif) \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/linear-transformations/Orthonormal Basis/file1_orthogonal.py b/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file1_orthogonal.py
index a5d96f5..a5d96f5 100755
--- a/FSF-2020/linear-algebra/linear-transformations/Orthonormal Basis/file1_orthogonal.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file1_orthogonal.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/Orthonormal Basis/file2_sum_of_projections_part1.py b/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file2_sum_of_projections_part1.py
index 81a0888..141e99b 100755
--- a/FSF-2020/linear-algebra/linear-transformations/Orthonormal Basis/file2_sum_of_projections_part1.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file2_sum_of_projections_part1.py
@@ -43,7 +43,7 @@ class LinearTrans(LinearTransformationScene):
text3.add_background_rectangle()
self.play(ShowCreation(arrow),Write(text3))
self.wait()
- v_cor = TextMobject("(1,3)")
+ v_cor = TextMobject("(1 , 3)")
v_cor.move_to(3.2*UP+1.3*RIGHT)
v_cor.set_color(BLUE)
v_cor.scale(0.75)
@@ -71,7 +71,7 @@ class LinearTrans(LinearTransformationScene):
v1_cor.add_background_rectangle()
self.play(Write(v1_cor))
self.wait(0.5)
- text1 = TextMobject(r"(1.8,2.4)")
+ text1 = TextMobject("(1.8 , 2.4)")
text1.move_to(2.1*UP+2.5*RIGHT)
text1.scale(0.75)
text1.set_color("#6B8E23")
@@ -95,7 +95,7 @@ class LinearTrans(LinearTransformationScene):
v2_cor.add_background_rectangle()
self.play(Write(v2_cor))
self.wait(0.5)
- text2 = TextMobject(r"(-0.8,0.6)")
+ text2 = TextMobject("(-0.8 , 0.6)")
text2.move_to(0.75*UP+1.75*LEFT)
text2.scale(0.75)
text2.set_color("#8b0000")
diff --git a/FSF-2020/linear-algebra/linear-transformations/Orthonormal Basis/file3_sum_of_projections_part2.py b/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file3_sum_of_projections_part2.py
index 9d25192..2899286 100644
--- a/FSF-2020/linear-algebra/linear-transformations/Orthonormal Basis/file3_sum_of_projections_part2.py
+++ b/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file3_sum_of_projections_part2.py
@@ -3,12 +3,6 @@ class ThreeDExplanation(ThreeDScene):
def construct(self):
- text = TextMobject("Let us consider the example discussed above again. These are the things we know:-")
- text.scale(0.75)
- self.add_fixed_in_frame_mobjects(text)
- text.move_to(3*UP)
- self.play(Write(text))
- self.wait(2)
basis = TextMobject(r"Set of Orthonormal Basis - $\left(\begin{array}{c}\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}\\0\end{array}\right),\left(\begin{array}{c}\frac{-1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}\\0\end{array}\right),\left(\begin{array}{c}0\\0\\1\end{array}\right)$")
basis.scale(0.75)
basis.move_to(UP*1.5)
@@ -31,7 +25,7 @@ class ThreeDExplanation(ThreeDScene):
self.play(Write(eq2))
self.play(Write(eq3))
self.wait()
- self.play(FadeOut(text), FadeOut(basis), FadeOut(eq), FadeOut(v), FadeOut(eq1), FadeOut(eq2), FadeOut(eq3))
+ self.play(FadeOut(basis), FadeOut(eq), FadeOut(v), FadeOut(eq1), FadeOut(eq2), FadeOut(eq3))
self.wait()
text = TextMobject("These are the 3 mutually orthonormal basis of the set(", r"$v_1$, ", r"$v_2$, ", r"$v_3$",")")
@@ -44,13 +38,20 @@ class ThreeDExplanation(ThreeDScene):
self.play(Write(text))
self.wait()
- axes = ThreeDAxes(x_min = -9,x_max=9,y_min=-9,y_max=9,z_min=-9,z_max=9)
+ axes = ThreeDAxes(x_min = -6,x_max=6,y_min=-6,y_max=6,z_min=-6,z_max=6)
self.play(ShowCreation(axes))
- self.move_camera(distance = 100, phi=30*DEGREES,theta=45*DEGREES,run_time=3)
- self.begin_ambient_camera_rotation(rate=0.3)
-
- dashedline1 = DashedLine(start = -12*(UP+RIGHT), end = 12*(UP+RIGHT))
- dashedline2 = DashedLine(start = -12*(UP+LEFT), end = 12*(UP+LEFT))
+ self.move_camera(distance = 100, phi=45*DEGREES,theta=45*DEGREES,run_time=5)
+ self.begin_ambient_camera_rotation(rate=0.1)
+
+ xy_plane = Polygon(6*RIGHT+6*UP,-6*RIGHT+6*UP,-6*RIGHT-6*UP,6*RIGHT-6*UP)
+ xy_plane.set_color("#333333")
+ xy_plane.set_fill("#333333")
+ xy_plane.set_opacity(1)
+ xy_plane.fade(0.7)
+ self.play(ShowCreation(xy_plane))
+
+ dashedline1 = DashedLine(start = -6*(UP+RIGHT), end = 6*(UP+RIGHT))
+ dashedline2 = DashedLine(start = -6*(UP+LEFT), end = 6*(UP+LEFT))
dashedline3 = DashedLine(start = 4*UP+3*RIGHT+[0,0,5], end = 3.5*UP+3.5*RIGHT)
dashedline4 = DashedLine(start = 4*UP+3*RIGHT+[0,0,5], end = 0.5*UP+0.5*LEFT)
dashedline5 = DashedLine(start = 4*UP+3*RIGHT+[0,0,5], end = [0,0,5])
@@ -95,15 +96,17 @@ class ThreeDExplanation(ThreeDScene):
a_line = Line(start = ORIGIN,end = 4*UP+3*RIGHT+[0,0,5])
a_line.set_color(GOLD_E)
- a_tip = Polygon(4*UP+3*RIGHT+[0,0,5],3.6*UP+2.7*RIGHT+[0,0,4.5]+0.1*UP+0.1*LEFT,3.6*UP+2.7*RIGHT+[0,0,4.5]+0.1*DOWN+0.1*RIGHT)
+ a_tip = Polygon(3.92*UP+2.94*RIGHT+[0,0,4.9],3.6*UP+2.7*RIGHT+[0,0,4.5]+0.1*UP+0.1*LEFT,3.6*UP+2.7*RIGHT+[0,0,4.5]+0.1*DOWN+0.1*RIGHT)
a_tip.set_opacity(1)
a_tip.set_fill(GOLD_E)
a_tip.set_color(GOLD_E)
self.play(ShowCreation(a_line), ShowCreation(a_tip))
- self.wait(9)
+ self.stop_ambient_camera_rotation()
+ self.move_camera(distance = 100, phi=45*DEGREES,theta=135*DEGREES,run_time=5)
+
self.play(ShowCreation(dashedline3),ShowCreation(dashedline4),ShowCreation(dashedline5))
- self.wait(6)
+ self.wait()
pv1 = Line(start = ORIGIN,end = 4*UP+3*RIGHT+[0,0,5])
pv1.set_color(GOLD_E)
@@ -142,13 +145,18 @@ class ThreeDExplanation(ThreeDScene):
v3_p = Line(start = ORIGIN,end = [0,0,5])
v3_p.set_color(YELLOW_E)
- v3_p_tip = Polygon([0,0,5],[0,0,4.8]+0.2*RIGHT,[0,0,4.8]+0.2*LEFT)
+ v3_p_tip = Polygon([0,0,5.15],[0,0,4.8]+0.2*RIGHT,[0,0,4.8]+0.2*LEFT)
v3_p_tip.set_opacity(1)
v3_p_tip.set_fill(YELLOW_E)
v3_p_tip.set_color(YELLOW_E)
- self.stop_ambient_camera_rotation()
- self.play(Transform(pv1,v1_p), Transform(pv1tip,v1_p_tip), Transform(pv2,v2_p), Transform(pv2tip,v2_p_tip), Transform(pv3,v3_p), Transform(pv3tip,v3_p_tip))
+ #self.stop_ambient_camera_rotation()
+ self.play(Transform(pv1,v1_p),
+ Transform(pv1tip,v1_p_tip),
+ Transform(pv2,v2_p),
+ Transform(pv2tip,v2_p_tip),
+ Transform(pv3,v3_p),
+ Transform(pv3tip,v3_p_tip))
self.play(FadeOut(dashedline1),
FadeOut(dashedline2),
FadeOut(dashedline3),
diff --git a/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file4.gif b/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file4.gif
new file mode 100644
index 0000000..4891350
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file4.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file5.gif b/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file5.gif
new file mode 100644
index 0000000..d7eb0bc
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file5.gif
Binary files differ
diff --git a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file2_mobius_strip.gif b/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file6.gif
index 9623046..1df6413 100644
--- a/FSF-2020/calculus-of-several-variables/triple-and-surface-integrals/flux/file2_mobius_strip.gif
+++ b/FSF-2020/linear-algebra/linear-transformations/Orthonormal-Basis/file6.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/README.md b/FSF-2020/linear-algebra/linear-transformations/README.md
index 692201e..067755e 100644
--- a/FSF-2020/linear-algebra/linear-transformations/README.md
+++ b/FSF-2020/linear-algebra/linear-transformations/README.md
@@ -1,9 +1,10 @@
# Contributer: Archit Sangal
-My Github Account : <a href="https://github.com/architsangal">architsangal</a>
+My Github Account : <a href="https://github.com/architsangal">architsangal</a> (https://github.com/architsangal). These code were written during the course of FOSSEE Summer Fellowship 2020 under the FLOSS: Mathematics using Python.
<br/></br>
+
## Sub-Topics Covered:
-+ Vector Space Homomorphisms (Linear Maps)
++ Linear Transformations (Linear Maps)
+ The Four Fundamental Subspaces
+ Rank-Nullity Theorem
+ Orthonormal basis
-+ Gramm-Schmidt Orthogonalization Process
++ Gramm-Schmidt Orthogonalization Process \ No newline at end of file
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/file1_Column_Space.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file18_NOT_in_lecture_note_Column_Space.py
index afe4f9a..afe4f9a 100644
--- a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file1_Column_Space.py
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file18_NOT_in_lecture_note_Column_Space.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/Axb.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file1_Axb.py
index 95d1021..95d1021 100755
--- a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/Axb.py
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file1_Axb.py
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file1_Column_Space.gif b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file1_Column_Space.gif
deleted file mode 100644
index 7d8d2e1..0000000
--- a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file1_Column_Space.gif
+++ /dev/null
Binary files differ
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/CSasImage.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file2_CSasImage.py
index fbb3291..70547cb 100644
--- a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/CSasImage.py
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file2_CSasImage.py
@@ -3,30 +3,31 @@ 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 = 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)
+ 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 = 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[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)
+ 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(arrow2), ShowCreation(arrow3),run_time = 1)
+ self.play(Write(Defn), ShowCreation(arrow1), ShowCreation(arrow3),run_time = 1)
self.wait(1)
class solution(LinearTransformationScene):
@@ -43,7 +44,7 @@ class solution(LinearTransformationScene):
self.wait()
self.play(FadeOut(o))
- A = TextMobject(r"Let $A$(= ",r"$\left[\begin{array}{c c} 1 & -1 \\ 1 & -1 \end{array}\right]$",r")denote the matrix the of this linear transformation.")
+ 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()
@@ -116,8 +117,8 @@ class solution2nd(LinearTransformationScene):
arrow2 = Arrow(start = ORIGIN,end = UP+LEFT)
arrow3 = Arrow(start = ORIGIN,end = 3*UP+4*RIGHT)
arrow1.set_color(YELLOW)
- arrow2.set_color(YELLOW)
- arrow3.set_color(YELLOW)
+ arrow2.set_color(ORANGE)
+ arrow3.set_color(PURPLE)
arrow1.scale(1.3)
arrow2.scale(1.5)
arrow3.scale(1.1)
@@ -135,7 +136,7 @@ class solution2nd(LinearTransformationScene):
self.wait()
self.play(FadeOut(o))
- A = TextMobject(r"Matrix the of this linear transformation is $A$(= ",r"$\left[\begin{array}{c c} 1 & -1 \\ 1 & -1 \end{array}\right]$",r") again.")
+ 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()
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/solution.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file3_solution.py
index fb31881..eb310f3 100644
--- a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/solution.py
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file3_solution.py
@@ -5,16 +5,16 @@ class solution(LinearTransformationScene):
self.setup()
self.wait()
- o = TextMobject(r"This is the original $2D$ vector space(before Linear Transformation)")
- o.move_to(DOWN)
+ 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("Let $A$ denote the matrix the of this linear transformation.")
- A.move_to(DOWN)
+ 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))
@@ -23,8 +23,8 @@ class solution(LinearTransformationScene):
self.wait()
self.play(FadeOut(A))
- o = TextMobject(r"This is the transformed vector space i.e. a line ($1D$)")
- o.move_to(DOWN)
+ 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))
@@ -32,15 +32,16 @@ class solution(LinearTransformationScene):
self.play(FadeOut(o))
arrow2 = Arrow(start = ORIGIN, end = 2*DOWN+2*LEFT)
- arrow2.set_color(DARK_BLUE)
+ arrow2.set_color(PURPLE)
arrow2.scale(1.2)
self.play(ShowCreation(arrow2))
self.wait()
- o1 = TextMobject("If the vector lies in the transformed vector space")
+ o1 = TextMobject("If the ","vector b"," lies in the transformed vector space")
o2 = TextMobject("(the line) then the solution exist")
- o1.move_to(2*DOWN+2*RIGHT)
- o2.move_to(2.5*DOWN+2*RIGHT)
+ 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()
@@ -53,15 +54,16 @@ class solution(LinearTransformationScene):
self.play(FadeOut(arrow2))
arrow1 = Arrow(start = ORIGIN, end = 2*UP+RIGHT)
- arrow1.set_color(DARK_BLUE)
+ arrow1.set_color(ORANGE)
arrow1.scale(1.3)
self.play(ShowCreation(arrow1))
self.wait()
- o1 = TextMobject("If the vector does lies in the transformed")
+ 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*DOWN+2*RIGHT)
- o2.move_to(2.5*DOWN+2*RIGHT)
+ 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()
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/null_space.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file4_null_space.py
index dfc3cb4..3c52677 100644
--- a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/null_space.py
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file4_null_space.py
@@ -5,8 +5,8 @@ class null_space(LinearTransformationScene):
self.setup()
self.wait()
- o = TextMobject(r"This is the original $2D$ vector space(before Linear Transformation)")
- o.move_to(DOWN)
+ 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))
@@ -64,7 +64,7 @@ class null_space(LinearTransformationScene):
self.add_transformable_mobject(arrow6)
self.add_transformable_mobject(arrow7)
- o1 = TextMobject("Notice, entire set of vectors which belong to the vector")
+ 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)
@@ -83,7 +83,7 @@ class null_space(LinearTransformationScene):
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(DOWN)
+ o.move_to(3*DOWN)
o.scale(0.75)
o.add_background_rectangle()
self.play(Write(o))
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/file2_Row_Space.py b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file6_Row_Space_part_2.py
index b16a32a..b16a32a 100644
--- a/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file2_Row_Space.py
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Four-Fundamental-Subspaces/file6_Row_Space_part_2.py
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))
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Rank-Nullity-Theorem/README.md b/FSF-2020/linear-algebra/linear-transformations/The-Rank-Nullity-Theorem/README.md
new file mode 100644
index 0000000..9d49b4f
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Rank-Nullity-Theorem/README.md
@@ -0,0 +1,9 @@
+# Contributer: Archit Sangal
+My Github Account : <a href="https://github.com/architsangal">architsangal</a> (https://github.com/architsangal)
+<br/></br>
+
+## Sub-Topics Covered:
++ The Rank-Nullity Theorem
+
+#### Video 1: Visually understanding linear transformation(using grid)
+![GIF1](file2.gif) \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/linear-transformations/The-Rank-Nullity-Theorem/file2.gif b/FSF-2020/linear-algebra/linear-transformations/The-Rank-Nullity-Theorem/file2.gif
new file mode 100644
index 0000000..46efc66
--- /dev/null
+++ b/FSF-2020/linear-algebra/linear-transformations/The-Rank-Nullity-Theorem/file2.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Basis_of_a_dual_vector_space.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Basis_of_a_dual_vector_space.py
new file mode 100644
index 0000000..630670e
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Basis_of_a_dual_vector_space.py
@@ -0,0 +1,126 @@
+from manimlib.imports import *
+class DualVectorSpace(ZoomedScene):
+
+ def construct(self):
+ c1 = Ellipse(radius = 2,color=BLUE)
+ c2 = Ellipse(radius = 2,color=YELLOW)
+ c1.rotate(np.pi/2)
+ c2.rotate(np.pi/2)
+ c1.shift(2*LEFT+0.6*UP)
+ c2.shift(2*RIGHT+0.6*UP)
+ c1.scale(2)
+ c2.scale(2)
+ self.play(ShowCreation(c1))
+ self.play(ShowCreation(c2))
+ dot1 = SmallDot(color=BLUE).shift(2*LEFT+2*UP)
+ dot2 = SmallDot(color=BLUE).shift(2*LEFT+1.5*UP)
+ dot3 = SmallDot(color=BLUE).shift(2*LEFT+1*UP)
+ dot4 = SmallDot(color=BLUE).shift(2*LEFT+0.5*UP)
+ dot5 = SmallDot(color=BLUE).shift(2*LEFT)
+ dot6 = SmallDot(color=BLUE).shift(2*LEFT+0.5*DOWN)
+ dot7 = SmallDot(color=BLUE).shift(2*LEFT+1*DOWN)
+ text1 = TextMobject(r"$V$").scale(0.6).shift(3*UP+2*LEFT)
+ text2 = TextMobject(r"$V^* = \{T:V\rightarrow F\}$").scale(0.6).shift(3*UP+2.5*RIGHT)
+ self.play(ShowCreation(dot1),ShowCreation(dot2),ShowCreation(dot3),ShowCreation(dot4),ShowCreation(dot5),ShowCreation(dot6),ShowCreation(dot7))
+ v1 = TextMobject(r"$v_1$").scale(0.5).shift(2.2*LEFT+2*UP)
+ v2 = TextMobject(r"$v_2$").scale(0.5).shift(2.2*LEFT+1.5*UP)
+ v3 = TextMobject(r"$v_3$").scale(0.5).shift(2.2*LEFT+1*UP)
+ v4 = TextMobject(r"$v_4$").scale(0.5).shift(2.2*LEFT+0.5*UP)
+ v5 = TextMobject(r"$v_5$").scale(0.5).shift(2.2*LEFT)
+ v6 = TextMobject(r"$v_6$").scale(0.5).shift(2.2*LEFT+0.5*DOWN)
+ v7 = TextMobject(r"$v_7$").scale(0.5).shift(2.2*LEFT+1*DOWN)
+ self.play(ShowCreation(v1),ShowCreation(v2),ShowCreation(v3),ShowCreation(v4),ShowCreation(v5),ShowCreation(v6),ShowCreation(v7))
+ self.play(ShowCreation(text1))
+ dot9 = SmallDot(color=YELLOW).shift(2*RIGHT+2*UP)
+ dot10 = SmallDot(color=YELLOW).shift(2*RIGHT+1.5*UP)
+ dot11 = SmallDot(color=YELLOW).shift(2*RIGHT+1*UP)
+ dot12 = SmallDot(color=YELLOW).shift(2*RIGHT+0.5*UP)
+ dot13 = SmallDot(color=YELLOW).shift(2*RIGHT)
+ dot14 = SmallDot(color=YELLOW).shift(2*RIGHT+0.5*DOWN)
+ dot15 = SmallDot(color=YELLOW).shift(2*RIGHT+1*DOWN)
+ self.play(ShowCreation(dot9),ShowCreation(dot10),ShowCreation(dot11),ShowCreation(dot12),ShowCreation(dot13),ShowCreation(dot14),ShowCreation(dot15))
+ v9 = TextMobject(r"${T_1}$").scale(0.5).shift(2.2*RIGHT+2*UP)
+ v10 = TextMobject(r"${T_2}$").scale(0.5).shift(2.2*RIGHT+1.5*UP)
+ v11 = TextMobject(r"${T_3}$").scale(0.5).shift(2.2*RIGHT+1*UP)
+ v12 = TextMobject(r"${T_4}$").scale(0.5).shift(2.2*RIGHT+0.5*UP)
+ v13 = TextMobject(r"${T_5}$").scale(0.5).shift(2.2*RIGHT)
+ v14 = TextMobject(r"${T_6}$").scale(0.5).shift(2.2*RIGHT+0.5*DOWN)
+ v15 = TextMobject(r"${T_7}$").scale(0.5).shift(2.2*RIGHT+1*DOWN)
+ self.play(ShowCreation(v9),ShowCreation(v10),ShowCreation(v11),ShowCreation(v12),ShowCreation(v13),ShowCreation(v14),ShowCreation(v15))
+ self.play(ShowCreation(text2))
+ line1 = Line(start=dot1,end=dot9,stroke_width=0.95)
+ line2 = Line(start=dot2,end=dot10,stroke_width=0.95)
+ line3 = Line(start=dot3,end=dot11,stroke_width=0.95)
+ line4 = Line(start=dot4,end=dot12,stroke_width=0.95)
+ line5 = Line(start=dot5,end=dot13,stroke_width=0.95)
+ line6 = Line(start=dot6,end=dot14,stroke_width=0.95)
+ line7 = Line(start=dot7,end=dot15,stroke_width=0.95)
+ self.play(ShowCreation(line1),ShowCreation(line2),ShowCreation(line3),ShowCreation(line4),ShowCreation(line5),ShowCreation(line6),ShowCreation(line7))
+ self.wait(1.5)
+ rect1 = Rectangle(stroke_width=0.5,width=1,height=1.9).set_fill(color=BLUE,opacity=0.3)
+ vgroup1 = VGroup(dot3,dot4,v3,v4)
+ rect1.surround(vgroup1)
+ self.play(ShowCreation(rect1))
+ text3 = TextMobject(r"Basis of $V$ = $\{v_3, v_4\}$").shift(4.6*LEFT+1*UP).scale(0.5)
+ self.play(ShowCreation(text3))
+ self.wait(1.5)
+ rect2 = Rectangle(stroke_width=0.5,width=1,height=1.7).set_fill(color=YELLOW,opacity=0.3)
+ vgroup2 = VGroup(dot11,dot12,v11,v12)
+ rect2.surround(vgroup2)
+ self.play(ShowCreation(rect2))
+ text4 = TextMobject(r"Basis of $V^*$ = $\{{T_3},{T_4} \}$").shift(4.6*RIGHT+1*UP).scale(0.5)
+ self.play(ShowCreation(text4))
+ self.wait(2.5)
+ v9.move_to(3*LEFT+3*UP).scale(1.2).set_color(YELLOW)
+ colon = TextMobject(":").shift(3*UP+2.6*LEFT)
+ vgroup3 = VGroup(line1,line2,line3,line4,line5,line6,line7)
+ vgroup4 = VGroup(v10,v11,v12,v13,v14,v15,rect1,rect2,text3,text4,c2)
+ vgroup5 = VGroup(dot9,dot10,dot11,dot12,dot13,dot14,dot15)
+ text5 = TextMobject(r"$F$").scale(0.6).shift(3*UP+2*RIGHT)
+ dot9 = SmallDot(color=GREEN).shift(2*RIGHT+2*UP)
+ dot10 = SmallDot(color=GREEN).shift(2*RIGHT+1.5*UP)
+ dot11 = SmallDot(color=GREEN).shift(2*RIGHT+1*UP)
+ dot12 = SmallDot(color=GREEN).shift(2*RIGHT+0.5*UP)
+ dot13 = SmallDot(color=GREEN).shift(2*RIGHT)
+ dot14 = SmallDot(color=GREEN).shift(2*RIGHT+0.5*DOWN)
+ dot15 = SmallDot(color=GREEN).shift(2*RIGHT+1*DOWN)
+ f1 = TextMobject(r"${f_1}$").scale(0.5).shift(2.2*RIGHT+2*UP)
+ f2 = TextMobject(r"${f_2}$").scale(0.5).shift(2.2*RIGHT+1.5*UP)
+ f3 = TextMobject(r"${f_3}$").scale(0.5).shift(2.2*RIGHT+1*UP)
+ f4 = TextMobject(r"${f_4}$").scale(0.5).shift(2.2*RIGHT+0.5*UP)
+ f5 = TextMobject(r"${f_5}$").scale(0.5).shift(2.2*RIGHT)
+ f6 = TextMobject(r"${f_6}$").scale(0.5).shift(2.2*RIGHT+0.5*DOWN)
+ f7 = TextMobject(r"${f_7}$").scale(0.5).shift(2.2*RIGHT+1*DOWN)
+ vgroup6 = VGroup(f1,f2,f3,f4,f5,f6,f7)
+ arrow = Arrow(stroke_width=1.6).scale(1.5).shift(3*UP)
+ c3 = Ellipse(radius = 2,color=GREEN)
+ c3.rotate(np.pi/2)
+ c3.shift(2*RIGHT+0.6*UP)
+ c3.scale(2)
+ self.play(ShowCreation(v9))
+ self.wait(1.5)
+ self.play(ShowCreation(arrow),ShowCreation(colon),Transform(text2,text5),FadeOut(vgroup3),FadeOut(vgroup4),FadeOut(vgroup5))
+ self.play(ShowCreation(vgroup5),ShowCreation(vgroup6),ShowCreation(c3))
+ self.wait(0.7)
+ self.play(ShowCreation(vgroup3))
+ self.wait(3)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Dual_Basis_Example.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Dual_Basis_Example.py
new file mode 100644
index 0000000..d79ec3e
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Dual_Basis_Example.py
@@ -0,0 +1,97 @@
+from manimlib.imports import *
+import numpy as np
+
+class Dual_Basis(GraphScene):
+ CONFIG={
+ "x_min": -7,
+ "x_max": 7,
+ "y_min": -7,
+ "y_max": 7,
+ "graph_origin": ORIGIN,
+ "x_axis_label":"$X$",
+ "y_axis_label":"$Y$",
+ "x_labeled_nums": list(np.arange(-7, 8,1)),
+ "y_labeled_nums": list(np.arange(-7, 8,1)),
+ "x_axis_width": 10,
+ "y_axis_height": 10,
+ "x_tick_frequency":1,
+ "axes_color": GREY,
+ "area_opacity": 3,
+ "num_rects": 10,
+ }
+ def construct(self):
+ self.setup_axes(animate = True)
+ XD = self.x_axis_width/(self.x_max- self.x_min)
+ YD = self.y_axis_height/(self.y_max- self.y_min)
+ a1=2*XD*RIGHT+1*YD*UP
+ a2=3*XD*RIGHT+1*YD*UP
+ vec1=Vector(direction=a1,stroke_width=2).set_color(RED_E)
+ vec1.shift(self.graph_origin)
+ v1_label=TextMobject(r"$v_1$")
+ v1_label=(v1_label.shift(self.graph_origin+a1+0.1)).scale(.6)
+ self.play(ShowCreation(vec1),ShowCreation(v1_label))
+ text1=TextMobject(r"\text{$v_1$}",r"\text{$= (2,1)$}").scale(.6)
+ text1[0].set_color(RED_E)
+ text1.shift(5*LEFT+3.5*UP)
+ self.play(ShowCreation(text1))
+ self.wait(1.5)
+ vec2=Vector(direction=a2,stroke_width=2).set_color(YELLOW_E)
+ vec2.shift(self.graph_origin)
+ v2_label=TextMobject(r"$v_2$")
+ v2_label=(v2_label.shift(self.graph_origin+a2+0.1)).scale(.6)
+ self.play(ShowCreation(vec2),ShowCreation(v2_label))
+ text2=TextMobject(r"\text{$v_2$}",r"\text{$= (3,1)$}").scale(.6)
+ text2[0].set_color(YELLOW_E)
+ text2.shift(5*LEFT+3*UP)
+ self.play(ShowCreation(text2))
+ self.wait(1.5)
+ text3=TextMobject(r"\text{${T_2}$}",r"\text{$(v_1)$}",r"\text{$= 0$}").scale(.6)
+ text3[0].set_color(BLUE)
+ text3[1].set_color(RED_E)
+ text3.shift(4.94*LEFT+2.5*UP)
+ self.play(ShowCreation(text3))
+ self.wait(1.5)
+ text4=TextMobject(r"\text{${T_2}$}",r"\text{$= x - 2y$}").scale(.6)
+ text4[0].set_color(BLUE)
+ text4.shift(4.9*LEFT+2*UP)
+ self.play(ShowCreation(text4))
+ self.wait(1.5)
+ line1 = self.get_graph(lambda x : x/2, x_min = -5,x_max=5,color=BLUE)
+ v1_dual_label = TextMobject(r"${T_2}$").scale(.6).shift(3.9*RIGHT+1.85*UP)
+ self.play(ShowCreation(line1),ShowCreation(v1_dual_label))
+ self.wait(1.5)
+ text5=TextMobject(r"\text{${T_1}$}",r"\text{$(v_2)$}",r"\text{$= 0$}").scale(.6)
+ text5[1].set_color(YELLOW_E)
+ text5[0].set_color(PINK)
+ text5.shift(4.94*LEFT+1.5*UP)
+ self.play(ShowCreation(text5))
+ self.wait(1.5)
+ line2 = self.get_graph(lambda x : x/3, x_min = -5,x_max=5,color=PINK)
+ v2_dual_label = TextMobject(r"${T_1}$").scale(.6).shift(3.9*RIGHT+1.3*UP)
+ self.play(ShowCreation(line2),ShowCreation(v2_dual_label))
+ self.wait(1.5)
+ text6=TextMobject(r"\text{${T_1}$}",r"\text{$= - x + 3y$}").scale(.6)
+ text6[0].set_color(PINK)
+ text6.shift(4.76*LEFT+1*UP)
+ self.play(ShowCreation(text6))
+ self.wait(3)
+ text7 = TextMobject(r"\text{B =}",r"\text{$[$}",r"\text{$v_1,$}",r"\text{$v_2$}",r"\text{$]$}",r"\text{=}",r"\text{$[(2,1), (3,1)]$}").scale(0.6).shift(3*UP+4.5*LEFT)
+ text7[2].set_color(RED_E)
+ text7[3].set_color(YELLOW_E)
+ self.play(FadeOut(text1),FadeOut(text2),FadeOut(text3),FadeOut(text4),FadeOut(text5),FadeOut(text6))
+ self.play(ShowCreation(text7))
+ self.wait(0.7)
+ text8 = TextMobject(r"\text{B$^* =$}",r"\text{$[$}",r"\text{${T_1}$,}",r"\text{${T_2} $}",r"\text{$]$}",r"\text{=}",r"\text{$[-x + 3y, x - 2y]$}").scale(0.6).shift(2.3*UP+4.1*LEFT)
+ text8[3].set_color(BLUE)
+ text8[2].set_color(PINK)
+ self.play(ShowCreation(text8))
+ self.wait(3)
+
+
+
+
+
+
+
+
+
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Dual_of_a_Cube.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Dual_of_a_Cube.py
new file mode 100644
index 0000000..a6f501e
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Dual_of_a_Cube.py
@@ -0,0 +1,38 @@
+from manimlib.imports import *
+class Duality(ThreeDScene):
+
+
+ def construct(self):
+ axes = ThreeDAxes()
+ self.set_camera_orientation(phi = 65*DEGREES,theta =80*DEGREES)
+ self.begin_ambient_camera_rotation(rate=0.09)
+ cube = Cube(stroke_width=5,color=WHITE).scale(2)
+ cube.set_opacity(0.2)
+ self.play(ShowCreation(cube))
+ dot1= Dot(color=RED).scale(0.85).shift([2,0,0])
+ self.play(ShowCreation(dot1))
+ dot2= Dot(color=YELLOW).scale(0.85).shift([-2,0,0])
+ self.play(ShowCreation(dot2))
+ dot3= Dot(color=BLUE).scale(0.85).shift([0,-2,0])
+ self.play(ShowCreation(dot3))
+ dot4= Dot(color=GREEN).scale(0.85).shift([0,2,0])
+ self.play(ShowCreation(dot4))
+ dot5= Dot(color=ORANGE).scale(0.85).shift([0,0,2])
+ self.play(ShowCreation(dot5))
+ dot6= Dot(color=PINK).scale(0.85).shift([0,0,-2])
+ self.play(ShowCreation(dot6))
+ line1 = Line(start=[0,0,2],end=[2,0,0],stroke_width=2.5,color=BLACK)
+ line2 = Line(start=[0,0,2],end=[-2,0,0],stroke_width=2.5,color=BLACK)
+ line3 = Line(start=[0,0,2],end=[0,-2,0],stroke_width=2.5,color=BLACK)
+ line4 = Line(start=[0,0,2],end=[0,2,0],stroke_width=2.5,color=BLACK)
+ line5 = Line(start=[2,0,0],end=[0,0,-2],stroke_width=2.5,color=BLACK)
+ line6 = Line(start=[-2,0,0],end=[0,0,-2],stroke_width=2.5,color=BLACK)
+ line7 = Line(start=[0,-2,0],end=[0,0,-2],stroke_width=2.5,color=BLACK)
+ line8 = Line(start=[0,2,0],end=[0,0,-2],stroke_width=2.5,color=BLACK)
+ line9 = Line(start=[0,2,0],end=[-2,0,0],stroke_width=2.5,color=BLACK)
+ line10 = Line(start=[-2,0,0],end=[0,-2,0],stroke_width=2.5,color=BLACK)
+ line11 = Line(start=[0,-2,0],end=[2,0,0],stroke_width=2.5,color=BLACK)
+ line12 = Line(start=[2,0,0],end=[0,2,0],stroke_width=2.5,color=BLACK)
+ self.play(ShowCreation(line1),ShowCreation(line2),ShowCreation(line3),ShowCreation(line4),ShowCreation(line5),ShowCreation(line6),ShowCreation(line7),ShowCreation(line8),ShowCreation(line9),ShowCreation(line10),ShowCreation(line11),ShowCreation(line12))
+ self.wait(10)
+
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Duality_in_Sets.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Duality_in_Sets.py
new file mode 100644
index 0000000..693017e
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Duality_in_Sets.py
@@ -0,0 +1,25 @@
+from manimlib.imports import *
+import numpy as np
+class Duality_in_sets(Scene):
+ def construct(self):
+ circle1 = Circle(radius=0.4,color=BLACK).shift(2.3*LEFT)
+ circle1.set_fill(color=RED,opacity=200)
+ rect1=Rectangle(height=2,width=2,color=GREY).shift(2*LEFT)
+ rect1.set_fill(color=DARK_BLUE,opacity=1)
+ text1 = TextMobject("S").scale(0.7).shift(0.9*UP+0.7*LEFT)
+ text2 = TextMobject("X",color=BLACK,stroke_width=0.5).scale(0.5).shift(2.3*LEFT)
+ self.play(ShowCreation(rect1),ShowCreation(text1),ShowCreation(circle1),ShowCreation(text2))
+ circle2 = Circle(radius=0.4,color=BLACK).shift(1.7*RIGHT)
+ circle2.set_fill(color=BLACK,opacity=200)
+ rect2=Rectangle(height=2,width=2,color=GREY).shift(2*RIGHT)
+ rect2.set_fill(color=DARK_BLUE,opacity=1)
+ text3 = TextMobject("S").scale(0.7).shift(0.9*UP+3.3*RIGHT)
+ text4 = TextMobject(r"X$^c$",color=BLACK,stroke_width=0.2).scale(0.5).shift(2.55*RIGHT+0.6*UP)
+ text5 = TextMobject(r"\text{The subset}",r"\text{X$^c$}",r"\text{is the dual of subset}",r"\text{X}").scale(0.6).shift(2.7*UP+0.5*LEFT)
+ text5[1].set_color(GREY)
+ text5[3].set_color(GREY)
+ self.play(ShowCreation(rect2),ShowCreation(circle2),ShowCreation(text3),ShowCreation(text4))
+ self.wait(2)
+ self.play(ShowCreation(text5))
+ self.wait(3)
+
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Linear_Functional.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Linear_Functional.py
new file mode 100644
index 0000000..6edc918
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/Linear_Functional.py
@@ -0,0 +1,29 @@
+from manimlib.imports import *
+import numpy as np
+class LinearFunctional(Scene):
+ def construct(self):
+ big_box=Rectangle().scale(2.7)
+ box = Rectangle(height=2,width=2,color=DARK_GREY).set_fill(color=PURPLE,opacity=350)
+ arrow1 = Arrow(color=RED).shift(1.8*LEFT+0.5*UP)
+ arrow2 = Arrow(color=RED).shift(1.8*LEFT+0.5*DOWN)
+ arrow3 = Arrow(color=GREEN).shift(0.5*UP+1.8*RIGHT)
+ arrow4 = Arrow(color=GREEN).shift(0.5*DOWN+1.8*RIGHT)
+ Linear = TextMobject("LINEAR",color=BLACK).scale(0.5).shift(0.2*UP)
+ Functional = TextMobject("FUNCTIONAL",color=BLACK).scale(0.5).shift(0.2*DOWN)
+ u = TextMobject(r"$\vec{u}$",color=YELLOW).scale(0.7).shift(2.8*LEFT+0.5*UP)
+ v = TextMobject(r"$\vec{v}$",color=YELLOW).scale(0.7).shift(2.8*LEFT+0.5*DOWN)
+ f1 = TextMobject(r"$f_1$",color=YELLOW).scale(0.7).shift(2.8*RIGHT+0.5*UP)
+ f2 = TextMobject(r"$f_2$",color=YELLOW).scale(0.7).shift(2.8*RIGHT+0.5*DOWN)
+ text = TextMobject(r"The Linear Functional is a function that takes $\vec{u}, \vec{v} \in$ V as inputs and gives the output $f_1, f_2\in$ F.").scale(0.55).shift(2*DOWN)
+ self.play(ShowCreation(big_box))
+ self.play(ShowCreation(box))
+ self.play(ShowCreation(Linear),ShowCreation(Functional))
+ self.wait(2)
+ self.play(ShowCreation(arrow1),ShowCreation(u))
+ self.play(ShowCreation(arrow3),ShowCreation(f1))
+ self.wait(0.7)
+ self.play(ShowCreation(arrow2),ShowCreation(v))
+ self.play(ShowCreation(arrow4),ShowCreation(f2))
+ self.wait(1)
+ self.play(ShowCreation(text))
+ self.wait(4)
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Basis_of_a_dual_vector_space.mp4 b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Basis_of_a_dual_vector_space.mp4
new file mode 100644
index 0000000..b96f541
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Basis_of_a_dual_vector_space.mp4
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Dual_Basis_Example.mp4 b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Dual_Basis_Example.mp4
new file mode 100644
index 0000000..c93be25
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Dual_Basis_Example.mp4
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Dual_of_a_Cube.mp4 b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Dual_of_a_Cube.mp4
new file mode 100644
index 0000000..ebfb564
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Dual_of_a_Cube.mp4
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Duality_in_Sets.mp4 b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Duality_in_Sets.mp4
new file mode 100644
index 0000000..86cc693
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Duality_in_Sets.mp4
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Linear_functional.mp4 b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Linear_functional.mp4
new file mode 100644
index 0000000..d41fada
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Dual-Spaces/gifs4/Linear_functional.mp4
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/Function_Scalar_Multiplication.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/Function_Scalar_Multiplication.py
new file mode 100644
index 0000000..ac74792
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/Function_Scalar_Multiplication.py
@@ -0,0 +1,62 @@
+from manimlib.imports import *
+from scipy import exp
+class FunctionScalarMultiplication(GraphScene):
+ CONFIG = {
+ "x_min" : -5,
+ "x_max" : 5,
+ "y_min" : -5,
+ "y_max" : 5,
+ "y_tick_frequency" : 1,
+ "x_tick_frequency" : 1,
+ "axes_color":LIGHT_GRAY,
+ "graph_origin": ORIGIN,
+ }
+ def construct(self):
+ self.setup_axes(animate = True)
+ curve1 = self.get_graph(lambda x : 1/3*(x**2)+1, x_min=-2,x_max=2.5,color=ORANGE)
+ curve2 = self.get_graph(lambda x : 2*(1/3*(x**2)+1), x_min=-2,x_max=2.5,color=GOLD)
+ fx= TextMobject("$f(x)$").scale(0.6).shift(1.25*UP + 2.2*LEFT)
+ gx= TextMobject("$2 \cdot f(x)$").scale(0.6).shift(0.5*UP + 2.1*LEFT)
+ f1 = self.get_vertical_line_to_graph(-2,curve1,color=YELLOW)
+ f2 = self.get_vertical_line_to_graph(-1.5,curve1,color=YELLOW)
+ f3 = self.get_vertical_line_to_graph(-1,curve1,color=YELLOW)
+ f4 = self.get_vertical_line_to_graph(-0.5,curve1,color=YELLOW)
+ f5 = self.get_vertical_line_to_graph(0,curve1,color=YELLOW)
+ f6 = self.get_vertical_line_to_graph(0.5,curve1,color=YELLOW)
+ f7 = self.get_vertical_line_to_graph(1,curve1,color=YELLOW)
+ f8 = self.get_vertical_line_to_graph(1.5,curve1,color=YELLOW)
+ f9 = self.get_vertical_line_to_graph(2,curve1,color=YELLOW)
+ f10 = self.get_vertical_line_to_graph(2.5,curve1,color=YELLOW)
+ self.play(ShowCreation(curve1),ShowCreation(fx))
+ self.wait(1.5)
+ self.play(ShowCreation(f1),ShowCreation(f2),ShowCreation(f3),ShowCreation(f4),ShowCreation(f5),ShowCreation(f6),ShowCreation(f7),ShowCreation(f8),ShowCreation(f9),ShowCreation(f10))
+ self.wait(1.7)
+ line1=Line(color=YELLOW).shift(5*LEFT+1.8*UP).scale(0.5)
+ line1.rotate(np.pi/2)
+ scalar = TextMobject("2 x").scale(0.65).shift(5.5*LEFT+1.9*UP)
+ equal = TextMobject("=").scale(0.65).shift(4.5*LEFT+1.9*UP)
+ line2=Line(color=BLUE).shift(4*LEFT+2.3*UP)
+ line2.rotate(np.pi/2)
+ self.play(ShowCreation(line1),ShowCreation(scalar),ShowCreation(equal),ShowCreation(line2))
+ g1 = self.get_vertical_line_to_graph(-2,curve2,color=BLUE)
+ g2 = self.get_vertical_line_to_graph(-1.5,curve2,color=BLUE)
+ g3 = self.get_vertical_line_to_graph(-1,curve2,color=BLUE)
+ g4 = self.get_vertical_line_to_graph(-0.5,curve2,color=BLUE)
+ g5 = self.get_vertical_line_to_graph(0,curve2,color=BLUE)
+ g6 = self.get_vertical_line_to_graph(0.5,curve2,color=BLUE)
+ g7 = self.get_vertical_line_to_graph(1,curve2,color=BLUE)
+ g8 = self.get_vertical_line_to_graph(1.5,curve2,color=BLUE)
+ g9 = self.get_vertical_line_to_graph(2,curve2,color=BLUE)
+ g10 = self.get_vertical_line_to_graph(2.5,curve2,color=BLUE)
+ self.play(ShowCreation(g1),ShowCreation(g2),ShowCreation(g3),ShowCreation(g4),ShowCreation(g5),ShowCreation(g6),ShowCreation(g7),ShowCreation(g8),ShowCreation(g9),ShowCreation(g10))
+ self.wait(2)
+ fx2=TextMobject("2$\cdot f(x)$").scale(0.6).shift(2.6*UP+2.3*LEFT)
+ self.play(ShowCreation(curve2),ShowCreation(fx2))
+ self.wait(1.5)
+ self.play(FadeOut(curve1),FadeOut(fx))
+ sc_mult=TextMobject("$(2 f(x)) = 2f(x)$",color=GOLD).scale(0.65).shift(0.65*UP + 5*LEFT)
+ rect = Rectangle(height=0.5,width=2)
+ rect.surround(sc_mult)
+ self.play(ShowCreation(sc_mult),ShowCreation(rect))
+ self.wait(3)
+
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/Function_Space_Addition.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/Function_Space_Addition.py
new file mode 100644
index 0000000..5ce0e11
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/Function_Space_Addition.py
@@ -0,0 +1,89 @@
+from manimlib.imports import *
+from scipy import sin,exp
+class FunctionalVectorSpace(GraphScene):
+ CONFIG = {
+ "x_min" : -5,
+ "x_max" : 5,
+ "y_min" : -5,
+ "y_max" : 5,
+ "y_tick_frequency" : 1,
+ "x_tick_frequency" : 1,
+ "axes_color":LIGHT_GRAY,
+ "graph_origin": ORIGIN,
+
+
+ }
+ def construct(self):
+ self.setup_axes(animate = True)
+ curve1 = self.get_graph(lambda x : exp(x) + 0.5, x_min=-2,x_max=2.5,color=ORANGE)
+ curve2 = self.get_graph(lambda x : 1/3*(x**2)+1, x_min=-2,x_max=2.5,color=DARK_BLUE)
+ curve3 = self.get_graph(lambda x : 1/3*(x**2)+1 + exp(x) + 0.5, x_min=-2,x_max=2.5,color=BLACK)
+ fx= TextMobject("$f(x)$").scale(0.6).shift(1.25*UP + 2.1*LEFT)
+ gx= TextMobject("$g(x)$").scale(0.6).shift(0.5*UP + 2.1*LEFT)
+ f1 = self.get_vertical_line_to_graph(-2,curve1,color=YELLOW)
+ f2 = self.get_vertical_line_to_graph(-1.5,curve1,color=YELLOW)
+ f3 = self.get_vertical_line_to_graph(-1,curve1,color=YELLOW)
+ f4 = self.get_vertical_line_to_graph(-0.5,curve1,color=YELLOW)
+ f5 = self.get_vertical_line_to_graph(0,curve1,color=YELLOW)
+ f6 = self.get_vertical_line_to_graph(0.5,curve1,color=YELLOW)
+ f7 = self.get_vertical_line_to_graph(1,curve1,color=YELLOW)
+ f8 = self.get_vertical_line_to_graph(1.5,curve1,color=YELLOW)
+ f9 = self.get_vertical_line_to_graph(2,curve1,color=YELLOW)
+ f10 = self.get_vertical_line_to_graph(2.5,curve1,color=YELLOW)
+
+ self.play(ShowCreation(curve1),ShowCreation(gx))
+ self.wait(1.2)
+ self.play(ShowCreation(curve2),ShowCreation(fx))
+ self.wait(1.2)
+ self.play(ShowCreation(f1),ShowCreation(f2),ShowCreation(f3),ShowCreation(f4),ShowCreation(f5),ShowCreation(f6),ShowCreation(f7),ShowCreation(f8),ShowCreation(f9),ShowCreation(f10))
+ self.wait(1.7)
+ g1 = self.get_vertical_line_to_graph(-2,curve2,color=BLUE)
+ g2 = self.get_vertical_line_to_graph(-1.5,curve2,color=BLUE)
+ g3 = self.get_vertical_line_to_graph(-1,curve2,color=BLUE)
+ g4 = self.get_vertical_line_to_graph(-0.5,curve2,color=BLUE)
+ g5 = self.get_vertical_line_to_graph(0,curve2,color=BLUE)
+ g6 = self.get_vertical_line_to_graph(0.5,curve2,color=BLUE)
+ g7 = self.get_vertical_line_to_graph(1,curve2,color=BLUE)
+ g8 = self.get_vertical_line_to_graph(1.5,curve2,color=BLUE)
+ g9 = self.get_vertical_line_to_graph(2,curve2,color=BLUE)
+ g10 = self.get_vertical_line_to_graph(2.5,curve2,color=BLUE)
+ self.play(ShowCreation(g1),ShowCreation(g2),ShowCreation(g3),ShowCreation(g4),ShowCreation(g5),ShowCreation(g6),ShowCreation(g7),ShowCreation(g8),ShowCreation(g9),ShowCreation(g10))
+ line1=Line(color=BLUE).shift(5*LEFT+2.3*UP).scale(0.25)
+ line1.rotate(np.pi/2)
+ line2=Line(color=YELLOW).shift(6*LEFT+2.5*UP).scale(0.5)
+ line2.rotate(np.pi/2)
+ line3=Line(color=PURPLE_B).shift(4*LEFT+2.7*UP).scale(0.75)
+ line3.rotate(np.pi/2)
+ add=TextMobject("+").shift(2.4*UP+5.5*LEFT).scale(0.7)
+ equal=TextMobject("=").shift(2.4*UP+4.5*LEFT).scale(0.7)
+ self.play(ShowCreation(line2),ShowCreation(line1),ShowCreation(add),ShowCreation(equal),ShowCreation(line3))
+ self.wait(2)
+ self.play(FadeOut(curve1),FadeOut(curve2))
+ self.wait(3)
+ h1 = self.get_vertical_line_to_graph(-2,curve3,color=PURPLE_B)
+ h2 = self.get_vertical_line_to_graph(-1.5,curve3,color=PURPLE_B)
+ h3 = self.get_vertical_line_to_graph(-1,curve3,color=PURPLE_B)
+ h4 = self.get_vertical_line_to_graph(-0.5,curve3,color=PURPLE_B)
+ h5 = self.get_vertical_line_to_graph(0,curve3,color=PURPLE_B)
+ h6 = self.get_vertical_line_to_graph(0.5,curve3,color=PURPLE_B)
+ h7 = self.get_vertical_line_to_graph(1,curve3,color=PURPLE_B)
+ h8 = self.get_vertical_line_to_graph(1.5,curve3,color=PURPLE_B)
+ h9 = self.get_vertical_line_to_graph(2,curve3,color=PURPLE_B)
+ h10 = self.get_vertical_line_to_graph(2.5,curve3,color=PURPLE_B)
+
+ line1.shift(1*LEFT+0.9*UP)
+ equal.shift(0.3*LEFT+0.2*UP)
+ f=TextMobject("$f(x)$").scale(0.5).shift(5.6*LEFT+3.2*UP)
+ g=TextMobject("$g(x)$").scale(0.5).shift(5.6*LEFT+2.4*UP)
+ fg=TextMobject("$(f + g)(x)$").scale(0.5).shift(2.85*UP+3.3*LEFT)
+ self.play(FadeOut(add),ShowCreation(equal),ShowCreation(line1),ShowCreation(f),ShowCreation(g),ShowCreation(fg),FadeOut(fx),FadeOut(gx))
+ self.wait(1.7)
+ self.play(ShowCreation(h1),ShowCreation(h2),ShowCreation(h3),ShowCreation(h4),ShowCreation(h5),ShowCreation(h6),ShowCreation(h7),ShowCreation(h8),ShowCreation(h9),ShowCreation(h10))
+ curve3 = self.get_graph(lambda x : 1/3*(x**2)+1 + exp(x) + 0.5, x_min=-2,x_max=2.5,color=RED_A)
+ fgx=TextMobject("$(f + g)(x)$").scale(0.5).shift(1.65*UP+2.4*LEFT)
+ self.play(ShowCreation(curve3),ShowCreation(fgx))
+ sum=TextMobject("$(f + g)(x) = f(x) + g(x)$",color=GOLD).scale(0.65).shift(0.8*UP + 5*LEFT)
+ rect = Rectangle(height=0.5,width=2)
+ rect.surround(sum)
+ self.play(ShowCreation(sum),ShowCreation(rect))
+ self.wait(3) \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/Integral_Properties.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/Integral_Properties.py
new file mode 100644
index 0000000..97c0e09
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/Integral_Properties.py
@@ -0,0 +1,77 @@
+from manimlib.imports import *
+from scipy import sin
+class Integral_Properties(GraphScene):
+ CONFIG = {
+ "x_min" : 0,
+ "x_max" : 5,
+ "y_min" : 0,
+ "y_max" : 6,
+ "y_tick_frequency" : 1,
+ "x_tick_frequency" : 1,
+ "axes_color":LIGHT_GRAY,
+ "x_labeled_nums" : list(range(6)),
+ "y_labeled_nums" : list(range(6))
+ }
+ def construct(self):
+ self.setup_axes(animate=False)
+ curve1 = self.get_graph(lambda x : sin(x), x_min=0,x_max=2.5,color=RED)
+ curve2 = self.get_graph(lambda x : x, x_min=0,x_max=2.5,color=DARK_BLUE)
+ curve3 = self.get_graph(lambda x : sin(x) + x, x_min=0,x_max=2.5,color=GREEN)
+ fx = TextMobject(r"$f(x)$").scale(0.5).shift(1*RIGHT+1.8*DOWN)
+ gx = TextMobject(r"$g(x)$").scale(0.5).shift(1*RIGHT)
+ sum = TextMobject(r"$f(x) + g(x)$").scale(0.5).shift(1.3*RIGHT+0.6*UP)
+ area1 = self.get_area(curve1,0,2.5)
+ area2 = self.get_area(curve2,0,2.5)
+ area3 = self.get_area(curve3,0,2.5)
+ area2.set_fill(color=PURPLE)
+ area3.set_fill(color=ORANGE)
+ text1=TextMobject(r"$\int_{0}^{2.5}$ f(x) dx = Area under the curve f(x)",color=BLUE_C).scale(0.7).shift(2.7*RIGHT+3*UP)
+ text2=TextMobject(r"$\int_{0}^{2.5}$ g(x) dx = Area under the curve g(x)",color=PURPLE_B).scale(0.7).shift(2.7*RIGHT+2.4*UP)
+ text3=TextMobject(r"Area under the curve f(x) + g(x) = $\int_{0}^{2.5} (f(x) + g(x)) dx$",color=ORANGE).scale(0.7).shift(2.7*RIGHT+1.8*UP)
+ text4=TextMobject(r"\text{$\int_{0}^{2.5}$ (f(x) + g(x)) dx}",r"\text{ = }",r"\text{ $\int_{0}^{2.5}$ f(x) dx }",r"\text{+}",r"\text{$\int_{0}^{2.5}$ g(x) dx}").scale(0.62).shift(2.7*RIGHT+2.7*UP)
+ text4[0].set_color(ORANGE)
+ text4[2].set_color(BLUE_C)
+ text4[4].set_color(PURPLE_B)
+ self.play(ShowCreation(curve1), ShowCreation(fx))
+ self.wait(1.2)
+ self.play(ShowCreation(curve2),ShowCreation(gx))
+ self.wait(1.2)
+ self.play(ShowCreation(area1))
+ self.play(ShowCreation(text1))
+ self.wait(1.5)
+ self.play(ShowCreation(area2))
+ self.play(ShowCreation(text2))
+ self.wait(1.5)
+ self.play(ShowCreation(curve3),ShowCreation(sum))
+ self.play(ShowCreation(area3))
+ self.play(ShowCreation(text3))
+ self.wait(2)
+ self.play(FadeOut(text1),FadeOut(text2),FadeOut(text3))
+ self.wait(1)
+ self.play(ShowCreation(text4))
+ self.wait(3)
+ self.play(FadeOut(curve1),FadeOut(curve2),FadeOut(area1),FadeOut(area2))
+ self.wait(1.5)
+ self.play(FadeOut(text4),FadeOut(area2),FadeOut(curve2),FadeOut(gx),FadeOut(curve3),FadeOut(sum),FadeOut(area3),ShowCreation(curve1),ShowCreation(fx))
+ self.wait(1.5)
+ self.play(ShowCreation(area1),ShowCreation(text1))
+ self.wait(1.5)
+ curve4 = self.get_graph(lambda x : 2*sin(x), x_min=0,x_max=2.5,color=RED)
+ area4 = self.get_area(curve4,0,2.5)
+ area4.set_fill(color=YELLOW)
+ fx2 = TextMobject(r"$2f(x)$").scale(0.7).shift(1*RIGHT+1.2*DOWN)
+ scalar_mul=TextMobject(r"$\int_{0}^{2.5} ( 2f(x) ) dx$ = 2 $\times$ Area under the curve f(x)",color=YELLOW).scale(0.7).shift(2.7*RIGHT+2.4*UP)
+ self.play(ShowCreation(curve4),ShowCreation(fx2))
+ self.wait(1)
+ self.play(ShowCreation(area4))
+ self.wait(2)
+ self.play(ShowCreation(scalar_mul))
+ self.wait(2)
+ text5=TextMobject(r"\text{$\int_{0}^{2.5}$ (2 f(x)) dx}",r"\text{ = }",r"\text{2 $\int_{0}^{2.5}$ f(x) dx }").scale(0.67).shift(2.7*RIGHT+2.7*UP)
+ text5[0].set_color(YELLOW)
+ text5[2].set_color(BLUE_C)
+ self.play(FadeOut(text1),FadeOut(scalar_mul))
+ self.wait(1)
+ self.play(ShowCreation(text5))
+ self.wait(3)
+
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/gifs3/Addition_of_Functions.gif b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/gifs3/Addition_of_Functions.gif
new file mode 100644
index 0000000..6c42b74
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/gifs3/Addition_of_Functions.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/gifs3/Function_Space_Example.gif b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/gifs3/Function_Space_Example.gif
new file mode 100644
index 0000000..996a9de
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/gifs3/Function_Space_Example.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/gifs3/Scalar_Multiplicaton_of_Functions.gif b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/gifs3/Scalar_Multiplicaton_of_Functions.gif
new file mode 100644
index 0000000..8fff2c8
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Function-and-Polynomial-Spaces/gifs3/Scalar_Multiplicaton_of_Functions.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Conjugate_Symmetry_and_Positivity_of_Inner_Product.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Conjugate_Symmetry_and_Positivity_of_Inner_Product.py
new file mode 100644
index 0000000..1d84842
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Conjugate_Symmetry_and_Positivity_of_Inner_Product.py
@@ -0,0 +1,141 @@
+from manimlib.imports import *
+VECTORS = [[0, 2],
+ [1, 1],
+ [0, -2],
+ [1, -1],
+ [2, -2],
+ [2, 2],
+ [2, 2],
+ [-2, -1],
+ [3, 4]]
+class Scene1(LinearTransformationScene):
+ CONFIG = {
+ "include_background_plane": True,
+ "include_foreground_plane": False,
+ "show_coordinates": True,
+ "show_basis_vectors": False,
+ "basis_vector_stroke_width": 3,
+ }
+ def construct(self):
+ text1 = TextMobject(r"\text{$u$}",r"\text{ = $0 + 2i$, }",r"\text{$v$}",r"\text{ = $1 + i$}").scale(0.6).shift(3.5*UP+4*LEFT)
+ text1[0].set_color(YELLOW)
+ text1[2].set_color(RED)
+ text1.add_background_rectangle()
+ self.play(ShowCreation(text1))
+ text2 = TextMobject(r"\text{$\overline{u}$}",r"\text{ = $0 - 2i$, }",r"\text{$\overline{v}$}",r"\text{ = $1 - i$}").scale(0.6).shift(3*UP+4*LEFT)
+ text2[0].set_color(YELLOW)
+ text2[2].set_color(RED)
+ text2.add_background_rectangle()
+ self.play(ShowCreation(text2))
+ self.wait(2)
+ v1 = self.add_vector(VECTORS[0],color = YELLOW, stroke_width = 3.5)
+ u = TextMobject(r"$u$",color=YELLOW).shift(0.3*LEFT+2*UP).scale(0.6)
+ self.play(ShowCreation(u))
+ v1b = self.add_vector(VECTORS[2],color = YELLOW, stroke_width = 3.5)
+ ub = TextMobject(r"$\overline{u}$",color=YELLOW).shift(2*DOWN+0.3*LEFT).scale(0.6)
+ self.play(ShowCreation(ub))
+ self.wait(2)
+ v2 = self.add_vector(VECTORS[1],color = RED, stroke_width = 3.5)
+ v = TextMobject(r"$v$",color=RED).shift(1.2*RIGHT+1*UP).scale(0.6)
+ self.play(ShowCreation(v))
+ v2b = self.add_vector(VECTORS[3],color = RED, stroke_width = 3.5)
+ vb = TextMobject(r"$\overline{v}$",color=RED).shift(1.2*RIGHT+1*DOWN).scale(0.6)
+ self.play(ShowCreation(vb))
+ text3 = TextMobject(r"\text{$<u, v>$}",r"\text{ = }",r"\text{$\overline{u}$",r"\text{$\cdot$}",r"\text{$v$}",r"\text{ = }",r"\text{$2 - 2i$}").shift(2.5*UP+3.7*LEFT).scale(0.6)
+ text3[0].set_color(BLUE)
+ text3[2].set_color(YELLOW)
+ text3[4].set_color(RED)
+ text3.add_background_rectangle()
+ self.play(ShowCreation(text3))
+ self.wait(2)
+ text4 = TextMobject(r"\text{$<\overline{u, v}>$",r"\text{ = }",r"\text{$\overline{u}$",r"\text{$\cdot$}",r"\text{$v$}",r"\text{ = }",r"\text{$2 + 2i$}").shift(2*UP+3.7*LEFT).scale(0.6)
+ text4[0].set_color(BLUE)
+ text4[2].set_color(YELLOW)
+ text4[4].set_color(RED)
+ text4.add_background_rectangle()
+ line = Line(stroke_width = 1.5).scale(0.33).shift(2.2*UP+3.54*LEFT)
+ self.play(ShowCreation(text4),ShowCreation(line))
+ self.wait(2)
+ self.play(FadeOut(v1),FadeOut(v1b),FadeOut(v2),FadeOut(v2b),FadeOut(u),FadeOut(ub),FadeOut(v),FadeOut(vb))
+ v3 = self.add_vector(VECTORS[4],color = BLUE, stroke_width = 3.5)
+ uv = TextMobject(r"$\overline{u}\cdot v$",color=BLUE).shift(2.4*RIGHT+2.1*DOWN).scale(0.6)
+ self.play(ShowCreation(uv))
+ v3b = self.add_vector(VECTORS[5],color = BLUE, stroke_width = 3.5)
+ uvb = TextMobject(r"$\overline{\overline{u}\cdot v}$",color=BLUE).shift(2.4*RIGHT+2.1*UP).scale(0.6)
+ self.play(ShowCreation(uvb))
+ self.wait(2)
+ text5 = TextMobject(r"\text{$<v, u>$}",r"\text{ = }",r"\text{$\overline{v}$",r"\text{$\cdot$}",r"\text{$u$}",r"\text{ = }",r"\text{$2 + 2i$}").shift(1.5*UP+3.7*LEFT).scale(0.6)
+ text5[0].set_color(MAROON_B)
+ text5[2].set_color(RED)
+ text5[4].set_color(YELLOW)
+ text5.add_background_rectangle()
+ self.play(ShowCreation(text5))
+ self.wait(2)
+ v4 = self.add_vector(VECTORS[5],color = MAROON_B, stroke_width = 3.5)
+ vu = TextMobject(r"$\overline{v}\cdot u$",color=MAROON_B).shift(1.3*RIGHT+2.1*UP).scale(0.6)
+ self.play(ShowCreation(vu))
+ self.play(FadeOut(uvb))
+ self.wait(2)
+ text6 = TextMobject(r"\text{$<\overline{u, v}>$",r"\text{ = }",r"\text{$<v, u>$").scale(0.6).shift(0.8*UP+4.2*LEFT)
+ text6[0].set_color(BLUE)
+ text6[2].set_color(MAROON_B)
+ text6.add_background_rectangle()
+ self.play(ShowCreation(text6))
+ rect = Rectangle(height = 0.7,width = 3.5)
+ rect.surround(text6)
+ self.play(ShowCreation(rect))
+ self.wait(3)
+ self.play(FadeOut(line),FadeOut(text1),FadeOut(text2),FadeOut(text3),FadeOut(text4),FadeOut(text5),FadeOut(text6),FadeOut(v4),FadeOut(vu),FadeOut(v3),FadeOut(uv),FadeOut(rect),FadeOut(v3b))
+
+ text7 = TextMobject(r"\text{$u$}",r"\text{ = $(1 + i) > 0$}").scale(0.6).shift(3.5*UP+4.5*LEFT)
+ text7[0].set_color(YELLOW)
+ text7.add_background_rectangle()
+ self.play(ShowCreation(text7))
+ v5 = self.add_vector(VECTORS[1],color = YELLOW, stroke_width = 3.5)
+ u = TextMobject(r"$u$",color=YELLOW).shift(1.2*RIGHT+1*UP).scale(0.6)
+ self.play(ShowCreation(u))
+ self.wait(1.5)
+ text8 = TextMobject(r"\text{$<u, u>$}",r"\text{ = $(0 + 2i) > 0$ }").scale(0.6).shift(2.7*UP+4*LEFT)
+ text8[0].set_color(GREEN)
+ text8.add_background_rectangle()
+ rect1 = Rectangle(height = 0.55, width = 3.3)
+ rect1.surround(text8)
+ self.play(ShowCreation(text8),ShowCreation(rect1))
+ self.wait(2)
+ v6 = self.add_vector(VECTORS[0],color = GREEN, stroke_width = 3.5)
+ uu = TextMobject(r"$<u, u>$",color=GREEN).shift(0.8*LEFT+1.9*UP).scale(0.6)
+ self.play(ShowCreation(uu))
+ text9 = TextMobject(r"\text{$v$}",r"\text{ = $(-2 - i) < 0$}").scale(0.6).shift(1.5*UP+4.4*LEFT)
+ text9[0].set_color(RED)
+ text9.add_background_rectangle()
+ self.play(ShowCreation(text9))
+ self.wait(1.5)
+ v7 = self.add_vector(VECTORS[7],color = RED, stroke_width = 3.5)
+ v = TextMobject(r"$v$",color=RED).shift(2.2*LEFT+1*DOWN).scale(0.6)
+ self.play(ShowCreation(v))
+ self.wait(1.5)
+ text10 = TextMobject(r"\text{$<v, v>$}",r"\text{ = $(3 + 4i) > 0$ }").scale(0.6).shift(0.7*UP+4*LEFT)
+ text10[0].set_color(BLUE)
+ text10.add_background_rectangle()
+ rect2 = Rectangle(height=0.55,width=3.3)
+ rect2.surround(text10)
+ self.play(ShowCreation(text10),ShowCreation(rect2))
+ self.wait(2)
+ v8 = self.add_vector(VECTORS[8],color = BLUE, stroke_width = 3.5)
+ vv = TextMobject(r"$<v, v>$",color=BLUE).shift(2.1*RIGHT+3.8*UP).scale(0.6)
+ self.play(ShowCreation(vv))
+ self.wait(4)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Inner_Product_Example.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Inner_Product_Example.py
new file mode 100644
index 0000000..97b9696
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Inner_Product_Example.py
@@ -0,0 +1,182 @@
+from manimlib.imports import *
+from scipy import sin,cos
+class Inner_Product_Space_Example(GraphScene):
+ CONFIG = {
+ "x_min" : 0,
+ "x_max" : 5,
+ "y_min" : 0,
+ "y_max" : 6,
+ "y_tick_frequency" : 1,
+ "x_tick_frequency" : 1,
+ "axes_color":LIGHT_GRAY,
+ "x_labeled_nums" : list(range(6)),
+ "y_labeled_nums" : list(range(6))
+ }
+ def construct(self):
+ self.setup_axes(animate=True)
+ text = TextMobject(r"$f(x), g(x), h(x) \in C[0, 2]$",color=GOLD).scale(0.5).shift(3.5*UP+5.5*LEFT)
+ fx = TextMobject(r"$f(x)$ = sin(x)",color=GOLD).scale(0.5).shift(3*UP+6*LEFT)
+ gx = TextMobject(r"$g(x)$ = x",color=GOLD).scale(0.5).shift(2.5*UP+6.25*LEFT)
+ hx = TextMobject(r"$h(x)$ = 1.4",color=GOLD).scale(0.5).shift(2*UP+6.2*LEFT)
+
+ curve1 = self.get_graph(lambda x : sin(x), x_min=0,x_max=2,color=RED)
+ curve2 = self.get_graph(lambda x : x, x_min=0,x_max=2,color=DARK_BLUE)
+ curve3 = self.get_graph(lambda x : 1.4, x_min=0,x_max=2,color=GREEN)
+ text1 = TextMobject(r"$f(x)$").scale(0.5).shift(1.7*DOWN)
+
+ text2 = TextMobject(r"$g(x)$").scale(0.5).shift(0.34*DOWN)
+ text3 = TextMobject(r"$h(x)$").scale(0.5).shift(1.1*DOWN)
+
+
+ self.play(ShowCreation(text))
+ self.play(ShowCreation(curve1),ShowCreation(text1),ShowCreation(fx))
+ self.wait(1)
+ self.play(ShowCreation(curve2),ShowCreation(text2),ShowCreation(gx))
+ self.wait(1)
+ self.play(ShowCreation(curve3),ShowCreation(text3),ShowCreation(hx))
+ self.wait(2)
+ curve4 = self.get_graph(lambda x : sin(x) + x, x_min=0,x_max=2,color=YELLOW)
+ text4 = TextMobject(r"$f(x) + g(x)$").scale(0.5).shift(0.5*UP+0.5*RIGHT)
+ self.wait(1.5)
+
+ self.play(ShowCreation(curve4),ShowCreation(text4),FadeOut(curve2),FadeOut(text2),FadeOut(curve1),FadeOut(text1))
+ self.wait(1.5)
+ text5 = TextMobject(r"\text{$<f(x) + g(x), h(x)>$ = ",r"\text{$\int_{0}^{2} (f(x) + g(x))h(x)$ $dx$}",r"\text{= 4.78}").scale(0.57).shift(3.3*RIGHT+3.5*UP)
+ text5[1].set_color(ORANGE)
+ self.play(ShowCreation(text5))
+
+ curve5 = self.get_graph(lambda x : (sin(x) + x)*1.6, x_min=0,x_max=2,color=ORANGE)
+ text6 = TextMobject(r"$(f(x) + g(x))\cdot h(x)$").scale(0.5).shift(2.2*UP+0.72*RIGHT)
+ area1 = self.get_area(curve5,0,2)
+ area1.set_color(ORANGE)
+ self.wait(1)
+ self.play(FadeOut(curve4),FadeOut(text4),FadeOut(curve3),FadeOut(text3),ShowCreation(curve5),ShowCreation(text6),ShowCreation(area1))
+ self.wait(2)
+ text7 = TextMobject(r"\text{$<f(x), h(x)>$ = ",r"\text{$\int_{0}^{2} (f(x)h(x)$ $dx$}",r"\text{= 1.98}").scale(0.57).shift(4.5*RIGHT+3*UP)
+ text7[1].set_color(BLUE)
+ self.play(ShowCreation(text7))
+ self.wait(1.5)
+ curve6 = self.get_graph(lambda x : (sin(x))*1.6, x_min=0,x_max=2,color=BLUE)
+ text8 = TextMobject(r"$f(x)\cdot h(x)$").scale(0.5).shift(0.9*DOWN+0.3*RIGHT)
+ area2 = self.get_area(curve6,0,2)
+ self.play(ShowCreation(curve6),ShowCreation(text8),ShowCreation(area2))
+ self.wait(1.5)
+ text9 = TextMobject(r"\text{$<g(x), h(x)>$ = ",r"\text{$\int_{0}^{2} (g(x)h(x)$ $dx$}",r"\text{= 2.8}").scale(0.57).shift(4.5*RIGHT+2.5*UP)
+ text9[1].set_color(MAROON_B)
+ self.play(ShowCreation(text9))
+ self.wait(1.5)
+ curve7 = self.get_graph(lambda x : x*1.6, x_min=0,x_max=2,color=MAROON_B)
+ text10 = TextMobject(r"$g(x)\cdot h(x)$").scale(0.5).shift(0.3*RIGHT+0.78*UP)
+ area3 = self.get_area(curve7,0,2)
+ area3.set_color(MAROON_B)
+ self.play(ShowCreation(curve7),ShowCreation(text10),ShowCreation(area3))
+ self.wait(2.6)
+ curve8 = self.get_graph(lambda x : (sin(x))*1.6 + x*1.6, x_min=0,x_max=2,color=RED_C)
+ area4 = self.get_area(curve8,0,2)
+ area4.set_color(RED_C)
+ text11 = TextMobject(r"$f(x)h(x) + g(x)h(x)$").scale(0.5).shift(2.2*UP + 0.76*RIGHT)
+ self.play(FadeOut(curve6),FadeOut(text8),FadeOut(curve7),FadeOut(text10),FadeOut(area2),FadeOut(area3),ShowCreation(curve8),ShowCreation(area4))
+ self.wait(1)
+ self.play(Transform(text6,text11))
+ self.wait(1.7)
+ text12 = TextMobject(r"$<f(x) + g(x), h(x)>$ = $<f(x), h(x)>$ + $<g(x), h(x)>$").scale(0.465).shift(0.7*UP+4*RIGHT)
+ rect1 = Rectangle(height=0.5)
+ rect1.surround(text12)
+ self.play(ShowCreation(text12),ShowCreation(rect1))
+ self.wait(3)
+ self.play(FadeOut(text6),FadeOut(text5),FadeOut(text7),FadeOut(text9),FadeOut(text12),FadeOut(rect1),FadeOut(curve8),FadeOut(area4),FadeOut(text11),FadeOut(curve5),FadeOut(area1))
+
+ curve2.set_color(ORANGE)
+ self.play(ShowCreation(curve1),ShowCreation(text1))
+ self.wait(1)
+ self.play(ShowCreation(curve2),ShowCreation(text2))
+ self.wait(2)
+ curve9 = self.get_graph(lambda x : 2*sin(x), x_min=0,x_max=2,color=GREEN)
+ text13 = TextMobject(r"$2f(x)$").scale(0.5).shift(0.75*DOWN)
+ self.play(Transform(curve1,curve9),Transform(text1,text13))
+ self.wait(1.5)
+
+ text14 = TextMobject(r"\text{$<2f(x), g(x)>$ = ",r"\text{$\int_{0}^{2} (2f(x))g(x)$ $dx$}",r"\text{= 3.48}").scale(0.57).shift(4*RIGHT+3.5*UP)
+ text14[1].set_color(YELLOW)
+ self.play(ShowCreation(text14))
+ self.wait(2.2)
+ curve10 = self.get_graph(lambda x : 2*sin(x)*x, x_min=0,x_max=2,color=YELLOW)
+ text15 = TextMobject(r"$2f(x)\cdot g(x)$").scale(0.5).shift(0.35*RIGHT+1.03*UP)
+ area5 = self.get_area(curve10,0,2)
+ area5.set_color(YELLOW)
+ self.play(ShowCreation(area5),ShowCreation(curve10),ShowCreation(text15),FadeOut(curve1),FadeOut(text1),FadeOut(curve2),FadeOut(text2))
+ self.wait(2)
+ text16 = TextMobject(r"\text{$<f(x), g(x)>$ = ",r"\text{$\int_{0}^{2} f(x)g(x)$ $dx$}",r"\text{= 1.74}").scale(0.57).shift(3.8*RIGHT+2.9*UP)
+ text16[1].set_color(TEAL)
+ self.play(ShowCreation(text16))
+ self.wait(1.7)
+ curve11 = self.get_graph(lambda x : sin(x)*x, x_min=0,x_max=2,color=TEAL)
+ area6 = self.get_area(curve11,0,2)
+ area6.set_color(TEAL)
+ text17 = TextMobject(r"$f(x)\cdot g(x)$").scale(0.5).shift(0.4*RIGHT+0.7*DOWN)
+ self.play(ShowCreation(curve11),ShowCreation(text17),ShowCreation(area6))
+ self.wait(2)
+
+ text18 = TextMobject(r"\text{$2 <f(x), g(x)>$ = ",r"\text{$2 \int_{0}^{2} f(x)g(x)$ $dx$}",r"\text{= 3.48}").scale(0.57).shift(4*RIGHT+2.3*UP)
+ text18[1].set_color(DARK_BLUE)
+ self.play(ShowCreation(text18))
+ self.wait(2)
+ curve12 = self.get_graph(lambda x : 2*sin(x)*x, x_min=0,x_max=2,color=DARK_BLUE)
+ area7 = self.get_area(curve12,0,2)
+ area7.set_color(DARK_BLUE)
+ text19 = TextMobject(r"= $2( f(x)\cdot g(x) )$").scale(0.5).shift(1.89*RIGHT+1.03*UP)
+ self.play(ShowCreation(curve12),ShowCreation(area7),ShowCreation(text19),FadeOut(text17),FadeOut(area6),FadeOut(curve11))
+
+ self.wait(2.5)
+ text20 = TextMobject(r"$<2f(x), g(x)>$ = $2<f(x), g(x)>$").scale(0.57).shift(0.6*DOWN+4*RIGHT)
+ rect2 = Rectangle(height=0.5)
+ rect2.surround(text20)
+ self.play(ShowCreation(text20),ShowCreation(rect2))
+ self.wait(3)
+
+ self.play(FadeOut(text14),FadeOut(text15),FadeOut(text19),FadeOut(text16),FadeOut(text18),FadeOut(rect2),FadeOut(curve10),FadeOut(area5),FadeOut(curve12),FadeOut(area7),FadeOut(text20))
+ curve1 = self.get_graph(lambda x : sin(x), x_min=0,x_max=2,color=YELLOW)
+ text1 = TextMobject(r"$f(x)$").scale(0.5).shift(1.77*DOWN)
+ self.play(ShowCreation(curve1),ShowCreation(text1))
+ self.wait(1.5)
+ self.play(ShowCreation(curve2),ShowCreation(text2))
+ self.wait(1.7)
+ text21 = TextMobject(r"\text{$<f(x), g(x)>$ = ",r"\text{$\int_{0}^{2} f(x)g(x)$ $dx$}",r"\text{= 1.74}").scale(0.57).shift(3.5*RIGHT+3*UP)
+ text21[1].set_color(GREEN)
+ self.play(ShowCreation(text21))
+ self.wait(2)
+ curve13 = self.get_graph(lambda x : sin(x)*x, x_min=0,x_max=2,color=GREEN)
+ area8 = self.get_area(curve13,0,2)
+ area8.set_color(GREEN)
+ text22 = TextMobject(r"$f(x)\cdot g(x)$").scale(0.5).shift(0.32*RIGHT+0.7*DOWN)
+ self.play(ShowCreation(curve13),ShowCreation(area8),ShowCreation(text22),FadeOut(curve1),FadeOut(text1),FadeOut(curve2),FadeOut(text2))
+ self.wait(2.2)
+ curve14 = self.get_graph(lambda x : sin(x)*x, x_min=0,x_max=2,color=RED)
+ area9 = self.get_area(curve14,0,2)
+ area9.set_color(RED)
+ self.play(ShowCreation(curve14),ShowCreation(area9))
+ text23 = TextMobject(r"= $\overline{f(x)\cdot g(x)}$").scale(0.5).shift(0.7*DOWN+1.7*RIGHT)
+ self.play(ShowCreation(text23))
+ self.wait(2)
+ text24 = TextMobject(r"For all the real functions").scale(0.5).shift(2*RIGHT+2*UP)
+ text25 = TextMobject(r"$<\overline{f(x), g(x)}>$ = $<f(x), g(x)>$").scale(0.5).shift(2*RIGHT+1.4*UP)
+ rect3 = Rectangle(height=0.7)
+ rect3.surround(text25)
+ self.play(ShowCreation(text24),ShowCreation(text25),ShowCreation(rect3))
+ self.wait(3)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Inner_product.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Inner_product.py
new file mode 100644
index 0000000..e1344f7
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Inner_product.py
@@ -0,0 +1,28 @@
+from manimlib.imports import *
+import numpy as np
+class InnerProduct(Scene):
+ def construct(self):
+ big_box=Rectangle().scale(2.7)
+ box = Rectangle(height=2,width=2,color=DARK_GREY).set_fill(color=BLUE_B,opacity=350)
+ arrow1 = Arrow(color=RED).shift(1.8*LEFT+0.5*UP)
+ arrow2 = Arrow(color=RED).shift(1.8*LEFT+0.5*DOWN)
+ arrow3 = Arrow(color=GREEN).shift(1.8*RIGHT)
+ Inner = TextMobject("INNER",color=BLACK).scale(0.65).shift(0.2*UP)
+ Product = TextMobject("PRODUCT",color=BLACK).scale(0.65).shift(0.2*DOWN)
+ u = TextMobject(r"$\vec{u}$",color=YELLOW).scale(0.7).shift(2.8*LEFT+0.5*UP)
+ v = TextMobject(r"$\vec{v}$",color=YELLOW).scale(0.7).shift(2.8*LEFT+0.5*DOWN)
+ scalar = TextMobject("(Scalar)").scale(0.55).shift(3.3*RIGHT+0.4*DOWN)
+ u.v = TextMobject(r"$<\vec{u}, \vec{v}>$",color=YELLOW).scale(0.7).shift(3.3*RIGHT)
+ V = TextMobject("V").scale(0.7).shift(2*UP+3.8*RIGHT)
+ text = TextMobject(r"The Inner Product is an operation that takes $\vec{u}, \vec{v} \in$ V as inputs and gives a scalar as an output.").scale(0.55).shift(2*DOWN)
+ self.play(ShowCreation(big_box),ShowCreation(V))
+ self.play(ShowCreation(box))
+ self.play(ShowCreation(Product),ShowCreation(Inner))
+ self.wait(2)
+ self.play(ShowCreation(arrow1),ShowCreation(u))
+ self.play(ShowCreation(arrow2),ShowCreation(v))
+ self.wait(1.5)
+ self.play(ShowCreation(arrow3),ShowCreation(scalar),ShowCreation(u.v))
+ self.wait(1)
+ self.play(ShowCreation(text))
+ self.wait(10)
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Instances_of_Topological_Spaces.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Instances_of_Topological_Spaces.py
new file mode 100644
index 0000000..2b3cf14
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Instances_of_Topological_Spaces.py
@@ -0,0 +1,36 @@
+from manimlib.imports import *
+class InnerProduct(Scene):
+ def construct(self):
+
+ circle1 = Circle(color=DARK_GREY).scale(3.7)
+ circle1.set_fill(color=GOLD,opacity=350)
+ square1 = Square(color=DARK_GREY).scale(2.5)
+ square1.set_fill(color=DARK_BLUE,opacity=350)
+ square2=Square(color=DARK_GREY).scale(1.6).shift(0.2*DOWN)
+ square2.rotate(np.pi/4).set_fill(color=YELLOW,opacity=350)
+ square3 = Square(color=DARK_GREY).scale(1).shift(0.3*DOWN)
+ square3.set_fill(color=BLACK,opacity=350)
+ circle2 = Circle(color=DARK_GREY).scale(0.5).shift(0.45*DOWN)
+ circle2.set_fill(color=MAROON_A,opacity=350)
+ text1 = TextMobject("Topological Spaces",color=BLACK).scale(0.5).shift(3*UP)
+ text2 = TextMobject("Metric Spaces",color=BLACK).scale(0.5).shift(2.2*UP)
+ text3 = TextMobject("Normed",color=BLACK).scale(0.44).shift(1.4*UP)
+ text4 = TextMobject("Vector Spaces",color=BLACK).scale(0.44).shift(1.17*UP)
+ text5 = TextMobject("Inner Product",color=WHITE).scale(0.37).shift(0.5*UP)
+ text6 = TextMobject("Spaces",color=WHITE).scale(0.37).shift(0.27*UP)
+ text7 = TextMobject("Dot",color=BLACK).scale(0.37).shift(0.3*DOWN)
+ text8 = TextMobject("Product",color=BLACK).scale(0.32).shift(0.5*DOWN)
+
+
+
+
+ self.play(ShowCreation(circle1),ShowCreation(text1))
+ self.wait(1.5)
+ self.play(ShowCreation(square1),ShowCreation(text2))
+ self.wait(1.5)
+ self.play(ShowCreation(square2),ShowCreation(text3),ShowCreation(text4))
+ self.wait(1.5)
+ self.play(ShowCreation(square3),ShowCreation(text5),ShowCreation(text6))
+ self.wait(1.5)
+ self.play(ShowCreation(circle2),ShowCreation(text7),ShowCreation(text8))
+ self.wait(4)
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Interpretation_of_Norm_as_Length.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Interpretation_of_Norm_as_Length.py
new file mode 100644
index 0000000..23c568d
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Interpretation_of_Norm_as_Length.py
@@ -0,0 +1,42 @@
+from manimlib.imports import *
+import numpy as np
+class Interpretation_of_norm_as_length(GraphScene):
+ CONFIG = {
+ "x_min" : 0,
+ "x_max" : 5,
+ "y_min" : 0,
+ "y_max" : 5,
+ "y_tick_frequency" : 1,
+ "x_tick_frequency" : 1,
+ "axes_color":LIGHT_GRAY,
+ "x_axis_width": 5,
+ "y_axis_height":5,
+ "graph_origin" : ORIGIN + 2*DOWN + 2*LEFT,
+ "enclude_zero_label": False
+
+ }
+ def construct(self):
+ self.setup_axes(animate=False)
+ dot = Dot().scale(0.5)
+ self.play(ShowCreation(dot))
+ origin = TextMobject(r"(0, 0)").scale(0.5).shift(2.5*LEFT+2.2*DOWN)
+ line1 = self.get_graph(lambda x : x, x_min=0,x_max=2,color=WHITE)
+ line2 = Line().rotate(np.pi/2).shift(1*DOWN)
+ text1 = TextMobject(r"$(v_1, 0)$").scale(0.5).shift(2.2*DOWN+0.2*RIGHT)
+ text2 = TextMobject(r"$(0, v_2)$").scale(0.5).shift(2.5*LEFT)
+ text3 = TextMobject(r"$(v_1, v_2)$").scale(0.5).shift(0.5*RIGHT)
+ text4 = TextMobject(r"$| v_1 |$",color=RED_B).scale(0.5).shift(1*LEFT+2.3*DOWN)
+ text5 = TextMobject(r"$| v_2 |$",color=RED_B).scale(0.5).shift(0.3*RIGHT+1*DOWN)
+ text6 = TextMobject(r"$\sqrt{{v_1}^2 + {v_2}^2}$",color=RED_B).scale(0.5).rotate(np.pi/4).shift(1.3*LEFT+1*DOWN)
+ line3 = Line(color=YELLOW).shift(1*LEFT+2*DOWN)
+ self.play(ShowCreation(line1),ShowCreation(line2),ShowCreation(text1),ShowCreation(text2),ShowCreation(text3),ShowCreation(origin))
+ self.wait(1.5)
+ self.play(ShowCreation(line3),ShowCreation(text4))
+ self.wait(1.5)
+ line2 = Line(color=YELLOW).rotate(np.pi/2).shift(1*DOWN)
+ self.play(ShowCreation(line2),ShowCreation(text5))
+ self.wait(1.5)
+ line1 = self.get_graph(lambda x : x, x_min=0,x_max=2,color=YELLOW)
+ self.play(ShowCreation(text6),ShowCreation(line1))
+ self.wait(4)
+ \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Linearity_of_Inner_Product.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Linearity_of_Inner_Product.py
new file mode 100644
index 0000000..e1344f7
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Linearity_of_Inner_Product.py
@@ -0,0 +1,28 @@
+from manimlib.imports import *
+import numpy as np
+class InnerProduct(Scene):
+ def construct(self):
+ big_box=Rectangle().scale(2.7)
+ box = Rectangle(height=2,width=2,color=DARK_GREY).set_fill(color=BLUE_B,opacity=350)
+ arrow1 = Arrow(color=RED).shift(1.8*LEFT+0.5*UP)
+ arrow2 = Arrow(color=RED).shift(1.8*LEFT+0.5*DOWN)
+ arrow3 = Arrow(color=GREEN).shift(1.8*RIGHT)
+ Inner = TextMobject("INNER",color=BLACK).scale(0.65).shift(0.2*UP)
+ Product = TextMobject("PRODUCT",color=BLACK).scale(0.65).shift(0.2*DOWN)
+ u = TextMobject(r"$\vec{u}$",color=YELLOW).scale(0.7).shift(2.8*LEFT+0.5*UP)
+ v = TextMobject(r"$\vec{v}$",color=YELLOW).scale(0.7).shift(2.8*LEFT+0.5*DOWN)
+ scalar = TextMobject("(Scalar)").scale(0.55).shift(3.3*RIGHT+0.4*DOWN)
+ u.v = TextMobject(r"$<\vec{u}, \vec{v}>$",color=YELLOW).scale(0.7).shift(3.3*RIGHT)
+ V = TextMobject("V").scale(0.7).shift(2*UP+3.8*RIGHT)
+ text = TextMobject(r"The Inner Product is an operation that takes $\vec{u}, \vec{v} \in$ V as inputs and gives a scalar as an output.").scale(0.55).shift(2*DOWN)
+ self.play(ShowCreation(big_box),ShowCreation(V))
+ self.play(ShowCreation(box))
+ self.play(ShowCreation(Product),ShowCreation(Inner))
+ self.wait(2)
+ self.play(ShowCreation(arrow1),ShowCreation(u))
+ self.play(ShowCreation(arrow2),ShowCreation(v))
+ self.wait(1.5)
+ self.play(ShowCreation(arrow3),ShowCreation(scalar),ShowCreation(u.v))
+ self.wait(1)
+ self.play(ShowCreation(text))
+ self.wait(10)
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Projection-in-3D-space.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Projection-in-3D-space.py
new file mode 100644
index 0000000..e99202f
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Projection-in-3D-space.py
@@ -0,0 +1,31 @@
+from manimlib.imports import *
+class ThreeDSpace(ThreeDScene):
+
+ def construct(self):
+ axes = ThreeDAxes()
+ axes.set_stroke(width=1,color=GOLD)
+ self.add(axes)
+ self.set_camera_orientation(phi = 70*DEGREES,theta =110*DEGREES)
+ line1 = Line(color = YELLOW,opacity=350,start = ORIGIN,end = [0.5,2,2])
+ self.play(ShowCreation(line1))
+ self.wait(1)
+ line2 = Line(color = BLUE,opacity=350,start = ORIGIN,end = [2,2,-1])
+ self.play(ShowCreation(line2))
+ self.wait(1)
+ line3 = Line(opacity=350,start=axes.c2p(0.5,2,2) ,end=axes.c2p(0.5,1.14,-0.17))
+ self.play(ShowCreation(line3))
+ self.wait(1)
+ line4 = Line(color=RED,opacity=350,start = ORIGIN,end=[0.5,1.14,-0.145])
+ self.play(ShowCreation(line4))
+ self.wait(2)
+ text1 = TextMobject(r"\text{Projection on }",r"\text{$\vec{v}$}",r"\text{ onto }",r"\text{$\vec{u}$}",r"\text{ = }",r"\text{$ |\vec{v}|cos\theta$,}").scale(0.6).shift(4*LEFT+3.5*UP)
+ text1[1].set_color(YELLOW)
+ text1[3].set_color(BLUE)
+ text1[5].set_color(RED)
+ text2 = TextMobject(r"\text{where $\theta$ is the angle between the vectors.}").scale(0.6).shift(4*LEFT+3*UP)
+ self.add_fixed_in_frame_mobjects(text1)
+ self.add_fixed_in_frame_mobjects(text2)
+ self.play(ShowCreation(text1),ShowCreation(text2))
+ self.wait(3)
+
+
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Vector_Projection.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Vector_Projection.py
new file mode 100644
index 0000000..b1724c1
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/Vector_Projection.py
@@ -0,0 +1,43 @@
+from manimlib.imports import *
+VECTORS = [[3,1],
+ [1,3],
+ [1.96,0.65]]
+class Projection(LinearTransformationScene):
+ CONFIG = {
+ "include_background_plane": True,
+ "include_foreground_plane": False,
+ "show_coordinates": False,
+ "show_basis_vectors": False,
+ "basis_vector_stroke_width": 3,
+ }
+ def construct(self):
+ v1 = self.add_vector(VECTORS[0],color = YELLOW, stroke_width = 3.5)
+ u = TextMobject(r"$\vec{u}$",color=YELLOW).scale(0.65).shift(3.2*RIGHT,1*UP)
+ self.play(ShowCreation(u))
+ self.wait(0.7)
+ v2 = self.add_vector(VECTORS[1],color = RED, stroke_width = 3.5)
+ v = TextMobject(r"$\vec{v}$",color=RED).scale(0.65).shift(1.2*RIGHT,3*UP)
+ self.play(ShowCreation(v))
+ self.wait(0.7)
+ angle = Arc(radius=0.6).scale(0.5)
+ theta = TextMobject(r"$\theta$").scale(0.65).shift(0.5*UP+0.5*RIGHT).rotate(np.pi/6)
+ self.play(ShowCreation(angle),ShowCreation(theta))
+ self.wait(1)
+ line1 = Line().scale(1.25).rotate(np.pi/(2)).shift(1.8*UP+1.47*RIGHT)
+ line1.rotate(np.pi/8)
+ self.play(ShowCreation(line1))
+ self.wait(1.3)
+ v3 = self.add_vector(VECTORS[2],color = BLUE, stroke_width = 3.5)
+ text1 = TextMobject(r"$\vec{v}$cos$\theta$",color=BLUE).scale(0.55).shift(1.25*RIGHT+0.26*UP).rotate(np.pi/9)
+ self.play(ShowCreation(text1))
+ self.wait(2)
+ text2 = TextMobject(r"\text{Projection on }",r"\text{$\vec{v}$}",r"\text{ onto }",r"\text{$\vec{u}$}",r"\text{ = }",r"\text{$ |\vec{v}|cos\theta$}").scale(0.6).shift(4*RIGHT+3*UP)
+ text2[1].set_color(RED)
+ text2[3].set_color(YELLOW)
+ text2[5].set_color(BLUE)
+ text2.add_background_rectangle()
+ self.play(ShowCreation(text2))
+ self.wait(4)
+
+
+ \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Conjugate_Symmetry_and_Positivity_of_Inner_Product.mp4 b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Conjugate_Symmetry_and_Positivity_of_Inner_Product.mp4
new file mode 100644
index 0000000..6b44c55
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Conjugate_Symmetry_and_Positivity_of_Inner_Product.mp4
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/InnerProduct.gif b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/InnerProduct.gif
new file mode 100644
index 0000000..55b6546
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/InnerProduct.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Inner_Product_Space_Example.mp4 b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Inner_Product_Space_Example.mp4
new file mode 100644
index 0000000..edecd88
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Inner_Product_Space_Example.mp4
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Instances_of_Topological_Spaces.gif b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Instances_of_Topological_Spaces.gif
new file mode 100644
index 0000000..82d5c75
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Instances_of_Topological_Spaces.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Interpretation_of_norm_as_length.gif b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Interpretation_of_norm_as_length.gif
new file mode 100644
index 0000000..9eda7c5
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Interpretation_of_norm_as_length.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Linerity_of_Inner_Product.mp4 b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Linerity_of_Inner_Product.mp4
new file mode 100644
index 0000000..a1e7b29
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Linerity_of_Inner_Product.mp4
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Projection.gif b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Projection.gif
new file mode 100644
index 0000000..c32fd6b
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Projection.gif
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Projection_of_vectors_in-3D_plane.mp4 b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Projection_of_vectors_in-3D_plane.mp4
new file mode 100644
index 0000000..bdca5f9
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Inner-Product_Spaces/gifs2/Projection_of_vectors_in-3D_plane.mp4
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Basis.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Basis.py
new file mode 100644
index 0000000..6d2edc8
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Basis.py
@@ -0,0 +1,174 @@
+from manimlib.imports import *
+
+
+VECTORS = [[1, 2],
+ [-4, 2],
+ [-3, -3],
+ [3,-2],
+ [3,3],
+ [-2,1],
+ [-1,-3]]
+
+class Scene1(LinearTransformationScene):
+
+ CONFIG = {
+ "include_background_plane": True,
+ "include_foreground_plane": False,
+ "show_coordinates": False,
+ "show_basis_vectors": True,
+ "basis_vector_stroke_width": 3,
+
+ }
+ def construct(self):
+ self.setup()
+ ihat, jhat = self.get_basis_vectors()
+ labels = self.get_basis_vector_labels()
+ self.add(ihat, jhat)
+ self.add(*labels)
+
+ self.show_vector_as_basis_sum()
+ self.wait(2)
+
+ def show_vector_as_basis_sum(self):
+ text1 = TextMobject(r"Vector Space $\mathbb{R}^2$}").scale(0.8).shift(3*UP)
+ text1.add_background_rectangle()
+ self.play(ShowCreation(text1))
+ text2 = TextMobject(r"$\mathbb{R}^2$",color=BLUE_E).scale(0.8).shift(6.5*LEFT+3.5*UP)
+ text3 = TextMobject(r"\text{Basis Vectors:}",r"\text{$\hat{i}$}",r"\text{,}",r"\text{$\hat{j}$}").scale(0.7).shift(2*UP+2.5*RIGHT)
+ text3[1].set_color(GREEN_C)
+ text3[3].set_color(RED_C)
+
+ self.wait(2)
+ self.play(Transform(text1,text2))
+ self.wait(1)
+ self.play(ShowCreation(text3))
+ self.wait(1.7)
+ self.play(FadeOut(text3))
+
+ for i in range(len(VECTORS)):
+ v = self.add_vector(VECTORS[i], stroke_width = 3,color=YELLOW_D)
+
+ linei = Line(start = ORIGIN, end = VECTORS[i][0]*RIGHT)
+ linei.set_color(GREEN_C)
+ linej = Line(start = linei.get_end(),
+ end = linei.get_end() + VECTORS[i][1]*UP)
+ linej.set_color(RED_C)
+ self.play(ShowCreation(linei))
+ self.play(ShowCreation(linej))
+ vlabel = self.get_vector_label(v, str(VECTORS[i][0]) +
+ r"\imath" + "+" +
+ str(VECTORS[i][1]) +
+ r"\jmath", at_tip = True)
+ self.play(ShowCreation(vlabel))
+
+ self.play(FadeOut(linei),FadeOut(linej))
+ self.wait(1)
+ dot = Dot(v.get_end(), fill_color = v.get_stroke_color())
+ self.play(ShowCreation(dot),FadeOut(v),FadeOut(vlabel))
+ self.wait(0.3)
+
+class Scene2(LinearTransformationScene):
+ CONFIG = {
+ "num_vectors" : 16,
+ "start_color" : GREY,
+ "end_color" : YELLOW_D,
+ "include_background_plane": True,
+ "include_foreground_plane": False,
+ }
+
+ def get_vectors(self):
+ return [
+ Vector([x, y], stroke_width = 3.5)
+ for x in np.arange(-int(FRAME_X_RADIUS), int(FRAME_X_RADIUS)+0.5, 0.5)
+ for y in np.arange(-int(FRAME_Y_RADIUS), int(FRAME_Y_RADIUS)+0.5, 0.5)
+ ]
+
+ def lock_in_faded_grid(self, dimness=0.7, axes_dimness=0.5):
+ plane = self.add_plane()
+ axes = plane.get_axes()
+ plane.fade(dimness)
+ axes.set_color(WHITE)
+ axes.fade(axes_dimness)
+ self.add(axes)
+
+ def construct(self):
+ self.lock_in_faded_grid()
+
+ vectors = self.get_vectors()
+ colors = Color(self.start_color).range_to(
+ self.end_color, len(vectors)
+ )
+ for vect, color in zip(vectors, colors):
+ vect.set_color(color)
+
+ vector_group = VGroup(*vectors)
+ self.play(
+ ShowCreation(
+ vector_group,
+ run_time = 3
+ )
+ )
+
+ self.wait(1)
+
+ vectors.sort(key=lambda v: v.get_length())
+ def v_to_dot(vector):
+ return Dot(vector.get_end(), fill_color = vector.get_stroke_color())
+ self.wait()
+ rate_functions = [
+ squish_rate_func(smooth, float(x)/(len(vectors)+2), 1)
+ for x in range(len(vectors))
+ ]
+ self.play(*[
+ Transform(v, v_to_dot(v), rate_func = rf, run_time = 3)
+ for v, rf in zip(vectors, rate_functions)
+ ])
+ self.wait(2)
+ self.play_final_animation(vectors, rate_functions)
+ self.wait(2)
+
+ text1 = TextMobject(" Basis is the minimum information required to ").shift(3.1*UP).scale(0.8)
+ text2 = TextMobject("generate the whole space.").scale(0.8).shift(2.6*UP)
+
+ text1.add_background_rectangle()
+ text2.add_background_rectangle()
+
+
+
+ self.play(ShowCreation(text1),ShowCreation(text2))
+
+ self.play(ShowCreation(self.get_basis_vectors()))
+ self.wait(3)
+
+ def play_final_animation(self, vectors, rate_functions):
+
+ h_line = Line(
+ FRAME_X_RADIUS*RIGHT, FRAME_X_RADIUS*LEFT,
+ stroke_width = 0.5,
+ color = BLUE_E
+ )
+ v_line = Line(
+ FRAME_Y_RADIUS*UP, FRAME_Y_RADIUS*DOWN,
+ stroke_width = 0.5,
+ color = BLUE_E
+ )
+ line_pairs = [
+ VGroup(h_line.copy().shift(y), v_line.copy().shift(x))
+ for v in vectors
+ for x, y, z in [v.get_center()]
+ ]
+ plane = NumberPlane()
+
+ self.play(
+ ShowCreation(plane),
+ *[
+ Transform(v, p, rate_func = rf)
+ for v, p, rf in zip(vectors, line_pairs, rate_functions)
+ ]
+ )
+ self.remove(*vectors)
+
+
+
+
+ \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Intersection_of_Subspaces.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Intersection_of_Subspaces.py
new file mode 100644
index 0000000..ec82daa
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Intersection_of_Subspaces.py
@@ -0,0 +1,52 @@
+from manimlib.imports import *
+class ThreeDSpace(ThreeDScene):
+
+
+ def construct(self):
+ axes = ThreeDAxes()
+ self.set_camera_orientation(phi = 80*DEGREES,theta =110*DEGREES)
+ self.begin_ambient_camera_rotation(rate=0.09)
+
+
+
+
+ cube = Cube(stroke_width=5,color=WHITE).shift([1.5,1.5,1.5]).scale(1.5)
+ cube.set_fill(TEAL)
+
+ cube.set_opacity(0.4)
+
+
+ plane1 = Polygon([0,0,3],[3,0,3],[3,3,0],[0,3,0])
+ plane1.set_opacity(0.65)
+ plane1.set_fill(PURPLE)
+ plane1.set_color(PURPLE)
+
+
+ plane2 = Polygon([0,3,3],[3,3,3],[3,0,0],[0,0,0])
+ plane2.set_opacity(0.7)
+ plane2.set_fill(RED)
+ plane2.set_color(RED)
+ line = Line(color=YELLOW,set_opacity=100).shift([1.5,1.5,1.5]).scale(1.5)
+
+ vgroup = VGroup(plane1,plane2,line,cube)
+ vgroup.shift([-1,-1,-1])
+
+ dot = Dot(color=BLACK).shift([0.5,0.5,0.5]).scale(1)
+ text = TextMobject(r"\text{The}",r"\text{line}",r"\text{representing the intersection of the two planes is a Subspace.}",opacity = 0.6).scale(0.7).shift(3*UP)
+ text[1].set_color(YELLOW)
+ self.add_fixed_in_frame_mobjects(text)
+ self.play(ShowCreation(text))
+
+
+ self.play(ShowCreation(cube))
+ self.play(ShowCreation(plane1))
+ self.play(ShowCreation(plane2))
+
+ self.play(ShowCreation(line),ShowCreation(dot))
+
+
+ self.wait(15)
+
+
+
+ \ No newline at end of file
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Subspace_Example.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Subspace_Example.py
deleted file mode 100644
index ada173e..0000000
--- a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Subspace_Example.py
+++ /dev/null
@@ -1,82 +0,0 @@
-from manimlib.imports import *
-class Subspace_Example(Scene):
- def construct(self):
- sq = Square(side = 2, color=BLACK).shift(2*LEFT)
- sq.set_fill(color=RED,opacity=350)
- line1=Line(color=BLACK).shift(2*LEFT)
- line1.rotate(np.pi/2)
- line2=Line(color=BLACK).shift(2.5*LEFT+0.5*UP)
- line2.scale(0.5)
- line3=Line(color=BLACK).shift(+1.5*LEFT)
- line3.scale(0.5)
- a1=TextMobject(r"$a_1$",color=BLACK).scale(0.5).shift(3.4*LEFT+0.7*UP)
- a2=TextMobject(r"$a_2$",color=BLACK).scale(0.5).shift(3.4*LEFT+0.3*DOWN)
- a3=TextMobject(r"$a_3$",color=BLACK).scale(0.5).shift(0.7*LEFT+0.5*DOWN)
- a4=TextMobject(r"$a_4$",color=BLACK).scale(0.5).shift(0.7*LEFT+0.5*UP)
- big_rect=Rectangle().scale(3).shift(0.5*DOWN)
- big_rect.set_fill(color=GREY,opacity=350)
- vec_space=TextMobject("$Vector Space$").scale(0.77).shift(4.5*RIGHT+3.5*UP)
- sub=TextMobject(r"$Subspace$",color=BLACK).scale(0.77).shift(3.8*RIGHT+2*UP)
- self.play(ShowCreation(vec_space))
- self.play(ShowCreation(big_rect),ShowCreation(sub))
- self.play(ShowCreation(sq),ShowCreation(line1),ShowCreation(line2),ShowCreation(line3),ShowCreation(a1),ShowCreation(a2),ShowCreation(a3),ShowCreation(a4))
- rec = Rectangle(color=BLACK).scale(0.5).shift(1*RIGHT)
- rec.rotate(np.pi/2)
- rec.set_fill(color=BLUE,opacity=350)
- line4=Line(color=BLACK).shift(1*RIGHT).rotate(np.pi/2)
- line5=Line(color=BLACK).scale(0.25).shift(0.75*RIGHT)
- line6=Line(color=BLACK).scale(0.25).shift(0.5*DOWN+1.25*RIGHT)
- b1=TextMobject(r"$b_1$",color=BLACK).scale(0.5).shift(0.3*RIGHT+0.5*UP)
- b2=TextMobject(r"$b_2$",color=BLACK).scale(0.5).shift(0.3*RIGHT+0.5*DOWN)
- b3=TextMobject(r"$b_3$",color=BLACK).scale(0.5).shift(1.67*RIGHT+0.8*DOWN)
- b4=TextMobject(r"$b_4$",color=BLACK).scale(0.5).shift(1.67*RIGHT+0.5*UP)
- self.play(ShowCreation(rec),ShowCreation(line4),ShowCreation(line5),ShowCreation(line6),ShowCreation(b1),ShowCreation(b2),ShowCreation(b3),ShowCreation(b4))
- self.wait(1)
- text1=TextMobject(r"$a_1 + a_2 = a_3 + a_4$",color=BLACK).scale(0.5).shift(2*LEFT+1.5*DOWN)
- text2=TextMobject(r"$b_1 + b_2 = b_3 + b_4$",color=BLACK).scale(0.5).shift(1.5*RIGHT+1.5*DOWN)
- self.play(ShowCreation(text1),ShowCreation(text2))
- self.wait(3)
- self.play(FadeOut(text1),FadeOut(text2))
- rec.shift(3*LEFT+2.01*DOWN)
- line4.shift(3*LEFT+2*DOWN)
- line5.shift(3*LEFT+2*DOWN)
- line6.shift(3*LEFT+2*DOWN)
- b1.shift(3.1*LEFT+2.1*DOWN)
- b2.shift(3.1*LEFT+2.1*DOWN)
- b3.shift(2.9*LEFT+2*DOWN)
- b4.shift(2.9*LEFT+2.3*DOWN)
- self.play(ShowCreation(rec),ShowCreation(line4),ShowCreation(line5),ShowCreation(line6),ShowCreation(b1),ShowCreation(b2),ShowCreation(b3),ShowCreation(b4))
- self.wait(2)
-
- text3=TextMobject(r"$(a_1 + a_2) + (b_1 + b_2) = (a_3 + a_4) + (b_3 + b_4)$",color=BLACK).scale(0.5).shift(2.5*RIGHT+0.5*DOWN)
- text3=TextMobject(r"$(a_1 + a_2) + (b_1 + b_2) = (a_3 + a_4) + (b_3 + b_4)$",color=BLACK).scale(0.5).shift(2.5*RIGHT+0.5*DOWN)
- text4=TextMobject("Vector Addition",color=BLACK).scale(0.8).shift(2.5*RIGHT+0.5*UP)
- self.play(ShowCreation(text3),ShowCreation(text4))
- self.wait(3)
- rec.set_fill(color=GREY,opacity=350)
- self.play(FadeOut(text3),FadeOut(text4),FadeOut(line4),FadeOut(line5),FadeOut(line6),FadeOut(rec),FadeOut(b4),FadeOut(b3),FadeOut(b2),FadeOut(b1))
- sq1=Square(color=BLACK).scale(0.5).shift(1.5*LEFT+1.5*UP)
- sq1.set_fill(color=RED,opacity=350)
- sq2=Square(color=BLACK).scale(0.5).shift(1.5*LEFT+1.5*DOWN)
- sq2.set_fill(color=RED,opacity=350)
- rec1=Rectangle(height=0.5,width=1,color=BLACK).shift(2.5*LEFT+1.2*UP)
- rec1.set_fill(color=RED,opacity=350)
- rec2=Rectangle(height=1.5,width=1,color=BLACK)
- rec2.set_fill(color=RED,opacity=350).shift(2.5*LEFT+1.5*DOWN)
- self.play(ShowCreation(sq1),ShowCreation(sq2),ShowCreation(rec1),ShowCreation(rec2))
- a=TextMobject(r"$a_1$",color=BLACK).scale(0.5).shift(3.4*LEFT+1.2*UP)
- b=TextMobject(r"$a_2$",color=BLACK).scale(0.5).shift(3.4*LEFT+1.4*DOWN)
- c=TextMobject(r"$a_3$",color=BLACK).scale(0.5).shift(0.7*LEFT+1.4*DOWN)
- d=TextMobject(r"$a_4$",color=BLACK).scale(0.5).shift(0.7*LEFT+1.4*UP)
- self.play(ShowCreation(a),ShowCreation(b),ShowCreation(c),ShowCreation(d))
- self.wait(2.3)
- text4=TextMobject("Scalar Multiplication",color=BLACK).scale(0.8).shift(2.5*RIGHT+0.5*UP)
- text5=TextMobject(r"$\implies 2(a_1 + a_2) = 2(a_3 + a_4)$",color=BLACK).scale(0.5).shift(2*RIGHT+0.5*DOWN)
- text6=TextMobject(r"$(a_1 + a_1) + (a_2 + a_2) = (a_3 + a_3) + (a_4 +a_4)$",color=BLACK).scale(0.5).shift(2.5*RIGHT)
- self.play(ShowCreation(text4),ShowCreation(text5),ShowCreation(text6))
- self.wait(3)
-
-
-
-
-
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Subspace_Non_Example.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Subspace_Non_Example.py
new file mode 100644
index 0000000..115a722
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/Subspace_Non_Example.py
@@ -0,0 +1,25 @@
+from manimlib.imports import *
+class ThreeDSpace(ThreeDScene):
+
+
+ def construct(self):
+ axes = ThreeDAxes()
+ self.add(axes)
+ self.set_camera_orientation(phi = 80*DEGREES,theta =110*DEGREES)
+ self.begin_ambient_camera_rotation(rate=0.09)
+ plane1 = Polygon([-1.5,1.5,-1.5],[1.5,1.5,-1.5],[1.5,-1.5,1.5],[-1.5,-1.5,1.5])
+ plane1.set_opacity(0.65)
+ plane1.set_fill(GREEN)
+ plane1.set_color(GREEN)
+
+
+ plane2 = Polygon([-1.5,1.5,1.5],[1.5,1.5,1.5],[1.5,-1.5,-1.5],[-1.5,-1.5,-1.5])
+ plane2.set_opacity(0.7)
+ plane2.set_fill(MAROON_A)
+ plane2.set_color(MAROON_A)
+ line = Line(color=YELLOW,set_opacity=100,start=[1.5,1.2,1.2],end=[-1.5,1.2,1.2])
+
+
+ self.play(ShowCreation(plane1),ShowCreation(plane2),ShowCreation(line))
+ self.wait(10)
+
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Basis_of_a_Subspace.mp4 b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Basis_of_a_Subspace.mp4
new file mode 100644
index 0000000..d384f80
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Basis_of_a_Subspace.mp4
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Intersection_of_Subspaces.mp4 b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Intersection_of_Subspaces.mp4
new file mode 100644
index 0000000..d43bfbe
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Intersection_of_Subspaces.mp4
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Subspace_Example.gif b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Subspace_Example.gif
deleted file mode 100644
index 32b02be..0000000
--- a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Subspace_Example.gif
+++ /dev/null
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Subspace_Non_Example.mp4 b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Subspace_Non_Example.mp4
new file mode 100644
index 0000000..390f4cf
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Subspaces/gifs/Subspace_Non_Example.mp4
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/Vector_Addition_and_Scalar_Multiplication.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/Vector_Addition_and_Scalar_Multiplication.py
new file mode 100644
index 0000000..12c9bce
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/Vector_Addition_and_Scalar_Multiplication.py
@@ -0,0 +1,177 @@
+from manimlib.imports import *
+VECTORS = [[1, 2],
+ [1, 1],
+ [2, 2],
+ [3, 4]]
+class Scene1(LinearTransformationScene):
+ CONFIG = {
+ "include_background_plane": True,
+ "include_foreground_plane": False,
+ "show_coordinates": True,
+ "show_basis_vectors": False,
+ "basis_vector_stroke_width": 3,
+ }
+ def construct(self):
+ self.write_stuff()
+ v1 = self.add_vector(VECTORS[0],color = YELLOW, stroke_width = 3.5)
+ line1 = Line(start = ORIGIN, end = VECTORS[0][0]*RIGHT)
+ line1.set_color(RED_B)
+ line2 = Line(start = line1.get_end(), end = line1.get_end() + VECTORS[0][1]*UP)
+ line2.set_color(GREEN_D)
+ self.play(ShowCreation(line1))
+ self.play(ShowCreation(line2))
+ self.wait(0.5)
+ text1 = TextMobject("(1, 2)",color=YELLOW).scale(0.6).shift(2*UP + 1.5*RIGHT)
+ self.play(ShowCreation(text1))
+ text2 = TextMobject(r"$\vec{a}$",color = YELLOW).scale(0.8).shift(2*UP + 1.2*RIGHT)
+ text3 = TextMobject(r"\text{$\vec{a}$}",r"\text{=}",r"\text{(1, 2)}").scale(0.7).shift(5.1*LEFT + 2.5*UP)
+ text3[0].set_color(YELLOW)
+ text3[2].set_color(YELLOW)
+ self.wait(1)
+ self.play(Transform(text1,text2),FadeOut(line1),FadeOut(line2))
+ self.wait(0.5)
+ self.play(ShowCreation(text3))
+ self.wait(1)
+
+
+ v2 = self.add_vector(VECTORS[1],color = BLUE, stroke_width = 3.5)
+ line3 = Line(start = ORIGIN, end = VECTORS[1][0]*RIGHT)
+ line3.set_color(RED_B)
+ line4 = Line(start = line3.get_end(), end = line3.get_end() + VECTORS[1][1]*UP)
+ line4.set_color(GREEN_D)
+ self.play(ShowCreation(line3))
+ self.play(ShowCreation(line4))
+ self.wait(0.5)
+ text4 = TextMobject("(2, 2)",color=BLUE).scale(0.6).shift(1*UP + 1.5*RIGHT)
+ self.play(ShowCreation(text4))
+ text5 = TextMobject(r"$\vec{b}$",color = BLUE).scale(0.8).shift(1*UP + 1.2*RIGHT)
+ text6 = TextMobject(r"\text{$\vec{b}$}",r"\text{=}",r"\text{(1, 1)}").scale(0.7).shift(5.1*LEFT + 1.8*UP)
+ text6[0].set_color(BLUE)
+ text6[2].set_color(BLUE)
+ self.wait(1)
+ self.play(Transform(text4,text5),FadeOut(line3),FadeOut(line4))
+ self.wait(0.5)
+ self.play(ShowCreation(text6))
+ self.wait(2)
+
+
+
+ text7 = TextMobject(r"\text{Scaling}",r"\text{ $\vec{b}$ }",r"\text{by 2 units}",color = GOLD).scale(0.7).shift(2.8*UP+4*RIGHT)
+ text7[1].set_color(BLUE)
+ self.play(ShowCreation(text7))
+ self.play(FadeOut(text4))
+ v3 = self.add_vector(VECTORS[2],color = BLUE, stroke_width = 3.5)
+ line7 = Line(start = ORIGIN, end = VECTORS[2][0]*RIGHT)
+ line7.set_color(RED_B)
+ line8 = Line(start = line7.get_end(), end = line7.get_end() + VECTORS[2][1]*UP)
+ line8.set_color(GREEN_D)
+ self.play(FadeOut(v2))
+ self.play(ShowCreation(line7))
+ self.play(ShowCreation(line8))
+
+
+ self.wait(0.5)
+
+ text8 = TextMobject("(2, 2)",color=BLUE).scale(0.6).shift(2.5*RIGHT + 2*UP)
+ text9 = TextMobject(r"$2\vec{b}$",color = BLUE).scale(0.8).shift(2*UP + 2.3*RIGHT)
+ self.play(ShowCreation(text8))
+ self.wait(1)
+ self.play(Transform(text8,text9),FadeOut(line7),FadeOut(line8))
+ self.wait(1)
+ text10 = TextMobject(r"\text{$2\vec{b}$}",r"\text{=}",r"\text{(2, 2)}").scale(0.7).shift(5.1*LEFT + 1.8*UP)
+ text10[0].set_color(BLUE)
+ text10[2].set_color(BLUE)
+ self.play(Transform(text6,text10))
+ self.wait(1)
+ self.play(FadeOut(text7))
+ self.wait(1.5)
+
+
+
+ text11 = TextMobject(r"Addition of vectors",color = GOLD).scale(0.7).shift(2.8*UP+5*RIGHT)
+ self.play(ShowCreation(text11))
+ v1.move_to(3*UP+2.5*RIGHT)
+ self.play(ShowCreation(v1),FadeOut(text8),FadeOut(text1))
+ v4 = self.add_vector(VECTORS[3],color = ORANGE, stroke_width = 3.5)
+ line7 = Line(start = ORIGIN, end = VECTORS[3][0]*RIGHT)
+ line7.set_color(RED_B)
+ line8 = Line(start = line7.get_end(), end = line7.get_end() + VECTORS[3][1]*UP)
+ line8.set_color(GREEN_D)
+ self.play(ShowCreation(line7))
+ self.play(ShowCreation(line8))
+ text12 = TextMobject("(3, 4)",color=ORANGE).scale(0.6).shift(3.5*RIGHT + 3.8*UP)
+ text13 = TextMobject(r"$\vec{c}$",color = ORANGE).scale(0.8).shift(3.7*UP + 3.3*RIGHT)
+ self.play(ShowCreation(text12))
+ self.wait(1)
+ self.play(Transform(text12,text13),FadeOut(line7),FadeOut(line8))
+ self.wait(1)
+ add = TextMobject("+").scale(0.8).shift(6.2*LEFT + 1.8*UP)
+ line_1= Line().shift(1.5*UP+5.1*LEFT).scale(1.5)
+ line_2= Line().shift(0.8*UP+5.1*LEFT).scale(1.5)
+
+ text14=TextMobject(r"\text{$\vec{c}$}",r"\text{=}",r"\text{$\vec{a}$}",r"\text{+}",r"\text{$2\vec{b}$}",r"\text{=}",r"\text{(3, 4)}").scale(0.7).shift(1.2*UP+5.1*LEFT)
+ text14[0].set_color(ORANGE)
+ text14[2].set_color(YELLOW)
+ text14[4].set_color(BLUE)
+ text14[6].set_color(ORANGE)
+
+
+ self.play(ShowCreation(add),ShowCreation(line_1))
+ self.play(ShowCreation(text14),ShowCreation(line_2))
+ self.wait(3)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ def write_stuff(self):
+ self.text = []
+ text = self.text
+
+ text.append(TexMobject(r"\text{Consider the Vector Space }",
+ r"{\mathbb{R}^2}"))
+ self.add_title(text[0], 0.7, animate = True)
+ text.append(TexMobject(r"{\mathbb{R}^2}",
+ tex_to_color_map = {r"{\mathbb{R}^2}": BLUE_E}))
+ text[1].shift(6.5*LEFT+3.5*UP)
+ self.wait(0.5)
+ self.play(Transform(text[0], text[1]))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/Vector_Addition_and_Scaling.py b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/Vector_Addition_and_Scaling.py
deleted file mode 100644
index 70af123..0000000
--- a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/Vector_Addition_and_Scaling.py
+++ /dev/null
@@ -1,137 +0,0 @@
-from manimlib.imports import *
-import numpy as np
-
-class vectorspace(GraphScene):
- CONFIG={
- "x_min": -7,
- "x_max": 7,
- "y_min": -7,
- "y_max": 7,
- "graph_origin": ORIGIN,
- "x_axis_label":"$X$",
- "y_axis_label":"$Y$",
- "x_labeled_nums": list(np.arange(-7, 8,1)),
- "y_labeled_nums": list(np.arange(-7, 8,1)),
- "x_axis_width": 8,
- "y_axis_height": 7,
- "x_tick_frequency":1,
- "axes_color": GREY,
- "area_opacity": 3,
- "num_rects": 10,
- }
- def construct(self):
- XD = self.x_axis_width/(self.x_max- self.x_min)
- YD = self.y_axis_height/(self.y_max- self.y_min)
- a1=1*XD*RIGHT+2*YD*UP
- a2=1*XD*RIGHT+1*YD*UP
- vec1=Vector(direction=a1).set_color(RED_E)
- vec1.shift(self.graph_origin)
- vec2=Vector(direction=a2).set_color(YELLOW_E)
- vec2.shift(self.graph_origin)
- vec1_text=TextMobject(r"$\vec{a}$")
- vec2_text=TextMobject(r"$\vec{b}$")
- vec1_text=(vec1_text.shift(self.graph_origin+a1+0.2)).scale(.7)
- vec2_text=(vec2_text.shift(self.graph_origin+a2+0.2)).scale(.7)
- self.setup_axes(animate=True)
- self.wait(2)
- self.play(ShowCreation(vec1))
- self.play(ShowCreation(vec1_text))
- self.wait(.7)
- self.play(ShowCreation(vec2))
- self.play(ShowCreation(vec2_text))
- self.wait(.7)
- a=TextMobject(r"$\vec{a} = (1,2)$",color=RED_B).scale(.6)
- a.shift(3*LEFT+2.7*UP)
- b=TextMobject(r"$\vec{b} = (1,1)$",color=YELLOW_E).scale(.6)
- b.shift(3*LEFT+2*UP)
- self.play(ShowCreation(a))
- self.play(ShowCreation(b))
- self.wait(.5)
- c=TextMobject(r"$2\cdot\vec{a} = 2\cdot(1,2) = (2,4)$",color=RED_B)
- c.shift(3*LEFT+2.7*UP)
- c.scale(.6)
- self.play(Transform(a,c))
- scaling1=TextMobject(r"Scaling vector $\vec{a}$ by 2 units",color=GOLD).scale(.5)
- scaling1.shift(3.4*RIGHT+2.4*UP)
- self.play(ShowCreation(scaling1))
- a1=2*XD*RIGHT+4*YD*UP
- self.play(FadeOut(vec1_text))
- vec1_scaled=Vector(direction=a1).set_color(RED_E)
- vec1_scaled.shift(self.graph_origin)
- self.play(ShowCreation(vec1_scaled))
- self.play(FadeOut(vec1))
- vec1_scaled_text=TextMobject(r"$2\vec{a}$").scale(.7)
- vec1_scaled_text.shift(self.graph_origin+a1+0.2)
- self.play(ShowCreation(vec1_scaled_text))
- self.play(FadeOut(scaling1))
- d=TextMobject(r"$3\cdot\vec{b} = 3\cdot(1,1) = (3,3)$",color=YELLOW_E).scale(.6)
- d.shift(3*LEFT+2*UP)
- self.play(Transform(b,d))
- scaling2=TextMobject(r"Scaling vector $\vec{b}$ by 3 units",color=GOLD).scale(.5)
- scaling2.shift(3.4*RIGHT+2.4*UP)
- self.play(ShowCreation(scaling2))
- a2=3*XD*RIGHT+3*YD*UP
- self.play(FadeOut(vec2_text))
- vec2_2=Vector
- vec2_scaled=Vector(direction=a2).set_color(YELLOW_E)
- vec2_scaled.shift(self.graph_origin)
- self.play(ShowCreation(vec2_scaled))
- self.play(FadeOut(vec2))
- vec2_scaled_text=TextMobject(r"$3\vec{b}$").scale(.7)
- vec2_scaled_text.shift(self.graph_origin+a2+0.2)
- self.play(ShowCreation(vec2_scaled_text))
- self.wait(.7)
- self.play(FadeOut(scaling2))
- add = TextMobject("+").scale(.7)
- add.shift(4.8*LEFT+2*UP)
- self.play(ShowCreation(add))
- self.wait(.5)
- line = Line()
- line.shift(3*LEFT+1.6*UP)
- line.scale(1.8)
- self.play(ShowCreation(line))
- self.wait(1)
- e = TextMobject(r"$\vec{c} = 2\cdot\vec{a} + 3\cdot\vec{b} = (5,7)$",color=GREEN_D).scale(.6)
- e.shift(3*LEFT+1.3*UP)
- self.play(ShowCreation(e))
- self.wait(.5)
- add1=TextMobject("Addition of the scaled vectors",color=GOLD).scale(.5)
- add1.shift(4.1*RIGHT+2.4*UP)
- self.play(ShowCreation(add1))
- self.wait(.5)
- self.play(FadeOut(vec1_scaled_text))
- self.play(FadeOut(vec2_scaled_text))
- self.play(FadeOut(vec1_scaled))
- vec1_scaled2=Vector(direction=a1).set_color(RED_E)
- vec1_scaled2.shift(self.graph_origin+3*RIGHT*XD+3*UP*YD)
- self.play(ShowCreation(vec1_scaled2))
- a3=5*XD*RIGHT+7*YD*UP
- vec3=Vector(direction=a3).set_color(GREEN_C)
- vec3.shift(self.graph_origin)
- vec3_text=TextMobject(r"$\vec{c}$").scale(.7)
- vec3_text.shift(self.graph_origin+a3+0.2)
- self.play(ShowCreation(vec3))
- self.wait(.5)
- self.play(ShowCreation(vec3_text))
- self.wait(1)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/gifs/Vector_Addition_and_Scalar_Multiplication.gif b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/gifs/Vector_Addition_and_Scalar_Multiplication.gif
deleted file mode 100644
index ed65f8a..0000000
--- a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/gifs/Vector_Addition_and_Scalar_Multiplication.gif
+++ /dev/null
Binary files differ
diff --git a/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/gifs/Vector_Addition_and_Scalar_Multiplication.mp4 b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/gifs/Vector_Addition_and_Scalar_Multiplication.mp4
new file mode 100644
index 0000000..8acbb81
--- /dev/null
+++ b/FSF-2020/linear-algebra/vector-spaces/Vector-Spaces/Vector-Spaces/gifs/Vector_Addition_and_Scalar_Multiplication.mp4
Binary files differ