summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorG Sri Harsha2020-07-15 14:24:04 +0530
committerGitHub2020-07-15 14:24:04 +0530
commit78d46a74cd0d33392cb6a11103bf7f9ed0ae5fb2 (patch)
tree30157c37d4c1af65d1e68021b1ca655fefc5e734
parent479e8417f45189d03b7b575c6d24834593933059 (diff)
parentc3f10ff77f2d15726a860cbb64ce0ca41f224032 (diff)
downloadFSF-mathematics-python-code-archive-78d46a74cd0d33392cb6a11103bf7f9ed0ae5fb2.tar.gz
FSF-mathematics-python-code-archive-78d46a74cd0d33392cb6a11103bf7f9ed0ae5fb2.tar.bz2
FSF-mathematics-python-code-archive-78d46a74cd0d33392cb6a11103bf7f9ed0ae5fb2.zip
Merge pull request #7 from FOSSEE/master
importing changes
-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
43 files changed, 1575 insertions, 60 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