From 1fddaca30da06f5777017e6f2ab1b0b305b89752 Mon Sep 17 00:00:00 2001 From: mhjensen Date: Fri, 18 Dec 2020 06:43:07 +0100 Subject: [PATCH] updating lecture --- .../Results/FigureFiles/2DimGravity.png | Bin 0 -> 32526 bytes .../testbook/Results/FigureFiles/2DimHOVV.png | Bin 0 -> 24842 bytes .../Results/FigureFiles/BlockEulerCromer.png | Bin 0 -> 29054 bytes .../Results/FigureFiles/EarthSunEuler.png | Bin 0 -> 56158 bytes .../Results/FigureFiles/EarthSunVV.png | Bin 0 -> 13015 bytes .../Results/FigureFiles/EulerIntegration.png | Bin 0 -> 20544 bytes .../Results/FigureFiles/FallingBaseball.png | Bin 0 -> 11680 bytes .../FigureFiles/ForcedBlockEulerCromer.png | Bin 0 -> 20889 bytes .../Results/FigureFiles/Phasespace.png | Bin 0 -> 18663 bytes .../Results/FigureFiles/RadialGVV.png | Bin 0 -> 8339 bytes .../Results/FigureFiles/RadialHOVV.png | Bin 0 -> 8108 bytes .../_build/.doctrees/chapter1.doctree | Bin 0 -> 48448 bytes .../_build/.doctrees/chapter2.doctree | Bin 0 -> 245698 bytes .../_build/.doctrees/chapter3.doctree | Bin 0 -> 169555 bytes .../_build/.doctrees/chapter4.doctree | Bin 0 -> 277860 bytes .../_build/.doctrees/chapter5.doctree | Bin 0 -> 307150 bytes .../_build/.doctrees/chapter6.doctree | Bin 0 -> 398342 bytes .../_build/.doctrees/chapter7.doctree | Bin 0 -> 150001 bytes .../testbook/_build/.doctrees/content.doctree | Bin 0 -> 2827 bytes .../_build/.doctrees/environment.pickle | Bin 0 -> 131128 bytes .../testbook/_build/.doctrees/glue_cache.json | 1 + .../testbook/_build/.doctrees/intro.doctree | Bin 0 -> 88570 bytes .../.doctrees/lecturenotes/CONDUCT.doctree | Bin 0 -> 15326 bytes .../lecturenotes/CONTRIBUTING.doctree | Bin 0 -> 13420 bytes .../.doctrees/lecturenotes/README.doctree | Bin 0 -> 10888 bytes .../lecturenotes/lecturenotes/content.doctree | Bin 0 -> 2853 bytes .../lecturenotes/lecturenotes/intro.doctree | Bin 0 -> 3116 bytes .../lecturenotes/markdown.doctree | Bin 0 -> 24762 bytes .../lecturenotes/notebooks.doctree | Bin 0 -> 162706 bytes .../_build/.doctrees/markdown.doctree | Bin 0 -> 24687 bytes .../_build/.doctrees/notebooks.doctree | Bin 0 -> 162614 bytes .../testbook/_build/html/.buildinfo | 4 + .../_build/html/_images/chapter1_125_1.png | Bin 0 -> 20430 bytes .../_build/html/_images/chapter1_29_1.png | Bin 0 -> 10834 bytes .../_build/html/_images/chapter1_3_0.png | Bin 0 -> 5246 bytes .../_build/html/_images/chapter2_121_1.png | Bin 0 -> 20430 bytes .../_build/html/_images/chapter2_25_1.png | Bin 0 -> 10834 bytes .../_build/html/_images/chapter4_108_0.png | Bin 0 -> 54410 bytes .../_build/html/_images/chapter4_138_0.png | Bin 0 -> 11269 bytes .../_build/html/_images/chapter5_110_0.png | Bin 0 -> 20655 bytes .../_build/html/_images/chapter5_49_0.png | Bin 0 -> 28968 bytes .../_build/html/_images/chapter6_37_0.png | Bin 0 -> 18730 bytes .../_build/html/_images/chapter6_45_0.png | Bin 0 -> 7932 bytes .../_build/html/_images/chapter6_47_0.png | Bin 0 -> 6206 bytes .../_build/html/_images/chapter6_51_0.png | Bin 0 -> 10319 bytes .../_build/html/_images/chapter6_62_0.png | Bin 0 -> 22506 bytes .../_build/html/_images/chapter6_66_0.png | Bin 0 -> 5994 bytes .../_build/html/_images/chapter6_74_0.png | Bin 0 -> 15863 bytes .../_build/html/_images/chapter6_76_0.png | Bin 0 -> 29482 bytes .../_build/html/_images/notebooks_2_0.png | Bin 0 -> 113874 bytes .../_build/html/_images/notebooks_2_01.png | Bin 0 -> 113874 bytes ...-main.c949a650a448cc0ae9fd3441c0e17fb0.css | 1 + ...ables.06eb56fa6e07937060861dad626602ad.css | 7 + .../_build/html/_sources/chapter1.ipynb | 224 + .../_build/html/_sources/chapter2.ipynb | 2207 ++ .../_build/html/_sources/chapter3.ipynb | 1643 ++ .../_build/html/_sources/chapter4.ipynb | 2409 ++ .../_build/html/_sources/chapter5.ipynb | 2857 +++ .../_build/html/_sources/chapter6.ipynb | 2290 ++ .../_build/html/_sources/chapter7.ipynb | 1431 ++ .../testbook/_build/html/_sources/content.md | 5 + .../testbook/_build/html/_sources/intro.md | 180 + .../html/_sources/lecturenotes/CONDUCT.md | 44 + .../_sources/lecturenotes/CONTRIBUTING.md | 56 + .../html/_sources/lecturenotes/README.md | 35 + .../lecturenotes/lecturenotes/content.md | 5 + .../lecturenotes/lecturenotes/intro.md | 7 + .../lecturenotes/lecturenotes/markdown.md | 125 + .../lecturenotes/lecturenotes/notebooks.ipynb | 122 + .../testbook/_build/html/_sources/markdown.md | 125 + .../_build/html/_sources/notebooks.ipynb | 122 + .../testbook/_build/html/_static/basic.css | 855 + .../_build/html/_static/clipboard.min.js | 7 + .../_build/html/_static/copy-button.svg | 1 + .../_build/html/_static/copybutton.css | 67 + .../_build/html/_static/copybutton.js | 153 + .../_build/html/_static/copybutton_funcs.js | 47 + .../_build/html/_static/css/index.css | 6 + .../testbook/_build/html/_static/doctools.js | 315 + .../html/_static/documentation_options.js | 12 + .../testbook/_build/html/_static/file.png | Bin 0 -> 286 bytes .../html/_static/images/logo_binder.svg | 19 + .../_build/html/_static/images/logo_colab.png | Bin 0 -> 7601 bytes .../html/_static/images/logo_jupyterhub.svg | 1 + .../_build/html/_static/jquery-3.5.1.js | 10872 +++++++++ .../testbook/_build/html/_static/jquery.js | 2 + .../testbook/_build/html/_static/js/index.js | 32 + .../_build/html/_static/language_data.js | 297 + .../testbook/_build/html/_static/logo.png | Bin 0 -> 9854 bytes .../testbook/_build/html/_static/minus.png | Bin 0 -> 90 bytes .../testbook/_build/html/_static/mystnb.css | 184 + ...-main.c949a650a448cc0ae9fd3441c0e17fb0.css | 1 + ...ables.06eb56fa6e07937060861dad626602ad.css | 7 + .../testbook/_build/html/_static/plus.png | Bin 0 -> 90 bytes .../testbook/_build/html/_static/pygments.css | 69 + .../_build/html/_static/searchtools.js | 515 + .../_build/html/_static/sphinx-book-theme.css | 1 + .../_build/html/_static/sphinx-book-theme.js | 105 + .../_build/html/_static/sphinx-thebe.css | 120 + .../_build/html/_static/sphinx-thebe.js | 96 + .../_build/html/_static/togglebutton.css | 90 + .../_build/html/_static/togglebutton.js | 76 + .../_build/html/_static/underscore-1.3.1.js | 999 + .../_build/html/_static/underscore.js | 31 + .../testbook/_build/html/chapter1.html | 413 + .../testbook/_build/html/chapter2.html | 1909 ++ .../testbook/_build/html/chapter3.html | 1231 + .../testbook/_build/html/chapter4.html | 1708 ++ .../testbook/_build/html/chapter5.html | 1915 ++ .../testbook/_build/html/chapter6.html | 1913 ++ .../testbook/_build/html/chapter7.html | 995 + .../testbook/_build/html/content.html | 249 + .../testbook/_build/html/genindex.html | 216 + .../testbook/_build/html/index.html | 2 + .../testbook/_build/html/intro.html | 715 + .../_build/html/lecturenotes/CONDUCT.html | 320 + .../html/lecturenotes/CONTRIBUTING.html | 339 + .../_build/html/lecturenotes/README.html | 309 + .../lecturenotes/lecturenotes/content.html | 249 + .../html/lecturenotes/lecturenotes/intro.html | 250 + .../lecturenotes/lecturenotes/markdown.html | 386 + .../lecturenotes/lecturenotes/notebooks.html | 357 + .../testbook/_build/html/markdown.html | 386 + .../testbook/_build/html/notebooks.html | 337 + .../testbook/_build/html/objects.inv | Bin 0 -> 723 bytes .../testbook/_build/html/reports/chapter1.log | 31 + .../testbook/_build/html/reports/chapter2.log | 31 + .../testbook/_build/html/reports/chapter5.log | 42 + .../testbook/_build/html/search.html | 235 + .../testbook/_build/html/searchindex.js | 1 + .../_build/jupyter_execute/chapter1.ipynb | 253 + .../_build/jupyter_execute/chapter1.py | 187 + .../_build/jupyter_execute/chapter1_125_1.png | Bin 0 -> 20430 bytes .../_build/jupyter_execute/chapter1_29_1.png | Bin 0 -> 10834 bytes .../_build/jupyter_execute/chapter1_3_0.png | Bin 0 -> 5246 bytes .../_build/jupyter_execute/chapter2.ipynb | 2698 +++ .../_build/jupyter_execute/chapter2.py | 1159 + .../_build/jupyter_execute/chapter2_121_1.png | Bin 0 -> 20430 bytes .../_build/jupyter_execute/chapter2_25_1.png | Bin 0 -> 10834 bytes .../_build/jupyter_execute/chapter3.ipynb | 1656 ++ .../_build/jupyter_execute/chapter3.py | 1026 + .../_build/jupyter_execute/chapter4.ipynb | 2478 ++ .../_build/jupyter_execute/chapter4.py | 1423 ++ .../_build/jupyter_execute/chapter4_108_0.png | Bin 0 -> 54410 bytes .../_build/jupyter_execute/chapter4_138_0.png | Bin 0 -> 11269 bytes .../_build/jupyter_execute/chapter5.ipynb | 2909 +++ .../_build/jupyter_execute/chapter5.py | 1700 ++ .../_build/jupyter_execute/chapter5_110_0.png | Bin 0 -> 20655 bytes .../_build/jupyter_execute/chapter5_49_0.png | Bin 0 -> 28968 bytes .../_build/jupyter_execute/chapter6.ipynb | 2604 +++ .../_build/jupyter_execute/chapter6.py | 1520 ++ .../_build/jupyter_execute/chapter6_37_0.png | Bin 0 -> 18730 bytes .../_build/jupyter_execute/chapter6_45_0.png | Bin 0 -> 7932 bytes .../_build/jupyter_execute/chapter6_47_0.png | Bin 0 -> 6206 bytes .../_build/jupyter_execute/chapter6_51_0.png | Bin 0 -> 10319 bytes .../_build/jupyter_execute/chapter6_62_0.png | Bin 0 -> 22506 bytes .../_build/jupyter_execute/chapter6_66_0.png | Bin 0 -> 5994 bytes .../_build/jupyter_execute/chapter6_74_0.png | Bin 0 -> 15863 bytes .../_build/jupyter_execute/chapter6_76_0.png | Bin 0 -> 29482 bytes .../_build/jupyter_execute/chapter7.ipynb | 1431 ++ .../_build/jupyter_execute/chapter7.txt | 838 + .../lecturenotes/lecturenotes/notebooks.ipynb | 138 + .../lecturenotes/lecturenotes/notebooks.py | 65 + .../lecturenotes/notebooks_2_0.png | Bin 0 -> 113874 bytes .../_build/jupyter_execute/notebooks.ipynb | 138 + .../_build/jupyter_execute/notebooks.py | 65 + .../_build/jupyter_execute/notebooks_2_0.png | Bin 0 -> 113874 bytes .../testbook/_build/latex/LICRcyr2utf8.xdy | 101 + .../testbook/_build/latex/LICRlatin2utf8.xdy | 239 + .../testbook/_build/latex/LatinRules.xdy | 607 + .../testbook/_build/latex/Makefile | 64 + ...-main.c949a650a448cc0ae9fd3441c0e17fb0.css | 1 + ...ables.06eb56fa6e07937060861dad626602ad.css | 7 + .../testbook/_build/latex/chapter2_121_1.png | Bin 0 -> 20430 bytes .../testbook/_build/latex/chapter2_25_1.png | Bin 0 -> 10834 bytes .../_build/latex/footnotehyper-sphinx.sty | 269 + .../testbook/_build/latex/index.html | 2 + .../testbook/_build/latex/latexmkjarc | 22 + .../testbook/_build/latex/latexmkrc | 9 + .../testbook/_build/latex/make.bat | 31 + .../testbook/_build/latex/python.aux | 180 + .../testbook/_build/latex/python.fdb_latexmk | 196 + .../testbook/_build/latex/python.fls | 327 + .../testbook/_build/latex/python.idx | 0 .../testbook/_build/latex/python.ist | 16 + .../testbook/_build/latex/python.log | 18694 ++++++++++++++++ .../testbook/_build/latex/python.out | 24 + .../testbook/_build/latex/python.pdf | Bin 0 -> 371206 bytes .../testbook/_build/latex/python.tex | 3247 +++ .../testbook/_build/latex/python.toc | 74 + .../_build/latex/reports/chapter2.log | 31 + .../testbook/_build/latex/sphinx.sty | 1947 ++ .../testbook/_build/latex/sphinx.xdy | 230 + .../testbook/_build/latex/sphinxcyrillic.sty | 55 + .../testbook/_build/latex/sphinxhighlight.sty | 105 + .../testbook/_build/latex/sphinxhowto.cls | 102 + .../testbook/_build/latex/sphinxmanual.cls | 128 + .../testbook/_build/latex/sphinxmessages.sty | 21 + .../testbook/_build/latex/sphinxmulticell.sty | 317 + .../LectureNotes/testbook/_build/pdf/book.pdf | Bin 0 -> 436718 bytes doc/src/LectureNotes/testbook/_config.yml | 71 + doc/src/LectureNotes/testbook/_config.yml~ | 8 + doc/src/LectureNotes/testbook/_toc.yml | 11 + doc/src/LectureNotes/testbook/chapter1.ipynb | 224 + doc/src/LectureNotes/testbook/chapter2.ipynb | 2207 ++ doc/src/LectureNotes/testbook/chapter3.ipynb | 1643 ++ doc/src/LectureNotes/testbook/chapter4.ipynb | 2409 ++ doc/src/LectureNotes/testbook/chapter5.ipynb | 2857 +++ doc/src/LectureNotes/testbook/chapter6.ipynb | 2290 ++ doc/src/LectureNotes/testbook/chapter7.ipynb | 1431 ++ doc/src/LectureNotes/testbook/content.md | 5 + doc/src/LectureNotes/testbook/intro.md | 180 + .../lecturenotes/.github/workflows/deploy.yml | 39 + .../testbook/lecturenotes/CONDUCT.md | 44 + .../testbook/lecturenotes/CONTRIBUTING.md | 56 + .../testbook/lecturenotes/LICENSE | 33 + .../testbook/lecturenotes/README.md | 35 + .../lecturenotes/lecturenotes/_config.yml | 11 + .../lecturenotes/lecturenotes/_toc.yml | 7 + .../lecturenotes/lecturenotes/content.md | 5 + .../lecturenotes/lecturenotes/intro.md | 7 + .../lecturenotes/lecturenotes/logo.png | Bin 0 -> 9854 bytes .../lecturenotes/lecturenotes/markdown.md | 125 + .../lecturenotes/lecturenotes/notebooks.ipynb | 122 + .../lecturenotes/lecturenotes/references.bib | 55 + .../testbook/lecturenotes/requirements.txt | 4 + doc/src/LectureNotes/testbook/logo.png | Bin 0 -> 9854 bytes doc/src/LectureNotes/testbook/markdown.md | 125 + doc/src/LectureNotes/testbook/references.bib | 56 + .../LectureNotes/testbook/requirements.txt | 3 + doc/web/course.dlog | 3 + 231 files changed, 106819 insertions(+) create mode 100644 doc/src/LectureNotes/testbook/Results/FigureFiles/2DimGravity.png create mode 100644 doc/src/LectureNotes/testbook/Results/FigureFiles/2DimHOVV.png create mode 100644 doc/src/LectureNotes/testbook/Results/FigureFiles/BlockEulerCromer.png create mode 100644 doc/src/LectureNotes/testbook/Results/FigureFiles/EarthSunEuler.png create mode 100644 doc/src/LectureNotes/testbook/Results/FigureFiles/EarthSunVV.png create mode 100644 doc/src/LectureNotes/testbook/Results/FigureFiles/EulerIntegration.png create mode 100644 doc/src/LectureNotes/testbook/Results/FigureFiles/FallingBaseball.png create mode 100644 doc/src/LectureNotes/testbook/Results/FigureFiles/ForcedBlockEulerCromer.png create mode 100644 doc/src/LectureNotes/testbook/Results/FigureFiles/Phasespace.png create mode 100644 doc/src/LectureNotes/testbook/Results/FigureFiles/RadialGVV.png create mode 100644 doc/src/LectureNotes/testbook/Results/FigureFiles/RadialHOVV.png create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/chapter1.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/chapter2.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/chapter3.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/chapter4.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/chapter5.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/chapter6.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/chapter7.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/content.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/environment.pickle create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/glue_cache.json create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/intro.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/CONDUCT.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/CONTRIBUTING.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/README.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/lecturenotes/content.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/lecturenotes/intro.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/lecturenotes/markdown.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/lecturenotes/notebooks.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/markdown.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/.doctrees/notebooks.doctree create mode 100644 doc/src/LectureNotes/testbook/_build/html/.buildinfo create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter1_125_1.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter1_29_1.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter1_3_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter2_121_1.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter2_25_1.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter4_108_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter4_138_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter5_110_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter5_49_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter6_37_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter6_45_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter6_47_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter6_51_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter6_62_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter6_66_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter6_74_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/chapter6_76_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/notebooks_2_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_images/notebooks_2_01.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_panels_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css create mode 100644 doc/src/LectureNotes/testbook/_build/html/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/chapter1.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/chapter2.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/chapter3.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/chapter4.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/chapter5.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/chapter6.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/chapter7.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/content.md create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/intro.md create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/CONDUCT.md create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/CONTRIBUTING.md create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/README.md create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/content.md create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/intro.md create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/markdown.md create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/notebooks.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/markdown.md create mode 100644 doc/src/LectureNotes/testbook/_build/html/_sources/notebooks.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/basic.css create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/clipboard.min.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/copy-button.svg create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/copybutton.css create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/copybutton.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/copybutton_funcs.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/css/index.css create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/doctools.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/documentation_options.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/file.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/images/logo_binder.svg create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/images/logo_colab.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/images/logo_jupyterhub.svg create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/jquery-3.5.1.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/jquery.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/js/index.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/language_data.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/logo.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/minus.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/mystnb.css create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/panels-variables.06eb56fa6e07937060861dad626602ad.css create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/plus.png create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/pygments.css create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/searchtools.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/sphinx-book-theme.css create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/sphinx-book-theme.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/sphinx-thebe.css create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/sphinx-thebe.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/togglebutton.css create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/togglebutton.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/underscore-1.3.1.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/_static/underscore.js create mode 100644 doc/src/LectureNotes/testbook/_build/html/chapter1.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/chapter2.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/chapter3.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/chapter4.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/chapter5.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/chapter6.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/chapter7.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/content.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/genindex.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/index.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/intro.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/lecturenotes/CONDUCT.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/lecturenotes/CONTRIBUTING.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/lecturenotes/README.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/content.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/intro.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/markdown.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/notebooks.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/markdown.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/notebooks.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/objects.inv create mode 100644 doc/src/LectureNotes/testbook/_build/html/reports/chapter1.log create mode 100644 doc/src/LectureNotes/testbook/_build/html/reports/chapter2.log create mode 100644 doc/src/LectureNotes/testbook/_build/html/reports/chapter5.log create mode 100644 doc/src/LectureNotes/testbook/_build/html/search.html create mode 100644 doc/src/LectureNotes/testbook/_build/html/searchindex.js create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1.py create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1_125_1.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1_29_1.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1_3_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter2.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter2.py create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter2_121_1.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter2_25_1.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter3.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter3.py create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter4.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter4.py create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter4_108_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter4_138_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter5.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter5.py create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter5_110_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter5_49_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6.py create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_37_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_45_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_47_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_51_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_62_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_66_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_74_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_76_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter7.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter7.txt create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks.py create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks_2_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/notebooks.ipynb create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/notebooks.py create mode 100644 doc/src/LectureNotes/testbook/_build/jupyter_execute/notebooks_2_0.png create mode 100644 doc/src/LectureNotes/testbook/_build/latex/LICRcyr2utf8.xdy create mode 100644 doc/src/LectureNotes/testbook/_build/latex/LICRlatin2utf8.xdy create mode 100644 doc/src/LectureNotes/testbook/_build/latex/LatinRules.xdy create mode 100644 doc/src/LectureNotes/testbook/_build/latex/Makefile create mode 100644 doc/src/LectureNotes/testbook/_build/latex/_panels_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css create mode 100644 doc/src/LectureNotes/testbook/_build/latex/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css create mode 100644 doc/src/LectureNotes/testbook/_build/latex/chapter2_121_1.png create mode 100644 doc/src/LectureNotes/testbook/_build/latex/chapter2_25_1.png create mode 100644 doc/src/LectureNotes/testbook/_build/latex/footnotehyper-sphinx.sty create mode 100644 doc/src/LectureNotes/testbook/_build/latex/index.html create mode 100644 doc/src/LectureNotes/testbook/_build/latex/latexmkjarc create mode 100644 doc/src/LectureNotes/testbook/_build/latex/latexmkrc create mode 100644 doc/src/LectureNotes/testbook/_build/latex/make.bat create mode 100644 doc/src/LectureNotes/testbook/_build/latex/python.aux create mode 100644 doc/src/LectureNotes/testbook/_build/latex/python.fdb_latexmk create mode 100644 doc/src/LectureNotes/testbook/_build/latex/python.fls create mode 100644 doc/src/LectureNotes/testbook/_build/latex/python.idx create mode 100644 doc/src/LectureNotes/testbook/_build/latex/python.ist create mode 100644 doc/src/LectureNotes/testbook/_build/latex/python.log create mode 100644 doc/src/LectureNotes/testbook/_build/latex/python.out create mode 100644 doc/src/LectureNotes/testbook/_build/latex/python.pdf create mode 100644 doc/src/LectureNotes/testbook/_build/latex/python.tex create mode 100644 doc/src/LectureNotes/testbook/_build/latex/python.toc create mode 100644 doc/src/LectureNotes/testbook/_build/latex/reports/chapter2.log create mode 100644 doc/src/LectureNotes/testbook/_build/latex/sphinx.sty create mode 100644 doc/src/LectureNotes/testbook/_build/latex/sphinx.xdy create mode 100644 doc/src/LectureNotes/testbook/_build/latex/sphinxcyrillic.sty create mode 100644 doc/src/LectureNotes/testbook/_build/latex/sphinxhighlight.sty create mode 100644 doc/src/LectureNotes/testbook/_build/latex/sphinxhowto.cls create mode 100644 doc/src/LectureNotes/testbook/_build/latex/sphinxmanual.cls create mode 100644 doc/src/LectureNotes/testbook/_build/latex/sphinxmessages.sty create mode 100644 doc/src/LectureNotes/testbook/_build/latex/sphinxmulticell.sty create mode 100644 doc/src/LectureNotes/testbook/_build/pdf/book.pdf create mode 100644 doc/src/LectureNotes/testbook/_config.yml create mode 100644 doc/src/LectureNotes/testbook/_config.yml~ create mode 100644 doc/src/LectureNotes/testbook/_toc.yml create mode 100644 doc/src/LectureNotes/testbook/chapter1.ipynb create mode 100644 doc/src/LectureNotes/testbook/chapter2.ipynb create mode 100644 doc/src/LectureNotes/testbook/chapter3.ipynb create mode 100644 doc/src/LectureNotes/testbook/chapter4.ipynb create mode 100644 doc/src/LectureNotes/testbook/chapter5.ipynb create mode 100644 doc/src/LectureNotes/testbook/chapter6.ipynb create mode 100644 doc/src/LectureNotes/testbook/chapter7.ipynb create mode 100644 doc/src/LectureNotes/testbook/content.md create mode 100644 doc/src/LectureNotes/testbook/intro.md create mode 100644 doc/src/LectureNotes/testbook/lecturenotes/.github/workflows/deploy.yml create mode 100644 doc/src/LectureNotes/testbook/lecturenotes/CONDUCT.md create mode 100644 doc/src/LectureNotes/testbook/lecturenotes/CONTRIBUTING.md create mode 100755 doc/src/LectureNotes/testbook/lecturenotes/LICENSE create mode 100644 doc/src/LectureNotes/testbook/lecturenotes/README.md create mode 100755 doc/src/LectureNotes/testbook/lecturenotes/lecturenotes/_config.yml create mode 100644 doc/src/LectureNotes/testbook/lecturenotes/lecturenotes/_toc.yml create mode 100644 doc/src/LectureNotes/testbook/lecturenotes/lecturenotes/content.md create mode 100644 doc/src/LectureNotes/testbook/lecturenotes/lecturenotes/intro.md create mode 100644 doc/src/LectureNotes/testbook/lecturenotes/lecturenotes/logo.png create mode 100644 doc/src/LectureNotes/testbook/lecturenotes/lecturenotes/markdown.md create mode 100644 doc/src/LectureNotes/testbook/lecturenotes/lecturenotes/notebooks.ipynb create mode 100644 doc/src/LectureNotes/testbook/lecturenotes/lecturenotes/references.bib create mode 100644 doc/src/LectureNotes/testbook/lecturenotes/requirements.txt create mode 100644 doc/src/LectureNotes/testbook/logo.png create mode 100644 doc/src/LectureNotes/testbook/markdown.md create mode 100644 doc/src/LectureNotes/testbook/references.bib create mode 100644 doc/src/LectureNotes/testbook/requirements.txt diff --git a/doc/src/LectureNotes/testbook/Results/FigureFiles/2DimGravity.png b/doc/src/LectureNotes/testbook/Results/FigureFiles/2DimGravity.png new file mode 100644 index 0000000000000000000000000000000000000000..333400f143e2f51c0940a13398948669c55401c3 GIT binary patch literal 32526 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

?8voZ&g@$ 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/Results/FigureFiles/2DimHOVV.png b/doc/src/LectureNotes/testbook/Results/FigureFiles/2DimHOVV.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7012a6c0bfff65a0111725dec057f8e9f3900f GIT binary patch literal 24842 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 B;>iF2 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/Results/FigureFiles/BlockEulerCromer.png b/doc/src/LectureNotes/testbook/Results/FigureFiles/BlockEulerCromer.png new file mode 100644 index 0000000000000000000000000000000000000000..ef4359856f7d8e6eec86fd7e110670937e0be68b GIT binary patch literal 29054 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/Results/FigureFiles/EarthSunEuler.png b/doc/src/LectureNotes/testbook/Results/FigureFiles/EarthSunEuler.png new file mode 100644 index 0000000000000000000000000000000000000000..9952246740ffc57d04de8023c62543251452c68f GIT binary patch literal 56158 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%0DTGPt3qK)AF(zop0WQAsc&A1o(Y)G}zl0soxnuJ8 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 E8$O15WdHyG literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/Results/FigureFiles/EarthSunVV.png b/doc/src/LectureNotes/testbook/Results/FigureFiles/EarthSunVV.png new file mode 100644 index 0000000000000000000000000000000000000000..38ebd11197c24fb221b078503f6bdb3947cbf418 GIT binary patch literal 13015 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 xeQS?7j7nHE71 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/Results/FigureFiles/ForcedBlockEulerCromer.png b/doc/src/LectureNotes/testbook/Results/FigureFiles/ForcedBlockEulerCromer.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3970536391d6f80cb34828b1a60829a33862ff GIT binary patch literal 20889 zcmbTebyU=Q^fo%Qw1jknv~-6cjRJxoDV-|qNOyNBpfrOD2uPPA9V#sXA`K$lib&o) z=l8z%y?@bMp1YEI;f&a&M*D!g4KoF9n|Hb$^8*~OAN+DH^k@{{9NN;OTdxVQM z(%sn&>HN@!#mnCF$wN0+Q2`MF5q=gYB+^|*Q1JhJFW~0sD44;V5Q{*tAT(8O8TjOE z&H4sp{|Oa1SsfR+lX2tDT%%9pa`%45Rf^6uM5L>t|83biq{9~sS6TC$#ktC)W7B3j zg4@Nf^BY86qG@0B|JMCM5}858eM6Sj&a!2CpH6V!_4DbQKOcjoB(Q6IQh)njm!A)2 ziM=83_MAI;Zl3dV4S#q{ObmBii3%PI8yg#eI2HP@I2nFL6%`fAr^X@ZZ#SwCWMpJ| z->fm1ZUmw*5Xr(~DKk{I3lXt7iPk`qz`uIVaNOx9E+qmwok;=o-*`!gbdgrDCUIATOnUb-^v?eHDB$+4 zBKWCu4gzFr(gtIa$GZyjyO#HD{pJ#H^~uQ$X)hXYawpX%b<&mf4a$mESBfy2CYtVz zU&WzD-xPa|;YFvL<*v&7Cw_yp2=nWjO|I&61hq?o{zmE<_P>*d7IS-986Glq?9Od< zZWa$Mj-3+dn&(h<^05%yfGt1?{n|g-@ADp7N?$%t!PpYe?&UiA)yd@cVC?Umw1}CsV;h?{;MAXe>^^ZmIqnbFOmD zc#L4cD{LIvefl7|TD^E#w@-a@H3nw~f-X|y5>a`D4+H*D*niTACARWp+n1V7jNvAF zN~*KWe7VAMqQ2^`ZNl4n_*Yi)e$X7>xI^dViSu>W`RwpmTI$xz%`qtt2Qijp?N^j7 zSYUDv8!~8=n7LKNLo2IWQ*g5JpPQYp2>@6OJ-Fo)fr69p78uKr7+cGM^fZ+#gEVwIYB+4YV>-94u$fZ zogUukUs)YucwRp?6AECB4*jWREP>Qx-5%-#`SLK3^PSuXj zMJ^VTT(}2_2JBY<+}4cgm{c$)3AYI6vXBW+dZMr7c@+l}o+veJ@P^;sm?ND~+s~f) zInxN2W{E=Inl#(}mAlS(h_g-R?1dK=lv&YEMQER-{IZ+5e@uA8T}yDW$jGf@u10J$ z6@j=uWjOQH7Q=yB?s#f9d%^QmMV-x56789hev9s;S^k_=@{>{1e}Ba!Jqe}f6?Iou zl>vj@+noHN+Q<4oN8&t^+3Y5a_P0(JU6@ODiM*YrqJ9$6)?AI4;;ELJ5eq9C%%Rj? zj0Er3uy&xD@mYE;I#P1|tc!8lTH=wa`g`s~)5y!shI=%~M`s)3UI{wJc*$fqn|soUuE{+nbC+Yu}nyi>~XIK9}5Gy|?qe z`YP2klHh=1ysjZ%IQU%*`d|z@lU_HA&GxkE=(Z_Kgny16^3_ve`g*hj_yh)>ty&JX z?`Ep1v%Tj>uNw{+ih5usR*%Vk(;NQ#$Q z@$)Sc7>TBxv&_69VxUi?z6L9`@+OMK1ms=iC%>;dG9^`H@{|%od&61 z{m?=!JKxUHjD}sY=~(I6B}M+<2VxQ@3@;A;z<9;cy)ZF5g<8h$ZvBF^C{zjq^S7#?0ZIbNR3=|aSNWQwS%0Oo3`5g8h=t_LR^yaZw&NPVxm`LXHcMo13!Px zh($(6H(=@g1E+7~d9vS$lQX$`pVgoP1^%AHHj5e;721@(ZZFF3|GT&4p*CZjj=!2f zSeegsl`(n^6Ma3_hP8vGo-TQz4e=%yx1=?xTYpl^YOO___Ey;gUzq)lNm8!6EsWz7 z5Wp~hGSRsA`EJkws%^)!d2e<%h&oyRh=wU(@7C|%zaykr$@HvR{0%=;Cbg6fPXw*Z=#?l_wnM!`HoU!|7`5hz!8zMvv8FH<0 z#*;9KSt01NrGoncqV?iWB^DwsE^cIEBC5Gr`o-WcUDX!FJHyx{AHNecP7`XT6{I0F z(^xb^HqL@GgD*Z_k~)d;(mbW3`2+tvg8z2EL{^y+X~c{x7a3}CT}QDTZ&nBKHwQM^ zx(N`;^t9mMr5hG?s=u2Hv-~)d)W)#c1rd>wF;+twXYF>54wu#&Z!UtYK?kYaAwDXW zGI3nGM41KOs7H7nE%qD>$&VAq*+r$Pq#t^GPkVGrui+Z4ro*DyG8bnrLEwe%BBb2c z=EYC^$lNAK+L;{NgFlpBk=gz=pZ(k`G1K#uIMU~zj{=DV(c(_BbEHdd^v9_Fr><0$ zqR7rSh$&}@f#KoG3m;ck5{c>bzk@Gw9$dMdm(4roar)GkhB-gd68Efz$i!mqyH*B9 zn`IP#|K9R!{xf@8*JS2+0YR!+3;y>l#>NLWkQgBka5`i_cvG^?#7Z z={b_4|8lr3w4r=jbDgu-22jPTVIIs%(Hic3nS8%`M%PMa=F-o-zrUd$+9xsdaB+6( zSRvS@tMXzd46MKI*Dhh><_x!mqZN~X1*Lh&n>TL?MxCrAvOUiKOcuR+M>0M>?&RjC z?%`2gwODyg825$^QD}a9)7pWJdjQk9Z7rnZ-j}VK438OmswecE#Ce~uOu5e{i8&8y zhVUkkYIDSKKC2aI854@=_Q5)GCLJD|lib{J;W<7`wP0|j>5TSvWbd%K${34!aZ(t~ z!+RDGLmtVv@iNB_%vI;)s$T!8<>t|b2a)>lQ5TR(&FoffID<c;Eu_ zY~f(~Efg$SUcy&JgxgLJvn-5_YY!&0xnC(Xo$ZONU@oIXxzZ9g1Gi8_vHwl z)s#QS$m8**QW-2l0l~R<%;b#GC`v+IY@XS)kjwK(bI2gq0*h*o=iB6B-zRyDR>z<+ zrkA_QxQ07QCKsaO*1rGot#B<$m-{UK5?SIRDl? zoVL7dkYRjAJV-b<;&VZd@A?={nAC%8~|3udE8N zy+9*rbXF94H99aUBfoBO&Rp)_I}QjsTWaPU7*M}h?@}pTI6UcY*N5u}uXEU+sPPKIJb6(^;U4(!m zw9&l3==UPgbZagvVZZdc*k3J3sCpqd+;M@gIO*?4#yTlTMrJ1cj!jagJeqrJp4aWK ztonX|V{tv|%gTHs*3gFHPuLBfYNs_XD;oz*@H%&R$|1XvrPkzhOaxPKVLG2sjKo^Sq4$lW z`v*J24i79-Nlb7_B=(;B5C~AQC;{rYXR=Qv64G8*rY$q8weG4#~ zB?{LGpMA{(t5R6q&m%*kDs-WJ9npX4es*4QU00JlFQA$Djw?wdS;e?neRvAT!h1%B z3xbHv{>)(J`M0ZfP6SL;ET-wXI!Xx^ z;mX=wd;g?pvoMo!Vr~{7?_jLiRd8X!Hv1^#&7anzNp*Vy(t-kK6`cUc>C3O{%NpqEEk&1GSHn zC=M0jRr9YEA8M@=$Cv+wI|@s0LhRGfBN2b674&O1-zt>@fAaZjNEsdpUHg<)@b;R1 z6?Bc}&#)T%qNz##f~~%y32IA#R|OPbB5<3Wkqb5c{EcEon)`9UA_oB_70df_`Dy)> zRJ&eT;w~DmAwbEmuH5)Yfp&nm6`w~ozoC{@#NsuhH`45WCl7i&CL!R4llaj`iTJ+2RUBY2%tv=zN0>2-6!ba# zWXR*yl=dgh#A}RPyat&ZUF1bQ)fr?yEi)7`nBh1v?=;dl02Rw2+6kkjsAEvmpBsdI z0!7}^w@ zW{q3Ve)wobJ`_H=qN9`=h7&WP0@rsQrb4vGtNTSdu#(#cJR-}*8si>nVC(1%zpKo{ zKAKR@A(}NL)68`h2b=I}g~@sb_Rlvay3@i*q1EUbNomKa|6n#c>nml4CTeWwE9LQ- zh)#WCY?2aL2;4yn?y$9S1K|UYpUmGc^+OIbS1s}_N@dgo_4U5lGgb_#AD!A{4-bt) zoXo!*IDgVf>M3my-XT=cTiMzpQsbi5(|d8H$bwx)$DpQnLodfgb#g(h_YD;UJ)u5K zl}$EH@|*Xb5!1Fm<{Cx^9}&K1ZqjGhC%)`nR#WLjy&1H|Ks_zv*NTuI3h5eTf3aw% z5{C(~lxrxV!{%$DSRXH3xs3OA1VG{H482b^{4ykw!r-Km>9;$fFa)RBH{3=SVz(xd z6S2*zr0;k&qfC1mwNn%PhM&|a9g`;h`Uo~&qc0jjDd`J1pjVUO&O z0kJV$+zXpsjqXVDq)Ctn#fg#VE*M*g`hpw~@NtiDQ=;sk%4jLs^<*1#RWhtGK{8-g z-QdE2M9XEWzIb@(MD&A(iseUDU^=aC8AprX62looeDRh0lhP!W!)-0t+3J?uVQLkf zLuniX{5~T;WFay|^1vBFkIR`pG;-S7*Fs>=^3D?cGfzLA1e zQ0j7-W+p%QZZfbac>TxI))#rs%cC@PL14KLKip2Ul6d4%WgXLq;<17FFfykQd6ppc zeaYwG1G)Y6>{L5(RBJy*X7;Xp-A(ivripa^{r7|$*E%%wzG{&z8BEjIg>+dGG>8!W zIyxR5*@pVClZfytPWPW{>nVsGB5kte?w7(EUALGmV;7BlHwGdg-g> zhog21X@4hs`uh>MC9SI>iFJyk`s1W(EszZF6B1NJA;pS$$yTo&KpktX!YnuUfq1l<)cD6zobl$w0*EM!mf%s$4KjQUg`DYxiZRcKOdh2ZO`0gs(Hd5@0 z5iQqB_Q6H!tof9ija*jtjHJHb&xufA+_)83j3qAjE@DChs#OmUviW~Q-g{r~2;M3l zTjaC+N07uMAD5MtMcBH-rSK15L_`Gp^{alK{#w?dS6!nSWC0sda%**uMpI)XeyVKJ zeB;GWkAxJ2CwnJ@a3of=2v*G@jux}5vQpjDlnyDwh$yJ3A;%+OIBuUj|0UVhL2*|u z)bebJ`bAb2fyeFl3=rVT8jGzuR#aX3n!pX{MP#Z&T1QQu=P9_wJr^8zP;yA41-SOY z@&LlDwURK-r*&kfok+#ScV~&Nb)?0fxUBb1_s73;@%}r_c+-t;eUq(6^}2np_?jB{ zi4l7`%T)^;D)dj51`hH>NzZ)J_R0D72j{LmB+txq+~i zQ&jZHpG)uExkSOB{rJ6q0lH;^^51OgdlifD=XAAfY>)#_O*Wr$a`vLcCZjTHb&d^q zUwzjyy5PiF+@v*;@XY-)tK;;Iccw`e?~PCsR`;am)D3^n{piMFRO@u?-5Fy_ltF0U zq$m=K{4f3e!eV0Bjnl-rI?+FVn9e+%G>5ebQ!5Ica_&tIKC=zjery@8R&>kFO%S$2 zz$^&yA2IzBSZLv!O#k@uCj4_h+({epoQPc|MJ`fI{=yYDvD*KWz)#;iH2N9mH_>1L z;IGK$>-+;ZaCpqE_UZ#N=@fMy@zcpLuI)VOBrhV=ZbB?={#P>fP_h(_#z3)mg;e28 zsN9ebI09XL{cv?AU+n$;{ifa4Q>(`5{SjqSR(5tQMn*=TpQ-99eQ)B?yfSdV?Tc@$ zXM(gz40tt>94K+=z@Xz-?_;_w7o8kEL?Aio&9ArD%YKC%6{)XGbn3lfXQ{Wmx4T8% zo-P`k(m)1Gwc)&_Z#Si%L4c6@D#s>;Kl(%J4fUv~T>O$VpHXmRX}1qM8pn^xejc|% zs`4vRQZ|=TahN4SZBBr+dpn}$05x#5@3oNqqxEpw%HCn?4VX3DVx@M?&NI(T|p@vqw zv8d61#mB&4J8ge(TDs|@ph9T+A>4Wd|=!%RV|IffQr**bVd2G zV06b?IIISTS33VC)|0R@5sh0-r%&w6cp7FXQw5@MVw6xn&;H#mp6*>ZJoFNaZTxwJ zdhLC17FP&KhWm==7=Mi9rY<_6CGW~2S>fgJA@FRVRL}`+ZrECgyz;dpI&WWt2w_vo zfqy?z6C%z*VDwFZ8A=Y0nj(k=j_3{zj7PE=r2Xamb%Z)f9d$MDD;u75S^amxm#6_B zpv0tRho(n4GA38mZ5y#BjOA;d*#eee;T=c_|6BmUH@r-D9T-JQ5#IEO4HU<~4Zo2I zNi@{2h9!VoqEPK5X!KRca<9yQd$`dS3gNj$lTiR?%>8qBzCx>16DsXd8@F*}h$lGvxrFZYf&~$P`4)&-X zcZAo^X;#e#BzJeA&PaKNUf)<_cMrI01sa{xXLn89z=uZ#Q@!#s(Uj7@x5(ceSO19s zyf=n%h(=6$ZKlqXdu)*-8yl6Fu0b@3hF<5tglK^4<8h zZf9owt<2+nAcM&8S|N)W&yNQeOtXd-!9ja$R4n9bMTXYut&C7ALKOxWl5AjQzYwgg zw1EbSE$}T&dyXt<-xX9(<0ofMyQ_%8NpIh}+l$jks=iuyxSbm^y=iHVqcVEue>~#z zwz8Q5seKYOB{;q{Fwi6EuIV&_)#KbX@B6Y?{NP-5_Z@E8vXHR>G;<1n%ZN9u{1DoD z(4G?R_*-}3pFM5jEQzs}%+FV*5QT97%tud^sG1jJ1q~@An8Gz@Hr~W+gI~9A(&lvx zgyG2^IO}Srtx3H?z#<-C%D!2hU8Bt+gEfPe>Y~@rsRBdIlHH}9a!Ma!^Zx!^Z}&rG zzvT4ot4(zLe$|LncVH$7M3>RQ__ImgsB-A|_xgb2^@$sXqk0;*8eFTDitq1-8&Sg3 zsv5t1{=Hq2ouD8VyOIQRk9=-R2LJlo6Wvzq&U4_7<(9fB|0=UV&Q>VF-le! zOY~xKVknDR+5zPzXE3?ysAWUgSkjv3_)4J-)&M;voSGNNPj`})R~N(_sAs@9W8igc z$_KFC?k*Jz|7hve!IQJN+}PtC?Rif9owZ-lR+3abQG#Fb6%DkTVnjE=Y$DJ`>GVXW zE(u}G^o!;Fb8iJ74<_9@Si2r5>474K_Cdj8cT*$-fh}}G>^8Xv)NXi=HJyr@o8DF; z0zyYDKR2XrlLCAgnn0A1WgXmCp)n~WTpO|7EKy=GbN*65J1xUI(#to%X)_;c*Z+=t z&2f76%kDwO?d+Mw9tqMwf45X}n!48M#nQX_`7&Pl&(%jYOXR?+t@hY)&L+=KP3z3sF4>tDX{Ui)&e z_2L_foZ)|K0f4`7LmI*hk)hA5380tcDk3&B8ESd*IBtQ1Qir#R4~g!__f&VUrDS%% z`q&!&y4>Q`rpk%v)O@IeDfTE9xF7Iaw);PyJP|QfNS=&_y##+@8FU5r?Tpc@yyekw z?cDZ>yN)0@6>B?ex`Efl7AMqJ$qg4gO>#H4KCMn!)&*UgiDG|?zSQd}Z74OIc3y@| zu7byRc5fVbGX>wGuL5T5ZTaKa?r_qZK0TG6zkKPWZaeNF#$&_GkmTa)Z(OYSaSKVR zQ^eiRD?`qc!`}}fj!mudmW5x=niORe(1dneeW(gIa>6?n@7NODH~pUC;o*7oF?v5Z zdYr@{U9%{pp2W~mR@q9BJ&3EBwznb}{4dPXyZOQKB582U&!2X`kB*jFPj{4cbcUkx zlb^e&&v{}zTJx$wj9w#_`L&p1()lip!|7W~vo^iHg_Sxqy8sk@zuy`AJJs17$7%AN zxe>qO@-n^I`LC*6u;0<)b67 zfK9XcPPgFGX<~V19!rmmYmgoiXLV+Lm0Q8v-TAsKWu?wkvvu>_`ha`aonHZh&3*Ia z#qSGQ5$Y%Nfqz}NH39?WzkdA+cS0c2)6=Eg7us-DRhC&8u@t5Qzt^V4$fZO?do)uZ%=o4?n2(Ba8zH_y_Z7y zdvzH?*qhY{YfM?a6Abj8HFNS8Y+v6U+MpKcLPsnd2am*BkWF|=(xeU1$4P9K!y{9= z7=A}nj{ArCmkcC*2hBV+{K{#sw6C#b4@Uj_=RF*hm7N_v=wSADvSt3~&(0`Ob4?o? z{@yq;UWH~8MJS|d!c(=+eeG$xFDK6V9JNx)Fod1 z8_&CZ#!L``(&8hM5#NyYm3qW6t&73S%d6z&b%dkfJ^OUhg*Rr@sau&;J|dbqh(_Uj z{jQ#YK}1#-o!rIoav4Rg!sWkVTPLS0$v029gZ}kfF8R-&&b`Td)~RfgN6b{o>=O74 zRg{A18yHmgTPl^tO)=|+8Zbu)(?o)4PZyeO)9w^epQ0-q6H!s^JI$+1Gv4!o+&ny? zhGjSi205Rr!*YiMZ#uW8YVrJ!wwf1KnS2&P$1f#mh>nN6TWd>K3-XDGqyVnm}| zMZ_X|;r_FJn-x;N2OM%t!yChlay~*JDA8IR)|4=g08Ai1ofQN<}Sy=Ur zxp@_~j)gw`}z%XE-j0$ubsFHJgo@yLz7exA$x z3)cKC5hhd>?SlO?XDMNCTde*K8=0^6lALg^m`+~(zStG5XKd^V zK}WUYvBSIdb#>U`9U)<1VIjC2rmT>1Jzac?J!l-G9aHj|xMaxjmkv(>&c#B{;HBma zRcM&{>onaAx4yz&Yp9)Bpkg4iHOE;iEzZM4$Q^yRMK|FEkL%q6mg$f8lY<$W>{O`r zG93GW>37j7Mdm>Ll|WR9=BMyb|LC|RJL2x2jcU7k81OLbSQF@AsRJ> z#%qlnJ(c-QByp9G`ZLu`>g{uVV0t6PGY;Fh>wrW}S@FIj6)72nd{b5DCnL9tp_-nN zhYwV8bel#@T$l<%Q64_ShN9?BkBK2P%7?JxM2Khk`sbz3R0}iHu7(?!5t;gBkgC7l z1H^BwS$w~UV>%8raSUVV?#UGpO3{7DjS*c>$tCB5C{%h7w$i0%=I_h>qzS6ys(N{E zduh4(7}TxdJtF9L0-v!j$4TyBPm|EU*aakJWW_e$VTcr~FmE|gaQc(ucaqVGvZgqP+&ErEhTEy_dsFIA!m`)r~dv#hfD0ywc8Eue;vuyuWLfNXzkSzzQg)X ziP#a2p8&?&-T&Na7cgOD*eB_a5uy9il#YE}1=Ax(_9__qL)KL>0GzBVw$9`V)ZXF7 zJ0&t)u;EN)xkT!e**lbEo|{$(GOp3v~K)#oW3 zCVo(OmIlHE7EL(@@f=_UzMIXGmSpF5vypiRb6$^294%yFXL7`I6q4Ts(z#>YrhSjNsKcA(>pw1@1 z(S=?*R50BA^|xLx?F_%-FFOp8ks_i>g7TWpok`cu^q<|}qToFg$73SkZR(D+J6C== zlrI9wz@}tj%Akcy3|pOI?|PS+2RfMGv(JBV#3U&p^{z#F`LqOy{oT{*bO)6w*{#=U zRW~N1KATYE_B9KtbD-OLZb&LP#ocUk<+2Z8rdGgosp2Q9TV;}K*5`;iGIWXmf6xKrg9tJ;^nvC4(QZpZ#>S6-9(WV5|34CWc)U<24&3v3 z`A=i0C&hA~b`IaQvDVD67emT|G%6)?Xf~fmuAC@*+>?gixeB4DqNhpTu*zxW&=KC6 z3Y>-$7P^j+-c$nc@aWn+idzmO9Jeacbfkde%=TsUw%}z*WGoOhoOh2 zj{9>13RW?xR29xAh6h}7o=rofb5tWDOCgg1BRvh7H1g$J)QUFQV_yklV=D|)42A7T z0Si0H$1c$qFTJ7pwkagPsx-XEPav{%)pi8UlnY$LiA_P|fYlR%&7^|sq+q~a3g}8b zlnS0qf@qw?&&deRFe)#USSp>lCWXX7ALt_!;A1L%{xJva(%`-|o1MFUw>vl$8PA|= z*dR*%a0)+fn1WNzg4xuMD<$V@_|FL7q+%rOo-*m4zF6QuUPoUA$o(TZS>R$onFo}> zGJu91ymkzd%AK=SU zxeuCz=^lVGA4v-;kFpO6kD()t+RK38_gjSmEx!D(Es@#oO&8}heFz>yvLTZZO~6Y) zj>E-Dknpxs1vGc9f4N_<5sZBMM%jA4?Y6w%$K0oIKBmyI*mT^q-Wqu7{&&`U8RCDh zWb1z7)#6v~-LTPx|4~IsJl?@?uIQP3GA~TmVV6N5&VF(!+|t%2zInDtx;!X3-wk<2 z`D{&H;iP?X7OJb`FGj6wEUb}bc8}3jGTKv@|3H^mWwrP(O}=S2$SxXIe^`CvTe=bJ zG$!(FKqEo2pb$uwNxTZR8#3e{li4oBeNML<_4M>G5GCd1-P3MufuohO0Mss)6)vzY z&xS7(e*E~MtM*FBFvBsre_I(XDBwnt{mF&m2#A(cWuRoPUGG>q0!HT^ba7%*0%zVs zh8K{j`!ik{bWNw2g7XG?fLWP1q}^HaX3z%p4Lw~1lfg!sg{>( zZ}|tjzVdfdt6{Bh?5%r?FHNI);JSj~Vo>hm*RM8nfWT;;j)k_}nX8-P6P|UM@auH% z$ga$9*3pRr@##PR)d~q7Q zno9Q8Y#^v~+FiZc@|7Ef2t41k>`P@=-&-q6UaFt8=#p&vr;Skb_m|yiy9`1oDk)*+ z1s<84owi-dww})JE-5pgTzy+srrP^P=w8Enh9D((a=*&=Lo3%rz&%Uf4!gzq)Fe8F z^CYrmJm~K0TV9N2zGxrLeExi)huRVwL3!=k;;O=>Z%L6}gwL+$@%eq)u(7KMbUyf_ z#lkZeBlZDgCa40m1O?=>KaxBGc77?j{w`$+xX#TBvYbyEVucmKHIYjif6$ zUjLOedb%YB;CL(Yv6A*o#mpshtgK8t0)|$h~99( zBa0jAM7#Z*_}vM7-yfiX>Fedrp0im5sWB`K%6xm8(6xC8VQ>}l?Kfb!!hufFZ=|T< zk58f)KT&fK7GLd6l7k_ER$@IneNDLiGqeogvEZ&EAI`il_alfb&i$Gpwto0sIs(zu z5AFXLNs}tP=B_T2qD8pZxEQ#Tn|5HT=tV{s@hStiXgcW0dOZ%ec^%CVmu$O3w^!%| zIiv)GsRj|!lGE_M8eOLZ?Hg$2qFHUl$fl1XhbrFxVyMk6>VA7Fh+Kz2UPA8p)%wnD zei^(s|Fuae(jQF^y9F740y7ZcE9=nl6o0`6m;HvWQh=rXa@Sf3`p4lM9{*%j^PyA# zW$ea>-o<^m-Y6uGjpr*jF1z}D6$>RH4gFmpiW6BTqb~xkjr$eE8`<_6ucr*uHcxEDWZ@cmo`=2-3@Ud9a=DPx6Aq$oB5ER1_YW$gIo!GANKc$#-bn_ zd^br0Re7JaPX}C+*QH-Ogabo60E^(|i4LCK%Pvcm4~=gSh@^&uD>~$}=tEu-nf@&9 zEA)4wdlJtC>W9wt!^2=+!se5Blo@nTX=6DdKidSw?kb?r%fs7Wdn?12nwt`o0Z!Yw zig1V~x*;DEF>RiOS$VgYM<hNpS!ow}E_RVK{_q#t2t03I(e?FM9 zQaAIFc)<;a9W@wXMV> zsLi_CkL7TCn|L0Vz&09yK|@i1rd<=Gi*R%LHr16gu_WS|Ko=)Gf#s)3zC^@l<5_{6~d%8jszi84cWeNiZUwEuMbFc!+6XX#O#SCBk%Oqd z!YJ0JnVDz&1~7Pla2~F|Rg}@ha5Ka(x-AaM7o;?=X6N|yJ#d$I@3LMk0LzYP_3g2) zVM@$Jwe){X9KJs&{r;GfaF`^1x-Eg0Ci(b(xrc#>rfa5QM_+ZQY^vc5*I;t}Y7WPl zI8t`u=(su_p5SpBrCWD{96cJD43S#1g2yB0?!V?q+1qKpU*`cYV%l~-Zh{Eu(rzK7 zBmg1(s>u!9pZ48_hyO7osO5+XDA#~L@28MObCi)4Pxt)? zaws4&#LPK5l0|n&Y=EY!iv`lumuV!)7)WDK}wZRyj0`0!-OM|;gde2DP*5Tpw>_}{mDT~@_Eq=*^} z)y>oj^zK0G9SS_|t@K|UXem5sz4`e)M36!-;b5);Vrysv*ZqA$<9uT%anKq9ti7+- z3nEkW>-jxtsgaL7Nw*x?++jQsKn~LbKW4&5j;E%LnVBl$vzD8)6j1%h&}P}YKcNR)8kDr)yp+OA1Age9u2lfjtTL=U`rR{Atb_}M zM41?|#@w|Ik-zRd+|7sC1VWhH8hHf5Hz*-C`^OLnybUQ@nGy6O6gij?AQq%{G0ne@ zQoXxiBglX@K482YXZo(KFf&*sa0(>txN0m6?=U>3U77f;hB> zdZcvUaF(UzW*h7;sN~iN45Pe~JZQGCNW=w#**-e>zXd%>YCmY6v$jjo`aPtq(Q8~7 z%o@E0Wh}Usd&^VGAcg1-Ll_<^u(hHCApU*X_cxB7(01ie2sRqefl<)F!Wb2dmw?5_ zK#2&oY-~~y4d`t#_~-MuPz$#kdaa;s=osxVA}@7AMn?r^^-ROFzOIa0@fGK)%fiBg z)B@%(46boP{X%)owR{NC{y{MmR;CU&(qtbk{(T!r#8e6W{zbs=LXgw%U)LOY*!-7N zj~kknVE>)#M;=-O{IN+CN0fRYXF&>iK_?Htefw5WRJ5FC`SzwM(Q4Eq!r%LtPurawwFb)W9SP-^|r#{$omSEU3fDY5mv z8cS{YHP^kQgoFi!%R`0zLAM|Z^ke`UfI;IUN`OQ4V|u#Iu9(VS3kDE~ee+IYpLJEz zc~lOSyx!|KVmKZSjB{_9yU)_pLA(1V2D9$zrXe6z=&sE9t};H)$WW4Lo77NM#R1Gn z6Xyd;TZ3$Tw8UaNH({el81%M~xvCrapZ?ipCyR^%Enc*j1Az9$!Lb&?I@&B<`BC}5 zGg#5f;mUZH=Nm@V!Iu|&L6_a#*jk)p8_C+76gfJMilXG^pXatq*XUmKroJHyILl&y zX`3OzekonaE1-BTgLO^43flF>VRgU#AEg*GEqsK2LtWD;Dc1_P@_cOc=krriLRwo} z$C-zRhuQh~Hsj_Up@~7!jYUU6QDl21WU_f{;-l|zrKF6<8*L82VxD7XfL9xjEy_zsB^sWYElcC^c5C2d$!kyWqy24&sg%M z@m7&xcS43Z{;$pEJe$`s^VRF?59LnQie3O6D>^I}esbdX|G?n4ZxgicMG7vQ&R^aP z+6!l1(9b`iY;c}p6B1V~dpukjAoER%UrN(Sdw{>Nus;@r)1LY_(9uF1NDhDRR~^#J zogPeMwXAVXSd`S%(Sm{NcaFbiwjw+JH!gp0zVFgF8#V3v;l{W97=e^b*IUq0)u~Tj zuD!#A4uPpkOIBT1&uS9rdA~~kd#QopI+Y&TxQVylxybaOUR=6-2a^XQxG`ozGmT^G z#+}H?)xObRYu{;qY#uJdiIDzb_6$1VF^KO=L``1mbiKtH?i{!0;xVDO?1Xjn{Iyb1 z#vX(dJLv;bjf!2Q6=+?`?&udzdi3C@-V1o;Kv+k2%|dPlD|u2-M#mU>qCXJucCvuC zp<@r^*{Da@&iJ!_N7C)G+tfJ`F?0PedrN$6-F>KOPsbMN_Vv951QPnXO3!~*osy67 zaJcZ_)hdeu!>Am%oqpX{2D!l)3_#O4N6oe3NIJ!sLur*9Z{@4fvJ)h`-x*%d;KD= zKVE)*y{kgt023?w^3ujg-~G-)i&2kG7$+U&g!~UNIqs#eq)tw3`QWFF8H*Nk1?)Qs zR3JA6e4=9Hu52#@`Jm;#WQ_G{%bHXih;{2UB@OLi2-@f0adV6*d2m(G6_{i}Pozl1 ztgge<9TY8~Uko_5ryXvYx-OHngkFU-`MH>lB^9EC;lkJ6O30iL&?ou)Q&ISBDt=^S z4_u7OV*@=abv*|;y7##-vJsb5gwAOg?)~=x*cc`KCDb9OiO!BfmrSrPLi9z;C8Q_~ z7ESV<_oY_>dsSMxM923p34%p%BN|>Aqvt>}<}`mNNBu1wzuCqdEIok-L#Nr^9_zAt zO`o+ymVcSQM32To7*XxhgF#LdqIu=5GornptMgP~1k$b4o6IV2b>5{xKUjDtEZ6C0 zSlOz{F!o~W9soivRT~U8f|TuMe2u$ei=fi{PtQDc6*9&h^-~aQH2pcNVj_!V2I6OU z&Hy{#viF%_W7lqS4h|hUdr-2#5CyyV)Ly^m_c^bdKSaVn1N5ljHDC)+a>Ym#wzMbZ z_Gp5Mk(|nobpY2zsrVu8S?Z(s4v32h+5$1|@%r5e#MOE9?*b&%3V^O^n0X@<6lx9f z(%`^)h?(<3w(gftkC!`YtrZl6(K#Pe<8|5|n8NBV=AT$N$!(GpJ;AWa_tiRH6uk`? zAl}{o+nCY5nz?^@-h7Qo&?vG3k|IGBJPfq0++X=(7g>8!e}cH)!~PLwnb0Guut3}) zK;|{IvN2*UA3|(xy0t`rUQ@GH!a5uf)SXYkVFeH!O*9<H!n$6iFY3ARq3Ix=n|!_g z5qh8)puk?4(GO|nD_}3T3PGywXL%E`;O*wcbCOV{&@xL5HPGD$+3_^t&?99dNCU=s z=lr`N)b(fmyY&B!A!tICh+^THN(%w?3Nj~K$-Gz@nG?SO4eiulWOmoHA**SlPp*NP z{fp^8zGy&FJp9ep`ZJ$Qnh^TN$ko;WC`yN0$8pd>W(emjh_)@Tf&$?_nHZ^C%Fz)U z!%YdkOL)qg$)$R^)U4JtQ)osz0mV+WgZ;oQv@xL|pGq3MvPF852{Ic^)Eq;kf$5=e znA9i|5(W7(8v&VS8v24Iyth@%E-8afoUy3PJK89I>nvXlI{AQm_G_h~Kw;7pFe%Oy z^S=z2W=rSr3U0Xmp(i|Jd8l~sPNBR9;UT# z`3k_q*Vj=C^zeR+u+v`sumSdp??gPf)+ZYxx|yf?tk6IT`g8lk9{wnZX^blCx>oiV zMNbKvwsN^|!>}EUFjb%@>i&)pF$En^;$jB4zwO)X(yy#rCUwhK1qlM4f>Godk^PK^ z1H5=BXavzylfaPgip4Qr2L172hTbJwONX9!%8HEX2A$sVF7s^M^t;cYz=zDAjz5H8 zMUz7MsOTBt@r8c9l&(Sqh`TS=pWFvC#Y~YA0y|PtOyigdd_o2)|BKB(I@Yo(q|(3k zkMpz8`u<&4o+u8FB~iUPkjlZFNx0x_D=~<#xGY`!?&iC+S3L<*PF{u40f^_v!Ff`l zAeerjpAmO?dU#)>ihDDL(e>mOB^y-VH!lm>W*so9DY_dT9C2?*N55)2P+6qW344&%waZ zTJZURR|pW)E2jjVqu*u?hFBmtE;#jb=gIm|dC#RVr>&;j)875~H59P+@yL#|0X0|T zPv2PXmj4+-lhvJEZ-;sD<=kHDmN6;xAPDqns$ek7u8d43mk#D>N=>MT&M&uT{k05? znDF)l@7gQ+hR0#K@St9|7|?BEao3kNJW>rSb*h+Bb9vw7O8B(2qO^gYZK|i>g}9Yg zPj7{qp4lWdcK;ph(hySQHyaGH63RFk6x+a*!UG4{+`?9Ohn<<-)ykLBt0HaB=4YA} zhUC3>#Ki?3tarcc-)@>L3jLTXZV{{*`;sC*)TS!8H2Rw$m7p2c1PX{KdU}B;DR$>G?gr zi~7I(Th8UFQe5A+s94EU#fTajRb$#@mCk0h8NY-q-nUZWBwyMMRUK1T4m@SLXfDF7 zz&c}(rKSt+iJC3OxWX}nAJvw87;+KF#>Qidp<<_`ucU4@_YLu&Z9MT?w5pemCM0f9XCgAD0&L%81kUry7@$x?|$vNjXj`CN6vt2n)L9$jHj%C>tSfH#XG89(~%U z1fOOp7W)ok%KS$it!e$ocTMC;nA}3zhIJF}y>IXG720xfasTiE??xMP@qsd)>5pB( zJf@v@?JY)FO>@yPYphiWHW5*Yi3y+UGkAh{zC}wj!`$+-Va$~leXlvsalRfkOkDAw z!%DSgzq+(b@)-Xd7mqBJry9=E58rknyY?%*M2HzV+Z-J=k-gUBOZ|}!!{6+&&j+4` z<;5%h7geleqwKI592jvOUNnaZ*`-}9Y&A43M0xNdICjxE=pVuPOacbT#+Jqi>j6Ir zAqzVJzc}G#jQ;hU)Gc^G_%mgV0pF?AbYY@@J?H=Z#PW!%o!@SuuS`qf`2YD@Nfo77 zDPhnY`MI*vF+0l$-lL(V_3dGs|6c(Rnk{T^Cqfm$Z&HIjeDkzC78NL$n3(wK)2DVq z!Iltk2Iyz3B|d?Pg74L~c+jfFM#RL&cY&Ztn{0>TrL6ZmFQSQwiBF$Dk3MXS2#^pL zw;n~Q(%cM?LMT=kvI_}aeLVSY{3!L&&FLRMQc_bf(r-u3%sfCSIy!QF9UCh&;MKFV zOa}GS6(%Mozv&?89!UjX$dy-AEN*Vb!_52i_eBLU-~#!tyc}V(;KU$vp5=*HnlbDFLXf3txrPdKCM_X#2O6ed>$G(3* zXXcOj?>p!F@1Aq-@80uUp7(vveV*rqTN4l3fUYD5Ny?mUupcaCX=#8tHU`eU+ini} zjo-q;qVB*;0rBxg=R)H9HD=tgt+Vr!986ewQ{+yiI5x4T2WRKxR5AuvQ?v9Y5JVNJ zwq@UW&bIwvn!aJ4hY7RbE-m>pZI}jbz`1W)YD1w^HU)o7t}%uM!E^(5Uxix^5X{UH z(BZ2&+k5+4D<(cZ#nuXCiyI>>qL|^BVKtUu;7t6iQahQ(%?H1S6?b@^!y@&dyd0^m%AxW+t_k@Y?fm_w&7@qMX;Hv68OQQM;x3f&wKn zr!P&O1}@rpVDZJJqy*H|)F8u%2y`-y#*BHHJ~)E@=I{?=o|mG4l*s)qGPqsy!-lW7 zw|9Pd`Eps`UeTASl8`QWlB(|7a7AC=l~7WYp7ke*m=f6b`N8(*2J%$(oi6_PDGS7t zBY87+*a;U=EeJGx<9qWMJv~-?`w?p&t*3WUo%2%`lbJsF2>xnr?)K7FVxkbv%1oo=cy zpkZ-=fmJoeQJ#v5iVy^Y!BP~yxeOk~@UpXPAavAjHRnfq^feV`EQRyN55>sK3+ur1 zy&N9?7GBjznaT8a51egFLixYDfFMp=n$qaSA0MMVD-YnJ`GP{CqQ)U1IxVfOe2}A~V`5sGDS=SB zU3Vii6bYC@zUkWoy7xAT=9~*s7cLak)k!g9_7SISv76g-9nR)vDCqVALCY&ETEW~K z6B83T+FUayXXgaB)^HN@IuiMEe0*GKLwNc`N#xwQguFa?$OUh3fHN^6g*Z7n-hcX3 z71}ACr_`(DL?SWPz6@#Jmae9*{_Q~%i)Ez0;6d7ZLqr0#rBP^T9mn6EQ_NaO1bEY}aISJc z`fkqX10bR2*Vog5;ZOts@H9%{@p8HW6S0<0G(4u8?h1*BbOU+b-L+{wKzMreCQAo} zg`vVerE@`mb!iDjP{k)&zt`O6O$ip;CmkL}@z9!XEmYv~n*Y#C8yFfg4i46SAO`bY z9#I%#~$_yszk1oNdZK9tSX~B#k#DQ|kWQz89Afn|QuqSqGDnl8hW2B%v!RpaVnOhIMD-{ZF+(z^SaFq6mzJvY-;n1^FA7DFcJi ze1@`*JeavUgym_gtVC|=bz>DJ^TEMEBaoy3bhW$(#M`%9S}@OUcV3Q(i6K%brrzGl zv-eiiC2!3+7OG2kI%@;qQ0$g_Fs=S#cjGW zKszv+w$HCpMMXvPzdlyWF^I;1nOez9oX=I{K<6_|l9H3L?(Ubt$eM88t*GO@rINEr ziEMFDOk~PMMn)2mm$Du|X4Tg_mXa6xQpK@X3=A%lNF;RheqB<5vQkK&!yTNmo{lfu z5I9Du;(bWM4deDFdWB-a=NER9?gGZUo@s zVfxBSnX;g2Q6>Q#^ry)igI&(naGMP5G)_3n0)fV>FGb5U6z5&}&zeNWNb>(HZ2sQ2 aLz%M|Zu%)n!3dy@B4lo2jjP1oiTf{1J8B;Q literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/Results/FigureFiles/Phasespace.png b/doc/src/LectureNotes/testbook/Results/FigureFiles/Phasespace.png new file mode 100644 index 0000000000000000000000000000000000000000..b40ed4c2c57b5aa3e9728f34beff63f86f2fc78c GIT binary patch literal 18663 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/Results/FigureFiles/RadialGVV.png b/doc/src/LectureNotes/testbook/Results/FigureFiles/RadialGVV.png new file mode 100644 index 0000000000000000000000000000000000000000..17714bf4435591740b44b446c54fe0573fa23f7b GIT binary patch literal 8339 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

  • 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 G;{O55vz*=l literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/.doctrees/chapter2.doctree b/doc/src/LectureNotes/testbook/_build/.doctrees/chapter2.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f6c9db0c0ae8df3184ccfdd9dbea5425531ec1a7 GIT binary patch literal 245698 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 RGXp5MXj4o0zdU1I{5KJ|-gp22 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/.doctrees/chapter4.doctree b/doc/src/LectureNotes/testbook/_build/.doctrees/chapter4.doctree new file mode 100644 index 0000000000000000000000000000000000000000..60ac7714448f7213160905107dbdb6406757390e GIT binary patch literal 277860 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%0Dxv390U)MC2lVs_(PkMj82e)``L)gC)|Q$6cy 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 U`eVu=q5Z(BuPuRgdUCfLvzQIaTKQJ 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≈FI}a;i9v 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 K0@l`EdjCJImb1zL literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/.doctrees/chapter6.doctree b/doc/src/LectureNotes/testbook/_build/.doctrees/chapter6.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6ea3af8198886a13d6cc5ccde816c9b5f99dcf9d GIT binary patch literal 398342 zcmeFaY0Tu>l^FJ(p5FFpm*#mE$#Ut zH7J~Fz51f5h`*UsNIImQw-b>Clj zQ+P{w``fP`z{NK$(UQ5yrSs1WSK4D*W8GNS&}f-c%vWA#==;$jxAvZTs>`pv@<9>a zJazH>Eu8{ztXIOPZJIhiqb$o1Y1;yHJn-KTSrb4#f18mh(}YI&{-#PP+i&l%wjTbV zDQ01Cyw}G*f7_zw-lbQNJ64C=e1g4F&}`ELzhRC?in1#Tlt5qVB5nE8+9P$7~u9e;2@~<_4t;Q9`wc0vCf; zN34rAs*WZ*@c5Xu(qf8_X^irF&@mv7Pvr-~ zd*_9F8242;ANMjGkm8B(y6}eZwYKoE?Gxpr3S}M8<8^AwDDR!axBc^h)jls|qxVw6 z7hu+fF9J`+;PXCweg!^Xff*GZ2x;MA>%FfEUlWkvneept&foM26%HFT1fBMPWwvVq z81Z$OL630(9y+|yho^aGcs}Y+*&fUD?eAk~xGPb86h-x89!Nf6&pg6Dr)7;uN*M;_zC0T}e?ieNzw-1ekDu`d#k{B}&ne|O{qn_kp3$1jnyv!> zy)a%rryd_Q(BFCa=-IQgXR4;!3e6d3<>xPG>O&6o0siutKv~{{Ja`TVj$Q#sw}2i) za||AJGZdbjJ>yh1LXh2@|BPHGXZ#|$_AKl#j5)~XOL_MEEmd2A6nym?@XhC$SMBq6 z*NXggQ>Q%L^NwzCAaNbeU&$P>_xtVLN)Fij@qT&!qbg@`vC7lblT`YdC4#h%Vet=M zJjSq>v9|I7jxOdO;E()ezvaxBXvQoMxxPF-)6^IpV{I;GX))?aEboGVHTA8gdlb`D zF2+!5%;ca0FlKloT#C_W!Hxd#`$4^HR4}M7lw;h|25IhzaZT4XQ?$4zF_6z^Dra4k z_5c~&FH^>xi){%M)A&HtuQXd`V{|Cz-}DI(N~ZH&0|*f}DxZWeVJnZ8+XR?onZY&zzN%~fax0nOvlE{-@7wR=q=?_1oT_qdIg4; zQvILa8NV6>tJICU3VYA2Zz4Nc%LH+Kjcc)Q~ z;lAF|-)qvq6ngFa4e;9|CjL3{%`ZKE94mpz;rWwbNYI>Y#watU8LS8vzZ(N5cVWgJ zKmOKPpe=57&mMPAh)WY-gRAX5FlfLTd3F9#!BXT`!b(_!T_BA-_5t5`%hJKLNMmT; zTX(q-y>eh=Rwbfvb`23P9o zGt*YUfB7c;a_d$--MT8+%NO9@Y_B~7!!o!G#%v1O5d!$kb#ACITX{z#U;Ug^MW~h;sO*%iKD)5;$;? z;BjXV_Oe7q1^^Y!;Q$8P@~E*AW!d+v0I-OArEkN9zTZW2F`$#paO@fQXC5LRMnDA< zP?TW_dGSRU)I*qJ7+=0YU<_Qj9i4n9FGjm(+}d+0z1t3{?vc&&w~pcnn9p=ajX3y* zFg8$WH!qJh{;?N<1Dv;_6-XJqrw?I_XND4El$U!0!Ps&2*(LWFFCX~}-3#G;>u%f= z(Vll53B>%L_T*wTc6U+5p6XM$2NsSXaxcT(8k;~l!JOpoyqqG~+{0jZ!R1?bTi6jq z?mE(4uqfV#e2L(4KjYm6qi@|!*hO%;>qvLOB6gk3jlg+*-&2t6eU$T0N5w8gkFmg5 zx_Du42>8b9-#C(L*N3u(fxZs};x&ndi$d{ou=gRZW3Z0`Uee#cC$Qh$tF*{uL>f;~ z{YtqXk(9r*mHelaWaMF2^*Z(Rka#~Io%4vQ4W|Cm>xUfh7FcOfz4l=_;4>Fgd<4rA z7f&H~Q__AcVmw5ia?pHg{E&E`j1tdy8PM#w`H)oa-xH}`e-r^4ew+aHdPjJ_4n4cu zn?P8Hp=0(tp<@>0xS|+G*yStFAUH2NyL^)J9E!5|m&DLc>R4>}r${PPXqpQ|GUSG$k&-;cOjyD8thTj&3cmk9CwEHKHT zv|(%LgLf3#2VlSZ4pQhH`A)^&J2Ew3n=s#52KybuUp_sUFRu}YjD6-VeEDX}J_P=TH=IE2TD=+N@Kc(T{Oh1jPbg28)vOm$M()21qZ|8j42W?C zit(Au@zyi%=d%m<8gTDcub#YwKQp|D)3cWcg(X)!BnsC~Xd}mMAhUyEpT?hfBcFP< z_mETVp3*+qjz9GgeQ>cHWe12)k(ax=niD{I*C8(KWBl*}!X6QKV{d8u64^(SqxW6Z zT9?@rKbzpw6ZwZ=g7*T%cWwVekY9JOw(8%@>{VezP=xl@e=+o`Xhg%b_TD?#I;IHW zUpHn#F(ZUl_eC>@VdY4`^uXYXnB{(~7_wH@K9=inP|GG-?pByWHL3;y@gT;asb^lH zjvp{y8KMORl;GONz}!GeZi`tOdQxZaTZ&F6dW3BdCWDeTr08zJk5xcSy3jF=TqZpTs) zKyQ2JDJa89d;^#@FjM^Rhm-Sn?rm~je-gm~ew+a7dIKXe^AWiby5|4Z3F|_!V<)Au zr;abGHoq>^uTuq`2(Xa|Q=MaZ9SGm&1}#!IN~vaenu z@Tlm1w@txw!YSMI!w2eKL*(y{dt_^qq#e3;gJ9 z*T`N9o!|P_6L4OyU?MDXQo;PjRSL#9+?ude1xC2>;MfBTHbk^MJ@X>c(bFoeZR|L< z^La1TB)^X!+E146Bed?QGJg0!?^kPNDncK@^ea?AdY_cFk9@&?AdNuMt57c^L&2H` zWg=e1yr(uI8iwU`*s1}Sy#g0-I6U28X%=V3(>)BPo(xY8%k!LK!XDIfCF(7Dq zse<`~3H+V~d|mW!-cc9*2-4G6xi9UB2(^QtF2J^DIbKvnKL-bPCDcP(uzeX;{G6i= z@I(Y{6^UIP$%t)|ZnvHJz4QAXc2AUh9~qX-pF3LISIcPFSz7XG9w!9F_JNb10{`OXJ;7|Qm#;KyBX=yGh1?cIF*W$QZ^mPj-w0XLsT9{~2-#T#Hv zUHXtN7=U>hctrdgSTq}A_ovb z-WMGQEv=_rTgW_!1sSj1zP>8(UT6&=}0FvBKVgm+FE#M5lpI5>RwZjm$_Dv0% z3#yc%z}t&m3xL8FI!|hO(Cu*XuWu`nz1g zJ2}9&l|j})4TNPw?ZP%J!#*>`xk91rvyQ^esY4+AdU1Gq?ES-PuJ?V@d^hC#0E7l( zLJ|A>XFkNC5$@Y1cb%P(skU~`oyP-F_&*$p!c%t6i9X-B1EWOHxYIDFpbt&-Yof(} z^9b*&RREl$Q2*?o-mk%cAX_v2c(Dgp55ggzJFzq(ggANmY6LITOu)(typogG_A1pE zN&o2H2=K?QS^RDFd;sS0EFEi37l6re}_uwd`mwrs)6@=)p=_P`mt7>%v?86r4*WV?6v zz=HIE^A7SjF5QGMk&i5322U5&vwhV8oZ|s;pl5I+#FOA)5sRbX1Q0&9ZHEnfLl_eF z#2FCq+*__53YNCdJe9V@{n2-S`!3{-EbGEO%$B#dpB)LfQwG$DKIQwF=mBmaU$5T37z)u~S@>r3o4$|;hY!yryST(c(B9fgl>olr=OK_kxHlj_9u;2^SP$E; zq^9(*c+l*QQadK+pSw3mkI5ser8x{I55+>SWIt=evdzV}=G%VCqDV)bpZ&5gzsof!!XA*Umr1!9i7C zSb<}o%c2<`Dj7W_@?G!Ba|k~uk<%)G#vbAK5uNkDQWm|sz7u-Zs|49;&h0*M6*hYN z`@kP;7sEr)_Hb?@*aqyQnD_+F*kV7x4V1M$fGS-EV)9@ucS11ySJAY3)6cK`D z07H1nJF4`zTh_NHFmAV(99s{uW*GVSqgNslne}Tr!bJUpBOVOT^15qU2DY5%>w=)Q8*Nq@)d_plzh^Z(r6Dg9me8XVSgL5NRACtRyT zQ46jWdd>!66+2!-o6@A80frq1s+4lu_*e>BaZ zXg>dV6p?^W4jT_yMm!qp%GvRbxUD}3<#hmvFR$S&z6jkS_#R!j5`imq%XjV#)>G^q zAQNbZ>)AU(iEr;fyC$*`uy^Fn8?ra)ovQ6Ipl2MwY0p4w!-o7Zuryc`;LdLk3O!-N zY!91(b9fH9K0MUfc;qvUu{|(mTN4dO!gxb_A&+QB7A%`xXu&g7wxWOA@B!|bnqDx% zjKSt+%iC6}%Me8Z`z%`D8d-U8l#h2FkDrMOEF4IA*|Z5qd;5p|#O$XSYCw2q8}0BT zFtC7OkH*0YjxwI@n^0Sr!nOO2JCH8I%6A$D82<-H92~CPD;fXK9Nl*PBK=ypNP}nk zi}aT+XM+fuSM|CQ3pmd`V5UI$L|P6d&wp}nNFBRh=evfhL47CS^Z?SZ;SkXO_TB*f z+=)dMA^XY8S0nLp<59RK14IrR50Uvl?hTn6QT>G9`^iJ85deMMd;CxVGPz*q~(z5`bVQ&uc9A?DmnncSJ8jMv!H%l^wqPDcn*-cj?0JQ%q%koDv!^#nqic zl3(2qXtuf)6M4bWCm|Ds@E@LMd#hu1cS7q{_v{h$BUQf+I9xStkW}9u&3oe1TPeUH zj3yuA^5y;6yxj8Z2F1d@J8r4*+x+*1gL-e+`w;%`-!J^(`B3E3lVz*BgLqHivpba+ zhf{f>GJ$!)zI?%2FJU{-zR-2s@?Z^Rt?mc-!>9P#_vF?u5#05^xi6pM#?HGtssZ=P z#r=&*+rihc(dcDx_qNI1H@U}0PWi`DT)f*G6CQqWyVnLan!Co`6TCXy?FFyG)p&Up zoK>-fYTI~e&Fjwy$-KB5ArD#p-?^6MuRJ5G{^h^2FV+hdFle$+h;I5244A9pW_uLw zZU^r!djkr4cUA(Zc_^m!B5$4s^mKc0{6frx)C}y|3eqDm0u(;%EP}|<3%cf&RYbOS zY|piYDuJIS2zz4xRG|R%@|SL{UhuztVrCCT@~u?G-POxqy_Q$+pk9tncE>Mhl*>Ep zC)rnmzk9z>hDzjI3AYRdhqOChs&OlNqjGiIX1s(p&>4P*ZBz_e9vz(jj_)*0;?ncq zf5J~aBhCg%v$v;z<%XU2mt{;B0i?!1E4k`Q%}jh#zr$ z1(wUZ<9vf{ij60E$^(% zre{DZ#s`VZ_f7qbK9|tvkU_C)8T4w|%l(PHR0@SgXd05|z@~oI2(~hby8>7n3SoTn zkB9e41Q8&w^cG%58e75csIBAo=&by-{M>-grQ8{@7cW%JK;3ThsbV9{(kb5_1%^UBdOcM@*+N2!=Dhc6m}j!M;JkPf#j^g+PAHl7!Guj3u>X4dYCu1F z1qLm=`;{}mi1lJyfCS~g(7_OSdmh}ieNDx-q!(VE5$x*nc3Jslyij1|m-_;|+mhj> z&3TbDu%Eq(BJT|!TMOHJErwT<3m;omh`0wXNtqH8|<7@(kXzqQjbvL=Pnp* zE6?vFl_PlE$7pxK=I2f-i2ceqKYjhg6R-CzA_DTHnUDrEp{=d_eKaO)=3wAZ1+ONA z+a0v-Z>M1>D39@WO@q>d*R*>trGj@~L178JNgcNM_#vb-Up+sHmEnMOO4bDm1*N~0 z!qI#a)Ya_Yk@YBM1eq#Oz~)&by%gEvFroc+~Lcj=r z-qV1&5+yk6^XLaiSF z?`!?ob^I2==lZ@^Bl_;1cLO9NEr$sHZ}*1aN4<3tL1O#+6rd-RTR^G<<@T++ExHIS zcOB_2SbXlp+K+&C^75(Yg?xOYT7&=Z-X<2gg^Y?IcB|V?A$(Id`T0xaVg!~;yPSG% zNa)W+|I92WuE}88E6i}@@LGT(42AhVdv)$2{Rmup5C>h=jxd3ul;-bXjCZt!A%oY}!rQFE%`)4~1VPB%i!YXzPt4c@;-O!5{~-Ag4p$Hrc;&bEDhBU}0nbT0 zVfT3M(AExyW3LU=nRT1@dc9neWA)y?AkCC+zv_L}10h zw>_Kr&7YV4g&PBX{uYdG8{(_;_kQ_AB@_P2d-?iHZ@7o`%Mg2e$3hV>_Dv^Hl71D2 z3pRtDznmw-s2G->2*Q7OBxWOGIuZull_Eu24rlBi zAB}Ro?eZ7C_|agF0uX%L<>OH*M=(2VKLz-S2v9I`u*n62#-)3ixCmhPG~lf<+Gl6q zJAWr&qX<}G+o_SmsMVW3>jhF~_v>(SzxeKLBU6`6?y1Ps@f=;Ri6f(jnmDq&|NIdA z3CI#M3vadhZ+;VbcbhnYB8$@=gturtKV+8+I@{)gg4g}{Tb5xkh4P9y4)z~EirKr@ zZ2%>=?uxA**)C4Sk(00h^)gwHwmty~MD8&K-_)_c>2aFIw?&!iP@K4CGVC;j0#}}_=ugF8M z>v;-_kcg4}Y=Iisvu^kh-^OF_jew^lMM#C4#;_yP6Ok1AQ{vD6c4#>UQ8feNNEm7# z?S$EGt_dTXk+=20yWVUs(7EjbFXIWqswamyGCTJ{D~J!;VE#n|fNW%}eeiNuB6;}G z5Ad)nfO6TUn15!_JzUk_0j9j#O}g5e{9$QtsYIA4v?hPOE8Fw=E-w#N1kp$s*oc}J z{)#IbO&&cu6`^<#GLD&Stikj^O z(EPVUgyF3(-w2*?<(}X029OfxN9+42z>*4N?CYt>@bCj}{r=Idm&?{|faPO;fMx5v zMdK^KEAM9`fMy%>3h5hp_F1I$1pKEISukqEX8ieZO1;S1e!?OTy0puwr|xB|^b1}M z|L!QV<2~ws@x~Mj0w9;s<|B_{5m3EfS3-4u7P4V5qtT|r<@I0P8<=lxc|HPa&~i1n z-mwsoRT6-F+ zk-C5S*xp$M<(TsF1w@lPdjyPtZ94clWm{Te7yn9Mx_#>>^|(Xw{lc~6yIME@U%$22 z1|i!Grxt9*=?LswneeNpgEE<#7@d&E|oGrvF9BUaDFWTuNE_J!cibs z1(dU1+y+9)+XLwY25Gx$!;&JWum$}BX%YeLoq$>a zgki%Wpucr*fS!_f#}HmG?;>RQeIoDv{c9J(9pqgsnldbed6Wxs@A{61^ZJ+X7wU-o z`}3jv3j#o4>M(-BPOxQPp4t15&4D09a^CjW-6nv?0mD8#i~)JErL7GI@tX&``%y61 z9$s?$<)NHEcz_>H>0i5cO0Sm4Uyko3Ot`c{!;kzmf72-E=inen5*(oJzxxGBk3E54XOt7xE4EZNfYH zM1%3RwZQIAe*0#DHFt_n#Pr>aly?i=C)pLHs8$hl7uSaq}qB}lyG{1og zxzK*doK`qjF3j7lhf?&+OdVKHv69*g`8U5(OsV9VP z#pjL)PRpscAYGVJp1~-ryvPg;th~X0Soxw52yUmy^-)2FO_}~Y_8~Z3XPi) zG(`4OM{+hm{6hO75eoN41oW1YJwlpW-}>PR_TKr&LLncGCLc7P8b2iUXD=$EfZC@n z9TNQcy%9Wio%V}R`1-!5P`()tf&@QMvysOhT{!iOkgV?n`Z*wG*lmiJynZ>zTVT1IbF6Abgr04Hr#hO}{d#CV2k`sm^Ve?9 zt`YcdbJqzPTus%8RaU;A6%v8`zDB$YR;7q6`0xuhg48_?co&?$etON{M0`XLxyvZ0 zpbz!dNAO~>(!8&S+UXzMc%cP(oXeKeo4zCrhdJ66WK^@wcu9d5i=iQ+5 zDOjR}qC!GZ;mCeA_MMO4*1NlmP`ksFF4F|zbI-5qc?zAIlJ@OD;q3Y0eBX3p-0SU% z2)YrwA}omeTNmS@coCwO2J*~Y8rF*kMtI8KW1M=pJ2({LMzDDmbS#{ab{O&`irX%a ziJ}+%gerH0pgzDK6I5iR!&|~ADct)QI=_5TM5yq&FLzrgAck5*AME-(d>rW!wq71U z{bvBvJ=6GW<7==suCAxJI^vrD)qQ{~!a89Y-1EE(My9EAaHfu?dU6Khnef-M*Gviu z)_gk&^hscb`Y&9L%;3{VKztiC3+M4^E(|0-zSV;wEA^H)!UFsHkvzGHaU}hhp0xhF zR5-f#F4j>W-tM%^KL#NA))8!e^r;v@a^G|U{778%=Px0AAX_iJe#lgl8zUKLrpr*d zA~hJGypMf`+TasZlt%*Kk6I5wmhKJYQ?A}Itk;X=2tiJ+t3s2rATkeULqgsHUej*F zNma0C2|PAhvn@zsc-e~3d4m;4`)4S_4ss=vstMhjXoGiEDdt^H^$U+DWKal<;JoEe$UWb|rTK;4& z0eZ-A-m^i;&uLj>7LjpC23+tjL;aa9YnCk1Ap2xEgzM}~RCEpAv#pbTs`?pk zXbNl{3A=8)=&pCK*GHFOE7-1+5ZjHQi)Ux>(xxXd@6RugET z@UQ9OqZk&CKRg52pLlpYh}j7BHR$K%L9K^yDwTuK-fu7tyx-fNb36039_dWWmAR*1ef;>V+pgYWYY!go*7VQF{SzYhes%js!@mKmwmy>Hw(um%tMiYycR#~>ADn+|d*gG<)x9p@4e2uFK4&S50)oI1 zzm)$~`XPV~hY>tD|Frk|D)Tu_F^jq3z0~T}`J4V)cy<0RFUp(>){^<^CHxWPwT+&~?Er=BO$&*M+Lp-tO+)N|O0s;yLR_3B?X>GO{sfqZ6hYYPRuMD^AA zm%dpR=Qg;`rnuo^L;_#qnatJ@!D6{JXMXDdbn;J9ue~OY^PT=G-l)vA9QKuF~_*qkjq!wg~7O2E9B-iJ|`?huQ4aD24#5zUz#Pjx3I3|;}(XX z-ld`t?~jG}2+t~Pl@%Cel%pr*I8#|WY-O!a#XLSE>lb9G*m}triE>o_m zG(L4qGq>2tw6%;&}hZ7hn*Lf10$+OTfo z!~T>k$5GAPr1)Ywj%1x=+Fh7*@X2r@Mzc0v!$g= z%$69re=QF;@UqujA`3IB;N|JK%;9o=`_Y9Zsg~$We$)^~^>wof-;1qHE7h@Dg-v6y zc6J|YxS2SE+&EJk4GJZ$Y}U+Cre=8acI{HBJ}!u5tRS`~!zRg?!@_K6 z*X(Jjr8g^?-3RNofw&}6OwYTi!N?>k<5eB*DXP^p-Ks3}0%7FZNSUa+{nTV_4y#Om zw5lbkQG5HDw3plzOOaJ#1V#Q@MV)gqrZ*Kbt12%M%XZw(uT$h|ylE*!ua_D%YG|$6 zZ3w-7KfbK%n{1AYXZY$ck^mq_CbeM8{b1IjYzn zjLLbCCvmH*XS(xxV^9)SojjgORES~*t*$d&A=81ToK#!2HkIk7*h}Q8MY1t4>xzk$ zVeI(4lq<}QhTBToGsQOS^qk92$rMTsFpI8ubQp^4aIsS2+2UAWWcaqkM)G(p%zA@b zuMb2er)hGQ;#6%)H#(duq?n=2mGHR&$mQqjD!oi2h-%YvlI$c#akiW%>CO;SKz@+g zusO!ESaFbuBPvFqRU_4%<(Da&ZYoHwxkUJ`lU-m$jc6^)-4r<~%xc}-LLcU=dcUMA zoVky(XP)lmV0?nqEj2)<*duHXe_eAzc_vQ57}P zNJ=q{+$M?i20bNdrU|~S#|zFVnQc$g!{G!O4z>2Ij92FI{&GI<3HiK2)X|(XZZ@2C zDv|D!^FGL*>}tl*s{+zol1$su*0P&q8zPg6W7EEx9weP{FKI7j*Dk6|LbJ2lnoBQ} zj3N{M2O*Kd6z#W$Y-2zdbDeI#-53@pgK0_1Ch1|Lrz)$d?bPs!&?unmG)mTyTy0P$ z#{E=}$YpCesYzsVpuBsa9|IJgd*O&1gj+O_D zZtwwx_l1F#Squh=EZ^UB$4+6&W=iCW?rK@Hlx-kWv(Kt#AF0=RgdorJT&}^Q*{o4W zv&*L20V}4o1(eR? z>9{e;&J|0orMv6V%$~?C(R8FS;5QqpO0l{u#hZ4wpB^RBaeQTuK*2hhI8mVIZO{$1 zOeNu%j+W2o2F@a9=2JwaF)wjip6zcmVl%zz7op!5i1#jc=(h|dmrMTN_vCC9J$yUN3UoD|;XNA4_LY#Q{~qPvD!akK%RPjOPCDQ@c1kuG(JWvw-X zS6ED^(!g+MWhyUP#ZA`ErPC~}q4i-^TBkeYCZ83gG~VB^eVbld&U9i~9eKk{iIT1A zbU|#_+wyw0FwMqz*b?!wP%V|R3DGtZxm9(UK}e#IWd)v2ZJa4-@g2+1aYeF=wavOE z_7t<(N{CWT*VS^RKOD>WU?JM=1*#yLR#~8>1`x+NRSOt>zhoC+Cfv zLv=`yFBaXf;-Q9-GMY4!MO&obSGA!in|@pv{~n9a;$QQwSQp6N8=#T)@C_(7hj818(g7T0FC z%2l$1Ip?G&u%IctUC328MxO2{dbKT(-HlRYvdsydUggPRDb2DSA=MR9g9V;5Q}tAv z943)2yUL{SX2FqZrfXH3rNor&tm+N1Sf;zKO)~gU27Z=`jMLzy?r1z@nnJRdt+CP= z&$LrQExk^=ttyVp(;#})c(&4m01IDLR5{r!q+69PiMZHc2{!JkLS=M3H5!U5ENQA> zO7!Yxw=F>CYNjZK=_JiWjiBOFywdMxxM5~yV1m$47jmlA@0GK8 zHi^-_gq5gvQ6OV?$<3T}yw}H3K7~}$<(^c|Z0a)x&+uhxG}DtSBEc-NF{2ggESbp7 zGJ3W(TcqUfG^;ijdODxfHJr3`eTF9Nne1j!3iMFfMX2JEY?^{PVU&73QCm2b2IefO zejPiDCmxyhhXN*n=$vr4Ttn8uwE zR$`iRnP&3jri`!>m*T4ZVFN+4_Kco1MMPQWfR^=cb2hb2wVdLHRGllb?P0N$T`sh0 zvn(%@bfYvLrV-woN3J^Vwh|~m1wep5G-XB?u#sh|^=5yFtgP}djfrhLrzR)k@&xSl z>0;aj23`{;kCWNXuc4QZK85p)L*oXB!N_2)UvwWQBu|MwxQQrwn)rsm2m}|j+lj>?<^X%Y2H{?avNeP;8#62ODQ~1%SG6Q^CF6Lz+ngj-x!W`iNw)I!$tI)Cu=pS|%6FRC9w}r9 zgPu2#9JV03d_qKJkx5|Ls+<{D`cq_vHuXeNrueB@7e*5qE6>_hJ>PH|rYwwQbByx1 z)*0f6o&=u*>sHF^G&@i#s@O`|4ZAX%%|}KO+%A~%f~q(AC2z`Wc6pp6i{Dd$FQ8NFiLZPNpiSBC6>$(EhDLA z47|n{8(2?k;yAM@r#EzehA>QAOgN}QDMZ>NR&4~pBv>t6t{cssQ0|b;M7G=2ks_G| z9+}z(;Q_K?m`t@*pmw9^uX3Ia~*VzhyXP@gR&nzK@>j7Uogq98yT}sQD6nHEqzFw`2a=S8b6zp;WP0%GNWdctW$D6d0NTRGu zbsY@sIytizxRGkkm_jShHSl5~Nxqe&VLr#z zgecGuSFwh$jCzZvyUJ{GD96QfL$G@=H*OF`6pXUurmrqCn8l6AT(O)c>FTW1=_IS; zRyL017>7-k!ATn1QYuy8m!K;~@`h5DI@_tICAXXhpMgoJ^4jcVOsP__(hQa{fR|Hb zoA0`PeN$?;$z=miI=De4tT;GV*XkO?OP(Kw8&8fzWAO2(;e3e9pSj`atPMG{1&i)WY)tD_x`noL%iWT%iJQFqwI z@nvmYs3itzbC53#<^`mL)LK1F9@WeVS4vNqW^KIo{f4TQsrP9`g1`t{c7)iEN1;QyaJBy4Gln3TVDSP}3yR9+`SMN1$kNTuIhaO>&LUR$+`4avFk=nQl3Y z;|tuXws|P`Tq#+5Qd%qdJj9g!}b6(-XM~qe;SOsX)L-TVku68MliYKFiM?o0~A^lEaZ9NiLVjB(ZE_lx?p%4V|m4D>eel5X+j& z8ql6rqqf2vfE#_`gS(n$#>i3Btpu?$z&WyHFO4CZAnlj1)Lqd$FH*fPs zo+_-&e1U`rRx{bF&Fd~xt@V0Va}bBX*+gEe)^mBHff?kJXm0tR@i3g7{xspO{v|b&9mX598Tx zahi89h+)pzqNZXcBA4%t%C$5##1LDy=|ysCCl+kc(9^lKGBY>r&1l>hOe~|3$eW#n zk|hO=s)$W)I4=ODAn>Gj$y92xgh-#5?)4=#j*R8ms1HFzB13Lc8D2@EjkvoY7#wqo zNUqlf&ni)+_%_(sdS{x%x^r}dEyyV)%?j<+nk|%bEob1WYLRYP#hy@Wu%16}=gIg& zZ)B#aq%y1!LnhHqcE~cs&NHLRLN0Dr8(c>aM@I%rO3u_;Sf6sK(YkIK{Z38hwNw>i z2t{s$@zRuI)M6qI!K2jNS*1s48-ga|{;;~H)}}JX5J_S>-9anI&#WvpZ78D*WJi&B zTp=K6#|yQArdy*;o1{0JL^sWWlb2>!?zEoaosFI!42?cJ$O;hDh7cSf*BS7B7`I+(WHpx> zCL0r$wUbF&Md3UMGi=Dt9Ing4kTw?rg|3+U?Df)M{0q zax^{Zm6DBIGd0QZ+QxELGo(6Qy6c4*7i6p6AZ22@8KGno;b+WfhIZ*n9fBEE$;@&~ zt({An;7o7xB>jZNc8VO#$a>u{7>Hm`uwr79+hnJ9vfTg+6ppE$HHhJim{9yG@A3#@ z)%j|7DM_Q11I~>~3Bzi?oDzDC<`AelbJy!GjnFyVhNO%GPD&5!Hj znC~Q#Brj#=6u>uaPSJXNoSTELCK!5_V0dej!i9dkT_rb(xTG?SWoSK@kRU=d4)Pg` zOxzezsMN>!c0G#>HeDpk%?eysKv1Vb^!qBd;EhRjnf7#OzM4}Z3b0`iQ;^er7eQ?h zB;`z^DW$1FZ&|99Mzxxw*10?de!7!RB&XSRH%*Q6c$R_^{B<&i(+q1@A&f}&@w$j~ zn?uORrEH$g59vMx(?L8kPNmzgsfjW%?32Da(g}Q+;M7?&mqjxvmzb1sdL>}?WHFn@ z5wo^j@HI*j)tRu#5bV$dhrrB`-E6Pbo};Lv%8E8)1*>heJR5ERpV`JF!8dOpMI^Q6 zHfFj~tgONMubXM7jEx9Nb0FV_#jU1J@XKmDQ7wT1E~yyWX-r467FWV1kb&^$$8P3R zSgV;)Rjm~_lUS#z2pW?h5JQK^yVGR))+(2&8oh4bG05Qx@9>k%Oq7^1r;Q6tqQ2U| z0^}1ADN)2O%Xd=iCJ&w))v@%N0>0=x*%>Z`?kpv_83!xkh=_BfASJW(MsJ8BgL6fC zOfJj2+?qC5jcm)%or;kHNu;GyY$us!`e5k`id)&vWue-#EtXCq{A7*Nb0YzHnGR1f zu==TfL#&TYzQsw~RA8@9V@V@vvzv61+;HG9%@a0goq9MUa{ zV!PBu9gD{^mch;FM0VL0*b>8FGhtNgbFfy&f@&p55PZ#wAI~8%Et`~T{Ae%+a~r%I zYq^lnYFt3Uuc;7NI~6wxr=tou-CxLgLg;n3%r(V`Y`R7LHr?UfTuKFAOIcv4< zi%UXI3w>utFI*?o@e&yh5PLG6q`bIJCWkIvHltQOc33IHq*n_Uz^Fm$G&RTq3l@ZTmX$XZN8 zmX)-`K|n+wZmQKvob~uIpIlRIEzwnFqg6$-V>boiY(+A1)hYv`bb~MugH%0X!ftpp z*@ZZtoN3Q3H`CxUcn1uxa)tBEiis>iAPQ_Ng+R&-of$cGxHGv}4<)3vq@*@CO1IjH zj-HTk8&a@nYT8wiTpG(DZMRleP1-0=l%4+ed@@EKF_0z|Q=si|vYJZsZ6w_l7!!g^ zZDfY?ssg?e5KJL`O*U0Mq5`34ldAT)(;p9Rad1X7vuG#yc)moT z9BmIch3R(Ff>>S5vPg-RtF0{L1ImSvruIxC4Fu)g8DEx+WOtI?OuDu=w~JgKW?_Yl$A7^Wo(hOCTprw9CvEvnX`a=lCM)h zuhFGjfrBwxo3lzcPjty8xN}b3g=BUj%_Xc{ zrLWFXU`L~BzpzH3DuE|91!abGF@ypyCf6<+*?x~KXS=<4tw>fdckCF2RjJN5+w?$V zO36+UVwhTQ)BwFVaG@NdTGH`ZF*j`#w58@Hos~H_3gvZcl!6FBx-*1YmnNuV;U+nF zIkPH^+x0#^5U8Mn6T-K>R7^^Em840eg4xttT zJj#LJR@mUfwb)6Fafsr_D`J-$O2ri7)iP*wpQ^2=okYSIB{~Gs%kUY^CM~0m_gJcy zW``rJHtbXNb+1F<4Y^ob6jQk=UhEbunajnAY|81Cr!8v=dGqzGCh`q!)Ts(8jxMP- zIab$(!*5c|##H&vrrxU8f&IgJ8#PfJrZ;>OVYAuc&|ninHK9ybq*n_kUPYN(T4+LrH5_g;zRxbW$}| zi9jc7Tr1HSAe{_8Tx8HiiB+AnkU=&jwgs|ATDAFHu~jbB;svpUG>HL0_JlQ($=NBQ zywvh_qS6&aSih{qR1rJXO>V$u9yIC+wuctE%%~9JU`=TWm&z43QB9z;gal54nokPc zKrv=R7m+IX04a7x^&U1F>M2AO?1|eZn=TyTtLkpMJQ@|u(P$PQ*Xwi3EUPKhoYIE8 zo``W`jLH&P%8b^umMs&Tj*Ze%wxzl##N6zrru0To5avuu5KG^c8C9odZ!RLtXk=iE z34x~}GBzb`FkNam#~S@XK}ix_l&donEs10ksxU3I2q+Dk%^6P@n2B_%XwmU{J(Wh; zL9a@(jXEq=4jeRtB&}*i$CymlUD@+`v0rq=jZ&@nJ}oGpiI7V5+wnxTPPN9?5>Lry zdZ;T3W|YW6r&w}V-~uF>VM_0B+);D2SteO*#iaXC?6I>`8V%GVkWilCx$-8HV)cH? zi}gclsT;Sd!*#|^D``oTA=_V4S`PTU0K1q(knp-A;mBL9*kjQpM7Bw`NqP7`VDa z>iGGEX>pcG)F9Bx4k6aEnxt5!szM4cSH&Uqqc`|2gmO1isYP0GD0|C6%*)I-78$2# zEIZJ-o=@cH4BB015|%;s^g5K2EnTA`8O3^qucCOrXLf?}Ji#f^D%P#frMAvgN3K=% zV%uP+pgdIEwI$xQRVb92yZuVCyi8YWS*fsEjCVc))ZuC1RVa%-=;0+z5ly2^34+o$ zW|PST%m|z`ab5wjCRZv=p>CB|;rt@&$+$9D&!$uzP36W#*0RXvYEUg=GS+IuQ*Ag? z4{8=GosB6CynI@hAK~nDU_zx}8=0@oK`GH6B^&+91Q|_RQq9$t@l`Xd)iY?w$>zJx zx{XZ|0uu*YrHg38snbH+g8@6NVk+9Fi?gbivkKxOa+{wf%gUh9TE$HYx4RRlY3+~N zJz_9gNRYZr&J$gJHo^NcQ!c8LQ8`WRKGHNkvm5fL!)8UOXKc>fX*vu!IKoda>58`(H{J7EBx)R_{K(425<$F19 zo)9XN)j(cVP)Hp$$vHEtFFNt@CRFDrJyd0$Ip4aOqns zbts9`UZK?YV()>yIKm*UGaPmXbV;1A*byn)-Rdk;bTWEg9%(k~+3t&#Ddfwl(l2U| zdB`!{4Y)E(j-1<@sg0MKqw?%Ry(f`@lx)2{ALi0clY>g$qQj8ps!s5bkt{%bkV!xp z@Z76j*)GcA7#Y?U^-j@BuhgdL*=P{+E%&r}5n{cK8q-S%SsAf}Vxc}A5@3w2)p23e zSvMfEkdCh_bS{mgZONbuW?|>^51_DT))ui&7tduSvS55t zpLuaO-spqQszW)y66Ho?GQ#HhqFCYbF3}ZpRje#F zMtmg>mIU@3lyNmy)tYM>1*mBhtrbHe3#>jEl$<7kfPJIoAP&ny5v1HMPVt&D$r($+ zcFK@aH8?u!fFSm4nQYa_4trR;SB3B#2_cU)RA*|rc*nuO_&FKdE|33z_TKGfb~Vip zW1NYdS$3S<#1PvgD>F9kp6cn6N+qdemXq~!p7(ivhbOZa-2AbkA3D+O`8DF7^C`QfvUBbqe18_gYKN>U`rf2_thB`g*y8qi zC`rQ0ors%0p2#6@krHp6<`sexYh82k)2zYL$6$V+PA^E+5j_g%hwN0QLDW zP@RsiFNK#&MXoq&hkUkWCKWKl$c3NR)NGQMLU4V~vVMm3oN-r`m$jWd@3X8C=74BM z&pdcew5PpCg%YKD!O4a;I!tpe0NT@B04u5UgFF`)(;g~E} zs6FqoX8M;GVd21DoXs*~G0Tp4uRFm(c0mkFd1~@xxYITW=mmMPO(L;=bBX4 zL{eJ0?V1pUf@U0DolBP~krGv&s#^|kg}W}70??z&*%7$(yL9n39hdRLeQokLY}X#V zj%OzTZ!H?(;jxkm$~_(*x*VRf?pVYrKRM6t_Nuu8hA3>06UBOM@~4j6N&a(V92=vF zS!%!^Ei&rrb|p$%TW2nI{5;_|lcV{VTgSGaG#as-uj>#aOEBcZY^pPlUa&=yK6M{fzYH`ZMao!SA;T`PG^;X8=Fz53c%RH?dpYTBihL zzGbiZCQ3~qG`BAdn*A(avFeF-l|UWRQaA2wu+@F6={}Sv zjs%d-pt7g+>};US=PFAHo$W(D331xf^oi}Vdx@LO8^7nmUpQn0mUN@6N#}f!&xdEm zV=epiJhiNL9!U-y>Rz2&xwgej9yAG|5Gm6G6If?aor@@=HQNuhy)nn0wF`1Nlx4ia zR!Y2kkeqp*dil_-0ZK}q>tGqXt|*yf2yDHr$?=>N_8Bdsl(re7=E1K>!L1)bTqf)y z^kU{^*w>}-^%_pc1jl;Mv93OE_QXQVM(k9#(DkE;3_V@M*tlZ8TAn-UKIU0I{9Gxd z-!IEGYu0+L32zuYhl|d+kf8Rrj-$xgEy2m~?oFMe9&%`}R~|LZ_KBS5Qp-tiXC*~6 z9R`&6oSkxddF)Vq6H|J-gifMl*{C|p50-{$8)areCkBrfeup6_ix9v%tket%z*FZunuM|al^(G>zjBR!4lbCN!B9=#lrFF_NKfh+G#`dNPO<`Wvi~0isgDm*316TI#n6pHuvnR z`q&?RSr^NULg`{{N@8T45R&g!X{aG%riGN}apJO9H zN2UB4$hvWU6`gKWR6#Dzl|V}m{cI5RedbeYyA6(vN=kes^)2dcT(jA1p4HKq%a3lA zbJyI#c+nRP&~2^T?H8!yoG+{H5mWSO+DagNe8>}GtW6|3Fc(AMu)Kmjt+@IScaI#J zBck`Ll++Q2T@FkWGuUhF4%{`&KkREi)Yf(V<-j3~oa-yCj_6(hvK)`4T{;tvETl z{#fU^`pSJ74hKejk&)xBrQ@fXLup(h=NZggdr~I!L$fvFzWVfzms3pz?$BKFhBTya zoFY?kss$!Xl&gydo786ntmz~_Ozr6{AvL;^X+Idsa3~nRt0F|!k;S}#v-(H}+S2KT zRC4wSG?|(j2q%G?X0Mxw>1OMfBuY#BoY#VnT&34LUSQ1qnH3sKTM2tAm-yxr52vor zOZIja4=+$z91H1=$3VK5NR%hyZX1C&v&2sd?u^qj!{r#FxYb>|1iT+3H0dk7zRt8* z@Tck^b}6c6^c%*=r#!;RcN>7_q)!|p{F%>I9fR_2e)VY&#RNTI*^k#E+mu(`Jd~;tU>aoqP zm5XYu2Tb8}N?Tw=IP0E3Zf*MnxZYz9yKdG`hli)`n)Ug*O_>QcBAbk#ySd|sq7^>l ze3tRpy<-S&n=2dE{jyQ-4~$}qSLEzSoI^Luv8*7oW#(rIND#0u>gYbc;%U4WBPW^_&wt} z1qA*T4>BkaUrAxhs#WuvY2Q@na1L^B72jwNIA` zVR(Lut)RK;vaZygd=1p`S*~{bl2{jOp&(f&JSf9-{>*clfB8%ECAQF$S=y*>SCgsZ za!Y>u%7uEP$T#FIKjtXP7#zXbgkN!tX8@;gwjUSr+5@$4UxcO9s|x`I@4H?ckCD41 z`z=yQff6m`Y)KeJ&EI@;Q5cV0jP&HT-v%VH$QY7jjkSSSc{i0~9#3a=S{5;N8R~h9 zvKzCd)*vIv05t`!a0yj^i9ZLk!9Xrz=YA3>RLEwVDqQc1^(NH0L)*TdFNHm9@R1)O9f&8-;ix0$zQZw=4Vg2C#Lf{y{;UMJaQC;>=&+<6;rf#IAG`I2cm_ zKk4?k}dPGg+$Xs-03r2AD3T zTCdPdCSIsN{qg2Qd*Y<|ZPjUMjq)Q;WeX~%Vt2&!VQS%&l<`p%pUw(aH~_B}N#>Wj zR+joxZGm-e-xw~v^HKkLI^5Gc_?y`nU)9rd_FTLc)}9`iQ$O1PciGRzl(t}@maQ%i zAD_!*Nuwr&huTlr!`=sx={eX>?ilRAL`s~f9}Zlr2`en8kIQ|si8*e1z+pn9(ii-01Sc_b$O96}rbT}Te6uLLeIG*&nfYmLD z2l(7IfSzR^{&}94Pd!_3Nowq3m9G}MXrVg$ zVc%C>1;8n&oIPvK9BHAQKh}$14!_R`V+BNrsA!hp>}3#oceHozuJ=i=p;S+i+Cl9m zL-xcbatiQ{N)pIxUr^l?j=^E`tOEqO+XG6iNK0R&jFdpzRFSU`ADh|JrmShSIwOXB z)t9|c=Ulzo`IIzhEVtNSE>ruqr-Xa(ky~7Ypog+kI2*3iqNFfY7)izlbyw{MkGpNp ze2;)KnP`=yFe&BbS~tnTnUkxzyQX~u-QjcJzQi*>1EmP4QOnJ3*%(<~iOE-8Pg;R{ zd8{{lNgfv4wwCG*lFalaZ}Vl{*avWyOKDqN=g8T59n0R0SpzOwyt`OJyNw+U@SZN7 z>*CxC_T;vXL7cXx>@09z6JDA6ZBgmAo)}tsEjn{2f2sXfoX>%02y8`P?F4VhPAR_9 z#g{ipfUUZuhu4bY`qPa(CNf#k+X=N-lpsO*pAc?UOc|TI{w5=M94*M^qk+F_#N$JvI>7!+}%t zIGt@JTdnz#&%IG!ZiAX6@~f)MEWD!y+&9|NZhcPC5CVM~!x&oUb`u!gMe9N&9O@-O zqUq=Ld8gZpb}3N2F>$>`m!pcZ@cm|o6e^chQ{p-`AKk~m^x5PO&Yo0TZkWH;j&59& zMKFDo=>Z$dLcds#?QFjHK`jO}Q9ER3DvroIxHy-mJMlW|Igp9MJ$-OGKcpUgHR0L{ z2&)S~X%$#CxvXshb{7_}p7PRqVb$9Pc%JP-6lMeP!RLcD?&~aItON&D*oE!r=P_?0 zfE!)XEbtF!6?~O)+GT_V#8Ph2Q-G9l4Uq#Cv)vwildgiH9a5znO!iJT0KPV_4TmmJ zegZ&UXU1Rxg6V3V)g7!GW%my-*X0@K9nZHNeYl?PyT@eY;@@Vs^*&EeMpozp^F-AW zb%1G{U8rD)2KS(-JF!jf43giU?-?K(1`+i@3GCzIOtcZF?H^vq#~!o$g+)Td?#%I> zIFnf$+YvZ4s()u_P*H(Dw4N0Cu%?PP9I&sQFxo@4m`@nOgA{?ZLc7kUWfd?=s5ksL zYL%15yyxVR6m1UplK>OaZn-r#8vwQlzOwUd8co%ndsWIsb!MEqk=Krf{TtHm&B4b8 z##bFTa0sN99f{JOOUbXJ45V~yY_Hq6G1%o2xZ(w{@4F31I7r;Ll=XapzO@K^!N}PB z1g_Bj!$ZJJ(mckyxQ6|l&iU;scZLPYG~(o^#qUuIOSQH5JOkjc z_jqZ-ZvuUra>%#Y0waiFisy{qV2hrO-&e5X3FfS5iUj%ku(r%~zE5lw@yvQX}<>b(|K0R!!t zf87e1djLY(gqx}R5T2p$YrN$ti#)s+>|(0kuc1NE%6#qB(sZ@jP5c2=H+4TegO@*I zUhZ{{RfAN6=UX0QH+d%3{za+R^}f!h+6`3qJf15+MN)uG=_^^BKAcA1>NVm_r}UJ2 zY4%elKeOpdjx&v{!p#k89^7tsTG;e0uEUMVt0kf?ukA3y^HzF2f5Lhn#d0TrTR6%V zEbYnFGrr`-=SYYzHWfDpu5-#}?ejw8VmbY+TaXn(53FEpt+Vy9h(I#-6&LYAc)0h%=c4O03;tE@qh&Rru0On$d5c)S*{%cfO(=Fp)2By$%f{6;3@U# zmaDZHp z**3Q(=s;thcFP_}vdO(*%53ElR1zA%s1uo|FJ(2Y?(E9-5+-Z)Ah_%3I!US>)(}A8 zTkKgDp}Tt>{q+FFnbJ9GQ?=PmdGe}Nn`v~suIt$e!4yXUlRLfQIR&#hO)_2+cz#u{Y+b&Y z2mY2g_E9CCSCig&q1<<0Mv#xVFSeDrs4Y3YHMKmX)vK3fzGazCrJ^y4u+N3A>R;jhPgP{ zO&*4^j}>7ujb(e<(x9BL5HhX1ZdM+w*K51tBHuk}E#gyk%w^G=SCV30+uzn~PNo}{ zRV+xV96I7bzokZ zsk9esLq_ojj@Hb7#P<+!e8(>@6gQDZ8U+g9sd1Py+-oOZRj%Ck*|8pL)=s$U*;5o> z){C@sGX={M%^p?^bA6IDE6>_VYlsnL^tnxul7M|-d|5IZpDk#g&b=IrZjQ-;_}Fa7 z1)0x+b8R0NPrz*JMKbajOUf3l;$;*|Z8B?+?FMvsNH_p=Ie{gEC->)M<{KGSHT0p@_ENNA*OWDq0Fj2fXxV-Pkg+PBNpQ|=G&kK z9vmpw>3x31_Co7ug}oEu$?^nEdp$*!JDv7vc_oj2m#q3*_R^>>-inC%BRaSptXf*I zVp@#?6{HC+O$@@R)8=?rphuoEM#?&9Ug(Qb_7|?J2?p6u`WjLT=L=Zs2MYV(m!F;v z`kL*YRyw_(kj6ze&Yu>mgfvK%+6Q-$_Z&*-O9+=ZIbEw*k@G=2LypCrXWQYD?w{oW zS^q<8Un|)?hPetp?P_;Hx~iHqXTs|`dV0_t|57c7`BpzOzQ20_N{k%$O2oE_;}?y* zxwCnnf)iQV-b|ENefDfHxQ4cRT`g7!YRO~;`g8_Pxqe2;Jb!G4lP4g81!(I0e9Rpz z_H|Ao$Ix%0+&fT1<+Yab79ig)wjW zYl*stpq{b=0fKmHNelqV1XV{duuh;y@7HCVym54HC)VwEuL**W?RrbcGpi1nV+|IMfL^H@T`s;+VGNtDxe}- z!v${1X3EMM#NmhoK<9jC1-lr2FqFAa-t#G?1&$p zxv|8ufcw(V?tlS%j#t4zaL0prtAc)l>NIeg9*6{Kl`{(@xWxT=_ek8$g5FE(#~!Sg zMxtFnha6)5m`y5xSy!6$cG2VF|ZzM~F6%%@x1w+y4Z%W_q5hIJb2kZ~8hmakLC zLLz|(ym}@Xt*m4tm`_r(IbGkv+v6tfy^HW7K{>#9^EN1 z`nI`n@y!@{;sAG#{Q2ri7qr?ny%b1t1FX`8f__0ao`0PC$du+yPmzludSs?l%5CIO z_oQ2{DXe=V8x}O~`>n}dM|)G!0ivcErzs}g)iY~|pE4gl*2@Pfr;q&%<_h!N zOGT#vLwJM>18ts7>v}byM{jsk&V{K=%Qw^@Qb;ec%uYdacX46DCZ%J~-fUQuj>a6W z^IFUi_eK!|&N>8`0BvLPfaJfMd2z}`Y3bUFbiG`?j_HwX;K6}Xblugo=(YG%bLPE1HYD(dRRXqFRNAKvH)IXZbJ`glak(3 zol=+e)lOXMb-jvYGiY-_i8hw+Y4J2e!C8E;^m>~@Y3J1SlCQ)s0Cz`yfJ~lNTm8_5 zn#JPF%k9uirweZxbc`0hUc}kC69tluQX0$6>m;2?_jE;AGI633^E;(#T9s$m#~iOK z(%DC=^?ceuicgxHV)ap#qc+y#%ulf~bD&88a38Ik8CdBk1?IxjzYi_rU+~Q*;QHFM zUcDHqZI;eTxXrL%<( z{H*mll()k;zq?u~d77Zsd41bu9rkqYnsjvAYuvlQJziXz`JIU};f%z^>vD~16 zYL+4zmoMc;!Pq+7)>bJ+?M|UHPogpC78h}Gbdx3dV1Q%vp83N%O{1_Xs0S$3V;w&V zbA94wbLmE&lq+US%|`Zbc{Y%JSp|u+29FM$s1_vcZNjXeNw@^wBmsv3+`|HV#QTD> zj2QY4SU+Y>;$RH(S23A2yMCU~=QPv%ddN=aAS&0>0Gx8gLmui3QZ@ucy81?Vs{;q^ zpSJa=g(R(>9RJD^=yX9qOp}RWSIal+b|u-Wo14h2W$4i(K7g9RoMxc*_Hw0N>Z>BM zfD^_H_vGz2{hq;q#L?zc%Ii4 zG=b#jC4X@|`j*Nj*UM~D+cS#|v>5EF$a~ALS@issyI4W>zI|24(42NV^Q1i^0BN!` zaN~A2jx7+#`o&YUjoYhaRi|07yL)$o>JfCboQwag*xkwy*;i$V!%;DsX?hvk^KzU@ zjGn}k252JYx&o|5&Q7e|%lF)+CZhhdo<6QQXUN!qKbU*t`O1E&aD&e7mSZkrFXX%H zMnVA^c#0&G`(@QP);$nq&Nr!@8Atos3%#wu9!blf5z=c*UcH3u`f{0HndQFcApt=r z^deVtX28Chftq5!Sk6rP)>JR^74H@6;5%om-?;TopN{kpV}5wuYlH#^3<(ZeUYqsv z*{~BjnF69)@jD(0ClU0!?6P4=Tu>+IqX9JXpU$3HcLxY<VSy$m9+Gdyj}+5 z7}cSS)IVq3$U|)|-rU|GAOlsaw3U1!UO*34wG%N7OaQQLK3s^vx%_B2klKct;BDdZ_fC3qwE%<~K zG$yY+5R~BUbo+uSs+lw?2?*xx^%-#W;wfJEE2xc1kgklpx-FqCx7n@$17%4cTN&WP zgoQ{mNVVXXBf{F9t*{$eL_OKSx_`cW{KT`t(SAnNMU=koc;qqZ#eS#8{HIgcf9kN)XmcB$zPt~j4fl{7C6RSF7#QL!;p5f_aEaFvb zt@cObP925gdO%1_H8Q~~u`--yJ=l#N$eWh+RNJ!F4rR*%s|vVRB6Aw5hxFs5O!6Md zdWbWC)bl}efkfiX4o>U6xnW|oC94LrQu7bm4LrmUb91dDDZ`cjQ;NrP(KaWIlkv(e(?@1^Z?boPFHlWQ6DLw)3=X zfsTHO?olNG1DLA^0F;4+|N5R$p`rm{tDCvufIkH-9AK?#T~pNpJF^j^`SHhGkbBQh zim@IoiIAM$zVV8p=SJg$Njz;Scd~{0pnHNolf0Ivmhj#R|aU=lU4!BRNr9 zJ92aux<~iwpg-<6owk?zWKg#E^UVwkwTL6VP@7ZYt(C>v3faSUzj7_^+&-~e*GRVO z@-m>P_<#&($I~~G=7xX@lqr=59?Q`*`w)C8#J!TUNUU3Nd$F|>6eJ)%c@37Lcm%X! zjtP8oJn^Dt8p3M64H^C(CkTJBeJzXXI7L)=xY0X8=j2p3xGjiIOY(J-fhl-Q4lO5N zHWyi%9aRA^yQ{URxatvxzyJXLViHsVezNT)6~hFqqI2~ntZWU0-R(IVZu#QeEu~rO zPcEbuVLbuAY5HO&%1g*RccFX!rMOVuev*Ja`e+%4SdK}S+swLy8KLpwf-mRWvz~1( zyyf%Hxj={fC919##fDbW4gJ1L7blNL2^~ZJ#hy;uVMVM3Ib095L(FWenDyy`yzGKm zC@K84Nhg#>TlTs3?8$;k((u(Z=t@&i=eRv7pW~oUuk6H>=R)68_9?hhhqW`i?QgkF zZy!Uq^e!s9@U=?C6?E?_G`oJrVw9)BheInyB^X~QBHSb%g z#yzhu%RzQj@Te{UAav8o{@&HAvt~l@(5N51jwolbqo!#>v_V0tVKPljabLv&*Bj8~ zgc7E=dWJfYLA-|BPoMzrRsfRhoqVzOO&?GA#c^>`(vPF%S`U<=wl;Y4_qmi;?%bXb zX*Kg!o+z$|m)<7BQLFjoaBFS63kYF}057ejC1;nb)h6!Zho7!mg~W{EtF=}q^_6$= zBqq1iz1TX@ousLlL?!neB!!S4`VEDK@aQ|_aC0|%8dQUGjqgETZ$riBA;$<>O{0qy zziI+VEd}rhp1L21#0i_-DIazNMJ2B`=w_W*Gc9qvSocY$d!nY7a?(zi3usgc$evvt zRmMtE6xY+8MT$3czVMUMWBok?_~y+bj;fp~i;kY}S~m!Zv?P69jv}1_y@6}ad?LJj zAO&`mGgVl@lgs(iJ0iJPbC6sMsgjoN$LTTZpNp0aH=Gxl5o2+?HEHboUF}Vo4ZwHZ zHSXnRqRe>vu}?<8ai4lcqUk63k~62`G0g(VAMWeP8Y-@JJypVHeabepF19`mJ^`?c zSnhgd+9a2whA!V%`UEVFsoe<>8sqJS(Mk10fP}^nKiJtqiaSRftd(0rxmr0HsEV^} zc+zcQiVZd~o#mb$9gs7@PLDK3wsWF(QE??0dQ#r@>|8?Zk4i+|@&e02Z1|LOa$-TygQf4zf| z$oNn{KH(qS|D{g{e)^kGw;Mg!Iv*E&FTmrsj)F&Mr|&hGm%#DYPCxl%{VJz^_JjG= zF8mkbU;7t-xn&F<*`IFt)w>#a}{dc^T(T%G8_N{z;M_*hO|Bs({ zRTN={X#Sx7;p8VlZM(k@FT>e4S@(M%JQQJ)`1RqRct!jB^*3->{K>nYST}w1?$ew2|MyLP?nH04 zNdNjD(8quJCx5w@;@|x9fAW)`-`Mv*c9_ro|1$Y#@7?&Yw)Wn`uP1vC!>)XEy2fyJ zVB`a1#bP}6X@I0r0xRtNz3q8X3j;Y3{WgNx z5X|LJMyTNgj*G&N4A*`4o1?$j$Eo8tzg*!*@BQx0g}Zo!uqtcE>)3AlfPK*GtvxW{ z#zoza?Rxjo%X@T)O6~f6R*a4N@q3}jU|5bXeDg0HN5YRjUhL-^_3m?{-v1_$ydNgF zubcGN1%Cj4JAS;oKh#6}%1QB$;9{6frr()O(8^zX_vKsOy3_ZZ^Sghjm-prRKm9{q z=pXwIK3RO>KIMP-H~#Kdo#-F_jsNhUxEp1)4y^SjFqvh%6tHP|$^?&qfX#8<#%IAmw$K%2Lh4|n4$C?|)sP@13_rC9q zf9d}J(a(2(=}Y%V-~XKtL9F-9?|bz(sO=VyWy>bk9-V5-_Al*N`3RY zZ%4BaA4b4j`gJ+Rto1iP`bClHAOD7a?k#WOz|a1WL-oJ^```ECz6{lWv%g0!VmH`x zV}Fkr4A!*neT*m(J-xYf<3I1SpLiek9XRWQXZIX2+Q*OPZu)@2?As^4TH?n~yZ#re z?!WviebZMn`LFl^EH3}aclz^J-qyeIx#^!~gs+Z#`%(YB?_A{%UNQf-|MT<1{nUiF z74tVfKc=s4=c|L?)8y~CiO)Z^_SfcLE)oCR|H4}q@AD&&3MHh%D?DF{@nM!8WYr#|)9FW>k1(D&TT9~?1!^-RBa zk^E1`{YijiS%+ydaJ(MCPM`Co~p7_g+LU@;bqo3V};3 zHiiwxWYpfrb6Pw1?Am(|OXV(V?GL-aFKa7iUpp=D_O$--`wh~1qe1xH#_kYTg`@2I z{qJVK`{4}uLBGA0aZB~hKh-9G)$9H#Hw69R|Nc(j`+Cax{A@q<=im5p zcdqgWPdWeK%arq}32#%*pZosz_|-G}MQ8l-oB1UP^X-G*zNJ6&XFudHezlC* zxbOHyxAbd2{?hvRAN`59sqfQ0f4ce~JPg0O`j=rC|7~PiK21S*6K^i?f9L0p#sA?~ zhc5prn($j=vH~`DAAQ-IU*_=s*}VO?Kb`f(_Wj4-_IrP~^3&FS!dspAF+sljt;TQP zKg#!SS+(ZfGs=<1L1;YwGxhEnM9Api7y8GEMrZip#op}kJtIF_iw48FL@f^aob1sF2@P3AEiI| z!G|{d&Zn0B5aO5P4gB!kcn|P-AN(55@A(hkjZ;=ME{Cw54SgK>tM5kh`R8AY{yNV5 z^!Z8j+aE6Q⁣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Ђ1U8;%b>uKCI1*pfenD3__HEF;W(9G4C(EGxU<^GJ|7{A@!kWmPM^IJ%iUsa5moh%amSA!kq&KoY$y8#yeLfG}A7mNA(wJC4Ct{Q^@8b!XyzH zVnXV4W2-k82vBzUJznbr(89&F2D<4Gnj%vGWdsG}rE`Pb)XP>HCWLL90EqE8D$lb; z0qMwRT*k&}agpNoc=+sl_@1DUETXiLf~@)U*)N+L6A^t*%!Bpb?~*w``X$a^P=`!f zkPl=pUz*S$C^~+(!nO*($L(YgLG#NSPlZm#ZRJ*L=xh z<7Xc$ZoX|QUM{5+c$R3V3IJzI7RR~_Y`^5AtAeN*Y>oS|P1BD-cm5vi%scY&kqL0@ z1FRkP>~}KMpvCcyupW6w&1b#JXUR`Yi2;bn1h) z$~uA^WFve1913V=>|-xckF5O{vV+mc0|lCOgeA;6a)bZr2eNF+FEX+OPNnamyK#w) z8KfP7rYIwj&8ONYuV3A{<)dm%2(eU`{?pCxPX45iMK3a|*!}ntamh^J`z5|Zz+7>$rGWb6Og6a%gBJ6|RZ)+d zFIo>ozC{c0AY)D#N(@a%5iSW}0&#uK2OFM#Of(Jl48CB`z@I$}%CQ2%(6t6cxn&GX zmrFuHD)_OQX-9rAAA9yXIck_S-iRBtWO5mre(d<{V?U=IllcNSLf{(^!4f^Eo6)va9Qe*AK4HDBsc?6pR7jjT8ct23ji9_Sh~P_L z(oYd*&?C&6%;XVS7i?hUE$65~^-Rt*qd0>% z86Sb+8Bt|8F=!iz1;!#+L8PeZq_4WV4Uu$V?+_ z4-6peWXw*0Xl4LGp0Z9MEEL9%3d{kD8TJ7tQ2+ DY19F$FD!KFcnMR|7T3H7Gvj znuW-Qu4|GD&oKGTks-bT1$__Km$geF(#iwR78Q_~CP)H;Ggc4;wk368<-lcPZWa*V zm;=w;+x5S zDB^ta!_CE42yrXX4?KeK!-m2-^1|Cj+jzmA^ce-UxTJ+n%Q}MTO~HnDf~!Q}RQ53p z9J-{4+~gfWd{II|e6#iChk?gB1;_AbLGj0e=i-RCCn%^89sJoR_$~M(U>Z1d7>%!f z!X&ICL2?l7h`%>gB_gKCKf-%XY_JTY5kxIV6WcEPfOsU$=?6rdcKDQS{pg2FPDJTZ zo+5qn0kBQ8js&*w!ysgW%@6k}Z3JbMbp%o{h#z>Ez>+`J4mILN7NMsqGLK}h-m1Qpvj zAhVc~0uJ;rVk^)oX-C*j8Sg;!Gvy5qKZY_Ab1L7Ook=4fKf?Lo46oL?wOjUPi>sZQWKW-N^KNBFx zZ^%cJjR=NN_6&ePbGTtl8wgr9n8i|vA-+9s%Lag_2GZMlC z2{$$qV<10sgpjGAoTbpMflLcdNtha#O? zn+*)X&7XaOI~aQj1r$&)qZn*2e2i&kjrf@ak63U;1C8WSckRux&=iYyvFzoJjgnNipD;M6~UkYGcyci=wS>s6s2Y(K&xOMW3{kF z4%3mY5a2gC>B2Odt_)aA{Iu4b|D)RfskViDe0EoP9!pH6SAL6GvMH ztuaUN4w%abD;JexO;JYVFq~TEZa@Sy9*x0>;D+5{b_9uzb!tI@{N3PR6C(IeEzcL( z8F2T&dXLvkzee^t993BmVUMviRbo0&hbT~kGDki4(DIQa$wC=NwwzDlWM)zX@Gz|c z3I_Azf=wAe5{XUO3(wpfg9DvuYS@Ok(?#NkN7%NRx=a=Y?Fjq4IUz*!W9Oo?j|Iil z9~cze@&~yo3xe2;HF563MI3H+GtA%`X8R1B09>2HWHEk+#zR>O!kh6p+(E*Uh3>>Y z0B~&8`7pJFzGS^a2cwt~<&3ofO&My&;V=CFX!1rtl)i^rz&e5^!3Ks6$(Jk^7ym)j zJH3J^6ZKT$)UhBXiY+BJNH2&rQ4_{Avk#6mXRZ|jYe7EZ5B>qyFF_fG=CLl%Sc=TQ z2oYCiao%FA1VZ2=D*_=QY%s3ap?}N!Xnep;d2BgctPvH9ehgX0cnXFPLm38=Fl(SG z`vCeCeTJpQCIJ>0`xvGf8^83l2*)o5Ih@qXrCS(w~h4xrQe8ZM4A22}^ z9M7PDSC-KQ+YIegfe@vG!9&OWp|A;9NC*kDp&z3SvpR`NM+bmG%|$=F!;D7o6S7SQ zdm4iR8jT?0p^{o?LLK6UHWVU8BKTa4!HD$6o@T5HJi|*!1u*gXQa3Tq<}A&PNN?h9 zH##Ct3O6FP$zUL@n`{>5GnP0uEc2Nd%H}$SK#-v`8RUZ6jnL?#3Z?UWo;SjX4IkwXk^^8@H)mL5Z-H#S78BjTf>0{{h&Ik7;W z#KCYaOJE%cPNq#jDdUC~gg>SA@qEBjM2QXW0OLD2!35(9BM?ZzUc?u}*vNweM*1GU zD?a-^t|(%Ilj+E?kGOXP4iU;mez^D8GeT}CKzJn@lyC+q1P~oLgSmA~HW%Ix+?Z?tfxHj|y#FKbG+T^Bh+4YQT|YPP6qCjV zIP#a9tZ9f=u0Mbjf@sBQ4*OPg)N@M^a-2tNK+)r*#! e80rqXRvVDT;fQ9awfp! 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 Ces(SZ literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/CONDUCT.doctree b/doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/CONDUCT.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ea58377570986fd3e828496b99a71b744bac52de GIT binary patch literal 15326 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 Kijq=Yul)}XsOoUc4gae7zfZ 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/README.doctree b/doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/README.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b60e4ad13dce0cf900cc48cf272850ff903dd40a GIT binary patch literal 10888 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/lecturenotes/intro.doctree b/doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/lecturenotes/intro.doctree new file mode 100644 index 0000000000000000000000000000000000000000..debf892cfd31d155191cd2ed5e0a88d24d42b387 GIT binary patch literal 3116 zcmb_eTW=IM6i!Gso6Thjq3H{unpSNUpquUOq3UCiP}@jRg=kTckma2@yEgHRr?w}X zJRs2rB#``u`+xg+X75$S3y4+5$LIQ;i_fdpKcDWc)&G1q(`n_TvZsa4$OgY12{{!m zybJgK4ll!r?-)L|x-uyRzXpy}NR=5X!t)^3eA`m$q%LOsq9wLO`*}FQWy?vYXyM8q zKP8pwoD!##YbZ^At;%ahCizM0ixA}?w)upvq66>YejREDMe99$eyim0*9CD<4Y=Ro z&KWtV9O8}fZOF_b7T-=4w-!Wvw+fy&U)xz#&JP2gUKkoip31i!AH}O6x_(p1g2LIl z- zgdR8dsV*Eqg7}VgrmB6(PV1DMh$H{#!{`q4qI{3q()-Dc{ zg-gt*{W!0SDrZ;d{ya{sE_y+h3{yGIeG8R$8VV_@DJ&Kyn@&eqoCr+DC4x6pYU7xq zOH$$NhTjof&5kX9i>@TFa@fh+h<<%YcOa@Hf$V%UW8smf-KM+^nb&uY9*r zI(J|ydc1tGBIyre02U|-;G+;w@cW7vqY7OQxHFt@;2HI|4W-&-ETfW&3}z%MPr;E)+B@$AT}Ahvv$S5C7z$={HusQs+UOE#-Ipjs2~bdV{yiVAPm6hK?pnEN@Y zv{Yr9UFET!4(O`Xme`_XT_UMtm(t3nK5w#2T0T%QkcpS=X*Y-mehaE6V2<$Ep=+?BfZqG!>+b8~m-0+762pPM67I^`1t@1_DvK#Ke}J%x5bo@;xgdf z_1n!DK;NN?WRXeKwPSd9` z=oh*)_Nyj!%;_1I1CcSR} literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/lecturenotes/markdown.doctree b/doc/src/LectureNotes/testbook/_build/.doctrees/lecturenotes/lecturenotes/markdown.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3d6ebc8b8bc020cfa6164faa4f2a6e86deb37208 GIT binary patch literal 24762 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�rSRy$&Uw}2 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 !_#ljeF_n@##X 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 OMzpUx|K|zzcmE#(I}05E literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/.doctrees/markdown.doctree b/doc/src/LectureNotes/testbook/_build/.doctrees/markdown.doctree new file mode 100644 index 0000000000000000000000000000000000000000..56dd6080f84d91cc5c8c1e5b8d64af026d8d6de8 GIT binary patch literal 24687 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%0D~h5A z&$*V@^Yt14kIw9N)PPV#XKTEPsda%;n`9_uj$R@kf886xF;aJ7Sj(yjN(|wZI+p8} z%{aS9hu}st7z}F*5Y4m7Xz$khQmP3w^A9G9l4a*_bl^;hg+hTw(y_IGjQnLvVusp| zI8$xqMohfx;&h3fdzI_z$Kx?J-Gi#ue4LJ4s)BvZPWW>^t(0ZBj7*pqFDe5hWrqjT zoaGpU9{ZX}jGJ+rph}G}N-H?g0mS9)LQ`OjIyz!Obqj_HMItQTd`-x=VwxuT+)*7x z1;a9G8`zZSVxtO|&hF`=*50dJKz>R=dLlg%Y!_VDnL%$M;i*+zWD=u@NqX*#vA%Vq z(LEm2!BzB2O<)ED#qs8bx|oTR)0LP~QWSDD_m2lTw%vn_^ONv+mGLHy13dO(X2aml zJxYCj)*YEWx|VyC&-l&E7i-QJdoGsEmkP%|$tZXwwgGSaM$8+wc>T^_d{3*0lWwh* zLDnRyBE+lQ8ASn8smd}Z7|z+VX|fw$wCD9$vlYE(_W8a`IhyrP@zr)!%-j~5JfH+F z$A`J%VTg9&#a;ScuxB@wFeIt&)mxObU>Z3UJy7L9(z-6iG>uaQ9>#H+&gFar5n`*8 zQ3|9@unFJTPh_a428BvEm9%!ErryyS(!*e4Ft)c2J2t$rEq*9XB4M~&%0mXV@RdbN zC+Bi83(kPSXNp2Qhgl$KhvAq>o~*vZnHYwPD>M-h5kg^}>0E8Vy~mmM0SGp-=r98T zbFxjh+YMpR=yKbL9#!_;JN&s+Yj_AJ#3P{YbZ=uNaooF^`%*vw-Ryexa#l*4+wY}Q zs@&K>-=`&iEKubRfi=rYSa6hbZg_Hc8N}(PRDoVgch!Um+-9KL6W8ccx{N!#pipW) z+Yg8?Dxbn2D`W^JZPr7$dZfdqnRdUo2b@5uM}Apl+muG`h#v;a8tDa-;zAHl;B_pn zXmUd$vU-b)os>z?tx9Nw3;>tP!jd`=XYLAy%ncQ7SY~M`lZl5^#_bO#6e?**E>wH9 z;QQe;Ub)kFVKEJkgyK-X!z$W@A)NR3cwIT+G#^A0A`kMBhy2?u-9x-STS!N&s94vj zIErvbMInDVVg&w_>HKk|QKQCCUG%OEWoo?aTp1mveRW|mTMzf>+?=_bWcJA+3Bn_&IyD|c@UfVsWhFhZ>0Zv;<{PAqlkNWq99>w^;a90RE_8p zEY+5oGD;p&EVx$&*0hs=Oi^8aFj>yG?ybTV%S`TPi)9~ZJhfepL#)OSX+KQ@C!Tx% zte_^qV$m)(39gII)U@TYLW-njo`X;fv_nPg>h5lJZa13iXlnn;Oobpx&1(mWqWSMTgcvNh+8COHQhUgeYnLJ0RP z)wD;4n~O3Gw?i3T$hawY8cU~^N=Ny_V1_(QJ3>Qia%mC57}a=Gi=KH5j_jVNt+w~M9cok- zvisD(b~Ht+@UlBCIMx`iI^o^rWn@{Od-x~Vc_w`vZKny%BnWgR`kNh)X;~h1SP=PT zxl`m0J|^&GU2B@!NBU05jf{A3Vs*Pd%3B!r{jeRY%TDFz`@J7=pQNa!srwz~^{K;t zv`0BBU51@~&@a-yt_di)?4t5`L1+WN?Om_~6qQ?W=D*^WTIjhxgy-ESv;7|IHF zB^J5Sow5F8JMz*THnmcv1YYZ1=IkjA4(ahICae@{ooaGOdxlE;w7<8wHzlwbSo9g_ zjvCP<5VNPAiTS;Jx?+Zrgdw&uBnsEiI8H4Ebg-^BqC4Ppe7eUwWG7OfO*#O-Y|SQR z4aJLA)pC1#^+~<+B^V|Q#?8TSZ^Q+I*T)G@PL42NQ|@|6b`wSGSYpBLeixkSfxkp2 zhRDzo!-`Wj+AzPI>QL^0PiM=-Z6CF}6A_J1eTLjtq;;uI9?+{Ftr_R}==o@lL5g~O zxVL)K$IWx>nD&?+hA%^;kZ2j-jI}#BY2($m7NrDAnV>ta7>Ori1iGF)v>`kSTU0@& zG;?UoCe!Txac~Lr0{mPM1Ate(q|7ae3WgQbM{r@fs4k!;1~!Sbd*4mW<9x9wv2G&` zh8sVsF)YC|f+Na}!Jw!gc@Wi*h7Cf8SNr=AuGF|@Od#A&N{dJjYR?~4^l#FkrbVxH(~*znqv{9`5K!5R0nywJn*H6g5=Nv9KQ;%s@;ndQ}6FE z#I-3`;;Swd>uq$K5Alb0DLmkpXa=w|x09n-R(U**d+%zeM<0b_n4B5fzN}*G1H4%g zc4V=#xlOA-JhF3!cm-i>Q4xBNG8xY-PmxrDWC)75)jfTr&pkc>S1qVeV-hTUawm&i zaeh7^L>^dP8<=!rr1V3TqTI4oPi3W4BP@wx#AqZ7y3or}lLy+-7h*zKU@enQOa_j$ z_osKULD7u%eR@z*&XsX-CoFnijcY4PQ>{EE4iqIjm=DjpAfck@3c?;fQ}!u4b3MYI z2JgX@oOqNKcnU((%(#bS+`}okvvce0%MzXYlIk9(l-*ApZm@S41HL~TEeL|_qzTl% zv;>(CU9j_5LV496o9N(}89awCqP~NO>qE}M!^4DuCss2%&Pn~wg>++{O5n^$9@Y}m zNtgIzro@^O

    P7_UG}!Lh26$=W>kkNM^^52JN1C*d-3wKzXgzSU0+XFb>07^z1B z>>xUwZR_7o_YuwJnl26!pX{1}qsv{?@>wRyE(6GRhBj&5O z^R0Mtml>bMd&#A|VP}cN_}0l!?yyNn!2gpFt#DTX*hTvc{9f?;W}Z1hcyMx{+4v(|~TkSEo zoZIa)$>#N2n5T?cT<`y{I#KG=vo>$*u`Q)*bD$PA)^n~TKIEY9}c}uO+)!j`o zBF8*zf%l2h%6Fp?$l#h&#*UB!#v|ksxnYIWk0Lv-0Z1x9D#T2|uD>aFD?JXtdAS3i zt(BXUL{YR*AWWd~WlHc9K+{Tj+Osg3>M}8?t=^y(N8MMSDvvCKm0-t6HL2QU={CCB(10L@(u6xJ)-G_S!XS3$*Sgf7wv1(4 zS#*F0ST@`RCMG8(NpqOYv=CA-)k7{ltLt!k;Z}meuQ@PkX*-YCrN@E>g~!Bkc92$M z6NcSlg2=kfz=^J-c1{#e&LuMEgAH_5ckFw4v>*x#`Zy|8h@PU2YtcA4!zKtnaqSHQ#}u6(xKUE{qu{dTov@QJ?eEI#-bh;+nQkR$SSR&_1yE zV3DJx1-4+@px}I7=mUNdfj%z;GaxXbOaE<70XH{pb?`$M+7>$y1Y$V+^ys?rB#JvKeR3Xze6Q=re(fh&u1WJX zRy!y*%@j)neCxxobB)TLs>^hqFKsSj8!Gn-38Hm4$|%kidIDH?B45K|Z(mN{?6sOF z!Mpvumz(pw*}R>I1WmH}?HO*c&Nr}tUe1hbUWpP#S#*#$ypb-wF8H=?%!OFuekKssbPqwW%V3r#VWB}PeG)0Lw3;I$r19*})4P6fByeZ+w) zw`^DL&OiOlETPcd%+DwU8Uo$}_X&XX@NR;v!4U%e?1XjgLWowWlhR+K$>qlkX4FB_ zn}pdlqLt46HfRuh0FlVF;7;GI4QnWzx4*ckpfjDUPf^GyuGoq~sI@L?R7jc?`1TQe zyK%>^m%FJ-XAb4XhK0gYQp7iRsPSvWri@vX_b^ zV>44?#06(g_9ZlkQdw?!a{+aZzz?Thr-K+1n8=f_>w`)>0p$5#GGL#~3ZL3^0 z2!uCoNXcx@-}>yH%9HQJvl~IClVQBc@8nJuOuIwHbI!4c!^ECME#q$c+75bL!gGhA zbF||DzXWMaas%9e9WeK@Y{Aw8DBN49K*W!ckXP6lI7Tup@mw}WGn;%|rkcRQ6rYU2 zQ5yxW)QtAYAD?GiIDsfaoeqt^)eFUMqi*;4Wn_A4KpP6Y{oE z5EcZEHq|yI0Pfd*03gU&xs!Sizj5h$F?q!RAs5}^j}y|-q2BWkg^E&n55m>^iRUYI zMi>jwBvY8Vg?gOeG}-&3OE_+)+#?)vD@0r6!zdl?&D26L?zzS^NNemwf|cdsg{Q5z z+mlsgWAO012Q~MXK z0|(MU&cdw+%q&UXm~z6tI2|3#Om$qwR!^Yt%%2tDn&uG03(?{OD>L}{UgbCs20+nu zm4Yi(y^n5FO5aOI_MQEjoH8~twRY5K5X|LgQhbefvh|YMSYXueOy84#k(Lw#a0tr8n3?njZpPA2_SdhT2PoWEMoBL!(glMlLg?L;q*VZ%IrZ!@c?hpBVICfk~Ik?cHkL4l~X_Z}M zqPu1TYvtG&`}u>lGl0<`wn7vJ64&yw((7Yqa}U%rjmWBa3@9w?7Gq2>vbAWyobR1` zewQ<%gvA}8hML0-uwg;LUh!^1;3xee_?8{sUnot6s0AmqPc=d7)YD;=h!`!{!Q5U!*)60>27!kz1Hej7A@t+*i*8E z_V|o}pK;`ZLxAIH_m7jq`v!bQFE|N;|0nf)#gXH*3o%w)nT(M@Xf1i*RAPR*ZEEPS z*feW~)nnptlO43-_Q8VRCh8g=(J09ssUga4$$P4t5jh6QDtl(3D}(QBQ3I4dRa}$B z^G3AUEbLSsUFzg)v!yJ_T;uz-JIeu&b2KF_*Q^;$+879iG}zJO{pO&8LrrpJ zESBComu)=*?I#K?rh;4_VGiUe*=4-lA!K{3bMP2lDWEH)mQ6RfX6rItixqcf?*xdB zE)SVK?>gu4lmrAZAFGq85~OfdHd=NyQ$=Z`Q+5JS!k|D@SlB5=7Fv$J9@<+mCPM8f zibgP{vYqd3LmEt`z;OQ|Hwm(l33X#ogPNjgDXyaLDmm-*L2h3(b0%$-&onkOsop$y zq~JjVgdy%d%ol#D@GJrZguYCRF6{ba>k&+kH;_>}Kv8&#GLCgkbJGAsJaXf@6POXnnGn#Odk1PR?l|Lh*Fbfo0PKQO zjNi>W_88D?CiwkyxwX4e)41#Yl_LQOnS{EK=DlkuxXqBR2BE3f@t2_s#pFj1uqMx&;`Yo&=-UP4o>cUfEE@CB zF|c+Ik#3ogJL9KmawC>K0eF&!nz(}C*+NeNL2H;|1}7%3(Um)1^kCL}jlSx>K4W_} zxY)d$3o^F}6C_0JLB1*TP1SNDFLaw?Pg?Qdj>H))h#LDg3~E!(?V zqT|bh3g{@tN_e?msiQ-0KJfP!*kj$r8nHp5s0bTKw2RSP2##XG}l!3sl6JOUpn z%9YLK)pI>J4;#dCoMlbss6xq!j?0YCahqs$SWBraI_Kc6-aH~5u2|03f(8HR@#5ty4*w9;1kbzM* z;~2||dG})Y*f#Mz$nrwr{82y4EFdMY9K00UojV3IB(QjH^Ct@vm-`Wzw!OnPC*(F#NPzGQyhXL}B*Ns^IM$puLmscR z3%J@F+#r`Egf5Sq*)Nr%COmYQ&aAo@IiMPkZeIz`HeRCfc)VFL9?!`hY?!~ZNo3fj zWjb15@9}*=uMj}T`nJa9EbN*iojVFcs+znOQWt`X0v=t<@lI%^Y(X`Plvm!s{MR#BJ_ z0-y#HD$8;wx^)01@ zU7VTIjZ$5iQ*#o+jD^_fVyz{{kmBK%9PI&RR#o2OpwEX&g(^VT=k4}THt3Q7e4$|j zYL|%G(T7|Ok4cjEWQ9YESQ%5=+Yn4~ivuU#-b$!O+P0uudCaMGd$>oO z*kbO!Z}Jfoeb54HiH0hqo_JjVtufO>J74M%ME1_L#!sXRQp-uqPfJ>i z7~66L>4fJ?27>8mY7^-`h$M{b7316xfNK?M!*MGq5|uGbj+l|6-w;YfdGmB_0rXig zw5b9p8QL|=fUbZ>JBuKjL9c!1 z5?Pytme$iKn#<^%p@elu5NAuuW`|TOJEwv*LHSW(RB@cQx72kEHCKE=ZGX7Emd)Xc&_`yr^ zqt0e;(&@bj=(mF+G8ihTdr&7<1Ss)64JT&9`jt^|lVZ5zjD5@%xNxKZ7 zUv?xgb!5SgTleE_yNAXJFRLEfh-1VK!Ymi7dr&#;063`EI--3f0D}kq^nlP{j~!Li z+u~cB1!~IhhL~*UY7`4|dU(Vh!|R3AittR^-tl40K8=!@f6J=l6bN@pXyyw-$xd%| z$PTa^!BwYt-;K!x2HQ#wOuF15xCqqrK=bMyJCUKVJ`I~?b=FWNcLQEJ1H>r18(aZ? z=*A(zEUpB%!gIAo9RX;jp zfJcFEV9$nW#MMz1Y}*@4C2`V3*!^1AfSGbx|*I ze$-GmIFLHvmF7sXm}TeziE8@_rwOi(vo!i%#z5XQ1#rntA!Ll3YXFLcHZQv2n04JT)t*5p4(8RW@9rJC z(}Vc_Kxqya?p;aqQ(uanZq(p`;2q>;pSGknKp7nXd09)Z@&sSXW!qt< z2tE{HkDX`-mW1Z=AZug68Oz!A$ zJG-+ED=F>C92A_X2Z4Wp$7JJGbz@OQ=h)R15y!NK?ivg5%OV;AW{-CjF$Wo32*%xx zHvuSv1VcK9?|i<4p6bB;rsYoQ50T@x*b3b}Q@zs3KvEFj?yzaQgg(5WF~zHt$%6{9 z*#QXo4O6Ok#gY-+%-1>{9)!z*qZG!p0lnIvJ1~f$4*VeM4d3y1# zuF9Nb-VWp&D9VN+tk>4@?jYg8Hb6}JSlUMjh@Zl$fwah!O4r%WPeEZ1#|~_GDNnas zQ^0T#%2Kt7fPdNx`(p+&vZj_(JQ~I*C7y)E>*n|(b}U(XNYK|)gD4O7ZGEh6isbbH z^Ve%Dtdn^{#^_cDz#NNUys`<2C$8Quy^F-Ti^5sQ(1{|r^KN1%t!g!CP=*aV%=hc= zem*pGkU%H|4NQE7U{Hhr7+hP@Gbh$=yvAsS>>O|B^vHq0aj3WklOOWH8lalmDV8DY z=?LIATfwk#bq-3n2enKfw*}|np^_FKyOYayz!Bou?dmMqlShIF1UK&-`1sOIG;Q)L zs8(t*5H{{uFX-)y3L_U@$Lkr?{{eGq?2c({%sh84Hi6~5!-AhKvVRV}eB6iEbU+CZ zwZ?AN-^h48AbZXa>eD)AxaN}Q%DtIb0Z&nlv=V>X3xW}z_x&z?RLv0KQ{VR7)gEZcdcn^zG3Q#*LHF!>}sw2e8As*7UI zW{CiD;Hp6Z*Sn7rkPGx6O^vwnShAE&aizB$TQROFuZK^rrl2)xphz6bT4!gGw}Y+( zULqV)5TO3f;g*8fxn6B!@@z`T)=D5WFNiqzA{eXJYrgTKVP(Uzv3l+-`l&dBO25t% zv!iN-K?6Z%6(qPYP_7QCZ*!Av#SxQ~t}4S>2&m3X&t~pCbzXYl1Sl3Dlq+wlg?K;Q z2|>MkibqrqC#kcB8ZduUT?)4D4G};fK3Joj^Nfo@{j}0;1fN`hd)du`Z@q7{~?hVzuJT< zPTd+|L{(s!QMLlUt_or8A(&TU37djbP}d%ISN8XMupW!js-i}4iu3oxL91_HFFFQ1swH~2kbL8a}@lIA;pe>%F63BvtXQ?A?8PMIq6cX{( zHu8hDt4U-BbTCPK(}%nVam7F_G*Fm}RU7u1edslJz8{Y$a>1@K4-iEG2ZP*D+ZrE9 zl+yzgS5S23B?l{)eG`O}o`#jO5bl%hOL!BYQif-abXLP@KpB)J4j=)*FO*LM zKN+)_aVFDxXMx%kkG`&DD}|siOElcP^7!(UN1I*Me7pxPy~OOq2*fd2c%?-7o+TG- z#_FS&B^`Cv)^_Ii;SD*jM%lU=+hpQ)aEFXKFQR{kjC%kfAfWa@=^G*)Pj>^2+}Yo^ zjIx0GC5$C*tZ@SIfqKOcbCU(xc^`1#rEd>1>n8P87XUlQPxeAmE!HRJ8S+=lw}^WZ z09^ybAPGwyp+Vu|<_I{}1Jl7k#}4H>_4b(ddXHajP;&GE-Q=GKh-z1#CF{CK?4uTV zXBsjaHY`95Tgpd|#R!^tuJ0T~vMX%uno9*p%HyV+ zy?g{BO&~gP?jFS1?=jn(F_OUHR<}(G^5vb_GvmSHni5pNbo8lE^h&4`a6mxhDeFA$ z6mJyuGw?K%^&qcOEUm}=RTalvjk7Gu(Y}xJl{mV*K#F(bF#=vv4X>tf2Zs|Z z8=OV4K(bs`cuE~^kZI?nZReD_g$RSyZ_j5OiRzhw!?bY^vN7xZLA(}Ks)f2hXMT{# zkyf__P>92tIWL|tEn@g!V(CcRfFS8o4|+ZUbMAdm77P9D|_l%IFA?a zVVx&f&RI>Vwtj!E5#x4R4JAGtPhc-OIUF!oA#anD-__11gdI$S`h<)Vf}07#MTFr( zst~6>zTMprJ2n`MhIBUXb-?#MER0*KW2z#$R*e3!=W;82@N5qX$mJ$RTamm69DQJF zNNF?!%P`}5Ie}vXERyZRixSYZf4)z{g9b6Me<;h?qK#6#;h{H(m-`Yi$Cb{MoqWfx z*?6O!tlc?#jCXgfMv7XFF9#J=JoWKelR86cIN$>X0wD-;iq!hDm5)z?POU5dm27#dW!X^bNB%a;akgMbA{hV$`5C!AXqv zhC;mHf{G+ENZ|owm*Gg%GYHR^JqWL2G`S!oelnOxWP`%GyLWgb9(M;EUjZPFymrjx zaSwX(bmm(sH$Zs@3h&*683^bw!j*WVWe}?!_~l6ppKLBGhekF zJ4a-UNp`_{K2w4dPzih4pC`asnW+7kmw5s4%qkwLjk|j5L9s@D+uy1X2PXvXrwJ5b zGoi_dEnI_i&w~;?Le0d0v&((l%X1AX$@1bh0)K879F){eVyxmg{ zUu|52J<)q)zL|xo$N_$W0oBxB5pc>y3t4TU?|s}p_ZsA7Y@`=QiP^aHGC{E*LjhJ0 z$~4hOdxdDHBQZb;N6Y~52&?SAZc;%aCp&FP@Yi9F$+%Y;vA;G8a91H=RMFM?R zS!$KgMgpwR0vvThpn${Ort^W`!LhEBzQcjzIN+3~W7lxaZWjnBMGNV;#(;BH!co-G zhX!?&4^J+8-WNtY=Dk&bzq|^ll5-78gtfLJoDSqEx=jH3$p8x)ql95Dz2)2q+O#?R zF^cq!|VD1Q`$lNxQ=kA>mRRWeLgWeha$+PEyjDd2O`)TJ<(atuSqo zn^UaW3Pe;Z333hLs;YT^!`9o`h8d|67jW2;3yo{hh!razyd)<~Yi5RSn{Zan5#aOP z!J)M9!gE*$q6_x2G-UW-yT`f1!GWt7iRfc*Wik%sHyY4YH2UaxN5h|K#RAkAASSmv zuJWe4jAAw5yp69$guUG!HyIh>{RsZ%h+}~R8+PAVr`Sna?{c&9y0-RJ*Lo&+od-~8 zK0oU@)+PrPgOF4RE-+5^*#{@8wA4xo?@&9p#3AT#kWx_9hq*k{E-G-eI^Z6U{SKV; z!a;%oU~*vPteDyJ`pmnB1UFA87v}VOLhlBL=41p`Q0PI4Vkoil`F7M%h6a3}pV8|^ zv>M8!G7AlqXXvD>mkc41r80IAicn?Hs8J90f00=%0U75ME->(4%UdqAvRdrd8L3p@Q5e@YU9_ZQ}8z890L=5UN z{I1b6>N0_8fD#IhdYH&LlUZcSyweOqa;|kaWakb$aNJ2qp_0umPyc=qb~;so8s7lm zmdfQK0rM1)I+_A?qk7qcWOo57bOZqBS*kYj`Q*@!LJhe?|QvBB`S z48wLTJjFX(Qlf)hDp$h~6;Q&lJ){o!Llrm!OZA}C7hltv#;&C%1LjhOp2>eutPP7` zOK;r(Nx+7hAeT@l`R4d4i7X~Hn$TluLb^YK!(@aHvSGNeAncWYV52klpuS`t6!K#B zhkhvsf*4zl;t^1>Br@>9a6+gWRP~lFi9w3!w%dCecMB+9U&p(Ys}Xw%AT4K<^Inmg z9Y|tEr_*t3G>N7_ZEbLh4qS4~-sS;sgdlb}h9@RB8|suqJ3v4)+X?)!aT1(8FeX5l zaK3~w%O;Ndi-QOxF%`iDVUINoj!j-T)&M~Rbudn;nxd5fsjbcf9&N|OAY&Vf9*9GZ zGc5|l9nb8;z(b(ICgG>uQpL>kw*a6;HbN_$;}D#WR(r@dDx?6Vqz_6w3N9IFr;|~G zBw`5zZ|+`Gkc<6)M4j1=t5_06KZpnB=@HC4j|TH*1IEl|H1PEuS=FtUTBWN}=dDa9 zoD;EQ?-db>ND21Zg_Gm+CyZWh8u+;>#Ww2k-Aqfe9Q2(&EihxhPVWgP;Qr6-2owps zX>`hV(agIA>7i_|DzwD=UWVSZzn)csYmHT!8iPiS8PJbg7KJymo50=?Ygi;Q5OJ1` zCUj5}EkBmK$lI_Vze<%$xG9RS4jA`q0VPR*w}ft4g3@Iu*hiKNe;7m1hUxcf8T=rP z@mB7qDcfqfS8gTR*gY%dj94pdr#MK-QFi$wzd9HHelqt_!sYewO6ufjt$g*7KFc`1 zN{%lm-^p2wNdv2gZ>_}A++vI*5ZANpFrf!wpQQ0O zY-kVy^3I^Sz~oz`hwHba<7L}O9=+6GmjC*bqFel_J*?*oIMoGy;Umd?sn%9x4UjW=GWpEMP#giG_+fN zQY+U=Og?_i9Fm~=d4i1}Eya;#-r;K^<~aCsUwJMlq?W%QCME^7^jaeJ3%{4yK6y;= z@Wl*zsG>TjdkoP7x;Er4eC8a1j4I59Im4G^9>4>4xXX{LoiWKc1xGyVLoEw0>fOfn z)h>oPaFtp76N6bt0QJP^Y4U#ny9k3pZ)KA=6r$KA zh~04YMFqLMLpWW5oZmL3HqSQ+?i7a;$S1=08%^~uuHE(9h9oWTwjR;R1i-E=#URC9;N((b>~z;tbQ zh!-l(0qC*c%>eIeq$9$>d-EIfzvhy2kOPb>@G?BpF%5`cQrgM4AaK{Od?`5#H|&}x z*!rMHRA%)7R%l;Dr-aLo3&j5poP`hM!*~y{0vPrV(#8i)+4TKR@WVFx*ZNmHJg{uL zovKh$>{+hSMJ|CBBnv8Cq3IF?hyi0$oEY74Zee;diLz} zpk2-8ko0gsagk)vRp73@$z@i*sq(49D?{#~$Ej2XECELV? zy*1DrOkRGyazsMl+5tZ*%(NC4l3Il0<)E6O-~(APeHxuogH@cBoZNgMfF&94d%+20RSp~uFeh{YK+W~@U2 zPq6HT^g_49glqGxU#Su2KT!c7J59OZS@j{gW%{w9bo)7D`|Mgt_2-#d-1z?R)JGYE zbwGay_~VN&-{JS7@ueH82MP7XUqZ|gG8lV)UC34VgXG^Q$R*7t;t>jc(S&01fGm2m zoVKU(er+kL(V0}Pl~{WLOeIX-VP&fZ8&~bJ&&o`GiaV^p04iSS6H^b`O2Oks$13IN z1!%{g0fvNwN3o&M80%f4l2MKCZR5JIxq}~Iv879gAxI?0!Otg|74C9`tG92g12^X*?2E#TF z{xlT6d52cb*U0%H&DYJs5A$V<8qVzdVS>G8N8&XK=?ven`H^xrB>UvipNAr~api8E z+2_l)U@l!PKQ+6)k|aZjWV(UXMz!rAf{=Z@mi63ArBz#l(6;&CY< zliHCxv;~dj&30C=)GzaOZ~(hu4t71)Az$IfXPic~kC(Sk`(eK%$=ZK+zRDq{vrF$I z=YE8vJV`Jjgx{!fx9~us@4L73oFEJb8%_-J(A9&zUpL+_exQ8Y-qvbYfs@^4n0mJ- zI$R&r`z3d%(z?JF@p$-e&^iiFW)fS)V|fBbF$-mK;IxpSN-Vv5BMYnmc3u+5#~pO{ zxuGN2gobg3ar1|902icFACItaoVMvRNL;zOdssy6NeTG^eu1*w_O$a3>5*<%y{z(c zALbOH(@3-Tlaogxd}p!#axM*nUZoVXNtxy9Vv6Tajc-L($F?ur{dzKCoH0`V0$>qd zp?J=grGw_V+>7GpZL71!BQ*#(vVZ}R5EKoN-L~qz3WxW8$=}zRUY9mt5Pn~o3O+ zTD)vK;B3I97VCN45pJGj&h)^Tqy=c@fG!kEE;oC@3xcCvIuJtdFUJBT8h3uj+`D3% z34({-H8R&1R5M?&fVy(P$4w=mUxM)h%!~*O=tgbF-Dw6huKET3iN_IyE1MV#k#AFH zlT&v7YW_P14fhAC1#G=VHZ}^GFLq$RG^4B_;jWsq4irSKhq~fNk%WtZO^KA(nNYiL zZ;>;!Urtprl5RZ(U=!WQw-ATYyFa5#`Z`A|pwgTJzGb=N4A>#E4S6^hY0p1Cv5d2Q zlLceiPeCqb$d6c1VKd)g){uKqr>Oq54A3D5Y59py{j=WAwlA?@bzutqGHdw-HP~St zE-gwP58C#_~SZ?T`O^sN<6)emL>XafdW%%7dT zMrI}w5}Ps3y|)apb!ZWAU?8bRBqy~HEL9!%1CPrsjr+N7ajV!`yv=j$p$NuYM2k9f zymwsYKI*BR#t09?4X`?qbeN0Y%wVee<108-KvV2b8gf4{T2**7$#y5r%^wI^lGoH5 zn3%Ikvd8b8fS4n?_BVZ(m#{;4_2}88Eyu!~z*SxTo`R((eY+MEhXW7;JTkIooMUX` zGkC_|X#V?BZ}fX{5svH315cZD_v~BSjjysaUKgPzFO-p|3Ek%zfF zgoRwA<-#ClnMhRt+8L7C;M|m(jS`9ddl%}55tLXpSVAN=X@bm-a2s=BarE1CvlG#8 z)Fn$i@Q>je7#sH4mWpc14irIOSMik7en*SPkPZ4wmiRd5_`_U~6Zy>s*a92rSmNUa zRvNo&s%`tdUX@&*%30z|@Ug#YB9dDA%piQRd=^E(F3R@u7eR>Ug&&YyKdUxWb>Enh z);lZXOW(mmFt5q#hXd$^+O;8C0{PA52@dsvqFF9r+oQZSefAh#QN}awMM$$XMvA{O z02Y7?_?1QQ^*g;;*~J2`~3YNJrOR~{3ZY1KVS`!HOU_B zg`O>Q*R?$DDqC`5#IAscn_zmuOqneGIDx-^#g8WWk9b`Hy@L><_O`Om26Ypd*XiUL z*cOFC-eaY*3jcD<^xGD^xPM>LpMRu-1Pws%Oj3&8{23CnaP_3-zLI=3@ZSJjgjoM% z*492U_X)agAU&5~^cr4LGkC(m<}CvBy(Qw?0ib~XGR_NWWT&O@b`BH#a{BDgDk`y$ z`oAs#WV19mx`5XCu zSs;!{)M_WvR%snyQ5^6Gcb1y!5-N;)R}deF)i_?*g9s7~a*aAzAwi4q>8WlpdZ&mN z4dlXVJL3=8;uIlcd;s6(X9Gqp$dBM#{hsmO5iGd!38q2Nl>dBgUQD8?V5TcEnM8D_ zcK5q^UoKe`&ENMGcv4vxf?JHP|HjiFV}3Q{72OIG&7)O!lZPwE5`!9@Ax4RGm3W^+ zt8}$BM@AE_EijQ1Y|^|$6`ByT#_Sbw7uXDjW7Jowq3c#mLG^v)T|7F ziIPBRiW0!PB!6>3fq28D9eEfM2%KLaqyf<`ihygBa2-U3U3L|@GZY?WwC%!jTNvPT zxxvByv^T|K#R|uwM8;^orB846Uc7_w2RPiHj2-wb{JE@Mo|T|6jcPki`xiR?7*!5t zJ`5*wy`tJQdiAyVH+UI%^`SJADxNUFRqqdB*&1czQ%D2;aO7Owu3&0wesJ zdPE8%b~Jb&pd8~N3;I(HHL1ad`*z-sSa0s;E*rFJEew3GetL1MaqEzXbOA_$^)+_#DR{bJp{KXUu-j)nc zP?cSn?m#bw**pqkAj2h^rr;c&P?we ze}_VcWZ=y|A><|+4D&?w)B7kgmEJ=L^_geO{U{J=BmUsz_xk~1@|>;vJFO7EFr~ol z?4T?#_tsn+P|jN37>-g1&;6KazTGYqvJdB^K!psuCe`xsNS?ZXJpB>qEr16}vZAEs zzI9A?w~%d^)K$F4fg<`rAj*RO_rDIN|MZ7uzf5+rIrza4#7XXH;oRRjb{nlXjudn$ zGCi|B5%T>8blyeoR^x4f<*8X&L1<86sbeWO3)Mlo?4xj_yJrls3h9-|d0)dN*T(ly zGmno`&?*2k9y=1rCg48BI{^(hWoC{sfL+0*adk2XX?PqSlOmxPQ8L(VCo%x{1Dpb> z-Uf6~p~X)SbU}n}QHf_GfBVILn&4n)bK}w5JshHpD7TQz6L1&^{^0iJdrS%A`?K)M z5L*c%t1KPgIvY*;YW`vn$w4!0tRm=$anLI}c-Aesh=_Pq8^f3~192WT_?PSLyjfmK z5hv3hw=Pyy>hSfsCtm^3TBwI$#p%_w&zI5P?*2kIilxxe0U2(6Zf?&40bCIDrJ@2R zrBq5Gw#I)+61PKw4N2w=A-nxNWi6*-W)((efviMvw{B0oq`H7TzcrDbtL#AJWGDPG zZ13aQC$7Z%`5OhFmw9_*?${amLhKs}h=msOfYBCm(2~Y=8Gqf)S!)ej#khrr=~=%! zVr(?o`$bAv3Gbx-J#LcsV;9U}f22)is9*MwKOc0F7)yj_iqhGhf8S39>67OCJXDcj zZJh-aC(O~kKGlW$?Q|8BnSlT4L0(_jp57o!f4InuhYZf8aF7@|AV6cw;d?k!QZ-&p zI*j<*KWpP=GL?RK6J$Z#pY7YbnI&JaIsRE4dBKjV47r)6731P#iq)5C7j}xuNKzNd z1#Yg@ewc|6JK9aYbZ`W)@+_>PtvW+I#qzCrtzh^I%MjSO^)ksejf6%hL1a_?6!jPJ z#*L;$xQmck39+YwK`Z&V=3zGgk41oG^9hj__hSHM5W{ILag64n9+GNbk=GNiY>)FB z@*NX8ALIEpKQ=!V=^SmOavDb6x$N4x1I|d!q*u_~J4MnVrj_d*Ls!n|XHoz#utypp z;Qndxj?;l<)o|tV13&-lK8|EjU(sn24HOvWT^em;?mC6V0HV92PIPHeFRD9AKLGMH zqe^j*g8c>IM1sT5JVVq>9-z=nP4^P*G?@M z5|(yrRL>umrT1WTUlg3CpksrQp7Svuf#9SB>0e?xd2^8q-dl3#Wc@a7U;8^F$idf$1z zN2$F70FsAv0L~3>hk4xqYgE+{^o5G|NYYSpPzVP_g+=Ktg@Z*~zKwO*Jd~B4f;Py0 z`Nx)TfPNrr;Hm&p(uPRebUi*gD7RC)HyVT@uC{oP1KM80L%>HM*;4ha2N9ip^D5Jy z1gF7ALoU7h>Zl*syOZb7@^{4{v{`DPQ3c2>`YERn^V6H1X@S7^!jflKJ?JUD88W{Fx13%U?L>Vc-zGupe;f=q(@Z zw6j;bvbf@0yA4VwO|A1Yg>wV2YE8LrygNT}`6Bf$ zfW6&~iTRCT+B{R=U_4v8vC>b!Vc%0BZoTFUeRMPYD$HS)!HSU$&Lx;F8cQ`s;$YF6 zOp$S_z|3yC>5{Zf+kK?)zS>0Gc(Fo6T!3A=R5=#NF9xIEBvu~p=G#xg6HHk&!!%7= zR7{@*j^&m>5PY2CGbRf|h4j-hAW>s90$IWLSP|E`&oMQ1g?E%H_}m$h&|ugt-1Ek1 z=f{tIU?QBGy`ELIJaSR^Y-F^3wJu$Cu?1&Qc$EGb5bn>PR@JEYZoc;=oDD7@^#*o^ zxP1+5Ohy#tq@eCYk=8V>eD3AE>K58XZgST1RgG0Zm$ju1fT2$59sHIP_J+A z0)Iw_Qk(pc95)bPwZAs7UZA?$NsCln3FzOmNyyZ#2$_ zx&S!`ar!<(mKhfEvBlFp?p#o%@#+blP%MM|1f+@J3uoXJ7dE4ll|ksPN`iGgZB7zs z+dhfUVJa0mOf*_G4!fB$^2GTj+XF7HK0#_zL$(&&=kl~Fq&Fr9ilxFayjTq0;oV7` z!`yr91)(QII)DgUgGny1%RBy@L_-7@xBra+`AFrNDk4w`w+I8r}{byj{Snwq`G{b+O%|b_yA`g;$-M2x$VAZ zu}1X)I9QcYjMEYPHu%Feyjy*+LXs<)41gw4`MVC1SW^triZ5ljK0Y44b3jk?7e>7N z@K)~rZ~czlp4yfVf^5Upy%s~3jnX=qhZ>)JbFzlFwRd}2l@|r}sz_Z3$tf!UJkAf@ zE~^Gp6_v*GmxpT6>j3ml1Bu8a9n~J9%O66r65?8_Wb?z_^9ZP6el8Co2V5H$Sn~n` zKZAwBbplXX4#z@=L`oi>AAcnY$;KgCSgR=6dd1EKq+6m=7}1NlVGZ8Pt{AT+;LI+265Y5%baZXY5=eb%epB|ZaAuFi42Qvh;$7aS=vli)q- zpxKKtc-|l*9;uHtxaSPy^%JL5iL&G%;EYM3mLA#b4h|Oi?x@-@p6UMP>RWJE-}kKdys(QK zuB6QLB!8$(>cIH3M)h%kRAq|<0%SaLN2+MT+-81qFci_y&pN+U4ya(qNjWMj+W7x0mJrejQDvBsyILkuFj@g09N-a2juv3eP))+|6 z;GW=iK*Qtv>*11@NB00CkiB~{iT3$(E|K9eT{8sfr8`)RTkQ|OPY;@=NsI)^&aRcw z%Inx$OJe0>%jck%Bz(fHi=tPi>SyPEpPdJF`o^F&&+Knl8{m?xjF`aU0I}mW0niCJ zH}HF%o$ydxda_K$wQ`@e(U#pjP1`m3-O3jW4}lUru{ead}FGw zfJp^tWB^L2AP<`lNH4sHW>_Z&D0S{UkUz-^RQg>*Uq_hT*rsRtIqK~g_H2E9Tp0C_ zIlo|b5o6)Eufn#2`RJnd`5}u@IrlzPo|+YwakH9-JgGd)>R-_7!M~@qpZC4}ylzrH zV2PbxaOiTczzvF02O{aW#-N;P#GMnYcKpXNS@VH;j7l3Egl$N_Os0@4xnd z*x2Ppms;n4&&?4}=ENm0d#RUq?pr0wZr}nIflG<*)&-^B)bLUhW)UE8U^@h*2Tdle zE?7C;Hlk2@5vsC*tq%eCePe-ofi3$5up-Ep`7XNqNjLf*bP0}qv_L=kV&HW*inhw#6W7|1q%7#Q18-=I{^Ggt_-aM=xyK}Em6%OJ-y=M2v zC5QxckEP0H&{L>Ll3+2Tetf*?l47!{Uo!IJz9J28eLEeQds|NYzR1(mu4RXWXS5WJa3r^gS5+g?@oL zW41I6xPuzFS0Ea}MjV2#D2vq+Eo#7H!xJ1$X!eZ-O3qDp#iICW50CSJ6^Ap|k5x5x zOcPjRgW5H!FV!i)h$OVJpc&5UJKd*`uif52daYhmi1@V7e#p=7Q^6XR5Ggxodv#Rk zD@=wYqJeYZ$)bAb#UMFW!yzmJr6n|Vxi`n#`ZlriNvJ^Z@KP1Ve*Eeu-}fz~NMuus znf?gG>#x7%J6cG9sAPQl2IU7P&_v){vv&Lj6eG1kiUSi^4jAO3?9&yG&;X|dL9mAa zz+&Oq9fpxv{$i;#g<50-!(FOi&6+pI0G^70y2#a^LKUQ{tynD@Y!VW7mQ#d1KEQ1Q zFB|Y5-Fm9myzoU|!R788CZ&%{r-}OVV}N;0ds-uZ0^b`Vt{DslKpD!;n;OQNW&n)U z^MBjT4cb*(xT+BkiQj>49D>r5#^6s(elMY+(|6Q8=I3)dpCGz3`%ygH9-L|)GXYRd z{9#1;%BM!&Y1zb07!^}%whOS@8@0vVg&32#&UMT+`0FT_8(~3ul~+pzH*tCTals|J z+C8vZcene|^?)O#bUg}5yd5#tgQk(jkbxT>5#Y7wZgl1&G&@7M`SUz)=A_`7=5f(q zb9pV0wv2!gV?M==fHZJR77ZX#5u1`s02r6bWQoj?yp+mWTYL#o)m{x2c1xuZOfM`v zDL;Igq@c&+>5v>c;;q(ji&^juoUe_D&P}Xs&;=d9y#scX0H8q`ZUa#%cp-({FpLn|K9T4E${JIF)I_{DYTxfb77^Yk z^}K$Oe;mu#BE2@wJG1Exj9p5%IW;$Z1XtE1Lp*b)Tw9{MP=*i~P=3T5ktMoPnHU-iL!Vo&*37SV0zftb>&laV9UH9valieqfZN_b!J2xTiv~Ec4Xti^@`Ee5aU=9uJHeUG1gMoGaJXIeVKQ(2k7iF8QZ4$6n^ z0Iv4SHCq4Pb=GI<6g&wiyz<{tR|M-MsU0B+8HZ60a0;pzpq&YRdnR8PxkT%T>{SXF zD9ju#>%KYDvyFN10fVCWs==|V5{Sn6%X<4Ad{Z}& z5LxN$A5c#g!P$jX?EGntg*p%E8*5UC*?$9f*ChNgIb(o6KK*`YUZ1DtIM};t4lWXF zX_UjIV(CSGGLWFziV8TTADV~Cr(sD7M&(vwKW*tdF)%!EfgZu$wojY|CRBExG^0ox zv~TDhzhD{Y_fd5o@$1dgv<+x<;HIa?bIAmsLnrevcu%yU_=YgR@)q*ytZ4xfUCvvj zj0W3pYpa2L1?_e09l$jQ+X_;7H_DjtMU4(gbgJdJ6>9sbaD~d?Zc&6!23o7?FwdZm zJd@p0$mAB4QhZXHi#iLiuBC-6xAQfI6>P+jeQ*}z`T4xR$HJGgVwbf;dVK%elV29} zHp**Ji6=?g$}fXe2_?Ii@;&nb_*ys+T;&-e`%D1*k^Fv(+v3A>FvW)9QSOs-yPh^g z=3-c@!(hWY#9mO3JRMoukJm99v^@$(=yih*8(lfj*R6 zo$##;Mp-D{&m5N~b?{iTMXF1yVsIFVu`C14rexb}aJFyGX4ax;w4 z?{E*cuo?&l&^gqGU7IYq>o0CtLb@H!)ol%ZTUsm@gCU2F`VL&cEA18NPwx)CZ5!DMeJ@ zC1y-(`;#Ja6tp0h!GtNnP!{Nh^|KCtb0J)}s(Ox6%fj@^Hf;HL;5XxU03*l$dt_%w zstRu@4|Zp9dyjzJ_A-2?hKn15Ic}Kyc->yM{QNwxQoMhN>&ZiQRh=3b*JT_E`O(R^ z*UxDCRx|)kp2A&*34M)P?Rt6S1A&xy{}zpqRpO=$#XAbyDHy?RFfwbtz?>#NCW_nT zJt^0MG~IOlA#7?!ZPZgDzDC>=W47{7{efq*A*4yLo4bLRktN*#fgUm2p~1?DKxh?U zIg$^;Kh#Y4@m()jkav1?D7yJ)T-2~iXt>vtGo_!6g!I5;W^x z(DD#{LT$GIEC;yIZ+Hw~hyzmh#ly;>IJ_`Ku%ZMk2KD{>`#q@*FtiH;IqmY_GR#1Kb9kDvRFmiK@Y#%T0{-fjC>ugz}nX zZ6hl>1|aK74!Dc@W-**BWps{%e{a}>1JW&4JL}mZI}bA7KT*ToSk03-iLurWQ*~HVis-nC4*fektK6C~8HwhmioR-l6jk?15%vWG$!xv@GVvMy)D>9``)o zLQ%T+nhA#QA}HlJ)wQ^*J{`xf54 zqqOIXg!ShlJUiDm@3o6YUiq22iS>5-PWC5~hRkbbX4Wg=fyN``3pe>ge{%DjHggakqpGX$S%v7Z`1cjLiNL zyyihJIZkKVCtE7g@1}OMX=es+N!RRY1Wy%+5|Q?VnIF`XDeN#X>kWfAgK|0Z`;*KN zilpNdI_*zXKaN4Yz7tKTz^Am3FF4eF0FQs~__JlS7$D{2t((0%@LYql!P9*P>|&yG zTFaMdqXyc)64HCU!Y_;j?Hhra+qB3JEmh7#2bOJZ(#rF~aHFe<`GHo+P$gT5F~2SR zC`JT}=civU{Hkdog_)9jM1mGB=)KWT08uc;wzq~of~T>ZQisvj zw*WZf_$#M}^m6nL*YY5?(a$uL(^Cmr85SytG!?vWqbX28Bn%)Hclpbw=k%wAp_m}S z?7LPdz~v;?jis-Jm4B}c2Ih(h?rAYA-Tg`9gzJNA(1+cnhS15;kk(IFBLYl#Q(-jU z>4_#C^D59~A#Y!S^tdD)qv@-qcg3)dyi-3r;DS$)MISNurH5M>+3(13Y@EOhx2rEt7b+`xh?@-fm?yMVrV(ACnNv8x$M-8J;+9lQ?Fg)Ghk zZL84ba{KjS-WT{En!6HQG(BM**YPKMXj*9j_*DmfY6{3AwQ-j2-B#GVk`OxLQbUf2 zA??_8)xNMl5$u=xtL6x8xu+Z8pF==BIbD>m@%{C@r7#D`L!!CMpK0H}wLA0pZJXU; zQD}|^NNaQKChRN&ufj!aOwKQ)~XLtfuIH&+EUr`;N5NrELG+1CoZr#zY?e3n( z$U~O8fe#hNw!Y?nKMwd`2%ZL`f;^F(tHUJd+eoZ5DSP=duD2mA`45S}#62^5K|D+V zJ3>KrMhTJsh9vAUew}EL98LFw^`RU<7_yq;Ie7&|!~E$+cdQPwaO&pXFogc49Dz~F ziL_|H5|^M5s+&EmE@e^2&e!o*;K(RhIh_Ify52E+=X#Eppfu+AYE|%?>Zj-UjbNt* zFJ{?ScA0(6N~ zfq#GdiU1DzJ68^R8!PY}bhR9#&srB2IMY_4&vzvi4bIFZXV)+lvXxix-(KorX7{p3 zX)*`)S8{{CFqm$Y+|?9>%XUx0fM~W^uz3QOrO9CVL#^`Hmp4OHzya6*c;+uj(oo|M z_4(XoOYJ3*w6>~5RG?9LAvHMoiskY>0Ea$?xsITMiH<<@ztBX3>7B#I3wjb@Y2g~= zT{oz81se3xA{?ufcfko9(+L4FH$lcVWvDGBhk#1Of531O?lA5HoYEV8CGQc$LEDF4 z8;{H!T+nwCAn4SilRt-NP=DX9zlV^0xhXFOa>(}q(_kM`}k&-om%bn-^x950(D*hfL$03Gh`=VPCw)GBIaOQf z*uKiI3#O^44(uiPTI)WxJX{@XKMR^6VTND&?hHaE&v*OrMz`qDV7YE?psNd;F8~Jn zx`zFSb3$Si;D89tSYL0b7`s*nnL(g0he4gCD!@8q*s+a$LdgiJ>s-bJJT{viiKgmb zsn2mAaF`{qOt8*(lSTJ%$78ECCx;py| z!EBq{jTKn6oI7Lydw3CVfJaTz3?l*vGMpsd(Y!}yy9X;GFt069B(rM^59;ew1X zN7+&J<^)CYP%RnTFKv4PyMGx{3o(A;>gglM1-GxI!v5(o*K(z#LM>)rZ}(3x1wzsb zn#RTV5(fHE04A&u)!Q$iWDg7*aF6$PdVoO!dVDFGWz6RC=PaQ);^o@jz<^}DKAgAq zu7IT{nFKmSoy%_ss{{AnO#9vRNaKoC+q{ z!dckQ#~W1hfqiZ+?f{bA_Ff?D3}X?e=Kc+H%r>E~%P@{KG40 z$QuiKKP}+3cc}z_KDu2g@(8&x79t?X{TROM*%GOmJfH+DDxv955Mm)*ylFFFXg?C! zj(T@1ywSLNaq4LKUiI`Q%>1u=o_>9EsH!@%nmL9>gD{WeJrneafJdS>Z(zUrzO)Fu z?LjPGHdrT{ulx&4=S$A6(+M6}(O#D!hp}}co*EkU-`)y#F&daypNs$PXVL6V`c?Xx z5OaMDMeH@g?qkyi(DNsx_>a)8xTYi5UavY0FT(k_t5?SXy@hhz0=5M7`tt!G!`g(bKO$c{sqV7%=?#PI2%}onl$xpXmc@WZejc zPe+Ctsb3wuiYIKz1T3GU zd1ZdeFKzDe)*SzOuM2#ZMO|Q;ngT*Khor{~+MG36kpTicdw-TDICGgV%@uwAVzBE|fct_UjP@kHhQ z34btH+Gcj);9>bx2+Jw8FF@M+06a=OH-OKMOvDUPo?D+<^v|0kIO|y%0#=|c^GK&G z#F<^C22kK{1Up8nxnEQW-5a_Y>ufYx2!h-C?Aefr|Hs}DF zoygsV9&o~oZz(Z0KvitX#)WrwX;ZZU&QQoc`R3txOw8g>>5@jM@NSk!Mc>bzJJ*a9 zVeN7;S%xryFR1&NY?O8*g78!!U15C>VLo%V=rktmGfG2~u`_7sW zD70xSgX@lg6+S5NzGIk&3H3$5LZ_P#-^yfYFmYq-d&H)3c&1L#zTu2AvK~rYq|W4_ zU3Z21Zb)cNO^uW3`=?efC?&v$3Zit9bNk1;WeC=JVX67mR&bhj7Z|YxodqaeC%H(4 z!~pLSu^bUhrsiOMy0@dlsxE%E6!Gs&Z&<6o>jlv1nDc4uTWYdlogRL<6x&}N=4_vg z_MUX;rB17lNw)mDl?67WP>dbNF1XfvCjiVlq z(bl^c>^c{AKe+k(8!A%qF3QI3sSt+t;g!05>Ok)I#I?PaLil|Wy;~E)Z+>Sj+OA4~ zjZ%k3-j!W+)x{CVnU~y@b)TS_Z9=Ax8iqA7F4PAQo)E_v(Es}e<2c59&Gmj zFP`?92%>-P)Rfw?SvU?b+zRFSHDqNsSuieIKBVK2_8r}YAh!%GIyMB9a9`Z<@-r4+ z?ST>c)mDlVB%MG@mumlbXhozS)yaPqN`eg17^Jq+)By(0kU&y=o_P}^M6$jXm!T1PQcZ{aQHlp}ZUX*{@_KkhJf zNbA%x_|t;*+D3noq!70&dk7TI0}W(5x(&Qr=T$@~Ama9REStd19LG(q;B*(aKBtAtUV&%2e_Zqf+6@$hc;ce#!-rwD(v>9|E`s~ts@jycoRUS$@ilJ zSTywDKG?7I?|5p2P?X){atnKYvb^Ip(hs9`>u7{ch2iaTDq&c@PtsIEt`BDw3^=nK zA~0@(y<$jq1!3z<-B<9d+Y*9@&;3{r1;%Yd^O}O@;Y{GNt+DbK85lIi_$B~nYAg3c zdA}NQd>hvQUYF>E{l0lp&|%P|zfu8PTLInft*@JWP3$r>e)f85X&ve5%H3h>5Ln5! zFRZ%98q9=F*>{-^)|9}6?Vd<(3iCJ!QM6_dA`L852sZH;r|*PqlALXmZZ+1a?U5e{ za?&rwzz3Q|!|)wPs! z8~`WzmfYdmR_|pUsqOtDV1I#u8rDvx>3wt8`MZO&13)5rI`5l-Bs|U z`SNgDBB(b!Hi`$c6}KI8aFe6i%xVoWK=%D}zNDL*f%$=aW1uhxixscl(ZU`tFp|UI z6@je{#7{dRCHjO7*#KgK9kj!29wwf^iX8oAhSc|(XHGRs2^1gTx50J>3*`8}zUc4& z$AU6f*#UMx5NN1C8W3n$#_Qg1g&+r)>Fx7rO|wnt-UzZ2NC?*GJsy}dZak}kF&e*A zsk|VUzF{4_uR2#?1!&bOCKRT|HGq9&Xn!vY7Gn4eF!WCG^91VxqTD^JAX^##;x507 zNC2A#NWt+SOf0>yryuwC@L9!^Qz^4@&+v%&?Ud z(5GWbX5fq4Zr0~TaNph!hT;Q0Rx}`E<$%4nuhB(e*L~d!^nN-JorB|BYg#F;!iwI3J9w;pfZmt0?r0WPk=8euIS*<_VIcV8jLr8%q-+W;rvH zXck;9t6~fZy>(c?`jpV+oE6_SFpAoYILV|BgB$qC@&kr-LkHQoYMF!|Tu31m@epvH zP^`6Ki4#a!|KaF7))nQpDEdG&$f+qwf&@vTJw#E0fFd9~ea%zt`_+G|&QaKVtvSa) z2IVBr$24rTuZSgGDK>#n{v>ranM{iL`9c=@ER7oq@EtE?^!eGDl~Ky7dHCQ}S%tnk zq41Xs?edy3?bl)}SRP;;p9M6w;5acot>cwX^g@gij5vV( z>9%L^6Utp4D0gyC8NYLcb7U-SRs+U+_*RV8|<~Zc8g815|Zp5Z(0|g3alK&x9nC8fW8+ zgl`f&*uO7@i?)t5@Zey|b~3^a3%#@!!ShB)t zxB4G)-SOR>Y_G#%lgwN2B(M1vG(acloPnk=GEfp4;60^OIe|gK7)#YuyTR zyElJ-UK}>LNatSF_s0uM&-Yr61U<-**)|0pY1!^NElp=cnk?JG2e)4I%1OrYG(zWP z=tMF!I3^=6PM_J;q7% zZn^2$ZU6YWDLxmRf-YIJLv_^xisi=-Q@j9GfA+rC66fh|-(bja&Uc!p))GN=Z{Ci)9hv&QtRH>s3+T6@79q zLq0qAN&YC|!~8dgJWxj%v9P6a?yKC#kchsHN#_3)_m=iSn3&3Oeot-VqD^3C=xk)c zIednX>l?9xxQJh|1C2l(n;_h2ag(njV_t`vPwf#s9CRr6(+*zc`mdYOliU{^oJFLA z`A5^`LgJ(}QS_bH$mv{v8J(QFBO$SC&j{u^HZDOQ9XK zZ5qi4{<}FNX_=|7So60nZ{h`yJlF$^%J-O_PnRs=PBt0Ml3a5*OR%xWpRz1xySa^2 zM-DbB7=LIs^Fij8+>tC)uxk$h#9!Jg>J~f*Eg}PA)9J$?H}DZuFQmGeJsX0It|CjO zI85q2PC1;g>jImPKII$Lz-6>)$0P4M9o_cBbFGUs__}*S!nOkC6o^D_En`8;qNf!N z_`Z2rE{DykV2pES16aUZB6fq-#i^VIrE35D;JdLRHCNRClF&K-vWU)g5^G>|ApUEvI z`Izs&e0D|%e6@=d9!|-QoJOp6In>WMW59|P22|Xi@JNl5i(~q~mn=vnmkLPe;R>wU z!M;6XX0f-81K351e6c*v!mKV=bW_V2GN>c|DA-&W$$+AM2ebQ7r}v8sl6hA_2;6oU zxPJgID4)bkIjm7i0LgA_FMhftRXqLxS>Q$@JNNJSLAjfL)>232f)w z2u?;sJya)z-(hUg>5n?B6g_}x=mV!-?ueq>h9YY;C{ivRsaah4jkP@gq9yRcG8wP# zp7uC=yc0_NUp?*d<~QpTPQSu}S6_J%DdqA7f|klYjh)|~br#jvjB-!({idl;_!S30 zU+z65$v;K&6et~!kSrwCxxX@-^}9s~aTaR}O{AUB`E_~(^WCma@vZ1R^~?zIU1$)6bE1XLo}j;2}u!iYd;!&UU&R1P^1k&{IKa51!kX&zU9MHSjP8`Yh1E zVnKoTnJANs%LSz^V(+XyU50toqHc;E>Qh&CX!a7jF(rsn_6{qqt{|>2LTIEb2$9!$ z^PS&t_J4mnFIoHz;^l`3X#i)^9U7wdS98k!R~XM*MxuN8HYyx?2~#2PNN`urD`vz;bQ#AL5;s{k#3Z?@5jse!V#B_uw6bQNG4PR%VhQm~IT-Unu+P(O zVp75{*!D&f=*mq90;&((tf2rb_#?#C+Y^*x&AX#zixX-m>AJE3S_c!vLM;LmqYonA zfJtdQ+?oZy^l8{&S!owu?~<|q+oAFAl*ZqMcq7IpUe^o#wa3hBc}-?mR{H*iln=1i z2BBLlR*@#A!)3?Z#JLUu!~Hu^?>9Jygb$)^K-k#W7Hna7mvFl`EnTPxnI%sOkgPxI z)YU4-n`aNvHT&(dnQs=<(kdt<%}~2MDggDWAv6YB=WLtZRnTJX_KL=Gwv67P?!M2= zolZ230X68y)`W8V;we{>zfLhs-G2*jOGLJJ9ggS4wRRDxIw_&7515or;|<;;OzTSH zUFC@pe#3THA$J2ve4n-ZyFm?%R_)a zh*)JbOCQcJ%rY)d5Gj~^LF5QQw`x7?f^7p%7L2KG(}~Mh0T^px zSLZw$D-^4bSc-j5sp~79&?0{3JLz&%oVY-B%Bzn$Bep*#;W0(H+;3|6!OG(Hybd&` zp5l5Ff#Us9`yQlby+7G%TMur1#yQK+Pe;)tx^$Xi!pTei8<-%l-NMhq)lGCkDl+P& zE%Zs(!I?6lA40a^Gp1il`lLy0^mpFHdjdeEXT{wR^+?J1$8HB)9f&HXjp2@BcSp+c z9j)Jm8jmnaOEQD12X*G;FC}K5On%)P7c@dT=a54b-?QQ!Ex97N1oZmx}7S@L0jl+LKBTR5~fM0A3T9o^(xA} zMvz2h>CF~71`Ily=pN5);TYx{a`YSB?0iHApg*IEBUQ2isfT3A-estR7c)y7DN2gZI0c@7-j=arxD~8ki z^LD0nIV`XC_r*(u;rqN8w&3Q;pih{eXWFQ8)YsJZwXW_LW*s>Xu%T=Br&H-?f1P10 zif0pVBOgmrH#Q4W=(SA|12W}gw=~7$9MdU|9f+UX!SmiEhX@9NH)A< zq|aZCb?)o0?aI^?Bh*RQ=iCWIn?QUQcNFpfcwotexm1I) zv9heZs9bskn286U)IkRR*OKxp``eXxDa~2Dm5*K>dd&HiA)k^Oga;fGmxRb==hbKN zjPpv4xU>1!go3>*I>ij2XPDLW1Y^jSxe)WIxZ+wSdR!%wRqfyBzp0XEOICEWfA>;x z?X8CU^4&D0B4{tyai@YN^`s!l_Vl`w4Rfu!l`x#*YpeR{+fXv}*25_W4&`*uP4@99_?Y-3}$VZP1I{GQ`r`~H0oEj|Az z_;Aaa*}UaM+OJ27wN&|B(IczG&OJQ-5`!r4cTx?JbRN7(#|iEy&*=d$O@B`X{&1)t zgo2LKoJ)V*KDXIl+i!S6IlNLIUt~AM*Q|e{(w@|>6_f7tl2#Ry%Q8bm;TNcm@=TP0 zfW&)y=yrSBLx5m;1;c@Mq<*vDi2L3jD@g}d0e*_e8+Jn-3m5HFr$+#|t3Di0Pq?3p zZDzxmLwBx%a*!r$WWzq^XXD+1VL5mm-D3ji_3lsD%V`4!U?9O;;m;T~j0Fd>J~hw)a*3!U}^88opn1y z$dRZhX%lxVTc8Fh91a2Gdm`3W!TwqO?A><;iXV^j??6CjhhE(a2cuU>F?h1c-<|4x z&#w!Ov=M2-7}no~sy=6Pd;RQb;fU7H_ zboejHGwt^*L5O)$Dy!7iaZHS+=B#_g1Xskw5bQbx6>GX^JL3b9PhCFSR;u8y)0``- zt-tO=x;<}auQxtGSS%3NY9#?;^4|^tx3>8Q`(6`;u@`zZ{+lS?N-B1ZcaJl4in7ox zb;sNm-tEabE0|ViYz7f~et>gr2pQOAzfKg}BJRB5z?15i-Q9cOV70&oU*-Jq+Belr zyTD(%dTRAY_(ET=N~~R*W|`qx&q6+c21FGVqJ@?aSn?@D_84uLGI>PGL)%H!MiW{t zF<003!ogGZNBUdgvPZ}ZYw6^7vlx5{wbKn@tM}U&OSs(Ei{sbv*Wq5{IrptkGJV2+ zK$OegcgIXD{5}V<`Jmpu+CaAq_ol@oaNrG}V#K@DR9zjddrLL2$Dg zeCR+d>+(rX5W?ID1esT1K1ZT zCGO7_Mu{>wWa#=2tnKG;ntjt=-(vpDb=)JAw=X$I=6X5?w1>mtxBj9x#&^?9Y)?0c zuQoDAsBSVE^+3V3M%<++)@|E(AHbbNn|rz>ihN5?KBEG zGMou&8?X%o2p0{yi1&P0^iy~M+O2MqqtG~1iQC?0;`$mj%TT%f!}8THgx zcM8@vW^HI!$B~3m0r~6S9EYSh%g3@z#djuNakk4Zt(dx>KCsGBI@t}bSw)xDj{j$- z_e|U;}nTTM#`0zY54kpg(b2)yUCO{(b-We9w#sr^#82 zDZ60dHqWumk*(}OrY-$Dg|2E8D%<09v%7Yph{>NGt!c(B2ev3t;CefT?o+Qm zLyt-X9F4={6(q4=cObknQ)&?24bwdM`Q0SlepU9xc>jIP8WA;9qIh9#>aHKZrfCA{V>!F>67)ia zD-#31iEOcvtVPyxHkudbBxkl`)C}hUNQOz)7(73Zs&0*Yor3FFR^6wzDU*5TCqV2N%uF~C_jU|FdZbuyUYld+2vwx3K z`erhO%1orZyP0_{HR3!|ytzx>nWFQfB45c-SIn&L=Rv8l<9|B|1V?BvkP{`vS`0%{ zds&ZFp5y7!y%1P(K7QMYkmAJ5^%X1xDbm(9W{<~DBsGt4^muQZ=X(xD`iNF7GS?jQ z#V73(sYFNq?y_yh^JuGbSyZRXrwzI?wy15R1dUgNXFS3nBBpWiE zq1dF6!Tm@w`oas%xK;h6B)CUs6T8grMDCgGKqe0=sae=%Ae3JXJ~-v+>QDC7l*;yT z-x(2s=+9fWH0Iu;BZzWfP>v#fI~-8{Yp)XQgi!U}fqBZjYf!p7NEUu^H{4jVGe4GQ zaRAzcd|rm$*=X`hL;8oubvG&>lK)5%8^AeqJrOPOzFt+J6_Oqg{9Cizsk>c-?R~14 zI}D9A8vENA6YKj-^S3g+%&6F6W5thmI@sNn`>a?YN>%4C=Cl`xWcsj`PeX+JFteX$ zIgLLo{r92~SX8O*_SC-$v(h%vu)!UAX$af^rKNmJ-h-S`+IA_HH%$}w+MQJ9vOyLR zZ{foxMl_-)lC-u;WC#Nq!V=5p%~4QcddCbkF^ds41F3uy#R9iMb$vB|h#hKQvKV4% zA`;yMls`FM?x1Kb$ZXH4!X%!&Y6#wI!Pz{Q2jLl9E`*8XCJz#`)5ci>wcp=Y(sC{% zj7IyFT3>pe@6bG~FP`%`2tRC~V!qjugyDzyx2rkt{VWzZAWu&G#MKzY zN9EjcsE|U7_3zQhRKlZ$AgTsba4I=wj^Kn`LP}{s_t4H4_53Q&N6<`$LA?Woj{vym zn5Q9ytt26qTl6BPM`FT9ul_=794C=;G;(1zO1~-q z#By+-EHoxL{p^&FTC-XNm{Y=3Z~P-67XE#waEDiEUc;kVsExhD|8I?&QsT#-<%!M` z3sV25tH7)Mwa#X1qQqXT!q9h^AR-(TA?$0Dw>uTxjyhOVnP@rBa{p90!+Hidz|jv@ zfm>Y9Q{qt+O%5gzQI&fVcTMsXKILWTNbg{Ni4d$c2kbA(Ioor>X7&8J^$a8o2=t0X z%sxq?n)sQ-DY$&O)%q1PwrJy3;M@N!0j*QpJypBc3kE2s+JvF*&$-za+|g%M_uZhT z#h^TpORwU7OmvCFsXvRJFEaI;BU8y@*Bt6b2>JWny_waW!{y2v8CkKr4H=#7PAsW+ z_z;H#6m1V^n#q=37H2Fz=1%IPTr1}IN`5R4>JIAa&*pkMU* z@q0+c>+gCnYEx(~IL;z0LhK7c zM<+_5CQp0jiaS#!CLYjCNglT>3v{+i}gTempw}1whg=sxS!YJ(XMM*mFxc z3}0|n-tarWP3p}Ia}Mp&!hj#e>Ea5w!?Pkz1(~in#kQG8oNBAU%UxhXaN9v1y5GoS zfwcY!T;#>Vk5*i>+U4;W)8c0fwU>%Ts+^eeWp930Wzj+&w2jN@dOY~$j@o(GLMu-R z(7*C!yCTikbhk(b&eRNMoCyZuhI?6YC(nHM>99jN!}`3?hK+JZIQ(ZY0Tp$5KEp>JQK%EMJ z#PvRY6U(&=N*3u}bZt^H8{A)K~#89k}lVJmCybi`;kP zggSdM;@1PW>iLuce8rjU4S(JBL-$-jK55V+GLxK8MxR)hicG4I86Oc+OCRO$g@^#i z&*q9GT?$nnt*+k`p~$stGHhKw)luH`>70N~1SJ=Ed1dBxjN^td2ZZRN6eL9DFDdKu z?_a36oE3+58{EjE=@-tklc9%JtffcpwaYt&$C%!|7bX(d>U+GWR&w&r`=d+IFIiE4 z&`A(yH0|ThZ^c8T`oZXnP#iLb@T6((#E>1YOfxUX*K3vk1iF2*q{1xUvcw3@d@bzh z3^5XjbvH*g-%xLx&p}DFw8S7GcCf(>@@gocZUyeD2*IZZr_@C*(L9zQT8g{#J6*T^ zNiZV099ZtumLU4A{u%eh#m_7<50B2SxzrI zlQAA4bq{CwvkKM2x9tnzh0(-`>(N-Dl$Y&1(jzB}Ey;~PIBo$oV+r*tC&K&9|59BZ zm`=GxmppuY6Jz&Ex}JMB#vyIXf?u9U(KS==4}h=kZ9 z`hjs|1Sy(XP>nR;R?^WL*$TKqLbdcvsMQ5*|+@uoV>?!zX1}L>}RTY4kPC)l^*Pd z!Ff&PFW9H-5w%ig-@MoU8D1=akIk1W+;ngG826=b;Vasm>0_!wBf?~dK|w+=?=-nN z4=)r)rh$xJ=~&J;_tBmXS^n#9JU^$Y#=o(>Xd!QLm8W>A?|&$?k&WOLam+0M#CEH- zl{o+b!-6EPAE=An9LO0XDuw!rCi^9*>Ml+uXN#h`0T*5QKc*P>dJi?lNv4 zv^rZT#KaTmc%@WQ?q9d+cg1qDyVcLH@yq7%_)Oq-bA9tbKXq|0neh~^I2(5tnBF)3 z5#pHs7|>i4Pr)lKnQKVMyeo1tv0X4ZkpxuZg!?Z*JNK4<-FbsJ!8~{$jpseEiTq9W zj9+pj4vSjmvN-bmZ@Zoc#OoQE47ve{hO%bnGRVW_so4ACao|c_e6xD@ZB?#o&GRi( zcTlTALxJeMaHB#9XT~Rd*FKxSMAD}}1b-vpXcy$0xpi5GRQpyDsC*!Gb0;n-|9LIE z-5{)mekw+#fH~s7zOD#%@??+LSbb+H9hpkkc>f-7;+nZhmO$^sAcEQBDhJ?-eS*uZdo_O133Kh zNYc~OIvSzF)fGn2xtYP2J<~V~@9pXLJ(ROst0DEQn(mldk%mYcXddswam7)!XZK)B z_%nq89or|{8H9*4g=RAK^o1UxvD!s;sqdB@il8GN ztHGE<-Xby}%BD=7{O$_(>_S(R39qF3T)ef1y~fDr+HO|r?y8v8{Jv}vu~%?=NK%5~ zqAXB=6-8vCvzz>M=f9nEPbME9ndqzwT3~X6Yb|PA&z4J5lagWrTj%dm`lpRoC+4xm za)E~X0BgIgS;tr0xh(s^Wq;~QOAO($3;Z6xYU}7|5I@J!a@;&u2kCo%5bhC2yJ#=c$(sD^k&sCx{?rSC>asK{Cn(*!4w2E_7Aydq#g zwC=&YCH~r90#Nf#&@q5Gjnx>+AFn7Ve)f;%u0O2ha|2zs&tS{rbQhW{MbM_gW0i8F zd-G1y9@DiT*<82bDsXTp;_y?0{7&HR=V|&Pl!F@v@%p@88c*8w)dr zogM={;MLxH1$#~Olmxu0wSI$#w9@iA!wUma*xh=##1@&C{@7>mA?WV&a2Fo=c(p#< zlm_r=JYOOBG{+T{VF`NbG&K0>Rl9xb0;heKoT0DAu=n(N{|GLEn!Z%&`n1E(?PVKc ztS2Kszik7*Zl3)9f(sA_TbM$Xd<2&ggi#wVN7V1OkJj-S{SX;B#^tVbx4x=L-L zD91CJtiw0sS^%-fBN%kVun%xipcQSGgAe0ZlKjSSdK3iElu!W6=+9vmS7DRM=>~Hc z&UeRFx}nl;)Fp=bg?1@REZA=B?hp~&mcKu;sB=4y?7%GiDymxHeGWBDY<^&0c!$tC zFoJf}*uFXycS7MWI)aYSC#PktX!-BF=_iu>@m?xkj?@jbhc9RrLPi#^;;B(BGv%#B zoN11Zb$lqlH1_99%5TE*DZ9)lgB!B@qo6A7wh3p^flzhhCXRH83`6<4BL>#m7q5Me z%zz*=@V%qzp4^tnsesfA^Z_Zfar?a}lvkk$GfIn<)L`D*2f^JtME(t)En@T=zF3UA zWMcF~z-YUvM*OvAKpS}b#(Vm+h-rw!Mg`0QGg9KX(3uy1gU3=i%vWPmLn}hG?5=f{Azez ztV1JBs?00twcHn5EYUv0%af9>HO8HYx}-^eqtsR$*?IYV$Mj}&$Kx}6S$J}PDBgVm z{Ri3ebI?ARGdGZy8)0%nPn-T7XFCN~hgO}w!TH4huwL|*#!q75`#XroPPxdxIJKd= zyHsL~%*(9DYG&0toR=2sJXw!+Web`S&yUwv9kfGr99U{D_X5(94T||Ktr|z-12X09 zbk*({|3%KQ_v+ktkVJip(CJajt6YM9XejA&QRxgk(kcUQ1o_qGF$qzA^e*n}Wj~bE zxM+@`i(SS*B`x0iwbDs*xardlpPhl86rhDFU;>}}U9Zk4D7A8APUt`1-C+SGcFB9D z%Jtqp#-qdD1Bsx^a2d#%jZnt$8uj$x|ABR6j#F zVYx`XJW79hoW%_M`EG^(efj_;Du+j1tF1v111i#+|S~;XFOK z2lBI=^zJ%Cg4Q74nU1#%xFpxa`!KlJF9}<>M|V>s$Z<9YG1mPzg?XV*WZ+Dg%s$iM zonZRr%TI4R6Y`9eG<$=!_jsM|Y`piPG>|tyUId1kC;Iemg|(g1lGxq%CF1#6N{VZ~ z1wd;eGL5;Pgor?t0h25hOCoe|e?h^Umrm&be@_5yS_2~gh~s&nzVmlvj{8OYT#bwK zX9gjQJ6430^bBSq(2w~ee}{M?{M?)*@-zz$RB%4dbEcl=3(I=qr#;6QD=%Ynco3*j zDN&lT(Iq#O{R+ysR1GoZ(6Mm#mrPJ>zuA{5Vy)f}t4%$Qkz1O74Mg5~T<603BYm8O zt>up*^E&nHZb?hLNc-|f8}+0_zX{K?wZq@l-ks}uZlqXJ(7M%Looj|8-MOHprC=VM zC#tHxkPAsobMr5LJEyN2+Ss$5kCGIr=p9fzT&I!MX!r(sSR#>`H&p; z@{>XjhxQOv!G#^oKfQ5-tp#dVu7|smp`%WH&QeH*&!m@S4^h7ms9+`@`%b`AlIEWqb&_)?@G$ z*!UKfB<=X+beyb_^ggDd-=6fc!*~$`^G+icCCtq?GLf~W&~nr&6#>EYaaZrZc#mTg z^!NR7^a@d}{%t2z+tgBy^#jfSx+DpJPY$Axxkj0U{;ObwZz{fj3YGhaL1wvf;d-YAhI@4ydCsEhwH@*9Em|>H*m3tp z7xo2>N4d&*c5ppG6}ySvLDDx%5Tv^!mdDAkDx7B`TcvpXGeQdLH zZCx&|#4NvZx4Z3-@7L3E6*K~Kn0f1obY$B_BfasXR0;6gkEwmAH_kCCu67K{UY*E~ z!4A$t3#{Lz2`Di(p9Fx$BaRR4HG62BR4K26p*fFXfb0}6)$A=@w~*YeZ@eJGaynxR zI#XxreYwk$!UO_SIiYo8A<#`F-S8a3Z`~?)4!e)dQTqTZ_~T~n*i4txAM@_GmCN)^ zOT#U>Z>w#qpZAwS6s~9S_VNIZO(~}ZU`3j0YiuHeVO#f$F%*BD67799tc$Eg!?1Sd za!ge7^=tj;Z17Rba-bp)sG`efwYpkOVcr zJsDyst=ZqdBai^-6YI;*X3W=Fj`JE>ajl-BwO^1igLmAI@x#UCo-4KC>L?j8l^PjX z`q~DIK zDgMU!*b~?ML%=aXIGL)?lN&M;aL9r_cNgiHUcYEFxyO6SJ=2UFIp(foMUDjXnq5zq zW}Ly$ugU)U!F;Z@r;nYyMxqqEA}*6LC>fc7*0?%o10v2|^tl|Fq$yKB z+k3@xGCI8`pIMTC;G~ddlhx+$lupc3V0<53!XW4JJc?Hn&)R%G7k)~#Qyht zT_(k@(2GJ4T#B@L4XG_3t<1d8QsxqO#47Y6yD<=yvvfeciYgFUl|{ttVH@3kzN)gl zn;jsX-SJ{zsS)zcE4!#)$gxDjB$z9GoLYItz@29b$Q*I1eHYIcK>E+D!_#!TzBZ~$ zl+U#RTBqaU#H()p@k?%@y?^uR1Zwh4(*Z9j`@DH~)jT0dL0%sA@;U!x0JcTVCx5z- z;1D;6(Kj@@=*X6Of2%?F16L55Xsp+kjOg5;VY|2a-jq?U!_LAa=ozlo5zjT{$fuUy zqJ{f<>y%;SI4HVpZw$t@+g5G&IKhmA$o%K@IM~(2wqDA(qM6v&bf+pS|3p=RELJ4g z_~hl|^A1h?x|z<7?Lb@q+>X?FSv+6un#a>gJK$9stYD*4=$D~%LX}ISQZGrT*>I!Z zG2BPGZt;fufh+9LPOr5qt2iR-eU47o;WavudOT6*@d8MxxsIjFqu%1#mxhf`=W1*F zx^c}i@ujdwXVdFc%>G%Yg4ZQybvySj$<$~$O>vuJ@hL`hd;W{>dmK+w`7%iQqV1}8 z5Gf~ql;jS;*B7MOrZ@CX_f9o-K)U5qm zedb+rlw5y_-+~JuENk?e9|0@^fC*Nb^k$L+Q#JV zHu55@BEPc}TU>a^Cdd&B1OmH~CynJj0^*MwY;^CO%rDs!bG2WPPtL{q;(Hdr$s$kM zCqtI-$)ykGUckw&eVzIc>*LEq-yAjhfTJZ22jb{+jTGoMQn&>weQ|sL^yOC<{Y_FL zqQ=EV=O-F_3lnRFK?8xE)b_rLuUlz--Hi*X=P)GX-yG2br|ttc{a*QN#QmMzG}I-} z8+|O>A_eR|{p>rr_3Wm2t6?kU{M-eEyBJ}91xYo>ve!Siw&xOQwU*GPIDs<3}*=vz!Yo$r6<^$sqQO?w!5#@6PfX$~;Jc1*$^8ow znkh)m(z-AKA!c$rGVR5kTxMt5^p5#-3KR!mW&IY3!1wt}_0c#_gcpi%Y6f13r04Qm zg^V}s+PuA-pnG`8sN#o~FOG$sP*)*F;vD0_7sdVjW>{udlnTZsYpr@H3TyY^IMPT1 zbtBi}j!AX<&QR`fa~#lyHYctR>1&a^>_d^2H{xWyGPiDs9k@mHtFCsC%Ui8++}_dd z5|u=+;149!74zEAHc`+3ZID ze2m7zG@iL9JAA@4_CA^c(5dTX5pe7t_?7|ABl31)r^Y=6f#CtDuk?AmeAhe+mDXAs z#e!iZY3GvrxnB+yhI^YK`}4UN)@>X>^bDCu3A5w=y?gi}HOe}g9X~eGj~1`H6&ztq zcl-q-$rohHJx=PhsTW&s=(PUWILc$v@469OFOL#+rKkQbkH6)6V%24(@{{H7Ot_c; zM9vz4TH(yz&D39R%K3fx;UJEYXbN(6IW_M`0FZgd0K;o~J!7^Wv7Fb?0X$+G7vZU$ zp1^qHg(|0nO&ZqT39ggzh|pi@dgOpva2i4aX_s%9{{vOK0P0p z=b=V${z)!PF5;K6vF{?V)3uBy{OgLJc}_@`8pyqqJCJDF(S@EQh~lho!C)_sfp*Up z?o_B8=f*c~zcZeaI`O&uGL$=njk08eoEBogYfz#Yd-r$_ZoHJq3O{w45fQ#t5 z)B}r&@wZOhdFMC}*QNC6a#-fF{}KV(AxJ-ePf>|gt**fv$$z`Dzsu-Y;s<$p9->-~ z`4eQc()AsjKhgI&&;*t~KSeoZLR+b;im}4}^Zpp-6HMWZdwwY9yJRHwVr|4R_p^pb z)MxMFOD|M>U}*f#WpGJTJTsYtek@)JlO7J}-%hVt@suTMQ`ZVlRxzCp%tn<(LVdFZ zhdBH)iEwq(klpjt^+$MyWQecb`N}33uwDGrB1+=W#xJ`|@Pm%E)=yzh5# z-%Ojdb=I3!wO-=UZA`atW3e!^{auyX)I(~c@O`rV?$~;>+ElTOK7G@O9lY^5a{Uv) z7Wk@+r~*qb>(@6@Db&qRVejx)VJ#%A7U6E9-#l*9?#xN#ctPK<{Bq>;vD;ZY#SV2N zff|zL+{F|^&jc_BJ?hpk!2N6H=?>4LpitIBkvzX{2C8!ND?kYk5;4GL?F5{Pj)xSJ z$!G%Dt4RFu+Iso(TuLemwt?W9K@?g+TXYnJ+BJ?-%9(y3(h_8q6bTw3u1R zSvQtAlHFLIzvS0sH5I#98}Ud{@8oVTV7AxGr8KJdzDDY0rCxZ+3K1frbGN`ya*ikR z`pmvh#IE%K(279yJiPk8_~}7p29}iSnoBLB(6Rp{Gk%uO+t}hBPx6iZ_pEus5jo5W zASapl64g$a$#BR(?#P4BW9CtyuAbbjS~OTvaJpESR6J`TXRKdogHQc#4x1KTQYT!O zTfHGb^onlfaR;(NpMTsW-#3>1v@Nn!b7_3AYebgK8+-2e<0?XD7_|n}q@H6<+3x*z zsC%>mTQ%+&etPWNF{hW;PgUdnF`1~pCdb4-w zvC65;FY=8l&K8X_WIg`aS>{UvJqQh92{(r`N&N%;FgjxEMWqyk`#Z3YH|1T%P>QO4 z-#sNh$gujo!BfyfqGp5r9)G{oqsPuBvgP0@r^w`~cZo*>gg@k5;Fs&vFGZ zZrT*m<&C?~-f6jWT90Y-UXE9v)|=<43ZmlJJl0&rb#E)j`*Kg~YSg>- zl~gE~?;)2c&*t71EkGrh<{H((l$2k=j8*`iZTd!vJAHv~#fN+nTtf!qtcI5o0R0M}FN{&_sgU2I$lXi#V*$l8fT#uMHaPJ4goY`;s zh&+iVu8Z^rckM)0I~%vXBNseaP)i z`LUik{s_la<_6*jtYIjDzTesFb%7^ZT?BPrUxqly&o1!tY^>3ZXiB$aT+j$s;w zdAN@1q5d5T`B&KNd=Z>B83EligL9s2Hxn6u?Ac#S3a34LA{5OA4my=pmvpvv|69s( zL&-T95&8e|P@vPSJ6E^QPrD#6=pZuET@YipPc!xPp%-5p09E^WekgW&Mlp4?-&HL1mik^StLEP=(%m@+y*RWzoujx42&^6|8%LswGMD&N?65 z4b5HSuap7LaN&iLUwB!OE=4IKZ~{LvbH1<$?_STTp&6K;834TFr#K8dx|yWL9Cm-T z6yTz(p(PXW4VoJSc7OL1K{$mVq3;mJnGSp#K9cuUUdU{5+JL-s6vvZQ8T=*RCtA-A zZh}>=1(vw*pc%`RY3utD^VI05@$*`*_Z$ClHQ!561p``^)n)m^`lUQgCl7lH;03#- z;3PGUEPY`nM4`YPjS~A>MEFRch{zV%2Nq*DxH;N1_v@hV(o1(6zQQk}mi4VrZHmUJ z2gm0JxxybC3&%?dq81643*)?+Up1UTOHV!s))mcOboK28|MCN(R4CC8*7+kPl!E%D zcq$AYR&eQYP=Yii`3)uE=}|G*H(Vg7E^zU3O=iG3b2Ho!yoX%^yOMZ#IiG%sF*GK5 zx4|{mFwfR8PN?XKF|P5mj?%s#v)|)=b88Q4fWVpW5>{Pam8&G-SR7}j7G)mWH3y8* z8WPo&sAmB*50(VPd2N=Y4zK;v_FBJ7!_+@@?RV8_`lx;i@An-~KP8CCHv&@%25Q4G zsFdyUv}gkoF^YO5@Is0WElJnX9O0AN9^3gcXJD%IvbJ`B=G^qJ^pB-8TT&ITEz0{4U8*%DnrU`qmHRl-5^`sVa6T}H~;&MewDNf40 z@1oCCb;`lKE*a?cq+kZXTeGVWinHkzH%0=Z3k`9M4JZC>|Mjxq}j4?&T5qcM{fCXhY zJgo_`#Ul5e)u1Ed3ZinxORUFbe#9e&r{nnb?Mq}&Vf2B!}ad$*Mi(#_G4<;QRiR^ zc6`DmM_tv+Ht1v4-*@++eZ0jQ_xB1?o{qk6R*@@|VBL}ZN#c4nbd+EV2f~QGMZ;#P zRdBP6b}GL-5)ktg|Ap3i^w|5!NAuJ@4LLzSsH1l|?(kvKG@tNST*XqG5R0wV4HCXX zyhu;0QawXVLNk^Eqd;MVQIm#SzNGhg%H=cXY*jlm)9-!-E6zE9+hPu>xjXhduOnmc z95hh)6tUVGK}^DAx>};YwUApP0dWH2A5`J_GB-ys_aaao)kB+3N^YG#l!b>_OO$x! zB&(poZE~@kn}5M>QMCfI=%4Gs#WW*|*Y?*d^iQD@-=vxsgLT8P(6?3Mz(!f$CS%!H$Uu1*IBRRjAkd+jB)&1%|Aij^qua}!|Sfkc2Ex%5RD#xiGA;ib)_O*t1@XI_(Nlw(y}Ll1nnMm)Xo>K z7d3h~Ta|!={d$T9vQ5aAUL1_|=4?Xpp4e|-LM%?kS4wn;;s@x}Y@FVo`k>^7?qkI- zJOhV5rV?nQcaar=v5%0akQuvt|6poZ7vvE!V1+W9920A`J#3z;^)sFMbX-$&uDRY<8(-B%4Ma#otHE9`3CRf#Rcxf;Z! z26ySE(I1C;;GJ$<20EDeF}Zci>3vk)x1GPH)E=JfVY?5?7i;YGO@ZnPv;o#;_G}?T zpSrVJ{L1?-&V!ULq1b z%x|pxR)(e6VSq%a+PVyA&ZlZ#SCaaxb_bJ2&&BLNO3m)$0StM@hA>FOp;p0V%@>Lr zs;Z6i1YpN-D*&A6p7`q`^vMAdnqkz&Nqc|8^=ey~^3E8EjlK6$t<#y}Wh8vB%^2uf z4tdYPDP{6rRj2iiPg)0lAR(1!At%E7&a0^#FsRS!kEy1zYHMbn)7{>#M^pTrMU}iC z93STdH9{`6J|S`hzF}ItlkKNbL;je29Ml>AVLP+T!uowafqZ!()vW1Ap8O0BKeM=( z7t2!Bz-$fJi%4E|gmEL)l7o)B*`C7nNjpsG6X2ip6Rsi z>edt%4#(R(LT6bn+r|!Avcp(@1YCh7d$+*wrZ=gA3CR7YMY?yI3V&Da?(#6)8Yt`T z)@I#=mwF12N3jl}oyp($`CT3|a&f$ABaO5et|2SnJvz=u!RL(`@kicwd;1ZQ<#~M< zO5+@O`L`85(UhZ!d{V2O0lK5o+^x>2yp9@j)>j9eO1A6dTVa9)`Q*nC;WX}Oo7Uca zpN%|@5dMt&Lv#575%##;$b@?L$4(f2p73n=r`FxH*`O#`&3|g%^Pe{&hLW%FZ&a?2 zHcBw}+b25}?=~z$qr0bK6@27=%RgvQe;?=Cw~l7>@%rOO7Rtt4BZ;L8?hJgizDb}X zx9}M5CSlJ7eYTypN6*IGlY0%`EpW?HEfE*IL}eOIC&{E!v{CEj$hCR`;O7vV%Hd}p zJ$JY4E;>VhUp$sN>WgPoqh=}fnnQ&*OolxiuHTK?iQm69(*Cx$#xdN3ju;$JAa-1i z!Q|n+q9I9s9TGR>ALeJN0zC8e{jtUNciVKrBLpue0EW0{9~#<5K5CB%O;U-or-i#W z`oXRDizp3>Q}HRNr+VEut2`26)prKsw380U8gq(_dExOww@FdeO2E!G%h?kUU*|9m z25}Sn7dUV|iRs3odto>PiQWDMt;j>mId>+AC zm+xMl4D1;?Ol!XNvB|jf(gj3Et+*@;yLQo(6q_$_)PSg8wEL`QBpU3Js4ttLWE+94 z$`G^*+YM>OReg&U;6!;)o}gX4*`QMMzqFeYu>31jQBY1GlFRLJt?9Dt-&gbd&luMKwKny&$Q()l%xmlI`O^w?8Sn^oB@OPZznRvuCo&#x)tIh&nvMmnE~^j^r}uC zt*&>%cev{5N=6kKsq7w7>6huB@YFv&P~TPbmq!Z4H3*k}bJBP2(@VRHKi^Yq_1yfGxwvHP2$sZ3l@cC@6TXPp;c?rTyWj+rxJDe( z69p;_5%#4=93r%S2hF^h2vTcHG<%p%qo=|LG5&{3HuZW7OW0e1qtLh z#6fo#2g%h>2A>^FxXKmF2pDOa4_!NIyhf_XT5uAvA1k@A4;xh!j8Fg1Od4U|VWCvk zkUT4<)8;>o@2BsLi+^r0xyUYS!9J6J_3!lv_d<1ioyY1Cd8fBWKhB{etZ6>Zfj-Vg zXv%x_=)~dlT65~hcz5?z=AesxzGPUNT|xS~z?z$Cv~lzV_$x364$qgMkG{K~t6}lg zj&hH{lT^M@8Ld2B#l!$X%Q9B$2E7S)-j$zN*=P1*rrBvZk|z6BG=*c=Z?4*9#N)%fESnnNtKXFY49z^5Z6f zK1?<12)hk62fICkT>hv(2Z0mhlE$rLyvyBTQAZIKRiie}J9Jj~ouTo@=gv+u5cKRQ zJc4>B^N~`9l0bgi@;7m&}gpEuP}Q};8NVttdn_Oxc*WPpvD)u z0ur?-^WNYEl*g_u3o*}YfgZ-AYwXRF*rMNChfdh>T}N2Q2T&+MTap=b&DtE|Kr!&0 ztQ+W<91~A%Fz4)D|31#{z-G&XK@#IKp3X{&&S7x>Jb<>*Xyg^aOuABJ&6Oa2YfsbE zOL!x2ro317?b2kLK7Ev`Yz_o(1}O|wBEni81U->?{zd!)dEsE&#iSs;`>@y$cbnyn z-Fv@t?l6_q11%zLc)0S2b^&(?_ObI^%=11!aAyhOGD0yuYgF~LJg4hhsotp-+ulDjgBI4?!ZOj_Rmtb$sho1enwX?lJ z2;%{L9>==vUdp7>mlJKlo8?okr+QGgaW(=ZZd1UtL$ zJxAMHwq1l`t}T_006O`x4*L1WI%Q)qR_Q+k9fin@>ZfBU?bqZhUYbOnxJRYTXpYks z-su%U@|bn(&@Tz;xSmfg`$!6RZZ_ zFEeF?+m%$+_D=+1m0W%BxKQ-QivoDqT|opK5i&DN7*%g74}jzOcQm$L zS*2U&Vy-cyOgY>vT}9mk_+92`i1_?r6KgzaNf@aGY4AtP*zPu78Pql)v=D)%f*Rvp zk2@l*msSan-VyOniLuT3d`3hw7@}cK@7$%NWLpLwy8fP!E#VtF5QRbe9pNVyYMfJ~t`@9(P01K(x@;U{7txLOqX# zFON9uRkH01?=wQqyzmqwk35F8a&N-l$L>CQ>-3=a-6BHtkqcI=#uF%Umc)%y2k<*0pz)N_@`whxsUJ65PiHxq%KB573iQ7IqW~B zrxOZ7J6^rV_~y~qunO4^4^2RM&U;|)!#Oqh!h;g_ah!b@=lP!TJd>?J9%G}7Sxm6Gmi;o&W`*}*hjx5*d6Ylv9urD z)u*J7wRImG?BTburcV@2&*kp5vIJ5C=vzgt2wON*R#1BHIrjOwY{+sT3Yc0UVl#+2 zU*Dot%Hc00R74^m|r_VXx-yWy>t&3u&q9a zxNdy9)f0P|o7;5$_RoT?nyi0zw}^UOfWVR|>JozW^7wYQKh{cq;14d&FB_J=;wj6I zFO7QJc6xZS28lYQyi~z(RzCpAF!F6%nLl#kFB+Dti`OAo(Du^60q1wxU)M{nWI_VN z&ML@=o~>JV7U&ntXbdJWsdBT${hok5=dwG2K@7kgf$`Ucqvlm&5DwMG_bT+_-RQ)} zBq8!}Eyf;hxe~9Ss#6H@aZ7oCKzchwq%{OzV33a9R-VB<_2EF`U)*(UHvT7lI;6-3 zdb{`eZZWGT92qy~C;2tSKlgx-yX}L-Rv7aTM&Q)B4|`qDL4UmtS;aBmZ$B+o#QThG zAQRNl53y;We;_yR@{()hN{6OJ1%HSsd3Z8-#E8&61TcTe6Q%$A`M&|+zHFiO{&+}@ zJt2WnhK0EZpgNE*!n*rFOI70eJ?LTQJk=R)mFcVBsqXUwV3E&teZ3e?9@OtteBbdo zqE6aQ)5T^*Ka#Eiisw+*=l_h$d%?2i?cbLvwT6(ueR z`=6ncvd*!ouq8}I*PJYYs)*SuFZF%HM#fQ>`?X>2K=mG{MXItP1@GsUHG;unT5jJz zuaCe>Gp2%G#myM}m{<=Z4?-XPx~aZfwBjjGDc$zkAVmw9`D~V4c6#mMtFqNr?_ybu zRa}f3sY4~?1HQ>{-xRHE0b&riwGh;{--}dso|^{$Dt`D+dMA#NDi3@3#g5NI8&5xv zem)v&IG}{Rj(J-xW9bHcmD-jH3-}F>YFT6c{aVp#LyqM-`@grGPKCPJ+0_b zF9f5OC@LO-x%_SKVm`e@8%ozppo9R%a#swK&Z zS63ciLi;jzmnmU8iMXWPOZJJG056aK!nz!8CoEotG=PK;7JF3h>#-fcj$m3_e3l7F zckQ@%C#WBC!6j<^IueaDiI0HpkwyPe>;yZ8%1+7YH4C%4{kH8eBttmC;e6${{yYWk zy}L6u5C^xKxqOnnxTy>g6`!XyXJ+-$Bi7Es_8O-kMMY*^k0%T|S5J{F(f zj{A;5cMmbUsIn0_%Fsw^um6x2O21)XgJX62-Bixi&+B(Fw~)KqC-$4!D2dz!Bc=@7 z7TsWo_g#BFsiMtD-$S43ce5iMT8ZDH3TL9U%ov~_Hy0^tF!Hd!Q}^t*zaiUu6YuRQ zdae4l9c9Y1(jbV4ND%is@_c??V)+){{?ot2FAdib0 zXd;vnhHfLFcR#+wYk91#LY0m8h`VLYDOa zKM3f6-j;f`l@eu~CUggLt++QBE7sn7N*I3tR$k4YJyj#e2WM>itnVE6eItl}o1S2S zSV(UaxL75m2M5XH2FuJxkjTMb%qhpk1&LUK6Id+5kWXC`^JQM`PJ10pb1hEym&hK? zEns8aAKB3wR2B$ zpg*JXM4JKT6Mws6oS;g5)(r~HM{!4`%ppw;V_%tPCE}s7Wuuh%#jXqOC`-QcZ|Hd- z=fhnC0R0@F5d<{8A`5b;#hc}K9q*TNP~PjifdP&N%_NPFO>0O;TUOw7!JAI4;X6PZ zcTM)u3h{@f=kS0;T51wm=WW%8v5X5l2p(h5%b!ZIeya)#XqT^*B)yJ$}c@Px}Hic^cVK+JZj5b*3D?(gH4 zy?uJ3cUKUY!++VoV{qD?M-*=Q)A$Y^S`Uvw4b0>FhN77Ks1=lCSoMACzXzD2}bPi!gsj`1gorQths|)}82b=i|Yb z3z%nI06@p!muNeGTuo_R8&Xy4JpbN>+g99{n#QD9M})gi zTLn1qwOP(PM%2T)|GqT0|7aKdC_#CdMR2DD&U+lMRkxVLT{`xZ0SxqRO~*0Q|&}r55?T@jd1q#B%|Q)EKq{(Xws@d%Sv&32NQ$^$NnH0*Jy$@2WSm z3%{(fXOpt1pTy2HCZ}zRNc#9b;~gGCzSQgiopQgv|EHzTRtY zZbeNU(UpJOD-aNM^vqHxD>U*s5%?&OrxlMj;(*YoJZGcK-(jf8obmfTg$Pb)ic~0e zdUXZgUy^6oprjAR2s9dQ8r`>8A<%j&ls8HK?l>CkV??eHFTC<5782pRKcBA_u5yXG zn8<3QlFMR?2m@3TQ0l@9G7W5dca}@-Y|PvT*tv$uaMvUdAP9o?kbJ1??A`e$?d{#s zdc(G4kNe*E6&xqu9lw|y+8g!3)NiZ(uJ!Vyev6T9A?x8{7nVPCjZg7T$oIpH4a)KA z+qm`?T4=F)ykotOIC*UaLl$xl??U>^5X8yx45`Oa-V9rFpgNw%;06-v_+9b~)1Cv^ql@ zx*8EfEx>#%09rhzhV!pNWBNN^=+Vy;%4&)ysYKdselxQ*D z8#n_1tScA3TYbFyJO|a(g*7|?ldkuvgmW^E;u=}tn5{QFHNYM7|A6I!KW=Ct zUyGCXqg6o$&@mi`8a1E^lwaRHYsHbGPPXCb{apnIP{L_bYJ9xy}H}~Hd%Pvpsy zJbtWo0tMp`<@a13)5%@WQ(KCfeL3&aAzK9Uem)(fkZEtPCC=@B<))Sp-==OGg8c(( zg%S4$oo<@AKP@Sfd|=vb7snNU(CmI_Z9`n;dBaoLyqpuOUx<1@V?td>U|gTijdMuC z=$arYq)`4HpfI>?4Ow?yLvSgRU6c4e=ezGM8;Io*H1r)Vg6x%DjT^G>c%0vN%Kp{P z!KdeHF*y;OyEC8=4(Olx5Yk!LOQ>|jlSC!z52U6?Z~AElBCL2BUs|5<(TRpLJo;$XlxXf9%FFz&x6t8$ zoHWp+*FMyjkPN8M-*fNjn3xoHe|VpZ`Ak-PO}t(wyy56eG-D^bhJ&NbPI{g%+`U^D zx{?~CkGUMUCkwZCODMmE4A$kqJi?I*Q-*g5AIw6KDUQRL?fmgR-0$gOlaiGd{x0tc zKqvF*r_x)MPxqMiG62+5pOYX0Qp?W=@;FxHl#o$EtHcTm*t1(B0QO0HNlHp@JX5Y5 zNObe06T!K77P$NH!_F%%eplGME+HGbHGBqQ#`=ZXb9?=h}}5-2I4jL8R;=` zs{MB{R;lM$6hO#Ubh(^{JM~zu^0M_vk33&2u84g*9`Jkw<@SSPPVk`sn=-pgqo4^y z7i4c>u(xc;LAtJbXtD(mA1RKBTB5#IOmuEWEA`>SL!ezx$9Oa20{EWASBEVz~z6TSg4A_A-AbRiYjDTHQG28Q*A!U-7(Ha79_ zJEE>}yo)%wunH^gTEU9C(*qLJI$c}?%QqrmpryEimA2YVI?ea{ zsTYT(vqITkFCiip)A@FKsNfWX9TP1iS{6$};sb0hI{?F|I47zRV2wHCJ-X#yzqNa) zKgF@mFq>Jm)^tL%8?9aoo3O(bDe`EyS^Rz+4>>Rf=H)5Hb-dlp$Vz_|B64~fZbao* z>-y?}9Vai$0tE%4)meO4?58QE zEG7Av%e)%Ji=kqZD=7cfk5y5k8(6BXeat&I(hKlCFK;Ql;57cCc>?OCX0V~}3(we2 zmrvF@`LfM{N!3@&%}Zx^@NNhX+tx$FxN#lbL8^&JDWPq|L?0sJ7MY%c!W}GI_7a8= zUHd7eIOkD^QVn5qFMtPV-W#(Ltk0iLDdH*@TtgI6A^ps+X2p*P%i3S-(@SVtLIh*U+F=Y5=o;-&n+*{qf;Og#X+r;~mW**jH$S%RB`Qf#NcKYgi{qi6Y# znC=K6%DU*x#NB*5iM#V+JN#N)2eZ#Qa0s?SVsqWbxqkVcyDU>PvNklZaUIGClgn91 zt*k|58H{R|AWIV)k1!$1^|AtVH9?E6^-t7|ObsaTMxIS@y-AR6F$sz~# zUGKt=qYT<;W2TdVclB+SIU06Dkh*XY?FC%cJay{B+g-b2qaxKzuQB}oXA#|RTqLN_ z3uwKvPWwjqEyf3=o4wpGlXBbh7aOd(-hsuUI&i0pG|LAQ@9nX5g;UY~J~Rfaf9H1b z^qi+lc?^}4OjkTX3i`;qSi6mw9yu3OxC#V0T+qQ`PYTG#hzHG)KitK=KKkbX^o92} zPG-w{OvrE(d)v96{&^O|lSe1ZH+>vZ_f21j9zdK8NX{=&4dMM_al!NuyaxpxO#f=6 zH?94^*gF#5?W#HKrW_Ub3#}V_6%CuU%2@x}pJeS;_B3_t#0U+d>bZf`{a}Z8qI;UA z*z(fg0WzZBR(iBl!J*rC(rZG3$opVm>m4_^Flk55c9h^t@krod!k=G` zr5YN31kUqrnVmLN29-#>;YY>IHv{@49{0w`)?OVyD_~NyBJp+QG9QxDO)@{In({5x zMUQ;ZAiKcd>JlZ>WNr0Ty1;u^y_&s>x=Olo^R%`tL5apfAyId zZ%p7}@Lo(X<~pw*)>hA5HKCi5;l2*4JaVDfo3r8WXW*sNc4`96jf3tM`F-G2c@wZ& z?XU7T$br=h&ew{$k1Tzz?EC}Eq*+0wXRGQK;22ua5{3rlJ4ZBarBL`Q_Wsj~&MOl#?TtRMH2P@JX)wYESq>b-Ai7 z9*=wEVu733=5`~%DB{7P_7Ic_wf0S4zF2BP&ZC)CNOD;l?Q!6f5F(Hpu zar#l}N>8Gx8OaKzouR~0BXE03c&^{BeJWR@b^NP$#xT-$9O!tO>C&}q0F`9k)h-D4 zxdGGYPXF9qv&j7A<&Ny98(>Vf9WcN{;q`V_ks7n@vLig;>^1%Uhz#MaA>IDICMlE0a<25z4h2RPY)^XJrN{}x7F zbN!qvUjD|Dsvi=whg>^${eAa!`e1cnif#q`oN|*^wP@kjfv$E`czeef^sGh)QsC<+ ziXQOxg@4fz|7S2p0i_$yC--6Ip7+FX_JGfew|q$2;x-K!uxGV{M?i)F4^3HwPhBnL zrN!)zU*@|%QWycyfY98&ncK?<@9aR#ZsQwiP&^?>m!r=nDa!n1*pa%t5@YY|Xat^t z4$cznt}di)!&UBU>W;Jo#6D1hw`s3MQQIA}WmmS|F_2CI>cq7C=I0~k8<+Yh zR|q2SGxj`v*?ik^m1smh(q*1@ynp<9;goNx@CIV~1s_AFu1t41U?@w61Y`cm%@=b| z)c3CjK6)f!a+l%@XWL`OCA^%L*6*wcbZGK4m)?H;>?7oqp1Sem_URdAAzrCAaJ}v_ za>#K8uiMkW=_eU}e{V<2(NM=%G&}*fOU$gYTt8s`$ea0rZx8b^Ev`$ z3eom%wm;6}HXR8D6-y%mez~Swco?q(@md>u!18kP@}1K0B3nc_*?dl(!ddncEUXxt zuwL88)}HlpyQ$uFFT8pW%DN{cQ0`6ky&a{s>CMD|n&**Ef48D*?MB-x2%#O(i_w(ML*m;+)tf;jnSBIHv zwC7hD0dJnGH8O1z=E2OB8)<1OV@qQUtvjY$tr4$_o<-6q)nqVAi5S@j>jFZxW(5*PeVdA%%Om^DjG5MKHyq?qFavGR-WSKrD7=Mz&WJ+!_mkv(+&==wn> zkf%}kgvIH(H>f!AQg@@{GDf!BpOy#YG3Ob&zYJQiA33B^Uq1w% z=SOgRN#70R%ltlRTwNcA%P!zF+|eCcqVlP-yw-Mqm*d&K-iEH+hYe;?Hh#%ohD1G_ z0zus|ZJ$E*ee3sKX0`I?1wc70^Qw&$guddnOrdfuopz6}9vj8+CkBZ&SxUY{C7l+< z*iFEs=@w%AXD2YG#d+Sk*Q|i@D+JYLiO1;(;13+~5)Ir9wfv=+3|qX_cB2yhM;~nE z&AfN0+ngsNs85p&Xl3z?`e$|-VI8g8^0zFVxx0T~j?m_?h`C@U9CyZ@3wOmWIp*~Y zGG-aPR}=IRTn)9miLKX5X8m2{Av6@l+lL{P8&qgQq9I>M{AQE9q?T%^z}UKQd>tM` zo-<;%t6l`9t0T!rV|my1@5VSykDIS1Q#h%WwfR9JQ_S!TiNnb6`7c#zt8P~H+qc*`-Oa=AM+x!9-`8XFDm@K*3)q! z_x{g+!-S4~)>leLQtAhg70@@(ElVzixFzo;YDH7wIp)fhLIzaxN2O4PJ4~MFia@r# zx?2*>--6zEn8LFoqVe05RJdm1IWTsmqWoR+|J%-J3g=7-Z-D# zPv!01wGLS6)gqA@SmQyrzJtfCKK(vVO_46a+sa0f;a)h-FgCXvnVSJUY2A@WIMS}^ zDJ%D-lVm`N#h7DF<@qRak^!c;eX?)a!FP))X{?ebg%kph>n+>?VN}Z0bqQK0Vb3WU zTRPTR#FYtp71(~v$u+yne#<&}(>JHD-^Fk1{Y5Xl%rXV$uGo@hxf-9KJa-<52Cz~N zxSKJF$;UfG?4JIO-pe#1BW8l;rqKCnJJgpFX}Q0L{0Cn5aE3HJc=Q!|k>jD`jt~v> zN4FpMH1pWm)hTu4L@#9|p}c74y^%aUD26-*8N!j}53mzi@$Db?Sw%$k(#X9nm($~0 zcI2tLy%gruLj$C{@9uYqk~1*xEfybd53WNh0({W_J(o8k3*+bWye=5qBTsl(O~N)j zfb?UnP*i#HmD;yw-qP)d@95v@L)>o;9fwUk--tD6=t`~w4sEXmeq=F;O=)l`5)esy(jq&KiB7%x(Z-T(kj=3gYmA2j)hz%Y$Z>u=anm z#)!V``ONgulx{hgC;f2i%*|E;t~xOWFcGvqUcKwI>oR5rP%@yv96H4tUS?IY8ZYB> z;Loi76?URDamiUjVj4MvaOX^+ridDZL(yJ8^UhurZ~OUt#mQMbKJkgVr`V(TuRqM8 zgy4U^?)09))H(!0x!#Q4n>82Z70&p6@fUui%k+a%5lWYjbUdz^VXWn8q~^!zsRDri zT!RSL>pC67Be!!~x(){HAAbYiZ+qhuu*3L@?rk1FpUU^i2$ZoVv;V2EY7R{_I3ojriW-g$(IIF2!3lPtJrz9R`ifvs8Nu zb+s^nIfRe%b3QMCs2(ooF)hm77idBF0JS7|9d9eRC5f(fD2I&8P_`F_GB| zcZGIo&f+3=SO808#~GKy0R!@n+PWpZpTT%7AbQZk*NM?_c68=!e{CeD3aDfAe7qhn)(ES!24DH{rjOs zK7^r1Jvg42-Cw+B3M=@xRXp%%eH4A`NluenWt6LyG+c5kypJH4Oz?ue*I3__`Qe0Q@b8Cm#)AEh&$cFsOxyd;&mj`6jdxzv z#_bRP=HE9gxux!@!`#Sqm;2E_%XnO>$MIz<8x3RxYTMV*tqSb0NCBngowHzXWfLEs$8|o69=OaDsE)SdKpTQ)qAjw#AUpbGsw1AkP!OYJ zd-#Yy`8fKAr|=$Ot;Ee2^Xhb}5GFX^{BR<*b=@b(R5z(lU{JRg(`TkiA zJB*egzpUBZzc5evYzO8$=KYUOf z|Hg>veN&QvPw?s3>-)={9NVTvJo9k)5j&a&=NAI%Y961jRm8WSt?CDX6GX*%*l}b7 z<2hm~fbU&W=+`J}CDHuL6^If=gGc!mhhL{e(JcRNPw{Z|PyFri_`IN+H>;oc#&iuw zwK<|QO6RxC{h;V%pHiDRpTquvp#K9b*ER@^kjqfe_&yT2pX7)%-(|VCLTrB$4N3b4 zHNk&XUx3s`+xFHEc`wy&JBJR!FTj!=7yI?C&OX}0YOrRzrnO%}^Y*np7We(xku-m+ z?Vo)b8Xf&SNx$jfF1>y(!sR>Sz9Yf!D)(Ie9)C~H)R@MS9V`fy1jUWl?_Cz2J&3_>u>_~rhfuD1 zl1#HVf?1l3fx$I#4v|qy0z2QZfKIJ=hn)>x^eclc8@W-O3fj^K4$T6;`P0UkEms^J^`5XMj!9`Xy1vz zMj-hpZ5g>-IaMTKqikCFi6p|q`(@`%%hn^XS|o%LH}Wo!p{XonH93g5HO`g%I9!97 zxQIvDX~Q!}Or}`eJLH3iFInuCX?tIfah)4M_`D2-fh?W~tf*&`Ca^-U`0i=x$eJeV z*9j7;QIvu*8x!OO&?M>k5dcfZfK&ktw^cL!a2@-TVC#GTO&FDU!ROg`adw^^z+>4Q zbJ*e}8G}f=`4_fv=SB~BCi~|05w-lvbpY7&-j~iJ4c;36y0muosXt6c3~;h*3D#NC z&{E1lYGnUc)bF-Xt_NA$0f>`FR-4!zWUL&0n6b+fO78W1M5~MiGKYF#4l9Xj?yN75 zxchY8hwtkH)>M|wu>)7vK*7)MaU2Kb4pd?2A9}%M7im=`Wufryz#GXasXNVk?@mqk zBW8WW;CGtyn^~aYm_y-*=$M~H;#(zTD~z?#ZE8yh)3lSp?G*{}jJ|LSvCAMV`SbfI z&ycQSN|CJ;7M`&5E<0|=AC$w!Deq^(;z-1i@=wbi^ArcNBKDYEJ6Nm3K^ZD5d%5$s z*Km2@cbW#4->RjO_i`(0m5F@eB9pR@S6Jk#p@+M;`Z2o{8KN3Pv%0VA8LRp4_p%YM zxRoT7QEk^ccybfjkZ+lkxcfcmXG-5Ba3h_k!aVf2X!D^xV~}tjFll!IvL!G(jW_Jb zz;*a3{>R%G$VcKmv-74!-mEo|E|Pbv&b8(BSKu%%s@Ba3ZSD|Jvr^unCiI)T!&nNWsQCY};CLy0_r$?Q;ej{4FwTC~tOOxdH3TZ)&wQxg z`ZRI-x2WHobAt!uI{O%g>pND)%*=Vfv#6PeltBdVfl@8L1dNkQC3veo)Vp)VAhz-wT@X(l*eSbt26g zuMja(-6iltiwn2ruRz>GJo&6sCtBj!-$W(}|HhhPl?wMh+Yi=MHHSrWV-02-zbWT( z-|EXrRo^hwR>o|jLfXp`?zXwGyCAR9421nTz-WMc0uZ%`JfQ8saodyXPyI<_&$nCk zsl{XDOBzET*YhnT_B*+vc+0N_XMPf3E_{~deX$yzoVJRmg4d6jMB+n$8_GCD5oJX_ zEHC>%j?QCIQ7sChAH)EWJXAyh0Y!qqjGQG1sC<3b?fDCR`zoBXchy>xcL-a}$Vqlh zE>XwbI|_mS!rA!KQj>_j$0CuXAxWiquu^%>zV>i&_MlCjk5KIHEpr@@mO1wgRMd%& zIXQm?&*B+=wvzI@y>rh!j(7IoI5y4$(hdcYji2+lCk~$xcnyzuTk>0u(hS{He|L3w z&Ov}m5uO551(+ew)V0GXl5fI*+}&QFs6-zdS(L^QT2=E-!>joTd%yibaLqRN-prpz zUSakbIN51FDIhy&Sk%{7zA$6EzzJgibRDl{*%7a3PB_!b$pI_k=r?S+H=$E5(}!SQ zA%U|+)y6HR#N5$vhfusSN9=&qFR&bSOiEdPe!S6u#K}PBNetE&lCOh+jZ^==H<{Cd z8^mcDq==b)iD)m0{4Fkl*7YKeD0S)-ENdTkAu zHvHL~(_dO(TaR;(Eq)cv4xBak6K2O@s($N>?kuUaqx@lTSo0DrHjXH(w2@oich;f2 za{0h=AzNRCGxy5Fw1f*@K-SR;L1U&XJAgcL@29#h;hP>AY&a;__BhT#8d3>l#Q=mAYj^!)9|RY>)sPYN6J1op0p^lN_nuYs^N_#$;>ys4!G|OcyvyTuxSf|b&3!C~DkNOQD$x{t~?2bbL$AeJd z6?<9qtoTZ^idB85S(*JOi@+=R6Kd)NRMCtxvfTT1uFx@v`d!!~7cvOa z6J*H}L07)v^kZZ3NwFB(juvqN7TkIxLRMgQ4{|n@CrbP{gHP{3kC8|#B$WJ6Blbbz zf7v96SkC72#kacjDhU-=^1!m@Rg=SH+(H>&GKff&N;t3iBvJS@3HEfRg55{^S&1Lx zn-TVK${n!gB}#yeAKQJvwQQzll1Jia6o$j{L~+9+Z_N1RgLqW1m>#;ukTwBOljK{O zyyx>&@IjPUQ zpkR}u^);E!k|*j^`Dn<}yEq5-TQJw9VAsV$tlt6{V*zi3_8_)9-cDjlZ1IJ9Y>bbR zjT+xR&#V&j$mXQMi#;?cP<7JvrY$8lfVY>nK|XaRz3(Dlxm;R-8UlV0JMM@Z#bdGR z{_gFVG~T2$YD9)T{kWY?DExalt8@Bt%aTylTk`5;vHLw9i7yl5h-Os#RUYAL6EWt8a$ea*e9_Mb|HnQNSggPT)k8y0$@h z^YWKK*82<*ZZ`&H>4ZJ)+uo8>J3$AnJhKCOUDdd~4ifvCRTBE8{1E=4R{P~t&|REM z;8$w_sa=GOoyuW-8gli>Hj2*@3|f${?J?2A9Rp&0O2EKW{g(~;7Jp0xe}i8naj2u0 zF7M-X>EYvkC|)OY3b%Z0X1VZWPGtO&h?NolO$G~m+NJHk_R4m8 zD#XMP)XwDI0`aa!H`+Rv|AFTxV!N zq61RV+=;NBD+)Lx{TVV;Nv^!O+}=5LsdW};vBo-#dsg0yi=v3#3Ju8t;i!pBQDizh zB9f{;ua_~;O5~R$jv2kKj98@G-`uH0UfpE)8ekG~doy)ZOU|Z*dHClI>ggR~&>~5X z$hc~8K7a)-1&Iy?CTsiXBW%+&fW;_muUuz&r)&hv(Z!PI{?!+gV5z1><*Uu?>!$Zq0?jpHy=R(L< zzs2%2?}5hqU?cQEs@$_e3QSD#CfoXpI)DVV_EL{A-AAS90BN`)sO7|C352a#dVvrb zIau^&@-&%d<@k)D!n~`3is-3CrMEw&kQnQ@2Q**oLmuJ;;2;qBT!l?}{W^`RK%y{k z&cwshEH3njm1#Trjdnvt7GVAaabEGgQr2OiYuuoYwmobRO)3UMO6x;n4lf9rv2NWl zKw9$@z&(rltCoVFdVw^U%@~~1^BSAy)!)s;+E0QU-kE-%euo`gjM+8P_c6yJYg0+h z3IQrRdfDiLYx=mCH>XhYkM$O5;>T1p-mMKsLmuQ**x9Po$j-dYP@htpJL$=$!sI>@ zOZPk6IWE4^vrsfytyec(^T2@Ie7q~TY9u0I*4A;@v85CtaqrM zt#-W3-u2`P-xWRb_~m8wXX*JU;WRr>$1lWF(L~cmT3HIjDZvYQVMDT%t>qHy_PjPP zD_e$Pn!oPn=m<0gXT310(D*ki0$g^S$R1x+?&-;Bs8D8PZ zdu|W9O2lFb;t6->mvkjb`Mr`fig_EXiM2j)J_D8wK-}ByFLz6lT^-|o(NerP_SsSw zN7IOmZr6Fgr72P0JwcEnN1d;0tg?qbk-ujYgPdHTw)#Q(38i!NhV2<1-Xwa2$L9%R z_ua4E#roDhPiab*E^B4kM+&#E0zcTvf#%r;7BUVsmi2W?rFPwYyXmnOBTMWE6-`viScD-iF&;Y=pHM+#W1*Nse#9WY2*zvTE481Phd9=*rPZfp$ZzBd9ycp zuD0-#vHxJ zh5MXwk=fDp;MpxpYeTPZL*QCNiOTQeCvlep0)}~TILyY-XuH70$@GoQ0f0AnMD6WE zs<`EPN-jv@y&oUdryG&aNb;sOG#%U=n=|8245co*eM1>O)8Vj3Kf7!I$YJ)i{q+NZ zR&I)Xm4oLD&e=1>QRDj9Ke6Pqg#1x}4->@%+Q+$y@5xm{0@|C)`N~tjiPYam>AUZY z^ePKvTX7#fJlnyNyR$i-aZ{j%kxr43*~6qF^m+u8=1; z=5OBie_+~FHS;hRbVbPE=}i{gg6}U|tZv`awQMAKp1>^ojo7DF{f#w2d>Ps4_IcD` zv%31*w+3Sg6RRBgzJKUkb~&G3DSanLDRrWFxX;{gm(f^7rx=kd_Uj{FWjOtI?Ptnx z_J08Jwb6|GBKQ+l`FEc-W5m{((|QkIr_|q`=Hd^d1O^1>BA|0@UG5WYnaTh=znOTp zTi$eCd|KJYb{n(hr32M@(jT(6UDs(wp-M2WwSutNL!Y6L%f9RqYj<*9e|Hii1bJUU zwUK6ZnnSN=%;xcw&cR<7ugAygc+l@;PYn3}I?jTNB8C*%^RMq1A@)__Wb@?q zg~~@UR)~ih?V4zNoPwEhePFnHO!GawUsLP%-`U(9hFaK+F#$^amuESMoQtQ4pJFSw z-LKTb{sGdsgkBwY8XftTYws)-#no)_W(YFmLreINXGf_`bk;cl+3sIQrhVo@gy5~! zDE@XxyKnb`<>epvl*u8SyAF|%qcn?7T3*X#6D>%=|K^cIkUoRRV+>*#F?)c;GP-*! z-E68@-_aG`yt8lXC8`0ML%6kbv$EXSoOC>Y4$=w>)0oNotTE+YPVasy(u! zIx$U)U&}L7pZr^dlj5#Lr@NVg0}}~U^iqBuvUkJt<0w79F_Z^_EMTW2G&iO7{oWb0 zs%2~0u7^8}!w>1xf`RcBN5Gdu)@0sJw7b;^pq?tt+rNO$)$xIqyUn0{tciTlC8&1i zo5o2wy`L_3HH85l=skrNZhAPe#)3)-x@=Up*5@ZUz1QcO8Kzx1mk_0&YiqYtbAxOx ziJWoty;pETPxl}IE(s^!0yzjMw-aWJk19w6Vf5Q=C(8N-=h}_0h4sU} z=-L{pw))dIU3aomENJ6j(qh%VX!N(L)6kNoFIVT=r5-v8$VzL}m(^SzA_)FI;tIUg zHkM6eAy)9=&vTM&;kT3VR^HFVx*Ahn*2Fl1%?j-s6$yx(F?WHe^ssyNhiZz zE@269;%A?=x_E0KnD2QmW4q8-Bw2vN(B5-eHVf;$!{VwjHpquUw3&Ef`yis&)OJYrp_i&dvPEL0i(|x8-x}%TBLNpW2^f)pLln5Xn73r;4dA~kw1QOpk zan5{E*wP+*oASdCLR~x9joyD3b*N*(Dr6{4@?-lZB*;yyz5_58z(5g+f%)|~;M zncA-*#y3ucs%wC~9Z@MFBoR_nE_V_QkeVk=tkG_tl17fVylymBKwD!X?WV$PqySndX4SFTM9WzUb;~S-`@Fr2hTCd%sD5^s{9Q zMhPL7TPt%DvfSQnIQn;Cl`$qO4e^GMT86t2jUZrj?ft|Y?^)~(G6na=-(3VOj79~` zsLGh~b5ibf8ketAYiX|;+n$*tkNNt^M`u+<6TQ5(j~$A^D&y9TjoM08Bd5BuOIA{0 zICwK3_t6Qn_;p2&ZhWG7wf13n!*>A{x9OY2o2I%~dWGg|*Ic$kQ%pz0OJKjeNT`I) z%E4Wqg2TVNlP$fx)}%bgDWl znEJhHW`?FD8InO@N{*n`as}ZCeTyV9Rz2UqWX8gtr*61H6aH6QL zLV5@!mV?dZ>GE9p#5y7e#L>*7IEDMXOsK=h2|^@k^qcje)9Xh`AwCV zYK%SoYON6$i)R&gsZZ5{cE~R(j{d!wj)m0s?Zhd>n2!YHAMaR;(#3x6ue_Yr2sq;U z@&aOnZ>9#kl*h^2X;x}Tze7==sOoma`u$gbUqH$XC@ zcYQQ(CjeXq14!#e4$emL1ayHkHo2F78}+-AHsHy6hAMq~MN-OnU^VmBYg8ts4vf?L2u~<8YZ7DieY-b zi^urDBVCitZ*yI*C**Z&3{>yt9pr-Tq58;=E_-riD-a2?(}^eO*XM!7N|2Ii(es_~ zq?CwHGpM0C`4C0`^0CIZsCxiDjo^ z`rB)|A4l|!`hnUI%cdXij|s9GJ$4<3bGn-j_!$zYy;)fSBhcH)z=}RaV7YU!5=7ox7=phz?x> zJ>}CEtEk80Nx5&*gpTH#RWY&=&tr5`lYC;;XGA7u=qPLw|9%D1#gYIi5VB4^09Pia z58nCcO*>05Mj!vcv^C5lg4~LR@N)Do{dGDVe)oW2iBD{7{yg3Xd|!($Xp&k;>I)(! z++{c3$r8868|}T~nLEAM>G=A#&bhd;cm`6AQ7hublkG`b5xuRT66q29S>%KtH-hB! z`{Q`sPu|&y^3D!VxEw_EXM2ckq_)#~dp^=hO50521ol4rBzjw$YJV;6D#@M4quMdO?!j)%KylAQ6Ia#2$vOJh$RMm znvCgC{>$%p4RF0AS_By~5^f`(!)e=b-zV-wMs+Eya-PCGUle_Mynst2G-K$-KTBJg zx4Fr>uanrt;@MhXBt5#uv2Xc|*VL;K?A$Q;ovb~`n}zVlXc!0N z#4XN}hYqEu4OW?f6e#pVRxGYTzdUe>JXree$B3AfM92TG%+@Xh^MJhY-~95sI|5kqJ=absi{1Bju&(3^sPvjG7)<*mfHq%t>|;82H4V8^b=&RWg^wgpEH_;S5} zcQ?zt<1V~ss7#I47xTvskmTr5w(YzNs_xWTg!63o5RAts=+NeDU;xM}I^_1A{raSv z^^-cHBa)`KpN=SZwcWRdrM~M|<;4l#iA2?z!HG{;3M+{h2fd=1YBzhR=|LA%y! z5mZz^Jif~q9NrBj&0%`(_6gVStXs*wE`*F6dYd)4F1GHpRJIho);p^v-!kE{gldAk zXvk7Ot{%))u&Ony^ZDyadgjdw-D0qx;dPN0)!MuEBwmRfiF_V;<<7|gRkW&Qza1Wh z+V849Q=3X&CoPrirYqT_yzD=?7yP2d`n~h}2!@zf3x=E6He9EKtZ12ZA_DN&-^EI&<-j15$LyWK#ec^^W@T4P9dj5tU zQZyb};lt_Cp(0RyRYt4JkC;A`=;A0R2@w%87C@^!p3}EOanQr-Nb03rWhC-$NZ>Y9l{i0FYIv@JI(COoIUNCQ8p^a#=60rWlX=a`_VM}Sa{yP2Er z`x2T^@j{yU&RL-XZ^28T6&0aDjJ3fabFVd`wK0yQ_Wi{Umxv1dnA-`bmVSI)XYb2Y z&xq031~Pr;-1i~q+10!_KR)#HyB+^7zi6jn0s_RnRTSv4e8Mi|l?x)&YZt|rQvNy+ zL}bMG7kH88-J4hYTs%dodA4)3C#HwfJ?! zV9MvT-6=w&D=~!htMKesKzQQp8T`PI^?(72SK;MhV^uPEm}TL%zI#+1UVFPb@2R7G z=Fgv-{M)@bf&(JaDSijJ_h;e-WgHlBr_qJV!`mN7)elkSX0Vqw0NEl3cb5HVT$q-|c86HS25`~DhPY#SD{_xD9|Owvf=9Q^ zgb`LF^#rAxLBACTju`w74T8%8Fi+n!vpDu(FzGj8mgWfK5XPx;_!Y{g#P|h>^s#tM zcCz6JgbV2h;)BBOu1_aZaT6?V7^xOpT%DC0x@k*;7q%D!QPwRrk?Z3GU08|+flB#L z`C61+TtY~wy{)hoCTyQo295Fbeduvv(+BnKZ6teN>|f~E_ZI!h1hR^Y?aHT5Vjin_ z^MR7o^i8JVwd;pqXxKHQYlz$HvvV?@!n=7YXD^hNMG!#_jP4E@5Tx1vEPmT`&`2|S zujh%#eOgQmynVMJ0P4q0?;pYbQ^zoe~cwot_RSb9Xwq#@#TF z-Qi}MEx3_^@p|gu>Ut3%6>A~}BDsj~UGDEd^OHk49K1$hkZff?9M;@57~qVEEer@G z#74daB#vdoZPnAz2ib>;xIcCm{Lw(%(l+v4x6=6drMA<`BZ&!YzAt z@y?#Vi)!DtFok2Y#jlTp0^f=f5xPp=kqD-xffp>4seIOr>>+AsPWc-iwT zs~@w2FAVvN@ClrQyb;Xu17|sr@f*}}&@vj5&`-^NPZIm^0JhX|d=$REq~UXX+4Ofk zjF;DoYlF+Qx%aD5rLtY~KN}~wx3e-xhjb*WaboT{4r4v8G3f75g|N4D36AL|DUk2^ zJKs0cGk61k96=gF1)acx3)Uv}cqw7+^L9VFhVQLK^6PdFDC)b-@%Oe~rUoA|j}vC^ z3Da%YfM^+n?{!B}F|+sp*_)zy$2I&qLnFi3zDXzNvBRfC*UC^lKmj=lrM;*WlEsjj zxrDtUgN7sgdRXS8Ny{5c=`5S}aUoE&%hws@RV#LRU(1%M>It%7AG^G!4x06)XX??l zGz*r5u5<`|^)@ZOkW3W%;MM>gL%#R6iXgwcY6t=%5 zQ8#Xo`3QtW1y(?&-|b?q2pRhql06@cSiVDHQsCMWh4tYF^BA!lWOSNO2^oF|6J^SA zMAD?kXT;$jqGIC4CQO$VKhJx+XiF(#9tD6WP}rUJdEdWuU3X7FSJlH&d&p<^@%~}2 zq<)u{Ge5*vZIOV(FuY%5C91Y;~)306q_~YTm9TCAJ4^+YXf#0a& z;b(OxLgV!ryevd*aHJJgAk^=>j)^&^{1n6p2@?qdO3y*j&fc_l+vy>c-qo1LX^qX! zf%o^>d@^P7MmpS&{a)79r&N7^VUb;& z>tmiLiqx*%36h@!A}C{V2CEmr2&!Zdd1+$iLkM~O(&{lt#o%R}-RM3C8em;>b%be_ zei*MN{xp|kkv-<}^VHtbvEeWod&Ml%Ukn`SlQ)E#I>#Q?>|jZ^ahW{(`eaQ7@0!@g ztct4Cr13xn#F%A08zxvfl5_m1ZnfuXT(}MCrh>#(Q`?n;l5ck5bmNbC0>@$Z<+l^F zfM}z<5E>+DojvWBtzHwDPbt&KNalBaPn!L(&m6Od6&Vfr#-flrJ^+gJdA>y0Uighm z;Vo@=%^l}2^=#v@#`2*NYJR%{-M9p+W3KPl6fT4)reE@P&602aBaMQj1x!uoiP?DZ zk5VhbDaX9fEJ^M!XJsc0SrJz#>2+JVn*whK+}k$s1R_QPLnLe}YM<$K9;C4ze|+fg z64Z+Dyn(6%+fNHlP?C|jC-p@Wm4O2Z$6>xRh~07a1ELNwxI6#CZ$xMT@%F&dy)%dg zCl8uR&gmLG`bQ1KNoLKi&FnyQBCjs}0*0?R1s^99<-A024PsCg&c;i+X!Gxnfq9J+SWW{2);p_%1B4I7QqkF1P6>6K@zy<0Jy!-7tFJCJ zYd2>a4 zGEYKbn@*jjbDpQcCcN{sjy{0H?X@#AI(tQOf4wx^c8T(>aatd8*G3{YRMhV$0K#G@ znq^zi*U3i8t8F$QS2XG#`XzZ`-i1}x=Q2JIk5*3JE3h2q0qhkO=fU5(TXCL zu~GDki^Zp|(I(bL4pa8$Pr4Pb`oc8sVa{5{hxY1ORGQ#Q1eR8Vjko2Wi^G=<+-i8k z4KB;&FL2O%t9`o4g+-sxS_rA=U z*Xa`tUQOG;Cx4UrMh`ul=DaxR(vRc1He0U8YdoAg0)u@r^vS0OG#+=Wr0>-?%Y0=@l^E-7o0%Q?c)vEoBvEu*EAWq#iZoL$Tv zCjtL*?6Cqnh^ebm%887S$UTk12LAh5Ex^986`^%r?-1GmFt2wb-ub`g=-3|yWyuHD z4uc)>8H0IH2FHr5GBvJe*8<-hc*uq!Wm*;Yx@(x`(0FBdS2Bg$+|29Xz~qxX(&1$l zA^^dY0t7Tsm#*G_*gJ}vyT{X>+^_MP_a0FkZx2-=_8yM#$Jwr*;O^K7EiY?Ou&MPG zlVeVNJ6+jyh0Cka7t%d`rMv3QtpMcCNCQ41c9}EIto2ul2 zFvVVjekjUJ9qCNbkHK_$Ke;~+I1nk+>v;LJ*GhctfAb!@_wTn5D>{F|8_hAm$nWE_ z9ojES^6kli0j_+Us*8gC;U)YO2BKitIQtU5FA+np%$!3KwVa|2`I>`ryaKWjo143a z-KL(P=Nj#u(c~Nl^4qgGgnS~i;#ReiAWDH{&dK%j*eK)PieUws;@9s{8Y6Jaf9_Pm zS@2w(VJqWGAfl;BiykNl@04i349h;K<3(-QAnDJePDJGtDvwm%*8>)>#BWNbE35a% zNDsdD_jV1$^mjSP@H$Y=?x}_Dp*bKfY?pW!-o4R*&Y0>oj*7H!rNZ5HCowr^1I%gn z(p$VDtb;()p$U)IU3%aQ@WaDfoB6-*A=iM%VizpukeB14t%)#H(*;WP)|*{n2GU-h z65Lo}Sr4~R^CtFMvEN5vqG^;3=gA?!Ca)Q3NS@91+IZd{2~X}sY=SUX6KE1&`6&y}J#Icg^T&g4v}6KpuE8WfUDh3|B> z(m<_a)Nz^6x}IY5Fu75|bvpq)xyqB@!4Zq~z2YX@;dEP)B=#%9By+Hw4difPS3AY{ z>$9#kn`WO5bhI*JoQt?W@su^_25C#ql^)jLqZ}iki`-S0@24dH!Oxw{H*B?bZQ4ot z##)J*6DMW&L1-?$e?PGH-s|1*Da@2us?OoAH1`jbpXaZ9V=&J2{NJkr>!Cs{O~2|? ztVh}BMW3E0Z?o+kE9tzi>JENlykmodN}o$+2ny`bHN`6i^(#d9VgN{L*k9oNl=Lg7 z9hM4LBj$vM((gDd@|u?s&`J5;!;or_e?%1uHqG_kBmeM1c>={~#O-KrmgYd7VOXCX zc4y>!tvwu`r5L?5$2`1L3$kB+zM!b8RO4dcm%Mw;e5i`+z#4OYW5Pi1&U={~52JhS z)LShgEOt}x7(cXUi5p7c7ty^seC{FN+bjh`rX<7hhCLP9Fz?F_vrx7++6wD`x&Z$0 ze!ifqeAM&x?0k0}Aps%Cg5Rtj(%aeDVapN64QIE{yDJ~?W(K$qy3b_korHPX1tCm; znSc>8-bPfC)wCdWsg8g36Ge=fWy3esoo(I5J?pKAP{Qel?KB8{hpZ@oAudf;rVLn?3Vl7 zjK4kJ8E_QNPa;m~KddKnpPBNGeM2l~6y-9Rq}Xpr{8|7pG3ERK==5r?)yKyIq;ttl zE@{{bi(r$`i$nNc5nlANv!7X}M5m3UMWYfk*uba$dC+$b$C<*3<$&%Vk*Uga3sdoi zeBB_LM&nt8d`2LMl;Mp0F5of7WUwOSxnv3C(rli%z7E+AB8`L>zM|A2?lsL~x*nsW|~gA>Dd$p*tJ{(ATKl1I#P902r!?TZhSValH=Vh8pwce9EZ*sCeoa6_2XD-4!U=VN- zV|7!pt!IS%d#uxfXZ6Jnr_pCyFO`n6Q6|1C5pQaLXf;%cWbbEuvxkdQZ(mK)044}a zvCOH^%Gzj7lC&JM?05^6z>Dcn&*v>tPK77JPrYS^W!vg02)@6mRw8h2yb95mOLYC= zrt`hNiFp0kQ9Wmqt(60^72WjKhSjF<-Wh@VC2sRJ>eV&*r10DLlz6Z|d@ z52ccOCSMj}LjPCJc4_rBj85Rzv)KbuTEX0w?y^aR+qRVAR5x8LjT8)qCg@|>BFn;Z1uphhko1)an2V;H`6sHv5qaIJaH%?t) zh$snG2QNGwjzV|@3=y|=SI2f0Iwa-+%V5~H+wArpSSEd%ySF_fcszq+lB5zw^!dHO z*?+@x`3w-(zs~h|JEZsG(`&`MATBPWH82gey9ohi{`rn(pJ2UAoV(YF{qcNuJ*N1lBZL$b0le!NuLlP>?s zlUJUjSr#yP#hYvDcNY$gz57buChd!Rmf6f;nwzR+DdISYu^ArLF#ayp!}^1G3%DvV z5_JnU2pciIMA2Y4xK>{jFdsG zcb67+t8k7IOEK7&LlAx^=x)>V zteb?tlZwg=6d3WmBd4!CrzjKoJ?zL&fdBvfeo(9u$UCfGm#(mfph}yVJYK*H1TG`k zxz6#TYY;fnsL8jKRgYC_k9mPNReF0Dv?{(R-HS+>eRr5p-dps5(@47k{z|KR54?UvLiB+ogl7%mc%V-j70zj? zUYSd*lRu-d=4PjdvAY%R1C{RmE#7lr2&EeKB%V!EnaS+P-S~;qI6u`15odC50~~jl)juXh(wFZO)YUV{ST5epewOb@{(xJJd9QO^ zM|_@d$PeE0nAiR27i;-gT8Hf#hrBs8^BEmwZM@6m&;FZF^dbV1zqm}M?acMEo?J>g zg-RK7vz*y-B0=F|?dxmCu<@$bJlM52iNQnvv@AO{a9SJ3_bj7EY8x< zeIQfDxt34t5fE@4V~=%ZCD4>l8NrX?h6ytwX_b2CgV)CN&e^cYQ>gRS-Fo?w@gpEH zMw%QrGUbnA8VN_`T2Vp}XX^PxE~mro_11%ob;f`t@i)Clz&lTZ1Hx&0{mN&(!h&QR z9bAgPaZ9lm1hl;*UeR8Ro~LGdQI1C&94v}QT+qMMbIMLnKd5%paAU`=hhfn1sfG^D zi0X61yCTXVbLcuXSk(YVg`4!(l^p`?UM(VYL=iK0@F(_om*9r$Yq+l4zSxsR3<0DM zJS$oVZD9z*Nm9>WLc((~!~sn!G1Ea;jwnwVHB<&pTE`^0st8d<#C}Gcc7U+2e}4R{ z&+g9DF39OL4UPwT2rdQnnFsACK3_krqHps}MdFBi(29P1ejezZL4(jZGj_nB+Y?f7 z+4H!bsmzfe-KW4lm$5JN`TlxVlocrJ4dLK(xq9sV?95VqjqFbSX1HEG4`^K1_bFOg zRHCv5Yud`Si{Px^IN5j;`&)J7<)eU1m82yPFR&+gtF6UL0l=V-h;2Ao3ck_51tdZzyC+SPvjA+XnBRz`5sM;S0i+ewJ8Y+-^%n%bMl(r2;{9@Y3a7gj zAiL(B`Jc`qHydFG@Jc|=xtrAjCyRJ-HjGJ^?Gf~CO)Q({;6s+s8WY4YyIBVWMU7iy zAYCJmO>`<2k*Ltv%(0w#@wT$BwU@x!CR<^ViS3qi`Uw~?y#xR`BKv1Of~ZtxTZ(0i z9rbHU~zee*hwWKL?Vclv@X_ zj(!ie#8UVw`e4cTQCl_wEgG~%;YjB=h~LuDZLM>upL#8|!U!Er5L(?+y8JS6Qa|qC z3N4-W{$PD5EHG~%1pgq$mhUQwzU-};Fn7M3d~SfnR(?mkP;bk2>XJ7jKFB1_-JBkM zMqm3tNF#G5=djYva_?@}%qvdcZvceCjU|tg{M1ejUEJ_BMjn>?9N`lDo2Tq@_YU~g z3T<@}EBx`!+h)9ZH`{YXl=+)9_PyKy-ZBWb%hC6LYK;Wm+@437n0cH^DtYG*%B7zX z9cHRFZ*=L_QvR_zU%W%PliphfkX3MqEXJuA57fR<>g(RAE*_`bxVVpU9U9!lWATsza7hwM3)=IT!b>ce!DU{&R>0P zcQ#s&rIonbMVx=2pVVNg(*RfcJYpS0jCoC(K0V2OQ_l+ueTiH>(5-ET6H-u*o2uBB z=cbo->~rwW)zPgSaW-q~{0=3bd27Yp5OEYwA_whqs6pc2rQAzbRj8YDa894t8BOe+;F2$kAv+-3)0HH5{_gi% z$0A4N?uioxyLLRsqka%srXkrJwTYq-<+u#j)GT~N)bZq${}z>e=;{mFsJ(B* zaW@$sERkk*>zU-bt0M$8X2s-4Sf@V3L+1-YTprOM|N0$2Y$luU6M4@FCgYE7L{jq! z=!Zj1Z!e;oEzCAm*j`LLk*mg|TAp||d+5mz>^kXZ{f_s`y1IKl4%k_?Ztv7{M(514 za{AmIjjyJdzn%A`bR)RiX3&Rqi)z@j+v(lQ`eKLUDrg8s9RUM4az?C{uWFQUzvC9A zE}}f0LXa4>fux|{ZOvjUa11d2U%t=l_u;cu@!ozAp=8LWq`JT1N|+Yh%fEb>#za39 zGhE2TJ+%$q)uYt{761Qp{K9}-{o9qkGZBkl@uuWs#xSLNSo3xw?xqiwm2-X*fIfn! zWmO#JlEii1l*C7Bu(-HYPpW5Vt+1PXU?Ek1kE3jT@n&b!Pn=Am((3!;ACcp-!_>Vo zpsBp8^z+7OamQR;yc@L!cx+R$L+p<6)uXW}gmn3ize{BB3(s-4Ejy%xAxmA|Q;>w| zcsBkngt+gt06JQ!-$Sr-ay;-Ftfg~`i-$=aI??`%&2Ap?!UIfd!pOK`a!)V4@mxgJ z6NM2KYh1m{Cv~39-eTA&yjVqc=e*-S|0di1uxMR;w9A2MjPh{DlzT!FgMZ7#9!4Cu z0e4#R?1KNb#K;QxE1;}NXZlr(jp-4q?JsMGpLejuDZVw@Va87Kbi+ND@RJQ|oKG&x z+{(Y8uN##x8{gpFWu-|H&)+j~dg~0Dc)_5MUheT?n9l{fgI%ntM0V~bT*G(Kr(6u` zt2mjCFUe!>z;s-#O{=$-21Vji$eRx3lqq#LGPwiJZ*TKT0XfooP_VZkB(lNPuz=n8Cq@ zdL#`4oTu zVKh}*NS5$g%S{U$V53|qPX}}u=kDZ-_xlNcH&tg5k(<5WuA5lR{&kOuAcMV3MM^2F z6!~yQZV)N&S6(y6n(X6VZ)j*m4CJ=4;HFC%A79cD$!^ zQ`V3T%F87@b*sCG%FqrAt+6%32Kw_ZXJ$aZZpjEp4D!-C>Ia=msaYmKcKfl)imy@6 zzkRXDb}Xq68F0<6#!pYzqgW(so+OBGP3I6NI%|LlAwUr6<4`w^T3&A;o{|M+_YR?Ep3+!Xi13{XX!oudH#im#( zpVM5u2k&gPVDmdiYF{(Xt65HrxBuNEHB0B=Gq|KPzt7B%Kf7lg=p)*>hJ_$N%r*5F z;uCrw09%0n1q z+^Gcy>cCz7l2)ykop8U}Pqn=4f$caR3E}xO>_)GajX^Y1W0~dK8DiH2!yAfb3V=dC zGRwNIgY~4ZQ4|_=qAQtF&@MyD+Vm}`4nJ= zGO#cYRa_1U&Af;7Ywv5Xdk!uAJ2Mc%Ng$Bz@HLU{f%2Sx>mwn)yLYR))I|I-;4Z`()oVAm@8$~aJR%})i~fV){KX*T{?3!x$cT)L_cCstqpUUv7DZs%cioYI>9N`CF#PSJFAfPd2=vZXOLLWA@x zleuv;t^i1Q8s!4yf{g;MK+prlPuDwZ{lVJIH67{_sk2{+#7@NM~O+P}}? zt)(r_lx@$yEf~uFSq{ksULA4=C&&Cb=;aFSPi+9YCSTLt`vU(x>tPbiOg0jp|Z8jOZHQL+RMu%EUw7Yyx5Ra6GJww~4MA ztA)mD037>ZO&!ZCgBp5Jf&Dv!0@Iw;>ERE&#l+*nqsTSywW{exEvea8%ZMOU?zEhw z&509_2anK!8St?f-0hH1MC(VJ=jn_ao>MFvPvJbP9ToCW1vNnidwvs0a`%PiWVx!q zX3yVEMxLb$W?CAP;T)GgzzikF{d&krMIWYLty zecw18+Mqkhs$J49#5VnXP%>B5sndIu>?Bze&2Gt~xgoR1A zyRTj`gD&ujmGG}<0U6MvF1F6=3D3zQ9;d*X@KwlRsF25-atS|gGvINzLX2O@uBDWM zO1`n!B*h}Fvbm{}(+TVI=+$oD2m-SUgMsq=Yw69gb2Z=T9T%TeT6wZsA2n4*?N3%)K4zMweu8vafDqy zvVU?(v)Z%4@w@TQzgK7DO>&}c;C17;JBl5%zEa6V(-6?_qiUOHgQC>DI8Zao#}0p; zENOpEt9iMi=tqA`W%;^y<&@mmtGzt+S24ElYoZ+Pw@w{kfS7{v7^PUMU-zO;Gb_Fy z)t&$p-eVPRvro?n;A6QU$Vf8qEu20Zrtt^znx7bTzYmLSCRMV3;5kKCiSLIEoZ&MO zBd}ENxnh5Ty977WTqB9k(D`q1Di{fnY-Fe$cjZr?3TJwf8cYBLzB3%f&IkIdGEej0 zD!&<5`}PCl0w(h_qg?;ZZ!aV9&IrP@;aC=Sdk(-6D7EQ)ej2-S z<8sJm_cbB#)cjZ^E=S$GwtqpBr&@M2@&In^Yj}T4L`(mQm~@Bb?LIf?WA(q2Yoffx2n`0ZEn(T4XQ8%6+x*Ikc^+Y2LZ z*8G)sefC~S9NxK_n?UgiLVU$$JHQTB6;U^MPm|va8#p^pu4Ww{Y{Y2F^+a6-_lovqU>}QMtKz zF_+?`z0FcU@pC4eh1~$YeT4*G(;MQ6BBZP_If4nA;GEL~sBR>-g#60LRg`-rpZlg}NRKw|7bVyVFe_jWN=DZ}uJ z+gNZ6e(aF-$GZIl;yLt8hS-5exnMiR?rUmD3)Z{J8r`p7Ghayt$}0Ezdh1AiZtysL z-G}?yV7t*gNQTnaO-nbv?Sy;YJUaar#MSq82VrX8y+2zdk-zB*-2Lx3F5F5a2&Yw2 z`mz$S`|W=B8)%-0a2x;^A?~}mo^ib{BpUOWnu1GHw z<**8mlk?~Plpt8c+1VRecDFl3xJ{rC@XMNbryrEzBg-m3#@*I#iOK+r0D62hZwK*1 zBgslSbKZxN(-Ws?6$st>y4?jbdF4kw^3yq*!?jI3K9!~Hk>0Rg!)=5!J9Ods)+`QY zf&E{3M?~q>$V{67u>&UI4{&e!(nD6j8i2H-S6wWYk76HhG=3>NYOoP!-st58?=$Cw znMLsCuiiHs!rKjN136TR%C2@Z3er$B2VvU$RJ%d$zU38c=AC(rtYrd1U@DNbE{m1k zb6BtYbNx$-D;#2_etNaX=YsIM921ZObj8lvbzvH~poy+3Ch$qkod%E$Y1D7q1i3hO zJ(g2c>dGVDV{!m{>rDcZriIHZBoAQu2vQSLPlbALu0~_5C?A*`m{FsP6zv-LS1=bT&SLc1|zv z0v&klwqI(`!;SJZZv9R6_~+rH6WjNM=>fe?d3v;%%S8cR-8(q+?E-#90JOsq1^e(t zU$hE7c;Y*7BWpU4=zM}jl{xU3ZTEf`_BTBm5yAG_;ny*U)cn4m;`MJ=FSaFC_LT-@>|p;z1qAXRcBifB#7MDAk`s zjGkjxkjHS2U=uz3Jr8EGdu{xFFZ9y--Roo^$=Qn^Gm;V-kKGHx3$~WGdgwafqI~wv z#Xqn5eXv=xuMNEiPFM0!)NgKdsdYaQgWHd~MEK54>np#5AoIkR;1Q$}%Y7f-!RDES zcph6M&qxLaO(arobFhw1Kg(TDWlu`ShJEoS6T-}|bQYLX0*iuRX^ zBniSSE*+7)4{R?bd**a(k083*1v=`^!(`n|3mL=m&I#~-3bO~#(GxGh(q+Nk&$ES6 z910WTu%KeAYF_TW=e&pNfXAg9cmZ7+%DUGB&MDxpN3HZ7T42@zpsNpsYJD?`kugzY zuU~_!r+d>=cjVs79bV8Ty+7qQd$*|9mka9W8sY8mig%b0yyYD=X;KuY<@mgfuFj8$+6Iz; zp_*WNN~MN}Jdc$NI{y)7Q~dq{e*T?P7yOO)5^2(X2aEA3W65ny3hAoYJX9&{*j{&U zMoN$<%ZaDtQ-MQz)pcg~J*_SXDB!_$k*Jr+a!7GH3<8IvuFmE5o8e1}Sdh5W&i?t| z6NM-_u45GWnLyXcqeE~xtRGa`2B|sUGWG(9i5C_Zuu_2V05*_Uf6S0SB|F9<=4(0iMSC9(9Vm~2 zV2ezbJ-X`k>EZ*?yGK+`fdhMyCUV}-se4s8X)hO{cmlT`9S$|CzT=5MeG_j9gpuFH z`7wS9$N3k$_iye&5JTL*kZdovCq=Xn+B?glUa!u#Ws%!k@U8i!BzB`bIj=M3G7e}o z3A$@gq7vDQ6sa=-r-V>)v+`wD=w1J?c6+>fccvlkh#!H=@>9l4*W6=mT|%_j?=Bl~ z5Gr=0C1xoQ(7!MHUB>=)+=w1hb9BrsuEdjhMQN!KCi=)W6c@606*9MG{}DfOkOv4w zxjpjw;rjK99VA8phz%?kdpW=o3RHjTB_B+53tVTy&v3x1?aw>FQlAHQ8|EyE7az{I zP1fFStAhqM$M4ab#o^pYBkD8fyK7uG;r>#cZ}>acu&gjq1BhXMwtvk~%Q#nqSv?UD zAYsQn{PO~so9z846q0zmC`Pp6KTV0v;)MLl2yeA&Vts^+u+QE~*4_}HCSSJD!wi6C#!vS+_ zEDWBl7WL-~tHccWb)g9)uN&TFL2~z7iq<&T@Nfr?V_cHbM<$;up41|Mf@tX*^_9-d9PD={4hfBilhTi`J~e$uk|X! zr2CB_u4^?5XtmudVSx^PpSlO1mS$tt;f5TX+LDPTEWUl_SxdI z&R?2$mY!U#2%%rL1U5L-IPcw}jeE;v!0@{r`{XcW^||o!{o*7$9=|DJl%x>{J2v-k z!oHjI38?0qoRXi5{0(}-IU?1aEW9mrOZ{Zw<(rgP+SHuf?c?<~l%ML3*IMH)ROTNL zS;FBo`C1yPOK04j*v1=x@}k20sqDA!wE1h%LWNhd`cig5K#wIC{6_TGNINH4FTaK?7Txe*6jP_-WXyyR_;zolX?)gy2JkwH_jl^I3VqL z_}0|+9CI^9`ESOmVMv8d(%uYA(-S}%9h879O&^ls(08=`F~(z7p2ijxeH&$k^NCKK z7IYoKMuy)_nW^1JgFy2bFi7c>_G0vKJ226?Rj*g@J+klG}z@wPqXYwhszU*o)^$>w>PemJHiJwKrX?82U~c3ZmB?N6IA2M9!ZmcgefQuKoxtie^lv0X7@^V zAXxs$d%7VIhwa4q3ql2;r4HBj*n1p&&NRsB7Tw8PsFC{*xz6Hp2VoV!tQ%{nd}6Pd zJxr%{-Bf@x3%S{f;hx^1{2Dq zRqgoReo6w~h&@uh7jnxSTxIdTA(KfE=3qK6Cd0OR`ZL}Av?IkLW{SZk?w8`tpI889 zM+Z@u7xo)~Ff8m2zV1%Q|b+1lF>hbaj%*) z-EIQk!Zc|Tz;IeyhiB@WD}&#RPM7OHnqzLh8U*!Bd}sLW-hBOYglbDUQCDkss*n03 zeyQ!pSk0&Q*4&$C-%RW4f7tJeLFV~nYy>t@6$rleSmBrYsW@|5 z!kHQ$p+DlHqKQ6HL(_`adM9!2;u>XM8AVLIo2O^Md_~)5?(G`qnokb-PBy@(0KZ}9~iPr)gf9!FeEf@jZEU( zEaPYBizoMO>BS{GA^T3-dDMMd;NIt3&tqeSOBWr(U>XwwPLf@a%4-@~c9z5ve`9oR zwqMA3yZ1|%0+>jGZ+B7o-Fzyh6^yOCg!W`|JXV1c-66ce`d@sRiwgZYQ+5VLoWaLj}GE zu{2(o+g$2(?Wy@iBTpc>Rng#NHnDO28;9+vep#i#Z&te4AN z*)MnfaJ^YhJjTSb2pKbJTLcHqWVU-wl4uzP@t%=`f zG00MeyDZPHc3HFd9YPgZXLor8SfHRZOt4+A2en_`n(s<_-^zW-69(6KfHFWzB_D-D z9~cIURWly-c%gmPM?Q?sXwuL*noA_e*vY-_SN!9$~s_Nc3n1Jq~USr_V4q_ygg3i^SOPZw(szb)f(t5R6NDPUm%JP^lGv<(yup~X`++Y ztv`ya_kiP;hAXwv?+yfkbUg(CK+0^Zgj9UIEsY{PE}Q53`SkISXW5!GzY=JKg1om2 z5_=g-y<+_HF}{gk4ET>!a^vO>gEZ?xSRIUX=o=NU^hU}QbKzb=e;?oeGmaTAhx~30 zmO|_?5}=(q+xSfZ@q;NGA*zOF`P&Bv%{j~0-MtA`e)iA;AXDbyX5Z}{00q_|@hd*? z6^|>gY%sO(i^+Dw@mTwh*6e0p>^onc<&M~DdikRLQ4q{@fqb3NmoQXDwEmrqKJR!T zll!{Dd5t)Er;|u8t$)fVM5O3_Q|y05qxTxsx-1G;(n0^ebL8&1+|MLwlc|HYCb!@N zR!ix=fk@RO{}>H&Y7LPFo(z~$dMp9lbmD*RpSpf_pm`W}`wSjPVhQCBO3v>6b-2>Kug;t9A3=u)S@(4>_zT~Tj60RfV z#Oht?mJ1Lf;ug4lv(68+ogo>rXnkIWPctK!mj2S*XW3MH2an1k5qMRB5k-9#zv_`e zD*e1cwYYSwQs6*XYc0nH3OI8_^`Y?h53?x)TS9e{A9238(c4|+nHkHF7YkG~jb)Whu3SD45iX!$-$k`bs+Z;AIZ{yqqNipJ#JEqBDRv`!p{mwY_1;KI`{P_F zt5o8l>)#XpD00fJ)R|w$!S3DpwU8lPw<5I zIqBlZeY(-#5tDO)Ip3u15e>_uKg{|SnHPj5q(>S1s((9#u6klYq-wy}DfX~jRhI7k z30z#gn}e~B+Hj?$yMwN>Kz23qDqSUjnZ!n6u_VKNt|(q}`6ERSkcR>-fXvt?ohj!v z_XPVTcvYkATg-@k)-RC)cU=hgp9swCCCjskhu9W9#_Vyrcfh40Q2zKDfQitzARpnw z<8ehUqKQ1DzaNvu*iuLUiDXNeErK#{dp z@l{+(UQf{|VSJ%j-Kho4eI14Cn~E2!Jt@MgUo>!-lLqJHQKrtRMmOIn|Fv2}JRUb_ zRTN>K_6aJ4Yl3_WFU_zv)7D9(EY#W7hlb%M=}KQZd;+a(;h+~JRR8W9=<51xA1jq8 zyxjAQQR$F5OY3!4p_%Nz>Kfb{__kiBr#yYwO+Xf^c+J&9-?pcCvGhfmyaY5(2u{3l zYs;!aJ|BGST8fO&Y2)aMz#6blWmP_NIF)=EKZi~Gxo5ypKyiMYI+;V9^{>9g>C^9( zXNYBW#x1qoXtXj1Y;SXRbW8Ndr|pwB2r_!|d9Ss@m8ZX;{X?gS;(`hz>tRsAFOraI z#NCjm1`lG7*GUDCjtxY89NtBVvxC2woJ?Z@qhE&z$vG^ou{=(`D%B$Aq>xVbOq*9F zFZnrYS8}S;J^Y0@J)T`g1*(A7ZIA_@+XJ&uIymU3Eo5Q_GM?gijM?(Z^11w$cFR=* zAv5(JJI(cy25#(Yxiay<*x3wS)v z7Ed^D|J>u6X`CvJF;iQzbWsr(mIa_aFYC9GsrPZ8QQ_nZBEQ6riJe0{4iWR#Mhn__ z{J@9&+l~i&c>gdQMA$j)^ve&Y9ElnRRi3-~d7K9AB~kdOjv2GDcwDyg=Zeew%lnSL z_ChlQ+bx2^kH7DtvF<0kub(?L4oEk2vNCzR%2V^lqC($E{Kn4h0Ffla-?+RQuk-Hr z6SHrWHQwdDbvA7y#8`hz;7D4$OhT5&A^ZLrAH#V+w;67Y&4-(N)rUhx(A4`;9)Jxi zvk@{)>G05B`h)!Dd{Nx3?ka*5YrDn}QuJ9nDBvP~Tx8QOrF>Vz&Fr`ueM4p8P<$8k z^wDw}LK`5NXEyRHdVrogwrOKj^0UcEOaQOU?FUD}!#wQ)pI638wT_n%K5mN>9VBTV ziKX+>l3xFC$-+kWzM2dLW+DFRlT(vC_&PQd* zEU`j!=Hj8>5$62E8j)PXbE4nHe6fXa7=jJb7ht4PYY$6hg4EU&^p_5IrfcPMzvL!e zX5#dc)(ihrz1JhS&%;e*)hD2kE&m}+R6&OR|nn_IuB%3ffPQh~MVIX@G#_0US z!Q&j%{h=oBP(3Pk1fAoD|I}RVU4>*1$D(t%7WwP(fC1-OR#4Hl>+ckWrwhj#rza{2 zx)?9JW8fP(eXIsw-$l<8x1B-^bI#thK5w;VhQEsE>q&U7y(R!cH<85tHHTi}ZpHUC z$?xYu$(d1b+9Y}RZuc>E8~NFN(4U1Q=5uGY@+0n=bU>JicPDa25QxmL6K#73{cxCC zh9pPu!{!}A8dI_j{KMef45M3%CRcEm3@T~fFD8xgoSHxIrMQsS1!C`+#+KsU^dOnJ zuFl5eTl2}CBz}!Tj^B`p%I9bKa{RS)rEAwrCt6^@+n8>Q;lCn40&PD;jpv0mxFQU~ z(txtdq0OYVRaQ{cGFs)=Gsl-#^3JWBvBlXZ8*xMyl6=EPGvmA8cs%XF9|6cAn}A)2 zo5b^y2iRoZ0{`w<*X&3$r@b)*kGCNr@f`~kb zlLyJF1&Dp<(;n#Es3y)|_j{V@3GD|SFE7R0x|`Q7Q(;})F=>UAVFyP8VbL(=lDzl2jWs1{p! zgfe_<)qqdgQ-97Fw)}Rc`Y%$*i6im(y@mhd{#@PrLogwsHJvOS#q+bi`e+gKd7Uk^ zL63k{1I8T{w}VL314=KfVYaOjZ(sXK z)Wz>DiQ%$5z;M;>Gbce7hUD1f+hOqJlsudp{+s0(UivLSW{leSnRFs3x?HA zn`E|sz_a(Q;e~cC#t~fJbxlTq2j(1Jwly=yV;i#A>u+tYS7Wt_^ zo60r&zITfO_S5ScMG?__IqC3ml-<`pt+U4>$W)Byv&kQJP&|AdaZOJl4mk7=2Sf<- z+G}5lj`Z;Wnq!~yg+iHo&rT9nF&rg#KfAaQ`iVNao6Q$!h@J?{o3ibbk#!8_X?`1- zrhdOavfXp8B}lX=ZEF=YQErPW-|e}di;iJKQYpSi-Y>G-`yMnso9vbVzGID|7iF*KlA*gF1^OYI{zFeZagk zi7yCTI#eD}84Q2v3jKL$0PcWr+8AnDtW1P5_VYu)VnCKttgvHl@w7eGtGl?s8PQW} zmg?8W|&a2N?2Sv`5!BCEsew#iO#yJR&b%6!sHA5kQ#+|^ zD{w%z9di8=CydqZNqvp$`64MU%nYTc_;iO45+Y7OLPu9Mo@4Vo$Zd5$9UbT9y5>q^ zt=O5e*{LUqr&B1ma4r*WcA}MsvFGu8?xx})+)zeI=Ev}L^~W+kXy~8ZJ?Uu`0-n!P zdCGw`ZTH?P z{l+)*C(ziY5`WY4)jkic|AGPwUzH-pLrx;)-lKk%n?pPK9qd)P@2Ioz;r7TCdGbJe zZ%a&sl);R8>?Uycz~zqZ$H&Q9#%NJ7Pf8$6LX}(X~;A%NFo8ywa z-+13_rOx~C#rPmb6rhIwuz$HN$LwH}~0wKa3Dx6oCKetN&=IQg*XoJb;3MDTB zgI)G(S${2!F$P3tgmCKC7g7eAUtJ~xw*~C24rTGZ#AbTLcuG%=)9w^i^Kn#d`#{;( zQxCbU{!BlfXZ&QQ(LTE#NZuZ7j1noC^a_IS^~>9q)47Y@iNYwI#P=!6ifVg977mKH zpJKxKo0r27HCL57Nv_;U1ClyJtrUSDA$tGZQe&1}Rh!$x!_njx2Zyt9d65$i2l;G5+U2*JqEvggSl{*o8W-s6 z!;6_?I$#@C_tf9Zdw-be6nzC;;+DPYm@$lT&4dyQh_aokUkq*ao7LH;_22MRW#aOl z#VSS+TbeA-c)D1_9YcY~AvFSiJ{IHgb8-n|dPx=jQ|oi_RgZ$_ z!wY#m33b{ICwB(lp3gJ8db!wZp*hv~mqliLrXtkG%s4PKd34?!P|c@k^AX%wd!k$g zAI-jG%ynXj5kAHh84;;*CA5<7j^`WGpx!mkfqY{xF%@?c-~sFPS43$L#oM^}pOGW{ zfOwS%t6^8g`$`K8>jiRkPyAIzI705`tsnXtGE z1mTK@=5z*IH8?)~(o9^Ni6Ls3b_so4`{_Z4+K#jM`}v|AQGL|tY5G!t_cs}%o^dz7Mxc=aK z_f-0Z5{H`YkuEU}fCCP{Qu3w4&YlbPvpQS6`2@T3TAlMlL8H(9$DZE$<&2|I`>egn z`TRw^@m;ae2}uVSqVwbx8MS=bX-96&F|h^bR3nxpPwqhVeWm4ezLlN!Di$aK&0Pob zfnST8zLKFL=KT$nMpG=FPlhX3!rq%1Q3A($p+70{L^SyuZI9o8CC^J{E$J4#Jdj1Y z;E8|F7qrIx1q0mrxs=o?9xq?&`m9t?nygCY{LFFGo_Yu!Enp0Oy55pk3*~`y4t@{s zGJV2tbGnbd2}*&p+xIPH)IQKGTQp~btGatwe@V4R_tb321%8}vZ|LxXl|%nLtU>`H zzOGm729gaIM4-|$#l9fJpwwW8FH@lD75DeZyX^#=Io~DR0K*WdCv)495kvMc>}fW|3+v=?d}@{d zlX~fg*4dXeColW$!o(@|wJGO>my2jlOXy_bg77R z#J(L2Kj|lM_+0fj^d``HFEW5GOi6V=SNYO{d&ju7{gMyu_gmA^WP?~PDDCPb!0hkD zCnfK8Xet^Zbe>?z%bZ&0ySIO3p*njD44O9WGsESUIBFw>u-RXUrigerg?E{6+%V8U!_L$LKvwnry{*re^Qr_C31ae6 zcp70qW2k0teGzdKE?fC9of?OmzkuSog`Z!u^L%%B5o+&&W1bCcP=DMTlV3(?9D;?s znSicYZ(2v4W7a<5yqP?oaJ%B{=v&uOz3;jwP$fW8JL0;6E`)SjyFx}_$@z{mKwrak z4UE`qhYUMnNxbqEu_wn^91Zr9?coftto-D#2dcVWOffiwyCjDg z>I>nw=~MRkLvXi#1s4Il1NM;LmOem`0(Y0mS2tjh6#T^GHgws?>wLMGFe_c~*PR9+ zF`j6=ljV5B;OGmipHf|Z>=@cElAE&{PTASkPPEYiEjde!R~WK zQ^CgMS2jV@f!_9porc<8NBY!Wj(b)q;q_{m)EZk#A!+og=o`UUito;k>ZA>Cqcld2 z2N`?7Lv{Y94pg4D=tl-lbM3Lf_FcA90Bf2_r`$-Ap?4o-Z(o*Ey#{apq2Z_YZS{Mx zC+@zzSF2y*Muxu&`?GqkbFR`@oci9emY&P1C~~EroG(B-w=X<8I4BT@YU!Hoo;CKq z!}!V*&@BOV-Z&`-!$&Q(XF8r1+bcAV$1(FKDyv=il3SW#dX#YK8kE**(VbXTu6C*N z{-38{j4n};CikRl+6~Of*P$B^6;fSl^ES30mCS3P$NYCcTmI#DVSM1Am1 z-4gf+9?tmFjLo}ej&~InUR+YLd1H_#IiywpxOleL?zHfuF@Mj0OQNq*67e^^dj14D zl4f)k*Wj8t`%_O}{HZi9-sKUX98j11NPrk`Q-m!)ia9-~4i1A^3K;#1S8ow2;RG2 zd^l(~o%#;$hy1wOjlJ>CKwr)8Yv;R7BpzAeqP=#&7zRrdPG3I^-{F_POL&khc)J( zpcN@@T)79^^KQ-^k%L1ALQ~Hp>q`$f#Z2)H@xI@6eCGCWw9cH)7-<5A4RRCP^M3CS z7ZqZ!J|A~-%I}DkO{sadWW6~OoLVs`T62m)zR#XylbSxW%<&?;9YsXnsboM|NEX0H zvFj1vS{Fc_9Kfb5zXgg(Ut%$+q(+?*gn2WXaYQ}i$zb77tj)vcn2DCu^IEB^Y zkM7H+?+=}~gsHDNoTXP!(mmf=y<+IQ-hYZq(qFSN#+!lK$HgK%%f%Hp>zlha629ko zLAK{T!n3!WmZPUBm<=67Hk8^(l*4F>(6{6SO zrPG`YmxK$~W7-f@BUERAq>jP$nP6Ra+Dm)=l0@r`c{_mId?H4d1=2Dd7T;iI!*|c! zN43i@Jq4huu=X}wJGdSDPq@LXQjiBn*EX%3m`9G^jwzY1dpY#i^FgG4mSi)xiHrR; zI!0$07(oehHmR-lPQ-)a;N*?CU`4a`#lR9tBelP)IWtGL`03Yjh%9ZR={WH$Z{s6w z){l0%{0_dbCrVmh1qJMEEK>Ru)j$AAam#Y8a~UKss93{9U~j-EubKFRFh|zyoCDlH z7eT(|lz>M-Q9lE!Zj$2>IY>G-KO}>IEcrJ>4sS0rlb!yXFY-hDl-9$a4fjs@P zU=EVQ*V+qL&>_Ky5%AC*62|inzgSrhznzVHjs(0WEl?_YA=eAfPJ8Y{`q%omqbiaZ z`&%d&^n=*?{&cw_0OhL6+bM$LCj@suz6+N9Lmk_~Xal0>Va`N#$7uRmF9psSEgU`* zwWV}sO5wNGAN+3YE5>$vwb<{+p-SrX#xur35G@E>hkeYwQO0gS4R{crMj+*1`>RsM zEA0GDzT-+^PA?4o((SvEg$P^Q5Gb>DFdCtO>M z;9f1TkiRZbNPKaR7X%s%>X>4&l1uNIa`xq|2)$4m$LSu2=77%-pJEBtJ#^e7+elUN z3n^eb49 zB+{h~^#viRD77Qbn>gee}6ItztXvDfmuf zQWz@C*J7gwz&@$1YW)BZ5@(&SG=k`S4nEW?d)nt3%IA2=V2#GyALz1*R!Kb1Fk5FM z>9|lH${*lIEGKaL9ma0-dwQOXBPF!kr+qrb`5ROow$q)TBsEk*V-IqqAS=YaqJJ3Xk^FZ890 z_gQ#lza&XU-jG!IU`=!$H8T@AAXiN`ke-m0eIVh&Rlt_oOw*%d3r&=~dG@tx-*yVX z-`hOzkV?YGz8YxbLc3?lPU;RCsU#Ty?~m8yus8R+KoQE%U=o5o8NppRZwWqj{m#^1 zcnRUII@IqwsP)^6*M#d&H}U0S}lmpKa+ax$2&)^np^x6AIuuz82s4_&DR4 zEY=Wmb*qF>0U~Q{eWBLQV(yka9MPjyE%YDIj$?0a3y+T?Hc`klX#lfR7Y3tt`T&lk zK8aA;Ud_g{(yBSPT}DebG=bkRJXdd(H(B|eQylqz5hB7}poZj=@$1KjomFpdGUnPC zUus8tBq@KT|;~J3Cu=Gg+8I(?&0UIfS%^4^K~3p zgrvt6eKh1D_N1DhSy>^Rbl7FwZ{V#8l7S~>u)=XfVY5$pH0tqGtz5`#(1bcaSYLZI zxwRO&d+aH11`zUdS*jYdbsdHiH1#XWV+_J`Jw`ucg%JkRaO^T2hqsiZ`PT@MEj2%SYHHPACBe8@AS~p4_t7X!v7g3!AcL!-VlU0- z(b^CH(m(E7^>h>Ur0{#2Ken$CT9MB?uG129TX`3wL|$QWSo+71JjSptxVRrf5ANI+ z+{_yAYudGW7qD>I-CEUli0cMa%Rkb27)U^Wo^1k(;L&p%xqm3uCH^}yYUi7%H@*Ek z_b>fSQC|BrbHM|a%|y-g&3p}TE=)zH;$pN`4y`u@GE3k6>bZdyP%)XIX6y!5BmWkH z^PVUO>hd{tNMlBfhb6m9A%tm+Sqw`lcRmj}leZ&-)% z>|m95bV)RMX?-tmpJnYI_gC^7&0R z{70&#tgo8G;Se3U^v^Msz)Rfjz;uOHeBdGdFXPcM7}2I_AsShVGQouHF&`K1U#hwl!6Dv_H7F{=kF1)Tfk*`^V(0 zwn$t1_d`QSBG4PuG3_n?h81WMyu5hvvjWk?YZGjGJ_@CgjYO^E4=+1$p1wa?qxW{f z-&N#=WGVJRV}G{Ra;hohb>-R%ny$k1ELucElhB8`C8r@ppf>FJ$INxWny1*Cfx#71K4ahpW>4Oa_~#qezW#o zjdQhoYy@zi92~9c=89$5 z&I<|L4RwH(wWsuWKR>DzY=^dyYg`jQpaGZgBmeN5d5#|ang{#D%V=&ZlK zm)qNxzjZ)n@nQOgvZ{_Q1%@ijjF5aA5H*ca!lgF}15fFWIIkU|hxLRIUh3!_ zCALDXl_((acaVjRPqX`&zgOg&&9v``x?a55j$0VJhnEKtopxr#y<&=?u3)MjLmEVRvlxr1=L$*9p#`JV<9ZPgQmSD~2CT#>$pCj|BS=@||K~!|TeseDOk* z1j0BN1r};5VpsXZUQhDRz4)LG$$SXEVaC%E;%v6iZQN~Jk6(+M2u9c>~Uo}RSQm4k^gSh=8>O7WQ#j+^+K@1Qch7t&55KbV> z3-eIeV{VpjEEH^TZ)ou-_cquot1|Z0CNjI6f7q zOVUhd4kcmvq8oH#TT-uI=;hb8w9roF^01M`E`a;majuT5#Fsprvq_A<_3rIs;*q3Y zAikR7vZwqp2hLQ4^fe2IKi6cr`-#HV~$QQ2!Hw#Tx zDMumIUG13eGrRNvbbhGyg$lhR<7$kT=|{Tn@^B?$Tq5|RN12!V=K+|bW}G))333cS zioG#(j}1XPYR818oNoNHDT#Xj7RC2v;b%l~f7by~ZiB8~S;O*$OzW3D*6NryJ#PN; zQIyB5(A_u1MLUi#rnJn*HQ^~Wt~TE4Kdy2m_IU4z_yZLx)#nFZ+2w+rJsVeZch2fj z$-z3_Anbc~?eh55Z-COn4P#*@%HeeyF}^|STQz(%Fz6v$aI_wGl8G_k!+4#nhju^| zJ~ihKN!Tc$thT(_<8wMRyRuwc1ls26NlRP7fz_@CzD#R3-W%A@diC}Anx53_5!L>4 zShBx@ES?{KU%cTEI>Rs&JF%r0oF)K`h?5%Se^{&(BaiZB78+1=GlDY+jf4|EuKPp8 z*K6Rvi2bp~_-E~fGx?|=X*L)|{&#L9*sXs8`hs#l)z9|zq1)p;KX`P`nK_fVBAc4R z1b3iyOrhW7d%fbORPI|{G~4{T#6Z+2E{rH)B46Y zISf;+C0{{C55q>JB|U&3JLGs7a&P|!G~bQ9J#;SJCaAFYxkm!dj3njXc^3{T(zq?B z{9W4FpT7l`O;o&5mY)T}U|sS1V6qU3k^8s(PS!JTEa^R+9&DCO6BB%abudJvr0(K6 zA+61{2_EqTwDq%*A8BxT_cgl2*K=sKuyZ_>Vk3PFvR-Str}ho6P!IdSAVc=Xt-^>8 zFZ1cT&iw)18@+<)0O?egx6Y@^u;hs7><;Ud`e-iK8@Pd2fR2+^)ckeW@W>)E1Lwgt zmHo3&<18#UsL=WNHA*EXxkufpNuL1@T&u9ZNS=oai}FL&YB}Q>c|kHRFgtuH@$6hN zM=!__{bzs&78c1~hY6p%J*nt?DAAZFdG8UItAP1ht?^ z1fDTxRq5tZNYQkX`EOkBe&J!+9SPyPzwrCjA|AyR#XiBuE~T2|0GGqQy=0|+JqtE1u zgA#+CF8p+1qSyQ$y5Q$`Ueq_=>{HvaQ2ICbvWWW4t3L@HJClKSzCPePN_fFO&IeQ5 zm(=fYX^5Q+)A(iD3yP|IORZnnGHno_N)9_@Fe3VgR_>kmug$2?Wc|S$(f<{!RNl@i zNQ>47ae#$?K`vd88mDTUTR0!aKAAw+Ah&ofXW72Y@-CZ`uVMe-HQB9LyYCMd=ZIc& z-N%pT$<*&Jhd8sviW!;Xa081fjOPm#kY|d@nFC@X17;}hfZs~p8Q`=%bf!&Z4ro-s zaWTw2X@tZX_huBNxZp%v=(EZP3%0|WmB$djfX{gc6Z*kM5Az|P*EQHf_Lx6+!Ntza z;c(Gc`34*~blXNZUS~#E?m_hhka7nu4=yZw=5WMO?)HW+9;*7w$8bXTP*BFuJ}^Gg zBlQ8o{P=wF_J)BGI2KEGr;U1q;9yF`Pj5c<(G%x2Q<>ZF+r>K;qv0G02zS8rdL9us z-@2nr412eZg1gqFa3DSPf=svaa^dbf7sD<&c_%Ix4fl8|B4GR|0V2Z7>oy&x+w^U3 z73U`P?h@dkC9rzF2S({<)$Xn@*qab zHO?oH_iwrr*aovm^TV!t|66=c>X~scsf0IaGtN)@bIOE*WapZ%eKju23zqG)FP%fd zTw587+5Ne8w&aR&?HfKUsu%$(pzB*DjTe&%c}8zeIBh5RF`j0=Hm}8a*Rt+gAI^j{ zu(m#01P~uUoFO>rH~c*PMEaa*vkBlxh4K9fT=mN)beY?$%ef!<5OY?a<%MugkviCz zU|LSy%PEtD!T$zV)48HCiW{```L3ggMScn*9GXC1^NCoLtuPjvmF6?cbB(`%_$#}p zl%2ne$mk_dJb0I4W-@P_aC zdh}oF!zecA9OLi7J$Wa;inYElc(pW(w>cJ1XF_Lp5-G^$xN!6QRlgc}(Rn@y5p0XBrRQ$%QPj9GPMJv>EhvvVGVu2{37qy; zuVz~PiPkDYp9SV1#V6g}Ar*>?I4Gqbd2A8-YC5`SlaJ-mOyiMPWL))18Me?c8JUV(#-!yf?5r zty*s!wfu}u+%M#uSIv58-C{h31qFM*Mo5}md{~KhFTaZJ#Yaoj`ye*ey@~IS+!TMK zvXA)+Q-bv{oP9hDx+-3Jc<+8#BOr9yRnsLSa{ASKeu&s`Yn{w-_la%sif*}q>BP z6I}2NffXm?bRCKzwMIarvF#Zb6uoc}m-ht+@%cvKj>qjvF%rh<6wn-fvF2mi}(~l^9Wu0oPHIIXE6sZBW0G+(VS%DSt`EtA$)lk46 zti*BS)kDTaWbxBoV|x!y^1RJK^^U>s4m1&53TQvsN-v5AZ%y>){(fhmSj5Zt(Ym`5 z9phr~Pl{!P=X|NXRyZ5yh(rFi)SQPg3-(vLPP2lG@N~Xrxc6Sh!_`T?hxCUt(5*$+ zY}?8g6v~T$m=3~ z49|xboo2o^^6jU0-wjCew#Dq;AIu|v8$KUd_EFm3gp;l{?Sy5Sm7^$)2!?`lmK@hiv6l#Pwv|V87zE%o-P&4jJLfS}AhvS~H4Ku8?Mme#D%o6j8Wa)5499BIHZy+il z=#csweHN}~V!d8>MCbi1dq*IDjDI4?-aECo22m6r&51hTUkMPdl8w*=SOanXP6!0S zy0ShYK)~~{i5c2q2x%=ch=`wzfuTK{g-p(04YZrm-0}tap1g9>O_)& z836TkSKT1Jcm76}hwvoQJ;f9*^ zt6cw9;77=PHH3JSpo(ZUC2x4$6hha>Mxw=R09N56D$!{SNa5IzJ?*~eoqAUAv0cOTrqbVN*1TzT?5H^)**s||1c zDo~lsjx~-PD65iUCFs2Sw*bVL@#Zy7jG2*u5wdn`jy%soCPINuuY`$fAb^W*k-6KX6ud%gW8A zG%TA7^oTA@b;qFiOS?;_Gu~~N@5k>v6q+=AKl#2oUC)Ug?oYmIwJsUl-|cPA*C(>h z8)sti#E|CF;wj;N0F{CY`N}f;_sw`F>SuevlO&kW;y@4x)Bi|f5w!NMA)MzJ_Pu_X zK9@GGjaZs~VW8bYyF0?XoSh%sb8VXowEwIl?CO zI^EcgLfDF@@7QkRH9Kal5QXo$_$6B4_Sau?3tJwMqf@h#eek#Ik-pC$9_~t#6R+q+ zt|}F}dok)B7+GJ~-SH_#KL}x@v-4*x3gsFe`|Toe%<^;3T$^bP>7MA52iI`ei=3He zoVCky_GBTH<#|6NvX=W_Zbv3VrkicZq@ONXZC7SLbiW z2P-6s0KW_2{dEE2s=EF5(Tiv4%w%pv<9o(>C7~~{54pPQ?&mDnh}*nh`#}K8uQ6La zwL|11?Y_e|Ycuv`48Qi_HTMa60`!fTSV2EtH`>=+-9Ns^D{e?tj?cV)dE0Qe7a2A& zl=vP6y~GY!CJ-mXbK#S#kV`sC{YsyXjq|wS z&ecl22Y`mzNbW}Aim=*mP+ufAVL?D|?be6WRO0v86?#|x^xN$3 z>D|0(>~v9w1M*^%^t2xh%4QgKYM=@zI9!u~ez`{`bl4M8Kj}GzAbv;SCI%|-C+q(5 z!#VTbc9HFbrxgUlw;NBY#regxvwEKNU$a4_^Eh+W2CxY;qb%xsT#JO>Ju)_Yi!-FV91Eo#Ldd8Evy0) zwQh{vjtkx_xy66dQI726q5pTp}BLG)~XsBd6>Fv}nLA-wj-CyQC zX4FvML^vv?BlJMGbazO6|Ar?Q@z&+c-|^ek(Z{p*5VbDKRrXe5Ot$Tp^8O8#@xC0z zUj(!53iaw|Axlf&b;k$JQ-41Aad@*$B9lByBZ~f(cYVMz&}9v>5Jq5`57@C&o63sl zAc=abu|gUii-svsWut`a=X;>dR%#a+Yb>ZX{?t7EvQKzSA=7 z8qN`jCe~lit_AlGI+f@zf|8xKAu|dW7)IFP8?T+@ye=Wn9g^V%+weyw2+8RLS_n0gotn!K7QV} zo#&Arkz>!{;usiwL-Y2;Er$TQAYKQg=R};(E$0eUy%{2T&Q4d{h8yOHO;rh!K}yh*Pm#~)vn27SN* zdsuIEO(C58#q4!38tGkm5ue|V1-?O1E0)`I9d@RKd|%#_Qc&)9@AqTR7^jRIm%HRU zi`6qAwOzqXD--Zk-V{1#n8*(-)5h}F%a#%cH`~JfasT((Onx-R3?+oFqee|=#CR{_ z6AHocqkOvVQK@TvQtW6%S)2iV<#2vCi2apvC4hEg2ov6Q#A>_NiC@vEWH{z<7N%G7 zMUk?RPt$bpJ3=q38u*C-CkIpNiw@ZKCHwf7ESI$C&@7XFco0dB~Tz*O|KA(AIT3t%!&3mic zQM$+@c<09BT9CKzAD?5gza=K5m2SCDsAoRh#mfe3pC!G7g-PS;p-=~ywNNl{SI{sX=@gcn>H{=D=6HSkr|_a6_Pki2LIem?=~!1AzENTk zMbOX09=?Vb^XeE+$Jza+v~#)>1ifAHy2dhNV3kFj>PJ}DO6?_>X|6v!q{H@vby^9;MDuY5 z>s$w*cHl~Qmxg`)M$i(Y0~cJ0TG#padO$YVet$3@Z2~71d2B>T6_n(3c{(WYG+|Zb zAJpKcsAr*tu0H_X?Cj45j6|1osy=X2TOmzR%=MPv_9KQl= zV8pbTg>br*p`_#%n@w?>7afDZ`cNIPt*3qql<>uV}NE4dlaA7 z$n<)nLE}Jx^$2RlvpxnQHPbubn+ggA*3wU-L9o5NyHFNRt`Q!>3od%GdTHS zCmRnOE~!4e>uTlW2K+OhcxClWp`}@Hyj%_M1VAdGBi+!8I)Y3m6cd}ncba$+Nt~~} z--mB;fU|hHGC3p~&U!h=q)O-wUsP4t0U!K+)-o+TkANh5y8ZLPi#L?ubvdj%EN`@X zv+Zu#ly~JX*}Y%Yo<;W2>Q9AqdTE{WxfyhuzwT(Gk?HZ@IpGctnY|!$o%*zXL{O>n zNL1Oxgk!F6qCvh2Wx+jwmRKakw?o^Y?Qc~oxTHKy(b(8)!SmUcb?Ml9&|~C6wt-2` z@+f%iL0=ZeMq^nv)uwdWEwXTq5ILr4v8}>I@3Z8>N*80VG08V)t?-<}L?a*Y>cID< zk%;UMT*zh@ffV709c6?la6sH0-tu-2>o5R7HH?6tvaR{`hh@FWJupR%8XNPHYO1D2 zw7`$K4d>LTY4huz&+62I>+vF)S5KdU2m1^ZKZvI1Xh_cCeV8!Nmd54)`ivIzW-^lQ z{pkAZ>8K`E*g_%Q>>(eOVI9j%*eL0?sKhT+^m+ko#qFWB<~JU>T#IqLNrnLT<-{fD z@{+gUJ&fgBlB}Sx^-9;_is0XS+zNCNyx)H4QBX%-vN&S(KgP$}ba(YGMku=>GX4aN zRa;WtZ&;G_-H80O(=3vuUn>f(i#f;4V`g~o_vyGUcom1o&ha)?jmV!ZG_--ZOuI+R z_py8F7De6r4ISED@PI)~Ba86^>6;^8)$^fOnv!%2+&LQW2B4i*$h2*p40ja!W*UY!7Ul~oO(#){&!}{(c3Q^#ZPVZOV*@ntH zKaGj@!ulLThI*au7aAS)2^2s-=Kowq-4|D=?8)zZ8912!Zcj{9GYH{3Je==w)VA)* zzzKF-&dj8S^6wH}4*Wf))bNNvY2l4oW+O$yuE$-R?c#@@ovOojFUHqPAp=%JO)ZtU zH}<{Q`IT0CQdw4LY(I>irrzfo*aC;`dl#cvx>wDt0$=>f>b87RsX<^b!hfS((JW(! z3)U$Z%KK-NVhW|G+vWG=$HeTAgL>S|^ACsDr29#v-{sY`6Ixoja!|`C5GlD3FVte$G#a=yOU>XYBsoK=tqHAB+8nyv+j^ zSjGVLj40h8|KbpmFZIT<)lT8wpR#sUo*H>;RPYp3Ab)nRNpOsGOK*n#S7zbvyXg2v zO%vw~7ZG8lh|2MMo(Ol%aBopL-xkOp3G-=^33YD$Qwl-}Lu{2JaSpftmqpjnE=m>~ z`;7Y%nb$|?45(o!FQ}=brG7|IuwnAB1KRDR#)2wjct3##hlWhw{^f|AG*vxFrYigP zE>MAv+0=hVXoNhbN4G!B^EEc^u+q$|NbPLmb*e@NB0xrw}?w;V48I z)3ZND_1&=zmQSCt6;lGo#QFRs6QQVqh1x%2Q%?4(=_=0|lsqzSKwT9YB%&bzJf(NG zE?EKe-A$dy8oMB!7^;z`&pUyrpQkg^&qwIuc@B+OtB)}8~ zZmz!!VVeTyGKxq>SNeQL zfx(@{lQ7D!;W~lEg^bm8r9|}`ni--~1^J*{Z^{p)ixy1)jO}H+=YHbaPXoBfo7E<% z8)sEq##^Fzm#Al+ z8?U6lE$R@icv3wRbFv5dBeVTVqf-rU1qFa%M7Tfv)Old9?nZtOO|3pN&(lYm&fac6 z!X;0SE~Qt$sRW22&>~0IG3rHj9|muy-snpGJ}H7TG!ha2`*Pz*@~vO-k--vl$+vjd z{3Z}(w^uUU?%ymh&c~Q{v}2wqqzlGQA7H8bem>&z-ET`N6dbbd)UZ3OSRDEt{yy%X zQFz=5;e>oBhet#bQ&^$u-4V~5LHP{Z1-9TOibsAu51ONqXEmz zF-6@j-Cum+^&HjA=Irsh*YC&BQNBNGmz@kzI$>0jBL3k--%kT^@*y@{;p=i-p7qH3 zxgU)~G^r?4eQZvUQMK(JrEem<#E;^FweYS(IP^uYw0t^N=;uz_jA`xpbcK1;%3{~+ z&twK4P1k}G@8z`g3kU^BHZCeIsEEJZStiZ(v^Jacds4xvuGXKnJPxjt*VdL3RDxs% zKuZ{?qaDfT7VW?-_`N_XrIho?j|L(7GS5An*Oe${o#Q%{;8w$DEAC)mo`@Mj#Yt73uKydZ~I?RLuh<=6Jcg-D&n$XW9W&jgCgAch##Yhpgitd%nuueK6!l zeS3SLe92>g-;Us0A_x^&yXb=OP2O?KvPkAbcurWUeVn@mLlr3U$32_fE|xL<44f4kr9!ReV*@bgkxX9rCBMc zlSj(%#ALzKY002fFQ6+I2NjjZn_wcxbG?sEDxF5?j!*%0DhxnzGf6`00nl<}AGtwU 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/html/_images/chapter1_3_0.png b/doc/src/LectureNotes/testbook/_build/html/_images/chapter1_3_0.png new file mode 100644 index 0000000000000000000000000000000000000000..eb6c5ae7218daf04343c8497763f280d86344bbf GIT binary patch literal 5246 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/html/_images/chapter2_121_1.png b/doc/src/LectureNotes/testbook/_build/html/_images/chapter2_121_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1408e1b74a00034defa230b7e3eeaced51eba971 GIT binary patch literal 20430 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/html/_images/chapter4_108_0.png b/doc/src/LectureNotes/testbook/_build/html/_images/chapter4_108_0.png new file mode 100644 index 0000000000000000000000000000000000000000..fa2c7e3287f230f02ef56439785244f6f5243f1f GIT binary patch literal 54410 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

    DP6EKE$M?rhSeK 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 QjsXZfUHx3vIVCg!0KPkjrvLx| literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/html/_images/chapter4_138_0.png b/doc/src/LectureNotes/testbook/_build/html/_images/chapter4_138_0.png new file mode 100644 index 0000000000000000000000000000000000000000..42dda929f0113321df1d24984a8aca273f47b053 GIT binary patch literal 11269 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/html/_images/chapter6_37_0.png b/doc/src/LectureNotes/testbook/_build/html/_images/chapter6_37_0.png new file mode 100644 index 0000000000000000000000000000000000000000..25f17c671ccb38ba27679c9ea4713e7754c6762c GIT binary patch literal 18730 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

    ~4NBEs~ED|eO9 zW~Pnlh(2KziO%NR&94Kv)!DMLzc~a&qktX0E5Z63Rhuj{G>-cCoKZ_x^NUgubOc^V zDsIze+rU#9G$~ePS~@IXAojkODe?w|2FOl&@AQ!YdXoyQCoU*d*TqSJDBDGbQXT&) zrYSV>5CP;pLId2;?56R^T&Oo293h*B(Mo%FO73w)a%BA{ArxbNla3-~hE5LUWGk?r z??=|K&90pc%x-?m&+`{B#Xho{BDH*1Tvr)!ob2%x9WIA9P~*(}HkflSpDr(EycS?F z?ifxm2nQ|Ng#@P*dOQW%()^oC6*%)$vue-o?FK~dw?!~I3DMBDEYnaf9ifS#q8H2J znZ$t>BYf1*J!{LI^p3e7MMK^B;{@?PeJtV}4-Y-(Eq-$d3lmwmaDw*B+_iRfmiEOA z&wU|&4mW7Ugiq&g6A06;c~jdTo}M5jvZUBb>jjb&yCwRMRf?EjKMFR)XE zFW&Djh^3o3A%F6x`I0+}m5j34@-dtc>LiyoFx1e%p?Dv7OXy+P)|lPei-)FB}}Wftn43L@|&%Nw=cn!hh|D%SOi-B^T&|&;@?MCbAmf z@-1|7HnTed&fD}<`cv_~=>dgT3NwnH$7ZMvio3k)4v#PefGb1tL!DT)`_<~hL&UUZ ziqD8?G>?6}YkLX5md}Xha~3H*j5FZ@tww3~n&@L$tqSBO)cocWmPB;n_ZKco?Kn#e znZZ2(sQUax$;|lH9jFTo(vtje{uGcQ9UaneMMXvI#37)S8%{|{=~riGYW9;+-K>E% z1{N03ng1ZH&1Yl-2;1|w<)aPCW1wtkIG37aK+^;N{;rFU+9zOl z18wYp;fDi$UsOsnbF@%CDH$1RAYq&N5&v639-g37J^qg%f8_F)-e-cls~Ex%}`Yxl$0LwB!sN5zrE)@i*Kl*K?E!m_D)U+dZn6s zE;S{krE{R^LLeztmX4T&1fD%kRy|KOJ3ITc5|uA#dcR*aC9j}>?PE1KFyJ$=25f8a zczAf9MsLf*WzZ^EsvKUIU=B|>pfopGG&hm;EpIPy!v~t~M6vRTkZ0dZYL7 z97cp^Qrl=EOSyQ%M&zWwhfa3c7jY@A@%4+vb9mz^@3U{c;ruO6_8SepILgtfAPJ6> zi|dsoeOTLzyWV&6+=Hz0@)#ice@;<=tE{ZV6-hy^5px#_8ME^gSw;d4;-1 z$F7~+VVgVy4)8*)t!w8c9L;gn$kS8>Fl>RHknj2X1wY!4{FIO zPBTX~ypJLnWp3}a0dm;Dw8sCKQTqSf*+P_0o9$m^di>9QEl}DTTmQPnKuLD%WvT^^ zErw9q9|P1Fl%&t55Jg2W`5uZTDgHa`2VoHL+dFXZ0KZ?#eX)Q%>TaH3x_@U#xm(6z z?N+t^_a-0B@9RBRZ_1rSC{0p{38X^eDsDxk3RuN{{i4~3ij~TUXZX7n>v#p~ zTYjc*#;lr%m0aurs>YHGJOT64K9&-%B)A%)e2N2@dGU`d-gzqbj#TX=$DB-a)m&WE zFC{@wcu(AVPm)etPm*0L=*ztxijA20=J%oMr1mlD7z%!*Kzxof*~6DIhw>Z;QTSye z_J_x-sD=@{v^A7#-_t~CqvTD)OJw?ur9>s;t)7q2NxcuxKizPreK$g*^Z6-T))zmw zobmh**zPw_DP_6U)39+z>7Q%YT{7b%AAW?<=1FQYkEOK05OwlgmySfJ*3!~wZ&+)& z9{+IYedw^Xs_P_kF46yC!^P&AY>h|Un7UULf$eq1k@VbAIxNlg%#F6;)ouni|-9vlhhOX%D&BPebZ|XPmbF~G- z!ZL$H0^1ENH}4zEuQi^Qo^$h{iGF#GkzuPbvtOlSv7h%8&# zHH~!9-S3<+3{SRxu7+QEDNUK97EX?ooWW07$35tL7wEag()yZOZ)dl%g{i!B#YH(t#&wTN6Tzh`mEWQ)MJ zy<>wEdfeQtIGJ82&4D*ql7HciTaWKKH3$nfaP0VCLzvLdow-#H(Su!aS3#UW0C}hZqyPW_ literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/html/_images/chapter6_45_0.png b/doc/src/LectureNotes/testbook/_build/html/_images/chapter6_45_0.png new file mode 100644 index 0000000000000000000000000000000000000000..c69d5decffb3614e919f78404c4f02e252567b45 GIT binary patch literal 7932 zcmZ{J2|U!@+xKrKyJRV(vSpVgh6-UUr7`xc!k}a<(ZZmJ+|r^#jdiReL&#P_X0o(# zr?Cx2LqjEH9my7&@t(Q=|Nrwm@AG+IA2Yu**Ezp)u5+F5wVq@r2OANgJwgx!iJ(qc zyFd`E9DH^Q@Bxb8m9q`t!4qMLauWc5*96Yp;gT<%I2{2&!V=sMjK+-r1Bgd($4=o~ zFJf`gXTk%Zurs(zp%-zX!Dkhs0>UGLFJ3_C= z2$J(eSzEYW$)9J&X5>f5jW6~_|A-&moH<)f%GCY)<8J>Ffg5>#5(*!4yxtT?IsDa^ zZ!AXJrWWRE>4>V;FbE!zP*2^Kw1E`acOkOf+wpRHMT++L)0-*E=qxP;Wdt+NK13Pk z==Iik%rY>+(Sh-4QRB4{-;eelU7}J?Mx498OgY-y`w0Uej1vZf8ELxcJEadn zfv>2kZYB=W^57)_bqJ{??gS;A+E0X_r`AXqbT;{a&prtEjr&~A`Mo#ow$3)_&{25E zUuurqXKFeflm7ENRI~VL#dKc))PBnbsr|s-FzDIQl4%)Hj1UwW#4`wQcC*AAI2;gy z6896O{w_TLJ9bzeN;(FHrg%E}r-Kb7StGTPfTy?HU=8h|$o_Zy&>3+jVQPv6w`l>I z=YlO@NG&lZ;e&j<&>|A4-EI&8-Qfq^3}}}V+B2c{j^kj$31fBW&P_j90Cu!{t`plh zPAxoGFY0d8Nu5i_MzvGr5cN;aV@@8ztfQvBZcC`c!`diX(?yg`E35~8nMh#wF^lq} zdsgr|$#S*$WkQe_V%qw~p8F^XNX)ZNDuYsVY3=qSwjyd%CCuy6$fz=tCAo$QIaFWW zQ1yYTiN4Us<@ep$?Ojx|GDc-OP}pZgb$aUMkIv<StWYwc&2MAYQ${e>SNNx zkl6?3#fUXiR_o)E5`Xu|Nt$2>5mKmoQ2*PG_Ct9-dado$x927*Eo!;l(J3TYw7K)_ zNcepqze|dNi zGUIQz)O#5vU*&l0aln9}$bI{v&GRs5iKj?e+@{&>M#nUeAyJ@QlPk-g;29naAZe*Y zto*wy2fG6*7I$+022duDnozkv+cqd<#L%!i*9j66g1Nt&t0X^v1S#x;SKhU|8!!%2 zFaWLQfN?eMq)yz)o`YQ-0mOYDTDKuD@wiDc7*e~MOyCKAp!a(RF$iqwARyNdP;I#I z;I?n#0wnSM@54XaLVgqb0V4y6K;mG$5W!YB@9bQZxLpT%2KWD(=1EtE6chmYCLnXA$R!H}a|bJPsoS~z+}1h{ zAN(B>6N5F}u~e-%;|cb;o!d6H5Eg>q0Q$~MqeF)F!x?#I2C@dX5t9EMW=g#SuqSd_iG z4xKmQApWnmEn&Qw%JiyA&w2%A{8Ul6Lmp=5-2`~T!Nf-5C$<`X!;)T?!$|mg>nSAG zv3`(mB?J*WNNqij&DM>=6PRbQo77NWN5|gEw&!Azi%%8! z{j3^!GmO>R$y~$Xa8(=kmLjy(xrcox64|^-q=?#VMx$&Ar(;c9DLI9*Hy+&+{ilz> zkV4c4U9Z(#S*1@`*^g~q4LA<5Sf(bUH)KS5Uk<8%b`*WAapJx#{=GrfGrZo1j+*p zo~iDFcr1|GC2uRqkQfhlq-sU-uluSWv^)i%6<}RU^bW_Gn|V4zPL4c-`nI1~0#G7Y zwtrUxk#F~Hcmf&7pg+Hs$8Brs99MVzfh_v-9np_?d7%|410r>92}=*dn)`l>MASRx zGGK^UDz&C2I;GoL+ILHU%j@Gl?Q-1{F#{5{zPi)+smu3By@SPN2x_WD0e6;2NrQhu zG3&@=82-ZA-A!e~JO+Kk?c_r{gYpdfnL%~n)K+$pc^mS>@Tonq@mj{K`>|2?2=j>g zI8#&8^Pbjdvuam6Jd{Ab8;d-h>F+ad9o^Q=Tzj!un3|eusQt*O$iDUp@2To`m{+z`+AiEZ6-FQ})KYrBlmxBi49C|0yc{7Cm) z4$1ss23|S3&7Fq9UwD8+(#lC|H_Pi)iq7JBpuy993E^vb*;kn=adi%pT9q0_^v}OD z$^yNUZ-u-$3ner(1|bOy|G-6#T=Z6oVU=2z=P!+B^bLR45Dk)5_BLqmYZvYEBu(b| zdwT92cjztaYZFRDh-j82R6ZWDri5-`P~)$s%qEw9_g2ZsdCw26)K6)dMYjbuA1>-P zntc^2e3t<5WR6a;Fs(VJb2rmKahgclnq#HWAJrWpw3HYj)*)hi*34JRWx`sEU1na3 zPeT^(JLeCdcJJcK_*oEA`!Gj&+V9S!uBCc_tA08kR|@3QIN-Nh zy6TjgaRG;|&}qHyheg{f9Y$qWUp9R@%$-Aonn{1F}aittqiMg3)cZw2SDN+a$JOtrm9Vo(%9v z!OxEFB=3Sgie-tYBhUnf7j+JeZ#^&_jB0aV>N;CieX99XcCrNIB#&mIzKY;4WG!P+ zYv_$7;gB z4So_1?S11CjlY616;7r!T9)#@vlfKP(*in)PW?W2;UP)Dy9{oFMP><2C+WZEDiiOmS#Xgxk6+vyy5T zgzd1(hC{P*fO05XKQ}jOrT&s4G`J7^#$LR<{O9u(uBNh;h&`{$I&6_GNF)r|E$;Ng z553E&SM*@IC=`;CV9YODdY{TY-WUa9j|DI~t7nhvZWnWcoX%Tp>!OaG!#WaxI&YrH z9Ii#w1HD#`xu#`ZuoMj&H2=%Bqi>jR`CHncDU;Sl~`&leU-tN3k3Go^;PS zBQ|RYnAVTC2@Gv)V=r}eWqG+OvO1#C06S!ET)J2>og2pwDTH!WU3fup`2neb6<Q9He=l@nwnUdJ&5S1IzU$pB}1i(DB0a}qRMf; zE|#<(Otv5*_WJThHGWKEdK=aw%RqHnHCi<0z#>CxaM9IY5db?<_Y@Kp!HkO5J`y$i zlI@7vaBG?MwAILS0s8b~Ll6K#g{AxyUZ8DMa}%DhM~Ub`lyKsLB1@oLaw_!w?5V9B zxae(IJNY=W8X1Uo@OK@U*?T4c1C>j{LwJq7e&Iqv9ZA8roNrvf-P=8(Ie<&tO~JkS`n}-1=tPICJp7-&&UAZ z>$H<+P>4W?irmHBqBuN6QYTb*%BlAf*UMtSt7lHeT6FSv7#=c`1v+~wTAX{6^*j=GgMDw@d z|3}!z>p*$nCtpc&{lnaoyfQ-|qvTVWHpHsLw z@7{;X|5L|;ivuTS3bbe6`x00xV&a6D=Yg%hvhxb zU_9bWk6*R(Wwz~w=p_$ek#@AztGy;Fvc9j3o`P@*x6W%%-Xe_sBXlu+qTB;qGGSi7 z{y8a6nc4g~|Nlxv7A$+|W0>lg-wfAWb;sK}yiiZwNg30q`_tc{I?wkHd|9mM3JJ@lG^X*zao~){ zBC7|-YCKT1IR4m`1N~-@U%-p>w|jusjeOUr%4QC%6deU zJU>QS;QYDDe($Ao@=@`KHZP3W`Ux}PirABvOP@M-+CP1uKR&?3%&2nsGB$!kfg2KS%M619cSs4_pHmN zQ~007u8}2n1+vtB+_c+uv?6H_eG%jd?p6yU^_b{S*WIpfP6@JCpF}0;@E=*Q?|s47 zS!N(+%Gdc=^9;g=-uIG7kVgtzO@(@DfS5=x-3|O}cnLmmIbeyW*&OuYn%;kX>9%vFR!w_eXrZ=0G~d$*!T@+y5I6fpY>Hn zZ|~!sngQvW0j?3S2#W}hQajssp_5m^68@{pON@xU^(e{u%q*d;7EoOodO(9Ugv@+MxqXj#d=#!1gxYuR9?rqu$9th4 zu(y7tZzydXSCVdQsPE1=UK|nf{MW|W!)Vl@oZO}01}T@2p2rO>hPB!5f;na0wkd&g zYMChd1&`f5x&TW6SS_2mI_xHS(`vRFA6Pu482y^hxvcFUe>3zM|39?e0rn{088N5Gz6{4{c5Tav z>#OX?%by>{w}c0xr|@D3Rt=|LBT_VF_U0?WNSiMMrn^nkQrEWIyM;|>=%XStG+_~o zWsiI!&pa6sl4;1+578wJ`E-?6I|&wbXjSjcmlr5EUN0ENO<&}2>NszjiUtpx{mhMw zn}_!pASPyH34_Uh>B*WK*6iHo9~1BA4LoM#*TEcz?e}%}98F=64jsleROpqQoDXrg z@jsr2&is+Lw|>N}E67#jiML4YcYaGn;tc5lYNq6{ccuBCnUamJ))Mkn-Qi=^{H&V4 zo>nw}CdeCimdr10o6r?1!acJ9nldtyF$64g#2LiimYgr1`}{<}F-4uRao+mg z@nO0DqFGJvAErgz&q(RpI>A=E3F@<#7Ve}jr_K=4m5ga7kKVMD7+(vwW?JnG%+Iqo z1SuVuJilhF{}FgJHhpg}HKyk~_HV#u5)yU(pgM22nL-WND)z8(02B+gFfCw}m2iA$Y{Zw(+<@*fPgI z^baf4_u}k&6FK^P8|7phZDK%q`XBG|r4qq^SK={Q|S( zyv{jh`Dxby1lVxpHs%}SkBF)p&bwvj;i$wB9o%OR@;Cy0pg=QZ6BQs{xebh4B?PN)Mfb5Kn5p)0D#HkYt zf6JVo4-M;@`D%X*Gw3|{F3-U{M}$9rOG;RslPvR*UY6g=;S5i$wZ3qa=X5E>e4EmU z`?i4|X0GVQDWwM{^}Q-T&uVt{kNBay$IfK*7x_g=`C*^Nt2*~}M%+l~9Ul{Z*P8L= z{?cG_9DPd7Th6z&{@mIztJXHxe?4YX@(0sp5rL@L39!QFJh*>mFCpJVH!q~`nC!9n z>5zVV+0h@KRwkoDwrYFf96{)T zp(!ZBKaOPv%wT`=Uzbfs5AVU47*yTpKh@vQaqi|c=%qIr{?LROjH(Pfm){qaL_}6d zwy$enfUWo{uQYFVcF!r{JwLI1-HjINNT#g#U*2Y0*F?)tzu6fOxAf)5^1IlysS4>^ z%BXDLzVav0&!=Vzy2&_n34nO-)oUG0!y_JaVXKK5xhk#UpRfCVf5Pl4oZmYX!S>he z^-9r65AC}toB5M4zGq~}=kxJW$U_Azok5!Y#7-iFW#XDB3pL?mXTm-wOb4IX6q-hMxXscnJ*#ixo-aq*t_LOF{9rhdDaH6{efrHrfQVzp&|!U0n!2}; z&%`?h+no0?84()k&mBme`Z^?AeKjns>++@?WGLR0U_8m{UMgIpY~GVX>DLD;ub{(G z*C$y`+KYsy6Xav~sJV}eT}n2oRdHYR^h_r<0@fbvh)SDcl)sAz!GS_wfJlmCFfQB^ z>tbbaArq|zVwwZ6EK~(364_{!*r%KhOKk+YRe5XxduxqJHek)1dx2D;?WS^*LBy zy+r;^mR`R<(cd^qZPf^_B~^kP@|3S71{eOAw03-RA#?evG zz+bqtDvBaM>nQ~nH;J2F(EsE5hI=_gpA6rNr7H!q$7ZMI8qmg%H+NqU`=fJjqUrR$ zw(hSUo1=5MwbYyZ!vV@ zP_fE}$trS0o_TXe6@JZu79YKJuW#jTG9fbObj0(b z^yL^-n}C=56&9zHH8#xxRZaZzbtYS$U*~`nwMxwX5S}2Z+~Q2j?b)YFq$_eOp)L5R zJcb@(lL?ONZ3BL+x~nZwK3VQ?l8&ZoqwU61f~o2>%)Nt{FoNuJtr=C25wJusfL*rT3M! zF8Q(vO=~)RmUos{TV3HGV)m|-^PeKT96rPA=LUewezN~^8a1?*zzoCQrp{HLspJbu zOMrhp)1)bE=c5vQ?$vo-R5WGtfQkreBMm>MFfEJc#9^NB%&5zdAqY=WLRa~iXaujy z1*V~MFRf`HV!d5Xn%>=JN#x~y`{uRBz%|$Sn7S*+X-Ue>oA-a)sM7U7GWhR1S8&7i z_C7&`5__3ah?fgk8C*Oa`02E>V{nCHmxo<fJvi{ UYGaMTO*Mo%=3rf8>6iF_06}Hi*Z=?k literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/html/_images/chapter6_47_0.png b/doc/src/LectureNotes/testbook/_build/html/_images/chapter6_47_0.png new file mode 100644 index 0000000000000000000000000000000000000000..41fbb898ddadca674be1e6d0dae1fd3dafbc4acb GIT binary patch literal 6206 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/html/_images/chapter6_62_0.png b/doc/src/LectureNotes/testbook/_build/html/_images/chapter6_62_0.png new file mode 100644 index 0000000000000000000000000000000000000000..eab36649efb526d3f6b109a8a870b2e51332cb8a GIT binary patch literal 22506 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 D6OUEe literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/html/_images/chapter6_74_0.png b/doc/src/LectureNotes/testbook/_build/html/_images/chapter6_74_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1a2535d84620088d1f01da797b7a59ac0a75b201 GIT binary patch literal 15863 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/html/_images/chapter6_76_0.png b/doc/src/LectureNotes/testbook/_build/html/_images/chapter6_76_0.png new file mode 100644 index 0000000000000000000000000000000000000000..cfbcb68f0f3c49209d93c3e0fd7450d18a694e60 GIT binary patch literal 29482 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 a>DCnxKDc;Y34YfSMoLUhv`ply-~R#S`z}xb literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/html/_images/notebooks_2_0.png b/doc/src/LectureNotes/testbook/_build/html/_images/notebooks_2_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ab6666ca36cb8e33a28140d272fe0d5ec82ada68 GIT binary patch literal 113874 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 z

    _GZ+>Zsb?Ddr0FWbC?v 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�Yj*L6@q!zHtQhf2VJA#IpnxL726}) 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 XS=vm#khK&Koh7f!Zla&@DaV*KeU} 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 z

    _GZ+>Zsb?Ddr0FWbC?v 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�Yj*L6@q!zHtQhf2VJA#IpnxL726}) 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 XS=vm#khK&Koh7f!Zla&@DaV*KeU} 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 w51GIk1e{L4ngE>qe-:first-child{margin-top:0 !important}.tabbed-content>:last-child{margin-bottom:0 !important}.tabbed-content>.tabbed-set{margin:0}.tabbed-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.tabbed-set>input{opacity:0;position:absolute}.tabbed-set>input:checked+label{border-color:var(--tabs-color-label-active);color:var(--tabs-color-label-active)}.tabbed-set>input:checked+label+.tabbed-content{display:block}.tabbed-set>input:focus+label{outline-style:auto}.tabbed-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.tabbed-set>label{border-bottom:.125rem solid transparent;color:var(--tabs-color-label-inactive);cursor:pointer;font-size:var(--tabs-size-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .tabbed-set>label:hover{color:var(--tabs-color-label-active)} diff --git a/doc/src/LectureNotes/testbook/_build/html/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css b/doc/src/LectureNotes/testbook/_build/html/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css new file mode 100644 index 000000000..adc616622 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css @@ -0,0 +1,7 @@ +:root { +--tabs-color-label-active: hsla(231, 99%, 66%, 1); +--tabs-color-label-inactive: rgba(178, 206, 245, 0.62); +--tabs-color-overline: rgb(207, 236, 238); +--tabs-color-underline: rgb(207, 236, 238); +--tabs-size-label: 1rem; +} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/chapter1.ipynb b/doc/src/LectureNotes/testbook/_build/html/_sources/chapter1.ipynb new file mode 100644 index 000000000..457efd109 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/chapter1.ipynb @@ -0,0 +1,224 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Introduction\n", + "\n", + "Classical mechanics is a topic which has been taught intensively over\n", + "several centuries. It is, with its many variants and ways of\n", + "presenting the educational material, normally the first **real** physics\n", + "course many of us meet and it lays the foundation for further physics\n", + "studies. Many of the equations and ways of reasoning about the\n", + "underlying laws of motion and pertinent forces, shape our approaches and understanding\n", + "of the scientific method and discourse, as well as the way we develop our insights\n", + "and deeper understanding about physical systems. \n", + "\n", + "There is a wealth of\n", + "well-tested (from both a physics point of view and a pedagogical\n", + "standpoint) exercises and problems which can be solved\n", + "analytically. However, many of these problems represent idealized and\n", + "less realistic situations. The large majority of these problems are\n", + "solved by paper and pencil and are traditionally aimed\n", + "at what we normally refer to as continuous models from which we may find an analytical solution. As a consequence,\n", + "when teaching mechanics, it implies that we can seldomly venture beyond an idealized case\n", + "in order to develop our understandings and insights about the\n", + "underlying forces and laws of motion.\n", + "\n", + "\n", + "On the other hand, numerical algorithms call for approximate discrete\n", + "models and much of the development of methods for continuous models\n", + "are nowadays being replaced by methods for discrete models in science and\n", + "industry, simply because **much larger classes of problems can be addressed** with discrete models, often by simpler and more\n", + "generic methodologies.\n", + "\n", + "As we will see below, when properly scaling the equations at hand,\n", + "discrete models open up for more advanced abstractions and the possibility to\n", + "study real life systems, with the added bonus that we can explore and\n", + "deepen our basic understanding of various physical systems\n", + "\n", + "Analytical solutions are as important as before. In addition, such\n", + "solutions provide us with invaluable benchmarks and tests for our\n", + "discrete models. Such benchmarks, as we will see below, allow us \n", + "to discuss possible sources of errors and their behaviors. And\n", + "finally, since most of our models are based on various algorithms from\n", + "numerical mathematics, we have a unique oppotunity to gain a deeper\n", + "understanding of the mathematical approaches we are using.\n", + "\n", + "\n", + "\n", + "With computing and data science as important elements in essentially\n", + "all aspects of a modern society, we could then try to define Computing as\n", + "**solving scientific problems using all possible tools, including\n", + "symbolic computing, computers and numerical algorithms, and analytical\n", + "paper and pencil solutions**. \n", + "Computing provides us with the tools to develope our own understanding of the scientific method by enhancing algorithmic thinking.\n", + "\n", + "\n", + "The way we will teach this course reflects\n", + "this definition of computing. The course contains both classical paper\n", + "and pencil exercises as well as computational projects and exercises. The\n", + "hope is that this will allow you to explore the physics of systems\n", + "governed by the degrees of freedom of classical mechanics at a deeper\n", + "level, and that these insights about the scientific method will help\n", + "you to develop a better understanding of how the underlying forces and\n", + "equations of motion and how they impact a given system. Furthermore, by introducing various numerical methods\n", + "via computational projects and exercises, we aim at developing your competences and skills about these topics.\n", + "\n", + "\n", + "These competences will enable you to\n", + "\n", + "* understand how algorithms are used to solve mathematical problems,\n", + "\n", + "* derive, verify, and implement algorithms,\n", + "\n", + "* understand what can go wrong with algorithms,\n", + "\n", + "* use these algorithms to construct reproducible scientific outcomes and to engage in science in ethical ways, and\n", + "\n", + "* think algorithmically for the purposes of gaining deeper insights about scientific problems.\n", + "\n", + "All these elements are central for maturing and gaining a better understanding of the modern scientific process *per se*.\n", + "\n", + "The power of the scientific method lies in identifying a given problem\n", + "as a special case of an abstract class of problems, identifying\n", + "general solution methods for this class of problems, and applying a\n", + "general method to the specific problem (applying means, in the case of\n", + "computing, calculations by pen and paper, symbolic computing, or\n", + "numerical computing by ready-made and/or self-written software). This\n", + "generic view on problems and methods is particularly important for\n", + "understanding how to apply available, generic software to solve a\n", + "particular problem.\n", + "\n", + "*However, verification of algorithms and understanding their limitations requires much of the classical knowledge about continuous models.*\n", + "\n", + "\n", + "\n", + "## A well-known examples to illustrate many of the above concepts\n", + "\n", + "Before we venture into a reminder on Python and mechanics relevant applications, let us briefly outline some of the\n", + "abovementioned topics using an example many of you may have seen before in for example CMSE201. \n", + "A simple algorithm for integration is the Trapezoidal rule. \n", + "Integration of a function $f(x)$ by the Trapezoidal Rule is given by following algorithm for an interval $x \\in [a,b]$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^b(f(x) dx = \\frac{1}{2}\\left [f(a)+2f(a+h)+\\dots+2f(b-h)+f(b)\\right] +O(h^2),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $h$ is the so-called stepsize defined by the number of integration points $N$ as $h=(b-a)/(n)$.\n", + "Python offers an extremely versatile programming environment, allowing for\n", + "the inclusion of analytical studies in a numerical program. Here we show an\n", + "example code with the **trapezoidal rule**. We use also **SymPy** to evaluate the exact value of the integral and compute the absolute error\n", + "with respect to the numerically evaluated one of the integral\n", + "$\\int_0^1 dx x^2 = 1/3$.\n", + "The following code for the trapezoidal rule allows you to plot the relative error by comparing with the exact result. By increasing to $10^8$ points one arrives at a region where numerical errors start to accumulate." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "from math import log10\n", + "import numpy as np\n", + "from sympy import Symbol, integrate\n", + "import matplotlib.pyplot as plt\n", + "# function for the trapezoidal rule\n", + "def Trapez(a,b,f,n):\n", + " h = (b-a)/float(n)\n", + " s = 0\n", + " x = a\n", + " for i in range(1,n,1):\n", + " x = x+h\n", + " s = s+ f(x)\n", + " s = 0.5*(f(a)+f(b)) +s\n", + " return h*s\n", + "# function to compute pi\n", + "def function(x):\n", + " return x*x\n", + "# define integration limits\n", + "a = 0.0; b = 1.0;\n", + "# find result from sympy\n", + "# define x as a symbol to be used by sympy\n", + "x = Symbol('x')\n", + "exact = integrate(function(x), (x, a, b))\n", + "# set up the arrays for plotting the relative error\n", + "n = np.zeros(9); y = np.zeros(9);\n", + "# find the relative error as function of integration points\n", + "for i in range(1, 8, 1):\n", + " npts = 10**i\n", + " result = Trapez(a,b,function,npts)\n", + " RelativeError = abs((exact-result)/exact)\n", + " n[i] = log10(npts); y[i] = log10(RelativeError);\n", + "plt.plot(n,y, 'ro')\n", + "plt.xlabel('n')\n", + "plt.ylabel('Relative error')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This example shows the potential of combining numerical algorithms with symbolic calculations, allowing us to \n", + "\n", + "* Validate and verify their algorithms. \n", + "\n", + "* Including concepts like unit testing, one has the possibility to test and test several or all parts of the code.\n", + "\n", + "* Validation and verification are then included *naturally* and one can develop a better attitude to what is meant with an ethically sound scientific approach.\n", + "\n", + "* The above example allows the student to also test the mathematical error of the algorithm for the trapezoidal rule by changing the number of integration points. The students get **trained from day one to think error analysis**. \n", + "\n", + "* With a Jupyter notebook you can keep exploring similar examples and turn them in as your own notebooks. \n", + "\n", + "In this process we can easily bake in\n", + "1. How to structure a code in terms of functions\n", + "\n", + "2. How to make a module\n", + "\n", + "3. How to read input data flexibly from the command line\n", + "\n", + "4. How to create graphical/web user interfaces\n", + "\n", + "5. How to write unit tests (test functions or doctests)\n", + "\n", + "6. How to refactor code in terms of classes (instead of functions only)\n", + "\n", + "7. How to conduct and automate large-scale numerical experiments\n", + "\n", + "8. How to write scientific reports in various formats (LaTeX, HTML)\n", + "\n", + "The conventions and techniques outlined here will save you a lot of time when you incrementally extend software over time from simpler to more complicated problems. In particular, you will benefit from many good habits:\n", + "1. New code is added in a modular fashion to a library (modules)\n", + "\n", + "2. Programs are run through convenient user interfaces\n", + "\n", + "3. It takes one quick command to let all your code undergo heavy testing \n", + "\n", + "4. Tedious manual work with running programs is automated,\n", + "\n", + "5. Your scientific investigations are reproducible, scientific reports with top quality typesetting are produced both for paper and electronic devices." + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/chapter2.ipynb b/doc/src/LectureNotes/testbook/_build/html/_sources/chapter2.ipynb new file mode 100644 index 000000000..6eeb8a756 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/chapter2.ipynb @@ -0,0 +1,2207 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Space, Time, Motion, Reference Frames and Reminder on vectors and other mathematical quantities\n", + "\n", + "Our studies will start with the motion of different types of objects\n", + "such as a falling ball, a runner, a bicycle etc etc. It means that an\n", + "object's position in space varies with time.\n", + "In order to study such systems we need to define\n", + "* choice of origin\n", + "\n", + "* choice of the direction of the axes\n", + "\n", + "* choice of positive direction (left-handed or right-handed system of reference)\n", + "\n", + "* choice of units and dimensions\n", + "\n", + "These choices lead to some important questions such as\n", + "\n", + "* is the physics of a system independent of the origin of the axes?\n", + "\n", + "* is the physics independent of the directions of the axes, that is are there privileged axes?\n", + "\n", + "* is the physics independent of the orientation of system?\n", + "\n", + "* is the physics independent of the scale of the length?\n", + "\n", + "### Dimension, units and labels\n", + "\n", + "Throughout this course we will use the standardized SI units. The standard unit for length is thus one meter 1m, for mass\n", + "one kilogram 1kg, for time one second 1s, for force one Newton 1kgm/s$^2$ and for energy 1 Joule 1kgm$^2$s$^{-2}$.\n", + "\n", + "We will use the following notations for various variables (vectors are always boldfaced in these lecture notes):\n", + "* position $\\boldsymbol{r}$, in one dimention we will normally just use $x$,\n", + "\n", + "* mass $m$,\n", + "\n", + "* time $t$,\n", + "\n", + "* velocity $\\boldsymbol{v}$ or just $v$ in one dimension,\n", + "\n", + "* acceleration $\\boldsymbol{a}$ or just $a$ in one dimension,\n", + "\n", + "* momentum $\\boldsymbol{p}$ or just $p$ in one dimension,\n", + "\n", + "* kinetic energy $K$,\n", + "\n", + "* potential energy $V$ and\n", + "\n", + "* frequency $\\omega$.\n", + "\n", + "More variables will be defined as we need them.\n", + "\n", + "It is also important to keep track of dimensionalities. Don't mix this up with a chosen unit for a given variable. We mark the dimensionality in these lectures as $[a]$, where $a$ is the quantity we are interested in. Thus\n", + "\n", + "* $[\\boldsymbol{r}]=$ length\n", + "\n", + "* $[m]=$ mass\n", + "\n", + "* $[K]=$ energy\n", + "\n", + "* $[t]=$ time\n", + "\n", + "* $[\\boldsymbol{v}]=$ length over time\n", + "\n", + "* $[\\boldsymbol{a}]=$ length over time squared\n", + "\n", + "* $[\\boldsymbol{p}]=$ mass times length over time\n", + "\n", + "* $[\\omega]=$ 1/time\n", + "\n", + "## Elements of Vector Algebra\n", + "\n", + "**Note**: This section is under revision\n", + "\n", + "In these lectures we will use boldfaced lower-case letters to label a vector. A vector $\\boldsymbol{a}$ in three dimensions is thus defined as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a} =(a_x,a_y, a_z),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and using the unit vectors in a cartesian system we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a} = a_x\\boldsymbol{e}_x+a_y\\boldsymbol{e}_y+a_z\\boldsymbol{e}_z,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the unit vectors have magnitude $\\vert\\boldsymbol{e}_i\\vert = 1$ with $i=x,y,z$.\n", + "\n", + "Using the fact that multiplication of reals is distributive we can show that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a}(\\boldsymbol{b}+\\boldsymbol{c})=\\boldsymbol{a}\\boldsymbol{b}+\\boldsymbol{a}\\boldsymbol{c},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similarly we can also show that (using product rule for differentiating reals)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d}{dt}(\\boldsymbol{a}\\boldsymbol{b})=\\boldsymbol{a}\\frac{d\\boldsymbol{b}}{dt}+\\boldsymbol{b}\\frac{d\\boldsymbol{a}}{dt}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can repeat these operations for the cross products and show that they are distribuitive" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a}\\times(\\boldsymbol{b}+\\boldsymbol{c})=\\boldsymbol{a}\\times\\boldsymbol{b}+\\boldsymbol{a}\\times\\boldsymbol{c}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have also that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d}{dt}(\\boldsymbol{a}\\times\\boldsymbol{b})=\\boldsymbol{a}\\times\\frac{d\\boldsymbol{b}}{dt}+\\boldsymbol{b}\\times\\frac{d\\boldsymbol{a}}{dt}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The rotation of a three-dimensional vector $\\boldsymbol{a}=(a_x,a_y,a_z)$ in the $xy$ plane around an angle $\\phi$ results in a new vector $\\boldsymbol{b}=(b_x,b_y,b_z)$. This operation can be expressed in terms of linear algebra as a matrix (the rotation matrix) multiplied with a vector. We can write this as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{bmatrix} b_x \\\\ b_y \\\\ b_z \\end{bmatrix} = \\begin{bmatrix} \\cos{\\phi} & \\sin{\\phi} & 0 \\\\ -\\sin{\\phi} & \\cos{\\phi} & 0 \\\\ 0 & 0 & 1\\end{bmatrix}\\begin{bmatrix} a_x \\\\ a_y \\\\ a_z \\end{bmatrix}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can write this in a more compact form as $\\boldsymbol{b} = \\boldsymbol{R}\\boldsymbol{a}$, where the rotation matrix is defined as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{R} = \\begin{bmatrix} \\cos{\\phi} & \\sin{\\phi} & 0 \\\\ -\\sin{\\phi} & \\cos{\\phi} & 0 \\\\ 0 & 0 & 1\\end{bmatrix}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Falling baseball in one dimension\n", + "\n", + "We anticipate the mathematical model to come and assume that we have a\n", + "model for the motion of a falling baseball without air resistance.\n", + "Our system (the baseball) is at an initial height $y_0$ (which we will\n", + "specify in the program below) at the initial time $t_0=0$. In our program example here we will plot the position in steps of $\\Delta t$ up to a final time $t_f$. \n", + "The mathematical formula for the position $y(t)$ as function of time $t$ is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t) = y_0-\\frac{1}{2}gt^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $g=9.80665=0.980655\\times 10^1$m/s$^2$ is a constant representing the standard acceleration due to gravity.\n", + "We have here adopted the conventional standard value. This does not take into account other effects, such as buoyancy or drag.\n", + "Furthermore, we stop when the ball hits the ground, which takes place at" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t) = 0= y_0-\\frac{1}{2}gt^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which gives us a final time $t_f=\\sqrt{2y_0/g}$. \n", + "\n", + "As of now we simply assume that we know the formula for the falling object. Afterwards, we will derive it.\n", + "\n", + "\n", + "## Our Python Encounter\n", + "\n", + "We start with preparing folders for storing our calculations, figures and if needed, specific data files we use as input or output files." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "# Common imports\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import os\n", + "\n", + "# Where to save the figures and data files\n", + "PROJECT_ROOT_DIR = \"Results\"\n", + "FIGURE_ID = \"Results/FigureFiles\"\n", + "DATA_ID = \"DataFiles/\"\n", + "\n", + "if not os.path.exists(PROJECT_ROOT_DIR):\n", + " os.mkdir(PROJECT_ROOT_DIR)\n", + "\n", + "if not os.path.exists(FIGURE_ID):\n", + " os.makedirs(FIGURE_ID)\n", + "\n", + "if not os.path.exists(DATA_ID):\n", + " os.makedirs(DATA_ID)\n", + "\n", + "def image_path(fig_id):\n", + " return os.path.join(FIGURE_ID, fig_id)\n", + "\n", + "def data_path(dat_id):\n", + " return os.path.join(DATA_ID, dat_id)\n", + "\n", + "def save_fig(fig_id):\n", + " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", + "\n", + "#in case we have an input file we wish to read in\n", + "#infile = open(data_path(\"MassEval2016.dat\"),'r')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You could also define a function for making our plots. You\n", + "can obviously avoid this and simply set up various **matplotlib**\n", + "commands every time you need them. You may however find it convenient\n", + "to collect all such commands in one function and simply call this\n", + "function." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from pylab import plt, mpl\n", + "plt.style.use('seaborn')\n", + "mpl.rcParams['font.family'] = 'serif'\n", + "\n", + "def MakePlot(x,y, styles, labels, axlabels):\n", + " plt.figure(figsize=(10,6))\n", + " for i in range(len(x)):\n", + " plt.plot(x[i], y[i], styles[i], label = labels[i])\n", + " plt.xlabel(axlabels[0])\n", + " plt.ylabel(axlabels[1])\n", + " plt.legend(loc=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thereafter we start setting up the code for the falling object." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import matplotlib.patches as mpatches\n", + "\n", + "g = 9.80655 #m/s^2\n", + "y_0 = 10.0 # initial position in meters\n", + "DeltaT = 0.1 # time step\n", + "# final time when y = 0, t = sqrt(2*10/g)\n", + "tfinal = np.sqrt(2.0*y_0/g)\n", + "#set up arrays \n", + "t = np.arange(0,tfinal,DeltaT)\n", + "y =y_0 -g*.5*t**2\n", + "# Then make a nice printout in table form using Pandas\n", + "import pandas as pd\n", + "from IPython.display import display\n", + "data = {'t[s]': t,\n", + " 'y[m]': y\n", + " }\n", + "RawData = pd.DataFrame(data)\n", + "display(RawData)\n", + "plt.style.use('ggplot')\n", + "plt.figure(figsize=(8,8))\n", + "plt.scatter(t, y, color = 'b')\n", + "blue_patch = mpatches.Patch(color = 'b', label = 'Height y as function of time t')\n", + "plt.legend(handles=[blue_patch])\n", + "plt.xlabel(\"t[s]\")\n", + "plt.ylabel(\"y[m]\")\n", + "save_fig(\"FallingBaseball\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we used **pandas** (see below) to systemize the output of the position as function of time.\n", + "\n", + "\n", + "\n", + "## Average quantities\n", + "We define now the average velocity as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\overline{v}(t) = \\frac{y(t+\\Delta t)-y(t)}{\\Delta t}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the code we have set the time step $\\Delta t$ to a given value. We could define it in terms of the number of points $n$ as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\Delta t = \\frac{t_{\\mathrm{final}-}t_{\\mathrm{initial}}}{n+1}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since we have discretized the variables, we introduce the counter $i$ and let $y(t)\\rightarrow y(t_i)=y_i$ and $t\\rightarrow t_i$\n", + "with $i=0,1,\\dots, n$. This gives us the following shorthand notations that we will use for the rest of this course. We define" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_i = y(t_i),\\hspace{0.2cm} i=0,1,2,\\dots,n.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This applies to other variables which depend on say time. Examples are the velocities, accelerations, momenta etc.\n", + "Furthermore we use the shorthand" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_{i\\pm 1} = y(t_i\\pm \\Delta t),\\hspace{0.12cm} i=0,1,2,\\dots,n.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Compact equations\n", + "We can then rewrite in a more compact form the average velocity as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\overline{v}_i = \\frac{y_{i+1}-y_{i}}{\\Delta t}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The velocity is defined as the change in position per unit time.\n", + "In the limit $\\Delta t \\rightarrow 0$ this defines the instantaneous velocity, which is nothing but the slope of the position at a time $t$.\n", + "We have thus" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t) = \\frac{dy}{dt}=\\lim_{\\Delta t \\rightarrow 0}\\frac{y(t+\\Delta t)-y(t)}{\\Delta t}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similarly, we can define the average acceleration as the change in velocity per unit time as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\overline{a}_i = \\frac{v_{i+1}-v_{i}}{\\Delta t},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "resulting in the instantaneous acceleration" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "a(t) = \\frac{dv}{dt}=\\lim_{\\Delta t\\rightarrow 0}\\frac{v(t+\\Delta t)-v(t)}{\\Delta t}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**A note on notations**: When writing for example the velocity as $v(t)$ we are then referring to the continuous and instantaneous value. A subscript like\n", + "$v_i$ refers always to the discretized values.\n", + "\n", + "\n", + "## A differential equation\n", + "\n", + "We can rewrite the instantaneous acceleration as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "a(t) = \\frac{dv}{dt}=\\frac{d}{dt}\\frac{dy}{dt}=\\frac{d^2y}{dt^2}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This forms the starting point for our definition of forces later. It is a famous second-order differential equation. If the acceleration is constant we can now recover the formula for the falling ball we started with.\n", + "The acceleration can depend on the position and the velocity. To be more formal we should then write the above differential equation as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2y}{dt^2}=a(t,y(t),\\frac{dy}{dt}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With given initial conditions for $y(t_0)$ and $v(t_0)$ we can then\n", + "integrate the above equation and find the velocities and positions at\n", + "a given time $t$.\n", + "\n", + "If we multiply with mass, we have one of the famous expressions for Newton's second law," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F(y,v,t)=m\\frac{d^2y}{dt^2}=ma(t,y(t),\\frac{dy}{dt}),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $F$ is the force acting on an object with mass $m$. We see that it also has the right dimension, mass times length divided by time squared.\n", + "We will come back to this soon.\n", + "\n", + "\n", + "## Integrating our equations\n", + "\n", + "Formally we can then, starting with the acceleration (suppose we have measured it, how could we do that?)\n", + "compute say the height of a building. To see this we perform the following integrations from an initial time $t_0$ to a given time $t$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_{t_0}^t dt a(t) = \\int_{t_0}^t dt \\frac{dv}{dt} = v(t)-v(t_0),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t)=v(t_0)+\\int_{t_0}^t dt a(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When we know the velocity as function of time, we can find the position as function of time starting from the defintion of velocity as the derivative with respect to time, that is we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_{t_0}^t dt v(t) = \\int_{t_0}^t dt \\frac{dy}{dt} = y(t)-y(t_0),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t)=y(t_0)+\\int_{t_0}^t dt v(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These equations define what is called the integration method for\n", + "finding the position and the velocity as functions of time. There is\n", + "no loss of generality if we extend these equations to more than one\n", + "spatial dimension.\n", + "\n", + "\n", + "## Constant acceleration case, the velocity\n", + "\n", + "Let us compute the velocity using the constant value for the acceleration given by $-g$. We have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t)=v(t_0)+\\int_{t_0}^t dt a(t)=v(t_0)+\\int_{t_0}^t dt (-g).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using our initial time as $t_0=0$s and setting the initial velocity $v(t_0)=v_0=0$m/s we get when integrating" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t)=-gt.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The more general case is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t)=v_0-g(t-t_0).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then integrate the velocity and obtain the final formula for the position as function of time through" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t)=y(t_0)+\\int_{t_0}^t dt v(t)=y_0+\\int_{t_0}^t dt v(t)=y_0+\\int_{t_0}^t dt (-gt),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With $y_0=10$m and $t_0=0$s, we obtain the equation we started with" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t)=10-\\frac{1}{2}gt^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Computing the averages\n", + "\n", + "After this mathematical background we are now ready to compute the mean velocity using our data." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Now we can compute the mean velocity using our data\n", + "# We define first an array Vaverage\n", + "n = np.size(t)\n", + "Vaverage = np.zeros(n)\n", + "for i in range(1,n-1):\n", + " Vaverage[i] = (y[i+1]-y[i])/DeltaT\n", + "# Now we can compute the mean accelearatio using our data\n", + "# We define first an array Aaverage\n", + "n = np.size(t)\n", + "Aaverage = np.zeros(n)\n", + "Aaverage[0] = -g\n", + "for i in range(1,n-1):\n", + " Aaverage[i] = (Vaverage[i+1]-Vaverage[i])/DeltaT\n", + "data = {'t[s]': t,\n", + " 'y[m]': y,\n", + " 'v[m/s]': Vaverage,\n", + " 'a[m/s^2]': Aaverage\n", + " }\n", + "NewData = pd.DataFrame(data)\n", + "display(NewData[0:n-2])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we don't print the last values! \n", + "\n", + "\n", + "\n", + "\n", + "## Including Air Resistance in our model\n", + "\n", + "In our discussions till now of the falling baseball, we have ignored\n", + "air resistance and simply assumed that our system is only influenced\n", + "by the gravitational force. We will postpone the derivation of air\n", + "resistance till later, after our discussion of Newton's laws and\n", + "forces.\n", + "\n", + "For our discussions here it suffices to state that the accelerations is now modified to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a}(t) = -g +D\\boldsymbol{v}(t)\\vert v(t)\\vert,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\vert v(t)\\vert$ is the absolute value of the velocity and $D$ is a constant which pertains to the specific object we are studying.\n", + "Since we are dealing with motion in one dimension, we can simplify the above to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "a(t) = -g +Dv^2(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can rewrite this as a differential equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "a(t) = \\frac{dv}{dt}=\\frac{d^2y}{dt^2}= -g +Dv^2(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the integral equations discussed above we can integrate twice\n", + "and obtain first the velocity as function of time and thereafter the\n", + "position as function of time.\n", + "\n", + "For this particular case, we can actually obtain an analytical\n", + "solution for the velocity and for the position. Here we will first\n", + "compute the solutions analytically, thereafter we will derive Euler's\n", + "method for solving these differential equations numerically.\n", + "\n", + "\n", + "## Analytical solutions\n", + "\n", + "For simplicity let us just write $v(t)$ as $v$. We have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{dv}{dt}= -g +Dv^2(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can solve this using the technique of separation of variables. We\n", + "isolate on the left all terms that involve $v$ and on the right all\n", + "terms that involve time. We get then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{dv}{g -Dv^2(t) }= -dt,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We scale now the equation to the left by introducing a constant\n", + "$v_T=\\sqrt{g/D}$. This constant has dimension length/time. Can you\n", + "show this?\n", + "\n", + "Next we integrate the left-hand side (lhs) from $v_0=0$ m/s to $v$ and\n", + "the right-hand side (rhs) from $t_0=0$ to $t$ and obtain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_{0}^v\\frac{dv}{g -Dv^2(t) }= \\frac{v_T}{g}\\mathrm{arctanh}(\\frac{v}{v_T}) =-\\int_0^tdt = -t.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can reorganize these equations as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v_T\\mathrm{arctanh}(\\frac{v}{v_T}) =-gt,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which gives us $v$ as function of time" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t)=v_T\\tanh{-(\\frac{gt}{v_T})}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Finding the final height\n", + "\n", + "With the velocity we can then find the height $y(t)$ by integrating yet another time, that is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t)=y(t_0)+\\int_{t_0}^t dt v(t)=\\int_{0}^t dt[v_T\\tanh{-(\\frac{gt}{v_T})}].\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This integral is a little bit trickier but we can look it up in a table over \n", + "known integrals and we get" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t)=y(t_0)-\\frac{v_T^2}{g}\\log{[\\cosh{(\\frac{gt}{v_T})}]}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Alternatively we could have used the symbolic Python package **Sympy** (example will be inserted later). \n", + "\n", + "In most cases however, we need to revert to numerical solutions. \n", + "\n", + "\n", + "\n", + "## Our first attempt at solving differential equations\n", + "\n", + "Here we will try the simplest possible approach to solving the second-order differential \n", + "equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "a(t) =\\frac{d^2y}{dt^2}= -g +Dv^2(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We rewrite it as two coupled first-order equations (this is a standard approach)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{dy}{dt} = v(t),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with initial condition $y(t_0)=y_0$ and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "a(t) =\\frac{dv}{dt}= -g +Dv^2(t),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with initial condition $v(t_0)=v_0$.\n", + "\n", + "Many of the algorithms for solving differential equations start with simple Taylor equations.\n", + "If we now Taylor expand $y$ and $v$ around a value $t+\\Delta t$ we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t+\\Delta t) = y(t)+\\Delta t \\frac{dy}{dt}+\\frac{\\Delta t^2}{2!} \\frac{d^2y}{dt^2}+O(\\Delta t^3),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t+\\Delta t) = v(t)+\\Delta t \\frac{dv}{dt}+\\frac{\\Delta t^2}{2!} \\frac{d^2v}{dt^2}+O(\\Delta t^3).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the fact that $dy/dt = v$ and $dv/dt=a$ and keeping only terms up to $\\Delta t$ we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t+\\Delta t) = y(t)+\\Delta t v(t)+O(\\Delta t^2),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t+\\Delta t) = v(t)+\\Delta t a(t)+O(\\Delta t^2).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Discretizing our equations\n", + "\n", + "Using our discretized versions of the equations with for example\n", + "$y_{i}=y(t_i)$ and $y_{i\\pm 1}=y(t_i+\\Delta t)$, we can rewrite the\n", + "above equations as (and truncating at $\\Delta t$)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_{i+1} = y_i+\\Delta t v_i,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v_{i+1} = v_i+\\Delta t a_i.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are the famous Euler equations (forward Euler).\n", + "\n", + "To solve these equations numerically we start at a time $t_0$ and simply integrate up these equations to a final time $t_f$,\n", + "The step size $\\Delta t$ is an input parameter in our code.\n", + "You can define it directly in the code below as" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "DeltaT = 0.1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With a given final time **tfinal** we can then find the number of integration points via the **ceil** function included in the **math** package of Python\n", + "as" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#define final time, assuming that initial time is zero\n", + "from math import ceil\n", + "tfinal = 0.5\n", + "n = ceil(tfinal/DeltaT)\n", + "print(n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The **ceil** function returns the smallest integer not less than the input in say" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x = 21.15\n", + "print(ceil(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which in the case here is 22." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x = 21.75\n", + "print(ceil(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which also yields 22. The **floor** function in the **math** package\n", + "is used to return the closest integer value which is less than or equal to the specified expression or value.\n", + "Compare the previous result to the usage of **floor**" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from math import floor\n", + "x = 21.75\n", + "print(floor(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Alternatively, we can define ourselves the number of integration(mesh) points. In this case we could have" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "n = 10\n", + "tinitial = 0.0\n", + "tfinal = 0.5\n", + "DeltaT = (tfinal-tinitial)/(n)\n", + "print(DeltaT)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since we will set up one-dimensional arrays that contain the values of\n", + "various variables like time, position, velocity, acceleration etc, we\n", + "need to know the value of $n$, the number of data points (or\n", + "integration or mesh points). With $n$ we can initialize a given array\n", + "by setting all elelements to zero, as done here" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# define array a\n", + "a = np.zeros(n)\n", + "print(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Code for implementing Euler's method\n", + "In the code here we implement this simple Eurler scheme choosing a value for $D=0.0245$ m/s." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Common imports\n", + "import numpy as np\n", + "import pandas as pd\n", + "from math import *\n", + "import matplotlib.pyplot as plt\n", + "import os\n", + "\n", + "# Where to save the figures and data files\n", + "PROJECT_ROOT_DIR = \"Results\"\n", + "FIGURE_ID = \"Results/FigureFiles\"\n", + "DATA_ID = \"DataFiles/\"\n", + "\n", + "if not os.path.exists(PROJECT_ROOT_DIR):\n", + " os.mkdir(PROJECT_ROOT_DIR)\n", + "\n", + "if not os.path.exists(FIGURE_ID):\n", + " os.makedirs(FIGURE_ID)\n", + "\n", + "if not os.path.exists(DATA_ID):\n", + " os.makedirs(DATA_ID)\n", + "\n", + "def image_path(fig_id):\n", + " return os.path.join(FIGURE_ID, fig_id)\n", + "\n", + "def data_path(dat_id):\n", + " return os.path.join(DATA_ID, dat_id)\n", + "\n", + "def save_fig(fig_id):\n", + " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", + "\n", + "\n", + "g = 9.80655 #m/s^2\n", + "D = 0.00245 #m/s\n", + "DeltaT = 0.1\n", + "#set up arrays \n", + "tfinal = 0.5\n", + "n = ceil(tfinal/DeltaT)\n", + "# define scaling constant vT\n", + "vT = sqrt(g/D)\n", + "# set up arrays for t, a, v, and y and we can compare our results with analytical ones\n", + "t = np.zeros(n)\n", + "a = np.zeros(n)\n", + "v = np.zeros(n)\n", + "y = np.zeros(n)\n", + "yanalytic = np.zeros(n)\n", + "# Initial conditions\n", + "v[0] = 0.0 #m/s\n", + "y[0] = 10.0 #m\n", + "yanalytic[0] = y[0]\n", + "# Start integrating using Euler's method\n", + "for i in range(n-1):\n", + " # expression for acceleration\n", + " a[i] = -g + D*v[i]*v[i]\n", + " # update velocity and position\n", + " y[i+1] = y[i] + DeltaT*v[i]\n", + " v[i+1] = v[i] + DeltaT*a[i]\n", + " # update time to next time step and compute analytical answer\n", + " t[i+1] = t[i] + DeltaT\n", + " yanalytic[i+1] = y[0]-(vT*vT/g)*log(cosh(g*t[i+1]/vT))\n", + " if ( y[i+1] < 0.0):\n", + " break\n", + "a[n-1] = -g + D*v[n-1]*v[n-1]\n", + "data = {'t[s]': t,\n", + " 'y[m]': y-yanalytic,\n", + " 'v[m/s]': v,\n", + " 'a[m/s^2]': a\n", + " }\n", + "NewData = pd.DataFrame(data)\n", + "display(NewData)\n", + "#finally we plot the data\n", + "fig, axs = plt.subplots(3, 1)\n", + "axs[0].plot(t, y, t, yanalytic)\n", + "axs[0].set_xlim(0, tfinal)\n", + "axs[0].set_ylabel('y and exact')\n", + "axs[1].plot(t, v)\n", + "axs[1].set_ylabel('v[m/s]')\n", + "axs[2].plot(t, a)\n", + "axs[2].set_xlabel('time[s]')\n", + "axs[2].set_ylabel('a[m/s^2]')\n", + "fig.tight_layout()\n", + "save_fig(\"EulerIntegration\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Try different values for $\\Delta t$ and study the difference between the exact solution and the numerical solution.\n", + "\n", + "\n", + "## Simple extension, the Euler-Cromer method\n", + "\n", + "The Euler-Cromer method is a simple variant of the standard Euler\n", + "method. We use the newly updated velocity $v_{i+1}$ as an input to the\n", + "new position, that is, instead of" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_{i+1} = y_i+\\Delta t v_i,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v_{i+1} = v_i+\\Delta t a_i,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we use now the newly calculate for $v_{i+1}$ as input to $y_{i+1}$, that is \n", + "we compute first" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v_{i+1} = v_i+\\Delta t a_i,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_{i+1} = y_i+\\Delta t v_{i+1},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Implementing the Euler-Cromer method yields a simple change to the previous code. We only need to change the following line in the loop over time\n", + "steps" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for i in range(n-1):\n", + " # more codes in between here\n", + " v[i+1] = v[i] + DeltaT*a[i]\n", + " y[i+1] = y[i] + DeltaT*v[i+1]\n", + " # more code" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Python practicalities, Software and needed installations\n", + "\n", + "We will make extensive use of Python as programming language and its\n", + "myriad of available libraries. You will find\n", + "Jupyter notebooks invaluable in your work. \n", + "\n", + "If you have Python installed (we strongly recommend Python3) and you feel\n", + "pretty familiar with installing different packages, we recommend that\n", + "you install the following Python packages via **pip** as \n", + "\n", + "1. pip install numpy scipy matplotlib ipython scikit-learn mglearn sympy pandas pillow \n", + "\n", + "For Python3, replace **pip** with **pip3**.\n", + "\n", + "For OSX users we recommend, after having installed Xcode, to\n", + "install **brew**. Brew allows for a seamless installation of additional\n", + "software via for example \n", + "\n", + "1. brew install python3\n", + "\n", + "For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution,\n", + "you can use **pip** as well and simply install Python as \n", + "\n", + "1. sudo apt-get install python3 (or python for pyhton2.7)\n", + "\n", + "etc etc. \n", + "\n", + "\n", + "\n", + "## Python installers\n", + "\n", + "If you don't want to perform these operations separately and venture\n", + "into the hassle of exploring how to set up dependencies and paths, we\n", + "recommend two widely used distrubutions which set up all relevant\n", + "dependencies for Python, namely \n", + "\n", + "* [Anaconda](https://docs.anaconda.com/), \n", + "\n", + "which is an open source\n", + "distribution of the Python and R programming languages for large-scale\n", + "data processing, predictive analytics, and scientific computing, that\n", + "aims to simplify package management and deployment. Package versions\n", + "are managed by the package management system **conda**. \n", + "\n", + "* [Enthought canopy](https://www.enthought.com/product/canopy/) \n", + "\n", + "is a Python\n", + "distribution for scientific and analytic computing distribution and\n", + "analysis environment, available for free and under a commercial\n", + "license.\n", + "\n", + "Furthermore, [Google's Colab](https://colab.research.google.com/notebooks/welcome.ipynb) is a free Jupyter notebook environment that requires \n", + "no setup and runs entirely in the cloud. Try it out!\n", + "\n", + "## Useful Python libraries\n", + "Here we list several useful Python libraries we strongly recommend (if you use anaconda many of these are already there)\n", + "\n", + "* [NumPy](https://www.numpy.org/) is a highly popular library for large, multi-dimensional arrays and matrices, along with a large collection of high-level mathematical functions to operate on these arrays\n", + "\n", + "* [The pandas](https://pandas.pydata.org/) library provides high-performance, easy-to-use data structures and data analysis tools \n", + "\n", + "* [Xarray](http://xarray.pydata.org/en/stable/) is a Python package that makes working with labelled multi-dimensional arrays simple, efficient, and fun!\n", + "\n", + "* [Scipy](https://www.scipy.org/) (pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software for mathematics, science, and engineering. \n", + "\n", + "* [Matplotlib](https://matplotlib.org/) is a Python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms.\n", + "\n", + "* [Autograd](https://github.com/HIPS/autograd) can automatically differentiate native Python and Numpy code. It can handle a large subset of Python's features, including loops, ifs, recursion and closures, and it can even take derivatives of derivatives of derivatives\n", + "\n", + "* [SymPy](https://www.sympy.org/en/index.html) is a Python library for symbolic mathematics. \n", + "\n", + "* [scikit-learn](https://scikit-learn.org/stable/) has simple and efficient tools for machine learning, data mining and data analysis\n", + "\n", + "* [TensorFlow](https://www.tensorflow.org/) is a Python library for fast numerical computing created and released by Google\n", + "\n", + "* [Keras](https://keras.io/) is a high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, or Theano\n", + "\n", + "* And many more such as [pytorch](https://pytorch.org/), [Theano](https://pypi.org/project/Theano/) etc \n", + "\n", + "Your jupyter notebook can easily be\n", + "converted into a nicely rendered **PDF** file or a Latex file for\n", + "further processing. For example, convert to latex as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " pycod jupyter nbconvert filename.ipynb --to latex \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And to add more versatility, the Python package [SymPy](http://www.sympy.org/en/index.html) is a Python library for symbolic mathematics. It aims to become a full-featured computer algebra system (CAS) and is entirely written in Python. \n", + "\n", + "\n", + "\n", + "## Numpy examples and Important Matrix and vector handling packages\n", + "\n", + "There are several central software libraries for linear algebra and eigenvalue problems. Several of the more\n", + "popular ones have been wrapped into ofter software packages like those from the widely used text **Numerical Recipes**. The original source codes in many of the available packages are often taken from the widely used\n", + "software package LAPACK, which follows two other popular packages\n", + "developed in the 1970s, namely EISPACK and LINPACK. We describe them shortly here.\n", + "\n", + " * LINPACK: package for linear equations and least square problems.\n", + "\n", + " * LAPACK:package for solving symmetric, unsymmetric and generalized eigenvalue problems. From LAPACK's website it is possible to download for free all source codes from this library. Both C/C++ and Fortran versions are available.\n", + "\n", + " * BLAS (I, II and III): (Basic Linear Algebra Subprograms) are routines that provide standard building blocks for performing basic vector and matrix operations. Blas I is vector operations, II vector-matrix operations and III matrix-matrix operations. Highly parallelized and efficient codes, all available for download from .\n", + "\n", + "## Basic Matrix Features\n", + "\n", + "**Matrix properties reminder.**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbf{A} =\n", + " \\begin{bmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\\\\n", + " a_{21} & a_{22} & a_{23} & a_{24} \\\\\n", + " a_{31} & a_{32} & a_{33} & a_{34} \\\\\n", + " a_{41} & a_{42} & a_{43} & a_{44}\n", + " \\end{bmatrix}\\qquad\n", + "\\mathbf{I} =\n", + " \\begin{bmatrix} 1 & 0 & 0 & 0 \\\\\n", + " 0 & 1 & 0 & 0 \\\\\n", + " 0 & 0 & 1 & 0 \\\\\n", + " 0 & 0 & 0 & 1\n", + " \\end{bmatrix}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The inverse of a matrix is defined by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbf{A}^{-1} \\cdot \\mathbf{A} = I\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Relations Name matrix elements
    $A = A^{T}$ symmetric $a_{ij} = a_{ji}$
    $A = \\left (A^{T} \\right )^{-1}$ real orthogonal $\\sum_k a_{ik} a_{jk} = \\sum_k a_{ki} a_{kj} = \\delta_{ij}$
    $A = A^{ * }$ real matrix $a_{ij} = a_{ij}^{ * }$
    $A = A^{\\dagger}$ hermitian $a_{ij} = a_{ji}^{ * }$
    $A = \\left (A^{\\dagger} \\right )^{-1}$ unitary $\\sum_k a_{ik} a_{jk}^{ * } = \\sum_k a_{ki}^{ * } a_{kj} = \\delta_{ij}$
    \n", + "\n", + "\n", + "\n", + "\n", + "### Some famous Matrices\n", + "\n", + " * Diagonal if $a_{ij}=0$ for $i\\ne j$\n", + "\n", + " * Upper triangular if $a_{ij}=0$ for $i > j$\n", + "\n", + " * Lower triangular if $a_{ij}=0$ for $i < j$\n", + "\n", + " * Upper Hessenberg if $a_{ij}=0$ for $i > j+1$\n", + "\n", + " * Lower Hessenberg if $a_{ij}=0$ for $i < j+1$\n", + "\n", + " * Tridiagonal if $a_{ij}=0$ for $|i -j| > 1$\n", + "\n", + " * Lower banded with bandwidth $p$: $a_{ij}=0$ for $i > j+p$\n", + "\n", + " * Upper banded with bandwidth $p$: $a_{ij}=0$ for $i < j+p$\n", + "\n", + " * Banded, block upper triangular, block lower triangular....\n", + "\n", + "### More Basic Matrix Features\n", + "\n", + "**Some Equivalent Statements.**\n", + "\n", + "For an $N\\times N$ matrix $\\mathbf{A}$ the following properties are all equivalent\n", + "\n", + " * If the inverse of $\\mathbf{A}$ exists, $\\mathbf{A}$ is nonsingular.\n", + "\n", + " * The equation $\\mathbf{Ax}=0$ implies $\\mathbf{x}=0$.\n", + "\n", + " * The rows of $\\mathbf{A}$ form a basis of $R^N$.\n", + "\n", + " * The columns of $\\mathbf{A}$ form a basis of $R^N$.\n", + "\n", + " * $\\mathbf{A}$ is a product of elementary matrices.\n", + "\n", + " * $0$ is not eigenvalue of $\\mathbf{A}$.\n", + "\n", + "\n", + "\n", + "\n", + "## Numpy and arrays\n", + "[Numpy](http://www.numpy.org/) provides an easy way to handle arrays in Python. The standard way to import this library is as" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here follows a simple example where we set up an array of ten elements, all determined by random numbers drawn according to the normal distribution," + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "n = 10\n", + "x = np.random.normal(size=n)\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We defined a vector $x$ with $n=10$ elements with its values given by the Normal distribution $N(0,1)$.\n", + "Another alternative is to declare a vector as follows" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "x = np.array([1, 2, 3])\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we have defined a vector with three elements, with $x_0=1$, $x_1=2$ and $x_2=3$. Note that both Python and C++\n", + "start numbering array elements from $0$ and on. This means that a vector with $n$ elements has a sequence of entities $x_0, x_1, x_2, \\dots, x_{n-1}$. We could also let (recommended) Numpy to compute the logarithms of a specific array as" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "x = np.log(np.array([4, 7, 8]))\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the last example we used Numpy's unary function $np.log$. This function is\n", + "highly tuned to compute array elements since the code is vectorized\n", + "and does not require looping. We normaly recommend that you use the\n", + "Numpy intrinsic functions instead of the corresponding **log** function\n", + "from Python's **math** module. The looping is done explicitely by the\n", + "**np.log** function. The alternative, and slower way to compute the\n", + "logarithms of a vector would be to write" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from math import log\n", + "x = np.array([4, 7, 8])\n", + "for i in range(0, len(x)):\n", + " x[i] = log(x[i])\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We note that our code is much longer already and we need to import the **log** function from the **math** module. \n", + "The attentive reader will also notice that the output is $[1, 1, 2]$. Python interprets automagically our numbers as integers (like the **automatic** keyword in C++). To change this we could define our array elements to be double precision numbers as" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "x = np.log(np.array([4, 7, 8], dtype = np.float64))\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or simply write them as double precision numbers (Python uses 64 bits as default for floating point type variables), that is" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "x = np.log(np.array([4.0, 7.0, 8.0])\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To check the number of bytes (remember that one byte contains eight bits for double precision variables), you can use simple use the **itemsize** functionality (the array $x$ is actually an object which inherits the functionalities defined in Numpy) as" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "x = np.log(np.array([4.0, 7.0, 8.0])\n", + "print(x.itemsize)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Matrices in Python\n", + "\n", + "Having defined vectors, we are now ready to try out matrices. We can\n", + "define a $3 \\times 3 $ real matrix $\\hat{A}$ as (recall that we user\n", + "lowercase letters for vectors and uppercase letters for matrices)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "A = np.log(np.array([ [4.0, 7.0, 8.0], [3.0, 10.0, 11.0], [4.0, 5.0, 7.0] ]))\n", + "print(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we use the **shape** function we would get $(3, 3)$ as output, that is verifying that our matrix is a $3\\times 3$ matrix. We can slice the matrix and print for example the first column (Python organized matrix elements in a row-major order, see below) as" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "A = np.log(np.array([ [4.0, 7.0, 8.0], [3.0, 10.0, 11.0], [4.0, 5.0, 7.0] ]))\n", + "# print the first column, row-major order and elements start with 0\n", + "print(A[:,0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can continue this was by printing out other columns or rows. The example here prints out the second column" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "A = np.log(np.array([ [4.0, 7.0, 8.0], [3.0, 10.0, 11.0], [4.0, 5.0, 7.0] ]))\n", + "# print the first column, row-major order and elements start with 0\n", + "print(A[1,:])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Numpy contains many other functionalities that allow us to slice, subdivide etc etc arrays. We strongly recommend that you look up the [Numpy website for more details](http://www.numpy.org/). Useful functions when defining a matrix are the **np.zeros** function which declares a matrix of a given dimension and sets all elements to zero" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "n = 10\n", + "# define a matrix of dimension 10 x 10 and set all elements to zero\n", + "A = np.zeros( (n, n) )\n", + "print(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or initializing all elements to" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "n = 10\n", + "# define a matrix of dimension 10 x 10 and set all elements to one\n", + "A = np.ones( (n, n) )\n", + "print(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or as unitarily distributed random numbers (see the material on random number generators in the statistics part)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "n = 10\n", + "# define a matrix of dimension 10 x 10 and set all elements to random numbers with x \\in [0, 1]\n", + "A = np.random.rand(n, n)\n", + "print(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Meet the Pandas\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Another useful Python package is\n", + "[pandas](https://pandas.pydata.org/), which is an open source library\n", + "providing high-performance, easy-to-use data structures and data\n", + "analysis tools for Python. **pandas** stands for panel data, a term borrowed from econometrics and is an efficient library for data analysis with an emphasis on tabular data.\n", + "**pandas** has two major classes, the **DataFrame** class with two-dimensional data objects and tabular data organized in columns and the class **Series** with a focus on one-dimensional data objects. Both classes allow you to index data easily as we will see in the examples below. \n", + "**pandas** allows you also to perform mathematical operations on the data, spanning from simple reshapings of vectors and matrices to statistical operations. \n", + "\n", + "The following simple example shows how we can, in an easy way make tables of our data. Here we define a data set which includes names, place of birth and date of birth, and displays the data in an easy to read way. We will see repeated use of **pandas**, in particular in connection with classification of data." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from IPython.display import display\n", + "data = {'First Name': [\"Frodo\", \"Bilbo\", \"Aragorn II\", \"Samwise\"],\n", + " 'Last Name': [\"Baggins\", \"Baggins\",\"Elessar\",\"Gamgee\"],\n", + " 'Place of birth': [\"Shire\", \"Shire\", \"Eriador\", \"Shire\"],\n", + " 'Date of Birth T.A.': [2968, 2890, 2931, 2980]\n", + " }\n", + "data_pandas = pd.DataFrame(data)\n", + "display(data_pandas)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the above we have imported **pandas** with the shorthand **pd**, the latter has become the standard way we import **pandas**. We make then a list of various variables\n", + "and reorganize the above lists into a **DataFrame** and then print out a neat table with specific column labels as *Name*, *place of birth* and *date of birth*.\n", + "Displaying these results, we see that the indices are given by the default numbers from zero to three.\n", + "**pandas** is extremely flexible and we can easily change the above indices by defining a new type of indexing as" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "data_pandas = pd.DataFrame(data,index=['Frodo','Bilbo','Aragorn','Sam'])\n", + "display(data_pandas)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thereafter we display the content of the row which begins with the index **Aragorn**" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "display(data_pandas.loc['Aragorn'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can easily append data to this, for example" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "new_hobbit = {'First Name': [\"Peregrin\"],\n", + " 'Last Name': [\"Took\"],\n", + " 'Place of birth': [\"Shire\"],\n", + " 'Date of Birth T.A.': [2990]\n", + " }\n", + "data_pandas=data_pandas.append(pd.DataFrame(new_hobbit, index=['Pippin']))\n", + "display(data_pandas)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are other examples where we use the **DataFrame** functionality to handle arrays, now with more interesting features for us, namely numbers. We set up a matrix \n", + "of dimensionality $10\\times 5$ and compute the mean value and standard deviation of each column. Similarly, we can perform mathematial operations like squaring the matrix elements and many other operations." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from IPython.display import display\n", + "np.random.seed(100)\n", + "# setting up a 10 x 5 matrix\n", + "rows = 10\n", + "cols = 5\n", + "a = np.random.randn(rows,cols)\n", + "df = pd.DataFrame(a)\n", + "display(df)\n", + "print(df.mean())\n", + "print(df.std())\n", + "display(df**2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thereafter we can select specific columns only and plot final results" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.columns = ['First', 'Second', 'Third', 'Fourth', 'Fifth']\n", + "df.index = np.arange(10)\n", + "\n", + "display(df)\n", + "print(df['Second'].mean() )\n", + "print(df.info())\n", + "print(df.describe())\n", + "\n", + "from pylab import plt, mpl\n", + "plt.style.use('seaborn')\n", + "mpl.rcParams['font.family'] = 'serif'\n", + "\n", + "df.cumsum().plot(lw=2.0, figsize=(10,6))\n", + "plt.show()\n", + "\n", + "\n", + "df.plot.bar(figsize=(10,6), rot=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can produce a $4\\times 4$ matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "b = np.arange(16).reshape((4,4))\n", + "print(b)\n", + "df1 = pd.DataFrame(b)\n", + "print(df1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and many other operations. \n", + "\n", + "The **Series** class is another important class included in\n", + "**pandas**. You can view it as a specialization of **DataFrame** but where\n", + "we have just a single column of data. It shares many of the same features as _DataFrame. As with **DataFrame**,\n", + "most operations are vectorized, achieving thereby a high performance when dealing with computations of arrays, in particular labeled arrays.\n", + "As we will see below it leads also to a very concice code close to the mathematical operations we may be interested in.\n", + "For multidimensional arrays, we recommend strongly [xarray](http://xarray.pydata.org/en/stable/). **xarray** has much of the same flexibility as **pandas**, but allows for the extension to higher dimensions than two." + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/chapter3.ipynb b/doc/src/LectureNotes/testbook/_build/html/_sources/chapter3.ipynb new file mode 100644 index 000000000..e08bcd29c --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/chapter3.ipynb @@ -0,0 +1,1643 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Basic Steps of Scientific Investigations\n", + "\n", + "An overarching aim in this course is to give you a deeper\n", + "understanding of the scientific method. The problems we study will all\n", + "involve cases where we can apply classical mechanics. In our previous\n", + "material we already assumed that we had a model for the motion of an\n", + "object. Alternatively we could have data from experiment (like Usain\n", + "Bolt's 100m world record run in 2008). Or we could have performed\n", + "ourselves an experiment and we want to understand which forces are at\n", + "play and whether these forces can be understood in terms of\n", + "fundamental forces.\n", + "\n", + "Our first step consists in identifying the problem. What we sketch\n", + "here may include a mix of experiment and theoretical simulations, or\n", + "just experiment or only theory.\n", + "\n", + "\n", + "## Identifying our System\n", + "\n", + "Here we can ask questions like\n", + "1. What kind of object is moving\n", + "\n", + "2. What kind of data do we have\n", + "\n", + "3. How do we measure position, velocity, acceleration etc\n", + "\n", + "4. Which initial conditions influence our system\n", + "\n", + "5. Other aspects which allow us to identify the system\n", + "\n", + "## Defining a Model\n", + "\n", + "With our eventual data and observations we would now like to develop a\n", + "model for the system. In the end we want obviously to be able to\n", + "understand which forces are at play and how they influence our\n", + "specific system. That is, can we extract some deeper insights about a\n", + "system?\n", + "\n", + "We need then to\n", + "1. Find the forces that act on our system\n", + "\n", + "2. Introduce models for the forces\n", + "\n", + "3. Identify the equations which can govern the system (Newton's second law for example)\n", + "\n", + "4. More elements we deem important for defining our model\n", + "\n", + "## Solving the Equations\n", + "\n", + "With the model at hand, we can then solve the equations. In classical mechanics we normally end up with solving sets of coupled ordinary differential equations or partial differential equations.\n", + "1. Using Newton's second law we have equations of the type $\\boldsymbol{F}=m\\boldsymbol{a}=md\\boldsymbol{v}/dt$\n", + "\n", + "2. We need to define the initial conditions (typically the initial velocity and position as functions of time) and/or initial conditions and boundary conditions\n", + "\n", + "3. The solution of the equations give us then the position, the velocity and other time-dependent quantities which may specify the motion of a given object.\n", + "\n", + "We are not yet done. With our lovely solvers, we need to start thinking.\n", + "\n", + "\n", + "Now it is time to ask the big questions. What do our results mean? Can we give a simple interpretation in terms of fundamental laws? What do our results mean? Are they correct?\n", + "Thus, typical questions we may ask are\n", + "1. Are our results for say $\\boldsymbol{r}(t)$ valid? Do we trust what we did? Can you validate and verify the correctness of your results?\n", + "\n", + "2. Evaluate the answers and their implications\n", + "\n", + "3. Compare with experimental data if possible. Does our model make sense?\n", + "\n", + "4. and obviously many other questions.\n", + "\n", + "The analysis stage feeds back to the first stage. It may happen that\n", + "the data we had were not good enough, there could be large statistical\n", + "uncertainties. We may need to collect more data or perhaps we did a\n", + "sloppy job in identifying the degrees of freedom.\n", + "\n", + "All these steps are essential elements in a scientific\n", + "enquiry. Hopefully, through a mix of numerical simulations, analytical\n", + "calculations and experiments we may gain a deeper insight about the\n", + "physics of a specific system.\n", + "\n", + "Let us now remind ourselves of Newton's laws, since these are the laws of motion we will study in this course.\n", + "\n", + "\n", + "## Newton's Laws\n", + "\n", + "When analyzing a physical system we normally start with distinguishing between the object we are studying (we will label this in more general terms as our **system**) and how this system interacts with the environment (which often means everything else!)\n", + "\n", + "In our investigations we will thus analyze a specific physics problem in terms of the system and the environment.\n", + "In doing so we need to identify the forces that act on the system and assume that the\n", + "forces acting on the system must have a source, an identifiable cause in\n", + "the environment.\n", + "\n", + "A force acting on for example a falling object must be related to an interaction with something in the environment.\n", + "This also means that we do not consider internal forces. The latter are forces between\n", + "one part of the object and another part. In this course we will mainly focus on external forces.\n", + "\n", + "Forces are either contact forces or long-range forces.\n", + "\n", + "Contact forces, as evident from the name, are forces that occur at the contact between\n", + "the system and the environment. Well-known long-range forces are the gravitional force and the electromagnetic force.\n", + "\n", + "\n", + "\n", + "## Setting up a model for forces acting on an object\n", + "\n", + "In order to set up the forces which act on an object, the following steps may be useful\n", + "1. Divide the problem into system and environment.\n", + "\n", + "2. Draw a figure of the object and everything in contact with the object.\n", + "\n", + "3. Draw a closed curve around the system.\n", + "\n", + "4. Find contact points—these are the points where contact forces may act.\n", + "\n", + "5. Give names and symbols to all the contact forces.\n", + "\n", + "6. Identify the long-range forces.\n", + "\n", + "7. Make a drawing of the object. Draw the forces as arrows, vectors, starting from where the force is acting. The direction of the vector(s) indicates the (positive) direction of the force. Try to make the length of the arrow indicate the relative magnitude of the forces.\n", + "\n", + "8. Draw in the axes of the coordinate system. It is often convenient to make one axis parallel to the direction of motion. When you choose the direction of the axis you also choose the positive direction for the axis.\n", + "\n", + "## Newton's Laws, the Second one first\n", + "\n", + "\n", + "Newton’s second law of motion: The force $\\boldsymbol{F}$ on an object of inertial mass $m$\n", + "is related to the acceleration a of the object through" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F} = m\\boldsymbol{a},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\boldsymbol{a}$ is the acceleration.\n", + "\n", + "Newton’s laws of motion are laws of nature that have been found by experimental\n", + "investigations and have been shown to hold up to continued experimental investigations.\n", + "Newton’s laws are valid over a wide range of length- and time-scales. We\n", + "use Newton’s laws of motion to describe everything from the motion of atoms to the\n", + "motion of galaxies.\n", + "\n", + "The second law is a vector equation with the acceleration having the same\n", + "direction as the force. The acceleration is proportional to the force via the mass $m$ of the system under study.\n", + "\n", + "\n", + "Newton’s second law introduces a new property of an object, the so-called \n", + "inertial mass $m$. We determine the inertial mass of an object by measuring the\n", + "acceleration for a given applied force.\n", + "\n", + "\n", + "\n", + "## Then the First Law\n", + "\n", + "\n", + "What happens if the net external force on a body is zero? Applying Newton’s second\n", + "law, we find:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F} = 0 = m\\boldsymbol{a},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which gives using the definition of the acceleration" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a} = \\frac{d\\boldsymbol{v}}{dt}=0.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The acceleration is zero, which means that the velocity of the object is constant. This\n", + "is often referred to as Newton’s first law. An object in a state of uniform motion tends to remain in\n", + "that state unless an external force changes its state of motion.\n", + "Why do we need a separate law for this? Is it not simply a special case of Newton’s\n", + "second law? Yes, Newton’s first law can be deduced from the second law as we have\n", + "illustrated. However, the first law is often used for a different purpose: Newton’s\n", + "First Law tells us about the limit of applicability of Newton’s Second law. Newton’s\n", + "Second law can only be used in reference systems where the First law is obeyed. But\n", + "is not the First law always valid? No! The First law is only valid in reference systems\n", + "that are not accelerated. If you observe the motion of a ball from an accelerating\n", + "car, the ball will appear to accelerate even if there are no forces acting on it. We call\n", + "systems that are not accelerating inertial systems, and Newton’s first law is often\n", + "called the law of inertia. Newton’s first and second laws of motion are only valid in\n", + "inertial systems. \n", + "\n", + "A system is an inertial system if it is not accelerated. It means that the reference system\n", + "must not be accelerating linearly or rotating. Unfortunately, this means that most\n", + "systems we know are not really inertial systems. For example, the surface of the\n", + "Earth is clearly not an inertial system, because the Earth is rotating. The Earth is also\n", + "not an inertial system, because it ismoving in a curved path around the Sun. However,\n", + "even if the surface of the Earth is not strictly an inertial system, it may be considered\n", + "to be approximately an inertial system for many laboratory-size experiments.\n", + "\n", + "\n", + "## And finally the Third Law\n", + "\n", + "\n", + "If there is a force from object A on object B, there is also a force from object B on object A.\n", + "This fundamental principle of interactions is called Newton’s third law. We do not\n", + "know of any force that do not obey this law: All forces appear in pairs. Newton’s\n", + "third law is usually formulated as: For every action there is an equal and opposite\n", + "reaction.\n", + "\n", + "\n", + "\n", + "## Motion of a Single Object\n", + "\n", + "Here we consider the motion of a single particle moving under\n", + "the influence of some set of forces. We will consider some problems where\n", + "the force does not depend on the position. In that case Newton's law\n", + "$m\\dot{\\boldsymbol{v}}=\\boldsymbol{F}(\\boldsymbol{v})$ is a first-order differential\n", + "equation and one solves for $\\boldsymbol{v}(t)$, then moves on to integrate\n", + "$\\boldsymbol{v}$ to get the position. In essentially all of these cases we cna find an analytical solution.\n", + "\n", + "\n", + "\n", + "## Air Resistance in One Dimension\n", + "\n", + "Air resistance tends to scale as the square of the velocity. This is\n", + "in contrast to many problems chosen for textbooks, where it is linear\n", + "in the velocity. The choice of a linear dependence is motivated by\n", + "mathematical simplicity (it keeps the differential equation linear)\n", + "rather than by physics. One can see that the force should be quadratic\n", + "in velocity by considering the momentum imparted on the air\n", + "molecules. If an object sweeps through a volume $dV$ of air in time\n", + "$dt$, the momentum imparted on the air is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "dP=\\rho_m dV v,\n", + "\\label{_auto1} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $v$ is the velocity of the object and $\\rho_m$ is the mass\n", + "density of the air. If the molecules bounce back as opposed to stop\n", + "you would double the size of the term. The opposite value of the\n", + "momentum is imparted onto the object itself. Geometrically, the\n", + "differential volume is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "dV=Avdt,\n", + "\\label{_auto2} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $A$ is the cross-sectional area and $vdt$ is the distance the\n", + "object moved in time $dt$.\n", + "\n", + "\n", + "## Resulting Acceleration\n", + "Plugging this into the expression above," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{dP}{dt}=-\\rho_m A v^2.\n", + "\\label{_auto3} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the force felt by the particle, and is opposite to its\n", + "direction of motion. Now, because air doesn't stop when it hits an\n", + "object, but flows around the best it can, the actual force is reduced\n", + "by a dimensionless factor $c_W$, called the drag coefficient." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F_{\\rm drag}=-c_W\\rho_m Av^2,\n", + "\\label{_auto4} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the acceleration is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{dv}{dt}=-\\frac{c_W\\rho_mA}{m}v^2.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a particle with initial velocity $v_0$, one can separate the $dt$\n", + "to one side of the equation, and move everything with $v$s to the\n", + "other side. We did this in our discussion of simple motion and will not repeat it here.\n", + "\n", + "On more general terms,\n", + "for many systems, e.g. an automobile, there are multiple sources of\n", + "resistance. In addition to wind resistance, where the force is\n", + "proportional to $v^2$, there are dissipative effects of the tires on\n", + "the pavement, and in the axel and drive train. These other forces can\n", + "have components that scale proportional to $v$, and components that\n", + "are independent of $v$. Those independent of $v$, e.g. the usual\n", + "$f=\\mu_K N$ frictional force you consider in your first Physics courses, only set in\n", + "once the object is actually moving. As speeds become higher, the $v^2$\n", + "components begin to dominate relative to the others. For automobiles\n", + "at freeway speeds, the $v^2$ terms are largely responsible for the\n", + "loss of efficiency. To travel a distance $L$ at fixed speed $v$, the\n", + "energy/work required to overcome the dissipative forces are $fL$,\n", + "which for a force of the form $f=\\alpha v^n$ becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "W=\\int dx~f=\\alpha v^n L.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For $n=0$ the work is\n", + "independent of speed, but for the wind resistance, where $n=2$,\n", + "slowing down is essential if one wishes to reduce fuel consumption. It\n", + "is also important to consider that engines are designed to be most\n", + "efficient at a chosen range of power output. Thus, some cars will get\n", + "better mileage at higher speeds (They perform better at 50 mph than at\n", + "5 mph) despite the considerations mentioned above.\n", + "\n", + "\n", + "## Going Ballistic, Projectile Motion or a Softer Approach, Falling Raindrops\n", + "\n", + "\n", + "As an example of Newton's Laws we consider projectile motion (or a\n", + "falling raindrop or a ball we throw up in the air) with a drag force. Even though air resistance is\n", + "largely proportional to the square of the velocity, we will consider\n", + "the drag force to be linear to the velocity, $\\boldsymbol{F}=-m\\gamma\\boldsymbol{v}$,\n", + "for the purposes of this exercise. The acceleration for a projectile moving upwards,\n", + "$\\boldsymbol{a}=\\boldsymbol{F}/m$, becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{dv_x}{dt}=-\\gamma v_x,\\\\\n", + "\\nonumber\n", + "\\frac{dv_y}{dt}=-\\gamma v_y-g,\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and $\\gamma$ has dimensions of inverse time. \n", + "\n", + "If you on the other hand have a falling raindrop, how do these equations change? See for example Figure 2.1 in Taylor.\n", + "Let us stay with a ball which is thrown up in the air at $t=0$. \n", + "\n", + "\n", + "## Ways of solving these equations\n", + "\n", + "We will go over two different ways to solve this equation. The first\n", + "by direct integration, and the second as a differential equation. To\n", + "do this by direct integration, one simply multiplies both sides of the\n", + "equations above by $dt$, then divide by the appropriate factors so\n", + "that the $v$s are all on one side of the equation and the $dt$ is on\n", + "the other. For the $x$ motion one finds an easily integrable equation," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{dv_x}{v_x}&=&-\\gamma dt,\\\\\n", + "\\nonumber\n", + "\\int_{v_{0x}}^{v_{x}}\\frac{dv_x}{v_x}&=&-\\gamma\\int_0^{t}dt,\\\\\n", + "\\nonumber\n", + "\\ln\\left(\\frac{v_{x}}{v_{0x}}\\right)&=&-\\gamma t,\\\\\n", + "\\nonumber\n", + "v_{x}(t)&=&v_{0x}e^{-\\gamma t}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is very much the result you would have written down\n", + "by inspection. For the $y$-component of the velocity," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{dv_y}{v_y+g/\\gamma}&=&-\\gamma dt\\\\\n", + "\\nonumber\n", + "\\ln\\left(\\frac{v_{y}+g/\\gamma}{v_{0y}-g/\\gamma}\\right)&=&-\\gamma t_f,\\\\\n", + "\\nonumber\n", + "v_{fy}&=&-\\frac{g}{\\gamma}+\\left(v_{0y}+\\frac{g}{\\gamma}\\right)e^{-\\gamma t}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Whereas $v_x$ starts at some value and decays\n", + "exponentially to zero, $v_y$ decays exponentially to the terminal\n", + "velocity, $v_t=-g/\\gamma$.\n", + "\n", + "\n", + "## Solving as differential equations\n", + "\n", + "Although this direct integration is simpler than the method we invoke\n", + "below, the method below will come in useful for some slightly more\n", + "difficult differential equations in the future. The differential\n", + "equation for $v_x$ is straight-forward to solve. Because it is first\n", + "order there is one arbitrary constant, $A$, and by inspection the\n", + "solution is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_x=Ae^{-\\gamma t}.\n", + "\\label{_auto5} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The arbitrary constants for equations of motion are usually determined\n", + "by the initial conditions, or more generally boundary conditions. By\n", + "inspection $A=v_{0x}$, the initial $x$ component of the velocity.\n", + "\n", + "\n", + "\n", + "## Differential Equations, contn\n", + "\n", + "The differential equation for $v_y$ is a bit more complicated due to\n", + "the presence of $g$. Differential equations where all the terms are\n", + "linearly proportional to a function, in this case $v_y$, or to\n", + "derivatives of the function, e.g., $v_y$, $dv_y/dt$,\n", + "$d^2v_y/dt^2\\cdots$, are called linear differential equations. If\n", + "there are terms proportional to $v^2$, as would happen if the drag\n", + "force were proportional to the square of the velocity, the\n", + "differential equation is not longer linear. Because this expression\n", + "has only one derivative in $v$ it is a first-order linear differential\n", + "equation. If a term were added proportional to $d^2v/dt^2$ it would be\n", + "a second-order differential equation. In this case we have a term\n", + "completely independent of $v$, the gravitational acceleration $g$, and\n", + "the usual strategy is to first rewrite the equation with all the\n", + "linear terms on one side of the equal sign," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{dv_y}{dt}+\\gamma v_y=-g.\n", + "\\label{_auto6} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Splitting into two parts\n", + "\n", + "Now, the solution to the equation can be broken into two\n", + "parts. Because this is a first-order differential equation we know\n", + "that there will be one arbitrary constant. Physically, the arbitrary\n", + "constant will be determined by setting the initial velocity, though it\n", + "could be determined by setting the velocity at any given time. Like\n", + "most differential equations, solutions are not \"solved\". Instead,\n", + "one guesses at a form, then shows the guess is correct. For these\n", + "types of equations, one first tries to find a single solution,\n", + "i.e. one with no arbitrary constants. This is called the {\\it\n", + "particular} solution, $y_p(t)$, though it should really be called\n", + "\"a\" particular solution because there are an infinite number of such\n", + "solutions. One then finds a solution to the {\\it homogenous} equation,\n", + "which is the equation with zero on the right-hand side," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{dv_{y,h}}{dt}+\\gamma v_{y,h}=0.\n", + "\\label{_auto7} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Homogenous solutions will have arbitrary constants. \n", + "\n", + "The particular solution will solve the same equation as the original\n", + "general equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{dv_{y,p}}{dt}+\\gamma v_{y,p}=-g.\n", + "\\label{_auto8} \\tag{8}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, we don't need find one with arbitrary constants. Hence, it is\n", + "called a **particular** solution.\n", + "\n", + "The sum of the two," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_y=v_{y,p}+v_{y,h},\n", + "\\label{_auto9} \\tag{9}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "is a solution of the total equation because of the linear nature of\n", + "the differential equation. One has now found a *general* solution\n", + "encompassing all solutions, because it both satisfies the general\n", + "equation (like the particular solution), and has an arbitrary constant\n", + "that can be adjusted to fit any initial condition (like the homogneous\n", + "solution). If the equation were not linear, e.g if there were a term\n", + "such as $v_y^2$ or $v_y\\dot{v}_y$, this technique would not work.\n", + "\n", + "\n", + "## More details\n", + "\n", + "Returning to the example above, the homogenous solution is the same as\n", + "that for $v_x$, because there was no gravitational acceleration in\n", + "that case," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_{y,h}=Be^{-\\gamma t}.\n", + "\\label{_auto10} \\tag{10}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case a particular solution is one with constant velocity," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_{y,p}=-g/\\gamma.\n", + "\\label{_auto11} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that this is the terminal velocity of a particle falling from a\n", + "great height. The general solution is thus," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_y=Be^{-\\gamma t}-g/\\gamma,\n", + "\\label{_auto12} \\tag{12}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and one can find $B$ from the initial velocity," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_{0y}=B-g/\\gamma,~~~B=v_{0y}+g/\\gamma.\n", + "\\label{_auto13} \\tag{13}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plugging in the expression for $B$ gives the $y$ motion given the initial velocity," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_y=(v_{0y}+g/\\gamma)e^{-\\gamma t}-g/\\gamma.\n", + "\\label{_auto14} \\tag{14}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is easy to see that this solution has $v_y=v_{0y}$ when $t=0$ and\n", + "$v_y=-g/\\gamma$ when $t\\rightarrow\\infty$.\n", + "\n", + "One can also integrate the two equations to find the coordinates $x$\n", + "and $y$ as functions of $t$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x&=&\\int_0^t dt'~v_{0x}(t')=\\frac{v_{0x}}{\\gamma}\\left(1-e^{-\\gamma t}\\right),\\\\\n", + "\\nonumber\n", + "y&=&\\int_0^t dt'~v_{0y}(t')=-\\frac{gt}{\\gamma}+\\frac{v_{0y}+g/\\gamma}{\\gamma}\\left(1-e^{-\\gamma t}\\right).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the question was to find the position at a time $t$, we would be\n", + "finished. However, the more common goal in a projectile equation\n", + "problem is to find the range, i.e. the distance $x$ at which $y$\n", + "returns to zero. For the case without a drag force this was much\n", + "simpler. The solution for the $y$ coordinate would have been\n", + "$y=v_{0y}t-gt^2/2$. One would solve for $t$ to make $y=0$, which would\n", + "be $t=2v_{0y}/g$, then plug that value for $t$ into $x=v_{0x}t$ to\n", + "find $x=2v_{0x}v_{0y}/g=v_0\\sin(2\\theta_0)/g$. One follows the same\n", + "steps here, except that the expression for $y(t)$ is more\n", + "complicated. Searching for the time where $y=0$, and we get" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "0=-\\frac{gt}{\\gamma}+\\frac{v_{0y}+g/\\gamma}{\\gamma}\\left(1-e^{-\\gamma t}\\right).\n", + "\\label{_auto15} \\tag{15}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This cannot be inverted into a simple expression $t=\\cdots$. Such\n", + "expressions are known as \"transcendental equations\", and are not the\n", + "rare instance, but are the norm. In the days before computers, one\n", + "might plot the right-hand side of the above graphically as\n", + "a function of time, then find the point where it crosses zero.\n", + "\n", + "Now, the most common way to solve for an equation of the above type\n", + "would be to apply Newton's method numerically. This involves the\n", + "following algorithm for finding solutions of some equation $F(t)=0$.\n", + "\n", + "1. First guess a value for the time, $t_{\\rm guess}$.\n", + "\n", + "2. Calculate $F$ and its derivative, $F(t_{\\rm guess})$ and $F'(t_{\\rm guess})$. \n", + "\n", + "3. Unless you guessed perfectly, $F\\ne 0$, and assuming that $\\Delta F\\approx F'\\Delta t$, one would choose \n", + "\n", + "4. $\\Delta t=-F(t_{\\rm guess})/F'(t_{\\rm guess})$.\n", + "\n", + "5. Now repeat step 1, but with $t_{\\rm guess}\\rightarrow t_{\\rm guess}+\\Delta t$.\n", + "\n", + "If the $F(t)$ were perfectly linear in $t$, one would find $t$ in one\n", + "step. Instead, one typically finds a value of $t$ that is closer to\n", + "the final answer than $t_{\\rm guess}$. One breaks the loop once one\n", + "finds $F$ within some acceptable tolerance of zero. A program to do\n", + "this will be added shortly.\n", + "\n", + "\n", + "## Motion in a Magnetic Field\n", + "\n", + "\n", + "Another example of a velocity-dependent force is magnetism," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\boldsymbol{F}&=&q\\boldsymbol{v}\\times\\boldsymbol{B},\\\\\n", + "\\nonumber\n", + "F_i&=&q\\sum_{jk}\\epsilon_{ijk}v_jB_k.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a uniform field in the $z$ direction $\\boldsymbol{B}=B\\hat{z}$, the force can only have $x$ and $y$ components," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "F_x&=&qBv_y\\\\\n", + "\\nonumber\n", + "F_y&=&-qBv_x.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The differential equations are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\dot{v}_x&=&\\omega_c v_y,\\omega_c= qB/m\\\\\n", + "\\nonumber\n", + "\\dot{v}_y&=&-\\omega_c v_x.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One can solve the equations by taking time derivatives of either equation, then substituting into the other equation," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\ddot{v}_x=\\omega_c\\dot{v_y}=-\\omega_c^2v_x,\\\\\n", + "\\nonumber\n", + "\\ddot{v}_y&=&-\\omega_c\\dot{v}_x=-\\omega_cv_y.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The solution to these equations can be seen by inspection," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "v_x&=&A\\sin(\\omega_ct+\\phi),\\\\\n", + "\\nonumber\n", + "v_y&=&A\\cos(\\omega_ct+\\phi).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One can integrate the equations to find the positions as a function of time," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x-x_0&=&\\int_{x_0}^x dx=\\int_0^t dt v(t)\\\\\n", + "\\nonumber\n", + "&=&\\frac{-A}{\\omega_c}\\cos(\\omega_ct+\\phi),\\\\\n", + "\\nonumber\n", + "y-y_0&=&\\frac{A}{\\omega_c}\\sin(\\omega_ct+\\phi).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The trajectory is a circle centered at $x_0,y_0$ with amplitude $A$ rotating in the clockwise direction.\n", + "\n", + "The equations of motion for the $z$ motion are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\dot{v_z}=0,\n", + "\\label{_auto16} \\tag{16}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which leads to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "z-z_0=V_zt.\n", + "\\label{_auto17} \\tag{17}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Added onto the circle, the motion is helical.\n", + "\n", + "Note that the kinetic energy," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "T=\\frac{1}{2}m(v_x^2+v_y^2+v_z^2)=\\frac{1}{2}m(\\omega_c^2A^2+V_z^2),\n", + "\\label{_auto18} \\tag{18}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "is constant. This is because the force is perpendicular to the\n", + "velocity, so that in any differential time element $dt$ the work done\n", + "on the particle $\\boldsymbol{F}\\cdot{dr}=dt\\boldsymbol{F}\\cdot{v}=0$.\n", + "\n", + "One should think about the implications of a velocity dependent\n", + "force. Suppose one had a constant magnetic field in deep space. If a\n", + "particle came through with velocity $v_0$, it would undergo cyclotron\n", + "motion with radius $R=v_0/\\omega_c$. However, if it were still its\n", + "motion would remain fixed. Now, suppose an observer looked at the\n", + "particle in one reference frame where the particle was moving, then\n", + "changed their velocity so that the particle's velocity appeared to be\n", + "zero. The motion would change from circular to fixed. Is this\n", + "possible?\n", + "\n", + "The solution to the puzzle above relies on understanding\n", + "relativity. Imagine that the first observer believes $\\boldsymbol{B}\\ne 0$ and\n", + "that the electric field $\\boldsymbol{E}=0$. If the observer then changes\n", + "reference frames by accelerating to a velocity $\\boldsymbol{v}$, in the new\n", + "frame $\\boldsymbol{B}$ and $\\boldsymbol{E}$ both change. If the observer moved to the\n", + "frame where the charge, originally moving with a small velocity $v$,\n", + "is now at rest, the new electric field is indeed $\\boldsymbol{v}\\times\\boldsymbol{B}$,\n", + "which then leads to the same acceleration as one had before. If the\n", + "velocity is not small compared to the speed of light, additional\n", + "$\\gamma$ factors come into play,\n", + "$\\gamma=1/\\sqrt{1-(v/c)^2}$. Relativistic motion will not be\n", + "considered in this course.\n", + "\n", + "\n", + "\n", + "\n", + "## Sliding Block tied to a Wall\n", + "\n", + "Another classical case is that of simple harmonic oscillations, here represented by a block sliding on a horizontal frictionless surface. The block is tied to a wall with a spring. If the spring is not compressed or stretched too far, the force on the block at a given position $x$ is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F=-kx.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The negative sign means that the force acts to restore the object to an equilibrium position. Newton's equation of motion for this idealized system is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\frac{d^2x}{dt^2}=-kx,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or we could rephrase it as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\frac{d^2x}{dt^2}=-\\frac{k}{m}x=-\\omega_0^2x,\n", + "\\label{eq:newton1} \\tag{19}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with the angular frequency $\\omega_0^2=k/m$. \n", + "\n", + "The above differential equation has the advantage that it can be solved analytically with solutions on the form" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x(t)=Acos(\\omega_0t+\\nu),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $A$ is the amplitude and $\\nu$ the phase constant. This provides in turn an important test for the numerical\n", + "solution and the development of a program for more complicated cases which cannot be solved analytically. \n", + "\n", + "\n", + "With the position $x(t)$ and the velocity $v(t)=dx/dt$ we can reformulate Newton's equation in the following way" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{dx(t)}{dt}=v(t),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{dv(t)}{dt}=-\\omega_0^2x(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We are now going to solve these equations using first the standard forward Euler method. Later we will try to improve upon this.\n", + "\n", + "\n", + "Before proceeding however, it is important to note that in addition to the exact solution, we have at least two further tests which can be used to check our solution. \n", + "\n", + "Since functions like $cos$ are periodic with a period $2\\pi$, then the solution $x(t)$ has also to be periodic. This means that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x(t+T)=x(t),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $T$ the period defined as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "T=\\frac{2\\pi}{\\omega_0}=\\frac{2\\pi}{\\sqrt{k/m}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Observe that $T$ depends only on $k/m$ and not on the amplitude of the solution. \n", + "\n", + "\n", + "In addition to the periodicity test, the total energy has also to be conserved. \n", + "\n", + "Suppose we choose the initial conditions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x(t=0)=1\\hspace{0.1cm} \\mathrm{m}\\hspace{1cm} v(t=0)=0\\hspace{0.1cm}\\mathrm{m/s},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "meaning that block is at rest at $t=0$ but with a potential energy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "E_0=\\frac{1}{2}kx(t=0)^2=\\frac{1}{2}k.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The total energy at any time $t$ has however to be conserved, meaning that our solution has to fulfil the condition" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "E_0=\\frac{1}{2}kx(t)^2+\\frac{1}{2}mv(t)^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will derive this equation in our discussion on [energy conservation](https://mhjensen.github.io/Physics321/doc/pub/energyconserv/html/energyconserv.html).\n", + "\n", + "\n", + "An algorithm which implements these equations is included below.\n", + " * Choose the initial position and speed, with the most common choice $v(t=0)=0$ and some fixed value for the position. \n", + "\n", + " * Choose the method you wish to employ in solving the problem.\n", + "\n", + " * Subdivide the time interval $[t_i,t_f] $ into a grid with step size" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "h=\\frac{t_f-t_i}{N},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $N$ is the number of mesh points. \n", + " * Calculate now the total energy given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "E_0=\\frac{1}{2}kx(t=0)^2=\\frac{1}{2}k.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Choose ODE solver to obtain $x_{i+1}$ and $v_{i+1}$ starting from the previous values $x_i$ and $v_i$.\n", + "\n", + " * When we have computed $x(v)_{i+1}$ we upgrade $t_{i+1}=t_i+h$.\n", + "\n", + " * This iterative process continues till we reach the maximum time $t_f$.\n", + "\n", + " * The results are checked against the exact solution. Furthermore, one has to check the stability of the numerical solution against the chosen number of mesh points $N$. \n", + "\n", + "The following python program ( code will be added shortly)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#\n", + "# This program solves Newtons equation for a block sliding on\n", + "# an horizontal frictionless surface.\n", + "# The block is tied to the wall with a spring, so N's eq takes the form:\n", + "#\n", + "# m d^2x/dt^2 = - kx\n", + "#\n", + "# In order to make the solution dimless, we set k/m = 1.\n", + "# This results in two coupled diff. eq's that may be written as:\n", + "#\n", + "# dx/dt = v\n", + "# dv/dt = -x\n", + "#\n", + "# The user has to specify the initial velocity and position,\n", + "# and the number of steps. The time interval is fixed to\n", + "# t \\in [0, 4\\pi) (two periods)\n", + "#" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The classical pendulum and scaling the equations\n", + "\n", + "The angular equation of motion of the pendulum is given by\n", + "Newton's equation and with no external force it reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " ml\\frac{d^2\\theta}{dt^2}+mgsin(\\theta)=0,\n", + "\\label{_auto19} \\tag{20}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with an angular velocity and acceleration given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " v=l\\frac{d\\theta}{dt},\n", + "\\label{_auto20} \\tag{21}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " a=l\\frac{d^2\\theta}{dt^2}.\n", + "\\label{_auto21} \\tag{22}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More on the Pendulum\n", + "\n", + "We do however expect that the motion will gradually come to an end due a viscous drag torque acting on the pendulum. \n", + "In the presence of the drag, the above equation becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " ml\\frac{d^2\\theta}{dt^2}+\\nu\\frac{d\\theta}{dt} +mgsin(\\theta)=0, \\label{eq:pend1} \\tag{23}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\nu$ is now a positive constant parameterizing the viscosity\n", + "of the medium in question. In order to maintain the motion against\n", + "viscosity, it is necessary to add some external driving force. \n", + "We choose here a periodic driving force. The last equation becomes then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " ml\\frac{d^2\\theta}{dt^2}+\\nu\\frac{d\\theta}{dt} +mgsin(\\theta)=Asin(\\omega t), \\label{eq:pend2} \\tag{24}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $A$ and $\\omega$ two constants representing the amplitude and \n", + "the angular frequency respectively. The latter is called the driving frequency.\n", + "\n", + "\n", + "\n", + "\n", + "## More on the Pendulum\n", + "\n", + "We define" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\omega_0=\\sqrt{g/l},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "the so-called natural frequency and the new dimensionless quantities" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{t}=\\omega_0t,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with the dimensionless driving frequency" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{\\omega}=\\frac{\\omega}{\\omega_0},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and introducing the quantity $Q$, called the *quality factor*," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "Q=\\frac{mg}{\\omega_0\\nu},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the dimensionless amplitude" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{A}=\\frac{A}{mg}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2\\theta}{d\\hat{t}^2}+\\frac{1}{Q}\\frac{d\\theta}{d\\hat{t}} \n", + " +sin(\\theta)=\\hat{A}cos(\\hat{\\omega}\\hat{t}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This equation can in turn be recast in terms of two coupled first-order differential equations as follows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d\\theta}{d\\hat{t}}=\\hat{v},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d\\hat{v}}{d\\hat{t}}=-\\frac{\\hat{v}}{Q}-sin(\\theta)+\\hat{A}cos(\\hat{\\omega}\\hat{t}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are the equations to be solved. The factor $Q$ represents the number of oscillations of the undriven system that must occur before its energy is significantly reduced due to the viscous drag. The amplitude $\\hat{A}$ is measured in units of the maximum possible gravitational torque while $\\hat{\\omega}$ is the angular frequency of the external torque measured in units of the pendulum's natural frequency." + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/chapter4.ipynb b/doc/src/LectureNotes/testbook/_build/html/_sources/chapter4.ipynb new file mode 100644 index 000000000..923069801 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/chapter4.ipynb @@ -0,0 +1,2409 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Work, Energy, Momentum and Conservation laws\n", + "\n", + "Energy conservation is most convenient as a strategy for addressing\n", + "problems where time does not appear. For example, a particle goes\n", + "from position $x_0$ with speed $v_0$, to position $x_f$; what is its\n", + "new speed? However, it can also be applied to problems where time\n", + "does appear, such as in solving for the trajectory $x(t)$, or\n", + "equivalently $t(x)$.\n", + "\n", + "\n", + "\n", + "## Work and Energy\n", + "\n", + "Material to be added here.\n", + "\n", + "\n", + "\n", + "## Energy Conservation\n", + "Energy is conserved in the case where the potential energy, $V(\\boldsymbol{r})$, depends only on position, and not on time. The force is determined by $V$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\boldsymbol{F}(\\boldsymbol{r})=-\\nabla V(\\boldsymbol{r}).\n", + "\\label{_auto1} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The net energy, $E=V+K$ where $K$ is the kinetic energy, is then conserved," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{d}{dt}(K+V)&=&\\frac{d}{dt}\\left(\\frac{m}{2}(v_x^2+v_y^2+v_z^2)+V(\\boldsymbol{r})\\right)\\\\\n", + "\\nonumber\n", + "&=&m\\left(v_x\\frac{dv_x}{dt}+v_y\\frac{dv_y}{dt}+v_z\\frac{dv_z}{dt}\\right)\n", + "+\\partial_xV\\frac{dx}{dt}+\\partial_yV\\frac{dy}{dt}+\\partial_zV\\frac{dz}{dt}\\\\\n", + "\\nonumber\n", + "&=&v_xF_x+v_yF_y+v_zF_z-F_xv_x-F_yv_y-F_zv_z=0.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The same proof can be written more compactly with vector notation," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{d}{dt}\\left(\\frac{m}{2}v^2+V(\\boldsymbol{r})\\right)\n", + "&=&m\\boldsymbol{v}\\cdot\\dot{\\boldsymbol{v}}+\\nabla V(\\boldsymbol{r})\\cdot\\dot{\\boldsymbol{r}}\\\\\n", + "\\nonumber\n", + "&=&\\boldsymbol{v}\\cdot\\boldsymbol{F}-\\boldsymbol{F}\\cdot\\boldsymbol{v}=0.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inverting the expression for kinetic energy," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v=\\sqrt{2K/m}=\\sqrt{2(E-V)/m},\n", + "\\label{_auto2} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "allows one to solve for the one-dimensional trajectory $x(t)$, by finding $t(x)$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "t=\\int_{x_0}^x \\frac{dx'}{v(x')}=\\int_{x_0}^x\\frac{dx'}{\\sqrt{2(E-V(x'))/m}}.\n", + "\\label{_auto3} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note this would be much more difficult in higher dimensions, because\n", + "you would have to determine which points, $x,y,z$, the particles might\n", + "reach in the trajectory, whereas in one dimension you can typically\n", + "tell by simply seeing whether the kinetic energy is positive at every\n", + "point between the old position and the new position.\n", + "\n", + "\n", + "Consider a simple harmonic oscillator potential, $V(x)=kx^2/2$, with a particle emitted from $x=0$ with velocity $v_0$. Solve for the trajectory $t(x)$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "t&=&\\int_{0}^x \\frac{dx'}{\\sqrt{2(E-kx^2/2)/m}}\\\\\n", + "\\nonumber\n", + "&=&\\sqrt{m/k}\\int_0^x~\\frac{dx'}{\\sqrt{x_{\\rm max}^2-x^{\\prime 2}}},~~~x_{\\rm max}^2=2E/k.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here $E=mv_0^2/2$ and $x_{\\rm max}$ is defined as the maximum\n", + "displacement before the particle turns around. This integral is done\n", + "by the substitution $\\sin\\theta=x/x_{\\rm max}$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "(k/m)^{1/2}t&=&\\sin^{-1}(x/x_{\\rm max}),\\\\\n", + "\\nonumber\n", + "x&=&x_{\\rm max}\\sin\\omega t,~~~\\omega=\\sqrt{k/m}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conservation of Momentum\n", + "\n", + "\n", + "Newton's third law which we met earlier states that **For every action there is an equal and opposite reaction**, is more accurately stated as\n", + "**If two bodies exert forces on each other, these forces are equal in magnitude and opposite in direction**.\n", + "\n", + "This means that for two bodies $i$ and $j$, if the force on $i$ due to $j$ is called $\\boldsymbol{F}_{ij}$, then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\boldsymbol{F}_{ij}=-\\boldsymbol{F}_{ji}. \n", + "\\label{_auto4} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Newton's second law, $\\boldsymbol{F}=m\\boldsymbol{a}$, can be written for a particle $i$ as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\boldsymbol{F}_i=\\sum_{j\\ne i} \\boldsymbol{F}_{ij}=m_i\\boldsymbol{a}_i,\n", + "\\label{_auto5} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\boldsymbol{F}_i$ (a single subscript) denotes the net force acting on $i$. Because the mass of $i$ is fixed, one can see that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\boldsymbol{F}_i=\\frac{d}{dt}m_i\\boldsymbol{v}_i=\\sum_{j\\ne i}\\boldsymbol{F}_{ij}.\n", + "\\label{_auto6} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, one can sum over all the particles and obtain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{d}{dt}\\sum_i m_iv_i&=&\\sum_{ij, i\\ne j}\\boldsymbol{F}_{ij}\\\\\n", + "\\nonumber\n", + "&=&0.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The last step made use of the fact that for every term $ij$, there is\n", + "an equivalent term $ji$ with opposite force. Because the momentum is\n", + "defined as $m\\boldsymbol{v}$, for a system of particles," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d}{dt}\\sum_im_i\\boldsymbol{v}_i=0,~~{\\rm for~isolated~particles}.\n", + "\\label{_auto7} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By \"isolated\" one means that the only force acting on any particle $i$\n", + "are those originating from other particles in the sum, i.e. \"no\n", + "external\" forces. Thus, Newton's third law leads to the conservation\n", + "of total momentum," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\boldsymbol{P}&=&\\sum_i m_i\\boldsymbol{v}_i,\\\\\n", + "\\nonumber\n", + "\\frac{d}{dt}\\boldsymbol{P}&=&0.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Consider the rocket of mass $M$ moving with velocity $v$. After a\n", + "brief instant, the velocity of the rocket is $v+\\Delta v$ and the mass\n", + "is $M-\\Delta M$. Momentum conservation gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "Mv&=&(M-\\Delta M)(v+\\Delta v)+\\Delta M(v-v_e)\\\\\n", + "0&=&-\\Delta Mv+M\\Delta v+\\Delta M(v-v_e),\\\\\n", + "0&=&M\\Delta v-\\Delta Mv_e.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the second step we ignored the term $\\Delta M\\Delta v$ because it is doubly small. The last equation gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\Delta v&=&\\frac{v_e}{M}\\Delta M,\\\\\n", + "\\nonumber\n", + "\\frac{dv}{dt}&=&\\frac{v_e}{M}\\frac{dM}{dt}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Integrating the expression with lower limits $v_0=0$ and $M_0$, one finds" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "v&=&v_e\\int_{M_0}^M \\frac{dM'}{M'}\\\\\n", + "v&=&-v_e\\ln(M/M_0)\\\\\n", + "&=&-v_e\\ln[(M_0-\\alpha t)/M_0].\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because the total momentum of an isolated system is constant, one can\n", + "also quickly see that the center of mass of an isolated system is also\n", + "constant. The center of mass is the average position of a set of\n", + "masses weighted by the mass," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\bar{x}=\\frac{\\sum_im_ix_i}{\\sum_i m_i}.\n", + "\\label{_auto8} \\tag{8}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The rate of change of $\\bar{x}$ is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\dot{\\bar{x}}&=&\\frac{1}{M}\\sum_i m_i\\dot{x}_i=\\frac{1}{M}P_x.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thus if the total momentum is constant the center of mass moves at a\n", + "constant velocity, and if the total momentum is zero the center of\n", + "mass is fixed.\n", + "\n", + "\n", + "\n", + "## Conservation of Angular Momentum\n", + "\n", + "\n", + "Consider a case where the force always points radially," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\boldsymbol{F}(\\boldsymbol{r})=F(r)\\hat{r},\n", + "\\label{_auto9} \\tag{9}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\hat{r}$ is a unit vector pointing outward from the origin. The angular momentum is defined as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\boldsymbol{L}=\\boldsymbol{r}\\times\\boldsymbol{p}=m\\boldsymbol{r}\\times\\boldsymbol{v}.\n", + "\\label{_auto10} \\tag{10}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The rate of change of the angular momentum is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{d\\boldsymbol{L}}{dt}&=&m\\boldsymbol{v}\\times\\boldsymbol{v}+m\\boldsymbol{r}\\times\\dot{\\boldsymbol{v}}\\\\\n", + "\\nonumber\n", + "&=&m\\boldsymbol{v}\\times\\boldsymbol{v}+\\boldsymbol{r}\\times{\\boldsymbol{F}}=0.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first term is zero because $\\boldsymbol{v}$ is parallel to itself, and the\n", + "second term is zero because $\\boldsymbol{F}$ is parallel to $\\boldsymbol{r}$.\n", + "\n", + "As an aside, one can see from the Levi-Civita symbol that the cross\n", + "product of a vector with itself is zero. Here, we consider a vector" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\boldsymbol{V}&=&\\boldsymbol{A}\\times\\boldsymbol{A},\\\\\n", + "\\nonumber\n", + "V_i&=&(\\boldsymbol{A}\\times\\boldsymbol{A})_i=\\sum_{jk}\\epsilon_{ijk}A_jA_k.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For any term $i$, there are two contributions. For example, for $i$\n", + "denoting the $x$ direction, either $j$ denotes the $y$ direction and\n", + "$k$ denotes the $z$ direction, or vice versa, so" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "V_1=\\epsilon_{123}A_2A_3+\\epsilon_{132}A_3A_2.\n", + "\\label{_auto11} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is zero by the antisymmetry of $\\epsilon$ under permutations.\n", + "\n", + "If the force is not radial, $\\boldsymbol{r}\\times\\boldsymbol{F}\\ne 0$ as above, and angular momentum is no longer conserved," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d\\boldsymbol{L}}{dt}=\\boldsymbol{r}\\times\\boldsymbol{F}\\equiv\\boldsymbol{\\tau},\n", + "\\label{_auto12} \\tag{12}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\boldsymbol{\\tau}$ is the torque.\n", + "\n", + "For a system of isolated particles, one can write" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{d}{dt}\\sum_i\\boldsymbol{L}_i&=&\\sum_{i\\ne j}\\boldsymbol{r}_i\\times \\boldsymbol{F}_{ij}\\\\\n", + "\\nonumber\n", + "&=&\\frac{1}{2}\\sum_{i\\ne j} \\boldsymbol{r}_i\\times \\boldsymbol{F}_{ij}+\\boldsymbol{r}_j\\times\\boldsymbol{F}_{ji}\\\\\n", + "\\nonumber\n", + "&=&\\frac{1}{2}\\sum_{i\\ne j} (\\boldsymbol{r}_i-\\boldsymbol{r}_j)\\times\\boldsymbol{F}_{ij}=0,\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the last step used Newton's third law,\n", + "$\\boldsymbol{F}_{ij}=-\\boldsymbol{F}_{ji}$. If the forces between the particles are\n", + "radial, i.e. $\\boldsymbol{F}_{ij} ~||~ (\\boldsymbol{r}_i-\\boldsymbol{r}_j)$, then each term in\n", + "the sum is zero and the net angular momentum is fixed. Otherwise, you\n", + "could imagine an isolated system that would start spinning\n", + "spontaneously.\n", + "\n", + "One can write the torque about a given axis, which we will denote as $\\hat{z}$, in polar coordinates, where" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x&=&r\\sin\\theta\\cos\\phi,~~y=r\\sin\\theta\\cos\\phi,~~z=r\\cos\\theta,\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "to find the $z$ component of the torque," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\tau_z&=&xF_y-yF_x\\\\\n", + "\\nonumber\n", + "&=&-r\\sin\\theta\\left\\{\\cos\\phi \\partial_y-\\sin\\phi \\partial_x\\right\\}V(x,y,z).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One can use the chain rule to write the partial derivative w.r.t. $\\phi$ (keeping $r$ and $\\theta$ fixed)," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\partial_\\phi&=&\\frac{\\partial x}{\\partial\\phi}\\partial_x+\\frac{\\partial_y}{\\partial\\phi}\\partial_y\n", + "+\\frac{\\partial z}{\\partial\\phi}\\partial_z\\\\\n", + "\\nonumber\n", + "&=&-r\\sin\\theta\\sin\\phi\\partial_x+\\sin\\theta\\cos\\phi\\partial_y.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Combining the two equations," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\tau_z&=&-\\partial_\\phi V(r,\\theta,\\phi).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thus, if the potential is independent of the azimuthal angle $\\phi$,\n", + "there is no torque about the $z$ axis and $L_z$ is conserved.\n", + "\n", + "\n", + "\n", + "## Symmetries and Conservation Laws\n", + "\n", + "When we derived the conservation of energy, we assumed that the\n", + "potential depended only on position, not on time. If it depended\n", + "explicitly on time, one can quickly see that the energy would have\n", + "changed at a rate $\\partial_tV(x,y,z,t)$. Note that if there is no\n", + "explicit dependence on time, i.e. $V(x,y,z)$, the potential energy can\n", + "depend on time through the variations of $x,y,z$ with time. However,\n", + "that variation does not lead to energy non-conservation. Further, we\n", + "just saw that if a potential does not depend on the azimuthal angle\n", + "about some axis, $\\phi$, that the angular momentum about that axis is\n", + "conserved.\n", + "\n", + "Now, we relate momentum conservation to translational\n", + "invariance. Considering a system of particles with positions,\n", + "$\\boldsymbol{r}_i$, if one changed the coordinate system by a translation by a\n", + "differential distance $\\boldsymbol{\\epsilon}$, the net potential would change\n", + "by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\delta V(\\boldsymbol{r}_1,\\boldsymbol{r}_2\\cdots)&=&\\sum_i \\boldsymbol{\\epsilon}\\cdot\\nabla_i V(\\boldsymbol{r}_1,\\boldsymbol{r}_2,\\cdots)\\\\\n", + "\\nonumber\n", + "&=&-\\sum_i \\boldsymbol{\\epsilon}\\cdot\\boldsymbol{F}_i\\\\\n", + "\\nonumber\n", + "&=&-\\frac{d}{dt}\\sum_i \\boldsymbol{\\epsilon}\\cdot\\boldsymbol{p}_i.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thus, if the potential is unchanged by a translation of the coordinate\n", + "system, the total momentum is conserved. If the potential is\n", + "translationally invariant in a given direction, defined by a unit\n", + "vector, $\\hat{\\epsilon}$ in the $\\boldsymbol{\\epsilon}$ direction, one can see\n", + "that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\hat{\\epsilon}\\cdot\\nabla_i V(\\boldsymbol{r}_i)&=&0.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The component of the total momentum along that axis is conserved. This\n", + "is rather obvious for a single particle. If $V(\\boldsymbol{r})$ does not\n", + "depend on some coordinate $x$, then the force in the $x$ direction is\n", + "$F_x=-\\partial_xV=0$, and momentum along the $x$ direction is\n", + "constant.\n", + "\n", + "We showed how the total momentum of an isolated system of particle was conserved, even if the particles feel internal forces in all directions. In that case the potential energy could be written" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "V=\\sum_{i,j\\le i}V_{ij}(\\boldsymbol{r}_i-\\boldsymbol{r}_j).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case, a translation leads to $\\boldsymbol{r}_i\\rightarrow\n", + "\\boldsymbol{r}_i+\\boldsymbol{\\epsilon}$, with the translation equally affecting the\n", + "coordinates of each particle. Because the potential depends only on\n", + "the relative coordinates, $\\delta V$ is manifestly zero. If one were\n", + "to go through the exercise of calculating $\\delta V$ for small\n", + "$\\boldsymbol{\\epsilon}$, one would find that the term\n", + "$\\nabla_i V(\\boldsymbol{r}_i-\\boldsymbol{r}_j)$ would be canceled by the term\n", + "$\\nabla_jV(\\boldsymbol{r}_i-\\boldsymbol{r}_j)$.\n", + "\n", + "The relation between symmetries of the potential and conserved\n", + "quantities (also called constants of motion) is one of the most\n", + "profound concepts one should gain from this course. It plays a\n", + "critical role in all fields of physics. This is especially true in\n", + "quantum mechanics, where a quantity $A$ is conserved if its operator\n", + "commutes with the Hamiltonian. For example if the momentum operator\n", + "$-i\\hbar\\partial_x$ commutes with the Hamiltonian, momentum is\n", + "conserved, and clearly this operator commutes if the Hamiltonian\n", + "(which represents the total energy, not just the potential) does not\n", + "depend on $x$. Also in quantum mechanics the angular momentum operator\n", + "is $L_z=-i\\hbar\\partial_\\phi$. In fact, if the potential is unchanged\n", + "by rotations about some axis, angular momentum about that axis is\n", + "conserved. We return to this concept, from a more formal perspective,\n", + "later in the course when Lagrangian mechanics is presented.\n", + "\n", + "\n", + "## Bulding a code for the Earth-Sun system\n", + "\n", + "We will now venture into a study of a system which is energy\n", + "conserving. The aim is to see if we (since it is not possible to solve\n", + "the general equations analytically) we can develop stable numerical\n", + "algorithms whose results we can trust!\n", + "\n", + "We solve the equations of motion numerically. We will also compute\n", + "quantities like the energy numerically.\n", + "\n", + "We start with a simpler case first, the Earth-Sun system in two dimensions only. The gravitational force $F_G$ on the earth from the sun is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_G=-\\frac{GM_{\\odot}M_E}{r^3}\\boldsymbol{r},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $G$ is the gravitational constant," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "M_E=6\\times 10^{24}\\mathrm{Kg},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "the mass of Earth," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "M_{\\odot}=2\\times 10^{30}\\mathrm{Kg},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "the mass of the Sun and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "r=1.5\\times 10^{11}\\mathrm{m},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "is the distance between Earth and the Sun. The latter defines what we call an astronomical unit **AU**.\n", + "From Newton's second law we have then for the $x$ direction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{dt^2}=-\\frac{F_{x}}{M_E},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2y}{dt^2}=-\\frac{F_{y}}{M_E},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for the $y$ direction.\n", + "\n", + "Here we will use that $x=r\\cos{(\\theta)}$, $y=r\\sin{(\\theta)}$ and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "r = \\sqrt{x^2+y^2}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can rewrite" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F_{x}=-\\frac{GM_{\\odot}M_E}{r^2}\\cos{(\\theta)}=-\\frac{GM_{\\odot}M_E}{r^3}x,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F_{y}=-\\frac{GM_{\\odot}M_E}{r^2}\\sin{(\\theta)}=-\\frac{GM_{\\odot}M_E}{r^3}y,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for the $y$ direction.\n", + "\n", + "\n", + "We can rewrite these two equations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F_{x}=-\\frac{GM_{\\odot}M_E}{r^2}\\cos{(\\theta)}=-\\frac{GM_{\\odot}M_E}{r^3}x,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F_{y}=-\\frac{GM_{\\odot}M_E}{r^2}\\sin{(\\theta)}=-\\frac{GM_{\\odot}M_E}{r^3}y,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "as four first-order coupled differential equations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4\n", + "3\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4\n", + "4\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4\n", + "5\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{dy}{dt}=v_y.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Building a code for the solar system, final coupled equations\n", + "\n", + "The four coupled differential equations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4\n", + "7\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4\n", + "8\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4\n", + "9\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{dy}{dt}=v_y,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "can be turned into dimensionless equations or we can introduce astronomical units with $1$ AU = $1.5\\times 10^{11}$. \n", + "\n", + "Using the equations from circular motion (with $r =1\\mathrm{AU}$)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{M_E v^2}{r} = F = \\frac{GM_{\\odot}M_E}{r^2},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "GM_{\\odot}=v^2r,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and using that the velocity of Earth (assuming circular motion) is\n", + "$v = 2\\pi r/\\mathrm{yr}=2\\pi\\mathrm{AU}/\\mathrm{yr}$, we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "GM_{\\odot}= v^2r = 4\\pi^2 \\frac{(\\mathrm{AU})^3}{\\mathrm{yr}^2}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Building a code for the solar system, discretized equations\n", + "\n", + "The four coupled differential equations can then be discretized using Euler's method as (with step length $h$)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5\n", + "4\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5\n", + "5\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5\n", + "6\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_{i+1}=y_i+hv_{y,i},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Code Example with Euler's Method\n", + "\n", + "The code here implements Euler's method for the Earth-Sun system using a more compact way of representing the vectors. Alternatively, you could have spelled out all the variables $v_x$, $v_y$, $x$ and $y$ as one-dimensional arrays." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "# Common imports\n", + "import numpy as np\n", + "import pandas as pd\n", + "from math import *\n", + "import matplotlib.pyplot as plt\n", + "import os\n", + "\n", + "# Where to save the figures and data files\n", + "PROJECT_ROOT_DIR = \"Results\"\n", + "FIGURE_ID = \"Results/FigureFiles\"\n", + "DATA_ID = \"DataFiles/\"\n", + "\n", + "if not os.path.exists(PROJECT_ROOT_DIR):\n", + " os.mkdir(PROJECT_ROOT_DIR)\n", + "\n", + "if not os.path.exists(FIGURE_ID):\n", + " os.makedirs(FIGURE_ID)\n", + "\n", + "if not os.path.exists(DATA_ID):\n", + " os.makedirs(DATA_ID)\n", + "\n", + "def image_path(fig_id):\n", + " return os.path.join(FIGURE_ID, fig_id)\n", + "\n", + "def data_path(dat_id):\n", + " return os.path.join(DATA_ID, dat_id)\n", + "\n", + "def save_fig(fig_id):\n", + " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", + "\n", + "\n", + "DeltaT = 0.001\n", + "#set up arrays \n", + "tfinal = 10 # in years\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, a, v, and x\n", + "t = np.zeros(n)\n", + "v = np.zeros((n,2))\n", + "r = np.zeros((n,2))\n", + "# Initial conditions as compact 2-dimensional arrays\n", + "r0 = np.array([1.0,0.0])\n", + "v0 = np.array([0.0,2*pi])\n", + "r[0] = r0\n", + "v[0] = v0\n", + "Fourpi2 = 4*pi*pi\n", + "# Start integrating using Euler's method\n", + "for i in range(n-1):\n", + " # Set up the acceleration\n", + " # Here you could have defined your own function for this\n", + " rabs = sqrt(sum(r[i]*r[i]))\n", + " a = -Fourpi2*r[i]/(rabs**3)\n", + " # update velocity, time and position using Euler's forward method\n", + " v[i+1] = v[i] + DeltaT*a\n", + " r[i+1] = r[i] + DeltaT*v[i]\n", + " t[i+1] = t[i] + DeltaT\n", + "# Plot position as function of time \n", + "fig, ax = plt.subplots()\n", + "#ax.set_xlim(0, tfinal)\n", + "ax.set_ylabel('x[m]')\n", + "ax.set_xlabel('y[m]')\n", + "ax.plot(r[:,0], r[:,1])\n", + "fig.tight_layout()\n", + "save_fig(\"EarthSunEuler\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Problems with Euler's Method\n", + "\n", + "We notice here that Euler's method doesn't give a stable orbit. It\n", + "means that we cannot trust Euler's method. In a deeper way, as we will\n", + "see in homework 5, Euler's method does not conserve energy. It is an\n", + "example of an integrator which is not\n", + "[symplectic](https://en.wikipedia.org/wiki/Symplectic_integrator).\n", + "\n", + "Here we present thus two methods, which with simple changes allow us to avoid these pitfalls. The simplest possible extension is the so-called Euler-Cromer method.\n", + "The changes we need to make to our code are indeed marginal here.\n", + "We need simply to replace" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + " r[i+1] = r[i] + DeltaT*v[i]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in the above code with the velocity at the new time $t_{i+1}$" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + " r[i+1] = r[i] + DeltaT*v[i+1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By this simple caveat we get stable orbits.\n", + "Below we derive the Euler-Cromer method as well as one of the most utlized algorithms for sovling the above type of problems, the so-called Velocity-Verlet method. \n", + "\n", + "\n", + "## Deriving the Euler-Cromer Method\n", + "\n", + "Let us repeat Euler's method.\n", + "We have a differential equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "y'(t_i)=f(t_i,y_i) \n", + "\\label{_auto13} \\tag{13}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and if we truncate at the first derivative, we have from the Taylor expansion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "y_{i+1}=y(t_i) + (\\Delta t) f(t_i,y_i) + O(\\Delta t^2), \\label{eq:euler} \\tag{14}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which when complemented with $t_{i+1}=t_i+\\Delta t$ forms\n", + "the algorithm for the well-known Euler method. \n", + "Note that at every step we make an approximation error\n", + "of the order of $O(\\Delta t^2)$, however the total error is the sum over all\n", + "steps $N=(b-a)/(\\Delta t)$ for $t\\in [a,b]$, yielding thus a global error which goes like\n", + "$NO(\\Delta t^2)\\approx O(\\Delta t)$. \n", + "\n", + "To make Euler's method more precise we can obviously\n", + "decrease $\\Delta t$ (increase $N$), but this can lead to loss of numerical precision.\n", + "Euler's method is not recommended for precision calculation,\n", + "although it is handy to use in order to get a first\n", + "view on how a solution may look like.\n", + "\n", + "Euler's method is asymmetric in time, since it uses information about the derivative at the beginning\n", + "of the time interval. This means that we evaluate the position at $y_1$ using the velocity\n", + "at $v_0$. A simple variation is to determine $x_{n+1}$ using the velocity at\n", + "$v_{n+1}$, that is (in a slightly more generalized form)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \n", + "y_{n+1}=y_{n}+ v_{n+1}+O(\\Delta t^2)\n", + "\\label{_auto14} \\tag{15}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_{n+1}=v_{n}+(\\Delta t) a_{n}+O(\\Delta t^2).\n", + "\\label{_auto15} \\tag{16}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The acceleration $a_n$ is a function of $a_n(y_n, v_n, t_n)$ and needs to be evaluated\n", + "as well. This is the Euler-Cromer method.\n", + "\n", + "**Exercise**: go back to the above code with Euler's method and add the Euler-Cromer method. \n", + "\n", + "\n", + "\n", + "## Deriving the Velocity-Verlet Method\n", + "\n", + "Let us stay with $x$ (position) and $v$ (velocity) as the quantities we are interested in.\n", + "\n", + "We have the Taylor expansion for the position given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x_{i+1} = x_i+(\\Delta t)v_i+\\frac{(\\Delta t)^2}{2}a_i+O((\\Delta t)^3).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The corresponding expansion for the velocity is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v_{i+1} = v_i+(\\Delta t)a_i+\\frac{(\\Delta t)^2}{2}v^{(2)}_i+O((\\Delta t)^3).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Via Newton's second law we have normally an analytical expression for the derivative of the velocity, namely" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "a_i= \\frac{d^2 x}{dt^2}\\vert_{i}=\\frac{d v}{dt}\\vert_{i}= \\frac{F(x_i,v_i,t_i)}{m}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we add to this the corresponding expansion for the derivative of the velocity" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v^{(1)}_{i+1} = a_{i+1}= a_i+(\\Delta t)v^{(2)}_i+O((\\Delta t)^2)=a_i+(\\Delta t)v^{(2)}_i+O((\\Delta t)^2),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and retain only terms up to the second derivative of the velocity since our error goes as $O(h^3)$, we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "(\\Delta t)v^{(2)}_i\\approx a_{i+1}-a_i.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then rewrite the Taylor expansion for the velocity as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v_{i+1} = v_i+\\frac{(\\Delta t)}{2}\\left( a_{i+1}+a_{i}\\right)+O((\\Delta t)^3).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The velocity Verlet method\n", + "\n", + "Our final equations for the position and the velocity become then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x_{i+1} = x_i+(\\Delta t)v_i+\\frac{(\\Delta t)^2}{2}a_{i}+O((\\Delta t)^3),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v_{i+1} = v_i+\\frac{(\\Delta t)}{2}\\left(a_{i+1}+a_{i}\\right)+O((\\Delta t)^3).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note well that the term $a_{i+1}$ depends on the position at $x_{i+1}$. This means that you need to calculate \n", + "the position at the updated time $t_{i+1}$ before the computing the next velocity. Note also that the derivative of the velocity at the time\n", + "$t_i$ used in the updating of the position can be reused in the calculation of the velocity update as well. \n", + "\n", + "\n", + "\n", + "## Adding the Velocity-Verlet Method\n", + "\n", + "We can now easily add the Verlet method to our original code as" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "DeltaT = 0.01\n", + "#set up arrays \n", + "tfinal = 10\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, a, v, and x\n", + "t = np.zeros(n)\n", + "v = np.zeros((n,2))\n", + "r = np.zeros((n,2))\n", + "# Initial conditions as compact 2-dimensional arrays\n", + "r0 = np.array([1.0,0.0])\n", + "v0 = np.array([0.0,2*pi])\n", + "r[0] = r0\n", + "v[0] = v0\n", + "Fourpi2 = 4*pi*pi\n", + "# Start integrating using the Velocity-Verlet method\n", + "for i in range(n-1):\n", + " # Set up forces, air resistance FD, note now that we need the norm of the vecto\n", + " # Here you could have defined your own function for this\n", + " rabs = sqrt(sum(r[i]*r[i]))\n", + " a = -Fourpi2*r[i]/(rabs**3)\n", + " # update velocity, time and position using the Velocity-Verlet method\n", + " r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a\n", + " rabs = sqrt(sum(r[i+1]*r[i+1]))\n", + " anew = -4*(pi**2)*r[i+1]/(rabs**3)\n", + " v[i+1] = v[i] + 0.5*DeltaT*(a+anew)\n", + " t[i+1] = t[i] + DeltaT\n", + "# Plot position as function of time \n", + "fig, ax = plt.subplots()\n", + "ax.set_ylabel('x[m]')\n", + "ax.set_xlabel('y[m]')\n", + "ax.plot(r[:,0], r[:,1])\n", + "fig.tight_layout()\n", + "save_fig(\"EarthSunVV\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can easily generalize the calculation of the forces by defining a function\n", + "which takes in as input the various variables. We leave this as a challenge to you.\n", + "\n", + "\n", + "## Studying Energy Conservation\n", + "\n", + "In order to study the conservation of energy, we will need to perform\n", + "a numerical integration, unless we can integrate analytically. Here we\n", + "present the Trapezoidal rule as a the simplest possible approximation.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Numerical Integration\n", + "\n", + "It is also useful to consider methods to integrate numerically.\n", + "Let us consider the following case.\n", + "We have classical electron which moves in the $x$-direction along a surface. The force from the surface is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}(x)=-F_0\\sin{(\\frac{2\\pi x}{b})}\\boldsymbol{e}_x.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The constant $b$ represents the distance between atoms at the surface of the material, $F_0$ is a constant and $x$ is the position of the electron.\n", + " Using the work-energy theorem we can find the work $W$ done when moving an electron from a position $x_0$ to a final position $x$ through the\n", + " integral" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "W=-\\int_{x_0}^x \\boldsymbol{F}(x')dx' = \\int_{x_0}^x F_0\\sin{(\\frac{2\\pi x'}{b})} dx',\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which results in" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "W=\\frac{F_0b}{2\\pi}\\left[\\cos{(\\frac{2\\pi x}{b})}-\\cos{(\\frac{2\\pi x_0}{b})}\\right].\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Numerical Integration\n", + "\n", + "There are several numerical algorithms for finding an integral\n", + "numerically. The more familiar ones like the rectangular rule or the\n", + "trapezoidal rule have simple geometric interpretations.\n", + "\n", + "Let us look at the mathematical details of what are called equal-step methods, also known as Newton-Cotes quadrature.\n", + "\n", + "\n", + "## Newton-Cotes Quadrature or equal-step methods\n", + "The integral" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " I=\\int_a^bf(x) dx\n", + "\\label{eq:integraldef} \\tag{17}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "has a very simple meaning. The integral is the\n", + "area enscribed by the function $f(x)$ starting from $x=a$ to $x=b$. It is subdivided in several smaller areas whose evaluation is to be approximated by different techniques. The areas under the curve can for example be approximated by rectangular boxes or trapezoids.\n", + "\n", + "\n", + "\n", + "\n", + "## Basic philosophy of equal-step methods\n", + "In considering equal step methods, our basic approach is that of approximating\n", + "a function $f(x)$ with a polynomial of at most \n", + "degree $N-1$, given $N$ integration points. If our polynomial is of degree $1$,\n", + "the function will be approximated with $f(x)\\approx a_0+a_1x$.\n", + "\n", + "\n", + "\n", + "\n", + "## Simple algorithm for equal step methods\n", + "The algorithm for these integration methods is rather simple, and the number of approximations perhaps unlimited!\n", + "\n", + "* Choose a step size $h=(b-a)/N$ where $N$ is the number of steps and $a$ and $b$ the lower and upper limits of integration.\n", + "\n", + "* With a given step length we rewrite the integral as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^bf(x) dx= \\int_a^{a+h}f(x)dx + \\int_{a+h}^{a+2h}f(x)dx+\\dots \\int_{b-h}^{b}f(x)dx.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* The strategy then is to find a reliable polynomial approximation for $f(x)$ in the various intervals. Choosing a given approximation for $f(x)$, we obtain a specific approximation to the integral.\n", + "\n", + "* With this approximation to $f(x)$ we perform the integration by computing the integrals over all subintervals.\n", + "\n", + "## Simple algorithm for equal step methods\n", + "\n", + "One possible strategy then is to find a reliable polynomial expansion for $f(x)$ in the smaller\n", + "subintervals. Consider for example evaluating" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^{a+2h}f(x)dx,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which we rewrite as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\int_a^{a+2h}f(x)dx=\\int_{x_0-h}^{x_0+h}f(x)dx.\n", + "\\label{eq:hhint} \\tag{18}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have chosen a midpoint $x_0$ and have defined $x_0=a+h$.\n", + "\n", + "\n", + "\n", + "\n", + "## The rectangle method\n", + "\n", + "A very simple approach is the so-called midpoint or rectangle method.\n", + "In this case the integration area is split in a given number of rectangles with length $h$ and height given by the mid-point value of the function. This gives the following simple rule for approximating an integral" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "I=\\int_a^bf(x) dx \\approx h\\sum_{i=1}^N f(x_{i-1/2}), \n", + "\\label{eq:rectangle} \\tag{19}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $f(x_{i-1/2})$ is the midpoint value of $f$ for a given rectangle. We will discuss its truncation \n", + "error below. It is easy to implement this algorithm, as shown below\n", + "\n", + "\n", + "## Truncation error for the rectangular rule\n", + "\n", + "The correct mathematical expression for the local error for the rectangular rule $R_i(h)$ for element $i$ is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_{-h}^hf(x)dx - R_i(h)=-\\frac{h^3}{24}f^{(2)}(\\xi),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the global error reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^bf(x)dx -R_h(f)=-\\frac{b-a}{24}h^2f^{(2)}(\\xi),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $R_h$ is the result obtained with rectangular rule and $\\xi \\in [a,b]$.\n", + "\n", + "\n", + "\n", + "## Codes for the Rectangular rule\n", + "\n", + "We go back to our simple example above and set $F_0=b=1$ and choose $x_0=0$ and $x=1/2$, and have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "W=\\frac{1}{\\pi}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The code here computes the integral using the rectangle rule and $n=100$ integration points we have a relative error of\n", + "$10^{-5}$." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from math import sin, pi\n", + "import numpy as np\n", + "from sympy import Symbol, integrate\n", + "# function for the Rectangular rule \n", + "def Rectangular(a,b,f,n):\n", + " h = (b-a)/float(n)\n", + " s = 0\n", + " for i in range(0,n,1):\n", + " x = (i+0.5)*h\n", + " s = s+ f(x)\n", + " return h*s\n", + "# function to integrate\n", + "def function(x):\n", + " return sin(2*pi*x)\n", + "# define integration limits and integration points \n", + "a = 0.0; b = 0.5;\n", + "n = 100\n", + "Exact = 1./pi\n", + "print(\"Relative error= \", abs( (Rectangular(a,b,function,n)-Exact)/Exact))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The trapezoidal rule\n", + "\n", + "The other integral gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_{x_0-h}^{x_0}f(x)dx=\\frac{h}{2}\\left(f(x_0) + f(x_0-h)\\right)+O(h^3),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and adding up we obtain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " \\int_{x_0-h}^{x_0+h}f(x)dx=\\frac{h}{2}\\left(f(x_0+h) + 2f(x_0) + f(x_0-h)\\right)+O(h^3),\n", + "\\label{eq:trapez} \\tag{20}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which is the well-known trapezoidal rule. Concerning the error in the approximation made,\n", + "$O(h^3)=O((b-a)^3/N^3)$, you should note \n", + "that this is the local error. Since we are splitting the integral from\n", + "$a$ to $b$ in $N$ pieces, we will have to perform approximately $N$ \n", + "such operations.\n", + "\n", + "This means that the *global error* goes like $\\approx O(h^2)$. \n", + "The trapezoidal reads then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " I=\\int_a^bf(x) dx=h\\left(f(a)/2 + f(a+h) +f(a+2h)+\n", + " \\dots +f(b-h)+ f_{b}/2\\right),\n", + "\\label{eq:trapez1} \\tag{21}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with a global error which goes like $O(h^2)$. \n", + "\n", + "Hereafter we use the shorthand notations $f_{-h}=f(x_0-h)$, $f_{0}=f(x_0)$\n", + "and $f_{h}=f(x_0+h)$.\n", + "\n", + "\n", + "## Error in the trapezoidal rule\n", + "\n", + "The correct mathematical expression for the local error for the trapezoidal rule is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^bf(x)dx -\\frac{b-a}{2}\\left[f(a)+f(b)\\right]=-\\frac{h^3}{12}f^{(2)}(\\xi),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the global error reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^bf(x)dx -T_h(f)=-\\frac{b-a}{12}h^2f^{(2)}(\\xi),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $T_h$ is the trapezoidal result and $\\xi \\in [a,b]$.\n", + "\n", + "\n", + "\n", + "## Algorithm for the trapezoidal rule\n", + "The trapezoidal rule is easy to implement numerically \n", + "through the following simple algorithm\n", + "\n", + " * Choose the number of mesh points and fix the step length.\n", + "\n", + " * calculate $f(a)$ and $f(b)$ and multiply with $h/2$.\n", + "\n", + " * Perform a loop over $n=1$ to $n-1$ ($f(a)$ and $f(b)$ are known) and sum up the terms $f(a+h) +f(a+2h)+f(a+3h)+\\dots +f(b-h)$. Each step in the loop corresponds to a given value $a+nh$.\n", + "\n", + " * Multiply the final result by $h$ and add $hf(a)/2$ and $hf(b)/2$.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Trapezoidal Rule\n", + "\n", + "We use the same function and integrate now using the trapoezoidal rule." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from sympy import Symbol, integrate\n", + "# function for the trapezoidal rule\n", + "def Trapez(a,b,f,n):\n", + " h = (b-a)/float(n)\n", + " s = 0\n", + " x = a\n", + " for i in range(1,n,1):\n", + " x = x+h\n", + " s = s+ f(x)\n", + " s = 0.5*(f(a)+f(b)) +s\n", + " return h*s\n", + "# function to integrate\n", + "def function(x):\n", + " return sin(2*pi*x)\n", + "# define integration limits and integration points \n", + "a = 0.0; b = 0.5;\n", + "n = 100\n", + "Exact = 1./pi\n", + "print(\"Relative error= \", abs( (Trapez(a,b,function,n)-Exact)/Exact))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simpsons' rule\n", + "\n", + "Instead of using the above first-order polynomials \n", + "approximations for $f$, we attempt at using a second-order polynomials.\n", + "In this case we need three points in order to define a second-order \n", + "polynomial approximation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "f(x) \\approx P_2(x)=a_0+a_1x+a_2x^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using again Lagrange's interpolation formula we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "P_2(x)=\\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}y_2+\n", + " \\frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}y_1+\n", + " \\frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}y_0.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inserting this formula in the integral of Eq. ([18](#eq:hhint)) we obtain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_{-h}^{+h}f(x)dx=\\frac{h}{3}\\left(f_h + 4f_0 + f_{-h}\\right)+O(h^5),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which is Simpson's rule. \n", + "\n", + "\n", + "\n", + "## Simpson's rule\n", + "Note that the improved accuracy in the evaluation of\n", + "the derivatives gives a better error approximation, $O(h^5)$ vs.\\ $O(h^3)$ .\n", + "But this is again the *local error approximation*. \n", + "Using Simpson's rule we can easily compute\n", + "the integral of Eq. ([17](#eq:integraldef)) to be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " I=\\int_a^bf(x) dx=\\frac{h}{3}\\left(f(a) + 4f(a+h) +2f(a+2h)+\n", + " \\dots +4f(b-h)+ f_{b}\\right),\n", + "\\label{eq:simpson} \\tag{22}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with a global error which goes like $O(h^4)$. \n", + "\n", + "\n", + "\n", + "## Mathematical expressions for the truncation error\n", + "More formal expressions for the local and global errors are for the local error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^bf(x)dx -\\frac{b-a}{6}\\left[f(a)+4f((a+b)/2)+f(b)\\right]=-\\frac{h^5}{90}f^{(4)}(\\xi),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and for the global error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^bf(x)dx -S_h(f)=-\\frac{b-a}{180}h^4f^{(4)}(\\xi).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $\\xi\\in[a,b]$ and $S_h$ the results obtained with Simpson's method.\n", + "\n", + "\n", + "\n", + "## Algorithm for Simpson's rule\n", + "The method \n", + "can easily be implemented numerically through the following simple algorithm\n", + "\n", + " * Choose the number of mesh points and fix the step.\n", + "\n", + " * calculate $f(a)$ and $f(b)$\n", + "\n", + " * Perform a loop over $n=1$ to $n-1$ ($f(a)$ and $f(b)$ are known) and sum up the terms $4f(a+h) +2f(a+2h)+4f(a+3h)+\\dots +4f(b-h)$. Each step in the loop corresponds to a given value $a+nh$. Odd values of $n$ give $4$ as factor while even values yield $2$ as factor.\n", + "\n", + " * Multiply the final result by $\\frac{h}{3}$.\n", + "\n", + "## Code example" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from math import sin, pi\n", + "import numpy as np\n", + "from sympy import Symbol, integrate\n", + "# function for the trapezoidal rule \n", + "def Simpson(a,b,f,n):\n", + " h = (b-a)/float(n)\n", + " sum = f(a)/float(2);\n", + " for i in range(1,n):\n", + " sum = sum + f(a+i*h)*(3+(-1)**(i+1))\n", + " sum = sum + f(b)/float(2)\n", + " return sum*h/3.0\n", + "# function to integrate \n", + "def function(x):\n", + " return sin(2*pi*x)\n", + "# define integration limits and integration points \n", + "a = 0.0; b = 0.5;\n", + "n = 100\n", + "Exact = 1./pi\n", + "print(\"Relative error= \", abs( (Simpson(a,b,function,n)-Exact)/Exact))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that Simpson's rule gives a much better estimation of the relative error with the same amount of points as we had for the Rectangle rule and the Trapezoidal rule." + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/chapter5.ipynb b/doc/src/LectureNotes/testbook/_build/html/_sources/chapter5.ipynb new file mode 100644 index 000000000..f201dab57 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/chapter5.ipynb @@ -0,0 +1,2857 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Harmonic Oscillator\n", + "\n", + "The harmonic oscillator is omnipresent in physics. Although you may think \n", + "of this as being related to springs, it, or an equivalent\n", + "mathematical representation, appears in just about any problem where a\n", + "mode is sitting near its potential energy minimum. At that point,\n", + "$\\partial_x V(x)=0$, and the first non-zero term (aside from a\n", + "constant) in the potential energy is that of a harmonic oscillator. In\n", + "a solid, sound modes (phonons) are built on a picture of coupled\n", + "harmonic oscillators, and in relativistic field theory the fundamental\n", + "interactions are also built on coupled oscillators positioned\n", + "infinitesimally close to one another in space. The phenomena of a\n", + "resonance of an oscillator driven at a fixed frequency plays out\n", + "repeatedly in atomic, nuclear and high-energy physics, when quantum\n", + "mechanically the evolution of a state oscillates according to\n", + "$e^{-iEt}$ and exciting discrete quantum states has very similar\n", + "mathematics as exciting discrete states of an oscillator.\n", + "\n", + "The potential energy for a single particle as a function of its position $x$ can be written as a Taylor expansion about some point $x_0$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "V(x)=V(x_0)+(x-x_0)\\left.\\partial_xV(x)\\right|_{x_0}+\\frac{1}{2}(x-x_0)^2\\left.\\partial_x^2V(x)\\right|_{x_0}\n", + "+\\frac{1}{3!}\\left.\\partial_x^3V(x)\\right|_{x_0}+\\cdots\n", + "\\label{_auto1} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the position $x_0$ is at the minimum of the resonance, the first two non-zero terms of the potential are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "V(x)&\\approx& V(x_0)+\\frac{1}{2}(x-x_0)^2\\left.\\partial_x^2V(x)\\right|_{x_0},\\\\\n", + "\\nonumber\n", + "&=&V(x_0)+\\frac{1}{2}k(x-x_0)^2,~~~~k\\equiv \\left.\\partial_x^2V(x)\\right|_{x_0},\\\\\n", + "\\nonumber\n", + "F&=&-\\partial_xV(x)=-k(x-x_0).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Put into Newton's 2nd law (assuming $x_0=0$)," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "m\\ddot{x}&=&-kx,\\\\\n", + "x&=&A\\cos(\\omega_0 t-\\phi),~~~\\omega_0=\\sqrt{k/m}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here $A$ and $\\phi$ are arbitrary. Equivalently, one could have\n", + "written this as $A\\cos(\\omega_0 t)+B\\sin(\\omega_0 t)$, or as the real\n", + "part of $Ae^{i\\omega_0 t}$. In this last case $A$ could be an\n", + "arbitrary complex constant. Thus, there are 2 arbitrary constants\n", + "(either $A$ and $B$ or $A$ and $\\phi$, or the real and imaginary part\n", + "of one complex constant. This is the expectation for a second order\n", + "differential equation, and also agrees with the physical expectation\n", + "that if you know a particle's initial velocity and position you should\n", + "be able to define its future motion, and that those two arbitrary\n", + "conditions should translate to two arbitrary constants.\n", + "\n", + "A key feature of harmonic motion is that the system repeats itself\n", + "after a time $T=1/f$, where $f$ is the frequency, and $\\omega=2\\pi f$\n", + "is the angular frequency. The period of the motion is independent of\n", + "the amplitude. However, this independence is only exact when one can\n", + "neglect higher terms of the potential, $x^3, x^4\\cdots$. Once can\n", + "neglect these terms for sufficiently small amplitudes, and for larger\n", + "amplitudes the motion is no longer purely sinusoidal, and even though\n", + "the motion repeats itself, the time for repeating the motion is no\n", + "longer independent of the amplitude.\n", + "\n", + "One can also calculate the velocity and the kinetic energy as a function of time," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\dot{x}&=&-\\omega_0A\\sin(\\omega_0 t-\\phi),\\\\\n", + "\\nonumber\n", + "K&=&\\frac{1}{2}m\\dot{x}^2=\\frac{m\\omega_0^2A^2}{2}\\sin^2(\\omega_0t-\\phi),\\\\\n", + "\\nonumber\n", + "&=&\\frac{k}{2}A^2\\sin^2(\\omega_0t-\\phi).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The total energy is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "E=K+V=\\frac{1}{2}m\\dot{x}^2+\\frac{1}{2}kx^2=\\frac{1}{2}kA^2.\n", + "\\label{_auto2} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The total energy then goes as the square of the amplitude.\n", + "\n", + "\n", + "A pendulum is an example of a harmonic oscillator. By expanding the\n", + "kinetic and potential energies for small angles find the frequency for\n", + "a pendulum of length $L$ with all the mass $m$ centered at the end by\n", + "writing the eq.s of motion in the form of a harmonic oscillator.\n", + "\n", + "The potential energy and kinetic energies are (for $x$ being the displacement)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "V&=&mgL(1-\\cos\\theta)\\approx mgL\\frac{x^2}{2L^2},\\\\\n", + "K&=&\\frac{1}{2}mL^2\\dot{\\theta}^2\\approx \\frac{m}{2}\\dot{x}^2.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For small $x$ Newton's 2nd law becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\ddot{x}=-\\frac{mg}{L}x,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the spring constant would appear to be $k=mg/L$, which makes the\n", + "frequency equal to $\\omega_0=\\sqrt{g/L}$. Note that the frequency is\n", + "independent of the mass.\n", + "\n", + "\n", + "## Damped Oscillators\n", + "\n", + "We consider only the case where the damping force is proportional to\n", + "the velocity. This is counter to dragging friction, where the force is\n", + "proportional in strength to the normal force and independent of\n", + "velocity, and is also inconsistent with wind resistance, where the\n", + "magnitude of the drag force is proportional the square of the\n", + "velocity. Rolling resistance does seem to be mainly proportional to\n", + "the velocity. However, the main motivation for considering damping\n", + "forces proportional to the velocity is that the math is more\n", + "friendly. This is because the differential equation is linear,\n", + "i.e. each term is of order $x$, $\\dot{x}$, $\\ddot{x}\\cdots$, or even\n", + "terms with no mention of $x$, and there are no terms such as $x^2$ or\n", + "$x\\ddot{x}$. The equations of motion for a spring with damping force\n", + "$-b\\dot{x}$ are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "m\\ddot{x}+b\\dot{x}+kx=0.\n", + "\\label{_auto3} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just to make the solution a bit less messy, we rewrite this equation as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:dampeddiffyq} \\tag{4}\n", + "\\ddot{x}+2\\beta\\dot{x}+\\omega_0^2x=0,~~~~\\beta\\equiv b/2m,~\\omega_0\\equiv\\sqrt{k/m}.\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Both $\\beta$ and $\\omega$ have dimensions of inverse time. To find solutions (see appendix C in the text) you must make an educated guess at the form of the solution. To do this, first realize that the solution will need an arbitrary normalization $A$ because the equation is linear. Secondly, realize that if the form is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x=Ae^{rt}\n", + "\\label{_auto4} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "that each derivative simply brings out an extra power of $r$. This\n", + "means that the $Ae^{rt}$ factors out and one can simply solve for an\n", + "equation for $r$. Plugging this form into Eq. ([4](#eq:dampeddiffyq))," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "r^2+2\\beta r+\\omega_0^2=0.\n", + "\\label{_auto5} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because this is a quadratic equation there will be two solutions," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "r=-\\beta\\pm\\sqrt{\\beta^2-\\omega_0^2}.\n", + "\\label{_auto6} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We refer to the two solutions as $r_1$ and $r_2$ corresponding to the\n", + "$+$ and $-$ roots. As expected, there should be two arbitrary\n", + "constants involved in the solution," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x=A_1e^{r_1t}+A_2e^{r_2t},\n", + "\\label{_auto7} \\tag{8}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the coefficients $A_1$ and $A_2$ are determined by initial\n", + "conditions.\n", + "\n", + "The roots listed above, $\\sqrt{\\omega_0^2-\\beta_0^2}$, will be\n", + "imaginary if the damping is small and $\\beta<\\omega_0$. In that case,\n", + "$r$ is complex and the factor $e{rt}$ will have some oscillatory\n", + "behavior. If the roots are real, there will only be exponentially\n", + "decaying solutions. There are three cases:\n", + "\n", + "\n", + "\n", + "### Underdamped: $\\beta<\\omega_0$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x&=&A_1e^{-\\beta t}e^{i\\omega't}+A_2e^{-\\beta t}e^{-i\\omega't},~~\\omega'\\equiv\\sqrt{\\omega_0^2-\\beta^2}\\\\\n", + "\\nonumber\n", + "&=&(A_1+A_2)e^{-\\beta t}\\cos\\omega't+i(A_1-A_2)e^{-\\beta t}\\sin\\omega't.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we have made use of the identity\n", + "$e^{i\\omega't}=\\cos\\omega't+i\\sin\\omega't$. Because the constants are\n", + "arbitrary, and because the real and imaginary parts are both solutions\n", + "individually, we can simply consider the real part of the solution\n", + "alone:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:homogsolution} \\tag{9}\n", + "x&=&B_1e^{-\\beta t}\\cos\\omega't+B_2e^{-\\beta t}\\sin\\omega't,\\\\\n", + "\\nonumber \n", + "\\omega'&\\equiv&\\sqrt{\\omega_0^2-\\beta^2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Critical dampling: $\\beta=\\omega_0$\n", + "\n", + "In this case the two terms involving $r_1$ and $r_2$ are identical\n", + "because $\\omega'=0$. Because we need to arbitrary constants, there\n", + "needs to be another solution. This is found by simply guessing, or by\n", + "taking the limit of $\\omega'\\rightarrow 0$ from the underdamped\n", + "solution. The solution is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:criticallydamped} \\tag{10}\n", + "x=Ae^{-\\beta t}+Bte^{-\\beta t}.\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The critically damped solution is interesting because the solution\n", + "approaches zero quickly, but does not oscillate. For a problem with\n", + "zero initial velocity, the solution never crosses zero. This is a good\n", + "choice for designing shock absorbers or swinging doors.\n", + "\n", + "### Overdamped: $\\beta>\\omega_0$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x&=&A_1\\exp{-(\\beta+\\sqrt{\\beta^2-\\omega_0^2})t}+A_2\\exp{-(\\beta-\\sqrt{\\beta^2-\\omega_0^2})t}\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This solution will also never pass the origin more than once, and then\n", + "only if the initial velocity is strong and initially toward zero.\n", + "\n", + "\n", + "\n", + "\n", + "Given $b$, $m$ and $\\omega_0$, find $x(t)$ for a particle whose\n", + "initial position is $x=0$ and has initial velocity $v_0$ (assuming an\n", + "underdamped solution).\n", + "\n", + "The solution is of the form," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "x&=&e^{-\\beta t}\\left[A_1\\cos(\\omega' t)+A_2\\sin\\omega't\\right],\\\\\n", + "\\dot{x}&=&-\\beta x+\\omega'e^{-\\beta t}\\left[-A_1\\sin\\omega't+A_2\\cos\\omega't\\right].\\\\\n", + "\\omega'&\\equiv&\\sqrt{\\omega_0^2-\\beta^2},~~~\\beta\\equiv b/2m.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the initial conditions, $A_1=0$ because $x(0)=0$ and $\\omega'A_2=v_0$. So" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x=\\frac{v_0}{\\omega'}e^{-\\beta t}\\sin\\omega't.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Our Sliding Block Code\n", + "Here we study first the case without additional friction term and scale our equation\n", + "in terms of a dimensionless time $\\tau$.\n", + "\n", + "Let us remind ourselves about the differential equation we want to solve (the general case with damping due to friction)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\frac{d^2x}{dt^2} + b\\frac{dx}{dt}+kx(t) =0.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We divide by $m$ and introduce $\\omega_0^2=\\sqrt{k/m}$ and obtain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{dt^2} + \\frac{b}{m}\\frac{dx}{dt}+\\omega_0^2x(t) =0.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thereafter we introduce a dimensionless time $\\tau = t\\omega_0$ (check\n", + "that the dimensionality is correct) and rewrite our equation as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{d\\tau^2} + \\frac{b}{m\\omega_0}\\frac{dx}{d\\tau}+x(\\tau) =0,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which gives us" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{d\\tau^2} + \\frac{b}{m\\omega_0}\\frac{dx}{d\\tau}+x(\\tau) =0.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We then define $\\gamma = b/(2m\\omega_0)$ and rewrite our equations as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{d\\tau^2} + 2\\gamma\\frac{dx}{d\\tau}+x(\\tau) =0.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the equation we will code below. The first version employs the Euler-Cromer method." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "# Common imports\n", + "import numpy as np\n", + "import pandas as pd\n", + "from math import *\n", + "import matplotlib.pyplot as plt\n", + "import os\n", + "\n", + "# Where to save the figures and data files\n", + "PROJECT_ROOT_DIR = \"Results\"\n", + "FIGURE_ID = \"Results/FigureFiles\"\n", + "DATA_ID = \"DataFiles/\"\n", + "\n", + "if not os.path.exists(PROJECT_ROOT_DIR):\n", + " os.mkdir(PROJECT_ROOT_DIR)\n", + "\n", + "if not os.path.exists(FIGURE_ID):\n", + " os.makedirs(FIGURE_ID)\n", + "\n", + "if not os.path.exists(DATA_ID):\n", + " os.makedirs(DATA_ID)\n", + "\n", + "def image_path(fig_id):\n", + " return os.path.join(FIGURE_ID, fig_id)\n", + "\n", + "def data_path(dat_id):\n", + " return os.path.join(DATA_ID, dat_id)\n", + "\n", + "def save_fig(fig_id):\n", + " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", + "\n", + "\n", + "from pylab import plt, mpl\n", + "plt.style.use('seaborn')\n", + "mpl.rcParams['font.family'] = 'serif'\n", + "\n", + "DeltaT = 0.001\n", + "#set up arrays \n", + "tfinal = 20 # in years\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, v, and x\n", + "t = np.zeros(n)\n", + "v = np.zeros(n)\n", + "x = np.zeros(n)\n", + "# Initial conditions as simple one-dimensional arrays of time\n", + "x0 = 1.0 \n", + "v0 = 0.0\n", + "x[0] = x0\n", + "v[0] = v0\n", + "gamma = 0.0\n", + "# Start integrating using Euler-Cromer's method\n", + "for i in range(n-1):\n", + " # Set up the acceleration\n", + " # Here you could have defined your own function for this\n", + " a = -2*gamma*v[i]-x[i]\n", + " # update velocity, time and position\n", + " v[i+1] = v[i] + DeltaT*a\n", + " x[i+1] = x[i] + DeltaT*v[i+1]\n", + " t[i+1] = t[i] + DeltaT\n", + "# Plot position as function of time \n", + "fig, ax = plt.subplots()\n", + "#ax.set_xlim(0, tfinal)\n", + "ax.set_ylabel('x[m]')\n", + "ax.set_xlabel('t[s]')\n", + "ax.plot(t, x)\n", + "fig.tight_layout()\n", + "save_fig(\"BlockEulerCromer\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When setting up the value of $\\gamma$ we see that for $\\gamma=0$ we get the simple oscillatory motion with no damping.\n", + "Choosing $\\gamma < 1$ leads to the classical underdamped case with oscillatory motion, but where the motion comes to an end.\n", + "\n", + "Choosing $\\gamma =1$ leads to what normally is called critical damping and $\\gamma> 1$ leads to critical overdamping.\n", + "Try it out and try also to change the initial position and velocity. Setting $\\gamma=1$\n", + "yields a situation, as discussed above, where the solution approaches quickly zero and does not oscillate. With zero initial velocity it will never cross zero. \n", + "\n", + "\n", + "## Sinusoidally Driven Oscillators\n", + "\n", + "Here, we consider the force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F=-kx-b\\dot{x}+F_0\\cos\\omega t,\n", + "\\label{_auto8} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which leads to the differential equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:drivenosc} \\tag{12}\n", + "\\ddot{x}+2\\beta\\dot{x}+\\omega_0^2x=(F_0/m)\\cos\\omega t.\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Consider a single solution with no arbitrary constants, which we will\n", + "call a {\\it particular solution}, $x_p(t)$. It should be emphasized\n", + "that this is {\\bf A} particular solution, because there exists an\n", + "infinite number of such solutions because the general solution should\n", + "have two arbitrary constants. Now consider solutions to the same\n", + "equation without the driving term, which include two arbitrary\n", + "constants. These are called either {\\it homogenous solutions} or {\\it\n", + "complementary solutions}, and were given in the previous section,\n", + "e.g. Eq. ([9](#eq:homogsolution)) for the underdamped case. The\n", + "homogenous solution already incorporates the two arbitrary constants,\n", + "so any sum of a homogenous solution and a particular solution will\n", + "represent the {\\it general solution} of the equation. The general\n", + "solution incorporates the two arbitrary constants $A$ and $B$ to\n", + "accommodate the two initial conditions. One could have picked a\n", + "different particular solution, i.e. the original particular solution\n", + "plus any homogenous solution with the arbitrary constants $A_p$ and\n", + "$B_p$ chosen at will. When one adds in the homogenous solution, which\n", + "has adjustable constants with arbitrary constants $A'$ and $B'$, to\n", + "the new particular solution, one can get the same general solution by\n", + "simply adjusting the new constants such that $A'+A_p=A$ and\n", + "$B'+B_p=B$. Thus, the choice of $A_p$ and $B_p$ are irrelevant, and\n", + "when choosing the particular solution it is best to make the simplest\n", + "choice possible.\n", + "\n", + "To find a particular solution, one first guesses at the form," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:partform} \\tag{13}\n", + "x_p(t)=D\\cos(\\omega t-\\delta),\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and rewrite the differential equation as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "D\\left\\{-\\omega^2\\cos(\\omega t-\\delta)-2\\beta\\omega\\sin(\\omega t-\\delta)+\\omega_0^2\\cos(\\omega t-\\delta)\\right\\}=\\frac{F_0}{m}\\cos(\\omega t).\n", + "\\label{_auto9} \\tag{14}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One can now use angle addition formulas to get" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "D\\left\\{(-\\omega^2\\cos\\delta+2\\beta\\omega\\sin\\delta+\\omega_0^2\\cos\\delta)\\cos(\\omega t)\\right.&&\\\\\n", + "\\nonumber\n", + "\\left.+(-\\omega^2\\sin\\delta-2\\beta\\omega\\cos\\delta+\\omega_0^2\\sin\\delta)\\sin(\\omega t)\\right\\}\n", + "&=&\\frac{F_0}{m}\\cos(\\omega t).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Both the $\\cos$ and $\\sin$ terms need to equate if the expression is to hold at all times. Thus, this becomes two equations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "D\\left\\{-\\omega^2\\cos\\delta+2\\beta\\omega\\sin\\delta+\\omega_0^2\\cos\\delta\\right\\}&=&\\frac{F_0}{m}\\\\\n", + "\\nonumber\n", + "-\\omega^2\\sin\\delta-2\\beta\\omega\\cos\\delta+\\omega_0^2\\sin\\delta&=&0.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After dividing by $\\cos\\delta$, the lower expression leads to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\tan\\delta=\\frac{2\\beta\\omega}{\\omega_0^2-\\omega^2}.\n", + "\\label{_auto10} \\tag{15}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the identities $\\tan^2+1=\\csc^2$ and $\\sin^2+\\cos^2=1$, one can also express $\\sin\\delta$ and $\\cos\\delta$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\sin\\delta&=&\\frac{2\\beta\\omega}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\omega^2\\beta^2}},\\\\\n", + "\\nonumber\n", + "\\cos\\delta&=&\\frac{(\\omega_0^2-\\omega^2)}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\omega^2\\beta^2}}\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inserting the expressions for $\\cos\\delta$ and $\\sin\\delta$ into the expression for $D$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:Ddrive} \\tag{16}\n", + "D=\\frac{F_0/m}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\omega^2\\beta^2}}.\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a given initial condition, e.g. initial displacement and velocity,\n", + "one must add the homogenous solution then solve for the two arbitrary\n", + "constants. However, because the homogenous solutions decay with time\n", + "as $e^{-\\beta t}$, the particular solution is all that remains at\n", + "large times, and is therefore the steady state solution. Because the\n", + "arbitrary constants are all in the homogenous solution, all memory of\n", + "the initial conditions are lost at large times, $t>>1/\\beta$.\n", + "\n", + "The amplitude of the motion, $D$, is linearly proportional to the\n", + "driving force ($F_0/m$), but also depends on the driving frequency\n", + "$\\omega$. For small $\\beta$ the maximum will occur at\n", + "$\\omega=\\omega_0$. This is referred to as a resonance. In the limit\n", + "$\\beta\\rightarrow 0$ the amplitude at resonance approaches infinity.\n", + "\n", + "\n", + "## Alternative Derivation for Driven Oscillators\n", + "\n", + "Here, we derive the same expressions as in Equations ([13](#eq:partform)) and ([16](#eq:Ddrive)) but express the driving forces as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "F(t)&=&F_0e^{i\\omega t},\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "rather than as $F_0\\cos\\omega t$. The real part of $F$ is the same as before. For the differential equation," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:compdrive} \\tag{17}\n", + "\\ddot{x}+2\\beta\\dot{x}+\\omega_0^2x&=&\\frac{F_0}{m}e^{i\\omega t},\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "one can treat $x(t)$ as an imaginary function. Because the operations\n", + "$d^2/dt^2$ and $d/dt$ are real and thus do not mix the real and\n", + "imaginary parts of $x(t)$, Eq. ([17](#eq:compdrive)) is effectively 2\n", + "equations. Because $e^{\\omega t}=\\cos\\omega t+i\\sin\\omega t$, the real\n", + "part of the solution for $x(t)$ gives the solution for a driving force\n", + "$F_0\\cos\\omega t$, and the imaginary part of $x$ corresponds to the\n", + "case where the driving force is $F_0\\sin\\omega t$. It is rather easy\n", + "to solve for the complex $x$ in this case, and by taking the real part\n", + "of the solution, one finds the answer for the $\\cos\\omega t$ driving\n", + "force.\n", + "\n", + "We assume a simple form for the particular solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x_p=De^{i\\omega t},\n", + "\\label{_auto11} \\tag{18}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $D$ is a complex constant.\n", + "\n", + "From Eq. ([17](#eq:compdrive)) one inserts the form for $x_p$ above to get" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "D\\left\\{-\\omega^2+2i\\beta\\omega+\\omega_0^2\\right\\}e^{i\\omega t}=(F_0/m)e^{i\\omega t},\\\\\n", + "\\nonumber\n", + "D=\\frac{F_0/m}{(\\omega_0^2-\\omega^2)+2i\\beta\\omega}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The norm and phase for $D=|D|e^{-i\\delta}$ can be read by inspection," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "|D|=\\frac{F_0/m}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\beta^2\\omega^2}},~~~~\\tan\\delta=\\frac{2\\beta\\omega}{\\omega_0^2-\\omega^2}.\n", + "\\label{_auto12} \\tag{19}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the same expression for $\\delta$ as before. One then finds $x_p(t)$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:fastdriven1} \\tag{20}\n", + "x_p(t)&=&\\Re\\frac{(F_0/m)e^{i\\omega t-i\\delta}}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\beta^2\\omega^2}}\\\\\n", + "\\nonumber\n", + "&=&\\frac{(F_0/m)\\cos(\\omega t-\\delta)}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\beta^2\\omega^2}}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the same answer as before.\n", + "If one wished to solve for the case where $F(t)= F_0\\sin\\omega t$, the imaginary part of the solution would work" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:fastdriven2} \\tag{21}\n", + "x_p(t)&=&\\Im\\frac{(F_0/m)e^{i\\omega t-i\\delta}}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\beta^2\\omega^2}}\\\\\n", + "\\nonumber\n", + "&=&\\frac{(F_0/m)\\sin(\\omega t-\\delta)}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\beta^2\\omega^2}}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Consider the damped and driven harmonic oscillator worked out above. Given $F_0, m,\\beta$ and $\\omega_0$, solve for the complete solution $x(t)$ for the case where $F=F_0\\sin\\omega t$ with initial conditions $x(t=0)=0$ and $v(t=0)=0$. Assume the underdamped case.\n", + "\n", + "The general solution including the arbitrary constants includes both the homogenous and particular solutions," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "x(t)&=&\\frac{F_0}{m}\\frac{\\sin(\\omega t-\\delta)}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\beta^2\\omega^2}}\n", + "+A\\cos\\omega't e^{-\\beta t}+B\\sin\\omega't e^{-\\beta t}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The quantities $\\delta$ and $\\omega'$ are given earlier in the\n", + "section, $\\omega'=\\sqrt{\\omega_0^2-\\beta^2},\n", + "\\delta=\\tan^{-1}(2\\beta\\omega/(\\omega_0^2-\\omega^2)$. Here, solving\n", + "the problem means finding the arbitrary constants $A$ and\n", + "$B$. Satisfying the initial conditions for the initial position and\n", + "velocity:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "x(t=0)=0&=&-\\eta\\sin\\delta+A,\\\\\n", + "v(t=0)=0&=&\\omega\\eta\\cos\\delta-\\beta A+\\omega'B,\\\\\n", + "\\eta&\\equiv&\\frac{F_0}{m}\\frac{1}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\beta^2\\omega^2}}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The problem is now reduced to 2 equations and 2 unknowns, $A$ and $B$. The solution is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "A&=& \\eta\\sin\\delta ,~~~B=\\frac{-\\omega\\eta\\cos\\delta+\\beta\\eta\\sin\\delta}{\\omega'}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Resonance Widths; the $Q$ factor\n", + "\n", + "From the previous two sections, the particular solution for a driving force, $F=F_0\\cos\\omega t$, is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x_p(t)&=&\\frac{F_0/m}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\omega^2\\beta^2}}\\cos(\\omega_t-\\delta),\\\\\n", + "\\nonumber\n", + "\\delta&=&\\tan^{-1}\\left(\\frac{2\\beta\\omega}{\\omega_0^2-\\omega^2}\\right).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If one fixes the driving frequency $\\omega$ and adjusts the\n", + "fundamental frequency $\\omega_0=\\sqrt{k/m}$, the maximum amplitude\n", + "occurs when $\\omega_0=\\omega$ because that is when the term from the\n", + "denominator $(\\omega_0^2-\\omega^2)^2+4\\omega^2\\beta^2$ is at a\n", + "minimum. This is akin to dialing into a radio station. However, if one\n", + "fixes $\\omega_0$ and adjusts the driving frequency one minimize with\n", + "respect to $\\omega$, e.g. set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d}{d\\omega}\\left[(\\omega_0^2-\\omega^2)^2+4\\omega^2\\beta^2\\right]=0,\n", + "\\label{_auto13} \\tag{22}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and one finds that the maximum amplitude occurs when\n", + "$\\omega=\\sqrt{\\omega_0^2-2\\beta^2}$. If $\\beta$ is small relative to\n", + "$\\omega_0$, one can simply state that the maximum amplitude is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x_{\\rm max}\\approx\\frac{F_0}{2m\\beta \\omega_0}.\n", + "\\label{_auto14} \\tag{23}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{4\\omega^2\\beta^2}{(\\omega_0^2-\\omega^2)^2+4\\omega^2\\beta^2}=\\frac{1}{2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For small damping this occurs when $\\omega=\\omega_0\\pm \\beta$, so the $FWHM\\approx 2\\beta$. For the purposes of tuning to a specific frequency, one wants the width to be as small as possible. The ratio of $\\omega_0$ to $FWHM$ is known as the {\\it quality} factor, or $Q$ factor," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "Q\\equiv \\frac{\\omega_0}{2\\beta}.\n", + "\\label{_auto15} \\tag{24}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Numerical Studies of Driven Oscillations\n", + "\n", + "Solving the problem of driven oscillations numerically gives us much\n", + "more flexibility to study different types of driving forces. We can\n", + "reuse our earlier code by simply adding a driving force. If we stay in\n", + "the $x$-direction only this can be easily done by adding a term\n", + "$F_{\\mathrm{ext}}(x,t)$. Note that we have kept it rather general\n", + "here, allowing for both a spatial and a temporal dependence.\n", + "\n", + "Before we dive into the code, we need to briefly remind ourselves\n", + "about the equations we started with for the case with damping, namely" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\frac{d^2x}{dt^2} + b\\frac{dx}{dt}+kx(t) =0,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with no external force applied to the system.\n", + "\n", + "Let us now for simplicty assume that our external force is given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F_{\\mathrm{ext}}(t) = F_0\\cos{(\\omega t)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $F_0$ is a constant (what is its dimension?) and $\\omega$ is the frequency of the applied external driving force.\n", + "**Small question:** would you expect energy to be conserved now?\n", + "\n", + "\n", + "Introducing the external force into our lovely differential equation\n", + "and dividing by $m$ and introducing $\\omega_0^2=\\sqrt{k/m}$ we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{dt^2} + \\frac{b}{m}\\frac{dx}{dt}+\\omega_0^2x(t) =\\frac{F_0}{m}\\cos{(\\omega t)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thereafter we introduce a dimensionless time $\\tau = t\\omega_0$\n", + "and a dimensionless frequency $\\tilde{\\omega}=\\omega/\\omega_0$. We have then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{d\\tau^2} + \\frac{b}{m\\omega_0}\\frac{dx}{d\\tau}+x(\\tau) =\\frac{F_0}{m\\omega_0^2}\\cos{(\\tilde{\\omega}\\tau)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Introducing a new amplitude $\\tilde{F} =F_0/(m\\omega_0^2)$ (check dimensionality again) we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{d\\tau^2} + \\frac{b}{m\\omega_0}\\frac{dx}{d\\tau}+x(\\tau) =\\tilde{F}\\cos{(\\tilde{\\omega}\\tau)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our final step, as we did in the case of various types of damping, is\n", + "to define $\\gamma = b/(2m\\omega_0)$ and rewrite our equations as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{d\\tau^2} + 2\\gamma\\frac{dx}{d\\tau}+x(\\tau) =\\tilde{F}\\cos{(\\tilde{\\omega}\\tau)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the equation we will code below using the Euler-Cromer method." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "DeltaT = 0.001\n", + "#set up arrays \n", + "tfinal = 20 # in years\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, v, and x\n", + "t = np.zeros(n)\n", + "v = np.zeros(n)\n", + "x = np.zeros(n)\n", + "# Initial conditions as one-dimensional arrays of time\n", + "x0 = 1.0 \n", + "v0 = 0.0\n", + "x[0] = x0\n", + "v[0] = v0\n", + "gamma = 0.2\n", + "Omegatilde = 0.5\n", + "Ftilde = 1.0\n", + "# Start integrating using Euler-Cromer's method\n", + "for i in range(n-1):\n", + " # Set up the acceleration\n", + " # Here you could have defined your own function for this\n", + " a = -2*gamma*v[i]-x[i]+Ftilde*cos(t[i]*Omegatilde)\n", + " # update velocity, time and position\n", + " v[i+1] = v[i] + DeltaT*a\n", + " x[i+1] = x[i] + DeltaT*v[i+1]\n", + " t[i+1] = t[i] + DeltaT\n", + "# Plot position as function of time \n", + "fig, ax = plt.subplots()\n", + "ax.set_ylabel('x[m]')\n", + "ax.set_xlabel('t[s]')\n", + "ax.plot(t, x)\n", + "fig.tight_layout()\n", + "save_fig(\"ForcedBlockEulerCromer\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the above example we have focused on the Euler-Cromer method. This\n", + "method has a local truncation error which is proportional to $\\Delta t^2$\n", + "and thereby a global error which is proportional to $\\Delta t$.\n", + "We can improve this by using the Runge-Kutta family of\n", + "methods. The widely popular Runge-Kutta to fourth order or just **RK4**\n", + "has indeed a much better truncation error. The RK4 method has a global\n", + "error which is proportional to $\\Delta t$.\n", + "\n", + "Let us revisit this method and see how we can implement it for the above example.\n", + "\n", + "\n", + "\n", + "## Differential Equations, Runge-Kutta methods\n", + "\n", + "Runge-Kutta (RK) methods are based on Taylor expansion formulae, but yield\n", + "in general better algorithms for solutions of an ordinary differential equation.\n", + "The basic philosophy is that it provides an intermediate step in the computation of $y_{i+1}$.\n", + "\n", + "To see this, consider first the following definitions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{dy}{dt}=f(t,y), \n", + "\\label{_auto16} \\tag{25}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "y(t)=\\int f(t,y) dt, \n", + "\\label{_auto17} \\tag{26}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "y_{i+1}=y_i+ \\int_{t_i}^{t_{i+1}} f(t,y) dt.\n", + "\\label{_auto18} \\tag{27}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To demonstrate the philosophy behind RK methods, let us consider\n", + "the second-order RK method, RK2.\n", + "The first approximation consists in Taylor expanding $f(t,y)$\n", + "around the center of the integration interval $t_i$ to $t_{i+1}$,\n", + "that is, at $t_i+h/2$, $h$ being the step.\n", + "Using the midpoint formula for an integral, \n", + "defining $y(t_i+h/2) = y_{i+1/2}$ and \n", + "$t_i+h/2 = t_{i+1/2}$, we obtain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\int_{t_i}^{t_{i+1}} f(t,y) dt \\approx hf(t_{i+1/2},y_{i+1/2}) +O(h^3).\n", + "\\label{_auto19} \\tag{28}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This means in turn that we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "y_{i+1}=y_i + hf(t_{i+1/2},y_{i+1/2}) +O(h^3).\n", + "\\label{_auto20} \\tag{29}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, we do not know the value of $y_{i+1/2}$. Here comes thus the next approximation, namely, we use Euler's\n", + "method to approximate $y_{i+1/2}$. We have then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "y_{(i+1/2)}=y_i + \\frac{h}{2}\\frac{dy}{dt}=y(t_i) + \\frac{h}{2}f(t_i,y_i).\n", + "\\label{_auto21} \\tag{30}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This means that we can define the following algorithm for \n", + "the second-order Runge-Kutta method, RK2." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "6\n", + "0\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "k_2=hf(t_{i+1/2},y_i+k_1/2),\n", + "\\label{_auto23} \\tag{32}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with the final value" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \n", + "y_{i+i}\\approx y_i + k_2 +O(h^3). \n", + "\\label{_auto24} \\tag{33}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The difference between the previous one-step methods \n", + "is that we now need an intermediate step in our evaluation,\n", + "namely $t_i+h/2 = t_{(i+1/2)}$ where we evaluate the derivative $f$. \n", + "This involves more operations, but the gain is a better stability\n", + "in the solution.\n", + "\n", + "The fourth-order Runge-Kutta, RK4, has the following algorithm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "6\n", + "3\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "k_3=hf(t_i+h/2,y_i+k_2/2)\\hspace{0.5cm} k_4=hf(t_i+h,y_i+k_3)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with the final result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_{i+1}=y_i +\\frac{1}{6}\\left( k_1 +2k_2+2k_3+k_4\\right).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thus, the algorithm consists in first calculating $k_1$ \n", + "with $t_i$, $y_1$ and $f$ as inputs. Thereafter, we increase the step\n", + "size by $h/2$ and calculate $k_2$, then $k_3$ and finally $k_4$. The global error goes as $O(h^4)$.\n", + "\n", + "\n", + "However, at this stage, if we keep adding different methods in our\n", + "main program, the code will quickly become messy and ugly. Before we\n", + "proceed thus, we will now introduce functions that enbody the various\n", + "methods for solving differential equations. This means that we can\n", + "separate out these methods in own functions and files (and later as classes and more\n", + "generic functions) and simply call them when needed. Similarly, we\n", + "could easily encapsulate various forces or other quantities of\n", + "interest in terms of functions. To see this, let us bring up the code\n", + "we developed above for the simple sliding block, but now only with the simple forward Euler method. We introduce\n", + "two functions, one for the simple Euler method and one for the\n", + "force.\n", + "\n", + "Note that here the forward Euler method does not know the specific force function to be called.\n", + "It receives just an input the name. We can easily change the force by adding another function." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def ForwardEuler(v,x,t,n,Force):\n", + " for i in range(n-1):\n", + " v[i+1] = v[i] + DeltaT*Force(v[i],x[i],t[i])\n", + " x[i+1] = x[i] + DeltaT*v[i]\n", + " t[i+1] = t[i] + DeltaT" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def SpringForce(v,x,t):\n", + "# note here that we have divided by mass and we return the acceleration\n", + " return -2*gamma*v-x+Ftilde*cos(t*Omegatilde)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is easy to add a new method like the Euler-Cromer" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def ForwardEulerCromer(v,x,t,n,Force):\n", + " for i in range(n-1):\n", + " a = Force(v[i],x[i],t[i])\n", + " v[i+1] = v[i] + DeltaT*a\n", + " x[i+1] = x[i] + DeltaT*v[i+1]\n", + " t[i+1] = t[i] + DeltaT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the Velocity Verlet method (be careful with time-dependence here, it is not an ideal method for non-conservative forces))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def VelocityVerlet(v,x,t,n,Force):\n", + " for i in range(n-1):\n", + " a = Force(v[i],x[i],t[i])\n", + " x[i+1] = x[i] + DeltaT*v[i]+0.5*a\n", + " anew = Force(v[i],x[i+1],t[i+1])\n", + " v[i+1] = v[i] + 0.5*DeltaT*(a+anew)\n", + " t[i+1] = t[i] + DeltaT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we can now add the Runge-Kutta2 method via a new function" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def RK2(v,x,t,n,Force):\n", + " for i in range(n-1):\n", + "# Setting up k1\n", + " k1x = DeltaT*v[i]\n", + " k1v = DeltaT*Force(v[i],x[i],t[i])\n", + "# Setting up k2\n", + " vv = v[i]+k1v*0.5\n", + " xx = x[i]+k1x*0.5\n", + " k2x = DeltaT*vv\n", + " k2v = DeltaT*Force(vv,xx,t[i]+DeltaT*0.5)\n", + "# Final result\n", + " x[i+1] = x[i]+k2x\n", + " v[i+1] = v[i]+k2v\n", + "\tt[i+1] = t[i]+DeltaT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we can now add the Runge-Kutta2 method via a new function" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def RK4(v,x,t,n,Force):\n", + " for i in range(n-1):\n", + "# Setting up k1\n", + " k1x = DeltaT*v[i]\n", + " k1v = DeltaT*Force(v[i],x[i],t[i])\n", + "# Setting up k2\n", + " vv = v[i]+k1v*0.5\n", + " xx = x[i]+k1x*0.5\n", + " k2x = DeltaT*vv\n", + " k2v = DeltaT*Force(vv,xx,t[i]+DeltaT*0.5)\n", + "# Setting up k3\n", + " vv = v[i]+k2v*0.5\n", + " xx = x[i]+k2x*0.5\n", + " k3x = DeltaT*vv\n", + " k3v = DeltaT*Force(vv,xx,t[i]+DeltaT*0.5)\n", + "# Setting up k4\n", + " vv = v[i]+k3v\n", + " xx = x[i]+k3x\n", + " k4x = DeltaT*vv\n", + " k4v = DeltaT*Force(vv,xx,t[i]+DeltaT)\n", + "# Final result\n", + " x[i+1] = x[i]+(k1x+2*k2x+2*k3x+k4x)/6.\n", + " v[i+1] = v[i]+(k1v+2*k2v+2*k3v+k4v)/6.\n", + " t[i+1] = t[i] + DeltaT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Runge-Kutta family of methods are particularly useful when we have a time-dependent acceleration.\n", + "If we have forces which depend only the spatial degrees of freedom (no velocity and/or time-dependence), then energy conserving methods like the Velocity Verlet or the Euler-Cromer method are preferred. As soon as we introduce an explicit time-dependence and/or add dissipitave forces like friction or air resistance, then methods like the family of Runge-Kutta methods are well suited for this. \n", + "The code below uses the Runge-Kutta4 methods." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "DeltaT = 0.001\n", + "#set up arrays \n", + "tfinal = 20 # in years\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, v, and x\n", + "t = np.zeros(n)\n", + "v = np.zeros(n)\n", + "x = np.zeros(n)\n", + "# Initial conditions (can change to more than one dim)\n", + "x0 = 1.0 \n", + "v0 = 0.0\n", + "x[0] = x0\n", + "v[0] = v0\n", + "gamma = 0.2\n", + "Omegatilde = 0.5\n", + "Ftilde = 1.0\n", + "# Start integrating using Euler's method\n", + "# Note that we define the force function as a SpringForce\n", + "RK4(v,x,t,n,SpringForce)\n", + "\n", + "# Plot position as function of time \n", + "fig, ax = plt.subplots()\n", + "ax.set_ylabel('x[m]')\n", + "ax.set_xlabel('t[s]')\n", + "ax.plot(t, x)\n", + "fig.tight_layout()\n", + "save_fig(\"ForcedBlockRK4\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Principle of Superposition and Periodic Forces (Fourier Transforms)\n", + "\n", + "If one has several driving forces, $F(t)=\\sum_n F_n(t)$, one can find\n", + "the particular solution to each $F_n$, $x_{pn}(t)$, and the particular\n", + "solution for the entire driving force is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x_p(t)=\\sum_nx_{pn}(t).\n", + "\\label{_auto25} \\tag{34}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is known as the principal of superposition. It only applies when\n", + "the homogenous equation is linear. If there were an anharmonic term\n", + "such as $x^3$ in the homogenous equation, then when one summed various\n", + "solutions, $x=(\\sum_n x_n)^2$, one would get cross\n", + "terms. Superposition is especially useful when $F(t)$ can be written\n", + "as a sum of sinusoidal terms, because the solutions for each\n", + "sinusoidal (sine or cosine) term is analytic, as we saw above.\n", + "\n", + "Driving forces are often periodic, even when they are not\n", + "sinusoidal. Periodicity implies that for some time $\\tau$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "F(t+\\tau)=F(t). \n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One example of a non-sinusoidal periodic force is a square wave. Many\n", + "components in electric circuits are non-linear, e.g. diodes, which\n", + "makes many wave forms non-sinusoidal even when the circuits are being\n", + "driven by purely sinusoidal sources.\n", + "\n", + "The code here shows a typical example of such a square wave generated using the functionality included in the **scipy** Python package. We have used a period of $\\tau=0.2$." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import math\n", + "from scipy import signal\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# number of points \n", + "n = 500\n", + "# start and final times \n", + "t0 = 0.0\n", + "tn = 1.0\n", + "# Period \n", + "t = np.linspace(t0, tn, n, endpoint=False)\n", + "SqrSignal = np.zeros(n)\n", + "SqrSignal = 1.0+signal.square(2*np.pi*5*t)\n", + "plt.plot(t, SqrSignal)\n", + "plt.ylim(-0.5, 2.5)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the sinusoidal example studied in the previous subsections the\n", + "period is $\\tau=2\\pi/\\omega$. However, higher harmonics can also\n", + "satisfy the periodicity requirement. In general, any force that\n", + "satisfies the periodicity requirement can be expressed as a sum over\n", + "harmonics," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F(t)=\\frac{f_0}{2}+\\sum_{n>0} f_n\\cos(2n\\pi t/\\tau)+g_n\\sin(2n\\pi t/\\tau).\n", + "\\label{_auto26} \\tag{35}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the previous subsection, one can write down the answer for\n", + "$x_{pn}(t)$, by substituting $f_n/m$ or $g_n/m$ for $F_0/m$ into Eq.s\n", + "([20](#eq:fastdriven1)) or ([21](#eq:fastdriven2)) respectively. By\n", + "writing each factor $2n\\pi t/\\tau$ as $n\\omega t$, with $\\omega\\equiv\n", + "2\\pi/\\tau$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:fourierdef1} \\tag{36}\n", + "F(t)=\\frac{f_0}{2}+\\sum_{n>0}f_n\\cos(n\\omega t)+g_n\\sin(n\\omega t).\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The solutions for $x(t)$ then come from replacing $\\omega$ with\n", + "$n\\omega$ for each term in the particular solution in Equations\n", + "([13](#eq:partform)) and ([16](#eq:Ddrive))," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x_p(t)&=&\\frac{f_0}{2k}+\\sum_{n>0} \\alpha_n\\cos(n\\omega t-\\delta_n)+\\beta_n\\sin(n\\omega t-\\delta_n),\\\\\n", + "\\nonumber\n", + "\\alpha_n&=&\\frac{f_n/m}{\\sqrt{((n\\omega)^2-\\omega_0^2)+4\\beta^2n^2\\omega^2}},\\\\\n", + "\\nonumber\n", + "\\beta_n&=&\\frac{g_n/m}{\\sqrt{((n\\omega)^2-\\omega_0^2)+4\\beta^2n^2\\omega^2}},\\\\\n", + "\\nonumber\n", + "\\delta_n&=&\\tan^{-1}\\left(\\frac{2\\beta n\\omega}{\\omega_0^2-n^2\\omega^2}\\right).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because the forces have been applied for a long time, any non-zero\n", + "damping eliminates the homogenous parts of the solution, so one need\n", + "only consider the particular solution for each $n$.\n", + "\n", + "The problem will considered solved if one can find expressions for the\n", + "coefficients $f_n$ and $g_n$, even though the solutions are expressed\n", + "as an infinite sum. The coefficients can be extracted from the\n", + "function $F(t)$ by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:fourierdef2} \\tag{37}\n", + "f_n&=&\\frac{2}{\\tau}\\int_{-\\tau/2}^{\\tau/2} dt~F(t)\\cos(2n\\pi t/\\tau),\\\\\n", + "\\nonumber\n", + "g_n&=&\\frac{2}{\\tau}\\int_{-\\tau/2}^{\\tau/2} dt~F(t)\\sin(2n\\pi t/\\tau).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To check the consistency of these expressions and to verify\n", + "Eq. ([37](#eq:fourierdef2)), one can insert the expansion of $F(t)$ in\n", + "Eq. ([36](#eq:fourierdef1)) into the expression for the coefficients in\n", + "Eq. ([37](#eq:fourierdef2)) and see whether" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "f_n&=?&\\frac{2}{\\tau}\\int_{-\\tau/2}^{\\tau/2} dt~\\left\\{\n", + "\\frac{f_0}{2}+\\sum_{m>0}f_m\\cos(m\\omega t)+g_m\\sin(m\\omega t)\n", + "\\right\\}\\cos(n\\omega t).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Immediately, one can throw away all the terms with $g_m$ because they\n", + "convolute an even and an odd function. The term with $f_0/2$\n", + "disappears because $\\cos(n\\omega t)$ is equally positive and negative\n", + "over the interval and will integrate to zero. For all the terms\n", + "$f_m\\cos(m\\omega t)$ appearing in the sum, one can use angle addition\n", + "formulas to see that $\\cos(m\\omega t)\\cos(n\\omega\n", + "t)=(1/2)(\\cos[(m+n)\\omega t]+\\cos[(m-n)\\omega t]$. This will integrate\n", + "to zero unless $m=n$. In that case the $m=n$ term gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\int_{-\\tau/2}^{\\tau/2}dt~\\cos^2(m\\omega t)=\\frac{\\tau}{2},\n", + "\\label{_auto27} \\tag{38}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "f_n&=?&\\frac{2}{\\tau}\\int_{-\\tau/2}^{\\tau/2} dt~f_n/2\\\\\n", + "\\nonumber\n", + "&=&f_n~\\checkmark.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The same method can be used to check for the consistency of $g_n$.\n", + "\n", + "\n", + "Consider the driving force:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F(t)=At/\\tau,~~-\\tau/2\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:fouriersolution} \\tag{40}\n", + "g_n&=&\\frac{2}{\\tau}\\int_{-\\tau/2}^{\\tau/2}dt~\\sin(n\\omega t) \\frac{At}{\\tau}\\\\\n", + "\\nonumber\n", + "u&=&t,~dv=\\sin(n\\omega t)dt,~v=-\\cos(n\\omega t)/(n\\omega),\\\\\n", + "\\nonumber\n", + "g_n&=&\\frac{-2A}{n\\omega \\tau^2}\\int_{-\\tau/2}^{\\tau/2}dt~\\cos(n\\omega t)\n", + "+\\left.2A\\frac{-t\\cos(n\\omega t)}{n\\omega\\tau^2}\\right|_{-\\tau/2}^{\\tau/2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first term is zero because $\\cos(n\\omega t)$ will be equally\n", + "positive and negative over the interval. Using the fact that\n", + "$\\omega\\tau=2\\pi$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "g_n&=&-\\frac{2A}{2n\\pi}\\cos(n\\omega\\tau/2)\\\\\n", + "\\nonumber\n", + "&=&-\\frac{A}{n\\pi}\\cos(n\\pi)\\\\\n", + "\\nonumber\n", + "&=&\\frac{A}{n\\pi}(-1)^{n+1}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fourier Series\n", + "\n", + "More text will come here, chpater 5.7-5.8 of Taylor are discussed\n", + "during the lectures. The code here uses the Fourier series discussed\n", + "in chapter 5.7 for a square wave signal. The equations for the\n", + "coefficients are are discussed in Taylor section 5.7, see Example\n", + "5.4. The code here visualizes the various approximations given by\n", + "Fourier series compared with a square wave with period $T=0.2$, witth\n", + "$0.1$ and max value $F=2$. We see that when we increase the number of\n", + "components in the Fourier series, the Fourier series approximation gets closes and closes to the square wave signal." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import math\n", + "from scipy import signal\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# number of points \n", + "n = 500\n", + "# start and final times \n", + "t0 = 0.0\n", + "tn = 1.0\n", + "# Period \n", + "T =0.2\n", + "# Max value of square signal \n", + "Fmax= 2.0\n", + "# Width of signal \n", + "Width = 0.1\n", + "t = np.linspace(t0, tn, n, endpoint=False)\n", + "SqrSignal = np.zeros(n)\n", + "FourierSeriesSignal = np.zeros(n)\n", + "SqrSignal = 1.0+signal.square(2*np.pi*5*t+np.pi*Width/T)\n", + "a0 = Fmax*Width/T\n", + "FourierSeriesSignal = a0\n", + "Factor = 2.0*Fmax/np.pi\n", + "for i in range(1,500):\n", + " FourierSeriesSignal += Factor/(i)*np.sin(np.pi*i*Width/T)*np.cos(i*t*2*np.pi/T)\n", + "plt.plot(t, SqrSignal)\n", + "plt.plot(t, FourierSeriesSignal)\n", + "plt.ylim(-0.5, 2.5)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solving differential equations with Fouries series\n", + "\n", + "The material here was discussed during the lecture of February 19 and 21.\n", + "It is also covered by Taylor in section 5.8.\n", + "\n", + "\n", + "\n", + "## Response to Transient Force\n", + "\n", + "Consider a particle at rest in the bottom of an underdamped harmonic\n", + "oscillator, that then feels a sudden impulse, or change in momentum,\n", + "$I=F\\Delta t$ at $t=0$. This increases the velocity immediately by an\n", + "amount $v_0=I/m$ while not changing the position. One can then solve\n", + "the trajectory by solving Eq. ([9](#eq:homogsolution)) with initial\n", + "conditions $v_0=I/m$ and $x_0=0$. This gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x(t)=\\frac{I}{m\\omega'}e^{-\\beta t}\\sin\\omega't, ~~t>0.\n", + "\\label{_auto29} \\tag{41}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, $\\omega'=\\sqrt{\\omega_0^2-\\beta^2}$. For an impulse $I_i$ that\n", + "occurs at time $t_i$ the trajectory would be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x(t)=\\frac{I_i}{m\\omega'}e^{-\\beta (t-t_i)}\\sin[\\omega'(t-t_i)] \\Theta(t-t_i),\n", + "\\label{_auto30} \\tag{42}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\Theta(t-t_i)$ is a step function, i.e. $\\Theta(x)$ is zero for\n", + "$x<0$ and unity for $x>0$. If there were several impulses linear\n", + "superposition tells us that we can sum over each contribution," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x(t)=\\sum_i\\frac{I_i}{m\\omega'}e^{-\\beta(t-t_i)}\\sin[\\omega'(t-t_i)]\\Theta(t-t_i)\n", + "\\label{_auto31} \\tag{43}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now one can consider a series of impulses at times separated by\n", + "$\\Delta t$, where each impulse is given by $F_i\\Delta t$. The sum\n", + "above now becomes an integral," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\\label{eq:Greeny} \\tag{44}\n", + "x(t)&=&\\int_{-\\infty}^\\infty dt'~F(t')\\frac{e^{-\\beta(t-t')}\\sin[\\omega'(t-t')]}{m\\omega'}\\Theta(t-t')\\\\\n", + "\\nonumber\n", + "&=&\\int_{-\\infty}^\\infty dt'~F(t')G(t-t'),\\\\\n", + "\\nonumber\n", + "G(\\Delta t)&=&\\frac{e^{-\\beta\\Delta t}\\sin[\\omega' \\Delta t]}{m\\omega'}\\Theta(\\Delta t)\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The quantity\n", + "$e^{-\\beta(t-t')}\\sin[\\omega'(t-t')]/m\\omega'\\Theta(t-t')$ is called a\n", + "Green's function, $G(t-t')$. It describes the response at $t$ due to a\n", + "force applied at a time $t'$, and is a function of $t-t'$. The step\n", + "function ensures that the response does not occur before the force is\n", + "applied. One should remember that the form for $G$ would change if the\n", + "oscillator were either critically- or over-damped.\n", + "\n", + "When performing the integral in Eq. ([44](#eq:Greeny)) one can use\n", + "angle addition formulas to factor out the part with the $t'$\n", + "dependence in the integrand," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:Greeny2} \\tag{45}\n", + "x(t)&=&\\frac{1}{m\\omega'}e^{-\\beta t}\\left[I_c(t)\\sin(\\omega't)-I_s(t)\\cos(\\omega't)\\right],\\\\\n", + "\\nonumber\n", + "I_c(t)&\\equiv&\\int_{-\\infty}^t dt'~F(t')e^{\\beta t'}\\cos(\\omega't'),\\\\\n", + "\\nonumber\n", + "I_s(t)&\\equiv&\\int_{-\\infty}^t dt'~F(t')e^{\\beta t'}\\sin(\\omega't').\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the time $t$ is beyond any time at which the force acts,\n", + "$F(t'>t)=0$, the coefficients $I_c$ and $I_s$ become independent of\n", + "$t$.\n", + "\n", + "\n", + "Consider an undamped oscillator ($\\beta\\rightarrow 0$), with\n", + "characteristic frequency $\\omega_0$ and mass $m$, that is at rest\n", + "until it feels a force described by a Gaussian form," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "F(t)&=&F_0 \\exp\\left\\{\\frac{-t^2}{2\\tau^2}\\right\\}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For large times ($t>>\\tau$), where the force has died off, find\n", + "$x(t)$.\\\\ Solve for the coefficients $I_c$ and $I_s$ in\n", + "Eq. ([45](#eq:Greeny2)). Because the Gaussian is an even function,\n", + "$I_s=0$, and one need only solve for $I_c$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "I_c&=&F_0\\int_{-\\infty}^\\infty dt'~e^{-t^{\\prime 2}/(2\\tau^2)}\\cos(\\omega_0 t')\\\\\n", + "&=&\\Re F_0 \\int_{-\\infty}^\\infty dt'~e^{-t^{\\prime 2}/(2\\tau^2)}e^{i\\omega_0 t'}\\\\\n", + "&=&\\Re F_0 \\int_{-\\infty}^\\infty dt'~e^{-(t'-i\\omega_0\\tau^2)^2/(2\\tau^2)}e^{-\\omega_0^2\\tau^2/2}\\\\\n", + "&=&F_0\\tau \\sqrt{2\\pi} e^{-\\omega_0^2\\tau^2/2}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The third step involved completing the square, and the final step used the fact that the integral" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\int_{-\\infty}^\\infty dx~e^{-x^2/2}&=&\\sqrt{2\\pi}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To see that this integral is true, consider the square of the integral, which you can change to polar coordinates," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "I&=&\\int_{-\\infty}^\\infty dx~e^{-x^2/2}\\\\\n", + "I^2&=&\\int_{-\\infty}^\\infty dxdy~e^{-(x^2+y^2)/2}\\\\\n", + "&=&2\\pi\\int_0^\\infty rdr~e^{-r^2/2}\\\\\n", + "&=&2\\pi.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, the expression for $x$ from Eq. ([45](#eq:Greeny2)) is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "x(t>>\\tau)&=&\\frac{F_0\\tau}{m\\omega_0} \\sqrt{2\\pi} e^{-\\omega_0^2\\tau^2/2}\\sin(\\omega_0t).\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The classical pendulum and scaling the equations\n", + "\n", + "Let us end our discussion of oscillations with another classical case, the pendulum.\n", + "\n", + "The angular equation of motion of the pendulum is given by\n", + "Newton's equation and with no external force it reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " ml\\frac{d^2\\theta}{dt^2}+mgsin(\\theta)=0,\n", + "\\label{_auto32} \\tag{46}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with an angular velocity and acceleration given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " v=l\\frac{d\\theta}{dt},\n", + "\\label{_auto33} \\tag{47}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " a=l\\frac{d^2\\theta}{dt^2}.\n", + "\\label{_auto34} \\tag{48}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We do however expect that the motion will gradually come to an end due a viscous drag torque acting on the pendulum. \n", + "In the presence of the drag, the above equation becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " ml\\frac{d^2\\theta}{dt^2}+\\nu\\frac{d\\theta}{dt} +mgsin(\\theta)=0, \\label{eq:pend1} \\tag{49}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\nu$ is now a positive constant parameterizing the viscosity\n", + "of the medium in question. In order to maintain the motion against\n", + "viscosity, it is necessary to add some external driving force. \n", + "We choose here a periodic driving force. The last equation becomes then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " ml\\frac{d^2\\theta}{dt^2}+\\nu\\frac{d\\theta}{dt} +mgsin(\\theta)=Asin(\\omega t), \\label{eq:pend2} \\tag{50}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $A$ and $\\omega$ two constants representing the amplitude and \n", + "the angular frequency respectively. The latter is called the driving frequency.\n", + "\n", + "\n", + "\n", + "We define" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\omega_0=\\sqrt{g/l},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "the so-called natural frequency and the new dimensionless quantities" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{t}=\\omega_0t,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with the dimensionless driving frequency" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{\\omega}=\\frac{\\omega}{\\omega_0},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and introducing the quantity $Q$, called the *quality factor*," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "Q=\\frac{mg}{\\omega_0\\nu},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the dimensionless amplitude" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{A}=\\frac{A}{mg}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More on the Pendulum\n", + "\n", + "We have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2\\theta}{d\\hat{t}^2}+\\frac{1}{Q}\\frac{d\\theta}{d\\hat{t}} \n", + " +sin(\\theta)=\\hat{A}cos(\\hat{\\omega}\\hat{t}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This equation can in turn be recast in terms of two coupled first-order differential equations as follows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d\\theta}{d\\hat{t}}=\\hat{v},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d\\hat{v}}{d\\hat{t}}=-\\frac{\\hat{v}}{Q}-sin(\\theta)+\\hat{A}cos(\\hat{\\omega}\\hat{t}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are the equations to be solved. The factor $Q$ represents the\n", + "number of oscillations of the undriven system that must occur before\n", + "its energy is significantly reduced due to the viscous drag. The\n", + "amplitude $\\hat{A}$ is measured in units of the maximum possible\n", + "gravitational torque while $\\hat{\\omega}$ is the angular frequency of\n", + "the external torque measured in units of the pendulum's natural\n", + "frequency." + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/chapter6.ipynb b/doc/src/LectureNotes/testbook/_build/html/_sources/chapter6.ipynb new file mode 100644 index 000000000..115823c8a --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/chapter6.ipynb @@ -0,0 +1,2290 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Two-body Problems\n", + "\n", + "\n", + "The gravitational potential energy and forces involving two masses $a$ and $b$ are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "U_{ab}&=&-\\frac{Gm_am_b}{|\\boldsymbol{r}_a-\\boldsymbol{r}_b|},\\\\\n", + "\\nonumber\n", + "F_{ba}&=&-\\frac{Gm_am_b}{|\\boldsymbol{r}_a-\\boldsymbol{r}_b|^2}\\hat{r}_{ab},\\\\\n", + "\\nonumber\n", + "\\hat{r}_{ab}&=&\\frac{\\boldsymbol{r}_b-\\boldsymbol{r}_a}{|\\boldsymbol{r}_a-\\boldsymbol{r}_b|}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here $G=6.67\\times 10^{-11}$ Nm$^2$/kg$^2$, and $F_{ba}$ is the force\n", + "on $b$ due to $a$. By inspection, one can see that the force on $b$\n", + "due to $a$ and the force on $a$ due to $b$ are equal and opposite. The\n", + "net potential energy for a large number of masses would be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "U=\\sum_{a\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:radialeqofmotion} \\tag{2}\n", + "\\frac{d}{dt}r^2&=&\\frac{d}{dt}(x^2+y^2)=2x\\dot{x}+2y\\dot{y}=2r\\dot{r},\\\\\n", + "\\nonumber\n", + "\\dot{r}&=&\\frac{x}{r}\\dot{x}+\\frac{y}{r}\\dot{y},\\\\\n", + "\\nonumber\n", + "\\ddot{r}&=&\\frac{x}{r}\\ddot{x}+\\frac{y}{r}\\ddot{y}\n", + "+\\frac{\\dot{x}^2+\\dot{y}^2}{r}\n", + "-\\frac{\\dot{r}^2}{r}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Recognizing that the numerator of the third term is the velocity squared, and that it can be written in polar coordinates," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v^2=\\dot{x}^2+\\dot{y}^2=\\dot{r}^2+r^2\\dot{\\theta}^2,\n", + "\\label{_auto2} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "one can write $\\ddot{r}$ as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:radialeqofmotion2} \\tag{4}\n", + "\\ddot{r}&=&\\frac{F_x\\cos\\theta+F_y\\sin\\theta}{m}+\\frac{\\dot{r}^2+r^2\\dot{\\theta}^2}{r}-\\frac{\\dot{r}^2}{r}\\\\\n", + "\\nonumber\n", + "&=&\\frac{F}{m}+\\frac{r^2\\dot{\\theta}^2}{r}\\\\\n", + "\\nonumber\n", + "m\\ddot{r}&=&F+\\frac{L^2}{mr^3}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This derivation used the fact that the force was radial,\n", + "$F=F_r=F_x\\cos\\theta+F_y\\sin\\theta$, and that angular momentum is\n", + "$L=mrv_{\\theta}=mr^2\\dot{\\theta}$. The term $L^2/mr^3=mv^2/r$ behaves\n", + "like an additional force. Sometimes this is referred to as a\n", + "centrifugal force, but it is not a force. Instead, it is the\n", + "consequence of considering the motion in a rotating (and therefore\n", + "accelerating) frame.\n", + "\n", + "Now, we switch to the particular case of an attractive inverse square\n", + "force, $F=-\\alpha/r^2$, and show that the trajectory, $r(\\theta)$, is\n", + "an ellipse. To do this we transform derivatives w.r.t. time to\n", + "derivatives w.r.t. $\\theta$ using the chain rule combined with angular\n", + "momentum conservation, $\\dot{\\theta}=L/mr^2$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:rtotheta} \\tag{5}\n", + "\\dot{r}&=&\\frac{dr}{d\\theta}\\dot{\\theta}=\\frac{dr}{d\\theta}\\frac{L}{mr^2},\\\\\n", + "\\nonumber\n", + "\\ddot{r}&=&\\frac{d^2r}{d\\theta^2}\\dot{\\theta}^2\n", + "+\\frac{dr}{d\\theta}\\left(\\frac{d}{dr}\\frac{L}{mr^2}\\right)\\dot{r}\\\\\n", + "\\nonumber\n", + "&=&\\frac{d^2r}{d\\theta^2}\\left(\\frac{L}{mr^2}\\right)^2\n", + "-2\\frac{dr}{d\\theta}\\frac{L}{mr^3}\\dot{r}\\\\\n", + "\\nonumber\n", + "&=&\\frac{d^2r}{d\\theta^2}\\left(\\frac{L}{mr^2}\\right)^2\n", + "-\\frac{2}{r}\\left(\\frac{dr}{d\\theta}\\right)^2\\left(\\frac{L}{mr^2}\\right)^2\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Equating the two expressions for $\\ddot{r}$ in Eq.s ([4](#eq:radialeqofmotion2)) and ([5](#eq:rtotheta)) eliminates all the derivatives w.r.t. time, and provides a differential equation with only derivatives w.r.t. $\\theta$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:rdotdot} \\tag{6}\n", + "\\frac{d^2r}{d\\theta^2}\\left(\\frac{L}{mr^2}\\right)^2\n", + "-\\frac{2}{r}\\left(\\frac{dr}{d\\theta}\\right)^2\\left(\\frac{L}{mr^2}\\right)^2\n", + "=\\frac{F}{m}+\\frac{L^2}{m^2r^3},\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "that when solved yields the trajectory, i.e. $r(\\theta)$. Up to this\n", + "point the expressions work for any radial force, not just forces that\n", + "fall as $1/r^2$.\n", + "\n", + "The trick to simplifying this differential equation for the inverse\n", + "square problems is to make a substitution, $u\\equiv 1/r$, and rewrite\n", + "the differential equation for $u(\\theta)$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "r&=&1/u,\\\\\n", + "\\nonumber\n", + "\\frac{dr}{d\\theta}&=&-\\frac{1}{u^2}\\frac{du}{d\\theta},\\\\\n", + "\\nonumber\n", + "\\frac{d^2r}{d\\theta^2}&=&\\frac{2}{u^3}\\left(\\frac{du}{d\\theta}\\right)^2-\\frac{1}{u^2}\\frac{d^2u}{d\\theta^2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plugging these expressions into Eq. ([6](#eq:rdotdot)) gives an\n", + "expression in terms of $u$, $du/d\\theta$, and $d^2u/d\\theta^2$. After\n", + "some tedious algebra," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d^2u}{d\\theta^2}=-u-\\frac{F m}{L^2u^2}.\n", + "\\label{_auto3} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the attractive inverse square law force, $F=-\\alpha u^2$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d^2u}{d\\theta^2}=-u+\\frac{m\\alpha}{L^2}.\n", + "\\label{_auto4} \\tag{8}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The solution has two arbitrary constants, $A$ and $\\theta_0$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:Ctrajectory} \\tag{9}\n", + "u&=&\\frac{m\\alpha}{L^2}+A\\cos(\\theta-\\theta_0),\\\\\n", + "\\nonumber\n", + "r&=&\\frac{1}{(m\\alpha/L^2)+A\\cos(\\theta-\\theta_0)}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The radius will be at a minimum when $\\theta=\\theta_0$ and at a\n", + "maximum when $\\theta=\\theta_0+\\pi$. The constant $A$ is related to the\n", + "eccentricity of the orbit. When $A=0$ the radius is a constant\n", + "$r=L^2/(m\\alpha)$, and the motion is circular. If one solved the\n", + "expression $mv^2/r=-\\alpha/r^2$ for a circular orbit, using the\n", + "substitution $v=L/(mr)$, one would reproduce the expression\n", + "$r=L^2/(m\\alpha)$.\n", + "\n", + "The form describing the elliptical trajectory in\n", + "Eq. ([9](#eq:Ctrajectory)) can be identified as an ellipse with one\n", + "focus being the center of the ellipse by considering the definition of\n", + "an ellipse as being the points such that the sum of the two distances\n", + "between the two foci are a constant. Making that distance $2D$, the\n", + "distance between the two foci as $2a$, and putting one focus at the\n", + "origin," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "2D&=&r+\\sqrt{(r\\cos\\theta-2a)^2+r^2\\sin^2\\theta},\\\\\n", + "\\nonumber\n", + "4D^2+r^2-4Dr&=&r^2+4a^2-4ar\\cos\\theta,\\\\\n", + "\\nonumber\n", + "r&=&\\frac{D^2-a^2}{D+a\\cos\\theta}=\\frac{1}{D/(D^2-a^2)-a\\cos\\theta/(D^2-a^2)}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By inspection, this is the same form as Eq. ([9](#eq:Ctrajectory)) with $D/(D^2-a^2)=m\\alpha/L^2$ and $a/(D^2-a^2)=A$.\n", + "\n", + "\n", + "Let us remind ourselves about what an ellipse is before we proceed." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "import numpy as np\n", + "from matplotlib import pyplot as plt\n", + "from math import pi\n", + "\n", + "u=1. #x-position of the center\n", + "v=0.5 #y-position of the center\n", + "a=2. #radius on the x-axis\n", + "b=1.5 #radius on the y-axis\n", + "\n", + "t = np.linspace(0, 2*pi, 100)\n", + "plt.plot( u+a*np.cos(t) , v+b*np.sin(t) )\n", + "plt.grid(color='lightgray',linestyle='--')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Effective or Centrifugal Potential\n", + "\n", + "The total energy of a particle is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "E&=&U(r)+\\frac{1}{2}mv_\\theta^2+\\frac{1}{2}m\\dot{r}^2\\\\\n", + "\\nonumber\n", + "&=&U(r)+\\frac{1}{2}mr^2\\dot{\\theta}^2+\\frac{1}{2}m\\dot{r}^2\\\\\n", + "\\nonumber\n", + "&=&U(r)+\\frac{L^2}{2mr^2}+\\frac{1}{2}m\\dot{r}^2.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The second term then contributes to the energy like an additional\n", + "repulsive potential. The term is sometimes referred to as the\n", + "\"centrifugal\" potential, even though it is actually the kinetic energy\n", + "of the angular motion. Combined with $U(r)$, it is sometimes referred\n", + "to as the \"effective\" potential," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "U_{\\rm eff}(r)&=&U(r)+\\frac{L^2}{2mr^2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that if one treats the effective potential like a real potential, one would expect to be able to generate an effective force," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "F_{\\rm eff}&=&-\\frac{d}{dr}U(r) -\\frac{d}{dr}\\frac{L^2}{2mr^2}\\\\\n", + "\\nonumber\n", + "&=&F(r)+\\frac{L^2}{mr^3}=F(r)+m\\frac{v_\\perp^2}{r},\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which is indeed matches the form for $m\\ddot{r}$ in Eq. ([4](#eq:radialeqofmotion2)), which included the **centrifugal** force.\n", + "\n", + "The following code plots this effective potential for a simple choice of parameters, with a standard gravitational potential $-\\alpha/r$. Here we have chosen $L=m=\\alpha=1$." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Common imports\n", + "import numpy as np\n", + "from math import *\n", + "import matplotlib.pyplot as plt\n", + "\n", + "Deltax = 0.01\n", + "#set up arrays\n", + "xinitial = 0.3\n", + "xfinal = 5.0\n", + "alpha = 1.0 # spring constant\n", + "m = 1.0 # mass, you can change these\n", + "AngMom = 1.0 # The angular momentum\n", + "n = ceil((xfinal-xinitial)/Deltax)\n", + "x = np.zeros(n)\n", + "for i in range(n):\n", + " x[i] = xinitial+i*Deltax\n", + "V = np.zeros(n)\n", + "V = -alpha/x+0.5*AngMom*AngMom/(m*x*x)\n", + "# Plot potential\n", + "fig, ax = plt.subplots()\n", + "ax.set_xlabel('r[m]')\n", + "ax.set_ylabel('V[J]')\n", + "ax.plot(x, V)\n", + "fig.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Gravitational force example\n", + "\n", + "Using the above parameters, we can now study the evolution of the system using for example the velocity Verlet method.\n", + "This is done in the code here for an initial radius equal to the minimum of the potential well. We seen then that the radius is always the same and corresponds to a circle (the radius is always constant)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Common imports\n", + "import numpy as np\n", + "import pandas as pd\n", + "from math import *\n", + "import matplotlib.pyplot as plt\n", + "import os\n", + "\n", + "# Where to save the figures and data files\n", + "PROJECT_ROOT_DIR = \"Results\"\n", + "FIGURE_ID = \"Results/FigureFiles\"\n", + "DATA_ID = \"DataFiles/\"\n", + "\n", + "if not os.path.exists(PROJECT_ROOT_DIR):\n", + " os.mkdir(PROJECT_ROOT_DIR)\n", + "\n", + "if not os.path.exists(FIGURE_ID):\n", + " os.makedirs(FIGURE_ID)\n", + "\n", + "if not os.path.exists(DATA_ID):\n", + " os.makedirs(DATA_ID)\n", + "\n", + "def image_path(fig_id):\n", + " return os.path.join(FIGURE_ID, fig_id)\n", + "\n", + "def data_path(dat_id):\n", + " return os.path.join(DATA_ID, dat_id)\n", + "\n", + "def save_fig(fig_id):\n", + " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", + "\n", + "\n", + "# Simple Gravitational Force -alpha/r\n", + " \n", + "DeltaT = 0.01\n", + "#set up arrays \n", + "tfinal = 100.0\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, v and r\n", + "t = np.zeros(n)\n", + "v = np.zeros(n)\n", + "r = np.zeros(n)\n", + "# Constants of the model, setting all variables to one for simplicity\n", + "alpha = 1.0\n", + "AngMom = 1.0 # The angular momentum\n", + "m = 1.0 # scale mass to one\n", + "c1 = AngMom*AngMom/(m*m)\n", + "c2 = AngMom*AngMom/m\n", + "rmin = (AngMom*AngMom/m/alpha)\n", + "# Initial conditions\n", + "r0 = rmin\n", + "v0 = 0.0\n", + "r[0] = r0\n", + "v[0] = v0\n", + "# Start integrating using the Velocity-Verlet method\n", + "for i in range(n-1):\n", + " # Set up acceleration\n", + " a = -alpha/(r[i]**2)+c1/(r[i]**3)\n", + " # update velocity, time and position using the Velocity-Verlet method\n", + " r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a\n", + " anew = -alpha/(r[i+1]**2)+c1/(r[i+1]**3)\n", + " v[i+1] = v[i] + 0.5*DeltaT*(a+anew)\n", + " t[i+1] = t[i] + DeltaT\n", + " # Plot position as function of time\n", + "fig, ax = plt.subplots(2,1)\n", + "ax[0].set_xlabel('time')\n", + "ax[0].set_ylabel('radius')\n", + "ax[0].plot(t,r)\n", + "ax[1].set_xlabel('time')\n", + "ax[1].set_ylabel('Velocity')\n", + "ax[1].plot(t,v)\n", + "save_fig(\"RadialGVV\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Changing the value of the initial position to a value where the energy is positive, leads to an increasing radius with time, a so-called unbound orbit. Choosing on the other hand an initial radius that corresponds to a negative energy and different from the minimum value leads to a radius that oscillates back and forth between two values. \n", + "\n", + "### Harmonic Oscillator in two dimensions\n", + "\n", + "Consider a particle of mass $m$ in a 2-dimensional harmonic oscillator with potential" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "U=\\frac{1}{2}kr^2=\\frac{1}{2}k(x^2+y^2).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the orbit has angular momentum $L$, we can find the radius and angular velocity of the circular orbit as well as the b) the angular frequency of small radial perturbations.\n", + "\n", + "We consider the effective potential. The radius of a circular orbit is at the minimum of the potential (where the effective force is zero).\n", + "The potential is plotted here with the parameters $k=m=0.1$ and $L=1.0$." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Common imports\n", + "import numpy as np\n", + "from math import *\n", + "import matplotlib.pyplot as plt\n", + "\n", + "Deltax = 0.01\n", + "#set up arrays\n", + "xinitial = 1.0\n", + "xfinal = 5.0\n", + "k = 0.1 # spring constant\n", + "m = 0.1 # mass, you can change these\n", + "AngMom = 1.0 # The angular momentum\n", + "n = ceil((xfinal-xinitial)/Deltax)\n", + "x = np.zeros(n)\n", + "for i in range(n):\n", + " x[i] = xinitial+i*Deltax\n", + "V = np.zeros(n)\n", + "V = 0.5*k*x*x+0.5*AngMom*AngMom/(m*x*x)\n", + "# Plot potential\n", + "fig, ax = plt.subplots()\n", + "ax.set_xlabel('r[m]')\n", + "ax.set_ylabel('V[J]')\n", + "ax.plot(x, V)\n", + "fig.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "U_{\\rm eff}&=&\\frac{1}{2}kr^2+\\frac{L^2}{2mr^2}\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The effective potential looks like that of a harmonic oscillator for\n", + "large $r$, but for small $r$, the centrifugal potential repels the\n", + "particle from the origin. The combination of the two potentials has a\n", + "minimum for at some radius $r_{\\rm min}$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "0&=&kr_{\\rm min}-\\frac{L^2}{mr_{\\rm min}^3},\\\\\n", + "r_{\\rm min}&=&\\left(\\frac{L^2}{mk}\\right)^{1/4},\\\\\n", + "\\dot{\\theta}&=&\\frac{L}{mr_{\\rm min}^2}=\\sqrt{k/m}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For particles at $r_{\\rm min}$ with $\\dot{r}=0$, the particle does not\n", + "accelerate and $r$ stays constant, i.e. a circular orbit. The radius\n", + "of the circular orbit can be adjusted by changing the angular momentum\n", + "$L$.\n", + "\n", + "For the above parameters this minimum is at $r_{\\rm min}=1$.\n", + "\n", + " Now consider small vibrations about $r_{\\rm min}$. The effective spring constant is the curvature of the effective potential." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "k_{\\rm eff}&=&\\left.\\frac{d^2}{dr^2}U_{\\rm eff}(r)\\right|_{r=r_{\\rm min}}=k+\\frac{3L^2}{mr_{\\rm min}^4}\\\\\n", + "&=&4k,\\\\\n", + "\\omega&=&\\sqrt{k_{\\rm eff}/m}=2\\sqrt{k/m}=2\\dot{\\theta}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, the second step used the result of the last step from part\n", + "(a). Because the radius oscillates with twice the angular frequency,\n", + "the orbit has two places where $r$ reaches a minimum in one\n", + "cycle. This differs from the inverse-square force where there is one\n", + "minimum in an orbit. One can show that the orbit for the harmonic\n", + "oscillator is also elliptical, but in this case the center of the\n", + "potential is at the center of the ellipse, not at one of the foci.\n", + "\n", + "The solution is also simple to write down exactly in Cartesian coordinates. The $x$ and $y$ equations of motion separate," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\ddot{x}&=&-kx,\\\\\n", + "\\ddot{y}&=&-ky.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So the general solution can be expressed as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "x&=&A\\cos\\omega_0 t+B\\sin\\omega_0 t,\\\\\n", + "y&=&C\\cos\\omega_0 t+D\\sin\\omega_0 t.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The code here finds the solution for $x$ and $y$ using the code we developed in homework 4." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "\n", + "DeltaT = 0.01\n", + "#set up arrays \n", + "tfinal = 10.0\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays\n", + "t = np.zeros(n)\n", + "v = np.zeros((n,2))\n", + "r = np.zeros((n,2))\n", + "radius = np.zeros(n)\n", + "# Constants of the model\n", + "k = 0.1 # spring constant\n", + "m = 0.1 # mass, you can change these\n", + "omega02 = sqrt(k/m) # Frequency\n", + "AngMom = 1.0 # The angular momentum\n", + "rmin = (AngMom*AngMom/k/m)**0.25\n", + "# Initial conditions as compact 2-dimensional arrays\n", + "#x0 =rmin*0.5; y0 = sqrt(rmin*rmin-x0*x0)\n", + "x0 = 1.0; y0= 1.0\n", + "r0 = np.array([x0,y0]) \n", + "v0 = np.array([0.0,0.0])\n", + "r[0] = r0\n", + "v[0] = v0\n", + "# Start integrating using the Velocity-Verlet method\n", + "for i in range(n-1):\n", + " # Set up the acceleration\n", + " a = -r[i]*omega02 \n", + " # update velocity, time and position using the Velocity-Verlet method\n", + " r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a\n", + " anew = -r[i+1]*omega02 \n", + " v[i+1] = v[i] + 0.5*DeltaT*(a+anew)\n", + " t[i+1] = t[i] + DeltaT\n", + "# Plot position as function of time\n", + "radius = np.sqrt(r[:,0]**2+r[:,1]**2)\n", + "fig, ax = plt.subplots(3,1)\n", + "ax[0].set_xlabel('time')\n", + "ax[0].set_ylabel('radius squared')\n", + "ax[0].plot(t,r[:,0]**2+r[:,1]**2)\n", + "ax[1].set_xlabel('time')\n", + "ax[1].set_ylabel('x position')\n", + "ax[1].plot(t,r[:,0])\n", + "ax[2].set_xlabel('time')\n", + "ax[2].set_ylabel('y position')\n", + "ax[2].plot(t,r[:,1])\n", + "\n", + "fig.tight_layout()\n", + "save_fig(\"2DimHOVV\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With some work using double angle formulas, one can calculate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "r^2&=&x^2+y^2\\\\\n", + "\\nonumber\n", + "&=&(A^2+C^2)\\cos^2(\\omega_0t)+(B^2+D^2)\\sin^2\\omega_0t+(AB+CD)\\cos(\\omega_0t)\\sin(\\omega_0t)\\\\\n", + "\\nonumber\n", + "&=&\\alpha+\\beta\\cos 2\\omega_0 t+\\gamma\\sin 2\\omega_0 t,\\\\\n", + "\\alpha&=&\\frac{A^2+B^2+C^2+D^2}{2},~~\\beta=\\frac{A^2-B^2+C^2-D^2}{2},~~\\gamma=AB+CD,\\\\\n", + "r^2&=&\\alpha+(\\beta^2+\\gamma^2)^{1/2}\\cos(2\\omega_0 t-\\delta),~~~\\delta=\\arctan(\\gamma/\\beta),\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and see that radius oscillates with frequency $2\\omega_0$. The\n", + "factor of two comes because the oscillation $x=A\\cos\\omega_0t$ has two\n", + "maxima for $x^2$, one at $t=0$ and one a half period later.\n", + "\n", + "The following code shows first how we can solve this problem using the radial degrees of freedom only." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "DeltaT = 0.01\n", + "#set up arrays \n", + "tfinal = 10.0\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, v and r\n", + "t = np.zeros(n)\n", + "v = np.zeros(n)\n", + "r = np.zeros(n)\n", + "E = np.zeros(n)\n", + "# Constants of the model\n", + "AngMom = 1.0 # The angular momentum\n", + "m = 0.1\n", + "k = 0.1\n", + "omega02 = k/m\n", + "c1 = AngMom*AngMom/(m*m)\n", + "c2 = AngMom*AngMom/m\n", + "rmin = (AngMom*AngMom/k/m)**0.25\n", + "# Initial conditions\n", + "r0 = rmin\n", + "v0 = 0.0\n", + "r[0] = r0\n", + "v[0] = v0\n", + "E[0] = 0.5*m*v0*v0+0.5*k*r0*r0+0.5*c2/(r0*r0)\n", + "# Start integrating using the Velocity-Verlet method\n", + "for i in range(n-1):\n", + " # Set up acceleration\n", + " a = -r[i]*omega02+c1/(r[i]**3) \n", + " # update velocity, time and position using the Velocity-Verlet method\n", + " r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a\n", + " anew = -r[i+1]*omega02+c1/(r[i+1]**3)\n", + " v[i+1] = v[i] + 0.5*DeltaT*(a+anew)\n", + " t[i+1] = t[i] + DeltaT\n", + " E[i+1] = 0.5*m*v[i+1]*v[i+1]+0.5*k*r[i+1]*r[i+1]+0.5*c2/(r[i+1]*r[i+1])\n", + " # Plot position as function of time\n", + "fig, ax = plt.subplots(2,1)\n", + "ax[0].set_xlabel('time')\n", + "ax[0].set_ylabel('radius')\n", + "ax[0].plot(t,r)\n", + "ax[1].set_xlabel('time')\n", + "ax[1].set_ylabel('Energy')\n", + "ax[1].plot(t,E)\n", + "save_fig(\"RadialHOVV\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Stability of Orbits\n", + "\n", + "The effective force can be extracted from the effective potential, $U_{\\rm eff}$. Beginning from the equations of motion, Eq. ([2](#eq:radialeqofmotion)), for $r$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "m\\ddot{r}&=&F+\\frac{L^2}{mr^3}\\\\\n", + "\\nonumber\n", + "&=&F_{\\rm eff}\\\\\n", + "\\nonumber\n", + "&=&-\\partial_rU_{\\rm eff},\\\\\n", + "\\nonumber\n", + "F_{\\rm eff}&=&-\\partial_r\\left[U(r)+(L^2/2mr^2)\\right].\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a circular orbit, the radius must be fixed as a function of time,\n", + "so one must be at a maximum or a minimum of the effective\n", + "potential. However, if one is at a maximum of the effective potential\n", + "the radius will be unstable. For the attractive Coulomb force the\n", + "effective potential will be dominated by the $-\\alpha/r$ term for\n", + "large $r$ because the centrifugal part falls off more quickly, $\\sim\n", + "1/r^2$. At low $r$ the centrifugal piece wins and the effective\n", + "potential is repulsive. Thus, the potential must have a minimum\n", + "somewhere with negative potential. The circular orbits are then stable\n", + "to perturbation.\n", + "\n", + "\n", + "The effective potential is sketched for two cases, a $1/r$ attractive\n", + "potential and a $1/r^3$ attractive potential. The $1/r$ case has a\n", + "stable minimum, whereas the circular orbit in the $1/r^3$ case is\n", + "unstable.\n", + "\n", + "\n", + "If one considers a potential that falls as $1/r^3$, the situation is\n", + "reversed and the point where $\\partial_rU$ disappears will be a local\n", + "maximum rather than a local minimum. **Fig to come here with code**\n", + "\n", + "The repulsive centrifugal piece dominates at large $r$ and the attractive\n", + "Coulomb piece wins out at small $r$. The circular orbit is then at a\n", + "maximum of the effective potential and the orbits are unstable. It is\n", + "the clear that for potentials that fall as $r^n$, that one must have\n", + "$n>-2$ for the orbits to be stable.\n", + "\n", + "\n", + "Consider a potential $U(r)=\\beta r$. For a particle of mass $m$ with\n", + "angular momentum $L$, find the angular frequency of a circular\n", + "orbit. Then find the angular frequency for small radial perturbations.\n", + "\n", + "\n", + "For the circular orbit you search for the position $r_{\\rm min}$ where the effective potential is minimized," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\partial_r\\left\\{\\beta r+\\frac{L^2}{2mr^2}\\right\\}&=&0,\\\\\n", + "\\beta&=&\\frac{L^2}{mr_{\\rm min}^3},\\\\\n", + "r_{\\rm min}&=&\\left(\\frac{L^2}{\\beta m}\\right)^{1/3},\\\\\n", + "\\dot{\\theta}&=&\\frac{L}{mr_{\\rm min}^2}=\\frac{\\beta^{2/3}}{(mL)^{1/3}}\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we can find the angular frequency of small perturbations about the circular orbit. To do this we find the effective spring constant for the effective potential," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "k_{\\rm eff}&=&\\partial_r^2 \\left.U_{\\rm eff}\\right|_{r_{\\rm min}}\\\\\n", + "&=&\\frac{3L^2}{mr_{\\rm min}^4},\\\\\n", + "\\omega&=&\\sqrt{\\frac{k_{\\rm eff}}{m}}\\\\\n", + "&=&\\frac{\\beta^{2/3}}{(mL)^{1/3}}\\sqrt{3}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the two frequencies, $\\dot{\\theta}$ and $\\omega$, differ by an\n", + "integer factor, the orbit's trajectory will repeat itself each time\n", + "around. This is the case for the inverse-square force,\n", + "$\\omega=\\dot{\\theta}$, and for the harmonic oscillator,\n", + "$\\omega=2\\dot{\\theta}$. In this case, $\\omega=\\sqrt{3}\\dot{\\theta}$,\n", + "and the angles at which the maxima and minima occur change with each\n", + "orbit.\n", + "\n", + "\n", + "### Code example with gravitional force\n", + "\n", + "The code example here is meant to illustrate how we can make a plot of the final orbit. We solve the equations in polar coordinates (the example here uses the minimum of the potential as initial value) and then we transform back to cartesian coordinates and plot $x$ versus $y$. We see that we get a perfect circle when we place ourselves at the minimum of the potential energy, as expected." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "\n", + "# Simple Gravitational Force -alpha/r\n", + " \n", + "DeltaT = 0.01\n", + "#set up arrays \n", + "tfinal = 8.0\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, v and r\n", + "t = np.zeros(n)\n", + "v = np.zeros(n)\n", + "r = np.zeros(n)\n", + "phi = np.zeros(n)\n", + "x = np.zeros(n)\n", + "y = np.zeros(n)\n", + "# Constants of the model, setting all variables to one for simplicity\n", + "alpha = 1.0\n", + "AngMom = 1.0 # The angular momentum\n", + "m = 1.0 # scale mass to one\n", + "c1 = AngMom*AngMom/(m*m)\n", + "c2 = AngMom*AngMom/m\n", + "rmin = (AngMom*AngMom/m/alpha)\n", + "# Initial conditions, place yourself at the potential min\n", + "r0 = rmin\n", + "v0 = 0.0 # starts at rest\n", + "r[0] = r0\n", + "v[0] = v0\n", + "phi[0] = 0.0\n", + "# Start integrating using the Velocity-Verlet method\n", + "for i in range(n-1):\n", + " # Set up acceleration\n", + " a = -alpha/(r[i]**2)+c1/(r[i]**3)\n", + " # update velocity, time and position using the Velocity-Verlet method\n", + " r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a\n", + " anew = -alpha/(r[i+1]**2)+c1/(r[i+1]**3)\n", + " v[i+1] = v[i] + 0.5*DeltaT*(a+anew)\n", + " t[i+1] = t[i] + DeltaT\n", + " phi[i+1] = t[i+1]*c2/(r0**2)\n", + "# Find cartesian coordinates for easy plot \n", + "x = r*np.cos(phi)\n", + "y = r*np.sin(phi)\n", + "fig, ax = plt.subplots(3,1)\n", + "ax[0].set_xlabel('time')\n", + "ax[0].set_ylabel('radius')\n", + "ax[0].plot(t,r)\n", + "ax[1].set_xlabel('time')\n", + "ax[1].set_ylabel('Angle $\\cos{\\phi}$')\n", + "ax[1].plot(t,np.cos(phi))\n", + "ax[2].set_ylabel('y')\n", + "ax[2].set_xlabel('x')\n", + "ax[2].plot(x,y)\n", + "\n", + "save_fig(\"Phasespace\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Try to change the initial value for $r$ and see what kind of orbits you get.\n", + "In order to test different energies, it can be useful to look at the plot of the effective potential discussed above.\n", + "\n", + "However, for orbits different from a circle the above code would need modifications in order to allow us to display say an ellipse. For the latter, it is much easier to run our code in cartesian coordinates, as done here. In this code we test also energy conservation and see that it is conserved to numerical precision. The code here is a simple extension of the code we developed for homework 4." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Common imports\n", + "import numpy as np\n", + "import pandas as pd\n", + "from math import *\n", + "import matplotlib.pyplot as plt\n", + "\n", + "DeltaT = 0.01\n", + "#set up arrays \n", + "tfinal = 10.0\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays\n", + "t = np.zeros(n)\n", + "v = np.zeros((n,2))\n", + "r = np.zeros((n,2))\n", + "E = np.zeros(n)\n", + "# Constants of the model\n", + "m = 1.0 # mass, you can change these\n", + "alpha = 1.0\n", + "# Initial conditions as compact 2-dimensional arrays\n", + "x0 = 0.5; y0= 0.\n", + "r0 = np.array([x0,y0]) \n", + "v0 = np.array([0.0,1.0])\n", + "r[0] = r0\n", + "v[0] = v0\n", + "rabs = sqrt(sum(r[0]*r[0]))\n", + "E[0] = 0.5*m*(v[0,0]**2+v[0,1]**2)-alpha/rabs\n", + "# Start integrating using the Velocity-Verlet method\n", + "for i in range(n-1):\n", + " # Set up the acceleration\n", + " rabs = sqrt(sum(r[i]*r[i]))\n", + " a = -alpha*r[i]/(rabs**3)\n", + " # update velocity, time and position using the Velocity-Verlet method\n", + " r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a\n", + " rabs = sqrt(sum(r[i+1]*r[i+1]))\n", + " anew = -alpha*r[i+1]/(rabs**3)\n", + " v[i+1] = v[i] + 0.5*DeltaT*(a+anew)\n", + " E[i+1] = 0.5*m*(v[i+1,0]**2+v[i+1,1]**2)-alpha/rabs\n", + " t[i+1] = t[i] + DeltaT\n", + "# Plot position as function of time\n", + "fig, ax = plt.subplots(3,1)\n", + "ax[0].set_ylabel('y')\n", + "ax[0].set_xlabel('x')\n", + "ax[0].plot(r[:,0],r[:,1])\n", + "ax[1].set_xlabel('time')\n", + "ax[1].set_ylabel('y position')\n", + "ax[1].plot(t,r[:,0])\n", + "ax[2].set_xlabel('time')\n", + "ax[2].set_ylabel('y position')\n", + "ax[2].plot(t,r[:,1])\n", + "\n", + "fig.tight_layout()\n", + "save_fig(\"2DimGravity\")\n", + "plt.show()\n", + "print(E)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Scattering and Cross Sections\n", + "\n", + "Scattering experiments don't measure entire trajectories. For elastic\n", + "collisions, they measure the distribution of final scattering angles\n", + "at best. Most experiments use targets thin enough so that the number\n", + "of scatterings is typically zero or one. The cross section, $\\sigma$,\n", + "describes the cross-sectional area for particles to scatter with an\n", + "individual target atom or nucleus. Cross section measurements form the\n", + "basis for MANY fields of physics. BThe cross section, and the\n", + "differential cross section, encapsulates everything measurable for a\n", + "collision where all that is measured is the final state, e.g. the\n", + "outgoing particle had momentum $\\boldsymbol{p}_f$. y studying cross sections,\n", + "one can infer information about the potential interaction between the\n", + "two particles. Inferring, or constraining, the potential from the\n", + "cross section is a classic {\\it inverse} problem. Collisions are\n", + "either elastic or inelastic. Elastic collisions are those for which\n", + "the two bodies are in the same internal state before and after the\n", + "collision. If the collision excites one of the participants into a\n", + "higher state, or transforms the particles into different species, or\n", + "creates additional particles, the collision is inelastic. Here, we\n", + "consider only elastic collisions.\n", + "\n", + "For Coulomb forces, the cross section is infinite because the range of\n", + "the Coulomb force is infinite, but for interactions such as the strong\n", + "interaction in nuclear or particle physics, there is no long-range\n", + "force and cross-sections are finite. Even for Coulomb forces, the part\n", + "of the cross section that corresponds to a specific scattering angle,\n", + "$d\\sigma/d\\Omega$, which is a function of the scattering angle\n", + "$\\theta_s$ is still finite.\n", + "\n", + "If a particle travels through a thin target, the chance the particle\n", + "scatters is $P_{\\rm scatt}=\\sigma dN/dA$, where $dN/dA$ is the number\n", + "of scattering centers per area the particle encounters. If the density\n", + "of the target is $\\rho$ particles per volume, and if the thickness of\n", + "the target is $t$, the areal density (number of target scatterers per\n", + "area) is $dN/dA=\\rho t$. Because one wishes to quantify the collisions\n", + "independently of the target, experimentalists measure scattering\n", + "probabilities, then divide by the areal density to obtain\n", + "cross-sections," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\sigma=\\frac{P_{\\rm scatt}}{dN/dA}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Instead of merely stating that a particle collided, one can measure\n", + "the probability the particle scattered by a given angle. The\n", + "scattering angle $\\theta_s$ is defined so that at zero the particle is\n", + "unscattered and at $\\theta_s=\\pi$ the particle is scattered directly\n", + "backward. Scattering angles are often described in the center-of-mass\n", + "frame, but that is a detail we will neglect for this first discussion,\n", + "where we will consider the scattering of particles moving classically\n", + "under the influence of fixed potentials $U(\\boldsymbol{r})$. Because the\n", + "distribution of scattering angles can be measured, one expresses the\n", + "differential cross section," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d^2\\sigma}{d\\cos\\theta_s~d\\phi}.\n", + "\\label{_auto5} \\tag{10}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Usually, the literature expresses differential cross sections as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "d\\sigma/d\\Omega=\\frac{d\\sigma}{d\\cos\\theta d\\phi}=\\frac{1}{2\\pi}\\frac{d\\sigma}{d\\cos\\theta},\n", + "\\label{_auto6} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the last equivalency is true when the scattering does not depend\n", + "on the azimuthal angle $\\phi$, as is the case for spherically\n", + "symmetric potentials.\n", + "\n", + "The differential solid angle $d\\Omega$ can be thought of as the area\n", + "subtended by a measurement, $dA_d$, divided by $r^2$, where $r$ is the\n", + "distance to the detector," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "dA_d=r^2 d\\Omega.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With this definition $d\\sigma/d\\Omega$ is independent of the distance\n", + "from which one places the detector, or the size of the detector (as\n", + "long as it is small).\n", + "\n", + "Differential scattering cross sections are calculated by assuming a\n", + "random distribution of impact parameters $b$. These represent the\n", + "distance in the $xy$ plane for particles moving in the $z$ direction\n", + "relative to the scattering center. An impact parameter $b=0$ refers to\n", + "being aimed directly at the target's center. The impact parameter\n", + "describes the transverse distance from the $z=0$ axis for the\n", + "trajectory when it is still far away from the scattering center and\n", + "has not yet passed it. The differential cross section can be expressed\n", + "in terms of the impact parameter," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "d\\sigma=2\\pi bdb,\n", + "\\label{_auto7} \\tag{12}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which is the area of a thin ring of radius $b$ and thickness $db$. In\n", + "classical physics, one can calculate the trajectory given the incoming\n", + "kinetic energy $E$ and the impact parameter if one knows the mass and\n", + "potential. From the trajectory, one then finds the scattering angle\n", + "$\\theta_s(b)$. The differential cross section is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d\\sigma}{d\\Omega}=\\frac{1}{2\\pi}\\frac{d\\sigma}{d\\cos\\theta_s}=b\\frac{db}{d\\cos\\theta_s}=\\frac{b}{(d/db)\\cos\\theta_s(b)}.\n", + "\\label{_auto8} \\tag{13}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Typically, one would calculate $\\cos\\theta_s$ and $(d/db)\\cos\\theta_s$\n", + "as functions of $b$. This is sufficient to plot the differential cross\n", + "section as a function of $\\theta_s$.\n", + "\n", + "The total cross section is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\sigma_{\\rm tot}=\\int d\\Omega\\frac{d\\sigma}{d\\Omega}=2\\pi\\int d\\cos\\theta_s~\\frac{d\\sigma}{d\\Omega}. \n", + "\\label{_auto9} \\tag{14}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Even if the total cross section is infinite, e.g. Coulomb forces, one\n", + "can still have a finite differential cross section as we will see\n", + "later on.\n", + "\n", + "\n", + "An asteroid of mass $m$ and kinetic energy $E$ approaches a planet of\n", + "radius $R$ and mass $M$. What is the cross section for the asteroid to\n", + "impact the planet?\n", + "\n", + "### Solution\n", + "\n", + "Calculate the maximum impact parameter, $b_{\\rm max}$, for which the asteroid will hit the planet. The total cross section for impact is $\\sigma_{\\rm impact}=\\pi b_{\\rm max}^2$. The maximum cross-section can be found with the help of angular momentum conservation. The asteroid's incoming momentum is $p_0=\\sqrt{2mE}$ and the angular momentum is $L=p_0b$. If the asteroid just grazes the planet, it is moving with zero radial kinetic energy at impact. Combining energy and angular momentum conservation and having $p_f$ refer to the momentum of the asteroid at a distance $R$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\frac{p_f^2}{2m}-\\frac{GMm}{R}&=&E,\\\\\n", + "p_fR&=&p_0b_{\\rm max},\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "allows one to solve for $b_{\\rm max}$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "b_{\\rm max}&=&R\\frac{p_f}{p_0}\\\\\n", + "&=&R\\frac{\\sqrt{2m(E+GMm/R)}}{\\sqrt{2mE}}\\\\\n", + "\\sigma_{\\rm impact}&=&\\pi R^2\\frac{E+GMm/R}{E}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Rutherford Scattering\n", + "\n", + "This refers to the calculation of $d\\sigma/d\\Omega$ due to an inverse\n", + "square force, $F_{12}=\\pm\\alpha/r^2$ for repulsive/attractive\n", + "interaction. Rutherford compared the scattering of $\\alpha$ particles\n", + "($^4$He nuclei) off of a nucleus and found the scattering angle at\n", + "which the formula began to fail. This corresponded to the impact\n", + "parameter for which the trajectories would strike the nucleus. This\n", + "provided the first measure of the size of the atomic nucleus. At the\n", + "time, the distribution of the positive charge (the protons) was\n", + "considered to be just as spread out amongst the atomic volume as the\n", + "electrons. After Rutherford's experiment, it was clear that the radius\n", + "of the nucleus tended to be roughly 4 orders of magnitude smaller than\n", + "that of the atom, which is less than the size of a football relative\n", + "to Spartan Stadium.\n", + "\n", + "\n", + "\n", + "The incoming and outgoing angles of the trajectory are at\n", + "$\\pm\\theta'$. They are related to the scattering angle by\n", + "$2\\theta'=\\pi+\\theta_s$.\n", + "\n", + "In order to calculate differential cross section, we must find how the\n", + "impact parameter is related to the scattering angle. This requires\n", + "analysis of the trajectory. We consider our previous expression for\n", + "the trajectory where we derived the elliptic form for the trajectory,\n", + "Eq. ([9](#eq:Ctrajectory)). For that case we considered an attractive\n", + "force with the particle's energy being negative, i.e. it was\n", + "bound. However, the same form will work for positive energy, and\n", + "repulsive forces can be considered by simple flipping the sign of\n", + "$\\alpha$. For positive energies, the trajectories will be hyperbolas,\n", + "rather than ellipses, with the asymptotes of the trajectories\n", + "representing the directions of the incoming and outgoing\n", + "tracks. Rewriting Eq. ([9](#eq:Ctrajectory))," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\\label{eq:ruthtraj} \\tag{15}\n", + "r=\\frac{1}{\\frac{m\\alpha}{L^2}+A\\cos\\theta}.\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once $A$ is large enough, which will happen when the energy is\n", + "positive, the denominator will become negative for a range of\n", + "$\\theta$. This is because the scattered particle will never reach\n", + "certain angles. The asymptotic angles $\\theta'$ are those for which\n", + "the denominator goes to zero," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\cos\\theta'=-\\frac{m\\alpha}{AL^2}.\n", + "\\label{_auto10} \\tag{16}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The trajectory's point of closest approach is at $\\theta=0$ and the\n", + "two angles $\\theta'$, which have this value of $\\cos\\theta'$, are the\n", + "angles of the incoming and outgoing particles. From\n", + "Fig (**to come**), one can see that the scattering angle\n", + "$\\theta_s$ is given by," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:sthetover2} \\tag{17}\n", + "2\\theta'-\\pi&=&\\theta_s,~~~\\theta'=\\frac{\\pi}{2}+\\frac{\\theta_s}{2},\\\\\n", + "\\nonumber\n", + "\\sin(\\theta_s/2)&=&-\\cos\\theta'\\\\\n", + "\\nonumber\n", + "&=&\\frac{m\\alpha}{AL^2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have $\\theta_s$ in terms of $m,\\alpha,L$ and $A$, we wish\n", + "to re-express $L$ and $A$ in terms of the impact parameter $b$ and the\n", + "energy $E$. This will set us up to calculate the differential cross\n", + "section, which requires knowing $db/d\\theta_s$. It is easy to write\n", + "the angular momentum as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "L^2=p_0^2b^2=2mEb^2.\n", + "\\label{_auto11} \\tag{18}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finding $A$ is more complicated. To accomplish this we realize that\n", + "the point of closest approach occurs at $\\theta=0$, so from\n", + "Eq. ([15](#eq:ruthtraj))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:rminofA} \\tag{19}\n", + "\\frac{1}{r_{\\rm min}}&=&\\frac{m\\alpha}{L^2}+A,\\\\\n", + "\\nonumber\n", + "A&=&\\frac{1}{r_{\\rm min}}-\\frac{m\\alpha}{L^2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, $r_{\\rm min}$ can be found in terms of the energy because at the\n", + "point of closest approach the kinetic energy is due purely to the\n", + "motion perpendicular to $\\hat{r}$ and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "E=-\\frac{\\alpha}{r_{\\rm min}}+\\frac{L^2}{2mr_{\\rm min}^2}.\n", + "\\label{_auto12} \\tag{20}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One can solve the quadratic equation for $1/r_{\\rm min}$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{1}{r_{\\rm min}}=\\frac{m\\alpha}{L^2}+\\sqrt{(m\\alpha/L^2)^2+2mE/L^2}.\n", + "\\label{_auto13} \\tag{21}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can plug the expression for $r_{\\rm min}$ into the expression for $A$, Eq. ([19](#eq:rminofA))," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "A=\\sqrt{(m\\alpha/L^2)^2+2mE/L^2}=\\sqrt{(\\alpha^2/(4E^2b^4)+1/b^2}\n", + "\\label{_auto14} \\tag{22}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we insert the expression for $A$ into that for the scattering angle, Eq. ([17](#eq:sthetover2))," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:scattangle} \\tag{23}\n", + "\\sin(\\theta_s/2)&=&\\frac{m\\alpha}{AL^2}\\\\\n", + "\\nonumber\n", + "&=&\\frac{a}{\\sqrt{a^2+b^2}}, ~~a\\equiv \\frac{\\alpha}{2E}\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The differential cross section can now be found by differentiating the\n", + "expression for $\\theta_s$ with $b$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:rutherford} \\tag{24}\n", + "\\frac{1}{2}\\cos(\\theta_s/2)d\\theta_s&=&\\frac{ab~db}{(a^2+b^2)^{3/2}}=\\frac{bdb}{a^2}\\sin^3(\\theta_s/2),\\\\\n", + "\\nonumber\n", + "d\\sigma&=&2\\pi bdb=\\frac{\\pi a^2}{\\sin^3(\\theta_s/2)}\\cos(\\theta_s/2)d\\theta_s\\\\\n", + "\\nonumber\n", + "&=&\\frac{\\pi a^2}{2\\sin^4(\\theta_s/2)}\\sin\\theta_s d\\theta_s\\\\\n", + "\\nonumber\n", + "\\frac{d\\sigma}{d\\cos\\theta_s}&=&\\frac{\\pi a^2}{2\\sin^4(\\theta_s/2)},\\\\\n", + "\\nonumber\n", + "\\frac{d\\sigma}{d\\Omega}&=&\\frac{a^2}{4\\sin^4(\\theta_s/2)}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $a= \\alpha/2E$. This the Rutherford formula for the differential\n", + "cross section. It diverges as $\\theta_s\\rightarrow 0$ because\n", + "scatterings with arbitrarily large impact parameters still scatter to\n", + "arbitrarily small scattering angles. The expression for\n", + "$d\\sigma/d\\Omega$ is the same whether the interaction is positive or\n", + "negative.\n", + "\n", + "\n", + "Consider a particle of mass $m$ and charge $z$ with kinetic energy $E$\n", + "(Let it be the center-of-mass energy) incident on a heavy nucleus of\n", + "mass $M$ and charge $Z$ and radius $R$. Find the angle at which the\n", + "Rutherford scattering formula breaks down.\n", + "\n", + "### Solution\n", + "\n", + "Let $\\alpha=Zze^2/(4\\pi\\epsilon_0)$. The scattering angle in Eq. ([23](#eq:scattangle)) is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\sin(\\theta_s/2)=\\frac{a}{\\sqrt{a^2+b^2}}, ~~a\\equiv \\frac{\\alpha}{2E}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The impact parameter $b$ for which the point of closest approach\n", + "equals $R$ can be found by using angular momentum conservation," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "p_0b&=&b\\sqrt{2mE}=Rp_f=R\\sqrt{2m(E-\\alpha/R)},\\\\\n", + "b&=&R\\frac{\\sqrt{2m(E-\\alpha/R)}}{\\sqrt{2mE}}\\\\\n", + "&=&R\\sqrt{1-\\frac{\\alpha}{ER}}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Putting these together" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\theta_s=2\\sin^{-1}\\left\\{\n", + "\\frac{a}{\\sqrt{a^2+R^2(1-\\alpha/(RE))}}\n", + "\\right\\},~~~a=\\frac{\\alpha}{2E}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It was from this departure of the experimentally measured\n", + "$d\\sigma/d\\Omega$ from the Rutherford formula that allowed Rutherford\n", + "to infer the radius of the gold nucleus, $R$.\n", + "\n", + "\n", + "\n", + "Just like electrodynamics, one can define \"fields\", which for a small\n", + "additional mass $m$ are the force per mass and the additional\n", + "potential energy per mass. The {\\it gravitational field} related to\n", + "the force has dimensions of force per mass, or acceleration, and can\n", + "be labeled $\\boldsymbol{g}(\\boldsymbol{r})$. The potential energy per mass has\n", + "dimensions of energy per mass. This is analogous to the\n", + "electromagnetic potential, which is the potential energy per charge,\n", + "and the electric field which is the force per charge.\n", + "\n", + "Because the field $\\boldsymbol{g}$ obeys the same inverse square law for a\n", + "point mass as the electric field does for a point charge, the\n", + "gravitational field also satisfies a version of Gauss's law," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:GravGauss} \\tag{25}\n", + "\\oint d\\boldsymbol{A}\\cdot\\boldsymbol{g}=-4\\pi GM_{\\rm inside}.\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, $M_{\\rm inside}$ is the net mass inside a closed area.\n", + "\n", + "Gauss's law can be understood by considering a nozzle that sprays\n", + "paint in all directions uniformly from a point source. Let $B$ be the\n", + "number of gallons per minute of paint leaving the nozzle. If the\n", + "nozzle is at the center of a sphere of radius $r$, the paint per\n", + "square meter per minute that is deposited on some part of the sphere\n", + "is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "F(r)&=&\\frac{B}{4\\pi r^2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, let $F$ also be assigned a direction, so that it becomes a vector\n", + "pointing along the direction of the flying paint. For any surface that\n", + "surrounds the nozzle, not necessarily a sphere, one can state that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:paint} \\tag{26}\n", + "\\oint \\boldsymbol{dA}\\cdot\\boldsymbol{F}&=&B,\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "regardless of the shape of the surface. This follows because the rate\n", + "at which paint is deposited on the surface should equal the rate at\n", + "which it leaves the nozzle. The dot product ensures that only the\n", + "component of $\\boldsymbol{F}$ into the surface contributes to the deposition\n", + "of paint. Similarly, if $\\boldsymbol{F}$ is any radial inverse-square forces,\n", + "that falls as $B/(4\\pi r^2)$, then one can apply\n", + "Eq. ([26](#eq:paint)). For gravitational fields, $B/(4\\pi)$ is replaced\n", + "by $GM$, and one quickly \"derives\" Gauss's law for gravity,\n", + "Eq. ([25](#eq:GravGauss)).\n", + "\n", + "\n", + "Consider Earth to have its mass $M$ uniformly distributed in a sphere\n", + "of radius $R$. Find the magnitude of the gravitational acceleration as\n", + "a function of the radius $r$ in terms of the acceleration of gravity\n", + "at the surface $g(R)$. Assume $r\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F=-\\frac{GM\\delta m}{D^2}+2\\frac{GM\\delta m}{D^3}\\Delta D+\\cdots\n", + "\\label{_auto15} \\tag{27}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the $z$ direction points toward the large object, $\\Delta D$ can be\n", + "referred to as $z$. In the accelerating frame of an observer at the\n", + "center of the planet," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\delta m\\frac{d^2 z}{dt^2}=F-\\delta ma'+{\\rm other~forces~acting~on~} \\delta m,\n", + "\\label{_auto16} \\tag{28}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $a'$ is the acceleration of the observer. Because $\\delta ma'$\n", + "equals the gravitational force on $\\delta m$ if it were located at the\n", + "planet's center, one can write" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "m\\frac{d^2z}{dt^2}=2\\frac{GM\\delta m}{D^3}z+{\\rm other~forces~acting~on~}\\delta m.\n", + "\\label{_auto17} \\tag{29}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here the other forces could represent the forces acting on $\\delta m$\n", + "from the spherical planet such as the gravitational force or the\n", + "contact force with the surface. If $\\theta$ is the angle w.r.t. the\n", + "$z$ axis, the effective force acting on $\\delta m$ is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F_{\\rm eff}\\approx 2\\frac{GM\\delta m}{D^3}r\\cos\\theta\\hat{z}+{\\rm other~forces~acting~on~}\\delta m.\n", + "\\label{_auto18} \\tag{30}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This first force is the \"tidal\" force. It pulls objects outward from the center of the object. If the object were covered with water, it would distort the objects shape so that the shape would be elliptical, stretched out along the axis pointing toward the large mass $M$. The force is always along (either parallel or antiparallel to) the $\\hat{z}$ direction.\n", + "\n", + "\n", + "Consider the Earth to be a sphere of radius $R$ covered with water,\n", + "with the gravitational acceleration at the surface noted by $g$. Now\n", + "assume that a distant body provides an additional constant\n", + "gravitational acceleration $\\boldsymbol{a}$ pointed along the $z$ axis. Find\n", + "the distortion of the radius as a function of $\\theta$. Ignore\n", + "planetary rotation and assume $a<\n", + "\n", + "\n", + "

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "shows the relation between the two\n", + "frames. The position of an object in frame $S$ relative to $S_0$ is\n", + "labeled as $\\boldsymbol{r}_{S_0}$. Seen from this inertial frame, an object in\n", + "the accelerating frame obeys Newton's second law" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "m\\frac{d^2\\boldsymbol{r}_{S_0}}{dt^2}=\\boldsymbol{F}.\n", + "\\label{_auto1} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here $\\boldsymbol{F}$ is the net force on an object in the accelerating frame\n", + "seen from the inertial frame.\n", + "\n", + "If we on the other hand wish to study the motion of this object (say a\n", + "ball in an accelerating car) relative to the accelerating frame, we\n", + "need to define its position relative to this frame. We label this\n", + "position as $\\boldsymbol{r}_{S}$.\n", + "\n", + "Using the definition of velocity as the time derivative of position\n", + "and the standard vector addition of velocities, we can define the\n", + "velocity relative to $S_0$ as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{r}}_{S_0}=\\dot{\\boldsymbol{r}}_{S}+\\boldsymbol{v}_{S_0}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The left hand side in the last equation defines the object's velocity\n", + "relative to the inertial frame. The right hand side says this is the\n", + "object's velocity relative to the accelerating frame plus the velocity\n", + "of the accelerating frame with respect to the inertial frame. If we\n", + "now take the second derivative of the above equation,\n", + "we have the corresponding accelerations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\ddot{\\boldsymbol{r}}_{S_0}=\\ddot{\\boldsymbol{r}}_{S}+\\boldsymbol{a}_{S_0}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Multiplying with the mass of a given object, we can rewrite Newton's\n", + "law in the accelerating frame as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\ddot{\\boldsymbol{r}}_{S}=\\boldsymbol{F}-\\boldsymbol{a}_{S_0}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that we have again Newton's second law except that we added a\n", + "correction which defines an effective acceleration compared to the\n", + "equation seen in the inertial frame. We can thus continue to use\n", + "Newton's law in the accelerating frame provided we correct the\n", + "equation of motion with what is often called a fictitious force. This\n", + "often also called an inertial force or an effective force.\n", + "\n", + "**Add example about pendulum in train car**\n", + "\n", + "## Rotating Frames\n", + "\n", + "\n", + "If you are on Earth's surface and if your reference frame is fixed\n", + "with the surface, this is an example of an accelerating frame, where\n", + "the acceleration, as we will show below, is $\\Omega^2 r$, where\n", + "$r\\equiv\\sqrt{x^2+y^2}$, and $\\Omega$ is the angular velocity\n", + "of Earth's rotation. The acceleration is inward toward the axis of\n", + "rotation, so the additional contribution to the apparent acceleration\n", + "of gravity is outward in the $x-y$ plane. In contrast the usual\n", + "acceleration $\\boldsymbol{g}$ is radially inward pointing toward the origin.\n", + "\n", + "We will now deal with motion in a rotating frame and relate this to an\n", + "inertial frame. The outcome of our derivations will be effective\n", + "forces (or inertial forces) like the abovementioned acceleration (from\n", + "the centrifugal force) and the Coriolis force term.\n", + "\n", + "For a reference frame that rotates with respect to an inertial frame,\n", + "**Euler's theorem** is central here. It states that the most general\n", + "displacement (motion) of a rigid body with a one point fixed (we\n", + "normally approximate a rigid body with a mass center) is a rotation\n", + "about some fixed axis. In different words, the most general motion of\n", + "any body relative to a fixed point $O$ is a rotation abotu some axis\n", + "through the same point $O$. This means that for a specific rotation\n", + "about a given point $O$ we only to specify the direction of the axis\n", + "about which the rotation occurs with the corresponding angle of\n", + "rotation. As we will see below, the direction of the angle of rotation\n", + "can be specified by a unit vector $\\boldsymbol{e}$ in the rotating frame and\n", + "the rate of rotation per unit time. The latter defines the angular\n", + "velocity $\\Omega$. We will define these quantities more rigorously below.\n", + "At the end of this section we will also prove Euler's theorem.\n", + "\n", + "What we will show here is that Newton's laws for an object in the rotating frame is given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\ddot{\\boldsymbol{r}}_{S}=\\boldsymbol{F}+m\\boldsymbol{r}\\times\\dot{\\boldsymbol{\\Omega}}+2m\\boldsymbol{v}_S\\times\\boldsymbol{\\Omega}+m\\left(\\boldsymbol{\\Omega}\\times\\boldsymbol{r}\\right)\\times\\boldsymbol{\\Omega}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first term to the right is the force we defined in the inertial\n", + "system, that is $m\\ddot{\\boldsymbol{r}}_{S_0}=\\boldsymbol{F}$. The second term is the\n", + "angular acceleration of the rotating reference frame, a quantity which\n", + "in many cases is set to zero since we assume that the angular velocity\n", + "is constant as function of time. The third terms is the Coriolis force, that\n", + "is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Coriolis}}=2m\\boldsymbol{v}_S\\times\\boldsymbol{\\Omega},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "while the last term is going to give us the standard centrifugal force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Centrifugal}}=m\\left(\\boldsymbol{\\Omega}\\times\\boldsymbol{r}\\right)\\times\\boldsymbol{\\Omega}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us derive these terms, following much of the same procedure as we\n", + "did for an accelerating reference frame. The figure here (to come)\n", + "shows the two reference systems $S$ and $S_0$.\n", + "\n", + "\n", + "We define a general vector $\\boldsymbol{A}$. It could represent the position,\n", + "a given force, the velocity and other quantities of interest for\n", + "studies of the equations of motion.\n", + "\n", + "We let this vector to be defined by three orthogonal (we assume motion\n", + "in three dimensions) unit vectors $\\boldsymbol{e}_i$, that is we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{A}=A_1\\boldsymbol{e}_1+A_2\\boldsymbol{e}_2+A_3\\boldsymbol{e}_3=\\sum_iA_i\\boldsymbol{e}_i.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These unit vectors are fixed in the rotating frame, that is their time\n", + "derivatives are zero. However, for an observer in the inertial frame\n", + "$S_0$, however these unit vectors are rotating and may thus have an\n", + "explicit time dependence.\n", + "\n", + "Since we want to find an expression for the equations of motion in the\n", + "inertial frame and the rotating frame, we need expressions for the\n", + "time derivative of a vector $\\boldsymbol{A}$ in these two frames. Since the\n", + "unit vectors are assumed to be fixed in $S$, we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{A}}_S=\\sum_i\\frac{dA_i}{dt}\\boldsymbol{e}_i=\\sum_i\\dot{dA_i}\\boldsymbol{e}_i.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the inertial frame $S_0$ we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{A}}_{S_0}=\\sum_i\\dot{dA_i}\\boldsymbol{e}_i+\\sum_i A_i\\left(\\dot{\\boldsymbol{e}}_i\\right)_{S_0}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will show below that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\left(\\dot{\\boldsymbol{e}}_i\\right)_{S_0}=\\Omega\\times\\boldsymbol{e}_i,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\Omega$ is the angular velocity (to be derived below). This\n", + "means we can write the derivative of an arbitrary vector $\\boldsymbol{A}$ in\n", + "the inertial frame $S_0$ as (the vector is defined in the rotating\n", + "frame)," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{A}}_{S_0}=\\sum_i\\dot{dA_i}\\boldsymbol{e}_i+\\sum_i A_i\\left(\\dot{\\boldsymbol{e}}_i\\right)_{S_0}=\\dot{\\boldsymbol{A}}_S+\\sum_i A_i(\\Omega\\times\\boldsymbol{e}_i)=\\dot{\\boldsymbol{A}}_S+\\boldsymbol{\\Omega}\\times\\boldsymbol{A}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a very useful relation which relates the derivative of any\n", + "vector $\\boldsymbol{A}$ measured in the inertial frame $S_0$ to the\n", + "correspoding derivative in a rotating frame $S$.\n", + "\n", + "If we now let $\\boldsymbol{A}$ be the position and the velocity vectors, we\n", + "can derive the equations of motion in the rotating frame in terms of\n", + "the same equations of motion in the inertial frame $S_0$.\n", + "\n", + "Let us start with the position $\\boldsymbol{r}$. \n", + "\n", + "We have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{r}}_{S_0}=\\dot{\\boldsymbol{r}}_S+\\boldsymbol{\\Omega}\\times\\boldsymbol{r}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we define the velocities in the two frames as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{v}_{S_0}=\\dot{\\boldsymbol{r}}_{S_0},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{v}_{S}=\\dot{\\boldsymbol{r}}_{S},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we have then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{r}}_{S_0}=\\boldsymbol{v}_{S_0}=\\boldsymbol{v}_{S}+\\boldsymbol{\\Omega}\\times\\boldsymbol{r}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to find the equations of motion, we need the acceleration and\n", + "thereby the time derivative of the last equation. The derivative of\n", + "the angular velocity $\\Omega$ will turn in handy in these derivations\n", + "(repeated applications of the chain rule again).\n", + "The latter derivative is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{\\Omega}}_{S_0}=\\dot{\\boldsymbol{\\Omega}}_S+\\boldsymbol{\\Omega}\\times\\boldsymbol{\\Omega},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which leads to (an expected result, why?)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{\\Omega}}_{S_0}=\\dot{\\boldsymbol{\\Omega}}_S,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "since $\\boldsymbol{\\Omega}\\times\\boldsymbol{\\Omega}=0$. \n", + "\n", + "Let us now take the second derivative with respect to time.\n", + "\n", + "Using" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\left[\\frac{d^2\\boldsymbol{r}}{dt^2}\\right]_{S_0}=\\ddot{\\boldsymbol{r}}_{S_0}=\\left[\\frac{d}{dt}\\right]_{S_0}\\left[\\frac{d\\boldsymbol{r}}{dt}\\right]_{S_0},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\ddot{\\boldsymbol{r}}_{S_0}=\\left[\\frac{d}{dt}\\right]_{S_0}\\left[\\boldsymbol{v}_{S}+\\boldsymbol{\\Omega}\\times\\boldsymbol{r}\\right]=\\left[\\frac{d}{dt}\\right]_{S_0}\\boldsymbol{v}_{S_0},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\ddot{\\boldsymbol{r}}_{S_0}=\\left[\\frac{d\\boldsymbol{v}_S}{dt}\\right]_{S}+\\dot{\\boldsymbol{\\Omega}}\\times \\boldsymbol{r}+2\\boldsymbol{\\Omega}\\times\\boldsymbol{v}_S+\\boldsymbol{\\Omega}\\times(\\boldsymbol{\\Omega}\\times\\boldsymbol{r}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Defining the accelerations $\\boldsymbol{a}_{S_0}=\\ddot{\\boldsymbol{r}}_{S_0}=\\dot{\\boldsymbol{v}}_{S_0}$ and $\\boldsymbol{a}_{S}=\\dot{\\boldsymbol{v}}_{S}$, we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a}_{S_0}=\\boldsymbol{a}_{S}+\\dot{\\boldsymbol{\\Omega}}\\times \\boldsymbol{r}+2\\boldsymbol{\\Omega}\\times\\boldsymbol{v}_S+\\boldsymbol{\\Omega}\\times(\\boldsymbol{\\Omega}\\times\\boldsymbol{r}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we now use Newton's law in the inertial frame $\\boldsymbol{F}=m\\boldsymbol{a}_{S_0}$, we get the effective force in the rotating frame (multiplying by the mass $m$)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\boldsymbol{a}_{S}=\\boldsymbol{F}+m\\dot{\\boldsymbol{r}\\times\\boldsymbol{\\Omega}}+2m\\boldsymbol{v}_S\\times\\boldsymbol{\\Omega}+m(\\boldsymbol{\\Omega}\\times\\boldsymbol{r})\\times\\boldsymbol{\\Omega},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which is what we wanted to demostrate. We have the Coriolis force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Coriolis}}=2m\\boldsymbol{v}_S\\times\\boldsymbol{\\Omega},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "while the last term is the standard centrifugal force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Centrifugal}}=m\\left(\\boldsymbol{\\Omega}\\times\\boldsymbol{r}\\right)\\times\\boldsymbol{\\Omega}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In our discussions below we will assume that the angular acceleration of the rotating frame is zero and focus only on the Coriolis force and the centrifugal force.\n", + "\n", + "\n", + "\n", + "### Effective potential and Centrifugal force\n", + "\n", + "Suppose we can ignore the Coriolis force. If we focus only on the\n", + "centrifugal force we have an additional force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Centrifugal}}=m\\left(\\boldsymbol{\\Omega}\\times\\boldsymbol{r}\\right)\\times\\boldsymbol{\\Omega},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the term $\\boldsymbol{\\Omega}\\times\\boldsymbol{r}$ is the radial velocity.\n", + "\n", + "Consider now an object with position $\\boldsymbol{r}$ according to an observer in a frame\n", + "rotating about the $z$ axis with angular velocity\n", + "$\\boldsymbol{\\Omega}=\\Omega\\hat{z}$. To an observer in the inertial frame\n", + "the vector will change even if the vector appears\n", + "fixed to the rotating observer.\n", + "\n", + "\n", + "If $\\boldsymbol{\\Omega}$ is in the $z$ direction,\n", + "the centrifugal force becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\boldsymbol{F}_{\\mathrm{Centrifugal}}=m\\Omega^2(x\\hat{x}+y\\hat{y}).\n", + "\\label{_auto2} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The centrifugal force points outward in the $x-y$ plane, and its\n", + "magnitude is $m\\Omega^2r$, where\n", + "$r=\\sqrt{x^2+y^2}$.\n", + "\n", + "Continuing along these lines, \n", + "if we define a rotating frame which makes an angle $\\theta$ with the inertial frame and define the distance to an object in this frame from the origin as $\\boldsymbol{r}$, then the centrifugal force (which points outward) has as magnitude $\\Omega^2r\\sin{\\theta}$. Defining $\\rho=r\\sin{\\theta}$ and the unit vector $\\hat{\\boldsymbol{\\rho}}$ (see figure here)\n", + "\n", + "\n", + "\n", + "

    \n", + "\n", + "\n", + "\n", + "\n", + "we have the well-known expression for the centrifugal force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Centrifugal}}=m\\Omega^2\\rho\\hat{\\boldsymbol{\\rho}},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and with the velocity given by its magnitude $v=\\Omega\\rho$ we obtain the well-known expression for the centrifugal force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Centrifugal}}=m\\frac{v^2}{\\rho}{\\boldsymbol{\\rho}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we now go back again to our falling object discussed in the\n", + "beginning of these lectures, we need to modify for the fact that the Earth\n", + "is rotating with respect to the falling object.\n", + "\n", + "Seen from a rotating coordinate system we have now that the forces acting on the falling object are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\ddot{\\boldsymbol{r}}=\\boldsymbol{F}_{\\mathrm{gravity}}+\\boldsymbol{F}_{\\mathrm{Centrifugal}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we define the mass of Earth as $M$ and its radius as $R$ and assuming that the object is close to the Earth, the gravitational force takes then well-known expression" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{gravity}}=-\\frac{GMm}{R^2}\\hat{\\boldsymbol{r}}=m\\boldsymbol{g}_0.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inserting the expression for the centrifugal force, we can then define an effective force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{eff}}=\\boldsymbol{F}_{\\mathrm{gravity}}+\\boldsymbol{F}_{\\mathrm{Centrifugal}}=m\\boldsymbol{g}_0-m\\Omega^2R\\sin{(\\theta)}\\hat{\\boldsymbol{\\rho}},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and with" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{g}_{\\mathrm{eff}}=\\boldsymbol{g}_0-\\Omega^2R\\sin{(\\theta)}\\hat{\\boldsymbol{\\rho}},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{eff}}=m\\boldsymbol{g}_{\\mathrm{eff}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the rotating coordinate system (not an inertial frame), motion is\n", + "thus determined by an apparent force and one can define effective\n", + "potentials. In addition to the normal gravitational potential energy,\n", + "there is a contribution to the effective potential," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\delta V_{\\rm eff}(r)=-\\frac{m}{2}\\Omega^2r^2=-\\frac{m}{2}r^2\\Omega^2\\sin^2\\theta,\n", + "\\label{_auto3} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\theta$ is the polar angle, measured from say the north\n", + "pole. If the true gravitational force can be considered as originating\n", + "from a point in Earth's center, the net effective potential for a mass\n", + "$m$ near Earth's surface could be (a distance $h$)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "V_{\\rm eff}=mgh-m\\frac{1}{2}\\Omega^2(R+h)^2\\sin^2\\theta.\n", + "\\label{_auto4} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As an example, let us ask ourselves how much wider is Earth at the\n", + "equator than the north-south distance between the poles assuming that\n", + "the gravitational field above the surface can be approximated by that\n", + "of a point mass at Earth's center.\n", + "\n", + "\n", + "The surface of the ocean must be at constant effective potential for a\n", + "sample mass $m$. This means that if $h$ now refers to the height of\n", + "the water" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m g[h(\\theta=\\pi/2)-h(\\theta=0)]=\\frac{m}{2}\\Omega^2(R+h)^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because $R>>h$, one can approximate $R+h\\rightarrow R$ on the right-hand side, thus" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "h(\\theta=\\pi)-h(\\theta=0)=\\frac{\\Omega^2R^2}{2g}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This come out a bit less than 11 km, or a difference of near 22 km for\n", + "the diameter of the Earth in the equatorial plane compared to a\n", + "diameter between the poles. In reality, the difference is\n", + "approximately 41 km. The discrepancy comes from the assumption that\n", + "the true gravitational force can be treated as if it came from a point\n", + "at Earth's center. This would be true if the distribution of mass was\n", + "radially symmetric. However, Earth's center is molten and the rotation\n", + "distorts the mass distribution. Remarkably this effect nearly doubles\n", + "the elliptic distortion of Earth's shape. Due to this distortion, the\n", + "top of Mount Everest is not the furthest point from the center of the\n", + "Earth. That belongs to the top of a volcano, Chimborazo, in Equador,\n", + "which is one degree in latitude below the Equator. Chimborazo is about\n", + "8500 ft lower than Everest when measured relative to sea level, but is\n", + "7700 feet further from the center of the Earth.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Coriolis Force and Falling Objects\n", + "\n", + "The Coriolis force is given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Coriolis}}=2m\\boldsymbol{v}_S\\times\\boldsymbol{\\Omega},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It does not enter problems like the shape of the Earth\n", + "above because in that case the water was not moving relative to the\n", + "rotating frame. \n", + "\n", + "The Coriolis force is non-zero only if $\\boldsymbol{v}_S\\ne 0$ and is directed\n", + "perpendicular to both $\\boldsymbol{v}_S$ and $\\Omega$. Viewed along the\n", + "direction of $\\boldsymbol{v}_S$, the Coriolis force associated with\n", + "counter-clockwise rotational motion produces a deflection to the\n", + "right. For clockwise rotational motion, it produces a deflection to\n", + "the left.\n", + "\n", + "The Coriolis force associated with Earth’s rotational motion is\n", + "responsible for the circulating or cyclonic weather patterns\n", + "associated with hurricanes and cyclones, as illustrated in the figure\n", + "here. Basically, a pressure gradient gives rise to air currents that\n", + "tend to flow from high pressure to low pressure regions. But as the\n", + "air flows toward the low pressure region, the Coriolis force deflects\n", + "the air currents away from their straight line paths. Since the\n", + "projection of $\\Omega$ perpendicular to the local tangent plane\n", + "changes sign as one crosses the equator, the direction of the cyclonic\n", + "motion (either counter-clockwise or clockwise) is different in the\n", + "Northern and Southern hemispheres.\n", + "\n", + "\n", + "\n", + "

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "As an example, assume a ball is dropped from a height $h=500$m above Minneapolis. Due to the\n", + "Coriolis force, it is deflected by an amount $\\delta x$ and $\\delta\n", + "y$. We want to find the deflection due to the Coriolis force. Here we ignore the centrifugal terms.\n", + "\n", + "The equations of motion are:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\frac{dv_x}{dt}&=&-2(\\Omega_yv_z-\\Omega_zv_y),\\\\\n", + "\\frac{dv_y}{dt}&=&-2(\\Omega_zv_x-\\Omega_xv_z),\\\\\n", + "\\frac{dv_z}{dt}&=&-g-2(\\Omega_xv_y-\\Omega_yv_x),\\\\\n", + "\\Omega_z&=&\\Omega\\cos\\theta,~~~\\Omega_y=\\Omega\\sin\\theta,~~~\\Omega_x=0.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here the coordinate system is $\\hat{x}$ and points east, $\\hat{y}$ points\n", + "north and $\\hat{z}$ points upward.\n", + "\n", + "One can now ignore all the Coriolis terms on the right-hand sides\n", + "except for those with $v_z$. The other terms will all be doubly\n", + "small. One can also throw out terms with $\\Omega_x$. This gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\frac{dv_x}{dt}&\\approx& -2\\Omega v_z\\sin\\theta,\\\\\n", + "\\frac{dv_y}{dt}&\\approx& 0,\\\\\n", + "\\frac{dv_z}{dt}&\\approx& -g.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There will be no significant deflection in the $y$ direction, $\\delta\n", + "y=0$, but in the $x$ direction one can substitute $v_z=-gt$ above," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "v_x&\\approx&\\int_0^t dt'~2\\Omega gt'\\sin\\theta=\\Omega gt^2\\sin\\theta,\\\\\n", + "\\delta x&\\approx& \\int_0^t dt'~v_x(t')=\\frac{g\\Omega\\sin\\theta t^3}{3}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One can find the deflections by using $h=\\frac{1}{2}gt^2$, to find the\n", + "time, and using the all-knowing internet to see that the latitude of\n", + "Minneapolis is $44.6^\\circ$ or $\\theta=45.4^\\circ$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "t&=&\\sqrt{2h/g}=10.1~{\\rm s},\\\\\n", + "\\Omega&=&\\frac{2\\pi}{3600\\cdot 24~{\\rm s}}=7.27\\times 10^{-5}~{\\rm s}^{-1},\\\\\n", + "\\delta x&=&17.4~{\\rm cm}~~{\\rm(east)}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Accelerating and Rotating Frames\n", + "\n", + "It is now simple to bring together the equations for an accelerating and rotating frame. Using our results we have the equations of motion for an object in an accelerating and rotating frame with respect to an inertial frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\ddot{\\boldsymbol{r}}_{S}=\\boldsymbol{F}+m\\boldsymbol{r}\\times\\dot{\\boldsymbol{\\Omega}}+2m\\boldsymbol{v}_S\\times\\boldsymbol{\\Omega}+m\\left(\\boldsymbol{\\Omega}\\times\\boldsymbol{r}\\right)\\times\\boldsymbol{\\Omega}-\\boldsymbol{a}_{S_0},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the last term is the acceleration of the accelerating frame seen from the inertial frame.\n", + "\n", + "\n", + "## The Foucault Pendulum\n", + "\n", + "\n", + "\n", + "The [Foucault\n", + "Pendulum](https://en.wikipedia.org/wiki/Foucault_pendulum) is simply\n", + "a regular pendulum moving in both horizontal directions, and with the\n", + "Coriolis force included. It is explained at its simplest if we\n", + "consider a pendulum positioned at the North pole. Foucault's\n", + "experiment was actually the first laboratory demonstration that the\n", + "Earth is rotating. The experiment is rather simple and many physics\n", + "department worldwide have their own pendulum.\n", + "\n", + "In the original experiment done in Paris in 1851, Foucault used a\n", + "massive pendulum of 28kg and 67m long.\n", + "\n", + "If use an inertial frame with the North pole as its origin, the Earth\n", + "below the pendulum rotates with a period of 24h (actually 23h and\n", + "56min). Seen with respect to the surface of the Earth, the plane of\n", + "the pendulum moves in the opposite direction of the rotation of the Earth.\n", + "\n", + "If we were to perform the experiment in other places, the setup is slightly more complicated since the pendulum will then rotate with the Earth. The net effect is a slower rotation compared to North pole.\n", + "\n", + "\n", + "\n", + "\n", + "

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Let us look at the equations we need to solve." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "m\\ddot{\\boldsymbol{r}}&=&\\boldsymbol{T}+m\\boldsymbol{g}-2m\\boldsymbol{\\Omega}\\times\\boldsymbol{v},\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "as the centrifugal force term is absorbed into the definition of\n", + "$\\boldsymbol{g}$. The magnitude of the tension, $\\boldsymbol{T}$, is considered\n", + "constant because we consider only small oscillations. Then $T\\approx mg$, and the components, using $\\hat{x},\\hat{y}$ to correspond to east\n", + "and north respectively, are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "T_x=-mgx/L,~~~T_y=-mgy/L. \n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If $\\Omega$ is the rotation of the earth, and if $\\theta$ is the polar angle, $\\pi$-latitude," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\ddot{x}&=&-gx/L+2\\dot{y}\\Omega_z,\\\\\n", + "\\ddot{y}&=&-gy/L-2\\dot{x}\\Omega_z.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we have used the fact that the oscillations are sufficiently\n", + "small so we can ignore $v_z$. Using $\\Omega_0\\equiv\\sqrt{k/m}$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\ddot{x}-2\\Omega_z\\dot{y}+\\Omega_0^2x&=&0\\\\\n", + "\\ddot{y}+2\\Omega_z\\dot{x}+\\Omega_0^2y&=&0,\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\Omega_z=|\\boldsymbol{\\Omega}|\\cos\\theta$, with $\\theta$ being the\n", + "polar angle (zero at the north pole). The terms linear in time\n", + "derivatives are what make life difficult. This will be solved with a\n", + "trick. We will incorporate both differential equations into a single\n", + "complex equation where the first/second are the real/imaginary parts." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\eta\\equiv x+iy,\\\\\n", + "\\ddot{\\eta}+2i\\Omega_z\\dot{\\eta}+\\Omega_0^2\\eta&=&0. \n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we guess at a form for the solutions, $\\eta(t)=e^{-i\\alpha t}$,\n", + "which turns the differential equation into" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "-\\alpha^2+2\\Omega_z\\alpha+\\Omega_0^2&=&0,\\\\\n", + "\\alpha&=&\\Omega_z\\pm \\sqrt{\\Omega_z^2+\\Omega_0^2},\\\\\n", + "&\\approx&\\Omega_z\\pm \\Omega_0.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The solution with two arbitrary constants is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\eta&=&e^{-i\\Omega_zt}\\left[C_1e^{i\\Omega_0t}+C_2e^{-i\\Omega_0t}\\right].\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, $C_1$ and $C_2$ are complex, so they actually represent four\n", + "arbitrary numbers. These four numbers should be fixed by the four\n", + "initial conditions, i.e. $x(t=0), \\dot{x}(t=0), y(t=0)$ and\n", + "$\\dot{y}(t=0)$. With some lengthy algebra, one can rewrite the\n", + "expression as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray*}\n", + "\\label{eq:precmess} \\tag{5}\n", + "\\eta&=&e^{-i\\Omega_zt}\\left[A\\cos(\\Omega_0t+\\phi_A)+iB\\cos(\\Omega_0t+\\phi_B)\\right].\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, the four coefficients are represented by the two real arbitrary\n", + "real amplitudes, $A$ and $B$, and two arbitrary phases, $\\phi_A$ and\n", + "$\\phi_B$. For an initial condition where $y=0$ at $t=0$, one can see\n", + "that $B=0$. This then gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\eta(t)&=&Ae^{-i\\Omega_zt}\\cos(\\Omega_0t+\\gamma)\\\\\n", + "\\nonumber\n", + "&=&A\\cos\\Omega_zt\\cos(\\Omega_0t+\\gamma)+iA\\sin\\Omega_zt\\cos(\\Omega_0t+\\gamma).\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Translating into $x$ and $y$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x&=&A\\cos\\Omega_zt\\cos(\\Omega_0t+\\gamma),\\\\\n", + "\\nonumber\n", + "y&=&A\\sin\\Omega_zt\\cos(\\Omega_0t+\\gamma).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Assuming the pendulum's frequency is much higher than Earth's\n", + "rotational frequency, $\\Omega_0>>\\Omega_z$, one can see that the plane\n", + "of the pendulum simply precesses with angular velocity\n", + "$\\Omega_z$. This means that in this limit the pendulum oscillates only\n", + "in the $x$-direction with frequency many times before the phase\n", + "$\\Omega_zt$ becomes noticeable. Eventually, when $\\Omega_zt=\\pi/2$,\n", + "the motion is along the $y$-direction. If you were at the north pole,\n", + "the motion would switch from the $x$-direction to the $y$ direction\n", + "every 6 hours. Away from the north pole, $\\Omega_z\\ne|\\boldsymbol{\\Omega}|$\n", + "and the precession frequency is less. At the equator it does not\n", + "precess at all. If one were to repeat for the solutions where $A=0$\n", + "and $B\\ne 0$, one would look at motions\n", + "that started in the $y$-direction, then precessed toward the $-x$\n", + "direction. Linear combinations of the two sets of solutions give\n", + "pendulum motions that resemble ellipses rather than simple\n", + "back-and-forth motion.\n", + "\n", + "## Euler's Theorem from a Linear Algebra Perspective\n", + "\n", + "**this material will be added soon**" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/content.md b/doc/src/LectureNotes/testbook/_build/html/_sources/content.md new file mode 100644 index 000000000..0f6aca77a --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/content.md @@ -0,0 +1,5 @@ +Content in Jupyter Book +======================= + +There are many ways to write content in Jupyter Book. This short section +covers a few tips for how to do so. diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/intro.md b/doc/src/LectureNotes/testbook/_build/html/_sources/intro.md new file mode 100644 index 000000000..f601a11cd --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/intro.md @@ -0,0 +1,180 @@ +# PHY321, Classical Mechanics I, Michigan State University, Spring 2021 + +Here you will find a general overview of the course, with learning outcomes, teaching schedule etc. + +## Teaching team, grading and other practicalities + +| Lectures | | | Location | +|---------|----|----|----| +| Monday 3:00-3:50pm| Wednesday 3:00-3:50pm | Friday 3:00-3:50pm | Room 1420 BPS | + + +| Instructor | Email | Office | Office phone/cellphone | +|--------------|------|-----|----| +| _Morten Hjorth-Jensen_ https://github.com/mhjensen | hjensen@msu.edu | Office: NSCL/FRIB 2131 | 5179087290/5172491375/+47-48257387 | + + + +| Office Hours| | +|----------|----------| +| Monday/Wednesday 4-5:00pm, Room 2131 NSCL/FRIB | or immediately after class | + +| Homework Grader | Email | +|--------------|------| +| _Julie Butler_ | butler@frib.msu.edu | + +| Office Hours Julie Butler | +|------------------| +| TBA | | + +| Learning Assistant | Email | +|--------------|------| +| _Jeremy Rebenstock_ | | + +| Office Hours TBA | | +|----------|----------| +| | | + + +| Additional Class | Location | +|---|----| +| Wednesday 5:00-6pm | Room 1400 BPS | + + + +### Grading and dates + +| Activity | Percentage of total score | +|------|-----| +|Homeworks, 9 in total and due Mondays the week after | 20% | +| First Midterm Project, due Wednesday March 11 | 25% | +| Second Midterm Project, due Friday April 17| 25% | +| Final Exam project, due May 1 | 30% | +| Extra Credit Assignment, hw10, (Due Friday April 24)| 10% | + +| Grading scale | | | | | | | +|-----|-----|-------|------|--------|--------|--------| +| 4.0(90%)| 3.5(80%)| 3.0(70%)| 2.5(60%)| 2.0(50%)| 1.5(40%)| 1.0(30%)| + +## Possible textbooks and lecture notes + +_Recommended textbook_: +- JRT: John R. Taylor, Classical Mechanics (Univ. Sci. Books 2005), https://www.uscibooks.com/taylor2.htm, see also https://github.com/mhjensen/Physics321/tree/master/doc/Literature +_Additional textbooks_: +- AMS: Anders Malthe-Sørenssen, Elementary Mechanics using Python (Springer 2015), https://www.springer.com/gp/book/9783319195957 and https://github.com/mhjensen/Physics321/tree/master/doc/Literature +- _Lecture notes_: Posted lecture notes are in the doc/pub folder here or at https://mhjensen.github.io/Physics321/doc/web/course.html for easier viewing. They are not meant to be a replacement for textbook. These notes are updated on a weekly basis and a _git pull_ should thus always give you the latest update. + +## Teaching schedule with links to material (This will be updated asap) +Weekly mails (Wednesdays or Thursdays) with updates, plans for lectures etc will sent to everybody. We use also Piazza as a discussion forum. Please use this sign-up link piazza.com/msu/spring2020/phy321. The class link is piazza.com/msu/spring2020/phy321/home +### Week 2, January 6-10, 2020 +- Monday: Introduction to the course and start discussion of vectors, space, time and motion, JRT chapter 1.2 and lecture notes (https://mhjensen.github.io/Physics321/doc/pub/Introduction/html/Introduction.html) +- Wednesday: More on time,space, vectors and motion, JRT 1.2 and 1.3, AMS chapters 2 and 4 and lecture notes (https://mhjensen.github.io/Physics321/doc/pub/Introduction/html/Introduction.html), first homework available +- Friday: Forces and Newton's laws of motion. JRT chapter 1.4 and lecture notes (https://mhjensen.github.io/Physics321/doc/pub/Introduction/html/Introduction.html). Introduction to Git and GitHub and getting started with numerical exercises. Installing software (anaconda) and first homework due January 17. For solving exercise 7 in the first homework, AMS chapters 2 and 4 are very useful +- Solution to homeworks are in https://d2l.msu.edu/ +### Week 3, January 13-17, 2020 +- Monday: Motion and forces, Newton's laws, examples +- Wednesday: Motion and forces, Newton's laws, examples +- Friday: Motion and forces, Newton's laws, examples,2nd homework, due January 24 +- Solution to homeworks are in https://d2l.msu.edu/ +- Good reads are Taylor chapters 1.4, 1.5, 1.6, 2.1-2.4 and AMS chapters 4.2 and 5 +### Week 4, January 20-24, 2020 +- Monday: MLK day, no lectures +- Wednesday: Work and energy conservation +- Friday: Example of conservation laws and single-particle motion, 3rd homework, due January 31 +- Good reads are Taylor chapters 4.1-.4.3 and AMS chapters 10-12. +### Week 5, January 27-31, 2020 +- Monday: More on Conservation laws, momentum conservation +- Wednesday: Examples of applications of conservation laws, angular momentum conservation +- Friday: Conservation aws and further examples, 4th homework, due February 10 +- Good reads are Taylor chapter 4 and AMS chapters 10-14. +### Week 6, February 3-7, 2020 +- Monday: Conservation laws and discussion of 4th homework (exercises 6 and 7). Introducing the Velocity Verlet algorithm and the Earth Sun problem +- Wednesday: Examples of application of conservations laws (see chapter 4 of Taylor). +- Friday: Begin discussion of oscillations, and 5th homework, due February 17, paper and pencil can be handed in Friday the 21st at latest. +- Good reads are Taylor chapter 4 and AMS chapters 10-14 for the conservation laws and the first sections of chapter 5 of Taylor on oscillations. +### Week 7, February 10-14, 2020 +- Monday: Oscillations, mathematical detials, the sliding block and energy conservation +- Wednesday: Oscillations, damped motion and more mathematical details +- Friday: Oscillations, resonances and more on damped motion, 6th homework, due February 24 +- Good reads are chapter 5 of Taylor on oscillations. +### Week 8, February 17-21, 2020 +- Monday: Oscillations, driven oscillations and resonances +- Wednesday: Oscillation examples and numerical integration +- Friday: Fourier series and end of oscillation chapter _First midterm project, available Friday Feb 21 and due March 11, 2020_ +- Good reads are sections 5.5-5.8 of Taylor on oscillations. +### Week 9, February 24-28, 2020 +- Monday: Fourier series and oscillations +- Wednesday: Discussiom of first midterm and wrap up of oscillations part +- Friday: No lecture! +- Good reads are chapter 8 of Taylor and Lecture notes +### Week 10, March 2-6, 2020, Spring break +- Monday: No lectures, spring break +- Wednesday: No lectures, spring break +- Friday: No lectures, spring break +### Week 11, March 9-13, 2020 +- Monday: Gravity and central force problems, center of mass coordinates. Lecture notes and Taylor chapter 8. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesMarch9.pdf +- Wednesday: Discussion of first midterm. First midterm due Friday 13 +- Friday: Gravity and central force problems, centrifugal barriers. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesMarch13.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_wk9trq9k +### Week 12, March 16-20, 2020 +- Monday: Gravity and central force problems, elliptical orbits and Kepler's laws, 7th homework, due March 23. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesMarch16.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_t1pocrww +- Wednesday: Gravity and central force problems, elliptical orbits and two-body scattering examples. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesMarch18.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_i9hczn21 +- Friday: Elliptical orbits, examples and two-body scattering problems. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesMarch20.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_w9xc8az7 +### Week 13, March 23-27, 2020 +- Monday: Central force problems, summary and discussion of two-body scattering problems. 8th homework, due March 30. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesMarch23.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_t2l86862 +- Wednesday: Two-body scattering. Taylor chapter 14 covers parts of the material. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesMarch25.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_d70czgce +- Friday: Two-body scattering (Taylor chapter 14). PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesMarch27.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_e1cs5784 +### Week 14, March 30-April 3, 2020 +- Monday: Wrapping up two-body scattering and begin non-inertial frames. 9th homework, due April 6. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesMarch30.pdf and video of lecture https://mediaspace.msu.edu/media/t/0_tlsccwai +- Wednesday: Non-inertial frames, accelerating frames (Taylor sections 9.1-9.2). PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesApril1.pdf and video of lecture https://mediaspace.msu.edu/media/t/0_utc9il9y +- Friday: Rotating non-inertial frames and Coriolis force (Taylor sections 9.3-9.6). PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesApril3.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_2v439nza +### Week 15, April 6-10, 2020 +- Monday: Rotating non-inertial frames, Coriolis force and Foucalt's pendulum (Taylor sections 9.7-9.9). Second midterm available, due Fryday April 17. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesApril6.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_utivxb87 +- Wednesday: Variational calculus and the Euler-Lagrange equations, chapter 6 of Taylor and lecture notes. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesApril8.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_rz8vr2ht +- Friday: Euler-Lagrange equations and Lagrangian formalism. Taylor chapter 6 and lecture notes. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesApril10.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_j5ugthfg +### Week 16, April 13-17, 2020 +- Monday: Langrangian formalism, discussion of examples. Taylor chapters 6 and 7. 10th homework and extra assignments, due April 24. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesApril13.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_hxxec3uc +- Wednesday: Lagrangian formalism, constraints and Lagrangian multipliers and examples. These topics are covered by Taylor's sections 7.1,7.2, 7.3, 7.4. Sections 7.5-7.7 contain several nice examples while section 7.8 goes through conservation laws. The lecture notes cover many of these topics as well. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesApril15.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_2v2se359 +- Friday: Lagrangian Formalism, conservation laws and examples, from the classical pendulum to Foucault's pendulum. Taylor chapter 7 and lecture notes. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesApril17.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_ftgzt035 +### Week 17, April 20-24, 2020 +- Monday: Lagrangian formalism, conservation laws. Examples. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesApril20.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_b81t0tta +- Wednesday: Lagrangian formalim, examples such as the linear chain and double pendulum. PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesApril22.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_sp7p28vk +- Friday: Summary and discussions of final exam project. _Final exam project project, due May 1_ PDF file for notes https://github.com/mhjensen/Physics321/blob/master/doc/HandWrittenNotes/NotesApril24.pdf and video of lecture https://mediaspace.msu.edu/media/t/1_azwo1s2r +### Week 18, April 27- May 1, 2020, Finals week +- Final Exam: Due to the Corona virus the final exam will be a project similar to the two midterm projects. Deadline May 1. We will have questions sessions Monday 27 and Wednesday 29 at 2.30pm to 4pm. Other sessions can always be arranged. Just send Morten an email or a text. + + +## Learning outcomes + +After the course you should: + +- be able to analyze forces that act on objects, apply Newton’s laws to determine the equations of motion, and solve these analytically and numerically, +- Know about inertial frames and their relation to accelerating and rotating frames (non-inertial frames) +- Know about forces, work, energy, angular momentum, linear momentum and conservation laws +- Know about various types of motions, falling objects, objects moving in various fields +- Know how to analyze energy diagrams and defining effective potential +- Have knowledge about small oscillations, Harmonic oscillator potential and equations of motion +- Have knowledge about transformation of variables that allow for analytical solutions, example two-body problems +- Have knowledge about central forces and two-body problems, center-of-mass and relative coordinates as reference frame +- Have knowledge about two-body scattering problems, classical scattering cross section +- Have knowledge about Variational calculus and Lagrangian formalism +- Know how to derive the equations of motion from the Lagrangian formalism with and without constraints (Lagrangian multipliers) + +To solve many of these problems, we have through different projects and weekly exercises studied many systems numerically, from falling objects with and without friction/air resistance, small oscillations (harmonic oscillator), gravitational problems and other central force problems, rotations and the classical pendulum. To solve these systems, we have applied different algorithms for solving differential equations. These are +- Euler-Cromer and Velocity-Verlet as energy conserving algorithms (time-independent forces) +- Runge-Kutta family of algorithms for time-dependent forces +We have also, in connection with for example the work-energy theorem studied methods for evaluating integrals. These are +- Numerical integration using the Trapezoidal, midpoint and Simpson's rule. + +You should also have acquired skills in structuring a numerical project, as well as having developed a critical understanding of the pros and cons of the methods and an understanding of their limits and what can go wrong. Computing means solving scientific problems using computers. It covers numerical as well as symbolic computing. Computing is also about developing an understanding of the scientific process by enhancing algorithmic thinking when solving problems. Computing competence has +always been a central part of the science and engineering education. +In particular, some of the competences that are important in the development of your own understanding of +computations, we would like to emphasize +- derivation, verification, and implementation of algorithms +- understanding what can go wrong with algorithms +- overview of important, known algorithms for solving mechanics problems (To a extent large differential equations and integration) +- understanding how algorithms are used to solve mathematical problems +- Making science (your results) reproducible +- algorithmic thinking for gaining deeper insights about scientific problems + + + diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/CONDUCT.md b/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/CONDUCT.md new file mode 100644 index 000000000..3f5562bc9 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/CONDUCT.md @@ -0,0 +1,44 @@ + +# Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant, version 1.4](http://contributor-covenant.org/version/1/4). diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/CONTRIBUTING.md b/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/CONTRIBUTING.md new file mode 100644 index 000000000..aad4a6adc --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/CONTRIBUTING.md @@ -0,0 +1,56 @@ +# Contributing + +Contributions are welcome, and they are greatly appreciated! Every little bit +helps, and credit will always be given. You can contribute in the ways listed below. + +## Report Bugs + +Report bugs using GitHub issues. + +If you are reporting a bug, please include: + +* Your operating system name and version. +* Any details about your local setup that might be helpful in troubleshooting. +* Detailed steps to reproduce the bug. + +## Fix Bugs + +Look through the GitHub issues for bugs. Anything tagged with "bug" and "help +wanted" is open to whoever wants to implement it. + +## Implement Features + +Look through the GitHub issues for features. Anything tagged with "enhancement" +and "help wanted" is open to whoever wants to implement it. + +## Write Documentation + +LectureNotes could always use more documentation, whether as part of the +official LectureNotes docs, in docstrings, or even on the web in blog posts, +articles, and such. + +## Submit Feedback + +The best way to send feedback is to file an issue on GitHub. + +If you are proposing a feature: + +* Explain in detail how it would work. +* Keep the scope as narrow as possible, to make it easier to implement. +* Remember that this is a volunteer-driven project, and that contributions + are welcome :) + +## Get Started + +Ready to contribute? Here's how to set up `LectureNotes` for local development. + +1. Fork the repo on GitHub. +2. Clone your fork locally. +3. Install your local copy into a virtualenv, e.g., using `conda`. +4. Create a branch for local development and make changes locally. +5. Commit your changes and push your branch to GitHub. +6. Submit a pull request through the GitHub website. + +## Code of Conduct + +Please note that the LectureNotes project is released with a [Contributor Code of Conduct](CONDUCT.md). By contributing to this project you agree to abide by its terms. diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/README.md b/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/README.md new file mode 100644 index 000000000..63c66f58f --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/README.md @@ -0,0 +1,35 @@ +# LectureNotes + +Test book + +## Usage + +### Building the book + +If you'd like to develop on and build the LectureNotes book, you should: + +- Clone this repository and run +- Run `pip install -r requirements.txt` (it is recommended you do this within a virtual environment) +- (Recommended) Remove the existing `LectureNotes/_build/` directory +- Run `jupyter-book build LectureNotes/` + +A fully-rendered HTML version of the book will be built in `LectureNotes/_build/html/`. + +### Hosting the book + +The html version of the book is hosted on the `gh-pages` branch of this repo. A GitHub actions workflow has been created that automatically builds and pushes the book to this branch on a push or pull request to main. + +If you wish to disable this automation, you may remove the GitHub actions workflow and build the book manually by: + +- Navigating to your local build; and running, +- `ghp-import -n -p -f LectureNotes/_build/html` + +This will automatically push your build to the `gh-pages` branch. More information on this hosting process can be found [here](https://jupyterbook.org/publish/gh-pages.html#manually-host-your-book-with-github-pages). + +## Contributors + +We welcome and recognize all contributions. You can see a list of current contributors in the [contributors tab](https://github.com/mhjensen/lecturenotes/graphs/contributors). + +## Credits + +This project is created using the excellent open source [Jupyter Book project](https://jupyterbook.org/) and the [executablebooks/cookiecutter-jupyter-book template](https://github.com/executablebooks/cookiecutter-jupyter-book). diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/content.md b/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/content.md new file mode 100644 index 000000000..0f6aca77a --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/content.md @@ -0,0 +1,5 @@ +Content in Jupyter Book +======================= + +There are many ways to write content in Jupyter Book. This short section +covers a few tips for how to do so. diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/intro.md b/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/intro.md new file mode 100644 index 000000000..19ce5e005 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/intro.md @@ -0,0 +1,7 @@ +Welcome to your Jupyter Book +============================ + +This is a small sample book to give you a feel for how book content is +structured. + +Check out the content pages bundled with this sample book to get started. diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/markdown.md b/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/markdown.md new file mode 100644 index 000000000..785cabc7b --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/markdown.md @@ -0,0 +1,125 @@ +# Markdown Files + +Whether you write your book's content in Jupyter Notebooks (`.ipynb`) or +in regular markdown files (`.md`), you'll write in the same flavor of markdown +called **MyST Markdown**. + +## What is MyST? + +MyST stands for "Markedly Structured Text". It +is a slight variation on a flavor of markdown called "CommonMark" markdown, +with small syntax extensions to allow you to write **roles** and **directives** +in the Sphinx ecosystem. + +## What are roles and directives? + +Roles and directives are two of the most powerful tools in Jupyter Book. They +are kind of like functions, but written in a markup language. They both +serve a similar purpose, but **roles are written in one line**, whereas +**directives span many lines**. They both accept different kinds of inputs, +and what they do with those inputs depends on the specific role or directive +that is being called. + +### Using a directive + +At its simplest, you can insert a directive into your book's content like so: + +```` +```{mydirectivename} +My directive content +``` +```` + +This will only work if a directive with name `mydirectivename` already exists +(which it doesn't). There are many pre-defined directives associated with +Jupyter Book. For example, to insert a note box into your content, you can +use the following directive: + +```` +```{note} +Here is a note +``` +```` + +This results in: + +```{note} +Here is a note +``` + +In your built book. + +For more information on writing directives, see the +[MyST documentation](https://myst-parser.readthedocs.io/). + + +### Using a role + +Roles are very similar to directives, but they are less-complex and written +entirely on one line. You can insert a role into your book's content with +this pattern: + +``` +Some content {rolename}`and here is my role's content!` +``` + +Again, roles will only work if `rolename` is a valid role's name. For example, +the `doc` role can be used to refer to another page in your book. You can +refer directly to another page by its relative path. For example, the +role syntax `` {doc}`intro` `` will result in: {doc}`intro`. + +For more information on writing roles, see the +[MyST documentation](https://myst-parser.readthedocs.io/). + + +### Adding a citation + +You can also cite references that are stored in a `bibtex` file. For example, +the following syntax: `` {cite}`holdgraf_evidence_2014` `` will render like +this: {cite}`holdgraf_evidence_2014`. + +Moreover, you can insert a bibliography into your page with this syntax. +The `{bibliography}` directive must be used for all the `{cite}` roles to +render properly. +For example, if the references for your book are stored in `references.bib`, +then the bibliography is inserted with: + +```` +```{bibliography} references.bib +``` +```` + +Resulting in a rendered bibliography that looks like: + +```{bibliography} references.bib +``` + + +### Executing code in your markdown files + +If you'd like to include computational content inside these markdown files, +you can use MyST Markdown to define cells that will be executed when your +book is built. Jupyter Book uses *jupytext* to do this. + +First, add Jupytext metadata to the file. For example, to add Jupytext metadata +to this markdown page, run this command: + +``` +jupyter-book myst init markdown.md +``` + +Once a markdown file has Jupytext metadata in it, you can add the following +directive to run the code at build time: + +```` +```{code-cell} +print("Here is some code to execute") +``` +```` + +When your book is built, the contents of any `{code-cell}` blocks will be +executed with your default Jupyter kernel, and their outputs will be displayed +in-line with the rest of your content. + +For more information about executing computational content with Jupyter Book, +see [The MyST-NB documentation](https://myst-nb.readthedocs.io/). diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/notebooks.ipynb b/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/notebooks.ipynb new file mode 100644 index 000000000..4b8552023 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/lecturenotes/lecturenotes/notebooks.ipynb @@ -0,0 +1,122 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Content with notebooks\n", + "\n", + "You can also create content with Jupyter Notebooks. This means that you can include\n", + "code blocks and their outputs in your book.\n", + "\n", + "## Markdown + notebooks\n", + "\n", + "As it is markdown, you can embed images, HTML, etc into your posts!\n", + "\n", + "![](https://myst-parser.readthedocs.io/en/latest/_static/logo.png)\n", + "\n", + "You an also $add_{math}$ and\n", + "\n", + "$$\n", + "math^{blocks}\n", + "$$\n", + "\n", + "or\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\mbox{mean} la_{tex} \\\\ \\\\\n", + "math blocks\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "But make sure you \\$Escape \\$your \\$dollar signs \\$you want to keep!\n", + "\n", + "## MyST markdown\n", + "\n", + "MyST markdown works in Jupyter Notebooks as well. For more information about MyST markdown, check\n", + "out [the MyST guide in Jupyter Book](https://jupyterbook.org/content/myst.html),\n", + "or see [the MyST markdown documentation](https://myst-parser.readthedocs.io/en/latest/).\n", + "\n", + "## Code blocks and outputs\n", + "\n", + "Jupyter Book will also embed your code blocks and output in your book.\n", + "For example, here's some sample Matplotlib code:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib import rcParams, cycler\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "plt.ion()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Fixing random state for reproducibility\n", + "np.random.seed(19680801)\n", + "\n", + "N = 10\n", + "data = [np.logspace(0, 1, 100) + np.random.randn(100) + ii for ii in range(N)]\n", + "data = np.array(data).T\n", + "cmap = plt.cm.coolwarm\n", + "rcParams['axes.prop_cycle'] = cycler(color=cmap(np.linspace(0, 1, N)))\n", + "\n", + "\n", + "from matplotlib.lines import Line2D\n", + "custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4),\n", + " Line2D([0], [0], color=cmap(.5), lw=4),\n", + " Line2D([0], [0], color=cmap(1.), lw=4)]\n", + "\n", + "fig, ax = plt.subplots(figsize=(10, 5))\n", + "lines = ax.plot(data)\n", + "ax.legend(custom_lines, ['Cold', 'Medium', 'Hot']);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There is a lot more that you can do with outputs (such as including interactive outputs)\n", + "with your book. For more information about this, see [the Jupyter Book documentation](https://jupyterbook.org)." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.0" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/markdown.md b/doc/src/LectureNotes/testbook/_build/html/_sources/markdown.md new file mode 100644 index 000000000..c186497d2 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/markdown.md @@ -0,0 +1,125 @@ +# Markdown Files + +Whether you write your book's content in Jupyter Notebooks (`.ipynb`) or +in regular markdown files (`.md`), you'll write in the same flavor of markdown +called **MyST Markdown**. + +## What is MyST? + +MyST stands for "Markedly Structured Text". It +is a slight variation on a flavor of markdown called "CommonMark" markdown, +with small syntax extensions to allow you to write **roles** and **directives** +in the Sphinx ecosystem. + +## What are roles and directives? + +Roles and directives are two of the most powerful tools in Jupyter Book. They +are kind of like functions, but written in a markup language. They both +serve a similar purpose, but **roles are written in one line**, whereas +**directives span many lines**. They both accept different kinds of inputs, +and what they do with those inputs depends on the specific role or directive +that is being called. + +### Using a directive + +At its simplest, you can insert a directive into your book's content like so: + +```` +```{mydirectivename} +My directive content +``` +```` + +This will only work if a directive with name `mydirectivename` already exists +(which it doesn't). There are many pre-defined directives associated with +Jupyter Book. For example, to insert a note box into your content, you can +use the following directive: + +```` +```{note} +Here is a note +``` +```` + +This results in: + +```{note} +Here is a note +``` + +In your built book. + +For more information on writing directives, see the +[MyST documentation](https://myst-parser.readthedocs.io/). + + +### Using a role + +Roles are very similar to directives, but they are less-complex and written +entirely on one line. You can insert a role into your book's content with +this pattern: + +``` +Some content {rolename}`and here is my role's content!` +``` + +Again, roles will only work if `rolename` is a valid role's name. For example, +the `doc` role can be used to refer to another page in your book. You can +refer directly to another page by its relative path. For example, the +role syntax `` {doc}`intro` `` will result in: {doc}`intro`. + +For more information on writing roles, see the +[MyST documentation](https://myst-parser.readthedocs.io/). + + +### Adding a citation + +You can also cite references that are stored in a `bibtex` file. For example, +the following syntax: `` {cite}`holdgraf_evidence_2014` `` will render like +this: {cite}`holdgraf_evidence_2014`. + +Moreoever, you can insert a bibliography into your page with this syntax: +The `{bibliography}` directive must be used for all the `{cite}` roles to +render properly. +For example, if the references for your book are stored in `references.bib`, +then the bibliography is inserted with: + +```` +```{bibliography} references.bib +``` +```` + +Resulting in a rendered bibliography that looks like: + +```{bibliography} references.bib +``` + + +### Executing code in your markdown files + +If you'd like to include computational content inside these markdown files, +you can use MyST Markdown to define cells that will be executed when your +book is built. Jupyter Book uses *jupytext* to do this. + +First, add Jupytext metadata to the file. For example, to add Jupytext metadata +to this markdown page, run this command: + +``` +jupyter-book myst init markdown.md +``` + +Once a markdown file has Jupytext metadata in it, you can add the following +directive to run the code at build time: + +```` +```{code-cell} +print("Here is some code to execute") +``` +```` + +When your book is built, the contents of any `{code-cell}` blocks will be +executed with your default Jupyter kernel, and their outputs will be displayed +in-line with the rest of your content. + +For more information about executing computational content with Jupyter Book, +see [The MyST-NB documentation](https://myst-nb.readthedocs.io/). diff --git a/doc/src/LectureNotes/testbook/_build/html/_sources/notebooks.ipynb b/doc/src/LectureNotes/testbook/_build/html/_sources/notebooks.ipynb new file mode 100644 index 000000000..b33ee373d --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_sources/notebooks.ipynb @@ -0,0 +1,122 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Content with notebooks\n", + "\n", + "You can also create content with Jupyter Notebooks. This means that you can include\n", + "code blocks and their outputs in your book.\n", + "\n", + "## Markdown + notebooks\n", + "\n", + "As it is markdown, you can embed images, HTML, etc into your posts!\n", + "\n", + "![](https://myst-parser.readthedocs.io/en/latest/_static/logo.png)\n", + "\n", + "You an also $add_{math}$ and\n", + "\n", + "$$\n", + "math^{blocks}\n", + "$$\n", + "\n", + "or\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\mbox{mean} la_{tex} \\\\ \\\\\n", + "math blocks\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "But make sure you \\$Escape \\$your \\$dollar signs \\$you want to keep!\n", + "\n", + "## MyST markdown\n", + "\n", + "MyST markdown works in Jupyter Notebooks as well. For more information about MyST markdown, check\n", + "out [the MyST guide in Jupyter Book](https://jupyterbook.org/content/myst.html),\n", + "or see [the MyST markdown documentation](https://myst-parser.readthedocs.io/en/latest/).\n", + "\n", + "## Code blocks and outputs\n", + "\n", + "Jupyter Book will also embed your code blocks and output in your book.\n", + "For example, here's some sample Matplotlib code:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib import rcParams, cycler\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "plt.ion()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Fixing random state for reproducibility\n", + "np.random.seed(19680801)\n", + "\n", + "N = 10\n", + "data = [np.logspace(0, 1, 100) + np.random.randn(100) + ii for ii in range(N)]\n", + "data = np.array(data).T\n", + "cmap = plt.cm.coolwarm\n", + "rcParams['axes.prop_cycle'] = cycler(color=cmap(np.linspace(0, 1, N)))\n", + "\n", + "\n", + "from matplotlib.lines import Line2D\n", + "custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4),\n", + " Line2D([0], [0], color=cmap(.5), lw=4),\n", + " Line2D([0], [0], color=cmap(1.), lw=4)]\n", + "\n", + "fig, ax = plt.subplots(figsize=(10, 5))\n", + "lines = ax.plot(data)\n", + "ax.legend(custom_lines, ['Cold', 'Medium', 'Hot']);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There is a lot more that you can do with outputs (such as including interactive outputs)\n", + "with your book. For more information about this, see [the Jupyter Book documentation](https://jupyterbook.org)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.0" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/src/LectureNotes/testbook/_build/html/_static/basic.css b/doc/src/LectureNotes/testbook/_build/html/_static/basic.css new file mode 100644 index 000000000..0c5300c2c --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_static/basic.css @@ -0,0 +1,855 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 270px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0.5em; + content: ":"; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class|="highlight"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +div[class^="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/_static/clipboard.min.js b/doc/src/LectureNotes/testbook/_build/html/_static/clipboard.min.js new file mode 100644 index 000000000..02c549e35 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.4 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n
    + ${messages[locale]['copy_to_clipboard']} + ` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true) { + + var regexp; + var match; + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match) { + promptFound = true + if (removePrompts) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + } else { + if (!onlyCopyPromptLines) { + outputLines.push(line) + } + } + } + + // If no lines with the prompt were found then just use original lines + if (promptFound) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + return formatCopyText(target.innerText, '', false, true, true) +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy_success']) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/_static/copybutton_funcs.js b/doc/src/LectureNotes/testbook/_build/html/_static/copybutton_funcs.js new file mode 100644 index 000000000..57caa5585 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_static/copybutton_funcs.js @@ -0,0 +1,47 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true) { + + var regexp; + var match; + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match) { + promptFound = true + if (removePrompts) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + } else { + if (!onlyCopyPromptLines) { + outputLines.push(line) + } + } + } + + // If no lines with the prompt were found then just use original lines + if (promptFound) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/doc/src/LectureNotes/testbook/_build/html/_static/css/index.css b/doc/src/LectureNotes/testbook/_build/html/_static/css/index.css new file mode 100644 index 000000000..074ae0054 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_static/css/index.css @@ -0,0 +1,6 @@ +@import url(https://fonts.googleapis.com/css?family=Open+Sans:400|Lato:400);/*! + * Bootstrap v4.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;line-height:1.5;color:#212529;text-align:left}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;background-color:transparent}a:hover{color:#0056b3}a:not([href]),a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1400px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1400px}}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success.focus,.btn-success:focus,.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info.focus,.btn-info:focus,.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light.focus,.btn-light:focus,.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 0%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.5em + .75rem + 2px);font-weight:400;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0,0,0,0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(255,255,255,0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress,.progress-bar{display:flex;overflow:hidden}.progress-bar{flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal .list-group-item.active{margin-top:0}.list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm .list-group-item.active{margin-top:0}.list-group-horizontal-sm .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md .list-group-item.active{margin-top:0}.list-group-horizontal-md .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg .list-group-item.active{margin-top:0}.list-group-horizontal-lg .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl .list-group-item.active{margin-top:0}.list-group-horizontal-xl .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush .list-group-item{border-right-width:0;border-left-width:0;border-radius:0}.list-group-flush .list-group-item:first-child{border-top-width:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.85714%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}html{font-size:15px}body{background-color:#fff;font-family:Lato,sans-serif;font-weight:400;line-height:1.65;color:#333;padding-top:75px}p{margin-bottom:1.15rem;font-size:1em}p.rubric{border-bottom:1px solid #c9c9c9}a{color:#005b81;text-decoration:none}a:hover{color:#e32e00;text-decoration:underline}a.headerlink{color:#c60f0f;font-size:.8em;padding:0 4px;text-decoration:none}a.headerlink:hover{background-color:#c60f0f;color:#fff}.header-style,h1,h2,h3,h4,h5,h6{margin:2.75rem 0 1.05rem;font-family:Open Sans,sans-serif;font-weight:400;line-height:1.15}.header-style:before,h1:before,h2:before,h3:before,h4:before,h5:before,h6:before{display:block;content:"";height:80px;margin:-80px 0 0}h1{margin-top:0;font-size:2.488em}h1,h2{color:#130654}h2{font-size:2.074em}h3{font-size:1.728em}h4{font-size:1.44em}h5{font-size:1.2em}h6{font-size:1em}.text_small,small{font-size:.833em}hr{border:0;border-top:1px solid #e5e5e5}pre{padding:10px;background-color:#fafafa;color:#222;line-height:1.2em;border:1px solid #c9c9c9;margin:1.5em 0;box-shadow:1px 1px 1px #d8d8d8}.navbar{position:fixed}.navbar-brand{position:relative;height:45px;width:auto}.navbar-brand img{max-width:100%;height:100%;width:auto}.navbar-light{background:#fff!important;box-shadow:0 .125rem .25rem 0 rgba(0,0,0,.11)}.navbar-nav li a{padding:0 15px}.navbar-nav>.active>.nav-link{font-weight:600;color:#130654!important}.navbar-header a{padding:0 15px}.admonition{width:95%;margin:1.5625em auto;padding:0 .6rem .8rem!important;overflow:hidden;page-break-inside:avoid;border-left:.2rem solid #007bff;border-radius:.1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .05rem rgba(0,0,0,.1);transition:color .25s,background-color .25s,border-color .25s}.admonition :last-child{margin-bottom:0}.admonition p.admonition-title~*{padding:0 1.4rem}.admonition>ol,.admonition>ul{margin-left:1em}.admonition .admonition-title{position:relative;margin:0 -.6rem!important;padding:.4rem .6rem .4rem 2rem;font-weight:700;background-color:rgba(68,138,255,.1)}.admonition .admonition-title:before{position:absolute;left:.6rem;width:1rem;height:1rem;color:#007bff;font-family:Font Awesome\ 5 Free;font-weight:900;content:""}.admonition .admonition-title+*{margin-top:.4em}.admonition.attention{border-color:#fd7e14}.admonition.attention .admonition-title{background-color:#ffedcc}.admonition.attention .admonition-title:before{color:#fd7e14;content:""}.admonition.caution{border-color:#fd7e14}.admonition.caution .admonition-title{background-color:#ffedcc}.admonition.caution .admonition-title:before{color:#fd7e14;content:""}.admonition.warning{border-color:#dc3545}.admonition.warning .admonition-title{background-color:#fdf3f2}.admonition.warning .admonition-title:before{color:#dc3545;content:""}.admonition.danger{border-color:#dc3545}.admonition.danger .admonition-title{background-color:#fdf3f2}.admonition.danger .admonition-title:before{color:#dc3545;content:""}.admonition.error{border-color:#dc3545}.admonition.error .admonition-title{background-color:#fdf3f2}.admonition.error .admonition-title:before{color:#dc3545;content:""}.admonition.hint{border-color:#ffc107}.admonition.hint .admonition-title{background-color:#fff6dd}.admonition.hint .admonition-title:before{color:#ffc107;content:""}.admonition.tip{border-color:#ffc107}.admonition.tip .admonition-title{background-color:#fff6dd}.admonition.tip .admonition-title:before{color:#ffc107;content:""}.admonition.important{border-color:#007bff}.admonition.important .admonition-title{background-color:#e7f2fa}.admonition.important .admonition-title:before{color:#007bff;content:""}.admonition.note{border-color:#007bff}.admonition.note .admonition-title{background-color:#e7f2fa}.admonition.note .admonition-title:before{color:#007bff;content:""}.deprecated{margin-bottom:10px;margin-top:10px;padding:7px;background-color:#ffe4e4;border:1px solid #f66}.deprecated p{display:inline}.topic{background-color:#eee}.seealso dd{margin-top:0;margin-bottom:0}.viewcode-back{font-family:Arial,sans-serif}.viewcode-block:target{background-color:#f4debf;border-top:1px solid #ac9;border-bottom:1px solid #ac9}table.field-list{border-collapse:separate;border-spacing:10px;margin-left:1px}table.field-list th.field-name{padding:1px 8px 1px 5px;white-space:nowrap;background-color:#eee}table.field-list td.field-body p{font-style:italic}table.field-list td.field-body p>strong{font-style:normal}table.field-list td.field-body blockquote{border-left:none;margin:0 0 .3em;padding-left:30px}.table.autosummary td:first-child{white-space:nowrap}.footer{width:100%;border-top:1px solid #ccc;padding-top:10px}.bd-search{position:relative;padding:1rem 15px;margin-right:-15px;margin-left:-15px}.bd-search .icon{position:absolute;color:#a4a6a7;left:25px;top:25px}.bd-search input{border-radius:0;border:0;border-bottom:1px solid #e5e5e5;padding-left:35px}.bd-toc{-ms-flex-order:2;order:2;height:calc(100vh - 2rem);overflow-y:auto}@supports (position:-webkit-sticky) or (position:sticky){.bd-toc{position:-webkit-sticky;position:sticky;top:5rem;height:calc(100vh - 5rem);overflow-y:auto}}.bd-toc .onthispage{color:#a4a6a7}.section-nav{padding-left:0;border-left:1px solid #eee;border-bottom:none}.section-nav ul{padding-left:1rem}.toc-entry,.toc-entry a{display:block}.toc-entry a{padding:.125rem 1.5rem;color:#77757a}@media (min-width:1200px){.toc-entry a{padding-right:0}}.toc-entry a:hover{color:rgba(0,0,0,.85);text-decoration:none}.bd-sidebar{padding-top:1em}@media (min-width:768px){.bd-sidebar{border-right:1px solid rgba(0,0,0,.1)}@supports (position:-webkit-sticky) or (position:sticky){.bd-sidebar{position:-webkit-sticky;position:sticky;top:76px;z-index:1000;height:calc(100vh - 4rem)}}}.bd-links{padding-top:1rem;padding-bottom:1rem;margin-right:-15px;margin-left:-15px}@media (min-width:768px){@supports (position:-webkit-sticky) or (position:sticky){.bd-links{max-height:calc(100vh - 9rem);overflow-y:auto}}}@media (min-width:768px){.bd-links{display:block!important}}.bd-sidenav{display:none}.bd-content{padding-top:20px}.bd-content .section{max-width:100%}.bd-content .section table{display:block;overflow:auto}.bd-toc-link{display:block;padding:.25rem 1.5rem;font-weight:600;color:rgba(0,0,0,.65)}.bd-toc-link:hover{color:rgba(0,0,0,.85);text-decoration:none}.bd-toc-item.active{margin-bottom:1rem}.bd-toc-item.active:not(:first-child){margin-top:1rem}.bd-toc-item.active>.bd-toc-link{color:rgba(0,0,0,.85)}.bd-toc-item.active>.bd-toc-link:hover{background-color:transparent}.bd-toc-item.active>.bd-sidenav{display:block}.bd-sidebar .nav>li>a{display:block;padding:.25rem 1.5rem;font-size:.9em;color:rgba(0,0,0,.65)}.bd-sidebar .nav>li>a:hover{color:#130654;text-decoration:none;background-color:transparent}.bd-sidebar .nav>.active:hover>a,.bd-sidebar .nav>.active>a{font-weight:600;color:#130654}.bd-sidebar .nav>li>ul{list-style:none;padding:.25rem 1.5rem}.bd-sidebar .nav>li>ul>li>a{display:block;padding:.25rem 1.5rem;font-size:.9em;color:rgba(0,0,0,.65)}.bd-sidebar .nav>li>ul>.active:hover>a,.bd-sidebar .nav>li>ul>.active>a{font-weight:600;color:#130654}.toc-h2{font-size:.85rem}.toc-h3{font-size:.75rem}.toc-h4{font-size:.65rem}.toc-entry>.nav-link.active{font-weight:600;color:#130654;background-color:transparent;border-left:2px solid #563d7c}.nav-link:hover{border-style:none}#navbar-main-elements li.nav-item i{font-size:.7rem;padding-left:2px;vertical-align:middle}.bd-toc .nav .nav{display:none}.bd-toc .nav>.active>ul{display:block}.prev-next-bottom{margin:20px 0}.prev-next-bottom a.left-prev,.prev-next-bottom a.right-next{padding:10px;border:1px solid rgba(0,0,0,.2);max-width:45%;overflow-x:hidden;color:rgba(0,0,0,.65)}.prev-next-bottom a.left-prev{float:left}.prev-next-bottom a.left-prev:before{content:"<< "}.prev-next-bottom a.right-next{float:right}.prev-next-bottom a.right-next:after{content:" >>"}.alert{padding-bottom:0}.alert-info a{color:#e83e8c}i.fab{vertical-align:middle;font-style:normal;font-size:1.5rem;line-height:1.25}i.fa-github-square:before{color:#333}i.fa-twitter-square:before{color:#55acee}.tocsection{border-left:1px solid #eee;padding:.3rem 1.5rem}.tocsection i{padding-right:.5rem}.editthispage{padding-top:2rem}.editthispage a{color:#130754} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/_static/doctools.js b/doc/src/LectureNotes/testbook/_build/html/_static/doctools.js new file mode 100644 index 000000000..daccd209d --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_static/doctools.js @@ -0,0 +1,315 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keydown(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' + && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/doc/src/LectureNotes/testbook/_build/html/_static/documentation_options.js b/doc/src/LectureNotes/testbook/_build/html/_static/documentation_options.js new file mode 100644 index 000000000..93b7c24d6 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_static/documentation_options.js @@ -0,0 +1,12 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '', + NAVIGATION_WITH_KEYS: true +}; \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/_static/file.png b/doc/src/LectureNotes/testbook/_build/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/html/_static/images/logo_binder.svg b/doc/src/LectureNotes/testbook/_build/html/_static/images/logo_binder.svg new file mode 100644 index 000000000..16390ee41 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_static/images/logo_binder.svg @@ -0,0 +1,19 @@ + + + + +logo + + + + + + + + diff --git a/doc/src/LectureNotes/testbook/_build/html/_static/images/logo_colab.png b/doc/src/LectureNotes/testbook/_build/html/_static/images/logo_colab.png new file mode 100644 index 0000000000000000000000000000000000000000..b7560ec216b2d1b6f77855525fe966c741833428 GIT binary patch literal 7601 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 diff --git a/doc/src/LectureNotes/testbook/_build/html/_static/jquery-3.5.1.js b/doc/src/LectureNotes/testbook/_build/html/_static/jquery-3.5.1.js new file mode 100644 index 000000000..50937333b --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/_static/jquery-3.5.1.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + +
    + + + +
    +
    +
    + +
    + +
    +

    Introduction

    +

    Classical mechanics is a topic which has been taught intensively over +several centuries. It is, with its many variants and ways of +presenting the educational material, normally the first real physics +course many of us meet and it lays the foundation for further physics +studies. Many of the equations and ways of reasoning about the +underlying laws of motion and pertinent forces, shape our approaches and understanding +of the scientific method and discourse, as well as the way we develop our insights +and deeper understanding about physical systems.

    +

    There is a wealth of +well-tested (from both a physics point of view and a pedagogical +standpoint) exercises and problems which can be solved +analytically. However, many of these problems represent idealized and +less realistic situations. The large majority of these problems are +solved by paper and pencil and are traditionally aimed +at what we normally refer to as continuous models from which we may find an analytical solution. As a consequence, +when teaching mechanics, it implies that we can seldomly venture beyond an idealized case +in order to develop our understandings and insights about the +underlying forces and laws of motion.

    +

    On the other hand, numerical algorithms call for approximate discrete +models and much of the development of methods for continuous models +are nowadays being replaced by methods for discrete models in science and +industry, simply because much larger classes of problems can be addressed with discrete models, often by simpler and more +generic methodologies.

    +

    As we will see below, when properly scaling the equations at hand, +discrete models open up for more advanced abstractions and the possibility to +study real life systems, with the added bonus that we can explore and +deepen our basic understanding of various physical systems

    +

    Analytical solutions are as important as before. In addition, such +solutions provide us with invaluable benchmarks and tests for our +discrete models. Such benchmarks, as we will see below, allow us +to discuss possible sources of errors and their behaviors. And +finally, since most of our models are based on various algorithms from +numerical mathematics, we have a unique oppotunity to gain a deeper +understanding of the mathematical approaches we are using.

    +

    With computing and data science as important elements in essentially +all aspects of a modern society, we could then try to define Computing as +solving scientific problems using all possible tools, including +symbolic computing, computers and numerical algorithms, and analytical +paper and pencil solutions. +Computing provides us with the tools to develope our own understanding of the scientific method by enhancing algorithmic thinking.

    +

    The way we will teach this course reflects +this definition of computing. The course contains both classical paper +and pencil exercises as well as computational projects and exercises. The +hope is that this will allow you to explore the physics of systems +governed by the degrees of freedom of classical mechanics at a deeper +level, and that these insights about the scientific method will help +you to develop a better understanding of how the underlying forces and +equations of motion and how they impact a given system. Furthermore, by introducing various numerical methods +via computational projects and exercises, we aim at developing your competences and skills about these topics.

    +

    These competences will enable you to

    +
      +
    • understand how algorithms are used to solve mathematical problems,

    • +
    • derive, verify, and implement algorithms,

    • +
    • understand what can go wrong with algorithms,

    • +
    • use these algorithms to construct reproducible scientific outcomes and to engage in science in ethical ways, and

    • +
    • think algorithmically for the purposes of gaining deeper insights about scientific problems.

    • +
    +

    All these elements are central for maturing and gaining a better understanding of the modern scientific process per se.

    +

    The power of the scientific method lies in identifying a given problem +as a special case of an abstract class of problems, identifying +general solution methods for this class of problems, and applying a +general method to the specific problem (applying means, in the case of +computing, calculations by pen and paper, symbolic computing, or +numerical computing by ready-made and/or self-written software). This +generic view on problems and methods is particularly important for +understanding how to apply available, generic software to solve a +particular problem.

    +

    However, verification of algorithms and understanding their limitations requires much of the classical knowledge about continuous models.

    +
    +

    A well-known examples to illustrate many of the above concepts

    +

    Before we venture into a reminder on Python and mechanics relevant applications, let us briefly outline some of the +abovementioned topics using an example many of you may have seen before in for example CMSE201. +A simple algorithm for integration is the Trapezoidal rule. +Integration of a function \(f(x)\) by the Trapezoidal Rule is given by following algorithm for an interval \(x \in [a,b]\)

    +
    +\[ +\int_a^b(f(x) dx = \frac{1}{2}\left [f(a)+2f(a+h)+\dots+2f(b-h)+f(b)\right] +O(h^2), +\]
    +

    where \(h\) is the so-called stepsize defined by the number of integration points \(N\) as \(h=(b-a)/(n)\). +Python offers an extremely versatile programming environment, allowing for +the inclusion of analytical studies in a numerical program. Here we show an +example code with the trapezoidal rule. We use also SymPy to evaluate the exact value of the integral and compute the absolute error +with respect to the numerically evaluated one of the integral +\(\int_0^1 dx x^2 = 1/3\). +The following code for the trapezoidal rule allows you to plot the relative error by comparing with the exact result. By increasing to \(10^8\) points one arrives at a region where numerical errors start to accumulate.

    +
    +
    +
    %matplotlib inline
    +
    +from math import log10
    +import numpy as np
    +from sympy import Symbol, integrate
    +import matplotlib.pyplot as plt
    +# function for the trapezoidal rule
    +def Trapez(a,b,f,n):
    +   h = (b-a)/float(n)
    +   s = 0
    +   x = a
    +   for i in range(1,n,1):
    +       x = x+h
    +       s = s+ f(x)
    +   s = 0.5*(f(a)+f(b)) +s
    +   return h*s
    +#  function to compute pi
    +def function(x):
    +    return x*x
    +# define integration limits
    +a = 0.0;  b = 1.0;
    +# find result from sympy
    +# define x as a symbol to be used by sympy
    +x = Symbol('x')
    +exact = integrate(function(x), (x, a, b))
    +# set up the arrays for plotting the relative error
    +n = np.zeros(9); y = np.zeros(9);
    +# find the relative error as function of integration points
    +for i in range(1, 8, 1):
    +    npts = 10**i
    +    result = Trapez(a,b,function,npts)
    +    RelativeError = abs((exact-result)/exact)
    +    n[i] = log10(npts); y[i] = log10(RelativeError);
    +plt.plot(n,y, 'ro')
    +plt.xlabel('n')
    +plt.ylabel('Relative error')
    +plt.show()
    +
    +
    +
    +
    +_images/chapter1_3_0.png +
    +
    +

    This example shows the potential of combining numerical algorithms with symbolic calculations, allowing us to

    +
      +
    • Validate and verify their algorithms.

    • +
    • Including concepts like unit testing, one has the possibility to test and test several or all parts of the code.

    • +
    • Validation and verification are then included naturally and one can develop a better attitude to what is meant with an ethically sound scientific approach.

    • +
    • The above example allows the student to also test the mathematical error of the algorithm for the trapezoidal rule by changing the number of integration points. The students get trained from day one to think error analysis.

    • +
    • With a Jupyter notebook you can keep exploring similar examples and turn them in as your own notebooks.

    • +
    +

    In this process we can easily bake in

    +
      +
    1. How to structure a code in terms of functions

    2. +
    3. How to make a module

    4. +
    5. How to read input data flexibly from the command line

    6. +
    7. How to create graphical/web user interfaces

    8. +
    9. How to write unit tests (test functions or doctests)

    10. +
    11. How to refactor code in terms of classes (instead of functions only)

    12. +
    13. How to conduct and automate large-scale numerical experiments

    14. +
    15. How to write scientific reports in various formats (LaTeX, HTML)

    16. +
    +

    The conventions and techniques outlined here will save you a lot of time when you incrementally extend software over time from simpler to more complicated problems. In particular, you will benefit from many good habits:

    +
      +
    1. New code is added in a modular fashion to a library (modules)

    2. +
    3. Programs are run through convenient user interfaces

    4. +
    5. It takes one quick command to let all your code undergo heavy testing

    6. +
    7. Tedious manual work with running programs is automated,

    8. +
    9. Your scientific investigations are reproducible, scientific reports with top quality typesetting are produced both for paper and electronic devices.

    10. +
    +
    +
    + + + + +
    + +
    +
    + + +
    + + +
    +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/chapter2.html b/doc/src/LectureNotes/testbook/_build/html/chapter2.html new file mode 100644 index 000000000..daf8a63fe --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/chapter2.html @@ -0,0 +1,1909 @@ + + + + + + + + + 1. Space, Time, Motion, Reference Frames and Reminder on vectors and other mathematical quantities — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + +
    +
    + +
    + +
    +

    1. Space, Time, Motion, Reference Frames and Reminder on vectors and other mathematical quantities

    +

    Our studies will start with the motion of different types of objects +such as a falling ball, a runner, a bicycle etc etc. It means that an +object’s position in space varies with time. +In order to study such systems we need to define

    +
      +
    • choice of origin

    • +
    • choice of the direction of the axes

    • +
    • choice of positive direction (left-handed or right-handed system of reference)

    • +
    • choice of units and dimensions

    • +
    +

    These choices lead to some important questions such as

    +
      +
    • is the physics of a system independent of the origin of the axes?

    • +
    • is the physics independent of the directions of the axes, that is are there privileged axes?

    • +
    • is the physics independent of the orientation of system?

    • +
    • is the physics independent of the scale of the length?

    • +
    +
    +

    1.1. Dimension, units and labels

    +

    Throughout this course we will use the standardized SI units. The standard unit for length is thus one meter 1m, for mass +one kilogram 1kg, for time one second 1s, for force one Newton 1kgm/s\(^2\) and for energy 1 Joule 1kgm\(^2\)s\(^{-2}\).

    +

    We will use the following notations for various variables (vectors are always boldfaced in these lecture notes):

    +
      +
    • position \(\boldsymbol{r}\), in one dimention we will normally just use \(x\),

    • +
    • mass \(m\),

    • +
    • time \(t\),

    • +
    • velocity \(\boldsymbol{v}\) or just \(v\) in one dimension,

    • +
    • acceleration \(\boldsymbol{a}\) or just \(a\) in one dimension,

    • +
    • momentum \(\boldsymbol{p}\) or just \(p\) in one dimension,

    • +
    • kinetic energy \(K\),

    • +
    • potential energy \(V\) and

    • +
    • frequency \(\omega\).

    • +
    +

    More variables will be defined as we need them.

    +

    It is also important to keep track of dimensionalities. Don’t mix this up with a chosen unit for a given variable. We mark the dimensionality in these lectures as \([a]\), where \(a\) is the quantity we are interested in. Thus

    +
      +
    • \([\boldsymbol{r}]=\) length

    • +
    • \([m]=\) mass

    • +
    • \([K]=\) energy

    • +
    • \([t]=\) time

    • +
    • \([\boldsymbol{v}]=\) length over time

    • +
    • \([\boldsymbol{a}]=\) length over time squared

    • +
    • \([\boldsymbol{p}]=\) mass times length over time

    • +
    • \([\omega]=\) 1/time

    • +
    +
    +
    +

    1.2. Elements of Vector Algebra

    +

    Note: This section is under revision

    +

    In these lectures we will use boldfaced lower-case letters to label a vector. A vector \(\boldsymbol{a}\) in three dimensions is thus defined as

    +
    +\[ +\boldsymbol{a} =(a_x,a_y, a_z), +\]
    +

    and using the unit vectors in a cartesian system we have

    +
    +\[ +\boldsymbol{a} = a_x\boldsymbol{e}_x+a_y\boldsymbol{e}_y+a_z\boldsymbol{e}_z, +\]
    +

    where the unit vectors have magnitude \(\vert\boldsymbol{e}_i\vert = 1\) with \(i=x,y,z\).

    +

    Using the fact that multiplication of reals is distributive we can show that

    +
    +\[ +\boldsymbol{a}(\boldsymbol{b}+\boldsymbol{c})=\boldsymbol{a}\boldsymbol{b}+\boldsymbol{a}\boldsymbol{c}, +\]
    +

    Similarly we can also show that (using product rule for differentiating reals)

    +
    +\[ +\frac{d}{dt}(\boldsymbol{a}\boldsymbol{b})=\boldsymbol{a}\frac{d\boldsymbol{b}}{dt}+\boldsymbol{b}\frac{d\boldsymbol{a}}{dt}. +\]
    +

    We can repeat these operations for the cross products and show that they are distribuitive

    +
    +\[ +\boldsymbol{a}\times(\boldsymbol{b}+\boldsymbol{c})=\boldsymbol{a}\times\boldsymbol{b}+\boldsymbol{a}\times\boldsymbol{c}. +\]
    +

    We have also that

    +
    +\[ +\frac{d}{dt}(\boldsymbol{a}\times\boldsymbol{b})=\boldsymbol{a}\times\frac{d\boldsymbol{b}}{dt}+\boldsymbol{b}\times\frac{d\boldsymbol{a}}{dt}. +\]
    +

    The rotation of a three-dimensional vector \(\boldsymbol{a}=(a_x,a_y,a_z)\) in the \(xy\) plane around an angle \(\phi\) results in a new vector \(\boldsymbol{b}=(b_x,b_y,b_z)\). This operation can be expressed in terms of linear algebra as a matrix (the rotation matrix) multiplied with a vector. We can write this as

    +
    +\[\begin{split} +\begin{bmatrix} b_x \\ b_y \\ b_z \end{bmatrix} = \begin{bmatrix} \cos{\phi} & \sin{\phi} & 0 \\ -\sin{\phi} & \cos{\phi} & 0 \\ 0 & 0 & 1\end{bmatrix}\begin{bmatrix} a_x \\ a_y \\ a_z \end{bmatrix}. +\end{split}\]
    +

    We can write this in a more compact form as \(\boldsymbol{b} = \boldsymbol{R}\boldsymbol{a}\), where the rotation matrix is defined as

    +
    +\[\begin{split} +\boldsymbol{R} = \begin{bmatrix} \cos{\phi} & \sin{\phi} & 0 \\ -\sin{\phi} & \cos{\phi} & 0 \\ 0 & 0 & 1\end{bmatrix}. +\end{split}\]
    +
    +
    +

    1.3. Falling baseball in one dimension

    +

    We anticipate the mathematical model to come and assume that we have a +model for the motion of a falling baseball without air resistance. +Our system (the baseball) is at an initial height \(y_0\) (which we will +specify in the program below) at the initial time \(t_0=0\). In our program example here we will plot the position in steps of \(\Delta t\) up to a final time \(t_f\). +The mathematical formula for the position \(y(t)\) as function of time \(t\) is

    +
    +\[ +y(t) = y_0-\frac{1}{2}gt^2, +\]
    +

    where \(g=9.80665=0.980655\times 10^1\)m/s\(^2\) is a constant representing the standard acceleration due to gravity. +We have here adopted the conventional standard value. This does not take into account other effects, such as buoyancy or drag. +Furthermore, we stop when the ball hits the ground, which takes place at

    +
    +\[ +y(t) = 0= y_0-\frac{1}{2}gt^2, +\]
    +

    which gives us a final time \(t_f=\sqrt{2y_0/g}\).

    +

    As of now we simply assume that we know the formula for the falling object. Afterwards, we will derive it.

    +
    +
    +

    1.4. Our Python Encounter

    +

    We start with preparing folders for storing our calculations, figures and if needed, specific data files we use as input or output files.

    +
    +
    +
    %matplotlib inline
    +
    +# Common imports
    +import numpy as np
    +import pandas as pd
    +import matplotlib.pyplot as plt
    +import os
    +
    +# Where to save the figures and data files
    +PROJECT_ROOT_DIR = "Results"
    +FIGURE_ID = "Results/FigureFiles"
    +DATA_ID = "DataFiles/"
    +
    +if not os.path.exists(PROJECT_ROOT_DIR):
    +    os.mkdir(PROJECT_ROOT_DIR)
    +
    +if not os.path.exists(FIGURE_ID):
    +    os.makedirs(FIGURE_ID)
    +
    +if not os.path.exists(DATA_ID):
    +    os.makedirs(DATA_ID)
    +
    +def image_path(fig_id):
    +    return os.path.join(FIGURE_ID, fig_id)
    +
    +def data_path(dat_id):
    +    return os.path.join(DATA_ID, dat_id)
    +
    +def save_fig(fig_id):
    +    plt.savefig(image_path(fig_id) + ".png", format='png')
    +
    +#in case we have an input file we wish to read in
    +#infile = open(data_path("MassEval2016.dat"),'r')
    +
    +
    +
    +
    +

    You could also define a function for making our plots. You +can obviously avoid this and simply set up various matplotlib +commands every time you need them. You may however find it convenient +to collect all such commands in one function and simply call this +function.

    +
    +
    +
    from pylab import plt, mpl
    +plt.style.use('seaborn')
    +mpl.rcParams['font.family'] = 'serif'
    +
    +def MakePlot(x,y, styles, labels, axlabels):
    +    plt.figure(figsize=(10,6))
    +    for i in range(len(x)):
    +        plt.plot(x[i], y[i], styles[i], label = labels[i])
    +        plt.xlabel(axlabels[0])
    +        plt.ylabel(axlabels[1])
    +    plt.legend(loc=0)
    +
    +
    +
    +
    +

    Thereafter we start setting up the code for the falling object.

    +
    +
    +
    %matplotlib inline
    +import matplotlib.patches as mpatches
    +
    +g = 9.80655 #m/s^2
    +y_0 = 10.0 # initial position in meters
    +DeltaT = 0.1  # time step
    +# final time when y = 0, t = sqrt(2*10/g)
    +tfinal = np.sqrt(2.0*y_0/g)
    +#set up arrays 
    +t = np.arange(0,tfinal,DeltaT)
    +y =y_0 -g*.5*t**2
    +# Then make a nice printout in table form using Pandas
    +import pandas as pd
    +from IPython.display import display
    +data = {'t[s]': t,
    +        'y[m]': y
    +        }
    +RawData = pd.DataFrame(data)
    +display(RawData)
    +plt.style.use('ggplot')
    +plt.figure(figsize=(8,8))
    +plt.scatter(t, y, color = 'b')
    +blue_patch = mpatches.Patch(color = 'b', label = 'Height y as function of  time t')
    +plt.legend(handles=[blue_patch])
    +plt.xlabel("t[s]")
    +plt.ylabel("y[m]")
    +save_fig("FallingBaseball")
    +plt.show()
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    t[s]y[m]
    00.010.000000
    10.19.950967
    20.29.803869
    30.39.558705
    40.49.215476
    50.58.774181
    60.68.234821
    70.77.597395
    80.86.861904
    90.96.028347
    101.05.096725
    111.14.067037
    121.22.939284
    131.31.713465
    141.40.389581
    +
    _images/chapter2_25_1.png +
    +
    +

    Here we used pandas (see below) to systemize the output of the position as function of time.

    +
    +
    +

    1.5. Average quantities

    +

    We define now the average velocity as

    +
    +\[ +\overline{v}(t) = \frac{y(t+\Delta t)-y(t)}{\Delta t}. +\]
    +

    In the code we have set the time step \(\Delta t\) to a given value. We could define it in terms of the number of points \(n\) as

    +
    +\[ +\Delta t = \frac{t_{\mathrm{final}-}t_{\mathrm{initial}}}{n+1}. +\]
    +

    Since we have discretized the variables, we introduce the counter \(i\) and let \(y(t)\rightarrow y(t_i)=y_i\) and \(t\rightarrow t_i\) +with \(i=0,1,\dots, n\). This gives us the following shorthand notations that we will use for the rest of this course. We define

    +
    +\[ +y_i = y(t_i),\hspace{0.2cm} i=0,1,2,\dots,n. +\]
    +

    This applies to other variables which depend on say time. Examples are the velocities, accelerations, momenta etc. +Furthermore we use the shorthand

    +
    +\[ +y_{i\pm 1} = y(t_i\pm \Delta t),\hspace{0.12cm} i=0,1,2,\dots,n. +\]
    +
    +
    +

    1.6. Compact equations

    +

    We can then rewrite in a more compact form the average velocity as

    +
    +\[ +\overline{v}_i = \frac{y_{i+1}-y_{i}}{\Delta t}. +\]
    +

    The velocity is defined as the change in position per unit time. +In the limit \(\Delta t \rightarrow 0\) this defines the instantaneous velocity, which is nothing but the slope of the position at a time \(t\). +We have thus

    +
    +\[ +v(t) = \frac{dy}{dt}=\lim_{\Delta t \rightarrow 0}\frac{y(t+\Delta t)-y(t)}{\Delta t}. +\]
    +

    Similarly, we can define the average acceleration as the change in velocity per unit time as

    +
    +\[ +\overline{a}_i = \frac{v_{i+1}-v_{i}}{\Delta t}, +\]
    +

    resulting in the instantaneous acceleration

    +
    +\[ +a(t) = \frac{dv}{dt}=\lim_{\Delta t\rightarrow 0}\frac{v(t+\Delta t)-v(t)}{\Delta t}. +\]
    +

    A note on notations: When writing for example the velocity as \(v(t)\) we are then referring to the continuous and instantaneous value. A subscript like +\(v_i\) refers always to the discretized values.

    +
    +
    +

    1.7. A differential equation

    +

    We can rewrite the instantaneous acceleration as

    +
    +\[ +a(t) = \frac{dv}{dt}=\frac{d}{dt}\frac{dy}{dt}=\frac{d^2y}{dt^2}. +\]
    +

    This forms the starting point for our definition of forces later. It is a famous second-order differential equation. If the acceleration is constant we can now recover the formula for the falling ball we started with. +The acceleration can depend on the position and the velocity. To be more formal we should then write the above differential equation as

    +
    +\[ +\frac{d^2y}{dt^2}=a(t,y(t),\frac{dy}{dt}). +\]
    +

    With given initial conditions for \(y(t_0)\) and \(v(t_0)\) we can then +integrate the above equation and find the velocities and positions at +a given time \(t\).

    +

    If we multiply with mass, we have one of the famous expressions for Newton’s second law,

    +
    +\[ +F(y,v,t)=m\frac{d^2y}{dt^2}=ma(t,y(t),\frac{dy}{dt}), +\]
    +

    where \(F\) is the force acting on an object with mass \(m\). We see that it also has the right dimension, mass times length divided by time squared. +We will come back to this soon.

    +
    +
    +

    1.8. Integrating our equations

    +

    Formally we can then, starting with the acceleration (suppose we have measured it, how could we do that?) +compute say the height of a building. To see this we perform the following integrations from an initial time \(t_0\) to a given time \(t\)

    +
    +\[ +\int_{t_0}^t dt a(t) = \int_{t_0}^t dt \frac{dv}{dt} = v(t)-v(t_0), +\]
    +

    or as

    +
    +\[ +v(t)=v(t_0)+\int_{t_0}^t dt a(t). +\]
    +

    When we know the velocity as function of time, we can find the position as function of time starting from the defintion of velocity as the derivative with respect to time, that is we have

    +
    +\[ +\int_{t_0}^t dt v(t) = \int_{t_0}^t dt \frac{dy}{dt} = y(t)-y(t_0), +\]
    +

    or as

    +
    +\[ +y(t)=y(t_0)+\int_{t_0}^t dt v(t). +\]
    +

    These equations define what is called the integration method for +finding the position and the velocity as functions of time. There is +no loss of generality if we extend these equations to more than one +spatial dimension.

    +
    +
    +

    1.9. Constant acceleration case, the velocity

    +

    Let us compute the velocity using the constant value for the acceleration given by \(-g\). We have

    +
    +\[ +v(t)=v(t_0)+\int_{t_0}^t dt a(t)=v(t_0)+\int_{t_0}^t dt (-g). +\]
    +

    Using our initial time as \(t_0=0\)s and setting the initial velocity \(v(t_0)=v_0=0\)m/s we get when integrating

    +
    +\[ +v(t)=-gt. +\]
    +

    The more general case is

    +
    +\[ +v(t)=v_0-g(t-t_0). +\]
    +

    We can then integrate the velocity and obtain the final formula for the position as function of time through

    +
    +\[ +y(t)=y(t_0)+\int_{t_0}^t dt v(t)=y_0+\int_{t_0}^t dt v(t)=y_0+\int_{t_0}^t dt (-gt), +\]
    +

    With \(y_0=10\)m and \(t_0=0\)s, we obtain the equation we started with

    +
    +\[ +y(t)=10-\frac{1}{2}gt^2. +\]
    +
    +
    +

    1.10. Computing the averages

    +

    After this mathematical background we are now ready to compute the mean velocity using our data.

    +
    +
    +
    # Now we can compute the mean velocity using our data
    +# We define first an array Vaverage
    +n = np.size(t)
    +Vaverage = np.zeros(n)
    +for i in range(1,n-1):
    +    Vaverage[i] = (y[i+1]-y[i])/DeltaT
    +# Now we can compute the mean accelearatio using our data
    +# We define first an array Aaverage
    +n = np.size(t)
    +Aaverage = np.zeros(n)
    +Aaverage[0] = -g
    +for i in range(1,n-1):
    +    Aaverage[i] = (Vaverage[i+1]-Vaverage[i])/DeltaT
    +data = {'t[s]': t,
    +        'y[m]': y,
    +        'v[m/s]': Vaverage,
    +        'a[m/s^2]': Aaverage
    +        }
    +NewData = pd.DataFrame(data)
    +display(NewData[0:n-2])
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    t[s]y[m]v[m/s]a[m/s^2]
    00.010.0000000.000000-9.80655
    10.19.950967-1.470982-9.80655
    20.29.803869-2.451638-9.80655
    30.39.558705-3.432292-9.80655
    40.49.215476-4.412948-9.80655
    50.58.774181-5.393602-9.80655
    60.68.234821-6.374258-9.80655
    70.77.597395-7.354913-9.80655
    80.86.861904-8.335567-9.80655
    90.96.028347-9.316222-9.80655
    101.05.096725-10.296878-9.80655
    111.14.067037-11.277533-9.80655
    121.22.939284-12.258187-9.80655
    +
    +
    +

    Note that we don’t print the last values!

    +
    +
    +

    1.11. Including Air Resistance in our model

    +

    In our discussions till now of the falling baseball, we have ignored +air resistance and simply assumed that our system is only influenced +by the gravitational force. We will postpone the derivation of air +resistance till later, after our discussion of Newton’s laws and +forces.

    +

    For our discussions here it suffices to state that the accelerations is now modified to

    +
    +\[ +\boldsymbol{a}(t) = -g +D\boldsymbol{v}(t)\vert v(t)\vert, +\]
    +

    where \(\vert v(t)\vert\) is the absolute value of the velocity and \(D\) is a constant which pertains to the specific object we are studying. +Since we are dealing with motion in one dimension, we can simplify the above to

    +
    +\[ +a(t) = -g +Dv^2(t). +\]
    +

    We can rewrite this as a differential equation

    +
    +\[ +a(t) = \frac{dv}{dt}=\frac{d^2y}{dt^2}= -g +Dv^2(t). +\]
    +

    Using the integral equations discussed above we can integrate twice +and obtain first the velocity as function of time and thereafter the +position as function of time.

    +

    For this particular case, we can actually obtain an analytical +solution for the velocity and for the position. Here we will first +compute the solutions analytically, thereafter we will derive Euler’s +method for solving these differential equations numerically.

    +
    +
    +

    1.12. Analytical solutions

    +

    For simplicity let us just write \(v(t)\) as \(v\). We have

    +
    +\[ +\frac{dv}{dt}= -g +Dv^2(t). +\]
    +

    We can solve this using the technique of separation of variables. We +isolate on the left all terms that involve \(v\) and on the right all +terms that involve time. We get then

    +
    +\[ +\frac{dv}{g -Dv^2(t) }= -dt, +\]
    +

    We scale now the equation to the left by introducing a constant +\(v_T=\sqrt{g/D}\). This constant has dimension length/time. Can you +show this?

    +

    Next we integrate the left-hand side (lhs) from \(v_0=0\) m/s to \(v\) and +the right-hand side (rhs) from \(t_0=0\) to \(t\) and obtain

    +
    +\[ +\int_{0}^v\frac{dv}{g -Dv^2(t) }= \frac{v_T}{g}\mathrm{arctanh}(\frac{v}{v_T}) =-\int_0^tdt = -t. +\]
    +

    We can reorganize these equations as

    +
    +\[ +v_T\mathrm{arctanh}(\frac{v}{v_T}) =-gt, +\]
    +

    which gives us \(v\) as function of time

    +
    +\[ +v(t)=v_T\tanh{-(\frac{gt}{v_T})}. +\]
    +
    +
    +

    1.13. Finding the final height

    +

    With the velocity we can then find the height \(y(t)\) by integrating yet another time, that is

    +
    +\[ +y(t)=y(t_0)+\int_{t_0}^t dt v(t)=\int_{0}^t dt[v_T\tanh{-(\frac{gt}{v_T})}]. +\]
    +

    This integral is a little bit trickier but we can look it up in a table over +known integrals and we get

    +
    +\[ +y(t)=y(t_0)-\frac{v_T^2}{g}\log{[\cosh{(\frac{gt}{v_T})}]}. +\]
    +

    Alternatively we could have used the symbolic Python package Sympy (example will be inserted later).

    +

    In most cases however, we need to revert to numerical solutions.

    +
    +
    +

    1.14. Our first attempt at solving differential equations

    +

    Here we will try the simplest possible approach to solving the second-order differential +equation

    +
    +\[ +a(t) =\frac{d^2y}{dt^2}= -g +Dv^2(t). +\]
    +

    We rewrite it as two coupled first-order equations (this is a standard approach)

    +
    +\[ +\frac{dy}{dt} = v(t), +\]
    +

    with initial condition \(y(t_0)=y_0\) and

    +
    +\[ +a(t) =\frac{dv}{dt}= -g +Dv^2(t), +\]
    +

    with initial condition \(v(t_0)=v_0\).

    +

    Many of the algorithms for solving differential equations start with simple Taylor equations. +If we now Taylor expand \(y\) and \(v\) around a value \(t+\Delta t\) we have

    +
    +\[ +y(t+\Delta t) = y(t)+\Delta t \frac{dy}{dt}+\frac{\Delta t^2}{2!} \frac{d^2y}{dt^2}+O(\Delta t^3), +\]
    +

    and

    +
    +\[ +v(t+\Delta t) = v(t)+\Delta t \frac{dv}{dt}+\frac{\Delta t^2}{2!} \frac{d^2v}{dt^2}+O(\Delta t^3). +\]
    +

    Using the fact that \(dy/dt = v\) and \(dv/dt=a\) and keeping only terms up to \(\Delta t\) we have

    +
    +\[ +y(t+\Delta t) = y(t)+\Delta t v(t)+O(\Delta t^2), +\]
    +

    and

    +
    +\[ +v(t+\Delta t) = v(t)+\Delta t a(t)+O(\Delta t^2). +\]
    +
    +
    +

    1.15. Discretizing our equations

    +

    Using our discretized versions of the equations with for example +\(y_{i}=y(t_i)\) and \(y_{i\pm 1}=y(t_i+\Delta t)\), we can rewrite the +above equations as (and truncating at \(\Delta t\))

    +
    +\[ +y_{i+1} = y_i+\Delta t v_i, +\]
    +

    and

    +
    +\[ +v_{i+1} = v_i+\Delta t a_i. +\]
    +

    These are the famous Euler equations (forward Euler).

    +

    To solve these equations numerically we start at a time \(t_0\) and simply integrate up these equations to a final time \(t_f\), +The step size \(\Delta t\) is an input parameter in our code. +You can define it directly in the code below as

    +
    +
    +
    DeltaT = 0.1
    +
    +
    +
    +
    +

    With a given final time tfinal we can then find the number of integration points via the ceil function included in the math package of Python +as

    +
    +
    +
    #define final time, assuming that initial time is zero
    +from math import ceil
    +tfinal = 0.5
    +n = ceil(tfinal/DeltaT)
    +print(n)
    +
    +
    +
    +
    +
    5
    +
    +
    +
    +
    +

    The ceil function returns the smallest integer not less than the input in say

    +
    +
    +
    x = 21.15
    +print(ceil(x))
    +
    +
    +
    +
    +
    22
    +
    +
    +
    +
    +

    which in the case here is 22.

    +
    +
    +
    x = 21.75
    +print(ceil(x))
    +
    +
    +
    +
    +
    22
    +
    +
    +
    +
    +

    which also yields 22. The floor function in the math package +is used to return the closest integer value which is less than or equal to the specified expression or value. +Compare the previous result to the usage of floor

    +
    +
    +
    from math import floor
    +x = 21.75
    +print(floor(x))
    +
    +
    +
    +
    +
    21
    +
    +
    +
    +
    +

    Alternatively, we can define ourselves the number of integration(mesh) points. In this case we could have

    +
    +
    +
    n = 10
    +tinitial = 0.0
    +tfinal = 0.5
    +DeltaT = (tfinal-tinitial)/(n)
    +print(DeltaT)
    +
    +
    +
    +
    +
    0.05
    +
    +
    +
    +
    +

    Since we will set up one-dimensional arrays that contain the values of +various variables like time, position, velocity, acceleration etc, we +need to know the value of \(n\), the number of data points (or +integration or mesh points). With \(n\) we can initialize a given array +by setting all elelements to zero, as done here

    +
    +
    +
    # define array a
    +a = np.zeros(n)
    +print(a)
    +
    +
    +
    +
    +
    [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
    +
    +
    +
    +
    +
    +
    +

    1.16. Code for implementing Euler’s method

    +

    In the code here we implement this simple Eurler scheme choosing a value for \(D=0.0245\) m/s.

    +
    +
    +
    # Common imports
    +import numpy as np
    +import pandas as pd
    +from math import *
    +import matplotlib.pyplot as plt
    +import os
    +
    +# Where to save the figures and data files
    +PROJECT_ROOT_DIR = "Results"
    +FIGURE_ID = "Results/FigureFiles"
    +DATA_ID = "DataFiles/"
    +
    +if not os.path.exists(PROJECT_ROOT_DIR):
    +    os.mkdir(PROJECT_ROOT_DIR)
    +
    +if not os.path.exists(FIGURE_ID):
    +    os.makedirs(FIGURE_ID)
    +
    +if not os.path.exists(DATA_ID):
    +    os.makedirs(DATA_ID)
    +
    +def image_path(fig_id):
    +    return os.path.join(FIGURE_ID, fig_id)
    +
    +def data_path(dat_id):
    +    return os.path.join(DATA_ID, dat_id)
    +
    +def save_fig(fig_id):
    +    plt.savefig(image_path(fig_id) + ".png", format='png')
    +
    +
    +g = 9.80655 #m/s^2
    +D = 0.00245 #m/s
    +DeltaT = 0.1
    +#set up arrays 
    +tfinal = 0.5
    +n = ceil(tfinal/DeltaT)
    +# define scaling constant vT
    +vT = sqrt(g/D)
    +# set up arrays for t, a, v, and y and we can compare our results with analytical ones
    +t = np.zeros(n)
    +a = np.zeros(n)
    +v = np.zeros(n)
    +y = np.zeros(n)
    +yanalytic = np.zeros(n)
    +# Initial conditions
    +v[0] = 0.0  #m/s
    +y[0] = 10.0 #m
    +yanalytic[0] = y[0]
    +# Start integrating using Euler's method
    +for i in range(n-1):
    +    # expression for acceleration
    +    a[i] = -g + D*v[i]*v[i]
    +    # update velocity and position
    +    y[i+1] = y[i] + DeltaT*v[i]
    +    v[i+1] = v[i] + DeltaT*a[i]
    +    # update time to next time step and compute analytical answer
    +    t[i+1] = t[i] + DeltaT
    +    yanalytic[i+1] = y[0]-(vT*vT/g)*log(cosh(g*t[i+1]/vT))
    +    if ( y[i+1] < 0.0):
    +        break
    +a[n-1] = -g + D*v[n-1]*v[n-1]
    +data = {'t[s]': t,
    +        'y[m]': y-yanalytic,
    +        'v[m/s]': v,
    +        'a[m/s^2]': a
    +        }
    +NewData = pd.DataFrame(data)
    +display(NewData)
    +#finally we plot the data
    +fig, axs = plt.subplots(3, 1)
    +axs[0].plot(t, y, t, yanalytic)
    +axs[0].set_xlim(0, tfinal)
    +axs[0].set_ylabel('y and exact')
    +axs[1].plot(t, v)
    +axs[1].set_ylabel('v[m/s]')
    +axs[2].plot(t, a)
    +axs[2].set_xlabel('time[s]')
    +axs[2].set_ylabel('a[m/s^2]')
    +fig.tight_layout()
    +save_fig("EulerIntegration")
    +plt.show()
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    t[s]y[m]v[m/s]a[m/s^2]
    00.00.0000000.000000-9.806550
    10.10.049031-0.980655-9.804194
    20.20.098034-1.961074-9.797128
    30.30.146963-2.940787-9.785362
    40.40.195770-3.919323-9.768915
    +
    _images/chapter2_121_1.png +
    +
    +

    Try different values for \(\Delta t\) and study the difference between the exact solution and the numerical solution.

    +
    +
    +

    1.17. Simple extension, the Euler-Cromer method

    +

    The Euler-Cromer method is a simple variant of the standard Euler +method. We use the newly updated velocity \(v_{i+1}\) as an input to the +new position, that is, instead of

    +
    +\[ +y_{i+1} = y_i+\Delta t v_i, +\]
    +

    and

    +
    +\[ +v_{i+1} = v_i+\Delta t a_i, +\]
    +

    we use now the newly calculate for \(v_{i+1}\) as input to \(y_{i+1}\), that is +we compute first

    +
    +\[ +v_{i+1} = v_i+\Delta t a_i, +\]
    +

    and then

    +
    +\[ +y_{i+1} = y_i+\Delta t v_{i+1}, +\]
    +

    Implementing the Euler-Cromer method yields a simple change to the previous code. We only need to change the following line in the loop over time +steps

    +
    +
    +
    for i in range(n-1):
    +    # more codes in between here
    +    v[i+1] = v[i] + DeltaT*a[i]
    +    y[i+1] = y[i] + DeltaT*v[i+1]
    +    # more code
    +
    +
    +
    +
    +
    +
    +

    1.18. Python practicalities, Software and needed installations

    +

    We will make extensive use of Python as programming language and its +myriad of available libraries. You will find +Jupyter notebooks invaluable in your work.

    +

    If you have Python installed (we strongly recommend Python3) and you feel +pretty familiar with installing different packages, we recommend that +you install the following Python packages via pip as

    +
      +
    1. pip install numpy scipy matplotlib ipython scikit-learn mglearn sympy pandas pillow

    2. +
    +

    For Python3, replace pip with pip3.

    +

    For OSX users we recommend, after having installed Xcode, to +install brew. Brew allows for a seamless installation of additional +software via for example

    +
      +
    1. brew install python3

    2. +
    +

    For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution, +you can use pip as well and simply install Python as

    +
      +
    1. sudo apt-get install python3 (or python for pyhton2.7)

    2. +
    +

    etc etc.

    +
    +
    +

    1.19. Python installers

    +

    If you don’t want to perform these operations separately and venture +into the hassle of exploring how to set up dependencies and paths, we +recommend two widely used distrubutions which set up all relevant +dependencies for Python, namely

    + +

    which is an open source +distribution of the Python and R programming languages for large-scale +data processing, predictive analytics, and scientific computing, that +aims to simplify package management and deployment. Package versions +are managed by the package management system conda.

    + +

    is a Python +distribution for scientific and analytic computing distribution and +analysis environment, available for free and under a commercial +license.

    +

    Furthermore, Google’s Colab is a free Jupyter notebook environment that requires +no setup and runs entirely in the cloud. Try it out!

    +
    +
    +

    1.20. Useful Python libraries

    +

    Here we list several useful Python libraries we strongly recommend (if you use anaconda many of these are already there)

    +
      +
    • NumPy is a highly popular library for large, multi-dimensional arrays and matrices, along with a large collection of high-level mathematical functions to operate on these arrays

    • +
    • The pandas library provides high-performance, easy-to-use data structures and data analysis tools

    • +
    • Xarray is a Python package that makes working with labelled multi-dimensional arrays simple, efficient, and fun!

    • +
    • Scipy (pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software for mathematics, science, and engineering.

    • +
    • Matplotlib is a Python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms.

    • +
    • Autograd can automatically differentiate native Python and Numpy code. It can handle a large subset of Python’s features, including loops, ifs, recursion and closures, and it can even take derivatives of derivatives of derivatives

    • +
    • SymPy is a Python library for symbolic mathematics.

    • +
    • scikit-learn has simple and efficient tools for machine learning, data mining and data analysis

    • +
    • TensorFlow is a Python library for fast numerical computing created and released by Google

    • +
    • Keras is a high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, or Theano

    • +
    • And many more such as pytorch, Theano etc

    • +
    +

    Your jupyter notebook can easily be +converted into a nicely rendered PDF file or a Latex file for +further processing. For example, convert to latex as

    +
        pycod jupyter nbconvert filename.ipynb --to latex 
    +
    +
    +

    And to add more versatility, the Python package SymPy is a Python library for symbolic mathematics. It aims to become a full-featured computer algebra system (CAS) and is entirely written in Python.

    +
    +
    +

    1.21. Numpy examples and Important Matrix and vector handling packages

    +

    There are several central software libraries for linear algebra and eigenvalue problems. Several of the more +popular ones have been wrapped into ofter software packages like those from the widely used text Numerical Recipes. The original source codes in many of the available packages are often taken from the widely used +software package LAPACK, which follows two other popular packages +developed in the 1970s, namely EISPACK and LINPACK. We describe them shortly here.

    +
      +
    • LINPACK: package for linear equations and least square problems.

    • +
    • LAPACK:package for solving symmetric, unsymmetric and generalized eigenvalue problems. From LAPACK’s website http://www.netlib.org it is possible to download for free all source codes from this library. Both C/C++ and Fortran versions are available.

    • +
    • BLAS (I, II and III): (Basic Linear Algebra Subprograms) are routines that provide standard building blocks for performing basic vector and matrix operations. Blas I is vector operations, II vector-matrix operations and III matrix-matrix operations. Highly parallelized and efficient codes, all available for download from http://www.netlib.org.

    • +
    +
    +
    +

    1.22. Basic Matrix Features

    +

    Matrix properties reminder.

    +
    +\[\begin{split} +\mathbf{A} = + \begin{bmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ + a_{21} & a_{22} & a_{23} & a_{24} \\ + a_{31} & a_{32} & a_{33} & a_{34} \\ + a_{41} & a_{42} & a_{43} & a_{44} + \end{bmatrix}\qquad +\mathbf{I} = + \begin{bmatrix} 1 & 0 & 0 & 0 \\ + 0 & 1 & 0 & 0 \\ + 0 & 0 & 1 & 0 \\ + 0 & 0 & 0 & 1 + \end{bmatrix} +\end{split}\]
    +

    The inverse of a matrix is defined by

    +
    +\[ +\mathbf{A}^{-1} \cdot \mathbf{A} = I +\]
    + + + + + + + + + + + +
    Relations Name matrix elements
    $A = A^{T}$ symmetric $a_{ij} = a_{ji}$
    $A = \left (A^{T} \right )^{-1}$ real orthogonal $\sum_k a_{ik} a_{jk} = \sum_k a_{ki} a_{kj} = \delta_{ij}$
    $A = A^{ * }$ real matrix $a_{ij} = a_{ij}^{ * }$
    $A = A^{\dagger}$ hermitian $a_{ij} = a_{ji}^{ * }$
    $A = \left (A^{\dagger} \right )^{-1}$ unitary $\sum_k a_{ik} a_{jk}^{ * } = \sum_k a_{ki}^{ * } a_{kj} = \delta_{ij}$
    +
    +

    1.22.1. Some famous Matrices

    +
      +
    • Diagonal if \(a_{ij}=0\) for \(i\ne j\)

    • +
    • Upper triangular if \(a_{ij}=0\) for \(i > j\)

    • +
    • Lower triangular if \(a_{ij}=0\) for \(i < j\)

    • +
    • Upper Hessenberg if \(a_{ij}=0\) for \(i > j+1\)

    • +
    • Lower Hessenberg if \(a_{ij}=0\) for \(i < j+1\)

    • +
    • Tridiagonal if \(a_{ij}=0\) for \(|i -j| > 1\)

    • +
    • Lower banded with bandwidth \(p\): \(a_{ij}=0\) for \(i > j+p\)

    • +
    • Upper banded with bandwidth \(p\): \(a_{ij}=0\) for \(i < j+p\)

    • +
    • Banded, block upper triangular, block lower triangular….

    • +
    +
    +
    +

    1.22.2. More Basic Matrix Features

    +

    Some Equivalent Statements.

    +

    For an \(N\times N\) matrix \(\mathbf{A}\) the following properties are all equivalent

    +
      +
    • If the inverse of \(\mathbf{A}\) exists, \(\mathbf{A}\) is nonsingular.

    • +
    • The equation \(\mathbf{Ax}=0\) implies \(\mathbf{x}=0\).

    • +
    • The rows of \(\mathbf{A}\) form a basis of \(R^N\).

    • +
    • The columns of \(\mathbf{A}\) form a basis of \(R^N\).

    • +
    • \(\mathbf{A}\) is a product of elementary matrices.

    • +
    • \(0\) is not eigenvalue of \(\mathbf{A}\).

    • +
    +
    +
    +
    +

    1.23. Numpy and arrays

    +

    Numpy provides an easy way to handle arrays in Python. The standard way to import this library is as

    +
    +
    +
    import numpy as np
    +
    +
    +
    +
    +

    Here follows a simple example where we set up an array of ten elements, all determined by random numbers drawn according to the normal distribution,

    +
    +
    +
    n = 10
    +x = np.random.normal(size=n)
    +print(x)
    +
    +
    +
    +
    +
    [ 0.35453366  0.01307903 -0.54733885  0.46190793  0.21826624  1.43253023
    +  0.40071053 -0.78290213  0.37635957  2.81890295]
    +
    +
    +
    +
    +

    We defined a vector \(x\) with \(n=10\) elements with its values given by the Normal distribution \(N(0,1)\). +Another alternative is to declare a vector as follows

    +
    +
    +
    import numpy as np
    +x = np.array([1, 2, 3])
    +print(x)
    +
    +
    +
    +
    +
    [1 2 3]
    +
    +
    +
    +
    +

    Here we have defined a vector with three elements, with \(x_0=1\), \(x_1=2\) and \(x_2=3\). Note that both Python and C++ +start numbering array elements from \(0\) and on. This means that a vector with \(n\) elements has a sequence of entities \(x_0, x_1, x_2, \dots, x_{n-1}\). We could also let (recommended) Numpy to compute the logarithms of a specific array as

    +
    +
    +
    import numpy as np
    +x = np.log(np.array([4, 7, 8]))
    +print(x)
    +
    +
    +
    +
    +
    [1.38629436 1.94591015 2.07944154]
    +
    +
    +
    +
    +

    In the last example we used Numpy’s unary function \(np.log\). This function is +highly tuned to compute array elements since the code is vectorized +and does not require looping. We normaly recommend that you use the +Numpy intrinsic functions instead of the corresponding log function +from Python’s math module. The looping is done explicitely by the +np.log function. The alternative, and slower way to compute the +logarithms of a vector would be to write

    +
    +
    +
    import numpy as np
    +from math import log
    +x = np.array([4, 7, 8])
    +for i in range(0, len(x)):
    +    x[i] = log(x[i])
    +print(x)
    +
    +
    +
    +
    +
    [1 1 2]
    +
    +
    +
    +
    +

    We note that our code is much longer already and we need to import the log function from the math module. +The attentive reader will also notice that the output is \([1, 1, 2]\). Python interprets automagically our numbers as integers (like the automatic keyword in C++). To change this we could define our array elements to be double precision numbers as

    +
    +
    +
    import numpy as np
    +x = np.log(np.array([4, 7, 8], dtype = np.float64))
    +print(x)
    +
    +
    +
    +
    +
    [1.38629436 1.94591015 2.07944154]
    +
    +
    +
    +
    +

    or simply write them as double precision numbers (Python uses 64 bits as default for floating point type variables), that is

    +
    +
    +
    import numpy as np
    +x = np.log(np.array([4.0, 7.0, 8.0])
    +print(x)
    +
    +
    +
    +
    +
      File "<ipython-input-20-f6d7a289d493>", line 3
    +    print(x)
    +    ^
    +SyntaxError: invalid syntax
    +
    +
    +
    +
    +

    To check the number of bytes (remember that one byte contains eight bits for double precision variables), you can use simple use the itemsize functionality (the array \(x\) is actually an object which inherits the functionalities defined in Numpy) as

    +
    +
    +
    import numpy as np
    +x = np.log(np.array([4.0, 7.0, 8.0])
    +print(x.itemsize)
    +
    +
    +
    +
    +
    +
    +

    1.24. Matrices in Python

    +

    Having defined vectors, we are now ready to try out matrices. We can +define a \(3 \times 3 \) real matrix \(\hat{A}\) as (recall that we user +lowercase letters for vectors and uppercase letters for matrices)

    +
    +
    +
    import numpy as np
    +A = np.log(np.array([ [4.0, 7.0, 8.0], [3.0, 10.0, 11.0], [4.0, 5.0, 7.0] ]))
    +print(A)
    +
    +
    +
    +
    +

    If we use the shape function we would get \((3, 3)\) as output, that is verifying that our matrix is a \(3\times 3\) matrix. We can slice the matrix and print for example the first column (Python organized matrix elements in a row-major order, see below) as

    +
    +
    +
    import numpy as np
    +A = np.log(np.array([ [4.0, 7.0, 8.0], [3.0, 10.0, 11.0], [4.0, 5.0, 7.0] ]))
    +# print the first column, row-major order and elements start with 0
    +print(A[:,0])
    +
    +
    +
    +
    +

    We can continue this was by printing out other columns or rows. The example here prints out the second column

    +
    +
    +
    import numpy as np
    +A = np.log(np.array([ [4.0, 7.0, 8.0], [3.0, 10.0, 11.0], [4.0, 5.0, 7.0] ]))
    +# print the first column, row-major order and elements start with 0
    +print(A[1,:])
    +
    +
    +
    +
    +

    Numpy contains many other functionalities that allow us to slice, subdivide etc etc arrays. We strongly recommend that you look up the Numpy website for more details. Useful functions when defining a matrix are the np.zeros function which declares a matrix of a given dimension and sets all elements to zero

    +
    +
    +
    import numpy as np
    +n = 10
    +# define a matrix of dimension 10 x 10 and set all elements to zero
    +A = np.zeros( (n, n) )
    +print(A)
    +
    +
    +
    +
    +

    or initializing all elements to

    +
    +
    +
    import numpy as np
    +n = 10
    +# define a matrix of dimension 10 x 10 and set all elements to one
    +A = np.ones( (n, n) )
    +print(A)
    +
    +
    +
    +
    +

    or as unitarily distributed random numbers (see the material on random number generators in the statistics part)

    +
    +
    +
    import numpy as np
    +n = 10
    +# define a matrix of dimension 10 x 10 and set all elements to random numbers with x \in [0, 1]
    +A = np.random.rand(n, n)
    +print(A)
    +
    +
    +
    +
    +
    +
    +

    1.25. Meet the Pandas

    + + +

    + + +

    Another useful Python package is +pandas, which is an open source library +providing high-performance, easy-to-use data structures and data +analysis tools for Python. pandas stands for panel data, a term borrowed from econometrics and is an efficient library for data analysis with an emphasis on tabular data. +pandas has two major classes, the DataFrame class with two-dimensional data objects and tabular data organized in columns and the class Series with a focus on one-dimensional data objects. Both classes allow you to index data easily as we will see in the examples below. +pandas allows you also to perform mathematical operations on the data, spanning from simple reshapings of vectors and matrices to statistical operations.

    +

    The following simple example shows how we can, in an easy way make tables of our data. Here we define a data set which includes names, place of birth and date of birth, and displays the data in an easy to read way. We will see repeated use of pandas, in particular in connection with classification of data.

    +
    +
    +
    import pandas as pd
    +from IPython.display import display
    +data = {'First Name': ["Frodo", "Bilbo", "Aragorn II", "Samwise"],
    +        'Last Name': ["Baggins", "Baggins","Elessar","Gamgee"],
    +        'Place of birth': ["Shire", "Shire", "Eriador", "Shire"],
    +        'Date of Birth T.A.': [2968, 2890, 2931, 2980]
    +        }
    +data_pandas = pd.DataFrame(data)
    +display(data_pandas)
    +
    +
    +
    +
    +

    In the above we have imported pandas with the shorthand pd, the latter has become the standard way we import pandas. We make then a list of various variables +and reorganize the above lists into a DataFrame and then print out a neat table with specific column labels as Name, place of birth and date of birth. +Displaying these results, we see that the indices are given by the default numbers from zero to three. +pandas is extremely flexible and we can easily change the above indices by defining a new type of indexing as

    +
    +
    +
    data_pandas = pd.DataFrame(data,index=['Frodo','Bilbo','Aragorn','Sam'])
    +display(data_pandas)
    +
    +
    +
    +
    +

    Thereafter we display the content of the row which begins with the index Aragorn

    +
    +
    +
    display(data_pandas.loc['Aragorn'])
    +
    +
    +
    +
    +

    We can easily append data to this, for example

    +
    +
    +
    new_hobbit = {'First Name': ["Peregrin"],
    +              'Last Name': ["Took"],
    +              'Place of birth': ["Shire"],
    +              'Date of Birth T.A.': [2990]
    +              }
    +data_pandas=data_pandas.append(pd.DataFrame(new_hobbit, index=['Pippin']))
    +display(data_pandas)
    +
    +
    +
    +
    +

    Here are other examples where we use the DataFrame functionality to handle arrays, now with more interesting features for us, namely numbers. We set up a matrix +of dimensionality \(10\times 5\) and compute the mean value and standard deviation of each column. Similarly, we can perform mathematial operations like squaring the matrix elements and many other operations.

    +
    +
    +
    import numpy as np
    +import pandas as pd
    +from IPython.display import display
    +np.random.seed(100)
    +# setting up a 10 x 5 matrix
    +rows = 10
    +cols = 5
    +a = np.random.randn(rows,cols)
    +df = pd.DataFrame(a)
    +display(df)
    +print(df.mean())
    +print(df.std())
    +display(df**2)
    +
    +
    +
    +
    +

    Thereafter we can select specific columns only and plot final results

    +
    +
    +
    df.columns = ['First', 'Second', 'Third', 'Fourth', 'Fifth']
    +df.index = np.arange(10)
    +
    +display(df)
    +print(df['Second'].mean() )
    +print(df.info())
    +print(df.describe())
    +
    +from pylab import plt, mpl
    +plt.style.use('seaborn')
    +mpl.rcParams['font.family'] = 'serif'
    +
    +df.cumsum().plot(lw=2.0, figsize=(10,6))
    +plt.show()
    +
    +
    +df.plot.bar(figsize=(10,6), rot=15)
    +plt.show()
    +
    +
    +
    +
    +

    We can produce a \(4\times 4\) matrix

    +
    +
    +
    b = np.arange(16).reshape((4,4))
    +print(b)
    +df1 = pd.DataFrame(b)
    +print(df1)
    +
    +
    +
    +
    +

    and many other operations.

    +

    The Series class is another important class included in +pandas. You can view it as a specialization of DataFrame but where +we have just a single column of data. It shares many of the same features as _DataFrame. As with DataFrame, +most operations are vectorized, achieving thereby a high performance when dealing with computations of arrays, in particular labeled arrays. +As we will see below it leads also to a very concice code close to the mathematical operations we may be interested in. +For multidimensional arrays, we recommend strongly xarray. xarray has much of the same flexibility as pandas, but allows for the extension to higher dimensions than two.

    +
    +
    + + + + +
    + +
    +
    + + + +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/chapter3.html b/doc/src/LectureNotes/testbook/_build/html/chapter3.html new file mode 100644 index 000000000..462925a73 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/chapter3.html @@ -0,0 +1,1231 @@ + + + + + + + + + 2. Basic Steps of Scientific Investigations — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + +
    +
    + +
    + +
    +

    2. Basic Steps of Scientific Investigations

    +

    An overarching aim in this course is to give you a deeper +understanding of the scientific method. The problems we study will all +involve cases where we can apply classical mechanics. In our previous +material we already assumed that we had a model for the motion of an +object. Alternatively we could have data from experiment (like Usain +Bolt’s 100m world record run in 2008). Or we could have performed +ourselves an experiment and we want to understand which forces are at +play and whether these forces can be understood in terms of +fundamental forces.

    +

    Our first step consists in identifying the problem. What we sketch +here may include a mix of experiment and theoretical simulations, or +just experiment or only theory.

    +
    +

    2.1. Identifying our System

    +

    Here we can ask questions like

    +
      +
    1. What kind of object is moving

    2. +
    3. What kind of data do we have

    4. +
    5. How do we measure position, velocity, acceleration etc

    6. +
    7. Which initial conditions influence our system

    8. +
    9. Other aspects which allow us to identify the system

    10. +
    +
    +
    +

    2.2. Defining a Model

    +

    With our eventual data and observations we would now like to develop a +model for the system. In the end we want obviously to be able to +understand which forces are at play and how they influence our +specific system. That is, can we extract some deeper insights about a +system?

    +

    We need then to

    +
      +
    1. Find the forces that act on our system

    2. +
    3. Introduce models for the forces

    4. +
    5. Identify the equations which can govern the system (Newton’s second law for example)

    6. +
    7. More elements we deem important for defining our model

    8. +
    +
    +
    +

    2.3. Solving the Equations

    +

    With the model at hand, we can then solve the equations. In classical mechanics we normally end up with solving sets of coupled ordinary differential equations or partial differential equations.

    +
      +
    1. Using Newton’s second law we have equations of the type \(\boldsymbol{F}=m\boldsymbol{a}=md\boldsymbol{v}/dt\)

    2. +
    3. We need to define the initial conditions (typically the initial velocity and position as functions of time) and/or initial conditions and boundary conditions

    4. +
    5. The solution of the equations give us then the position, the velocity and other time-dependent quantities which may specify the motion of a given object.

    6. +
    +

    We are not yet done. With our lovely solvers, we need to start thinking.

    +

    Now it is time to ask the big questions. What do our results mean? Can we give a simple interpretation in terms of fundamental laws? What do our results mean? Are they correct? +Thus, typical questions we may ask are

    +
      +
    1. Are our results for say \(\boldsymbol{r}(t)\) valid? Do we trust what we did? Can you validate and verify the correctness of your results?

    2. +
    3. Evaluate the answers and their implications

    4. +
    5. Compare with experimental data if possible. Does our model make sense?

    6. +
    7. and obviously many other questions.

    8. +
    +

    The analysis stage feeds back to the first stage. It may happen that +the data we had were not good enough, there could be large statistical +uncertainties. We may need to collect more data or perhaps we did a +sloppy job in identifying the degrees of freedom.

    +

    All these steps are essential elements in a scientific +enquiry. Hopefully, through a mix of numerical simulations, analytical +calculations and experiments we may gain a deeper insight about the +physics of a specific system.

    +

    Let us now remind ourselves of Newton’s laws, since these are the laws of motion we will study in this course.

    +
    +
    +

    2.4. Newton’s Laws

    +

    When analyzing a physical system we normally start with distinguishing between the object we are studying (we will label this in more general terms as our system) and how this system interacts with the environment (which often means everything else!)

    +

    In our investigations we will thus analyze a specific physics problem in terms of the system and the environment. +In doing so we need to identify the forces that act on the system and assume that the +forces acting on the system must have a source, an identifiable cause in +the environment.

    +

    A force acting on for example a falling object must be related to an interaction with something in the environment. +This also means that we do not consider internal forces. The latter are forces between +one part of the object and another part. In this course we will mainly focus on external forces.

    +

    Forces are either contact forces or long-range forces.

    +

    Contact forces, as evident from the name, are forces that occur at the contact between +the system and the environment. Well-known long-range forces are the gravitional force and the electromagnetic force.

    +
    +
    +

    2.5. Setting up a model for forces acting on an object

    +

    In order to set up the forces which act on an object, the following steps may be useful

    +
      +
    1. Divide the problem into system and environment.

    2. +
    3. Draw a figure of the object and everything in contact with the object.

    4. +
    5. Draw a closed curve around the system.

    6. +
    7. Find contact points—these are the points where contact forces may act.

    8. +
    9. Give names and symbols to all the contact forces.

    10. +
    11. Identify the long-range forces.

    12. +
    13. Make a drawing of the object. Draw the forces as arrows, vectors, starting from where the force is acting. The direction of the vector(s) indicates the (positive) direction of the force. Try to make the length of the arrow indicate the relative magnitude of the forces.

    14. +
    15. Draw in the axes of the coordinate system. It is often convenient to make one axis parallel to the direction of motion. When you choose the direction of the axis you also choose the positive direction for the axis.

    16. +
    +
    +
    +

    2.6. Newton’s Laws, the Second one first

    +

    Newton’s second law of motion: The force \(\boldsymbol{F}\) on an object of inertial mass \(m\) +is related to the acceleration a of the object through

    +
    +\[ +\boldsymbol{F} = m\boldsymbol{a}, +\]
    +

    where \(\boldsymbol{a}\) is the acceleration.

    +

    Newton’s laws of motion are laws of nature that have been found by experimental +investigations and have been shown to hold up to continued experimental investigations. +Newton’s laws are valid over a wide range of length- and time-scales. We +use Newton’s laws of motion to describe everything from the motion of atoms to the +motion of galaxies.

    +

    The second law is a vector equation with the acceleration having the same +direction as the force. The acceleration is proportional to the force via the mass \(m\) of the system under study.

    +

    Newton’s second law introduces a new property of an object, the so-called +inertial mass \(m\). We determine the inertial mass of an object by measuring the +acceleration for a given applied force.

    +
    +
    +

    2.7. Then the First Law

    +

    What happens if the net external force on a body is zero? Applying Newton’s second +law, we find:

    +
    +\[ +\boldsymbol{F} = 0 = m\boldsymbol{a}, +\]
    +

    which gives using the definition of the acceleration

    +
    +\[ +\boldsymbol{a} = \frac{d\boldsymbol{v}}{dt}=0. +\]
    +

    The acceleration is zero, which means that the velocity of the object is constant. This +is often referred to as Newton’s first law. An object in a state of uniform motion tends to remain in +that state unless an external force changes its state of motion. +Why do we need a separate law for this? Is it not simply a special case of Newton’s +second law? Yes, Newton’s first law can be deduced from the second law as we have +illustrated. However, the first law is often used for a different purpose: Newton’s +First Law tells us about the limit of applicability of Newton’s Second law. Newton’s +Second law can only be used in reference systems where the First law is obeyed. But +is not the First law always valid? No! The First law is only valid in reference systems +that are not accelerated. If you observe the motion of a ball from an accelerating +car, the ball will appear to accelerate even if there are no forces acting on it. We call +systems that are not accelerating inertial systems, and Newton’s first law is often +called the law of inertia. Newton’s first and second laws of motion are only valid in +inertial systems.

    +

    A system is an inertial system if it is not accelerated. It means that the reference system +must not be accelerating linearly or rotating. Unfortunately, this means that most +systems we know are not really inertial systems. For example, the surface of the +Earth is clearly not an inertial system, because the Earth is rotating. The Earth is also +not an inertial system, because it ismoving in a curved path around the Sun. However, +even if the surface of the Earth is not strictly an inertial system, it may be considered +to be approximately an inertial system for many laboratory-size experiments.

    +
    +
    +

    2.8. And finally the Third Law

    +

    If there is a force from object A on object B, there is also a force from object B on object A. +This fundamental principle of interactions is called Newton’s third law. We do not +know of any force that do not obey this law: All forces appear in pairs. Newton’s +third law is usually formulated as: For every action there is an equal and opposite +reaction.

    +
    +
    +

    2.9. Motion of a Single Object

    +

    Here we consider the motion of a single particle moving under +the influence of some set of forces. We will consider some problems where +the force does not depend on the position. In that case Newton’s law +\(m\dot{\boldsymbol{v}}=\boldsymbol{F}(\boldsymbol{v})\) is a first-order differential +equation and one solves for \(\boldsymbol{v}(t)\), then moves on to integrate +\(\boldsymbol{v}\) to get the position. In essentially all of these cases we cna find an analytical solution.

    +
    +
    +

    2.10. Air Resistance in One Dimension

    +

    Air resistance tends to scale as the square of the velocity. This is +in contrast to many problems chosen for textbooks, where it is linear +in the velocity. The choice of a linear dependence is motivated by +mathematical simplicity (it keeps the differential equation linear) +rather than by physics. One can see that the force should be quadratic +in velocity by considering the momentum imparted on the air +molecules. If an object sweeps through a volume \(dV\) of air in time +\(dt\), the momentum imparted on the air is

    + +
    +
    +\[ +\begin{equation} +dP=\rho_m dV v, +\label{_auto1} \tag{1} +\end{equation} +\]
    +

    where \(v\) is the velocity of the object and \(\rho_m\) is the mass +density of the air. If the molecules bounce back as opposed to stop +you would double the size of the term. The opposite value of the +momentum is imparted onto the object itself. Geometrically, the +differential volume is

    + +
    +
    +\[ +\begin{equation} +dV=Avdt, +\label{_auto2} \tag{2} +\end{equation} +\]
    +

    where \(A\) is the cross-sectional area and \(vdt\) is the distance the +object moved in time \(dt\).

    +
    +
    +

    2.11. Resulting Acceleration

    +

    Plugging this into the expression above,

    + +
    +
    +\[ +\begin{equation} +\frac{dP}{dt}=-\rho_m A v^2. +\label{_auto3} \tag{3} +\end{equation} +\]
    +

    This is the force felt by the particle, and is opposite to its +direction of motion. Now, because air doesn’t stop when it hits an +object, but flows around the best it can, the actual force is reduced +by a dimensionless factor \(c_W\), called the drag coefficient.

    + +
    +
    +\[ +\begin{equation} +F_{\rm drag}=-c_W\rho_m Av^2, +\label{_auto4} \tag{4} +\end{equation} +\]
    +

    and the acceleration is

    +
    +\[ +\begin{eqnarray} +\frac{dv}{dt}=-\frac{c_W\rho_mA}{m}v^2. +\end{eqnarray} +\]
    +

    For a particle with initial velocity \(v_0\), one can separate the \(dt\) +to one side of the equation, and move everything with \(v\)s to the +other side. We did this in our discussion of simple motion and will not repeat it here.

    +

    On more general terms, +for many systems, e.g. an automobile, there are multiple sources of +resistance. In addition to wind resistance, where the force is +proportional to \(v^2\), there are dissipative effects of the tires on +the pavement, and in the axel and drive train. These other forces can +have components that scale proportional to \(v\), and components that +are independent of \(v\). Those independent of \(v\), e.g. the usual +\(f=\mu_K N\) frictional force you consider in your first Physics courses, only set in +once the object is actually moving. As speeds become higher, the \(v^2\) +components begin to dominate relative to the others. For automobiles +at freeway speeds, the \(v^2\) terms are largely responsible for the +loss of efficiency. To travel a distance \(L\) at fixed speed \(v\), the +energy/work required to overcome the dissipative forces are \(fL\), +which for a force of the form \(f=\alpha v^n\) becomes

    +
    +\[ +\begin{eqnarray} +W=\int dx~f=\alpha v^n L. +\end{eqnarray} +\]
    +

    For \(n=0\) the work is +independent of speed, but for the wind resistance, where \(n=2\), +slowing down is essential if one wishes to reduce fuel consumption. It +is also important to consider that engines are designed to be most +efficient at a chosen range of power output. Thus, some cars will get +better mileage at higher speeds (They perform better at 50 mph than at +5 mph) despite the considerations mentioned above.

    +
    +
    +

    2.12. Going Ballistic, Projectile Motion or a Softer Approach, Falling Raindrops

    +

    As an example of Newton’s Laws we consider projectile motion (or a +falling raindrop or a ball we throw up in the air) with a drag force. Even though air resistance is +largely proportional to the square of the velocity, we will consider +the drag force to be linear to the velocity, \(\boldsymbol{F}=-m\gamma\boldsymbol{v}\), +for the purposes of this exercise. The acceleration for a projectile moving upwards, +\(\boldsymbol{a}=\boldsymbol{F}/m\), becomes

    +
    +\[\begin{split} +\begin{eqnarray} +\frac{dv_x}{dt}=-\gamma v_x,\\ +\nonumber +\frac{dv_y}{dt}=-\gamma v_y-g, +\end{eqnarray} +\end{split}\]
    +

    and \(\gamma\) has dimensions of inverse time.

    +

    If you on the other hand have a falling raindrop, how do these equations change? See for example Figure 2.1 in Taylor. +Let us stay with a ball which is thrown up in the air at \(t=0\).

    +
    +
    +

    2.13. Ways of solving these equations

    +

    We will go over two different ways to solve this equation. The first +by direct integration, and the second as a differential equation. To +do this by direct integration, one simply multiplies both sides of the +equations above by \(dt\), then divide by the appropriate factors so +that the \(v\)s are all on one side of the equation and the \(dt\) is on +the other. For the \(x\) motion one finds an easily integrable equation,

    +
    +\[\begin{split} +\begin{eqnarray} +\frac{dv_x}{v_x}&=&-\gamma dt,\\ +\nonumber +\int_{v_{0x}}^{v_{x}}\frac{dv_x}{v_x}&=&-\gamma\int_0^{t}dt,\\ +\nonumber +\ln\left(\frac{v_{x}}{v_{0x}}\right)&=&-\gamma t,\\ +\nonumber +v_{x}(t)&=&v_{0x}e^{-\gamma t}. +\end{eqnarray} +\end{split}\]
    +

    This is very much the result you would have written down +by inspection. For the \(y\)-component of the velocity,

    +
    +\[\begin{split} +\begin{eqnarray} +\frac{dv_y}{v_y+g/\gamma}&=&-\gamma dt\\ +\nonumber +\ln\left(\frac{v_{y}+g/\gamma}{v_{0y}-g/\gamma}\right)&=&-\gamma t_f,\\ +\nonumber +v_{fy}&=&-\frac{g}{\gamma}+\left(v_{0y}+\frac{g}{\gamma}\right)e^{-\gamma t}. +\end{eqnarray} +\end{split}\]
    +

    Whereas \(v_x\) starts at some value and decays +exponentially to zero, \(v_y\) decays exponentially to the terminal +velocity, \(v_t=-g/\gamma\).

    +
    +
    +

    2.14. Solving as differential equations

    +

    Although this direct integration is simpler than the method we invoke +below, the method below will come in useful for some slightly more +difficult differential equations in the future. The differential +equation for \(v_x\) is straight-forward to solve. Because it is first +order there is one arbitrary constant, \(A\), and by inspection the +solution is

    + +
    +
    +\[ +\begin{equation} +v_x=Ae^{-\gamma t}. +\label{_auto5} \tag{5} +\end{equation} +\]
    +

    The arbitrary constants for equations of motion are usually determined +by the initial conditions, or more generally boundary conditions. By +inspection \(A=v_{0x}\), the initial \(x\) component of the velocity.

    +
    +
    +

    2.15. Differential Equations, contn

    +

    The differential equation for \(v_y\) is a bit more complicated due to +the presence of \(g\). Differential equations where all the terms are +linearly proportional to a function, in this case \(v_y\), or to +derivatives of the function, e.g., \(v_y\), \(dv_y/dt\), +\(d^2v_y/dt^2\cdots\), are called linear differential equations. If +there are terms proportional to \(v^2\), as would happen if the drag +force were proportional to the square of the velocity, the +differential equation is not longer linear. Because this expression +has only one derivative in \(v\) it is a first-order linear differential +equation. If a term were added proportional to \(d^2v/dt^2\) it would be +a second-order differential equation. In this case we have a term +completely independent of \(v\), the gravitational acceleration \(g\), and +the usual strategy is to first rewrite the equation with all the +linear terms on one side of the equal sign,

    + +
    +
    +\[ +\begin{equation} +\frac{dv_y}{dt}+\gamma v_y=-g. +\label{_auto6} \tag{6} +\end{equation} +\]
    +
    +
    +

    2.16. Splitting into two parts

    +

    Now, the solution to the equation can be broken into two +parts. Because this is a first-order differential equation we know +that there will be one arbitrary constant. Physically, the arbitrary +constant will be determined by setting the initial velocity, though it +could be determined by setting the velocity at any given time. Like +most differential equations, solutions are not “solved”. Instead, +one guesses at a form, then shows the guess is correct. For these +types of equations, one first tries to find a single solution, +i.e. one with no arbitrary constants. This is called the {\it +particular} solution, \(y_p(t)\), though it should really be called +“a” particular solution because there are an infinite number of such +solutions. One then finds a solution to the {\it homogenous} equation, +which is the equation with zero on the right-hand side,

    + +
    +
    +\[ +\begin{equation} +\frac{dv_{y,h}}{dt}+\gamma v_{y,h}=0. +\label{_auto7} \tag{7} +\end{equation} +\]
    +

    Homogenous solutions will have arbitrary constants.

    +

    The particular solution will solve the same equation as the original +general equation

    + +
    +
    +\[ +\begin{equation} +\frac{dv_{y,p}}{dt}+\gamma v_{y,p}=-g. +\label{_auto8} \tag{8} +\end{equation} +\]
    +

    However, we don’t need find one with arbitrary constants. Hence, it is +called a particular solution.

    +

    The sum of the two,

    + +
    +
    +\[ +\begin{equation} +v_y=v_{y,p}+v_{y,h}, +\label{_auto9} \tag{9} +\end{equation} +\]
    +

    is a solution of the total equation because of the linear nature of +the differential equation. One has now found a general solution +encompassing all solutions, because it both satisfies the general +equation (like the particular solution), and has an arbitrary constant +that can be adjusted to fit any initial condition (like the homogneous +solution). If the equation were not linear, e.g if there were a term +such as \(v_y^2\) or \(v_y\dot{v}_y\), this technique would not work.

    +
    +
    +

    2.17. More details

    +

    Returning to the example above, the homogenous solution is the same as +that for \(v_x\), because there was no gravitational acceleration in +that case,

    + +
    +
    +\[ +\begin{equation} +v_{y,h}=Be^{-\gamma t}. +\label{_auto10} \tag{10} +\end{equation} +\]
    +

    In this case a particular solution is one with constant velocity,

    + +
    +
    +\[ +\begin{equation} +v_{y,p}=-g/\gamma. +\label{_auto11} \tag{11} +\end{equation} +\]
    +

    Note that this is the terminal velocity of a particle falling from a +great height. The general solution is thus,

    + +
    +
    +\[ +\begin{equation} +v_y=Be^{-\gamma t}-g/\gamma, +\label{_auto12} \tag{12} +\end{equation} +\]
    +

    and one can find \(B\) from the initial velocity,

    + +
    +
    +\[ +\begin{equation} +v_{0y}=B-g/\gamma,~~~B=v_{0y}+g/\gamma. +\label{_auto13} \tag{13} +\end{equation} +\]
    +

    Plugging in the expression for \(B\) gives the \(y\) motion given the initial velocity,

    + +
    +
    +\[ +\begin{equation} +v_y=(v_{0y}+g/\gamma)e^{-\gamma t}-g/\gamma. +\label{_auto14} \tag{14} +\end{equation} +\]
    +

    It is easy to see that this solution has \(v_y=v_{0y}\) when \(t=0\) and +\(v_y=-g/\gamma\) when \(t\rightarrow\infty\).

    +

    One can also integrate the two equations to find the coordinates \(x\) +and \(y\) as functions of \(t\),

    +
    +\[\begin{split} +\begin{eqnarray} +x&=&\int_0^t dt'~v_{0x}(t')=\frac{v_{0x}}{\gamma}\left(1-e^{-\gamma t}\right),\\ +\nonumber +y&=&\int_0^t dt'~v_{0y}(t')=-\frac{gt}{\gamma}+\frac{v_{0y}+g/\gamma}{\gamma}\left(1-e^{-\gamma t}\right). +\end{eqnarray} +\end{split}\]
    +

    If the question was to find the position at a time \(t\), we would be +finished. However, the more common goal in a projectile equation +problem is to find the range, i.e. the distance \(x\) at which \(y\) +returns to zero. For the case without a drag force this was much +simpler. The solution for the \(y\) coordinate would have been +\(y=v_{0y}t-gt^2/2\). One would solve for \(t\) to make \(y=0\), which would +be \(t=2v_{0y}/g\), then plug that value for \(t\) into \(x=v_{0x}t\) to +find \(x=2v_{0x}v_{0y}/g=v_0\sin(2\theta_0)/g\). One follows the same +steps here, except that the expression for \(y(t)\) is more +complicated. Searching for the time where \(y=0\), and we get

    + +
    +
    +\[ +\begin{equation} +0=-\frac{gt}{\gamma}+\frac{v_{0y}+g/\gamma}{\gamma}\left(1-e^{-\gamma t}\right). +\label{_auto15} \tag{15} +\end{equation} +\]
    +

    This cannot be inverted into a simple expression \(t=\cdots\). Such +expressions are known as “transcendental equations”, and are not the +rare instance, but are the norm. In the days before computers, one +might plot the right-hand side of the above graphically as +a function of time, then find the point where it crosses zero.

    +

    Now, the most common way to solve for an equation of the above type +would be to apply Newton’s method numerically. This involves the +following algorithm for finding solutions of some equation \(F(t)=0\).

    +
      +
    1. First guess a value for the time, \(t_{\rm guess}\).

    2. +
    3. Calculate \(F\) and its derivative, \(F(t_{\rm guess})\) and \(F'(t_{\rm guess})\).

    4. +
    5. Unless you guessed perfectly, \(F\ne 0\), and assuming that \(\Delta F\approx F'\Delta t\), one would choose

    6. +
    7. \(\Delta t=-F(t_{\rm guess})/F'(t_{\rm guess})\).

    8. +
    9. Now repeat step 1, but with \(t_{\rm guess}\rightarrow t_{\rm guess}+\Delta t\).

    10. +
    +

    If the \(F(t)\) were perfectly linear in \(t\), one would find \(t\) in one +step. Instead, one typically finds a value of \(t\) that is closer to +the final answer than \(t_{\rm guess}\). One breaks the loop once one +finds \(F\) within some acceptable tolerance of zero. A program to do +this will be added shortly.

    +
    +
    +

    2.18. Motion in a Magnetic Field

    +

    Another example of a velocity-dependent force is magnetism,

    +
    +\[\begin{split} +\begin{eqnarray} +\boldsymbol{F}&=&q\boldsymbol{v}\times\boldsymbol{B},\\ +\nonumber +F_i&=&q\sum_{jk}\epsilon_{ijk}v_jB_k. +\end{eqnarray} +\end{split}\]
    +

    For a uniform field in the \(z\) direction \(\boldsymbol{B}=B\hat{z}\), the force can only have \(x\) and \(y\) components,

    +
    +\[\begin{split} +\begin{eqnarray} +F_x&=&qBv_y\\ +\nonumber +F_y&=&-qBv_x. +\end{eqnarray} +\end{split}\]
    +

    The differential equations are

    +
    +\[\begin{split} +\begin{eqnarray} +\dot{v}_x&=&\omega_c v_y,\omega_c= qB/m\\ +\nonumber +\dot{v}_y&=&-\omega_c v_x. +\end{eqnarray} +\end{split}\]
    +

    One can solve the equations by taking time derivatives of either equation, then substituting into the other equation,

    +
    +\[\begin{split} +\begin{eqnarray} +\ddot{v}_x=\omega_c\dot{v_y}=-\omega_c^2v_x,\\ +\nonumber +\ddot{v}_y&=&-\omega_c\dot{v}_x=-\omega_cv_y. +\end{eqnarray} +\end{split}\]
    +

    The solution to these equations can be seen by inspection,

    +
    +\[\begin{split} +\begin{eqnarray} +v_x&=&A\sin(\omega_ct+\phi),\\ +\nonumber +v_y&=&A\cos(\omega_ct+\phi). +\end{eqnarray} +\end{split}\]
    +

    One can integrate the equations to find the positions as a function of time,

    +
    +\[\begin{split} +\begin{eqnarray} +x-x_0&=&\int_{x_0}^x dx=\int_0^t dt v(t)\\ +\nonumber +&=&\frac{-A}{\omega_c}\cos(\omega_ct+\phi),\\ +\nonumber +y-y_0&=&\frac{A}{\omega_c}\sin(\omega_ct+\phi). +\end{eqnarray} +\end{split}\]
    +

    The trajectory is a circle centered at \(x_0,y_0\) with amplitude \(A\) rotating in the clockwise direction.

    +

    The equations of motion for the \(z\) motion are

    + +
    +
    +\[ +\begin{equation} +\dot{v_z}=0, +\label{_auto16} \tag{16} +\end{equation} +\]
    +

    which leads to

    + +
    +
    +\[ +\begin{equation} +z-z_0=V_zt. +\label{_auto17} \tag{17} +\end{equation} +\]
    +

    Added onto the circle, the motion is helical.

    +

    Note that the kinetic energy,

    + +
    +
    +\[ +\begin{equation} +T=\frac{1}{2}m(v_x^2+v_y^2+v_z^2)=\frac{1}{2}m(\omega_c^2A^2+V_z^2), +\label{_auto18} \tag{18} +\end{equation} +\]
    +

    is constant. This is because the force is perpendicular to the +velocity, so that in any differential time element \(dt\) the work done +on the particle \(\boldsymbol{F}\cdot{dr}=dt\boldsymbol{F}\cdot{v}=0\).

    +

    One should think about the implications of a velocity dependent +force. Suppose one had a constant magnetic field in deep space. If a +particle came through with velocity \(v_0\), it would undergo cyclotron +motion with radius \(R=v_0/\omega_c\). However, if it were still its +motion would remain fixed. Now, suppose an observer looked at the +particle in one reference frame where the particle was moving, then +changed their velocity so that the particle’s velocity appeared to be +zero. The motion would change from circular to fixed. Is this +possible?

    +

    The solution to the puzzle above relies on understanding +relativity. Imagine that the first observer believes \(\boldsymbol{B}\ne 0\) and +that the electric field \(\boldsymbol{E}=0\). If the observer then changes +reference frames by accelerating to a velocity \(\boldsymbol{v}\), in the new +frame \(\boldsymbol{B}\) and \(\boldsymbol{E}\) both change. If the observer moved to the +frame where the charge, originally moving with a small velocity \(v\), +is now at rest, the new electric field is indeed \(\boldsymbol{v}\times\boldsymbol{B}\), +which then leads to the same acceleration as one had before. If the +velocity is not small compared to the speed of light, additional +\(\gamma\) factors come into play, +\(\gamma=1/\sqrt{1-(v/c)^2}\). Relativistic motion will not be +considered in this course.

    +
    +
    +

    2.19. Sliding Block tied to a Wall

    +

    Another classical case is that of simple harmonic oscillations, here represented by a block sliding on a horizontal frictionless surface. The block is tied to a wall with a spring. If the spring is not compressed or stretched too far, the force on the block at a given position \(x\) is

    +
    +\[ +F=-kx. +\]
    +

    The negative sign means that the force acts to restore the object to an equilibrium position. Newton’s equation of motion for this idealized system is then

    +
    +\[ +m\frac{d^2x}{dt^2}=-kx, +\]
    +

    or we could rephrase it as

    + +
    +
    +\[ +\frac{d^2x}{dt^2}=-\frac{k}{m}x=-\omega_0^2x, +\label{eq:newton1} \tag{19} +\]
    +

    with the angular frequency \(\omega_0^2=k/m\).

    +

    The above differential equation has the advantage that it can be solved analytically with solutions on the form

    +
    +\[ +x(t)=Acos(\omega_0t+\nu), +\]
    +

    where \(A\) is the amplitude and \(\nu\) the phase constant. This provides in turn an important test for the numerical +solution and the development of a program for more complicated cases which cannot be solved analytically.

    +

    With the position \(x(t)\) and the velocity \(v(t)=dx/dt\) we can reformulate Newton’s equation in the following way

    +
    +\[ +\frac{dx(t)}{dt}=v(t), +\]
    +

    and

    +
    +\[ +\frac{dv(t)}{dt}=-\omega_0^2x(t). +\]
    +

    We are now going to solve these equations using first the standard forward Euler method. Later we will try to improve upon this.

    +

    Before proceeding however, it is important to note that in addition to the exact solution, we have at least two further tests which can be used to check our solution.

    +

    Since functions like \(cos\) are periodic with a period \(2\pi\), then the solution \(x(t)\) has also to be periodic. This means that

    +
    +\[ +x(t+T)=x(t), +\]
    +

    with \(T\) the period defined as

    +
    +\[ +T=\frac{2\pi}{\omega_0}=\frac{2\pi}{\sqrt{k/m}}. +\]
    +

    Observe that \(T\) depends only on \(k/m\) and not on the amplitude of the solution.

    +

    In addition to the periodicity test, the total energy has also to be conserved.

    +

    Suppose we choose the initial conditions

    +
    +\[ +x(t=0)=1\hspace{0.1cm} \mathrm{m}\hspace{1cm} v(t=0)=0\hspace{0.1cm}\mathrm{m/s}, +\]
    +

    meaning that block is at rest at \(t=0\) but with a potential energy

    +
    +\[ +E_0=\frac{1}{2}kx(t=0)^2=\frac{1}{2}k. +\]
    +

    The total energy at any time \(t\) has however to be conserved, meaning that our solution has to fulfil the condition

    +
    +\[ +E_0=\frac{1}{2}kx(t)^2+\frac{1}{2}mv(t)^2. +\]
    +

    We will derive this equation in our discussion on energy conservation.

    +

    An algorithm which implements these equations is included below.

    +
      +
    • Choose the initial position and speed, with the most common choice \(v(t=0)=0\) and some fixed value for the position.

    • +
    • Choose the method you wish to employ in solving the problem.

    • +
    • Subdivide the time interval \([t_i,t_f] \) into a grid with step size

    • +
    +
    +\[ +h=\frac{t_f-t_i}{N}, +\]
    +

    where \(N\) is the number of mesh points.

    +
      +
    • Calculate now the total energy given by

    • +
    +
    +\[ +E_0=\frac{1}{2}kx(t=0)^2=\frac{1}{2}k. +\]
    +
      +
    • Choose ODE solver to obtain \(x_{i+1}\) and \(v_{i+1}\) starting from the previous values \(x_i\) and \(v_i\).

    • +
    • When we have computed \(x(v)_{i+1}\) we upgrade \(t_{i+1}=t_i+h\).

    • +
    • This iterative process continues till we reach the maximum time \(t_f\).

    • +
    • The results are checked against the exact solution. Furthermore, one has to check the stability of the numerical solution against the chosen number of mesh points \(N\).

    • +
    +

    The following python program ( code will be added shortly)

    +
    +
    +
    #
    +# This program solves Newtons equation for a block sliding on
    +# an horizontal frictionless surface.
    +# The block is tied to the wall with a spring, so N's eq takes the form:
    +#
    +#  m d^2x/dt^2 = - kx
    +#
    +# In order to make the solution dimless, we set k/m = 1.
    +# This results in two coupled diff. eq's that may be written as:
    +#
    +#  dx/dt = v
    +#  dv/dt = -x
    +#
    +# The user has to specify the initial velocity and position,
    +# and the number of steps. The time interval is fixed to
    +# t \in [0, 4\pi) (two periods)
    +#
    +
    +
    +
    +
    +
    +
    +

    2.20. The classical pendulum and scaling the equations

    +

    The angular equation of motion of the pendulum is given by +Newton’s equation and with no external force it reads

    + +
    +
    +\[ +\begin{equation} + ml\frac{d^2\theta}{dt^2}+mgsin(\theta)=0, +\label{_auto19} \tag{20} +\end{equation} +\]
    +

    with an angular velocity and acceleration given by

    + +
    +
    +\[ +\begin{equation} + v=l\frac{d\theta}{dt}, +\label{_auto20} \tag{21} +\end{equation} +\]
    +

    and

    + +
    +
    +\[ +\begin{equation} + a=l\frac{d^2\theta}{dt^2}. +\label{_auto21} \tag{22} +\end{equation} +\]
    +
    +
    +

    2.21. More on the Pendulum

    +

    We do however expect that the motion will gradually come to an end due a viscous drag torque acting on the pendulum. +In the presence of the drag, the above equation becomes

    + +
    +
    +\[ +\begin{equation} + ml\frac{d^2\theta}{dt^2}+\nu\frac{d\theta}{dt} +mgsin(\theta)=0, \label{eq:pend1} \tag{23} +\end{equation} +\]
    +

    where \(\nu\) is now a positive constant parameterizing the viscosity +of the medium in question. In order to maintain the motion against +viscosity, it is necessary to add some external driving force. +We choose here a periodic driving force. The last equation becomes then

    + +
    +
    +\[ +\begin{equation} + ml\frac{d^2\theta}{dt^2}+\nu\frac{d\theta}{dt} +mgsin(\theta)=Asin(\omega t), \label{eq:pend2} \tag{24} +\end{equation} +\]
    +

    with \(A\) and \(\omega\) two constants representing the amplitude and +the angular frequency respectively. The latter is called the driving frequency.

    +
    +
    +

    2.22. More on the Pendulum

    +

    We define

    +
    +\[ +\omega_0=\sqrt{g/l}, +\]
    +

    the so-called natural frequency and the new dimensionless quantities

    +
    +\[ +\hat{t}=\omega_0t, +\]
    +

    with the dimensionless driving frequency

    +
    +\[ +\hat{\omega}=\frac{\omega}{\omega_0}, +\]
    +

    and introducing the quantity \(Q\), called the quality factor,

    +
    +\[ +Q=\frac{mg}{\omega_0\nu}, +\]
    +

    and the dimensionless amplitude

    +
    +\[ +\hat{A}=\frac{A}{mg} +\]
    +

    We have

    +
    +\[ +\frac{d^2\theta}{d\hat{t}^2}+\frac{1}{Q}\frac{d\theta}{d\hat{t}} + +sin(\theta)=\hat{A}cos(\hat{\omega}\hat{t}). +\]
    +

    This equation can in turn be recast in terms of two coupled first-order differential equations as follows

    +
    +\[ +\frac{d\theta}{d\hat{t}}=\hat{v}, +\]
    +

    and

    +
    +\[ +\frac{d\hat{v}}{d\hat{t}}=-\frac{\hat{v}}{Q}-sin(\theta)+\hat{A}cos(\hat{\omega}\hat{t}). +\]
    +

    These are the equations to be solved. The factor \(Q\) represents the number of oscillations of the undriven system that must occur before its energy is significantly reduced due to the viscous drag. The amplitude \(\hat{A}\) is measured in units of the maximum possible gravitational torque while \(\hat{\omega}\) is the angular frequency of the external torque measured in units of the pendulum’s natural frequency.

    +
    +
    + + + + +
    + +
    +
    + + + +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/chapter4.html b/doc/src/LectureNotes/testbook/_build/html/chapter4.html new file mode 100644 index 000000000..85190d6a1 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/chapter4.html @@ -0,0 +1,1708 @@ + + + + + + + + + 3. Work, Energy, Momentum and Conservation laws — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + +
    + + +
    +
    + Contents +
    + +
    +
    +
    +
    + +
    + +
    +

    3. Work, Energy, Momentum and Conservation laws

    +

    Energy conservation is most convenient as a strategy for addressing +problems where time does not appear. For example, a particle goes +from position \(x_0\) with speed \(v_0\), to position \(x_f\); what is its +new speed? However, it can also be applied to problems where time +does appear, such as in solving for the trajectory \(x(t)\), or +equivalently \(t(x)\).

    +
    +

    3.1. Work and Energy

    +

    Material to be added here.

    +
    +
    +

    3.2. Energy Conservation

    +

    Energy is conserved in the case where the potential energy, \(V(\boldsymbol{r})\), depends only on position, and not on time. The force is determined by \(V\),

    + +
    +
    +\[ +\begin{equation} +\boldsymbol{F}(\boldsymbol{r})=-\nabla V(\boldsymbol{r}). +\label{_auto1} \tag{1} +\end{equation} +\]
    +

    The net energy, \(E=V+K\) where \(K\) is the kinetic energy, is then conserved,

    +
    +\[\begin{split} +\begin{eqnarray} +\frac{d}{dt}(K+V)&=&\frac{d}{dt}\left(\frac{m}{2}(v_x^2+v_y^2+v_z^2)+V(\boldsymbol{r})\right)\\ +\nonumber +&=&m\left(v_x\frac{dv_x}{dt}+v_y\frac{dv_y}{dt}+v_z\frac{dv_z}{dt}\right) ++\partial_xV\frac{dx}{dt}+\partial_yV\frac{dy}{dt}+\partial_zV\frac{dz}{dt}\\ +\nonumber +&=&v_xF_x+v_yF_y+v_zF_z-F_xv_x-F_yv_y-F_zv_z=0. +\end{eqnarray} +\end{split}\]
    +

    The same proof can be written more compactly with vector notation,

    +
    +\[\begin{split} +\begin{eqnarray} +\frac{d}{dt}\left(\frac{m}{2}v^2+V(\boldsymbol{r})\right) +&=&m\boldsymbol{v}\cdot\dot{\boldsymbol{v}}+\nabla V(\boldsymbol{r})\cdot\dot{\boldsymbol{r}}\\ +\nonumber +&=&\boldsymbol{v}\cdot\boldsymbol{F}-\boldsymbol{F}\cdot\boldsymbol{v}=0. +\end{eqnarray} +\end{split}\]
    +

    Inverting the expression for kinetic energy,

    + +
    +
    +\[ +\begin{equation} +v=\sqrt{2K/m}=\sqrt{2(E-V)/m}, +\label{_auto2} \tag{2} +\end{equation} +\]
    +

    allows one to solve for the one-dimensional trajectory \(x(t)\), by finding \(t(x)\),

    + +
    +
    +\[ +\begin{equation} +t=\int_{x_0}^x \frac{dx'}{v(x')}=\int_{x_0}^x\frac{dx'}{\sqrt{2(E-V(x'))/m}}. +\label{_auto3} \tag{3} +\end{equation} +\]
    +

    Note this would be much more difficult in higher dimensions, because +you would have to determine which points, \(x,y,z\), the particles might +reach in the trajectory, whereas in one dimension you can typically +tell by simply seeing whether the kinetic energy is positive at every +point between the old position and the new position.

    +

    Consider a simple harmonic oscillator potential, \(V(x)=kx^2/2\), with a particle emitted from \(x=0\) with velocity \(v_0\). Solve for the trajectory \(t(x)\),

    +
    +\[\begin{split} +\begin{eqnarray} +t&=&\int_{0}^x \frac{dx'}{\sqrt{2(E-kx^2/2)/m}}\\ +\nonumber +&=&\sqrt{m/k}\int_0^x~\frac{dx'}{\sqrt{x_{\rm max}^2-x^{\prime 2}}},~~~x_{\rm max}^2=2E/k. +\end{eqnarray} +\end{split}\]
    +

    Here \(E=mv_0^2/2\) and \(x_{\rm max}\) is defined as the maximum +displacement before the particle turns around. This integral is done +by the substitution \(\sin\theta=x/x_{\rm max}\).

    +
    +\[\begin{split} +\begin{eqnarray} +(k/m)^{1/2}t&=&\sin^{-1}(x/x_{\rm max}),\\ +\nonumber +x&=&x_{\rm max}\sin\omega t,~~~\omega=\sqrt{k/m}. +\end{eqnarray} +\end{split}\]
    +
    +
    +

    3.3. Conservation of Momentum

    +

    Newton’s third law which we met earlier states that For every action there is an equal and opposite reaction, is more accurately stated as +If two bodies exert forces on each other, these forces are equal in magnitude and opposite in direction.

    +

    This means that for two bodies \(i\) and \(j\), if the force on \(i\) due to \(j\) is called \(\boldsymbol{F}_{ij}\), then

    + +
    +
    +\[ +\begin{equation} +\boldsymbol{F}_{ij}=-\boldsymbol{F}_{ji}. +\label{_auto4} \tag{4} +\end{equation} +\]
    +

    Newton’s second law, \(\boldsymbol{F}=m\boldsymbol{a}\), can be written for a particle \(i\) as

    + +
    +
    +\[ +\begin{equation} +\boldsymbol{F}_i=\sum_{j\ne i} \boldsymbol{F}_{ij}=m_i\boldsymbol{a}_i, +\label{_auto5} \tag{5} +\end{equation} +\]
    +

    where \(\boldsymbol{F}_i\) (a single subscript) denotes the net force acting on \(i\). Because the mass of \(i\) is fixed, one can see that

    + +
    +
    +\[ +\begin{equation} +\boldsymbol{F}_i=\frac{d}{dt}m_i\boldsymbol{v}_i=\sum_{j\ne i}\boldsymbol{F}_{ij}. +\label{_auto6} \tag{6} +\end{equation} +\]
    +

    Now, one can sum over all the particles and obtain

    +
    +\[\begin{split} +\begin{eqnarray} +\frac{d}{dt}\sum_i m_iv_i&=&\sum_{ij, i\ne j}\boldsymbol{F}_{ij}\\ +\nonumber +&=&0. +\end{eqnarray} +\end{split}\]
    +

    The last step made use of the fact that for every term \(ij\), there is +an equivalent term \(ji\) with opposite force. Because the momentum is +defined as \(m\boldsymbol{v}\), for a system of particles,

    + +
    +
    +\[ +\begin{equation} +\frac{d}{dt}\sum_im_i\boldsymbol{v}_i=0,~~{\rm for~isolated~particles}. +\label{_auto7} \tag{7} +\end{equation} +\]
    +

    By “isolated” one means that the only force acting on any particle \(i\) +are those originating from other particles in the sum, i.e. “no +external” forces. Thus, Newton’s third law leads to the conservation +of total momentum,

    +
    +\[\begin{split} +\begin{eqnarray} +\boldsymbol{P}&=&\sum_i m_i\boldsymbol{v}_i,\\ +\nonumber +\frac{d}{dt}\boldsymbol{P}&=&0. +\end{eqnarray} +\end{split}\]
    +

    Consider the rocket of mass \(M\) moving with velocity \(v\). After a +brief instant, the velocity of the rocket is \(v+\Delta v\) and the mass +is \(M-\Delta M\). Momentum conservation gives

    +
    +\[\begin{split} +\begin{eqnarray*} +Mv&=&(M-\Delta M)(v+\Delta v)+\Delta M(v-v_e)\\ +0&=&-\Delta Mv+M\Delta v+\Delta M(v-v_e),\\ +0&=&M\Delta v-\Delta Mv_e. +\end{eqnarray*} +\end{split}\]
    +

    In the second step we ignored the term \(\Delta M\Delta v\) because it is doubly small. The last equation gives

    +
    +\[\begin{split} +\begin{eqnarray} +\Delta v&=&\frac{v_e}{M}\Delta M,\\ +\nonumber +\frac{dv}{dt}&=&\frac{v_e}{M}\frac{dM}{dt}. +\end{eqnarray} +\end{split}\]
    +

    Integrating the expression with lower limits \(v_0=0\) and \(M_0\), one finds

    +
    +\[\begin{split} +\begin{eqnarray*} +v&=&v_e\int_{M_0}^M \frac{dM'}{M'}\\ +v&=&-v_e\ln(M/M_0)\\ +&=&-v_e\ln[(M_0-\alpha t)/M_0]. +\end{eqnarray*} +\end{split}\]
    +

    Because the total momentum of an isolated system is constant, one can +also quickly see that the center of mass of an isolated system is also +constant. The center of mass is the average position of a set of +masses weighted by the mass,

    + +
    +
    +\[ +\begin{equation} +\bar{x}=\frac{\sum_im_ix_i}{\sum_i m_i}. +\label{_auto8} \tag{8} +\end{equation} +\]
    +

    The rate of change of \(\bar{x}\) is

    +
    +\[ +\begin{eqnarray} +\dot{\bar{x}}&=&\frac{1}{M}\sum_i m_i\dot{x}_i=\frac{1}{M}P_x. +\end{eqnarray} +\]
    +

    Thus if the total momentum is constant the center of mass moves at a +constant velocity, and if the total momentum is zero the center of +mass is fixed.

    +
    +
    +

    3.4. Conservation of Angular Momentum

    +

    Consider a case where the force always points radially,

    + +
    +
    +\[ +\begin{equation} +\boldsymbol{F}(\boldsymbol{r})=F(r)\hat{r}, +\label{_auto9} \tag{9} +\end{equation} +\]
    +

    where \(\hat{r}\) is a unit vector pointing outward from the origin. The angular momentum is defined as

    + +
    +
    +\[ +\begin{equation} +\boldsymbol{L}=\boldsymbol{r}\times\boldsymbol{p}=m\boldsymbol{r}\times\boldsymbol{v}. +\label{_auto10} \tag{10} +\end{equation} +\]
    +

    The rate of change of the angular momentum is

    +
    +\[\begin{split} +\begin{eqnarray} +\frac{d\boldsymbol{L}}{dt}&=&m\boldsymbol{v}\times\boldsymbol{v}+m\boldsymbol{r}\times\dot{\boldsymbol{v}}\\ +\nonumber +&=&m\boldsymbol{v}\times\boldsymbol{v}+\boldsymbol{r}\times{\boldsymbol{F}}=0. +\end{eqnarray} +\end{split}\]
    +

    The first term is zero because \(\boldsymbol{v}\) is parallel to itself, and the +second term is zero because \(\boldsymbol{F}\) is parallel to \(\boldsymbol{r}\).

    +

    As an aside, one can see from the Levi-Civita symbol that the cross +product of a vector with itself is zero. Here, we consider a vector

    +
    +\[\begin{split} +\begin{eqnarray} +\boldsymbol{V}&=&\boldsymbol{A}\times\boldsymbol{A},\\ +\nonumber +V_i&=&(\boldsymbol{A}\times\boldsymbol{A})_i=\sum_{jk}\epsilon_{ijk}A_jA_k. +\end{eqnarray} +\end{split}\]
    +

    For any term \(i\), there are two contributions. For example, for \(i\) +denoting the \(x\) direction, either \(j\) denotes the \(y\) direction and +\(k\) denotes the \(z\) direction, or vice versa, so

    + +
    +
    +\[ +\begin{equation} +V_1=\epsilon_{123}A_2A_3+\epsilon_{132}A_3A_2. +\label{_auto11} \tag{11} +\end{equation} +\]
    +

    This is zero by the antisymmetry of \(\epsilon\) under permutations.

    +

    If the force is not radial, \(\boldsymbol{r}\times\boldsymbol{F}\ne 0\) as above, and angular momentum is no longer conserved,

    + +
    +
    +\[ +\begin{equation} +\frac{d\boldsymbol{L}}{dt}=\boldsymbol{r}\times\boldsymbol{F}\equiv\boldsymbol{\tau}, +\label{_auto12} \tag{12} +\end{equation} +\]
    +

    where \(\boldsymbol{\tau}\) is the torque.

    +

    For a system of isolated particles, one can write

    +
    +\[\begin{split} +\begin{eqnarray} +\frac{d}{dt}\sum_i\boldsymbol{L}_i&=&\sum_{i\ne j}\boldsymbol{r}_i\times \boldsymbol{F}_{ij}\\ +\nonumber +&=&\frac{1}{2}\sum_{i\ne j} \boldsymbol{r}_i\times \boldsymbol{F}_{ij}+\boldsymbol{r}_j\times\boldsymbol{F}_{ji}\\ +\nonumber +&=&\frac{1}{2}\sum_{i\ne j} (\boldsymbol{r}_i-\boldsymbol{r}_j)\times\boldsymbol{F}_{ij}=0, +\end{eqnarray} +\end{split}\]
    +

    where the last step used Newton’s third law, +\(\boldsymbol{F}_{ij}=-\boldsymbol{F}_{ji}\). If the forces between the particles are +radial, i.e. \(\boldsymbol{F}_{ij} ~||~ (\boldsymbol{r}_i-\boldsymbol{r}_j)\), then each term in +the sum is zero and the net angular momentum is fixed. Otherwise, you +could imagine an isolated system that would start spinning +spontaneously.

    +

    One can write the torque about a given axis, which we will denote as \(\hat{z}\), in polar coordinates, where

    +
    +\[ +\begin{eqnarray} +x&=&r\sin\theta\cos\phi,~~y=r\sin\theta\cos\phi,~~z=r\cos\theta, +\end{eqnarray} +\]
    +

    to find the \(z\) component of the torque,

    +
    +\[\begin{split} +\begin{eqnarray} +\tau_z&=&xF_y-yF_x\\ +\nonumber +&=&-r\sin\theta\left\{\cos\phi \partial_y-\sin\phi \partial_x\right\}V(x,y,z). +\end{eqnarray} +\end{split}\]
    +

    One can use the chain rule to write the partial derivative w.r.t. \(\phi\) (keeping \(r\) and \(\theta\) fixed),

    +
    +\[\begin{split} +\begin{eqnarray} +\partial_\phi&=&\frac{\partial x}{\partial\phi}\partial_x+\frac{\partial_y}{\partial\phi}\partial_y ++\frac{\partial z}{\partial\phi}\partial_z\\ +\nonumber +&=&-r\sin\theta\sin\phi\partial_x+\sin\theta\cos\phi\partial_y. +\end{eqnarray} +\end{split}\]
    +

    Combining the two equations,

    +
    +\[ +\begin{eqnarray} +\tau_z&=&-\partial_\phi V(r,\theta,\phi). +\end{eqnarray} +\]
    +

    Thus, if the potential is independent of the azimuthal angle \(\phi\), +there is no torque about the \(z\) axis and \(L_z\) is conserved.

    +
    +
    +

    3.5. Symmetries and Conservation Laws

    +

    When we derived the conservation of energy, we assumed that the +potential depended only on position, not on time. If it depended +explicitly on time, one can quickly see that the energy would have +changed at a rate \(\partial_tV(x,y,z,t)\). Note that if there is no +explicit dependence on time, i.e. \(V(x,y,z)\), the potential energy can +depend on time through the variations of \(x,y,z\) with time. However, +that variation does not lead to energy non-conservation. Further, we +just saw that if a potential does not depend on the azimuthal angle +about some axis, \(\phi\), that the angular momentum about that axis is +conserved.

    +

    Now, we relate momentum conservation to translational +invariance. Considering a system of particles with positions, +\(\boldsymbol{r}_i\), if one changed the coordinate system by a translation by a +differential distance \(\boldsymbol{\epsilon}\), the net potential would change +by

    +
    +\[\begin{split} +\begin{eqnarray} +\delta V(\boldsymbol{r}_1,\boldsymbol{r}_2\cdots)&=&\sum_i \boldsymbol{\epsilon}\cdot\nabla_i V(\boldsymbol{r}_1,\boldsymbol{r}_2,\cdots)\\ +\nonumber +&=&-\sum_i \boldsymbol{\epsilon}\cdot\boldsymbol{F}_i\\ +\nonumber +&=&-\frac{d}{dt}\sum_i \boldsymbol{\epsilon}\cdot\boldsymbol{p}_i. +\end{eqnarray} +\end{split}\]
    +

    Thus, if the potential is unchanged by a translation of the coordinate +system, the total momentum is conserved. If the potential is +translationally invariant in a given direction, defined by a unit +vector, \(\hat{\epsilon}\) in the \(\boldsymbol{\epsilon}\) direction, one can see +that

    +
    +\[ +\begin{eqnarray} +\hat{\epsilon}\cdot\nabla_i V(\boldsymbol{r}_i)&=&0. +\end{eqnarray} +\]
    +

    The component of the total momentum along that axis is conserved. This +is rather obvious for a single particle. If \(V(\boldsymbol{r})\) does not +depend on some coordinate \(x\), then the force in the \(x\) direction is +\(F_x=-\partial_xV=0\), and momentum along the \(x\) direction is +constant.

    +

    We showed how the total momentum of an isolated system of particle was conserved, even if the particles feel internal forces in all directions. In that case the potential energy could be written

    +
    +\[ +\begin{eqnarray} +V=\sum_{i,j\le i}V_{ij}(\boldsymbol{r}_i-\boldsymbol{r}_j). +\end{eqnarray} +\]
    +

    In this case, a translation leads to \(\boldsymbol{r}_i\rightarrow +\boldsymbol{r}_i+\boldsymbol{\epsilon}\), with the translation equally affecting the +coordinates of each particle. Because the potential depends only on +the relative coordinates, \(\delta V\) is manifestly zero. If one were +to go through the exercise of calculating \(\delta V\) for small +\(\boldsymbol{\epsilon}\), one would find that the term +\(\nabla_i V(\boldsymbol{r}_i-\boldsymbol{r}_j)\) would be canceled by the term +\(\nabla_jV(\boldsymbol{r}_i-\boldsymbol{r}_j)\).

    +

    The relation between symmetries of the potential and conserved +quantities (also called constants of motion) is one of the most +profound concepts one should gain from this course. It plays a +critical role in all fields of physics. This is especially true in +quantum mechanics, where a quantity \(A\) is conserved if its operator +commutes with the Hamiltonian. For example if the momentum operator +\(-i\hbar\partial_x\) commutes with the Hamiltonian, momentum is +conserved, and clearly this operator commutes if the Hamiltonian +(which represents the total energy, not just the potential) does not +depend on \(x\). Also in quantum mechanics the angular momentum operator +is \(L_z=-i\hbar\partial_\phi\). In fact, if the potential is unchanged +by rotations about some axis, angular momentum about that axis is +conserved. We return to this concept, from a more formal perspective, +later in the course when Lagrangian mechanics is presented.

    +
    +
    +

    3.6. Bulding a code for the Earth-Sun system

    +

    We will now venture into a study of a system which is energy +conserving. The aim is to see if we (since it is not possible to solve +the general equations analytically) we can develop stable numerical +algorithms whose results we can trust!

    +

    We solve the equations of motion numerically. We will also compute +quantities like the energy numerically.

    +

    We start with a simpler case first, the Earth-Sun system in two dimensions only. The gravitational force \(F_G\) on the earth from the sun is

    +
    +\[ +\boldsymbol{F}_G=-\frac{GM_{\odot}M_E}{r^3}\boldsymbol{r}, +\]
    +

    where \(G\) is the gravitational constant,

    +
    +\[ +M_E=6\times 10^{24}\mathrm{Kg}, +\]
    +

    the mass of Earth,

    +
    +\[ +M_{\odot}=2\times 10^{30}\mathrm{Kg}, +\]
    +

    the mass of the Sun and

    +
    +\[ +r=1.5\times 10^{11}\mathrm{m}, +\]
    +

    is the distance between Earth and the Sun. The latter defines what we call an astronomical unit AU. +From Newton’s second law we have then for the \(x\) direction

    +
    +\[ +\frac{d^2x}{dt^2}=-\frac{F_{x}}{M_E}, +\]
    +

    and

    +
    +\[ +\frac{d^2y}{dt^2}=-\frac{F_{y}}{M_E}, +\]
    +

    for the \(y\) direction.

    +

    Here we will use that \(x=r\cos{(\theta)}\), \(y=r\sin{(\theta)}\) and

    +
    +\[ +r = \sqrt{x^2+y^2}. +\]
    +

    We can rewrite

    +
    +\[ +F_{x}=-\frac{GM_{\odot}M_E}{r^2}\cos{(\theta)}=-\frac{GM_{\odot}M_E}{r^3}x, +\]
    +

    and

    +
    +\[ +F_{y}=-\frac{GM_{\odot}M_E}{r^2}\sin{(\theta)}=-\frac{GM_{\odot}M_E}{r^3}y, +\]
    +

    for the \(y\) direction.

    +

    We can rewrite these two equations

    +
    +\[ +F_{x}=-\frac{GM_{\odot}M_E}{r^2}\cos{(\theta)}=-\frac{GM_{\odot}M_E}{r^3}x, +\]
    +

    and

    +
    +\[ +F_{y}=-\frac{GM_{\odot}M_E}{r^2}\sin{(\theta)}=-\frac{GM_{\odot}M_E}{r^3}y, +\]
    +

    as four first-order coupled differential equations

    +

    4 +3

    +

    < +< +< +! +! +M +A +T +H +_ +B +L +O +C +K

    +

    4 +4

    +

    < +< +< +! +! +M +A +T +H +_ +B +L +O +C +K

    +

    4 +5

    +

    < +< +< +! +! +M +A +T +H +_ +B +L +O +C +K

    +
    +\[ +\frac{dy}{dt}=v_y. +\]
    +
    +
    +

    3.7. Building a code for the solar system, final coupled equations

    +

    The four coupled differential equations

    +

    4 +7

    +

    < +< +< +! +! +M +A +T +H +_ +B +L +O +C +K

    +

    4 +8

    +

    < +< +< +! +! +M +A +T +H +_ +B +L +O +C +K

    +

    4 +9

    +

    < +< +< +! +! +M +A +T +H +_ +B +L +O +C +K

    +
    +\[ +\frac{dy}{dt}=v_y, +\]
    +

    can be turned into dimensionless equations or we can introduce astronomical units with \(1\) AU = \(1.5\times 10^{11}\).

    +

    Using the equations from circular motion (with \(r =1\mathrm{AU}\))

    +
    +\[ +\frac{M_E v^2}{r} = F = \frac{GM_{\odot}M_E}{r^2}, +\]
    +

    we have

    +
    +\[ +GM_{\odot}=v^2r, +\]
    +

    and using that the velocity of Earth (assuming circular motion) is +\(v = 2\pi r/\mathrm{yr}=2\pi\mathrm{AU}/\mathrm{yr}\), we have

    +
    +\[ +GM_{\odot}= v^2r = 4\pi^2 \frac{(\mathrm{AU})^3}{\mathrm{yr}^2}. +\]
    +
    +
    +

    3.8. Building a code for the solar system, discretized equations

    +

    The four coupled differential equations can then be discretized using Euler’s method as (with step length \(h\))

    +

    5 +4

    +

    < +< +< +! +! +M +A +T +H +_ +B +L +O +C +K

    +

    5 +5

    +

    < +< +< +! +! +M +A +T +H +_ +B +L +O +C +K

    +

    5 +6

    +

    < +< +< +! +! +M +A +T +H +_ +B +L +O +C +K

    +
    +\[ +y_{i+1}=y_i+hv_{y,i}, +\]
    +
    +
    +

    3.9. Code Example with Euler’s Method

    +

    The code here implements Euler’s method for the Earth-Sun system using a more compact way of representing the vectors. Alternatively, you could have spelled out all the variables \(v_x\), \(v_y\), \(x\) and \(y\) as one-dimensional arrays.

    +
    +
    +
    %matplotlib inline
    +
    +# Common imports
    +import numpy as np
    +import pandas as pd
    +from math import *
    +import matplotlib.pyplot as plt
    +import os
    +
    +# Where to save the figures and data files
    +PROJECT_ROOT_DIR = "Results"
    +FIGURE_ID = "Results/FigureFiles"
    +DATA_ID = "DataFiles/"
    +
    +if not os.path.exists(PROJECT_ROOT_DIR):
    +    os.mkdir(PROJECT_ROOT_DIR)
    +
    +if not os.path.exists(FIGURE_ID):
    +    os.makedirs(FIGURE_ID)
    +
    +if not os.path.exists(DATA_ID):
    +    os.makedirs(DATA_ID)
    +
    +def image_path(fig_id):
    +    return os.path.join(FIGURE_ID, fig_id)
    +
    +def data_path(dat_id):
    +    return os.path.join(DATA_ID, dat_id)
    +
    +def save_fig(fig_id):
    +    plt.savefig(image_path(fig_id) + ".png", format='png')
    +
    +
    +DeltaT = 0.001
    +#set up arrays 
    +tfinal = 10 # in years
    +n = ceil(tfinal/DeltaT)
    +# set up arrays for t, a, v, and x
    +t = np.zeros(n)
    +v = np.zeros((n,2))
    +r = np.zeros((n,2))
    +# Initial conditions as compact 2-dimensional arrays
    +r0 = np.array([1.0,0.0])
    +v0 = np.array([0.0,2*pi])
    +r[0] = r0
    +v[0] = v0
    +Fourpi2 = 4*pi*pi
    +# Start integrating using Euler's method
    +for i in range(n-1):
    +    # Set up the acceleration
    +    # Here you could have defined your own function for this
    +    rabs = sqrt(sum(r[i]*r[i]))
    +    a =  -Fourpi2*r[i]/(rabs**3)
    +    # update velocity, time and position using Euler's forward method
    +    v[i+1] = v[i] + DeltaT*a
    +    r[i+1] = r[i] + DeltaT*v[i]
    +    t[i+1] = t[i] + DeltaT
    +# Plot position as function of time    
    +fig, ax = plt.subplots()
    +#ax.set_xlim(0, tfinal)
    +ax.set_ylabel('x[m]')
    +ax.set_xlabel('y[m]')
    +ax.plot(r[:,0], r[:,1])
    +fig.tight_layout()
    +save_fig("EarthSunEuler")
    +plt.show()
    +
    +
    +
    +
    +_images/chapter4_108_0.png +
    +
    +
    +
    +

    3.10. Problems with Euler’s Method

    +

    We notice here that Euler’s method doesn’t give a stable orbit. It +means that we cannot trust Euler’s method. In a deeper way, as we will +see in homework 5, Euler’s method does not conserve energy. It is an +example of an integrator which is not +symplectic.

    +

    Here we present thus two methods, which with simple changes allow us to avoid these pitfalls. The simplest possible extension is the so-called Euler-Cromer method. +The changes we need to make to our code are indeed marginal here. +We need simply to replace

    +
    +
    +
        r[i+1] = r[i] + DeltaT*v[i]
    +
    +
    +
    +
    +

    in the above code with the velocity at the new time \(t_{i+1}\)

    +
    +
    +
        r[i+1] = r[i] + DeltaT*v[i+1]
    +
    +
    +
    +
    +

    By this simple caveat we get stable orbits. +Below we derive the Euler-Cromer method as well as one of the most utlized algorithms for sovling the above type of problems, the so-called Velocity-Verlet method.

    +
    +
    +

    3.11. Deriving the Euler-Cromer Method

    +

    Let us repeat Euler’s method. +We have a differential equation

    + +
    +
    +\[ +\begin{equation} +y'(t_i)=f(t_i,y_i) +\label{_auto13} \tag{13} +\end{equation} +\]
    +

    and if we truncate at the first derivative, we have from the Taylor expansion

    + +
    +
    +\[ +\begin{equation} +y_{i+1}=y(t_i) + (\Delta t) f(t_i,y_i) + O(\Delta t^2), \label{eq:euler} \tag{14} +\end{equation} +\]
    +

    which when complemented with \(t_{i+1}=t_i+\Delta t\) forms +the algorithm for the well-known Euler method. +Note that at every step we make an approximation error +of the order of \(O(\Delta t^2)\), however the total error is the sum over all +steps \(N=(b-a)/(\Delta t)\) for \(t\in [a,b]\), yielding thus a global error which goes like +\(NO(\Delta t^2)\approx O(\Delta t)\).

    +

    To make Euler’s method more precise we can obviously +decrease \(\Delta t\) (increase \(N\)), but this can lead to loss of numerical precision. +Euler’s method is not recommended for precision calculation, +although it is handy to use in order to get a first +view on how a solution may look like.

    +

    Euler’s method is asymmetric in time, since it uses information about the derivative at the beginning +of the time interval. This means that we evaluate the position at \(y_1\) using the velocity +at \(v_0\). A simple variation is to determine \(x_{n+1}\) using the velocity at +\(v_{n+1}\), that is (in a slightly more generalized form)

    + +
    +
    +\[ +\begin{equation} +y_{n+1}=y_{n}+ v_{n+1}+O(\Delta t^2) +\label{_auto14} \tag{15} +\end{equation} +\]
    +

    and

    + +
    +
    +\[ +\begin{equation} +v_{n+1}=v_{n}+(\Delta t) a_{n}+O(\Delta t^2). +\label{_auto15} \tag{16} +\end{equation} +\]
    +

    The acceleration \(a_n\) is a function of \(a_n(y_n, v_n, t_n)\) and needs to be evaluated +as well. This is the Euler-Cromer method.

    +

    Exercise: go back to the above code with Euler’s method and add the Euler-Cromer method.

    +
    +
    +

    3.12. Deriving the Velocity-Verlet Method

    +

    Let us stay with \(x\) (position) and \(v\) (velocity) as the quantities we are interested in.

    +

    We have the Taylor expansion for the position given by

    +
    +\[ +x_{i+1} = x_i+(\Delta t)v_i+\frac{(\Delta t)^2}{2}a_i+O((\Delta t)^3). +\]
    +

    The corresponding expansion for the velocity is

    +
    +\[ +v_{i+1} = v_i+(\Delta t)a_i+\frac{(\Delta t)^2}{2}v^{(2)}_i+O((\Delta t)^3). +\]
    +

    Via Newton’s second law we have normally an analytical expression for the derivative of the velocity, namely

    +
    +\[ +a_i= \frac{d^2 x}{dt^2}\vert_{i}=\frac{d v}{dt}\vert_{i}= \frac{F(x_i,v_i,t_i)}{m}. +\]
    +

    If we add to this the corresponding expansion for the derivative of the velocity

    +
    +\[ +v^{(1)}_{i+1} = a_{i+1}= a_i+(\Delta t)v^{(2)}_i+O((\Delta t)^2)=a_i+(\Delta t)v^{(2)}_i+O((\Delta t)^2), +\]
    +

    and retain only terms up to the second derivative of the velocity since our error goes as \(O(h^3)\), we have

    +
    +\[ +(\Delta t)v^{(2)}_i\approx a_{i+1}-a_i. +\]
    +

    We can then rewrite the Taylor expansion for the velocity as

    +
    +\[ +v_{i+1} = v_i+\frac{(\Delta t)}{2}\left( a_{i+1}+a_{i}\right)+O((\Delta t)^3). +\]
    +
    +
    +

    3.13. The velocity Verlet method

    +

    Our final equations for the position and the velocity become then

    +
    +\[ +x_{i+1} = x_i+(\Delta t)v_i+\frac{(\Delta t)^2}{2}a_{i}+O((\Delta t)^3), +\]
    +

    and

    +
    +\[ +v_{i+1} = v_i+\frac{(\Delta t)}{2}\left(a_{i+1}+a_{i}\right)+O((\Delta t)^3). +\]
    +

    Note well that the term \(a_{i+1}\) depends on the position at \(x_{i+1}\). This means that you need to calculate +the position at the updated time \(t_{i+1}\) before the computing the next velocity. Note also that the derivative of the velocity at the time +\(t_i\) used in the updating of the position can be reused in the calculation of the velocity update as well.

    +
    +
    +

    3.14. Adding the Velocity-Verlet Method

    +

    We can now easily add the Verlet method to our original code as

    +
    +
    +
    DeltaT = 0.01
    +#set up arrays 
    +tfinal = 10
    +n = ceil(tfinal/DeltaT)
    +# set up arrays for t, a, v, and x
    +t = np.zeros(n)
    +v = np.zeros((n,2))
    +r = np.zeros((n,2))
    +# Initial conditions as compact 2-dimensional arrays
    +r0 = np.array([1.0,0.0])
    +v0 = np.array([0.0,2*pi])
    +r[0] = r0
    +v[0] = v0
    +Fourpi2 = 4*pi*pi
    +# Start integrating using the Velocity-Verlet  method
    +for i in range(n-1):
    +    # Set up forces, air resistance FD, note now that we need the norm of the vecto
    +    # Here you could have defined your own function for this
    +    rabs = sqrt(sum(r[i]*r[i]))
    +    a =  -Fourpi2*r[i]/(rabs**3)
    +    # update velocity, time and position using the Velocity-Verlet method
    +    r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a
    +    rabs = sqrt(sum(r[i+1]*r[i+1]))
    +    anew = -4*(pi**2)*r[i+1]/(rabs**3)
    +    v[i+1] = v[i] + 0.5*DeltaT*(a+anew)
    +    t[i+1] = t[i] + DeltaT
    +# Plot position as function of time    
    +fig, ax = plt.subplots()
    +ax.set_ylabel('x[m]')
    +ax.set_xlabel('y[m]')
    +ax.plot(r[:,0], r[:,1])
    +fig.tight_layout()
    +save_fig("EarthSunVV")
    +plt.show()
    +
    +
    +
    +
    +_images/chapter4_138_0.png +
    +
    +

    You can easily generalize the calculation of the forces by defining a function +which takes in as input the various variables. We leave this as a challenge to you.

    +
    +
    +

    3.15. Studying Energy Conservation

    +

    In order to study the conservation of energy, we will need to perform +a numerical integration, unless we can integrate analytically. Here we +present the Trapezoidal rule as a the simplest possible approximation.

    +
    +
    +

    3.16. Numerical Integration

    +

    It is also useful to consider methods to integrate numerically. +Let us consider the following case. +We have classical electron which moves in the \(x\)-direction along a surface. The force from the surface is

    +
    +\[ +\boldsymbol{F}(x)=-F_0\sin{(\frac{2\pi x}{b})}\boldsymbol{e}_x. +\]
    +

    The constant \(b\) represents the distance between atoms at the surface of the material, \(F_0\) is a constant and \(x\) is the position of the electron. +Using the work-energy theorem we can find the work \(W\) done when moving an electron from a position \(x_0\) to a final position \(x\) through the +integral

    +
    +\[ +W=-\int_{x_0}^x \boldsymbol{F}(x')dx' = \int_{x_0}^x F_0\sin{(\frac{2\pi x'}{b})} dx', +\]
    +

    which results in

    +
    +\[ +W=\frac{F_0b}{2\pi}\left[\cos{(\frac{2\pi x}{b})}-\cos{(\frac{2\pi x_0}{b})}\right]. +\]
    +
    +
    +

    3.17. Numerical Integration

    +

    There are several numerical algorithms for finding an integral +numerically. The more familiar ones like the rectangular rule or the +trapezoidal rule have simple geometric interpretations.

    +

    Let us look at the mathematical details of what are called equal-step methods, also known as Newton-Cotes quadrature.

    +
    +
    +

    3.18. Newton-Cotes Quadrature or equal-step methods

    +

    The integral

    + +
    +
    +\[ +\begin{equation} + I=\int_a^bf(x) dx +\label{eq:integraldef} \tag{17} +\end{equation} +\]
    +

    has a very simple meaning. The integral is the +area enscribed by the function \(f(x)\) starting from \(x=a\) to \(x=b\). It is subdivided in several smaller areas whose evaluation is to be approximated by different techniques. The areas under the curve can for example be approximated by rectangular boxes or trapezoids.

    +
    +
    +

    3.19. Basic philosophy of equal-step methods

    +

    In considering equal step methods, our basic approach is that of approximating +a function \(f(x)\) with a polynomial of at most +degree \(N-1\), given \(N\) integration points. If our polynomial is of degree \(1\), +the function will be approximated with \(f(x)\approx a_0+a_1x\).

    +
    +
    +

    3.20. Simple algorithm for equal step methods

    +

    The algorithm for these integration methods is rather simple, and the number of approximations perhaps unlimited!

    +
      +
    • Choose a step size \(h=(b-a)/N\) where \(N\) is the number of steps and \(a\) and \(b\) the lower and upper limits of integration.

    • +
    • With a given step length we rewrite the integral as

    • +
    +
    +\[ +\int_a^bf(x) dx= \int_a^{a+h}f(x)dx + \int_{a+h}^{a+2h}f(x)dx+\dots \int_{b-h}^{b}f(x)dx. +\]
    +
      +
    • The strategy then is to find a reliable polynomial approximation for \(f(x)\) in the various intervals. Choosing a given approximation for \(f(x)\), we obtain a specific approximation to the integral.

    • +
    • With this approximation to \(f(x)\) we perform the integration by computing the integrals over all subintervals.

    • +
    +
    +
    +

    3.21. Simple algorithm for equal step methods

    +

    One possible strategy then is to find a reliable polynomial expansion for \(f(x)\) in the smaller +subintervals. Consider for example evaluating

    +
    +\[ +\int_a^{a+2h}f(x)dx, +\]
    +

    which we rewrite as

    + +
    +
    +\[ +\begin{equation} +\int_a^{a+2h}f(x)dx=\int_{x_0-h}^{x_0+h}f(x)dx. +\label{eq:hhint} \tag{18} +\end{equation} +\]
    +

    We have chosen a midpoint \(x_0\) and have defined \(x_0=a+h\).

    +
    +
    +

    3.22. The rectangle method

    +

    A very simple approach is the so-called midpoint or rectangle method. +In this case the integration area is split in a given number of rectangles with length \(h\) and height given by the mid-point value of the function. This gives the following simple rule for approximating an integral

    + +
    +
    +\[ +\begin{equation} +I=\int_a^bf(x) dx \approx h\sum_{i=1}^N f(x_{i-1/2}), +\label{eq:rectangle} \tag{19} +\end{equation} +\]
    +

    where \(f(x_{i-1/2})\) is the midpoint value of \(f\) for a given rectangle. We will discuss its truncation +error below. It is easy to implement this algorithm, as shown below

    +
    +
    +

    3.23. Truncation error for the rectangular rule

    +

    The correct mathematical expression for the local error for the rectangular rule \(R_i(h)\) for element \(i\) is

    +
    +\[ +\int_{-h}^hf(x)dx - R_i(h)=-\frac{h^3}{24}f^{(2)}(\xi), +\]
    +

    and the global error reads

    +
    +\[ +\int_a^bf(x)dx -R_h(f)=-\frac{b-a}{24}h^2f^{(2)}(\xi), +\]
    +

    where \(R_h\) is the result obtained with rectangular rule and \(\xi \in [a,b]\).

    +
    +
    +

    3.24. Codes for the Rectangular rule

    +

    We go back to our simple example above and set \(F_0=b=1\) and choose \(x_0=0\) and \(x=1/2\), and have

    +
    +\[ +W=\frac{1}{\pi}. +\]
    +

    The code here computes the integral using the rectangle rule and \(n=100\) integration points we have a relative error of +\(10^{-5}\).

    +
    +
    +
    from math import sin, pi
    +import numpy as np
    +from sympy import Symbol, integrate
    +# function for the Rectangular rule                                                                                        
    +def Rectangular(a,b,f,n):
    +   h = (b-a)/float(n)
    +   s = 0
    +   for i in range(0,n,1):
    +       x = (i+0.5)*h
    +       s = s+ f(x)
    +   return h*s
    +# function to integrate
    +def function(x):
    +    return sin(2*pi*x)
    +# define integration limits and integration points                                                                         
    +a = 0.0; b = 0.5;
    +n = 100
    +Exact = 1./pi
    +print("Relative error= ", abs( (Rectangular(a,b,function,n)-Exact)/Exact))
    +
    +
    +
    +
    +
    Relative error=  4.112453549290521e-05
    +
    +
    +
    +
    +
    +
    +

    3.25. The trapezoidal rule

    +

    The other integral gives

    +
    +\[ +\int_{x_0-h}^{x_0}f(x)dx=\frac{h}{2}\left(f(x_0) + f(x_0-h)\right)+O(h^3), +\]
    +

    and adding up we obtain

    + +
    +
    +\[ +\begin{equation} + \int_{x_0-h}^{x_0+h}f(x)dx=\frac{h}{2}\left(f(x_0+h) + 2f(x_0) + f(x_0-h)\right)+O(h^3), +\label{eq:trapez} \tag{20} +\end{equation} +\]
    +

    which is the well-known trapezoidal rule. Concerning the error in the approximation made, +\(O(h^3)=O((b-a)^3/N^3)\), you should note +that this is the local error. Since we are splitting the integral from +\(a\) to \(b\) in \(N\) pieces, we will have to perform approximately \(N\) +such operations.

    +

    This means that the global error goes like \(\approx O(h^2)\). +The trapezoidal reads then

    + +
    +
    +\[ +\begin{equation} + I=\int_a^bf(x) dx=h\left(f(a)/2 + f(a+h) +f(a+2h)+ + \dots +f(b-h)+ f_{b}/2\right), +\label{eq:trapez1} \tag{21} +\end{equation} +\]
    +

    with a global error which goes like \(O(h^2)\).

    +

    Hereafter we use the shorthand notations \(f_{-h}=f(x_0-h)\), \(f_{0}=f(x_0)\) +and \(f_{h}=f(x_0+h)\).

    +
    +
    +

    3.26. Error in the trapezoidal rule

    +

    The correct mathematical expression for the local error for the trapezoidal rule is

    +
    +\[ +\int_a^bf(x)dx -\frac{b-a}{2}\left[f(a)+f(b)\right]=-\frac{h^3}{12}f^{(2)}(\xi), +\]
    +

    and the global error reads

    +
    +\[ +\int_a^bf(x)dx -T_h(f)=-\frac{b-a}{12}h^2f^{(2)}(\xi), +\]
    +

    where \(T_h\) is the trapezoidal result and \(\xi \in [a,b]\).

    +
    +
    +

    3.27. Algorithm for the trapezoidal rule

    +

    The trapezoidal rule is easy to implement numerically +through the following simple algorithm

    +
      +
    • Choose the number of mesh points and fix the step length.

    • +
    • calculate \(f(a)\) and \(f(b)\) and multiply with \(h/2\).

    • +
    • Perform a loop over \(n=1\) to \(n-1\) (\(f(a)\) and \(f(b)\) are known) and sum up the terms \(f(a+h) +f(a+2h)+f(a+3h)+\dots +f(b-h)\). Each step in the loop corresponds to a given value \(a+nh\).

    • +
    • Multiply the final result by \(h\) and add \(hf(a)/2\) and \(hf(b)/2\).

    • +
    +
    +
    +

    3.28. Trapezoidal Rule

    +

    We use the same function and integrate now using the trapoezoidal rule.

    +
    +
    +
    import numpy as np
    +from sympy import Symbol, integrate
    +# function for the trapezoidal rule
    +def Trapez(a,b,f,n):
    +   h = (b-a)/float(n)
    +   s = 0
    +   x = a
    +   for i in range(1,n,1):
    +       x = x+h
    +       s = s+ f(x)
    +   s = 0.5*(f(a)+f(b)) +s
    +   return h*s
    +# function to integrate
    +def function(x):
    +    return sin(2*pi*x)
    +# define integration limits and integration points                                                                         
    +a = 0.0; b = 0.5;
    +n = 100
    +Exact = 1./pi
    +print("Relative error= ", abs( (Trapez(a,b,function,n)-Exact)/Exact))
    +
    +
    +
    +
    +
    Relative error=  8.224805627923717e-05
    +
    +
    +
    +
    +
    +
    +

    3.29. Simpsons’ rule

    +

    Instead of using the above first-order polynomials +approximations for \(f\), we attempt at using a second-order polynomials. +In this case we need three points in order to define a second-order +polynomial approximation

    +
    +\[ +f(x) \approx P_2(x)=a_0+a_1x+a_2x^2. +\]
    +

    Using again Lagrange’s interpolation formula we have

    +
    +\[ +P_2(x)=\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}y_2+ + \frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}y_1+ + \frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}y_0. +\]
    +

    Inserting this formula in the integral of Eq. (18) we obtain

    +
    +\[ +\int_{-h}^{+h}f(x)dx=\frac{h}{3}\left(f_h + 4f_0 + f_{-h}\right)+O(h^5), +\]
    +

    which is Simpson’s rule.

    +
    +
    +

    3.30. Simpson’s rule

    +

    Note that the improved accuracy in the evaluation of +the derivatives gives a better error approximation, \(O(h^5)\) vs.\ \(O(h^3)\) . +But this is again the local error approximation. +Using Simpson’s rule we can easily compute +the integral of Eq. (17) to be

    + +
    +
    +\[ +\begin{equation} + I=\int_a^bf(x) dx=\frac{h}{3}\left(f(a) + 4f(a+h) +2f(a+2h)+ + \dots +4f(b-h)+ f_{b}\right), +\label{eq:simpson} \tag{22} +\end{equation} +\]
    +

    with a global error which goes like \(O(h^4)\).

    +
    +
    +

    3.31. Mathematical expressions for the truncation error

    +

    More formal expressions for the local and global errors are for the local error

    +
    +\[ +\int_a^bf(x)dx -\frac{b-a}{6}\left[f(a)+4f((a+b)/2)+f(b)\right]=-\frac{h^5}{90}f^{(4)}(\xi), +\]
    +

    and for the global error

    +
    +\[ +\int_a^bf(x)dx -S_h(f)=-\frac{b-a}{180}h^4f^{(4)}(\xi). +\]
    +

    with \(\xi\in[a,b]\) and \(S_h\) the results obtained with Simpson’s method.

    +
    +
    +

    3.32. Algorithm for Simpson’s rule

    +

    The method +can easily be implemented numerically through the following simple algorithm

    +
      +
    • Choose the number of mesh points and fix the step.

    • +
    • calculate \(f(a)\) and \(f(b)\)

    • +
    • Perform a loop over \(n=1\) to \(n-1\) (\(f(a)\) and \(f(b)\) are known) and sum up the terms \(4f(a+h) +2f(a+2h)+4f(a+3h)+\dots +4f(b-h)\). Each step in the loop corresponds to a given value \(a+nh\). Odd values of \(n\) give \(4\) as factor while even values yield \(2\) as factor.

    • +
    • Multiply the final result by \(\frac{h}{3}\).

    • +
    +
    +
    +

    3.33. Code example

    +
    +
    +
    from math import sin, pi
    +import numpy as np
    +from sympy import Symbol, integrate
    +# function for the trapezoidal rule                                                                                        
    +def Simpson(a,b,f,n):
    +   h = (b-a)/float(n)
    +   sum = f(a)/float(2);
    +   for i in range(1,n):
    +       sum = sum + f(a+i*h)*(3+(-1)**(i+1))
    +   sum = sum + f(b)/float(2)
    +   return sum*h/3.0
    +# function to integrate                                                                                                    
    +def function(x):
    +    return sin(2*pi*x)
    +# define integration limits and integration points                                                                         
    +a = 0.0; b = 0.5;
    +n = 100
    +Exact = 1./pi
    +print("Relative error= ", abs( (Simpson(a,b,function,n)-Exact)/Exact))
    +
    +
    +
    +
    +
    Relative error=  5.412252157986472e-09
    +
    +
    +
    +
    +

    We see that Simpson’s rule gives a much better estimation of the relative error with the same amount of points as we had for the Rectangle rule and the Trapezoidal rule.

    +
    +
    + + + + +
    + +
    +
    + + + +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/chapter5.html b/doc/src/LectureNotes/testbook/_build/html/chapter5.html new file mode 100644 index 000000000..4cb7cd5de --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/chapter5.html @@ -0,0 +1,1915 @@ + + + + + + + + + 4. Harmonic Oscillator — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + +
    +
    + +
    + +
    +

    4. Harmonic Oscillator

    +

    The harmonic oscillator is omnipresent in physics. Although you may think +of this as being related to springs, it, or an equivalent +mathematical representation, appears in just about any problem where a +mode is sitting near its potential energy minimum. At that point, +\(\partial_x V(x)=0\), and the first non-zero term (aside from a +constant) in the potential energy is that of a harmonic oscillator. In +a solid, sound modes (phonons) are built on a picture of coupled +harmonic oscillators, and in relativistic field theory the fundamental +interactions are also built on coupled oscillators positioned +infinitesimally close to one another in space. The phenomena of a +resonance of an oscillator driven at a fixed frequency plays out +repeatedly in atomic, nuclear and high-energy physics, when quantum +mechanically the evolution of a state oscillates according to +\(e^{-iEt}\) and exciting discrete quantum states has very similar +mathematics as exciting discrete states of an oscillator.

    +

    The potential energy for a single particle as a function of its position \(x\) can be written as a Taylor expansion about some point \(x_0\)

    + +
    +
    +\[ +\begin{equation} +V(x)=V(x_0)+(x-x_0)\left.\partial_xV(x)\right|_{x_0}+\frac{1}{2}(x-x_0)^2\left.\partial_x^2V(x)\right|_{x_0} ++\frac{1}{3!}\left.\partial_x^3V(x)\right|_{x_0}+\cdots +\label{_auto1} \tag{1} +\end{equation} +\]
    +

    If the position \(x_0\) is at the minimum of the resonance, the first two non-zero terms of the potential are

    +
    +\[\begin{split} +\begin{eqnarray} +V(x)&\approx& V(x_0)+\frac{1}{2}(x-x_0)^2\left.\partial_x^2V(x)\right|_{x_0},\\ +\nonumber +&=&V(x_0)+\frac{1}{2}k(x-x_0)^2,~~~~k\equiv \left.\partial_x^2V(x)\right|_{x_0},\\ +\nonumber +F&=&-\partial_xV(x)=-k(x-x_0). +\end{eqnarray} +\end{split}\]
    +

    Put into Newton’s 2nd law (assuming \(x_0=0\)),

    +
    +\[\begin{split} +\begin{eqnarray} +m\ddot{x}&=&-kx,\\ +x&=&A\cos(\omega_0 t-\phi),~~~\omega_0=\sqrt{k/m}. +\end{eqnarray} +\end{split}\]
    +

    Here \(A\) and \(\phi\) are arbitrary. Equivalently, one could have +written this as \(A\cos(\omega_0 t)+B\sin(\omega_0 t)\), or as the real +part of \(Ae^{i\omega_0 t}\). In this last case \(A\) could be an +arbitrary complex constant. Thus, there are 2 arbitrary constants +(either \(A\) and \(B\) or \(A\) and \(\phi\), or the real and imaginary part +of one complex constant. This is the expectation for a second order +differential equation, and also agrees with the physical expectation +that if you know a particle’s initial velocity and position you should +be able to define its future motion, and that those two arbitrary +conditions should translate to two arbitrary constants.

    +

    A key feature of harmonic motion is that the system repeats itself +after a time \(T=1/f\), where \(f\) is the frequency, and \(\omega=2\pi f\) +is the angular frequency. The period of the motion is independent of +the amplitude. However, this independence is only exact when one can +neglect higher terms of the potential, \(x^3, x^4\cdots\). Once can +neglect these terms for sufficiently small amplitudes, and for larger +amplitudes the motion is no longer purely sinusoidal, and even though +the motion repeats itself, the time for repeating the motion is no +longer independent of the amplitude.

    +

    One can also calculate the velocity and the kinetic energy as a function of time,

    +
    +\[\begin{split} +\begin{eqnarray} +\dot{x}&=&-\omega_0A\sin(\omega_0 t-\phi),\\ +\nonumber +K&=&\frac{1}{2}m\dot{x}^2=\frac{m\omega_0^2A^2}{2}\sin^2(\omega_0t-\phi),\\ +\nonumber +&=&\frac{k}{2}A^2\sin^2(\omega_0t-\phi). +\end{eqnarray} +\end{split}\]
    +

    The total energy is then

    + +
    +
    +\[ +\begin{equation} +E=K+V=\frac{1}{2}m\dot{x}^2+\frac{1}{2}kx^2=\frac{1}{2}kA^2. +\label{_auto2} \tag{2} +\end{equation} +\]
    +

    The total energy then goes as the square of the amplitude.

    +

    A pendulum is an example of a harmonic oscillator. By expanding the +kinetic and potential energies for small angles find the frequency for +a pendulum of length \(L\) with all the mass \(m\) centered at the end by +writing the eq.s of motion in the form of a harmonic oscillator.

    +

    The potential energy and kinetic energies are (for \(x\) being the displacement)

    +
    +\[\begin{split} +\begin{eqnarray*} +V&=&mgL(1-\cos\theta)\approx mgL\frac{x^2}{2L^2},\\ +K&=&\frac{1}{2}mL^2\dot{\theta}^2\approx \frac{m}{2}\dot{x}^2. +\end{eqnarray*} +\end{split}\]
    +

    For small \(x\) Newton’s 2nd law becomes

    +
    +\[ +m\ddot{x}=-\frac{mg}{L}x, +\]
    +

    and the spring constant would appear to be \(k=mg/L\), which makes the +frequency equal to \(\omega_0=\sqrt{g/L}\). Note that the frequency is +independent of the mass.

    +
    +

    4.1. Damped Oscillators

    +

    We consider only the case where the damping force is proportional to +the velocity. This is counter to dragging friction, where the force is +proportional in strength to the normal force and independent of +velocity, and is also inconsistent with wind resistance, where the +magnitude of the drag force is proportional the square of the +velocity. Rolling resistance does seem to be mainly proportional to +the velocity. However, the main motivation for considering damping +forces proportional to the velocity is that the math is more +friendly. This is because the differential equation is linear, +i.e. each term is of order \(x\), \(\dot{x}\), \(\ddot{x}\cdots\), or even +terms with no mention of \(x\), and there are no terms such as \(x^2\) or +\(x\ddot{x}\). The equations of motion for a spring with damping force +\(-b\dot{x}\) are

    + +
    +
    +\[ +\begin{equation} +m\ddot{x}+b\dot{x}+kx=0. +\label{_auto3} \tag{3} +\end{equation} +\]
    +

    Just to make the solution a bit less messy, we rewrite this equation as

    + +
    +
    +\[ +\begin{equation} +\label{eq:dampeddiffyq} \tag{4} +\ddot{x}+2\beta\dot{x}+\omega_0^2x=0,~~~~\beta\equiv b/2m,~\omega_0\equiv\sqrt{k/m}. +\end{equation} +\]
    +

    Both \(\beta\) and \(\omega\) have dimensions of inverse time. To find solutions (see appendix C in the text) you must make an educated guess at the form of the solution. To do this, first realize that the solution will need an arbitrary normalization \(A\) because the equation is linear. Secondly, realize that if the form is

    + +
    +
    +\[ +\begin{equation} +x=Ae^{rt} +\label{_auto4} \tag{5} +\end{equation} +\]
    +

    that each derivative simply brings out an extra power of \(r\). This +means that the \(Ae^{rt}\) factors out and one can simply solve for an +equation for \(r\). Plugging this form into Eq. (4),

    + +
    +
    +\[ +\begin{equation} +r^2+2\beta r+\omega_0^2=0. +\label{_auto5} \tag{6} +\end{equation} +\]
    +

    Because this is a quadratic equation there will be two solutions,

    + +
    +
    +\[ +\begin{equation} +r=-\beta\pm\sqrt{\beta^2-\omega_0^2}. +\label{_auto6} \tag{7} +\end{equation} +\]
    +

    We refer to the two solutions as \(r_1\) and \(r_2\) corresponding to the +\(+\) and \(-\) roots. As expected, there should be two arbitrary +constants involved in the solution,

    + +
    +
    +\[ +\begin{equation} +x=A_1e^{r_1t}+A_2e^{r_2t}, +\label{_auto7} \tag{8} +\end{equation} +\]
    +

    where the coefficients \(A_1\) and \(A_2\) are determined by initial +conditions.

    +

    The roots listed above, \(\sqrt{\omega_0^2-\beta_0^2}\), will be +imaginary if the damping is small and \(\beta<\omega_0\). In that case, +\(r\) is complex and the factor \(e{rt}\) will have some oscillatory +behavior. If the roots are real, there will only be exponentially +decaying solutions. There are three cases:

    +
    +

    4.1.1. Underdamped: \(\beta<\omega_0\)

    +
    +\[\begin{split} +\begin{eqnarray} +x&=&A_1e^{-\beta t}e^{i\omega't}+A_2e^{-\beta t}e^{-i\omega't},~~\omega'\equiv\sqrt{\omega_0^2-\beta^2}\\ +\nonumber +&=&(A_1+A_2)e^{-\beta t}\cos\omega't+i(A_1-A_2)e^{-\beta t}\sin\omega't. +\end{eqnarray} +\end{split}\]
    +

    Here we have made use of the identity +\(e^{i\omega't}=\cos\omega't+i\sin\omega't\). Because the constants are +arbitrary, and because the real and imaginary parts are both solutions +individually, we can simply consider the real part of the solution +alone:

    + +
    +
    +\[\begin{split} +\begin{eqnarray} +\label{eq:homogsolution} \tag{9} +x&=&B_1e^{-\beta t}\cos\omega't+B_2e^{-\beta t}\sin\omega't,\\ +\nonumber +\omega'&\equiv&\sqrt{\omega_0^2-\beta^2}. +\end{eqnarray} +\end{split}\]
    +
    +
    +

    4.1.2. Critical dampling: \(\beta=\omega_0\)

    +

    In this case the two terms involving \(r_1\) and \(r_2\) are identical +because \(\omega'=0\). Because we need to arbitrary constants, there +needs to be another solution. This is found by simply guessing, or by +taking the limit of \(\omega'\rightarrow 0\) from the underdamped +solution. The solution is then

    + +
    +
    +\[ +\begin{equation} +\label{eq:criticallydamped} \tag{10} +x=Ae^{-\beta t}+Bte^{-\beta t}. +\end{equation} +\]
    +

    The critically damped solution is interesting because the solution +approaches zero quickly, but does not oscillate. For a problem with +zero initial velocity, the solution never crosses zero. This is a good +choice for designing shock absorbers or swinging doors.

    +
    +
    +

    4.1.3. Overdamped: \(\beta>\omega_0\)

    +
    +\[ +\begin{eqnarray} +x&=&A_1\exp{-(\beta+\sqrt{\beta^2-\omega_0^2})t}+A_2\exp{-(\beta-\sqrt{\beta^2-\omega_0^2})t} +\end{eqnarray} +\]
    +

    This solution will also never pass the origin more than once, and then +only if the initial velocity is strong and initially toward zero.

    +

    Given \(b\), \(m\) and \(\omega_0\), find \(x(t)\) for a particle whose +initial position is \(x=0\) and has initial velocity \(v_0\) (assuming an +underdamped solution).

    +

    The solution is of the form,

    +
    +\[\begin{split} +\begin{eqnarray*} +x&=&e^{-\beta t}\left[A_1\cos(\omega' t)+A_2\sin\omega't\right],\\ +\dot{x}&=&-\beta x+\omega'e^{-\beta t}\left[-A_1\sin\omega't+A_2\cos\omega't\right].\\ +\omega'&\equiv&\sqrt{\omega_0^2-\beta^2},~~~\beta\equiv b/2m. +\end{eqnarray*} +\end{split}\]
    +

    From the initial conditions, \(A_1=0\) because \(x(0)=0\) and \(\omega'A_2=v_0\). So

    +
    +\[ +x=\frac{v_0}{\omega'}e^{-\beta t}\sin\omega't. +\]
    +
    +
    +
    +

    4.2. Our Sliding Block Code

    +

    Here we study first the case without additional friction term and scale our equation +in terms of a dimensionless time \(\tau\).

    +

    Let us remind ourselves about the differential equation we want to solve (the general case with damping due to friction)

    +
    +\[ +m\frac{d^2x}{dt^2} + b\frac{dx}{dt}+kx(t) =0. +\]
    +

    We divide by \(m\) and introduce \(\omega_0^2=\sqrt{k/m}\) and obtain

    +
    +\[ +\frac{d^2x}{dt^2} + \frac{b}{m}\frac{dx}{dt}+\omega_0^2x(t) =0. +\]
    +

    Thereafter we introduce a dimensionless time \(\tau = t\omega_0\) (check +that the dimensionality is correct) and rewrite our equation as

    +
    +\[ +\frac{d^2x}{d\tau^2} + \frac{b}{m\omega_0}\frac{dx}{d\tau}+x(\tau) =0, +\]
    +

    which gives us

    +
    +\[ +\frac{d^2x}{d\tau^2} + \frac{b}{m\omega_0}\frac{dx}{d\tau}+x(\tau) =0. +\]
    +

    We then define \(\gamma = b/(2m\omega_0)\) and rewrite our equations as

    +
    +\[ +\frac{d^2x}{d\tau^2} + 2\gamma\frac{dx}{d\tau}+x(\tau) =0. +\]
    +

    This is the equation we will code below. The first version employs the Euler-Cromer method.

    +
    +
    +
    %matplotlib inline
    +
    +# Common imports
    +import numpy as np
    +import pandas as pd
    +from math import *
    +import matplotlib.pyplot as plt
    +import os
    +
    +# Where to save the figures and data files
    +PROJECT_ROOT_DIR = "Results"
    +FIGURE_ID = "Results/FigureFiles"
    +DATA_ID = "DataFiles/"
    +
    +if not os.path.exists(PROJECT_ROOT_DIR):
    +    os.mkdir(PROJECT_ROOT_DIR)
    +
    +if not os.path.exists(FIGURE_ID):
    +    os.makedirs(FIGURE_ID)
    +
    +if not os.path.exists(DATA_ID):
    +    os.makedirs(DATA_ID)
    +
    +def image_path(fig_id):
    +    return os.path.join(FIGURE_ID, fig_id)
    +
    +def data_path(dat_id):
    +    return os.path.join(DATA_ID, dat_id)
    +
    +def save_fig(fig_id):
    +    plt.savefig(image_path(fig_id) + ".png", format='png')
    +
    +
    +from pylab import plt, mpl
    +plt.style.use('seaborn')
    +mpl.rcParams['font.family'] = 'serif'
    +
    +DeltaT = 0.001
    +#set up arrays 
    +tfinal = 20 # in years
    +n = ceil(tfinal/DeltaT)
    +# set up arrays for t, v, and x
    +t = np.zeros(n)
    +v = np.zeros(n)
    +x = np.zeros(n)
    +# Initial conditions as simple one-dimensional arrays of time
    +x0 =  1.0 
    +v0 = 0.0
    +x[0] = x0
    +v[0] = v0
    +gamma = 0.0
    +# Start integrating using Euler-Cromer's method
    +for i in range(n-1):
    +    # Set up the acceleration
    +    # Here you could have defined your own function for this
    +    a =  -2*gamma*v[i]-x[i]
    +    # update velocity, time and position
    +    v[i+1] = v[i] + DeltaT*a
    +    x[i+1] = x[i] + DeltaT*v[i+1]
    +    t[i+1] = t[i] + DeltaT
    +# Plot position as function of time    
    +fig, ax = plt.subplots()
    +#ax.set_xlim(0, tfinal)
    +ax.set_ylabel('x[m]')
    +ax.set_xlabel('t[s]')
    +ax.plot(t, x)
    +fig.tight_layout()
    +save_fig("BlockEulerCromer")
    +plt.show()
    +
    +
    +
    +
    +_images/chapter5_49_0.png +
    +
    +

    When setting up the value of \(\gamma\) we see that for \(\gamma=0\) we get the simple oscillatory motion with no damping. +Choosing \(\gamma < 1\) leads to the classical underdamped case with oscillatory motion, but where the motion comes to an end.

    +

    Choosing \(\gamma =1\) leads to what normally is called critical damping and \(\gamma> 1\) leads to critical overdamping. +Try it out and try also to change the initial position and velocity. Setting \(\gamma=1\) +yields a situation, as discussed above, where the solution approaches quickly zero and does not oscillate. With zero initial velocity it will never cross zero.

    +
    +
    +

    4.3. Sinusoidally Driven Oscillators

    +

    Here, we consider the force

    + +
    +
    +\[ +\begin{equation} +F=-kx-b\dot{x}+F_0\cos\omega t, +\label{_auto8} \tag{11} +\end{equation} +\]
    +

    which leads to the differential equation

    + +
    +
    +\[ +\begin{equation} +\label{eq:drivenosc} \tag{12} +\ddot{x}+2\beta\dot{x}+\omega_0^2x=(F_0/m)\cos\omega t. +\end{equation} +\]
    +

    Consider a single solution with no arbitrary constants, which we will +call a {\it particular solution}, \(x_p(t)\). It should be emphasized +that this is {\bf A} particular solution, because there exists an +infinite number of such solutions because the general solution should +have two arbitrary constants. Now consider solutions to the same +equation without the driving term, which include two arbitrary +constants. These are called either {\it homogenous solutions} or {\it +complementary solutions}, and were given in the previous section, +e.g. Eq. (9) for the underdamped case. The +homogenous solution already incorporates the two arbitrary constants, +so any sum of a homogenous solution and a particular solution will +represent the {\it general solution} of the equation. The general +solution incorporates the two arbitrary constants \(A\) and \(B\) to +accommodate the two initial conditions. One could have picked a +different particular solution, i.e. the original particular solution +plus any homogenous solution with the arbitrary constants \(A_p\) and +\(B_p\) chosen at will. When one adds in the homogenous solution, which +has adjustable constants with arbitrary constants \(A'\) and \(B'\), to +the new particular solution, one can get the same general solution by +simply adjusting the new constants such that \(A'+A_p=A\) and +\(B'+B_p=B\). Thus, the choice of \(A_p\) and \(B_p\) are irrelevant, and +when choosing the particular solution it is best to make the simplest +choice possible.

    +

    To find a particular solution, one first guesses at the form,

    + +
    +
    +\[ +\begin{equation} +\label{eq:partform} \tag{13} +x_p(t)=D\cos(\omega t-\delta), +\end{equation} +\]
    +

    and rewrite the differential equation as

    + +
    +
    +\[ +\begin{equation} +D\left\{-\omega^2\cos(\omega t-\delta)-2\beta\omega\sin(\omega t-\delta)+\omega_0^2\cos(\omega t-\delta)\right\}=\frac{F_0}{m}\cos(\omega t). +\label{_auto9} \tag{14} +\end{equation} +\]
    +

    One can now use angle addition formulas to get

    +
    +\[\begin{split} +\begin{eqnarray} +D\left\{(-\omega^2\cos\delta+2\beta\omega\sin\delta+\omega_0^2\cos\delta)\cos(\omega t)\right.&&\\ +\nonumber +\left.+(-\omega^2\sin\delta-2\beta\omega\cos\delta+\omega_0^2\sin\delta)\sin(\omega t)\right\} +&=&\frac{F_0}{m}\cos(\omega t). +\end{eqnarray} +\end{split}\]
    +

    Both the \(\cos\) and \(\sin\) terms need to equate if the expression is to hold at all times. Thus, this becomes two equations

    +
    +\[\begin{split} +\begin{eqnarray} +D\left\{-\omega^2\cos\delta+2\beta\omega\sin\delta+\omega_0^2\cos\delta\right\}&=&\frac{F_0}{m}\\ +\nonumber +-\omega^2\sin\delta-2\beta\omega\cos\delta+\omega_0^2\sin\delta&=&0. +\end{eqnarray} +\end{split}\]
    +

    After dividing by \(\cos\delta\), the lower expression leads to

    + +
    +
    +\[ +\begin{equation} +\tan\delta=\frac{2\beta\omega}{\omega_0^2-\omega^2}. +\label{_auto10} \tag{15} +\end{equation} +\]
    +

    Using the identities \(\tan^2+1=\csc^2\) and \(\sin^2+\cos^2=1\), one can also express \(\sin\delta\) and \(\cos\delta\),

    +
    +\[\begin{split} +\begin{eqnarray} +\sin\delta&=&\frac{2\beta\omega}{\sqrt{(\omega_0^2-\omega^2)^2+4\omega^2\beta^2}},\\ +\nonumber +\cos\delta&=&\frac{(\omega_0^2-\omega^2)}{\sqrt{(\omega_0^2-\omega^2)^2+4\omega^2\beta^2}} +\end{eqnarray} +\end{split}\]
    +

    Inserting the expressions for \(\cos\delta\) and \(\sin\delta\) into the expression for \(D\),

    + +
    +
    +\[ +\begin{equation} +\label{eq:Ddrive} \tag{16} +D=\frac{F_0/m}{\sqrt{(\omega_0^2-\omega^2)^2+4\omega^2\beta^2}}. +\end{equation} +\]
    +

    For a given initial condition, e.g. initial displacement and velocity, +one must add the homogenous solution then solve for the two arbitrary +constants. However, because the homogenous solutions decay with time +as \(e^{-\beta t}\), the particular solution is all that remains at +large times, and is therefore the steady state solution. Because the +arbitrary constants are all in the homogenous solution, all memory of +the initial conditions are lost at large times, \(t>>1/\beta\).

    +

    The amplitude of the motion, \(D\), is linearly proportional to the +driving force (\(F_0/m\)), but also depends on the driving frequency +\(\omega\). For small \(\beta\) the maximum will occur at +\(\omega=\omega_0\). This is referred to as a resonance. In the limit +\(\beta\rightarrow 0\) the amplitude at resonance approaches infinity.

    +
    +
    +

    4.4. Alternative Derivation for Driven Oscillators

    +

    Here, we derive the same expressions as in Equations (13) and (16) but express the driving forces as

    +
    +\[ +\begin{eqnarray} +F(t)&=&F_0e^{i\omega t}, +\end{eqnarray} +\]
    +

    rather than as \(F_0\cos\omega t\). The real part of \(F\) is the same as before. For the differential equation,

    + +
    +
    +\[ +\begin{eqnarray} +\label{eq:compdrive} \tag{17} +\ddot{x}+2\beta\dot{x}+\omega_0^2x&=&\frac{F_0}{m}e^{i\omega t}, +\end{eqnarray} +\]
    +

    one can treat \(x(t)\) as an imaginary function. Because the operations +\(d^2/dt^2\) and \(d/dt\) are real and thus do not mix the real and +imaginary parts of \(x(t)\), Eq. (17) is effectively 2 +equations. Because \(e^{\omega t}=\cos\omega t+i\sin\omega t\), the real +part of the solution for \(x(t)\) gives the solution for a driving force +\(F_0\cos\omega t\), and the imaginary part of \(x\) corresponds to the +case where the driving force is \(F_0\sin\omega t\). It is rather easy +to solve for the complex \(x\) in this case, and by taking the real part +of the solution, one finds the answer for the \(\cos\omega t\) driving +force.

    +

    We assume a simple form for the particular solution

    + +
    +
    +\[ +\begin{equation} +x_p=De^{i\omega t}, +\label{_auto11} \tag{18} +\end{equation} +\]
    +

    where \(D\) is a complex constant.

    +

    From Eq. (17) one inserts the form for \(x_p\) above to get

    +
    +\[\begin{split} +\begin{eqnarray} +D\left\{-\omega^2+2i\beta\omega+\omega_0^2\right\}e^{i\omega t}=(F_0/m)e^{i\omega t},\\ +\nonumber +D=\frac{F_0/m}{(\omega_0^2-\omega^2)+2i\beta\omega}. +\end{eqnarray} +\end{split}\]
    +

    The norm and phase for \(D=|D|e^{-i\delta}\) can be read by inspection,

    + +
    +
    +\[ +\begin{equation} +|D|=\frac{F_0/m}{\sqrt{(\omega_0^2-\omega^2)^2+4\beta^2\omega^2}},~~~~\tan\delta=\frac{2\beta\omega}{\omega_0^2-\omega^2}. +\label{_auto12} \tag{19} +\end{equation} +\]
    +

    This is the same expression for \(\delta\) as before. One then finds \(x_p(t)\),

    + +
    +
    +\[\begin{split} +\begin{eqnarray} +\label{eq:fastdriven1} \tag{20} +x_p(t)&=&\Re\frac{(F_0/m)e^{i\omega t-i\delta}}{\sqrt{(\omega_0^2-\omega^2)^2+4\beta^2\omega^2}}\\ +\nonumber +&=&\frac{(F_0/m)\cos(\omega t-\delta)}{\sqrt{(\omega_0^2-\omega^2)^2+4\beta^2\omega^2}}. +\end{eqnarray} +\end{split}\]
    +

    This is the same answer as before. +If one wished to solve for the case where \(F(t)= F_0\sin\omega t\), the imaginary part of the solution would work

    + +
    +
    +\[\begin{split} +\begin{eqnarray} +\label{eq:fastdriven2} \tag{21} +x_p(t)&=&\Im\frac{(F_0/m)e^{i\omega t-i\delta}}{\sqrt{(\omega_0^2-\omega^2)^2+4\beta^2\omega^2}}\\ +\nonumber +&=&\frac{(F_0/m)\sin(\omega t-\delta)}{\sqrt{(\omega_0^2-\omega^2)^2+4\beta^2\omega^2}}. +\end{eqnarray} +\end{split}\]
    +

    Consider the damped and driven harmonic oscillator worked out above. Given \(F_0, m,\beta\) and \(\omega_0\), solve for the complete solution \(x(t)\) for the case where \(F=F_0\sin\omega t\) with initial conditions \(x(t=0)=0\) and \(v(t=0)=0\). Assume the underdamped case.

    +

    The general solution including the arbitrary constants includes both the homogenous and particular solutions,

    +
    +\[ +\begin{eqnarray*} +x(t)&=&\frac{F_0}{m}\frac{\sin(\omega t-\delta)}{\sqrt{(\omega_0^2-\omega^2)^2+4\beta^2\omega^2}} ++A\cos\omega't e^{-\beta t}+B\sin\omega't e^{-\beta t}. +\end{eqnarray*} +\]
    +

    The quantities \(\delta\) and \(\omega'\) are given earlier in the +section, \(\omega'=\sqrt{\omega_0^2-\beta^2}, +\delta=\tan^{-1}(2\beta\omega/(\omega_0^2-\omega^2)\). Here, solving +the problem means finding the arbitrary constants \(A\) and +\(B\). Satisfying the initial conditions for the initial position and +velocity:

    +
    +\[\begin{split} +\begin{eqnarray*} +x(t=0)=0&=&-\eta\sin\delta+A,\\ +v(t=0)=0&=&\omega\eta\cos\delta-\beta A+\omega'B,\\ +\eta&\equiv&\frac{F_0}{m}\frac{1}{\sqrt{(\omega_0^2-\omega^2)^2+4\beta^2\omega^2}}. +\end{eqnarray*} +\end{split}\]
    +

    The problem is now reduced to 2 equations and 2 unknowns, \(A\) and \(B\). The solution is

    +
    +\[ +\begin{eqnarray} +A&=& \eta\sin\delta ,~~~B=\frac{-\omega\eta\cos\delta+\beta\eta\sin\delta}{\omega'}. +\end{eqnarray} +\]
    +
    +
    +

    4.5. Resonance Widths; the \(Q\) factor

    +

    From the previous two sections, the particular solution for a driving force, \(F=F_0\cos\omega t\), is

    +
    +\[\begin{split} +\begin{eqnarray} +x_p(t)&=&\frac{F_0/m}{\sqrt{(\omega_0^2-\omega^2)^2+4\omega^2\beta^2}}\cos(\omega_t-\delta),\\ +\nonumber +\delta&=&\tan^{-1}\left(\frac{2\beta\omega}{\omega_0^2-\omega^2}\right). +\end{eqnarray} +\end{split}\]
    +

    If one fixes the driving frequency \(\omega\) and adjusts the +fundamental frequency \(\omega_0=\sqrt{k/m}\), the maximum amplitude +occurs when \(\omega_0=\omega\) because that is when the term from the +denominator \((\omega_0^2-\omega^2)^2+4\omega^2\beta^2\) is at a +minimum. This is akin to dialing into a radio station. However, if one +fixes \(\omega_0\) and adjusts the driving frequency one minimize with +respect to \(\omega\), e.g. set

    + +
    +
    +\[ +\begin{equation} +\frac{d}{d\omega}\left[(\omega_0^2-\omega^2)^2+4\omega^2\beta^2\right]=0, +\label{_auto13} \tag{22} +\end{equation} +\]
    +

    and one finds that the maximum amplitude occurs when +\(\omega=\sqrt{\omega_0^2-2\beta^2}\). If \(\beta\) is small relative to +\(\omega_0\), one can simply state that the maximum amplitude is

    + +
    +
    +\[ +\begin{equation} +x_{\rm max}\approx\frac{F_0}{2m\beta \omega_0}. +\label{_auto14} \tag{23} +\end{equation} +\]
    +
    +\[ +\begin{eqnarray} +\frac{4\omega^2\beta^2}{(\omega_0^2-\omega^2)^2+4\omega^2\beta^2}=\frac{1}{2}. +\end{eqnarray} +\]
    +

    For small damping this occurs when \(\omega=\omega_0\pm \beta\), so the \(FWHM\approx 2\beta\). For the purposes of tuning to a specific frequency, one wants the width to be as small as possible. The ratio of \(\omega_0\) to \(FWHM\) is known as the {\it quality} factor, or \(Q\) factor,

    + +
    +
    +\[ +\begin{equation} +Q\equiv \frac{\omega_0}{2\beta}. +\label{_auto15} \tag{24} +\end{equation} +\]
    +
    +
    +

    4.6. Numerical Studies of Driven Oscillations

    +

    Solving the problem of driven oscillations numerically gives us much +more flexibility to study different types of driving forces. We can +reuse our earlier code by simply adding a driving force. If we stay in +the \(x\)-direction only this can be easily done by adding a term +\(F_{\mathrm{ext}}(x,t)\). Note that we have kept it rather general +here, allowing for both a spatial and a temporal dependence.

    +

    Before we dive into the code, we need to briefly remind ourselves +about the equations we started with for the case with damping, namely

    +
    +\[ +m\frac{d^2x}{dt^2} + b\frac{dx}{dt}+kx(t) =0, +\]
    +

    with no external force applied to the system.

    +

    Let us now for simplicty assume that our external force is given by

    +
    +\[ +F_{\mathrm{ext}}(t) = F_0\cos{(\omega t)}, +\]
    +

    where \(F_0\) is a constant (what is its dimension?) and \(\omega\) is the frequency of the applied external driving force. +Small question: would you expect energy to be conserved now?

    +

    Introducing the external force into our lovely differential equation +and dividing by \(m\) and introducing \(\omega_0^2=\sqrt{k/m}\) we have

    +
    +\[ +\frac{d^2x}{dt^2} + \frac{b}{m}\frac{dx}{dt}+\omega_0^2x(t) =\frac{F_0}{m}\cos{(\omega t)}, +\]
    +

    Thereafter we introduce a dimensionless time \(\tau = t\omega_0\) +and a dimensionless frequency \(\tilde{\omega}=\omega/\omega_0\). We have then

    +
    +\[ +\frac{d^2x}{d\tau^2} + \frac{b}{m\omega_0}\frac{dx}{d\tau}+x(\tau) =\frac{F_0}{m\omega_0^2}\cos{(\tilde{\omega}\tau)}, +\]
    +

    Introducing a new amplitude \(\tilde{F} =F_0/(m\omega_0^2)\) (check dimensionality again) we have

    +
    +\[ +\frac{d^2x}{d\tau^2} + \frac{b}{m\omega_0}\frac{dx}{d\tau}+x(\tau) =\tilde{F}\cos{(\tilde{\omega}\tau)}. +\]
    +

    Our final step, as we did in the case of various types of damping, is +to define \(\gamma = b/(2m\omega_0)\) and rewrite our equations as

    +
    +\[ +\frac{d^2x}{d\tau^2} + 2\gamma\frac{dx}{d\tau}+x(\tau) =\tilde{F}\cos{(\tilde{\omega}\tau)}. +\]
    +

    This is the equation we will code below using the Euler-Cromer method.

    +
    +
    +
    DeltaT = 0.001
    +#set up arrays 
    +tfinal = 20 # in years
    +n = ceil(tfinal/DeltaT)
    +# set up arrays for t, v, and x
    +t = np.zeros(n)
    +v = np.zeros(n)
    +x = np.zeros(n)
    +# Initial conditions as one-dimensional arrays of time
    +x0 =  1.0 
    +v0 = 0.0
    +x[0] = x0
    +v[0] = v0
    +gamma = 0.2
    +Omegatilde = 0.5
    +Ftilde = 1.0
    +# Start integrating using Euler-Cromer's method
    +for i in range(n-1):
    +    # Set up the acceleration
    +    # Here you could have defined your own function for this
    +    a =  -2*gamma*v[i]-x[i]+Ftilde*cos(t[i]*Omegatilde)
    +    # update velocity, time and position
    +    v[i+1] = v[i] + DeltaT*a
    +    x[i+1] = x[i] + DeltaT*v[i+1]
    +    t[i+1] = t[i] + DeltaT
    +# Plot position as function of time    
    +fig, ax = plt.subplots()
    +ax.set_ylabel('x[m]')
    +ax.set_xlabel('t[s]')
    +ax.plot(t, x)
    +fig.tight_layout()
    +save_fig("ForcedBlockEulerCromer")
    +plt.show()
    +
    +
    +
    +
    +_images/chapter5_110_0.png +
    +
    +

    In the above example we have focused on the Euler-Cromer method. This +method has a local truncation error which is proportional to \(\Delta t^2\) +and thereby a global error which is proportional to \(\Delta t\). +We can improve this by using the Runge-Kutta family of +methods. The widely popular Runge-Kutta to fourth order or just RK4 +has indeed a much better truncation error. The RK4 method has a global +error which is proportional to \(\Delta t\).

    +

    Let us revisit this method and see how we can implement it for the above example.

    +
    +
    +

    4.7. Differential Equations, Runge-Kutta methods

    +

    Runge-Kutta (RK) methods are based on Taylor expansion formulae, but yield +in general better algorithms for solutions of an ordinary differential equation. +The basic philosophy is that it provides an intermediate step in the computation of \(y_{i+1}\).

    +

    To see this, consider first the following definitions

    + +
    +
    +\[ +\begin{equation} +\frac{dy}{dt}=f(t,y), +\label{_auto16} \tag{25} +\end{equation} +\]
    +

    and

    + +
    +
    +\[ +\begin{equation} +y(t)=\int f(t,y) dt, +\label{_auto17} \tag{26} +\end{equation} +\]
    +

    and

    + +
    +
    +\[ +\begin{equation} +y_{i+1}=y_i+ \int_{t_i}^{t_{i+1}} f(t,y) dt. +\label{_auto18} \tag{27} +\end{equation} +\]
    +

    To demonstrate the philosophy behind RK methods, let us consider +the second-order RK method, RK2. +The first approximation consists in Taylor expanding \(f(t,y)\) +around the center of the integration interval \(t_i\) to \(t_{i+1}\), +that is, at \(t_i+h/2\), \(h\) being the step. +Using the midpoint formula for an integral, +defining \(y(t_i+h/2) = y_{i+1/2}\) and
    +\(t_i+h/2 = t_{i+1/2}\), we obtain

    + +
    +
    +\[ +\begin{equation} +\int_{t_i}^{t_{i+1}} f(t,y) dt \approx hf(t_{i+1/2},y_{i+1/2}) +O(h^3). +\label{_auto19} \tag{28} +\end{equation} +\]
    +

    This means in turn that we have

    + +
    +
    +\[ +\begin{equation} +y_{i+1}=y_i + hf(t_{i+1/2},y_{i+1/2}) +O(h^3). +\label{_auto20} \tag{29} +\end{equation} +\]
    +

    However, we do not know the value of \(y_{i+1/2}\). Here comes thus the next approximation, namely, we use Euler’s +method to approximate \(y_{i+1/2}\). We have then

    + +
    +
    +\[ +\begin{equation} +y_{(i+1/2)}=y_i + \frac{h}{2}\frac{dy}{dt}=y(t_i) + \frac{h}{2}f(t_i,y_i). +\label{_auto21} \tag{30} +\end{equation} +\]
    +

    This means that we can define the following algorithm for +the second-order Runge-Kutta method, RK2.

    +

    6 +0

    +

    < +< +< +! +! +M +A +T +H +_ +B +L +O +C +K

    + +
    +
    +\[ +\begin{equation} +k_2=hf(t_{i+1/2},y_i+k_1/2), +\label{_auto23} \tag{32} +\end{equation} +\]
    +

    with the final value

    + +
    +
    +\[ +\begin{equation} +y_{i+i}\approx y_i + k_2 +O(h^3). +\label{_auto24} \tag{33} +\end{equation} +\]
    +

    The difference between the previous one-step methods +is that we now need an intermediate step in our evaluation, +namely \(t_i+h/2 = t_{(i+1/2)}\) where we evaluate the derivative \(f\). +This involves more operations, but the gain is a better stability +in the solution.

    +

    The fourth-order Runge-Kutta, RK4, has the following algorithm

    +

    6 +3

    +

    < +< +< +! +! +M +A +T +H +_ +B +L +O +C +K

    +
    +\[ +k_3=hf(t_i+h/2,y_i+k_2/2)\hspace{0.5cm} k_4=hf(t_i+h,y_i+k_3) +\]
    +

    with the final result

    +
    +\[ +y_{i+1}=y_i +\frac{1}{6}\left( k_1 +2k_2+2k_3+k_4\right). +\]
    +

    Thus, the algorithm consists in first calculating \(k_1\) +with \(t_i\), \(y_1\) and \(f\) as inputs. Thereafter, we increase the step +size by \(h/2\) and calculate \(k_2\), then \(k_3\) and finally \(k_4\). The global error goes as \(O(h^4)\).

    +

    However, at this stage, if we keep adding different methods in our +main program, the code will quickly become messy and ugly. Before we +proceed thus, we will now introduce functions that enbody the various +methods for solving differential equations. This means that we can +separate out these methods in own functions and files (and later as classes and more +generic functions) and simply call them when needed. Similarly, we +could easily encapsulate various forces or other quantities of +interest in terms of functions. To see this, let us bring up the code +we developed above for the simple sliding block, but now only with the simple forward Euler method. We introduce +two functions, one for the simple Euler method and one for the +force.

    +

    Note that here the forward Euler method does not know the specific force function to be called. +It receives just an input the name. We can easily change the force by adding another function.

    +
    +
    +
    def ForwardEuler(v,x,t,n,Force):
    +    for i in range(n-1):
    +        v[i+1] = v[i] + DeltaT*Force(v[i],x[i],t[i])
    +        x[i+1] = x[i] + DeltaT*v[i]
    +        t[i+1] = t[i] + DeltaT
    +
    +
    +
    +
    +
    +
    +
    def SpringForce(v,x,t):
    +#   note here that we have divided by mass and we return the acceleration
    +    return  -2*gamma*v-x+Ftilde*cos(t*Omegatilde)
    +
    +
    +
    +
    +

    It is easy to add a new method like the Euler-Cromer

    +
    +
    +
    def ForwardEulerCromer(v,x,t,n,Force):
    +    for i in range(n-1):
    +        a = Force(v[i],x[i],t[i])
    +        v[i+1] = v[i] + DeltaT*a
    +        x[i+1] = x[i] + DeltaT*v[i+1]
    +        t[i+1] = t[i] + DeltaT
    +
    +
    +
    +
    +

    and the Velocity Verlet method (be careful with time-dependence here, it is not an ideal method for non-conservative forces))

    +
    +
    +
    def VelocityVerlet(v,x,t,n,Force):
    +    for i in range(n-1):
    +        a = Force(v[i],x[i],t[i])
    +        x[i+1] = x[i] + DeltaT*v[i]+0.5*a
    +        anew = Force(v[i],x[i+1],t[i+1])
    +        v[i+1] = v[i] + 0.5*DeltaT*(a+anew)
    +        t[i+1] = t[i] + DeltaT
    +
    +
    +
    +
    +

    Finally, we can now add the Runge-Kutta2 method via a new function

    +
    +
    +
    def RK2(v,x,t,n,Force):
    +    for i in range(n-1):
    +# Setting up k1
    +        k1x = DeltaT*v[i]
    +        k1v = DeltaT*Force(v[i],x[i],t[i])
    +# Setting up k2
    +        vv = v[i]+k1v*0.5
    +        xx = x[i]+k1x*0.5
    +        k2x = DeltaT*vv
    +        k2v = DeltaT*Force(vv,xx,t[i]+DeltaT*0.5)
    +# Final result
    +        x[i+1] = x[i]+k2x
    +        v[i+1] = v[i]+k2v
    +	t[i+1] = t[i]+DeltaT
    +
    +
    +
    +
    +
      File "<ipython-input-7-ffedbda27704>", line 14
    +    t[i+1] = t[i]+DeltaT
    +                        ^
    +TabError: inconsistent use of tabs and spaces in indentation
    +
    +
    +
    +
    +

    Finally, we can now add the Runge-Kutta2 method via a new function

    +
    +
    +
    def RK4(v,x,t,n,Force):
    +    for i in range(n-1):
    +# Setting up k1
    +        k1x = DeltaT*v[i]
    +        k1v = DeltaT*Force(v[i],x[i],t[i])
    +# Setting up k2
    +        vv = v[i]+k1v*0.5
    +        xx = x[i]+k1x*0.5
    +        k2x = DeltaT*vv
    +        k2v = DeltaT*Force(vv,xx,t[i]+DeltaT*0.5)
    +# Setting up k3
    +        vv = v[i]+k2v*0.5
    +        xx = x[i]+k2x*0.5
    +        k3x = DeltaT*vv
    +        k3v = DeltaT*Force(vv,xx,t[i]+DeltaT*0.5)
    +# Setting up k4
    +        vv = v[i]+k3v
    +        xx = x[i]+k3x
    +        k4x = DeltaT*vv
    +        k4v = DeltaT*Force(vv,xx,t[i]+DeltaT)
    +# Final result
    +        x[i+1] = x[i]+(k1x+2*k2x+2*k3x+k4x)/6.
    +        v[i+1] = v[i]+(k1v+2*k2v+2*k3v+k4v)/6.
    +        t[i+1] = t[i] + DeltaT
    +
    +
    +
    +
    +

    The Runge-Kutta family of methods are particularly useful when we have a time-dependent acceleration. +If we have forces which depend only the spatial degrees of freedom (no velocity and/or time-dependence), then energy conserving methods like the Velocity Verlet or the Euler-Cromer method are preferred. As soon as we introduce an explicit time-dependence and/or add dissipitave forces like friction or air resistance, then methods like the family of Runge-Kutta methods are well suited for this. +The code below uses the Runge-Kutta4 methods.

    +
    +
    +
    DeltaT = 0.001
    +#set up arrays 
    +tfinal = 20 # in years
    +n = ceil(tfinal/DeltaT)
    +# set up arrays for t, v, and x
    +t = np.zeros(n)
    +v = np.zeros(n)
    +x = np.zeros(n)
    +# Initial conditions (can change to more than one dim)
    +x0 =  1.0 
    +v0 = 0.0
    +x[0] = x0
    +v[0] = v0
    +gamma = 0.2
    +Omegatilde = 0.5
    +Ftilde = 1.0
    +# Start integrating using Euler's method
    +# Note that we define the force function as a SpringForce
    +RK4(v,x,t,n,SpringForce)
    +
    +# Plot position as function of time    
    +fig, ax = plt.subplots()
    +ax.set_ylabel('x[m]')
    +ax.set_xlabel('t[s]')
    +ax.plot(t, x)
    +fig.tight_layout()
    +save_fig("ForcedBlockRK4")
    +plt.show()
    +
    +
    +
    +
    +
    +
    +

    4.8. Principle of Superposition and Periodic Forces (Fourier Transforms)

    +

    If one has several driving forces, \(F(t)=\sum_n F_n(t)\), one can find +the particular solution to each \(F_n\), \(x_{pn}(t)\), and the particular +solution for the entire driving force is

    + +
    +
    +\[ +\begin{equation} +x_p(t)=\sum_nx_{pn}(t). +\label{_auto25} \tag{34} +\end{equation} +\]
    +

    This is known as the principal of superposition. It only applies when +the homogenous equation is linear. If there were an anharmonic term +such as \(x^3\) in the homogenous equation, then when one summed various +solutions, \(x=(\sum_n x_n)^2\), one would get cross +terms. Superposition is especially useful when \(F(t)\) can be written +as a sum of sinusoidal terms, because the solutions for each +sinusoidal (sine or cosine) term is analytic, as we saw above.

    +

    Driving forces are often periodic, even when they are not +sinusoidal. Periodicity implies that for some time \(\tau\)

    +
    +\[ +\begin{eqnarray} +F(t+\tau)=F(t). +\end{eqnarray} +\]
    +

    One example of a non-sinusoidal periodic force is a square wave. Many +components in electric circuits are non-linear, e.g. diodes, which +makes many wave forms non-sinusoidal even when the circuits are being +driven by purely sinusoidal sources.

    +

    The code here shows a typical example of such a square wave generated using the functionality included in the scipy Python package. We have used a period of \(\tau=0.2\).

    +
    +
    +
    import numpy as np
    +import math
    +from scipy import signal
    +import matplotlib.pyplot as plt
    +
    +# number of points                                                                                       
    +n = 500
    +# start and final times                                                                                  
    +t0 = 0.0
    +tn = 1.0
    +# Period                                                                                                 
    +t = np.linspace(t0, tn, n, endpoint=False)
    +SqrSignal = np.zeros(n)
    +SqrSignal = 1.0+signal.square(2*np.pi*5*t)
    +plt.plot(t, SqrSignal)
    +plt.ylim(-0.5, 2.5)
    +plt.show()
    +
    +
    +
    +
    +

    For the sinusoidal example studied in the previous subsections the +period is \(\tau=2\pi/\omega\). However, higher harmonics can also +satisfy the periodicity requirement. In general, any force that +satisfies the periodicity requirement can be expressed as a sum over +harmonics,

    + +
    +
    +\[ +\begin{equation} +F(t)=\frac{f_0}{2}+\sum_{n>0} f_n\cos(2n\pi t/\tau)+g_n\sin(2n\pi t/\tau). +\label{_auto26} \tag{35} +\end{equation} +\]
    +

    From the previous subsection, one can write down the answer for +\(x_{pn}(t)\), by substituting \(f_n/m\) or \(g_n/m\) for \(F_0/m\) into Eq.s +(20) or (21) respectively. By +writing each factor \(2n\pi t/\tau\) as \(n\omega t\), with \(\omega\equiv +2\pi/\tau\),

    + +
    +
    +\[ +\begin{equation} +\label{eq:fourierdef1} \tag{36} +F(t)=\frac{f_0}{2}+\sum_{n>0}f_n\cos(n\omega t)+g_n\sin(n\omega t). +\end{equation} +\]
    +

    The solutions for \(x(t)\) then come from replacing \(\omega\) with +\(n\omega\) for each term in the particular solution in Equations +(13) and (16),

    +
    +\[\begin{split} +\begin{eqnarray} +x_p(t)&=&\frac{f_0}{2k}+\sum_{n>0} \alpha_n\cos(n\omega t-\delta_n)+\beta_n\sin(n\omega t-\delta_n),\\ +\nonumber +\alpha_n&=&\frac{f_n/m}{\sqrt{((n\omega)^2-\omega_0^2)+4\beta^2n^2\omega^2}},\\ +\nonumber +\beta_n&=&\frac{g_n/m}{\sqrt{((n\omega)^2-\omega_0^2)+4\beta^2n^2\omega^2}},\\ +\nonumber +\delta_n&=&\tan^{-1}\left(\frac{2\beta n\omega}{\omega_0^2-n^2\omega^2}\right). +\end{eqnarray} +\end{split}\]
    +

    Because the forces have been applied for a long time, any non-zero +damping eliminates the homogenous parts of the solution, so one need +only consider the particular solution for each \(n\).

    +

    The problem will considered solved if one can find expressions for the +coefficients \(f_n\) and \(g_n\), even though the solutions are expressed +as an infinite sum. The coefficients can be extracted from the +function \(F(t)\) by

    + +
    +
    +\[\begin{split} +\begin{eqnarray} +\label{eq:fourierdef2} \tag{37} +f_n&=&\frac{2}{\tau}\int_{-\tau/2}^{\tau/2} dt~F(t)\cos(2n\pi t/\tau),\\ +\nonumber +g_n&=&\frac{2}{\tau}\int_{-\tau/2}^{\tau/2} dt~F(t)\sin(2n\pi t/\tau). +\end{eqnarray} +\end{split}\]
    +

    To check the consistency of these expressions and to verify +Eq. (37), one can insert the expansion of \(F(t)\) in +Eq. (36) into the expression for the coefficients in +Eq. (37) and see whether

    +
    +\[ +\begin{eqnarray} +f_n&=?&\frac{2}{\tau}\int_{-\tau/2}^{\tau/2} dt~\left\{ +\frac{f_0}{2}+\sum_{m>0}f_m\cos(m\omega t)+g_m\sin(m\omega t) +\right\}\cos(n\omega t). +\end{eqnarray} +\]
    +

    Immediately, one can throw away all the terms with \(g_m\) because they +convolute an even and an odd function. The term with \(f_0/2\) +disappears because \(\cos(n\omega t)\) is equally positive and negative +over the interval and will integrate to zero. For all the terms +\(f_m\cos(m\omega t)\) appearing in the sum, one can use angle addition +formulas to see that \(\cos(m\omega t)\cos(n\omega +t)=(1/2)(\cos[(m+n)\omega t]+\cos[(m-n)\omega t]\). This will integrate +to zero unless \(m=n\). In that case the \(m=n\) term gives

    + +
    +
    +\[ +\begin{equation} +\int_{-\tau/2}^{\tau/2}dt~\cos^2(m\omega t)=\frac{\tau}{2}, +\label{_auto27} \tag{38} +\end{equation} +\]
    +

    and

    +
    +\[\begin{split} +\begin{eqnarray} +f_n&=?&\frac{2}{\tau}\int_{-\tau/2}^{\tau/2} dt~f_n/2\\ +\nonumber +&=&f_n~\checkmark. +\end{eqnarray} +\end{split}\]
    +

    The same method can be used to check for the consistency of \(g_n\).

    +

    Consider the driving force:

    + +
    +
    +\[ +\begin{equation} +F(t)=At/\tau,~~-\tau/2<t<\tau/2,~~~F(t+\tau)=F(t). +\label{_auto28} \tag{39} +\end{equation} +\]
    +

    Find the Fourier coefficients \(f_n\) and \(g_n\) for all \(n\) using Eq. (37).

    +

    Only the odd coefficients enter by symmetry, i.e. \(f_n=0\). One can find \(g_n\) integrating by parts,

    + +
    +
    +\[\begin{split} +\begin{eqnarray} +\label{eq:fouriersolution} \tag{40} +g_n&=&\frac{2}{\tau}\int_{-\tau/2}^{\tau/2}dt~\sin(n\omega t) \frac{At}{\tau}\\ +\nonumber +u&=&t,~dv=\sin(n\omega t)dt,~v=-\cos(n\omega t)/(n\omega),\\ +\nonumber +g_n&=&\frac{-2A}{n\omega \tau^2}\int_{-\tau/2}^{\tau/2}dt~\cos(n\omega t) ++\left.2A\frac{-t\cos(n\omega t)}{n\omega\tau^2}\right|_{-\tau/2}^{\tau/2}. +\end{eqnarray} +\end{split}\]
    +

    The first term is zero because \(\cos(n\omega t)\) will be equally +positive and negative over the interval. Using the fact that +\(\omega\tau=2\pi\),

    +
    +\[\begin{split} +\begin{eqnarray} +g_n&=&-\frac{2A}{2n\pi}\cos(n\omega\tau/2)\\ +\nonumber +&=&-\frac{A}{n\pi}\cos(n\pi)\\ +\nonumber +&=&\frac{A}{n\pi}(-1)^{n+1}. +\end{eqnarray} +\end{split}\]
    +
    +
    +

    4.9. Fourier Series

    +

    More text will come here, chpater 5.7-5.8 of Taylor are discussed +during the lectures. The code here uses the Fourier series discussed +in chapter 5.7 for a square wave signal. The equations for the +coefficients are are discussed in Taylor section 5.7, see Example +5.4. The code here visualizes the various approximations given by +Fourier series compared with a square wave with period \(T=0.2\), witth +\(0.1\) and max value \(F=2\). We see that when we increase the number of +components in the Fourier series, the Fourier series approximation gets closes and closes to the square wave signal.

    +
    +
    +
    import numpy as np
    +import math
    +from scipy import signal
    +import matplotlib.pyplot as plt
    +
    +# number of points                                                                                       
    +n = 500
    +# start and final times                                                                                  
    +t0 = 0.0
    +tn = 1.0
    +# Period                                                                                                 
    +T =0.2
    +# Max value of square signal                                                                             
    +Fmax= 2.0
    +# Width of signal                                                                                        
    +Width = 0.1
    +t = np.linspace(t0, tn, n, endpoint=False)
    +SqrSignal = np.zeros(n)
    +FourierSeriesSignal = np.zeros(n)
    +SqrSignal = 1.0+signal.square(2*np.pi*5*t+np.pi*Width/T)
    +a0 = Fmax*Width/T
    +FourierSeriesSignal = a0
    +Factor = 2.0*Fmax/np.pi
    +for i in range(1,500):
    +    FourierSeriesSignal += Factor/(i)*np.sin(np.pi*i*Width/T)*np.cos(i*t*2*np.pi/T)
    +plt.plot(t, SqrSignal)
    +plt.plot(t, FourierSeriesSignal)
    +plt.ylim(-0.5, 2.5)
    +plt.show()
    +
    +
    +
    +
    +
    +
    +

    4.10. Solving differential equations with Fouries series

    +

    The material here was discussed during the lecture of February 19 and 21. +It is also covered by Taylor in section 5.8.

    +
    +
    +

    4.11. Response to Transient Force

    +

    Consider a particle at rest in the bottom of an underdamped harmonic +oscillator, that then feels a sudden impulse, or change in momentum, +\(I=F\Delta t\) at \(t=0\). This increases the velocity immediately by an +amount \(v_0=I/m\) while not changing the position. One can then solve +the trajectory by solving Eq. (9) with initial +conditions \(v_0=I/m\) and \(x_0=0\). This gives

    + +
    +
    +\[ +\begin{equation} +x(t)=\frac{I}{m\omega'}e^{-\beta t}\sin\omega't, ~~t>0. +\label{_auto29} \tag{41} +\end{equation} +\]
    +

    Here, \(\omega'=\sqrt{\omega_0^2-\beta^2}\). For an impulse \(I_i\) that +occurs at time \(t_i\) the trajectory would be

    + +
    +
    +\[ +\begin{equation} +x(t)=\frac{I_i}{m\omega'}e^{-\beta (t-t_i)}\sin[\omega'(t-t_i)] \Theta(t-t_i), +\label{_auto30} \tag{42} +\end{equation} +\]
    +

    where \(\Theta(t-t_i)\) is a step function, i.e. \(\Theta(x)\) is zero for +\(x<0\) and unity for \(x>0\). If there were several impulses linear +superposition tells us that we can sum over each contribution,

    + +
    +
    +\[ +\begin{equation} +x(t)=\sum_i\frac{I_i}{m\omega'}e^{-\beta(t-t_i)}\sin[\omega'(t-t_i)]\Theta(t-t_i) +\label{_auto31} \tag{43} +\end{equation} +\]
    +

    Now one can consider a series of impulses at times separated by +\(\Delta t\), where each impulse is given by \(F_i\Delta t\). The sum +above now becomes an integral,

    + +
    +
    +\[\begin{split} +\begin{eqnarray}\label{eq:Greeny} \tag{44} +x(t)&=&\int_{-\infty}^\infty dt'~F(t')\frac{e^{-\beta(t-t')}\sin[\omega'(t-t')]}{m\omega'}\Theta(t-t')\\ +\nonumber +&=&\int_{-\infty}^\infty dt'~F(t')G(t-t'),\\ +\nonumber +G(\Delta t)&=&\frac{e^{-\beta\Delta t}\sin[\omega' \Delta t]}{m\omega'}\Theta(\Delta t) +\end{eqnarray} +\end{split}\]
    +

    The quantity +\(e^{-\beta(t-t')}\sin[\omega'(t-t')]/m\omega'\Theta(t-t')\) is called a +Green’s function, \(G(t-t')\). It describes the response at \(t\) due to a +force applied at a time \(t'\), and is a function of \(t-t'\). The step +function ensures that the response does not occur before the force is +applied. One should remember that the form for \(G\) would change if the +oscillator were either critically- or over-damped.

    +

    When performing the integral in Eq. (44) one can use +angle addition formulas to factor out the part with the \(t'\) +dependence in the integrand,

    + +
    +
    +\[\begin{split} +\begin{eqnarray} +\label{eq:Greeny2} \tag{45} +x(t)&=&\frac{1}{m\omega'}e^{-\beta t}\left[I_c(t)\sin(\omega't)-I_s(t)\cos(\omega't)\right],\\ +\nonumber +I_c(t)&\equiv&\int_{-\infty}^t dt'~F(t')e^{\beta t'}\cos(\omega't'),\\ +\nonumber +I_s(t)&\equiv&\int_{-\infty}^t dt'~F(t')e^{\beta t'}\sin(\omega't'). +\end{eqnarray} +\end{split}\]
    +

    If the time \(t\) is beyond any time at which the force acts, +\(F(t'>t)=0\), the coefficients \(I_c\) and \(I_s\) become independent of +\(t\).

    +

    Consider an undamped oscillator (\(\beta\rightarrow 0\)), with +characteristic frequency \(\omega_0\) and mass \(m\), that is at rest +until it feels a force described by a Gaussian form,

    +
    +\[ +\begin{eqnarray*} +F(t)&=&F_0 \exp\left\{\frac{-t^2}{2\tau^2}\right\}. +\end{eqnarray*} +\]
    +

    For large times (\(t>>\tau\)), where the force has died off, find +\(x(t)\).\ Solve for the coefficients \(I_c\) and \(I_s\) in +Eq. (45). Because the Gaussian is an even function, +\(I_s=0\), and one need only solve for \(I_c\),

    +
    +\[\begin{split} +\begin{eqnarray*} +I_c&=&F_0\int_{-\infty}^\infty dt'~e^{-t^{\prime 2}/(2\tau^2)}\cos(\omega_0 t')\\ +&=&\Re F_0 \int_{-\infty}^\infty dt'~e^{-t^{\prime 2}/(2\tau^2)}e^{i\omega_0 t'}\\ +&=&\Re F_0 \int_{-\infty}^\infty dt'~e^{-(t'-i\omega_0\tau^2)^2/(2\tau^2)}e^{-\omega_0^2\tau^2/2}\\ +&=&F_0\tau \sqrt{2\pi} e^{-\omega_0^2\tau^2/2}. +\end{eqnarray*} +\end{split}\]
    +

    The third step involved completing the square, and the final step used the fact that the integral

    +
    +\[ +\begin{eqnarray*} +\int_{-\infty}^\infty dx~e^{-x^2/2}&=&\sqrt{2\pi}. +\end{eqnarray*} +\]
    +

    To see that this integral is true, consider the square of the integral, which you can change to polar coordinates,

    +
    +\[\begin{split} +\begin{eqnarray*} +I&=&\int_{-\infty}^\infty dx~e^{-x^2/2}\\ +I^2&=&\int_{-\infty}^\infty dxdy~e^{-(x^2+y^2)/2}\\ +&=&2\pi\int_0^\infty rdr~e^{-r^2/2}\\ +&=&2\pi. +\end{eqnarray*} +\end{split}\]
    +

    Finally, the expression for \(x\) from Eq. (45) is

    +
    +\[ +\begin{eqnarray*} +x(t>>\tau)&=&\frac{F_0\tau}{m\omega_0} \sqrt{2\pi} e^{-\omega_0^2\tau^2/2}\sin(\omega_0t). +\end{eqnarray*} +\]
    +
    +
    +

    4.12. The classical pendulum and scaling the equations

    +

    Let us end our discussion of oscillations with another classical case, the pendulum.

    +

    The angular equation of motion of the pendulum is given by +Newton’s equation and with no external force it reads

    + +
    +
    +\[ +\begin{equation} + ml\frac{d^2\theta}{dt^2}+mgsin(\theta)=0, +\label{_auto32} \tag{46} +\end{equation} +\]
    +

    with an angular velocity and acceleration given by

    + +
    +
    +\[ +\begin{equation} + v=l\frac{d\theta}{dt}, +\label{_auto33} \tag{47} +\end{equation} +\]
    +

    and

    + +
    +
    +\[ +\begin{equation} + a=l\frac{d^2\theta}{dt^2}. +\label{_auto34} \tag{48} +\end{equation} +\]
    +

    We do however expect that the motion will gradually come to an end due a viscous drag torque acting on the pendulum. +In the presence of the drag, the above equation becomes

    + +
    +
    +\[ +\begin{equation} + ml\frac{d^2\theta}{dt^2}+\nu\frac{d\theta}{dt} +mgsin(\theta)=0, \label{eq:pend1} \tag{49} +\end{equation} +\]
    +

    where \(\nu\) is now a positive constant parameterizing the viscosity +of the medium in question. In order to maintain the motion against +viscosity, it is necessary to add some external driving force. +We choose here a periodic driving force. The last equation becomes then

    + +
    +
    +\[ +\begin{equation} + ml\frac{d^2\theta}{dt^2}+\nu\frac{d\theta}{dt} +mgsin(\theta)=Asin(\omega t), \label{eq:pend2} \tag{50} +\end{equation} +\]
    +

    with \(A\) and \(\omega\) two constants representing the amplitude and +the angular frequency respectively. The latter is called the driving frequency.

    +

    We define

    +
    +\[ +\omega_0=\sqrt{g/l}, +\]
    +

    the so-called natural frequency and the new dimensionless quantities

    +
    +\[ +\hat{t}=\omega_0t, +\]
    +

    with the dimensionless driving frequency

    +
    +\[ +\hat{\omega}=\frac{\omega}{\omega_0}, +\]
    +

    and introducing the quantity \(Q\), called the quality factor,

    +
    +\[ +Q=\frac{mg}{\omega_0\nu}, +\]
    +

    and the dimensionless amplitude

    +
    +\[ +\hat{A}=\frac{A}{mg} +\]
    +
    +
    +

    4.13. More on the Pendulum

    +

    We have

    +
    +\[ +\frac{d^2\theta}{d\hat{t}^2}+\frac{1}{Q}\frac{d\theta}{d\hat{t}} + +sin(\theta)=\hat{A}cos(\hat{\omega}\hat{t}). +\]
    +

    This equation can in turn be recast in terms of two coupled first-order differential equations as follows

    +
    +\[ +\frac{d\theta}{d\hat{t}}=\hat{v}, +\]
    +

    and

    +
    +\[ +\frac{d\hat{v}}{d\hat{t}}=-\frac{\hat{v}}{Q}-sin(\theta)+\hat{A}cos(\hat{\omega}\hat{t}). +\]
    +

    These are the equations to be solved. The factor \(Q\) represents the +number of oscillations of the undriven system that must occur before +its energy is significantly reduced due to the viscous drag. The +amplitude \(\hat{A}\) is measured in units of the maximum possible +gravitational torque while \(\hat{\omega}\) is the angular frequency of +the external torque measured in units of the pendulum’s natural +frequency.

    +
    +
    + + + + +
    + +
    +
    + + + +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/chapter6.html b/doc/src/LectureNotes/testbook/_build/html/chapter6.html new file mode 100644 index 000000000..098a9f929 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/chapter6.html @@ -0,0 +1,1913 @@ + + + + + + + + + 5. Two-body Problems — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + +
    +
    + +
    + +
    +

    5. Two-body Problems

    +

    The gravitational potential energy and forces involving two masses \(a\) and \(b\) are

    +
    +\[\begin{split} +\begin{eqnarray} +U_{ab}&=&-\frac{Gm_am_b}{|\boldsymbol{r}_a-\boldsymbol{r}_b|},\\ +\nonumber +F_{ba}&=&-\frac{Gm_am_b}{|\boldsymbol{r}_a-\boldsymbol{r}_b|^2}\hat{r}_{ab},\\ +\nonumber +\hat{r}_{ab}&=&\frac{\boldsymbol{r}_b-\boldsymbol{r}_a}{|\boldsymbol{r}_a-\boldsymbol{r}_b|}. +\end{eqnarray} +\end{split}\]
    +

    Here \(G=6.67\times 10^{-11}\) Nm\(^2\)/kg\(^2\), and \(F_{ba}\) is the force +on \(b\) due to \(a\). By inspection, one can see that the force on \(b\) +due to \(a\) and the force on \(a\) due to \(b\) are equal and opposite. The +net potential energy for a large number of masses would be

    + +
    +
    +\[ +\begin{equation} +U=\sum_{a<b}U_{ab}=\frac{1}{2}\sum_{a\ne b}U_{ab}. +\label{_auto1} \tag{1} +\end{equation} +\]
    +
    +

    5.1. Relative and Center of Mass Motion

    +

    Thus far, we have considered the trajectory as if the force is +centered around a fixed point. For two bodies interacting only with +one another, both masses circulate around the center of mass. One +might think that solutions would become more complex when both +particles move, but we will see here that the problem can be reduced +to one with a single body moving according to a fixed force by +expressing the trajectories for \(\boldsymbol{r}_1\) and \(\boldsymbol{r}_2\) into the +center-of-mass coordinate \(\boldsymbol{R}_{\rm cm}\) and the relative +coordinate \(\boldsymbol{r}\),

    +
    +\[\begin{split} +\begin{eqnarray} +\boldsymbol{R}_{\rm cm}&\equiv&\frac{m_1\boldsymbol{r}_1+m_2\boldsymbol{r}_2}{m_1+m_2},\\ +\nonumber +\boldsymbol{r}&\equiv&\boldsymbol{r}_1-\boldsymbol{r_2}. +\end{eqnarray} +\end{split}\]
    +

    Here, we assume the two particles interact only with one another, so +\(\boldsymbol{F}_{12}=-\boldsymbol{F}_{21}\) (where \(\boldsymbol{F}_{ij}\) is the force on \(i\) +due to \(j\). The equations of motion then become

    +
    +\[\begin{split} +\begin{eqnarray} +\ddot{\boldsymbol{R}}_{\rm cm}&=&\frac{1}{m_1+m_2}\left\{m_1\ddot{\boldsymbol{r}}_1+m_2\ddot{\boldsymbol{r}}_2\right\}\\ +\nonumber +&=&\frac{1}{m_1+m_2}\left\{\boldsymbol{F}_{12}+\boldsymbol{F}_{21}\right\}=0.\\ +\ddot{\boldsymbol{r}}&=&\ddot{\boldsymbol{r}}_1-\ddot{\boldsymbol{r}}_2=\left(\frac{\boldsymbol{F}_{12}}{m_1}-\frac{\boldsymbol{F}_{21}}{m_2}\right)\\ +\nonumber +&=&\left(\frac{1}{m_1}+\frac{1}{m_2}\right)\boldsymbol{F}_{12}. +\end{eqnarray} +\end{split}\]
    +

    The first expression simply states that the center of mass coordinate +\(\boldsymbol{R}_{\rm cm}\) moves at a fixed velocity. The second expression +can be rewritten in terms of the reduced mass \(\mu\).

    +
    +\[\begin{split} +\begin{eqnarray} +\mu \ddot{\boldsymbol{r}}&=&\boldsymbol{F}_{12},\\ +\frac{1}{\mu}&=&\frac{1}{m_1}+\frac{1}{m_2},~~~~\mu=\frac{m_1m_2}{m_1+m_2}. +\end{eqnarray} +\end{split}\]
    +

    Thus, one can treat the trajectory as a one-body problem where the +reduced mass is \(\mu\), and a second trivial problem for the center of +mass. The reduced mass is especially convenient when one is +considering gravitational problems because then

    +
    +\[\begin{split} +\begin{eqnarray} +\mu \ddot{r}&=&-\frac{Gm_1m_2}{r^2}\hat{r}\\ +\nonumber +&=&-\frac{GM\mu}{r^2}\hat{r},~~~M\equiv m_1+m_2. +\end{eqnarray} +\end{split}\]
    +

    For the gravitational problem, the reduced mass then falls out and the +trajectory depends only on the total mass \(M\).

    +

    The kinetic energy and momenta also have analogues in center-of-mass +coordinates. The total and relative momenta are

    +
    +\[\begin{split} +\begin{eqnarray} +\boldsymbol{P}&\equiv&\boldsymbol{p}_1+\boldsymbol{p}_2=M\dot{\boldsymbol{R}}_{\rm cm},\\ +\nonumber +\boldsymbol{q}&\equiv&\mu\dot{\boldsymbol{r}}. +\end{eqnarray} +\end{split}\]
    +

    With these definitions, a little algebra shows that the kinetic energy becomes

    +
    +\[\begin{split} +\begin{eqnarray} +T&=&\frac{1}{2}m_1|\boldsymbol{v}_1|^2+\frac{1}{2}m_2|\boldsymbol{v}_2|^2\\ +\nonumber +&=&\frac{1}{2}M|\dot{\boldsymbol{R}}_{\rm cm}|^2 ++\frac{1}{2}\mu|\dot{\boldsymbol{r}}|^2\\ +\nonumber +&=&\frac{P^2}{2M}+\frac{q^2}{2\mu}. +\end{eqnarray} +\end{split}\]
    +

    The standard strategy is to transform into the center of mass frame, +then treat the problem as one of a single particle of mass \(\mu\) +undergoing a force \(\boldsymbol{F}_{12}\). Scattering angles can also be +expressed in this frame, then transformed into the lab frame. In +practice, one sees examples in the literature where \(d\sigma/d\Omega\) +expressed in both the “center-of-mass” and in the “laboratory” +frame.

    +
    +
    +

    5.2. Deriving Elliptical Orbits

    +

    Kepler’s laws state that a gravitational orbit should be an ellipse +with the source of the gravitational field at one focus. Deriving this +is surprisingly messy. To do this, we first use angular momentum +conservation to transform the equations of motion so that it is in +terms of \(r\) and \(\theta\) instead of \(r\) and \(t\). The overall strategy +is to

    +
      +
    1. Find equations of motion for \(r\) and \(t\) with no angle (\(\theta\)) mentioned, i.e. \(d^2r/dt^2=\cdots\). Angular momentum conservation will be used, and the equation will involve the angular momentum \(L\).

    2. +
    3. Use angular momentum conservation to find an expression for \(\dot{\theta}\) in terms of \(r\).

    4. +
    5. Use the chain rule to convert the equations of motions for \(r\), an expression involving \(r,\dot{r}\) and \(\ddot{r}\), to one involving \(r,dr/d\theta\) and \(d^2r/d\theta^2\). This is quitecomplicated because the expressions will also involve a substitution \(u=1/r\) so that one finds an expression in terms of \(u\) and \(\theta\).

    6. +
    7. Once \(u(\theta)\) is found, you need to show that this can be converted to the familiar form for an ellipse.

    8. +
    +

    The equations of motion give

    + +
    +
    +\[\begin{split} +\begin{eqnarray} +\label{eq:radialeqofmotion} \tag{2} +\frac{d}{dt}r^2&=&\frac{d}{dt}(x^2+y^2)=2x\dot{x}+2y\dot{y}=2r\dot{r},\\ +\nonumber +\dot{r}&=&\frac{x}{r}\dot{x}+\frac{y}{r}\dot{y},\\ +\nonumber +\ddot{r}&=&\frac{x}{r}\ddot{x}+\frac{y}{r}\ddot{y} ++\frac{\dot{x}^2+\dot{y}^2}{r} +-\frac{\dot{r}^2}{r}. +\end{eqnarray} +\end{split}\]
    +

    Recognizing that the numerator of the third term is the velocity squared, and that it can be written in polar coordinates,

    + +
    +
    +\[ +\begin{equation} +v^2=\dot{x}^2+\dot{y}^2=\dot{r}^2+r^2\dot{\theta}^2, +\label{_auto2} \tag{3} +\end{equation} +\]
    +

    one can write \(\ddot{r}\) as

    + +
    +
    +\[\begin{split} +\begin{eqnarray} +\label{eq:radialeqofmotion2} \tag{4} +\ddot{r}&=&\frac{F_x\cos\theta+F_y\sin\theta}{m}+\frac{\dot{r}^2+r^2\dot{\theta}^2}{r}-\frac{\dot{r}^2}{r}\\ +\nonumber +&=&\frac{F}{m}+\frac{r^2\dot{\theta}^2}{r}\\ +\nonumber +m\ddot{r}&=&F+\frac{L^2}{mr^3}. +\end{eqnarray} +\end{split}\]
    +

    This derivation used the fact that the force was radial, +\(F=F_r=F_x\cos\theta+F_y\sin\theta\), and that angular momentum is +\(L=mrv_{\theta}=mr^2\dot{\theta}\). The term \(L^2/mr^3=mv^2/r\) behaves +like an additional force. Sometimes this is referred to as a +centrifugal force, but it is not a force. Instead, it is the +consequence of considering the motion in a rotating (and therefore +accelerating) frame.

    +

    Now, we switch to the particular case of an attractive inverse square +force, \(F=-\alpha/r^2\), and show that the trajectory, \(r(\theta)\), is +an ellipse. To do this we transform derivatives w.r.t. time to +derivatives w.r.t. \(\theta\) using the chain rule combined with angular +momentum conservation, \(\dot{\theta}=L/mr^2\).

    + +
    +
    +\[\begin{split} +\begin{eqnarray} +\label{eq:rtotheta} \tag{5} +\dot{r}&=&\frac{dr}{d\theta}\dot{\theta}=\frac{dr}{d\theta}\frac{L}{mr^2},\\ +\nonumber +\ddot{r}&=&\frac{d^2r}{d\theta^2}\dot{\theta}^2 ++\frac{dr}{d\theta}\left(\frac{d}{dr}\frac{L}{mr^2}\right)\dot{r}\\ +\nonumber +&=&\frac{d^2r}{d\theta^2}\left(\frac{L}{mr^2}\right)^2 +-2\frac{dr}{d\theta}\frac{L}{mr^3}\dot{r}\\ +\nonumber +&=&\frac{d^2r}{d\theta^2}\left(\frac{L}{mr^2}\right)^2 +-\frac{2}{r}\left(\frac{dr}{d\theta}\right)^2\left(\frac{L}{mr^2}\right)^2 +\end{eqnarray} +\end{split}\]
    +

    Equating the two expressions for \(\ddot{r}\) in Eq.s (4) and (5) eliminates all the derivatives w.r.t. time, and provides a differential equation with only derivatives w.r.t. \(\theta\),

    + +
    +
    +\[ +\begin{equation} +\label{eq:rdotdot} \tag{6} +\frac{d^2r}{d\theta^2}\left(\frac{L}{mr^2}\right)^2 +-\frac{2}{r}\left(\frac{dr}{d\theta}\right)^2\left(\frac{L}{mr^2}\right)^2 +=\frac{F}{m}+\frac{L^2}{m^2r^3}, +\end{equation} +\]
    +

    that when solved yields the trajectory, i.e. \(r(\theta)\). Up to this +point the expressions work for any radial force, not just forces that +fall as \(1/r^2\).

    +

    The trick to simplifying this differential equation for the inverse +square problems is to make a substitution, \(u\equiv 1/r\), and rewrite +the differential equation for \(u(\theta)\).

    +
    +\[\begin{split} +\begin{eqnarray} +r&=&1/u,\\ +\nonumber +\frac{dr}{d\theta}&=&-\frac{1}{u^2}\frac{du}{d\theta},\\ +\nonumber +\frac{d^2r}{d\theta^2}&=&\frac{2}{u^3}\left(\frac{du}{d\theta}\right)^2-\frac{1}{u^2}\frac{d^2u}{d\theta^2}. +\end{eqnarray} +\end{split}\]
    +

    Plugging these expressions into Eq. (6) gives an +expression in terms of \(u\), \(du/d\theta\), and \(d^2u/d\theta^2\). After +some tedious algebra,

    + +
    +
    +\[ +\begin{equation} +\frac{d^2u}{d\theta^2}=-u-\frac{F m}{L^2u^2}. +\label{_auto3} \tag{7} +\end{equation} +\]
    +

    For the attractive inverse square law force, \(F=-\alpha u^2\),

    + +
    +
    +\[ +\begin{equation} +\frac{d^2u}{d\theta^2}=-u+\frac{m\alpha}{L^2}. +\label{_auto4} \tag{8} +\end{equation} +\]
    +

    The solution has two arbitrary constants, \(A\) and \(\theta_0\),

    + +
    +
    +\[\begin{split} +\begin{eqnarray} +\label{eq:Ctrajectory} \tag{9} +u&=&\frac{m\alpha}{L^2}+A\cos(\theta-\theta_0),\\ +\nonumber +r&=&\frac{1}{(m\alpha/L^2)+A\cos(\theta-\theta_0)}. +\end{eqnarray} +\end{split}\]
    +

    The radius will be at a minimum when \(\theta=\theta_0\) and at a +maximum when \(\theta=\theta_0+\pi\). The constant \(A\) is related to the +eccentricity of the orbit. When \(A=0\) the radius is a constant +\(r=L^2/(m\alpha)\), and the motion is circular. If one solved the +expression \(mv^2/r=-\alpha/r^2\) for a circular orbit, using the +substitution \(v=L/(mr)\), one would reproduce the expression +\(r=L^2/(m\alpha)\).

    +

    The form describing the elliptical trajectory in +Eq. (9) can be identified as an ellipse with one +focus being the center of the ellipse by considering the definition of +an ellipse as being the points such that the sum of the two distances +between the two foci are a constant. Making that distance \(2D\), the +distance between the two foci as \(2a\), and putting one focus at the +origin,

    +
    +\[\begin{split} +\begin{eqnarray} +2D&=&r+\sqrt{(r\cos\theta-2a)^2+r^2\sin^2\theta},\\ +\nonumber +4D^2+r^2-4Dr&=&r^2+4a^2-4ar\cos\theta,\\ +\nonumber +r&=&\frac{D^2-a^2}{D+a\cos\theta}=\frac{1}{D/(D^2-a^2)-a\cos\theta/(D^2-a^2)}. +\end{eqnarray} +\end{split}\]
    +

    By inspection, this is the same form as Eq. (9) with \(D/(D^2-a^2)=m\alpha/L^2\) and \(a/(D^2-a^2)=A\).

    +

    Let us remind ourselves about what an ellipse is before we proceed.

    +
    +
    +
    %matplotlib inline
    +
    +import numpy as np
    +from matplotlib import pyplot as plt
    +from math import pi
    +
    +u=1.     #x-position of the center
    +v=0.5    #y-position of the center
    +a=2.     #radius on the x-axis
    +b=1.5    #radius on the y-axis
    +
    +t = np.linspace(0, 2*pi, 100)
    +plt.plot( u+a*np.cos(t) , v+b*np.sin(t) )
    +plt.grid(color='lightgray',linestyle='--')
    +plt.show()
    +
    +
    +
    +
    +_images/chapter6_37_0.png +
    +
    +
    +
    +

    5.3. Effective or Centrifugal Potential

    +

    The total energy of a particle is

    +
    +\[\begin{split} +\begin{eqnarray} +E&=&U(r)+\frac{1}{2}mv_\theta^2+\frac{1}{2}m\dot{r}^2\\ +\nonumber +&=&U(r)+\frac{1}{2}mr^2\dot{\theta}^2+\frac{1}{2}m\dot{r}^2\\ +\nonumber +&=&U(r)+\frac{L^2}{2mr^2}+\frac{1}{2}m\dot{r}^2. +\end{eqnarray} +\end{split}\]
    +

    The second term then contributes to the energy like an additional +repulsive potential. The term is sometimes referred to as the +“centrifugal” potential, even though it is actually the kinetic energy +of the angular motion. Combined with \(U(r)\), it is sometimes referred +to as the “effective” potential,

    +
    +\[ +\begin{eqnarray} +U_{\rm eff}(r)&=&U(r)+\frac{L^2}{2mr^2}. +\end{eqnarray} +\]
    +

    Note that if one treats the effective potential like a real potential, one would expect to be able to generate an effective force,

    +
    +\[\begin{split} +\begin{eqnarray} +F_{\rm eff}&=&-\frac{d}{dr}U(r) -\frac{d}{dr}\frac{L^2}{2mr^2}\\ +\nonumber +&=&F(r)+\frac{L^2}{mr^3}=F(r)+m\frac{v_\perp^2}{r}, +\end{eqnarray} +\end{split}\]
    +

    which is indeed matches the form for \(m\ddot{r}\) in Eq. (4), which included the centrifugal force.

    +

    The following code plots this effective potential for a simple choice of parameters, with a standard gravitational potential \(-\alpha/r\). Here we have chosen \(L=m=\alpha=1\).

    +
    +
    +
    # Common imports
    +import numpy as np
    +from math import *
    +import matplotlib.pyplot as plt
    +
    +Deltax = 0.01
    +#set up arrays
    +xinitial = 0.3
    +xfinal = 5.0
    +alpha = 1.0   # spring constant
    +m = 1.0   # mass, you can change these
    +AngMom = 1.0  #  The angular momentum
    +n = ceil((xfinal-xinitial)/Deltax)
    +x = np.zeros(n)
    +for i in range(n):
    +    x[i] = xinitial+i*Deltax
    +V = np.zeros(n)
    +V = -alpha/x+0.5*AngMom*AngMom/(m*x*x)
    +# Plot potential
    +fig, ax = plt.subplots()
    +ax.set_xlabel('r[m]')
    +ax.set_ylabel('V[J]')
    +ax.plot(x, V)
    +fig.tight_layout()
    +plt.show()
    +
    +
    +
    +
    +_images/chapter6_45_0.png +
    +
    +
    +

    5.3.1. Gravitational force example

    +

    Using the above parameters, we can now study the evolution of the system using for example the velocity Verlet method. +This is done in the code here for an initial radius equal to the minimum of the potential well. We seen then that the radius is always the same and corresponds to a circle (the radius is always constant).

    +
    +
    +
    # Common imports
    +import numpy as np
    +import pandas as pd
    +from math import *
    +import matplotlib.pyplot as plt
    +import os
    +
    +# Where to save the figures and data files
    +PROJECT_ROOT_DIR = "Results"
    +FIGURE_ID = "Results/FigureFiles"
    +DATA_ID = "DataFiles/"
    +
    +if not os.path.exists(PROJECT_ROOT_DIR):
    +    os.mkdir(PROJECT_ROOT_DIR)
    +
    +if not os.path.exists(FIGURE_ID):
    +    os.makedirs(FIGURE_ID)
    +
    +if not os.path.exists(DATA_ID):
    +    os.makedirs(DATA_ID)
    +
    +def image_path(fig_id):
    +    return os.path.join(FIGURE_ID, fig_id)
    +
    +def data_path(dat_id):
    +    return os.path.join(DATA_ID, dat_id)
    +
    +def save_fig(fig_id):
    +    plt.savefig(image_path(fig_id) + ".png", format='png')
    +
    +
    +# Simple Gravitational Force   -alpha/r
    +    
    +DeltaT = 0.01
    +#set up arrays 
    +tfinal = 100.0
    +n = ceil(tfinal/DeltaT)
    +# set up arrays for t, v and r
    +t = np.zeros(n)
    +v = np.zeros(n)
    +r = np.zeros(n)
    +# Constants of the model, setting all variables to one for simplicity
    +alpha = 1.0
    +AngMom = 1.0  #  The angular momentum
    +m = 1.0  # scale mass to one
    +c1 = AngMom*AngMom/(m*m)
    +c2 = AngMom*AngMom/m
    +rmin = (AngMom*AngMom/m/alpha)
    +# Initial conditions
    +r0 = rmin
    +v0 = 0.0
    +r[0] = r0
    +v[0] = v0
    +# Start integrating using the Velocity-Verlet  method
    +for i in range(n-1):
    +    # Set up acceleration
    +    a = -alpha/(r[i]**2)+c1/(r[i]**3)
    +    # update velocity, time and position using the Velocity-Verlet method
    +    r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a
    +    anew = -alpha/(r[i+1]**2)+c1/(r[i+1]**3)
    +    v[i+1] = v[i] + 0.5*DeltaT*(a+anew)
    +    t[i+1] = t[i] + DeltaT
    +    # Plot position as function of time
    +fig, ax = plt.subplots(2,1)
    +ax[0].set_xlabel('time')
    +ax[0].set_ylabel('radius')
    +ax[0].plot(t,r)
    +ax[1].set_xlabel('time')
    +ax[1].set_ylabel('Velocity')
    +ax[1].plot(t,v)
    +save_fig("RadialGVV")
    +plt.show()
    +
    +
    +
    +
    +_images/chapter6_47_0.png +
    +
    +

    Changing the value of the initial position to a value where the energy is positive, leads to an increasing radius with time, a so-called unbound orbit. Choosing on the other hand an initial radius that corresponds to a negative energy and different from the minimum value leads to a radius that oscillates back and forth between two values.

    +
    +
    +

    5.3.2. Harmonic Oscillator in two dimensions

    +

    Consider a particle of mass \(m\) in a 2-dimensional harmonic oscillator with potential

    +
    +\[ +U=\frac{1}{2}kr^2=\frac{1}{2}k(x^2+y^2). +\]
    +

    If the orbit has angular momentum \(L\), we can find the radius and angular velocity of the circular orbit as well as the b) the angular frequency of small radial perturbations.

    +

    We consider the effective potential. The radius of a circular orbit is at the minimum of the potential (where the effective force is zero). +The potential is plotted here with the parameters \(k=m=0.1\) and \(L=1.0\).

    +
    +
    +
    # Common imports
    +import numpy as np
    +from math import *
    +import matplotlib.pyplot as plt
    +
    +Deltax = 0.01
    +#set up arrays
    +xinitial = 1.0
    +xfinal = 5.0
    +k = 0.1   # spring constant
    +m = 0.1   # mass, you can change these
    +AngMom = 1.0  #  The angular momentum
    +n = ceil((xfinal-xinitial)/Deltax)
    +x = np.zeros(n)
    +for i in range(n):
    +    x[i] = xinitial+i*Deltax
    +V = np.zeros(n)
    +V = 0.5*k*x*x+0.5*AngMom*AngMom/(m*x*x)
    +# Plot potential
    +fig, ax = plt.subplots()
    +ax.set_xlabel('r[m]')
    +ax.set_ylabel('V[J]')
    +ax.plot(x, V)
    +fig.tight_layout()
    +plt.show()
    +
    +
    +
    +
    +_images/chapter6_51_0.png +
    +
    +
    +\[ +\begin{eqnarray*} +U_{\rm eff}&=&\frac{1}{2}kr^2+\frac{L^2}{2mr^2} +\end{eqnarray*} +\]
    +

    The effective potential looks like that of a harmonic oscillator for +large \(r\), but for small \(r\), the centrifugal potential repels the +particle from the origin. The combination of the two potentials has a +minimum for at some radius \(r_{\rm min}\).

    +
    +\[\begin{split} +\begin{eqnarray*} +0&=&kr_{\rm min}-\frac{L^2}{mr_{\rm min}^3},\\ +r_{\rm min}&=&\left(\frac{L^2}{mk}\right)^{1/4},\\ +\dot{\theta}&=&\frac{L}{mr_{\rm min}^2}=\sqrt{k/m}. +\end{eqnarray*} +\end{split}\]
    +

    For particles at \(r_{\rm min}\) with \(\dot{r}=0\), the particle does not +accelerate and \(r\) stays constant, i.e. a circular orbit. The radius +of the circular orbit can be adjusted by changing the angular momentum +\(L\).

    +

    For the above parameters this minimum is at \(r_{\rm min}=1\).

    +

    Now consider small vibrations about \(r_{\rm min}\). The effective spring constant is the curvature of the effective potential.

    +
    +\[\begin{split} +\begin{eqnarray*} +k_{\rm eff}&=&\left.\frac{d^2}{dr^2}U_{\rm eff}(r)\right|_{r=r_{\rm min}}=k+\frac{3L^2}{mr_{\rm min}^4}\\ +&=&4k,\\ +\omega&=&\sqrt{k_{\rm eff}/m}=2\sqrt{k/m}=2\dot{\theta}. +\end{eqnarray*} +\end{split}\]
    +

    Here, the second step used the result of the last step from part +(a). Because the radius oscillates with twice the angular frequency, +the orbit has two places where \(r\) reaches a minimum in one +cycle. This differs from the inverse-square force where there is one +minimum in an orbit. One can show that the orbit for the harmonic +oscillator is also elliptical, but in this case the center of the +potential is at the center of the ellipse, not at one of the foci.

    +

    The solution is also simple to write down exactly in Cartesian coordinates. The \(x\) and \(y\) equations of motion separate,

    +
    +\[\begin{split} +\begin{eqnarray*} +\ddot{x}&=&-kx,\\ +\ddot{y}&=&-ky. +\end{eqnarray*} +\end{split}\]
    +

    So the general solution can be expressed as

    +
    +\[\begin{split} +\begin{eqnarray*} +x&=&A\cos\omega_0 t+B\sin\omega_0 t,\\ +y&=&C\cos\omega_0 t+D\sin\omega_0 t. +\end{eqnarray*} +\end{split}\]
    +

    The code here finds the solution for \(x\) and \(y\) using the code we developed in homework 4.

    +
    +
    +
    DeltaT = 0.01
    +#set up arrays 
    +tfinal = 10.0
    +n = ceil(tfinal/DeltaT)
    +# set up arrays
    +t = np.zeros(n)
    +v = np.zeros((n,2))
    +r = np.zeros((n,2))
    +radius = np.zeros(n)
    +# Constants of the model
    +k = 0.1   # spring constant
    +m = 0.1   # mass, you can change these
    +omega02 = sqrt(k/m)  # Frequency
    +AngMom = 1.0  #  The angular momentum
    +rmin = (AngMom*AngMom/k/m)**0.25
    +# Initial conditions as compact 2-dimensional arrays
    +#x0 =rmin*0.5; y0 = sqrt(rmin*rmin-x0*x0)
    +x0 = 1.0; y0= 1.0
    +r0 = np.array([x0,y0]) 
    +v0 = np.array([0.0,0.0])
    +r[0] = r0
    +v[0] = v0
    +# Start integrating using the Velocity-Verlet  method
    +for i in range(n-1):
    +    # Set up the acceleration
    +    a =  -r[i]*omega02  
    +    # update velocity, time and position using the Velocity-Verlet method
    +    r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a
    +    anew = -r[i+1]*omega02  
    +    v[i+1] = v[i] + 0.5*DeltaT*(a+anew)
    +    t[i+1] = t[i] + DeltaT
    +# Plot position as function of time
    +radius = np.sqrt(r[:,0]**2+r[:,1]**2)
    +fig, ax = plt.subplots(3,1)
    +ax[0].set_xlabel('time')
    +ax[0].set_ylabel('radius squared')
    +ax[0].plot(t,r[:,0]**2+r[:,1]**2)
    +ax[1].set_xlabel('time')
    +ax[1].set_ylabel('x position')
    +ax[1].plot(t,r[:,0])
    +ax[2].set_xlabel('time')
    +ax[2].set_ylabel('y position')
    +ax[2].plot(t,r[:,1])
    +
    +fig.tight_layout()
    +save_fig("2DimHOVV")
    +plt.show()
    +
    +
    +
    +
    +_images/chapter6_62_0.png +
    +
    +

    With some work using double angle formulas, one can calculate

    +
    +\[\begin{split} +\begin{eqnarray*} +r^2&=&x^2+y^2\\ +\nonumber +&=&(A^2+C^2)\cos^2(\omega_0t)+(B^2+D^2)\sin^2\omega_0t+(AB+CD)\cos(\omega_0t)\sin(\omega_0t)\\ +\nonumber +&=&\alpha+\beta\cos 2\omega_0 t+\gamma\sin 2\omega_0 t,\\ +\alpha&=&\frac{A^2+B^2+C^2+D^2}{2},~~\beta=\frac{A^2-B^2+C^2-D^2}{2},~~\gamma=AB+CD,\\ +r^2&=&\alpha+(\beta^2+\gamma^2)^{1/2}\cos(2\omega_0 t-\delta),~~~\delta=\arctan(\gamma/\beta), +\end{eqnarray*} +\end{split}\]
    +

    and see that radius oscillates with frequency \(2\omega_0\). The +factor of two comes because the oscillation \(x=A\cos\omega_0t\) has two +maxima for \(x^2\), one at \(t=0\) and one a half period later.

    +

    The following code shows first how we can solve this problem using the radial degrees of freedom only.

    +
    +
    +
    DeltaT = 0.01
    +#set up arrays 
    +tfinal = 10.0
    +n = ceil(tfinal/DeltaT)
    +# set up arrays for t, v and r
    +t = np.zeros(n)
    +v = np.zeros(n)
    +r = np.zeros(n)
    +E = np.zeros(n)
    +# Constants of the model
    +AngMom = 1.0  #  The angular momentum
    +m = 0.1
    +k = 0.1
    +omega02 = k/m
    +c1 = AngMom*AngMom/(m*m)
    +c2 = AngMom*AngMom/m
    +rmin = (AngMom*AngMom/k/m)**0.25
    +# Initial conditions
    +r0 = rmin
    +v0 = 0.0
    +r[0] = r0
    +v[0] = v0
    +E[0] = 0.5*m*v0*v0+0.5*k*r0*r0+0.5*c2/(r0*r0)
    +# Start integrating using the Velocity-Verlet  method
    +for i in range(n-1):
    +    # Set up acceleration
    +    a = -r[i]*omega02+c1/(r[i]**3)    
    +    # update velocity, time and position using the Velocity-Verlet method
    +    r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a
    +    anew = -r[i+1]*omega02+c1/(r[i+1]**3)
    +    v[i+1] = v[i] + 0.5*DeltaT*(a+anew)
    +    t[i+1] = t[i] + DeltaT
    +    E[i+1] = 0.5*m*v[i+1]*v[i+1]+0.5*k*r[i+1]*r[i+1]+0.5*c2/(r[i+1]*r[i+1])
    +    # Plot position as function of time
    +fig, ax = plt.subplots(2,1)
    +ax[0].set_xlabel('time')
    +ax[0].set_ylabel('radius')
    +ax[0].plot(t,r)
    +ax[1].set_xlabel('time')
    +ax[1].set_ylabel('Energy')
    +ax[1].plot(t,E)
    +save_fig("RadialHOVV")
    +plt.show()
    +
    +
    +
    +
    +_images/chapter6_66_0.png +
    +
    +
    +
    +
    +

    5.4. Stability of Orbits

    +

    The effective force can be extracted from the effective potential, \(U_{\rm eff}\). Beginning from the equations of motion, Eq. (2), for \(r\),

    +
    +\[\begin{split} +\begin{eqnarray} +m\ddot{r}&=&F+\frac{L^2}{mr^3}\\ +\nonumber +&=&F_{\rm eff}\\ +\nonumber +&=&-\partial_rU_{\rm eff},\\ +\nonumber +F_{\rm eff}&=&-\partial_r\left[U(r)+(L^2/2mr^2)\right]. +\end{eqnarray} +\end{split}\]
    +

    For a circular orbit, the radius must be fixed as a function of time, +so one must be at a maximum or a minimum of the effective +potential. However, if one is at a maximum of the effective potential +the radius will be unstable. For the attractive Coulomb force the +effective potential will be dominated by the \(-\alpha/r\) term for +large \(r\) because the centrifugal part falls off more quickly, \(\sim +1/r^2\). At low \(r\) the centrifugal piece wins and the effective +potential is repulsive. Thus, the potential must have a minimum +somewhere with negative potential. The circular orbits are then stable +to perturbation.

    +

    The effective potential is sketched for two cases, a \(1/r\) attractive +potential and a \(1/r^3\) attractive potential. The \(1/r\) case has a +stable minimum, whereas the circular orbit in the \(1/r^3\) case is +unstable.

    +

    If one considers a potential that falls as \(1/r^3\), the situation is +reversed and the point where \(\partial_rU\) disappears will be a local +maximum rather than a local minimum. Fig to come here with code

    +

    The repulsive centrifugal piece dominates at large \(r\) and the attractive +Coulomb piece wins out at small \(r\). The circular orbit is then at a +maximum of the effective potential and the orbits are unstable. It is +the clear that for potentials that fall as \(r^n\), that one must have +\(n>-2\) for the orbits to be stable.

    +

    Consider a potential \(U(r)=\beta r\). For a particle of mass \(m\) with +angular momentum \(L\), find the angular frequency of a circular +orbit. Then find the angular frequency for small radial perturbations.

    +

    For the circular orbit you search for the position \(r_{\rm min}\) where the effective potential is minimized,

    +
    +\[\begin{split} +\begin{eqnarray*} +\partial_r\left\{\beta r+\frac{L^2}{2mr^2}\right\}&=&0,\\ +\beta&=&\frac{L^2}{mr_{\rm min}^3},\\ +r_{\rm min}&=&\left(\frac{L^2}{\beta m}\right)^{1/3},\\ +\dot{\theta}&=&\frac{L}{mr_{\rm min}^2}=\frac{\beta^{2/3}}{(mL)^{1/3}} +\end{eqnarray*} +\end{split}\]
    +

    Now, we can find the angular frequency of small perturbations about the circular orbit. To do this we find the effective spring constant for the effective potential,

    +
    +\[\begin{split} +\begin{eqnarray*} +k_{\rm eff}&=&\partial_r^2 \left.U_{\rm eff}\right|_{r_{\rm min}}\\ +&=&\frac{3L^2}{mr_{\rm min}^4},\\ +\omega&=&\sqrt{\frac{k_{\rm eff}}{m}}\\ +&=&\frac{\beta^{2/3}}{(mL)^{1/3}}\sqrt{3}. +\end{eqnarray*} +\end{split}\]
    +

    If the two frequencies, \(\dot{\theta}\) and \(\omega\), differ by an +integer factor, the orbit’s trajectory will repeat itself each time +around. This is the case for the inverse-square force, +\(\omega=\dot{\theta}\), and for the harmonic oscillator, +\(\omega=2\dot{\theta}\). In this case, \(\omega=\sqrt{3}\dot{\theta}\), +and the angles at which the maxima and minima occur change with each +orbit.

    +
    +

    5.4.1. Code example with gravitional force

    +

    The code example here is meant to illustrate how we can make a plot of the final orbit. We solve the equations in polar coordinates (the example here uses the minimum of the potential as initial value) and then we transform back to cartesian coordinates and plot \(x\) versus \(y\). We see that we get a perfect circle when we place ourselves at the minimum of the potential energy, as expected.

    +
    +
    +
    # Simple Gravitational Force   -alpha/r
    +    
    +DeltaT = 0.01
    +#set up arrays 
    +tfinal = 8.0
    +n = ceil(tfinal/DeltaT)
    +# set up arrays for t, v and r
    +t = np.zeros(n)
    +v = np.zeros(n)
    +r = np.zeros(n)
    +phi = np.zeros(n)
    +x = np.zeros(n)
    +y = np.zeros(n)
    +# Constants of the model, setting all variables to one for simplicity
    +alpha = 1.0
    +AngMom = 1.0  #  The angular momentum
    +m = 1.0  # scale mass to one
    +c1 = AngMom*AngMom/(m*m)
    +c2 = AngMom*AngMom/m
    +rmin = (AngMom*AngMom/m/alpha)
    +# Initial conditions, place yourself at the potential min
    +r0 = rmin
    +v0 = 0.0  # starts at rest
    +r[0] = r0
    +v[0] = v0
    +phi[0] = 0.0
    +# Start integrating using the Velocity-Verlet  method
    +for i in range(n-1):
    +    # Set up acceleration
    +    a = -alpha/(r[i]**2)+c1/(r[i]**3)
    +    # update velocity, time and position using the Velocity-Verlet method
    +    r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a
    +    anew = -alpha/(r[i+1]**2)+c1/(r[i+1]**3)
    +    v[i+1] = v[i] + 0.5*DeltaT*(a+anew)
    +    t[i+1] = t[i] + DeltaT
    +    phi[i+1] = t[i+1]*c2/(r0**2)
    +# Find cartesian coordinates for easy plot    
    +x = r*np.cos(phi)
    +y = r*np.sin(phi)
    +fig, ax = plt.subplots(3,1)
    +ax[0].set_xlabel('time')
    +ax[0].set_ylabel('radius')
    +ax[0].plot(t,r)
    +ax[1].set_xlabel('time')
    +ax[1].set_ylabel('Angle $\cos{\phi}$')
    +ax[1].plot(t,np.cos(phi))
    +ax[2].set_ylabel('y')
    +ax[2].set_xlabel('x')
    +ax[2].plot(x,y)
    +
    +save_fig("Phasespace")
    +plt.show()
    +
    +
    +
    +
    +_images/chapter6_74_0.png +
    +
    +

    Try to change the initial value for \(r\) and see what kind of orbits you get. +In order to test different energies, it can be useful to look at the plot of the effective potential discussed above.

    +

    However, for orbits different from a circle the above code would need modifications in order to allow us to display say an ellipse. For the latter, it is much easier to run our code in cartesian coordinates, as done here. In this code we test also energy conservation and see that it is conserved to numerical precision. The code here is a simple extension of the code we developed for homework 4.

    +
    +
    +
    # Common imports
    +import numpy as np
    +import pandas as pd
    +from math import *
    +import matplotlib.pyplot as plt
    +
    +DeltaT = 0.01
    +#set up arrays 
    +tfinal = 10.0
    +n = ceil(tfinal/DeltaT)
    +# set up arrays
    +t = np.zeros(n)
    +v = np.zeros((n,2))
    +r = np.zeros((n,2))
    +E = np.zeros(n)
    +# Constants of the model
    +m = 1.0   # mass, you can change these
    +alpha = 1.0
    +# Initial conditions as compact 2-dimensional arrays
    +x0 = 0.5; y0= 0.
    +r0 = np.array([x0,y0]) 
    +v0 = np.array([0.0,1.0])
    +r[0] = r0
    +v[0] = v0
    +rabs = sqrt(sum(r[0]*r[0]))
    +E[0] = 0.5*m*(v[0,0]**2+v[0,1]**2)-alpha/rabs
    +# Start integrating using the Velocity-Verlet  method
    +for i in range(n-1):
    +    # Set up the acceleration
    +    rabs = sqrt(sum(r[i]*r[i]))
    +    a =  -alpha*r[i]/(rabs**3)
    +    # update velocity, time and position using the Velocity-Verlet method
    +    r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a
    +    rabs = sqrt(sum(r[i+1]*r[i+1]))
    +    anew = -alpha*r[i+1]/(rabs**3)
    +    v[i+1] = v[i] + 0.5*DeltaT*(a+anew)
    +    E[i+1] = 0.5*m*(v[i+1,0]**2+v[i+1,1]**2)-alpha/rabs
    +    t[i+1] = t[i] + DeltaT
    +# Plot position as function of time
    +fig, ax = plt.subplots(3,1)
    +ax[0].set_ylabel('y')
    +ax[0].set_xlabel('x')
    +ax[0].plot(r[:,0],r[:,1])
    +ax[1].set_xlabel('time')
    +ax[1].set_ylabel('y position')
    +ax[1].plot(t,r[:,0])
    +ax[2].set_xlabel('time')
    +ax[2].set_ylabel('y position')
    +ax[2].plot(t,r[:,1])
    +
    +fig.tight_layout()
    +save_fig("2DimGravity")
    +plt.show()
    +print(E)
    +
    +
    +
    +
    +_images/chapter6_76_0.png +
    [-1.5        -1.49999996 -1.49999984 -1.49999964 -1.49999935 -1.49999898
    + -1.49999853 -1.49999798 -1.49999734 -1.49999659 -1.49999574 -1.49999478
    + -1.49999369 -1.49999247 -1.49999112 -1.49998961 -1.49998794 -1.49998609
    + -1.49998404 -1.49998178 -1.49997929 -1.49997654 -1.49997351 -1.49997017
    + -1.49996649 -1.49996243 -1.49995796 -1.49995304 -1.49994762 -1.49994165
    + -1.49993508 -1.49992786 -1.49991994 -1.49991127 -1.4999018  -1.49989151
    + -1.49988041 -1.49986852 -1.49985595 -1.49984292 -1.49982978 -1.49981712
    + -1.49980588 -1.49979754 -1.49979431 -1.49979958 -1.4998184  -1.4998583
    + -1.49993028 -1.50005034 -1.50024115 -1.500534   -1.50097003 -1.50159939
    + -1.50247522 -1.50363822 -1.5050881  -1.50674417 -1.50841251 -1.50979454
    + -1.51056842 -1.5105255  -1.50967788 -1.5082518  -1.50657253 -1.50493047
    + -1.50350752 -1.50237442 -1.50152565 -1.50091821 -1.50049876 -1.50021789
    + -1.50003547 -1.49992116 -1.49985304 -1.4998157  -1.49979853 -1.49979431
    + -1.49979819 -1.49980692 -1.49981835 -1.49983109 -1.49984425 -1.49985725
    + -1.49986975 -1.49988156 -1.49989259 -1.49990279 -1.49991218 -1.49992077
    + -1.49992862 -1.49993577 -1.49994227 -1.49994819 -1.49995356 -1.49995843
    + -1.49996286 -1.49996688 -1.49997052 -1.49997383 -1.49997683 -1.49997955
    + -1.49998202 -1.49998426 -1.49998628 -1.49998812 -1.49998977 -1.49999126
    + -1.4999926  -1.49999381 -1.49999488 -1.49999583 -1.49999667 -1.49999741
    + -1.49999804 -1.49999858 -1.49999903 -1.49999939 -1.49999966 -1.49999986
    + -1.49999997 -1.5        -1.49999995 -1.49999982 -1.49999961 -1.49999932
    + -1.49999894 -1.49999848 -1.49999792 -1.49999727 -1.49999651 -1.49999565
    + -1.49999467 -1.49999357 -1.49999234 -1.49999097 -1.49998945 -1.49998776
    + -1.49998589 -1.49998382 -1.49998154 -1.49997902 -1.49997625 -1.49997319
    + -1.49996981 -1.4999661  -1.499962   -1.49995749 -1.49995252 -1.49994704
    + -1.49994101 -1.49993438 -1.49992709 -1.4999191  -1.49991035 -1.4999008
    + -1.49989043 -1.49987924 -1.49986728 -1.49985466 -1.49984159 -1.49982847
    + -1.4998159  -1.49980488 -1.49979693 -1.49979438 -1.49980076 -1.49982132
    + -1.49986388 -1.49993989 -1.50006592 -1.50026544 -1.50057068 -1.5010238
    + -1.50167564 -1.50257898 -1.50377191 -1.50524791 -1.50691602 -1.50857033
    + -1.50990493 -1.51060284 -1.51047421 -1.50955526 -1.50808857 -1.50640137
    + -1.50477517 -1.50337982 -1.50227653 -1.50145437 -1.5008683  -1.50046492
    + -1.50019563 -1.50002129 -1.49991251 -1.49984809 -1.4998132  -1.49979762
    + -1.4997944  -1.49979889 -1.49980797 -1.49981959 -1.49983241 -1.49984557
    + -1.49985853 -1.49987097 -1.49988271 -1.49989365 -1.49990377 -1.49991308
    + -1.49992159 -1.49992937 -1.49993645 -1.4999429  -1.49994875 -1.49995407
    + -1.4999589  -1.49996328 -1.49996726 -1.49997087 -1.49997414 -1.49997712
    + -1.49997981 -1.49998226 -1.49998447 -1.49998648 -1.49998829 -1.49998993
    + -1.4999914  -1.49999273 -1.49999392 -1.49999498 -1.49999592 -1.49999675
    + -1.49999747 -1.4999981  -1.49999863 -1.49999907 -1.49999942 -1.49999969
    + -1.49999987 -1.49999997 -1.5        -1.49999994 -1.49999981 -1.49999959
    + -1.49999929 -1.4999989  -1.49999842 -1.49999786 -1.49999719 -1.49999643
    + -1.49999556 -1.49999457 -1.49999346 -1.49999221 -1.49999083 -1.49998929
    + -1.49998758 -1.49998569 -1.4999836  -1.4999813  -1.49997876 -1.49997595
    + -1.49997286 -1.49996946 -1.4999657  -1.49996157 -1.49995701 -1.49995199
    + -1.49994646 -1.49994037 -1.49993368 -1.49992632 -1.49991825 -1.49990942
    + -1.49989979 -1.49988934 -1.49987807 -1.49986604 -1.49985336 -1.49984027
    + -1.49982716 -1.4998147  -1.49980391 -1.49979638 -1.49979455 -1.49980208
    + -1.49982445 -1.49986979 -1.49994999 -1.50008223 -1.50029079 -1.50060886
    + -1.50107959 -1.50175446 -1.50268571 -1.50390854 -1.50540978 -1.50708783
    + -1.50872493 -1.51000875 -1.51062866 -1.51041471 -1.509427   -1.50792313
    + -1.50623094 -1.50462231 -1.50325515 -1.50218152 -1.5013855  -1.50082025
    + -1.50043244 -1.50017432 -1.50000777 -1.4999043  -1.49984344 -1.49981089
    + -1.49979682 -1.49979457 -1.49979964 -1.49980906 -1.49982085 -1.49983373
    + -1.49984689 -1.49985981 -1.49987219 -1.49988385 -1.49989471 -1.49990475
    + -1.49991397 -1.49992241 -1.49993011 -1.49993713 -1.49994351 -1.49994931
    + -1.49995458 -1.49995936 -1.4999637  -1.49996764 -1.49997121 -1.49997446
    + -1.4999774  -1.49998007 -1.49998249 -1.49998468 -1.49998667 -1.49998846
    + -1.49999008 -1.49999154 -1.49999286 -1.49999403 -1.49999508 -1.49999601
    + -1.49999683 -1.49999754 -1.49999816 -1.49999868 -1.49999911 -1.49999945
    + -1.49999971 -1.49999988 -1.49999998 -1.5        -1.49999993 -1.49999979
    + -1.49999956 -1.49999925 -1.49999886 -1.49999837 -1.4999978  -1.49999712
    + -1.49999635 -1.49999546 -1.49999446 -1.49999334 -1.49999208 -1.49999068
    + -1.49998912 -1.4999874  -1.49998549 -1.49998338 -1.49998105 -1.49997849
    + -1.49997566 -1.49997253 -1.49996909 -1.4999653  -1.49996113 -1.49995652
    + -1.49995145 -1.49994587 -1.49993973 -1.49993297 -1.49992554 -1.4999174
    + -1.49990849 -1.49989878 -1.49988824 -1.49987689 -1.49986478 -1.49985205
    + -1.49983894 -1.49982587 -1.49981352 -1.49980297 -1.49979589 -1.49979481
    + -1.49980355 -1.49982782 -1.49987606 -1.49996062 -1.50009932 -1.50031724
    + -1.50064858 -1.50113745 -1.50183589 -1.50279545 -1.50404807 -1.50557355
    + -1.50725931 -1.50887594 -1.51010569 -1.51064581 -1.51034718 -1.50929344
    + -1.50775585 -1.50606146 -1.504472   -1.50313352 -1.50208936 -1.50131897
    + -1.50077398 -1.50040126 -1.50015393 -1.49999488 -1.49989651 -1.49983907
    + -1.49980877 -1.49979615 -1.49979481 -1.49980043 -1.49981016 -1.49982211
    + -1.49983506 -1.49984821 -1.49986109 -1.4998734  -1.49988498 -1.49989576
    + -1.49990571 -1.49991486 -1.49992322 -1.49993085 -1.4999378  -1.49994412
    + -1.49994987 -1.49995508 -1.49995982 -1.49996411 -1.49996802 -1.49997156
    + -1.49997477 -1.49997768 -1.49998032 -1.49998272 -1.49998489 -1.49998686
    + -1.49998863 -1.49999024 -1.49999168 -1.49999298 -1.49999414 -1.49999518
    + -1.4999961  -1.4999969  -1.49999761 -1.49999821 -1.49999872 -1.49999914
    + -1.49999948 -1.49999973 -1.4999999  -1.49999999 -1.49999999 -1.49999992
    + -1.49999977 -1.49999953 -1.49999922 -1.49999881 -1.49999832 -1.49999773
    + -1.49999705 -1.49999626 -1.49999537 -1.49999435 -1.49999322 -1.49999195
    + -1.49999053 -1.49998896 -1.49998722 -1.49998529 -1.49998316 -1.49998081
    + -1.49997821 -1.49997535 -1.4999722  -1.49996873 -1.4999649  -1.49996068
    + -1.49995603 -1.49995092 -1.49994528 -1.49993907 -1.49993225 -1.49992475
    + -1.49991654 -1.49990755 -1.49989775 -1.49988713 -1.4998757  -1.49986353
    + -1.49985074 -1.49983761 -1.49982457 -1.49981235 -1.49980207 -1.49979546
    + -1.49979517 -1.49980518 -1.49983142 -1.49988269 -1.49997179 -1.5001172
    + -1.50034484 -1.50068989 -1.50119744 -1.50191999 -1.5029082  -1.50419046
    + -1.50573905 -1.50743018 -1.50902301 -1.5101955  -1.51065423 -1.51027181
    + -1.50915493 -1.50758703 -1.50589314 -1.50432432 -1.50301493 -1.502
    + -1.50125473 -1.50072947 -1.50037135 -1.50013443 -1.4999826  -1.49988914
    + -1.49983497 -1.49980682 -1.49979559 -1.49979512 -1.49980126 -1.49981129
    + -1.49982339 -1.49983638 -1.49984953 -1.49986236 -1.4998746  -1.49988611
    + -1.4998968  -1.49990667 -1.49991573 -1.49992402 -1.49993158 -1.49993847
    + -1.49994473 -1.49995041 -1.49995558 -1.49996027 -1.49996453 -1.49996839
    + -1.49997189 -1.49997507 -1.49997796 -1.49998058 -1.49998295 -1.4999851
    + -1.49998704 -1.4999888  -1.49999039 -1.49999182 -1.4999931  -1.49999425
    + -1.49999528 -1.49999618 -1.49999698 -1.49999767 -1.49999827 -1.49999877
    + -1.49999918 -1.49999951 -1.49999975 -1.49999991 -1.49999999 -1.49999999
    + -1.49999991 -1.49999975 -1.49999951 -1.49999918 -1.49999877 -1.49999826
    + -1.49999767 -1.49999697 -1.49999618 -1.49999527 -1.49999424 -1.49999309
    + -1.49999181 -1.49999038 -1.49998879 -1.49998703 -1.49998508 -1.49998293
    + -1.49998056 -1.49997794 -1.49997505 -1.49997187 -1.49996836 -1.49996449
    + -1.49996023 -1.49995554 -1.49995037 -1.49994468 -1.49993841 -1.49993153
    + -1.49992396 -1.49991567 -1.4999066  -1.49989672 -1.49988602 -1.49987451
    + -1.49986226 -1.49984943 -1.49983628 -1.49982329 -1.4998112  -1.4998012
    + -1.49979509 -1.49979563 -1.49980697 -1.49983528 -1.49988969 -1.49998353
    + -1.50013591 -1.50037362 -1.50073284 -1.50125961 -1.5020068  -1.50302398
    + -1.50433563 -1.5059061  -1.50760012 -1.50916579 -1.5102779  -1.51065389
    + -1.51018882 -1.5090118  -1.50741701 -1.5057262  -1.50417936 -1.50289938
    + -1.5019134  -1.50119273 -1.50068664 -1.50034266 -1.50011579 -1.49997091
    + -1.49988216 -1.49983114 -1.49980505 -1.49979514 -1.49979549 -1.49980214
    + -1.49981244 -1.49982467 -1.49983771 -1.49985084 -1.49986362 -1.4998758
    + -1.49988722 -1.49989783 -1.49990762 -1.4999166  -1.49992482 -1.49993231
    + -1.49993912 -1.49994532 -1.49995096 -1.49995607 -1.49996072 -1.49996493
    + -1.49996876 -1.49997223 -1.49997538 -1.49997824 -1.49998083 -1.49998318
    + -1.4999853  -1.49998723 -1.49998897 -1.49999054 -1.49999196 -1.49999323
    + -1.49999436 -1.49999537 -1.49999627 -1.49999705 -1.49999774 -1.49999832
    + -1.49999881 -1.49999922 -1.49999954 -1.49999977 -1.49999992 -1.49999999
    + -1.49999999 -1.4999999  -1.49999973 -1.49999948 -1.49999914 -1.49999872
    + -1.49999821 -1.4999976  -1.4999969  -1.49999609 -1.49999517 -1.49999413
    + -1.49999297 -1.49999167 -1.49999023 -1.49998862 -1.49998684 -1.49998488
    + -1.4999827  -1.4999803  -1.49997766 -1.49997474 -1.49997153 -1.49996799
    + -1.49996408 -1.49995978 -1.49995504 -1.49994982 -1.49994408 -1.49993775
    + -1.49993079 -1.49992316 -1.49991479 -1.49990564 -1.49989568 -1.49988489
    + -1.49987331 -1.49986099 -1.49984811 -1.49983496 -1.49982202 -1.49981008
    + -1.49980037 -1.49979479 -1.4997962  -1.49980893 -1.4998394  -1.4998971
    + -1.49999586 -1.50015547 -1.50040363 -1.5007775  -1.50132402 -1.50209638
    + -1.50314281 -1.50448352 -1.50607451 -1.50776883 -1.50930394 -1.51035268
    + -1.5106448  -1.51009845 -1.50886441 -1.50724608 -1.50556083 -1.50403719
    + -1.50278686 -1.50182951 -1.50113291 -1.50064545 -1.50031516 -1.50009797
    + -1.49995978 -1.49987556 -1.49982755 -1.49980343 -1.49979479 -1.49979593
    + -1.49980304 -1.49981361 -1.49982597 -1.49983904 -1.49985215 -1.49986488
    + -1.49987698 -1.49988833 -1.49989886 -1.49990856 -1.49991746 -1.4999256
    + -1.49993302 -1.49993978 -1.49994592 -1.4999515  -1.49995656 -1.49996116
    + -1.49996533 -1.49996912 -1.49997256 -1.49997568 -1.49997851 -1.49998107
    + -1.4999834  -1.49998551 -1.49998741 -1.49998914 -1.49999069 -1.49999209
    + -1.49999335 -1.49999447 -1.49999547 -1.49999635 -1.49999713 -1.4999978
    + -1.49999838 -1.49999886 -1.49999925 -1.49999956 -1.49999979 -1.49999993
    + -1.5        -1.49999998 -1.49999988 -1.49999971 -1.49999945 -1.4999991
    + -1.49999867 -1.49999815 -1.49999754 -1.49999682 -1.499996   -1.49999507
    + -1.49999402 -1.49999285 -1.49999153 -1.49999007 -1.49998845 -1.49998665
    + -1.49998467 -1.49998247 -1.49998005 -1.49997738 -1.49997443 -1.49997119
    + -1.49996761 -1.49996367 -1.49995932 -1.49995454 -1.49994927 -1.49994346
    + -1.49993708 -1.49993006 -1.49992235 -1.4999139  -1.49990467 -1.49989463
    + -1.49988376 -1.4998721  -1.49985972 -1.49984679 -1.49983363 -1.49982075
    + -1.49980897 -1.49979958 -1.49979455 -1.49979688 -1.49981106 -1.49984379
    + -1.49990491 -1.50000879 -1.50017593 -1.5004349  -1.50082389 -1.50139073
    + -1.50218876 -1.50326468 -1.50463403 -1.50624407 -1.50793598 -1.5094371
    + -1.5104196  -1.51062698 -1.51000097 -1.50871311 -1.50707457 -1.50539721
    + -1.50389788 -1.50267736 -1.50174828 -1.50107521 -1.50060585 -1.50028879
    + -1.50008095 -1.49994919 -1.49986932 -1.4998242  -1.49980197 -1.49979453
    + -1.49979642 -1.49980398 -1.49981479 -1.49982726 -1.49984037 -1.49985346
    + -1.49986613 -1.49987816 -1.49988943 -1.49989987 -1.49990949 -1.49991832
    + -1.49992638 -1.49993373 -1.49994042 -1.4999465  -1.49995203 -1.49995705
    + -1.4999616  -1.49996573 -1.49996948 -1.49997289 -1.49997598 -1.49997878
    + -1.49998132 -1.49998362 -1.49998571 -1.4999876  -1.4999893  -1.49999084
    + -1.49999222 -1.49999347 -1.49999458 -1.49999556 -1.49999644 -1.4999972
    + -1.49999786 -1.49999843 -1.4999989  -1.49999929 -1.49999959 -1.49999981
    + -1.49999994 -1.5        -1.49999997 -1.49999987 -1.49999968 -1.49999942
    + -1.49999906 -1.49999862 -1.49999809 -1.49999747 -1.49999674 -1.49999591
    + -1.49999497 -1.49999391 -1.49999272 -1.49999139 -1.49998992 -1.49998828
    + -1.49998646 -1.49998446 -1.49998224 -1.49997979 -1.49997709 -1.49997412
    + -1.49997084 -1.49996723 -1.49996325 -1.49995886 -1.49995403 -1.49994871
    + -1.49994285 -1.4999364  -1.49992931 -1.49992153]
    +
    +
    +
    +
    +
    +
    +
    +

    5.5. Scattering and Cross Sections

    +

    Scattering experiments don’t measure entire trajectories. For elastic +collisions, they measure the distribution of final scattering angles +at best. Most experiments use targets thin enough so that the number +of scatterings is typically zero or one. The cross section, \(\sigma\), +describes the cross-sectional area for particles to scatter with an +individual target atom or nucleus. Cross section measurements form the +basis for MANY fields of physics. BThe cross section, and the +differential cross section, encapsulates everything measurable for a +collision where all that is measured is the final state, e.g. the +outgoing particle had momentum \(\boldsymbol{p}_f\). y studying cross sections, +one can infer information about the potential interaction between the +two particles. Inferring, or constraining, the potential from the +cross section is a classic {\it inverse} problem. Collisions are +either elastic or inelastic. Elastic collisions are those for which +the two bodies are in the same internal state before and after the +collision. If the collision excites one of the participants into a +higher state, or transforms the particles into different species, or +creates additional particles, the collision is inelastic. Here, we +consider only elastic collisions.

    +

    For Coulomb forces, the cross section is infinite because the range of +the Coulomb force is infinite, but for interactions such as the strong +interaction in nuclear or particle physics, there is no long-range +force and cross-sections are finite. Even for Coulomb forces, the part +of the cross section that corresponds to a specific scattering angle, +\(d\sigma/d\Omega\), which is a function of the scattering angle +\(\theta_s\) is still finite.

    +

    If a particle travels through a thin target, the chance the particle +scatters is \(P_{\rm scatt}=\sigma dN/dA\), where \(dN/dA\) is the number +of scattering centers per area the particle encounters. If the density +of the target is \(\rho\) particles per volume, and if the thickness of +the target is \(t\), the areal density (number of target scatterers per +area) is \(dN/dA=\rho t\). Because one wishes to quantify the collisions +independently of the target, experimentalists measure scattering +probabilities, then divide by the areal density to obtain +cross-sections,

    +
    +\[ +\begin{eqnarray} +\sigma=\frac{P_{\rm scatt}}{dN/dA}. +\end{eqnarray} +\]
    +

    Instead of merely stating that a particle collided, one can measure +the probability the particle scattered by a given angle. The +scattering angle \(\theta_s\) is defined so that at zero the particle is +unscattered and at \(\theta_s=\pi\) the particle is scattered directly +backward. Scattering angles are often described in the center-of-mass +frame, but that is a detail we will neglect for this first discussion, +where we will consider the scattering of particles moving classically +under the influence of fixed potentials \(U(\boldsymbol{r})\). Because the +distribution of scattering angles can be measured, one expresses the +differential cross section,

    + +
    +
    +\[ +\begin{equation} +\frac{d^2\sigma}{d\cos\theta_s~d\phi}. +\label{_auto5} \tag{10} +\end{equation} +\]
    +

    Usually, the literature expresses differential cross sections as

    + +
    +
    +\[ +\begin{equation} +d\sigma/d\Omega=\frac{d\sigma}{d\cos\theta d\phi}=\frac{1}{2\pi}\frac{d\sigma}{d\cos\theta}, +\label{_auto6} \tag{11} +\end{equation} +\]
    +

    where the last equivalency is true when the scattering does not depend +on the azimuthal angle \(\phi\), as is the case for spherically +symmetric potentials.

    +

    The differential solid angle \(d\Omega\) can be thought of as the area +subtended by a measurement, \(dA_d\), divided by \(r^2\), where \(r\) is the +distance to the detector,

    +
    +\[ +\begin{eqnarray} +dA_d=r^2 d\Omega. +\end{eqnarray} +\]
    +

    With this definition \(d\sigma/d\Omega\) is independent of the distance +from which one places the detector, or the size of the detector (as +long as it is small).

    +

    Differential scattering cross sections are calculated by assuming a +random distribution of impact parameters \(b\). These represent the +distance in the \(xy\) plane for particles moving in the \(z\) direction +relative to the scattering center. An impact parameter \(b=0\) refers to +being aimed directly at the target’s center. The impact parameter +describes the transverse distance from the \(z=0\) axis for the +trajectory when it is still far away from the scattering center and +has not yet passed it. The differential cross section can be expressed +in terms of the impact parameter,

    + +
    +
    +\[ +\begin{equation} +d\sigma=2\pi bdb, +\label{_auto7} \tag{12} +\end{equation} +\]
    +

    which is the area of a thin ring of radius \(b\) and thickness \(db\). In +classical physics, one can calculate the trajectory given the incoming +kinetic energy \(E\) and the impact parameter if one knows the mass and +potential. From the trajectory, one then finds the scattering angle +\(\theta_s(b)\). The differential cross section is then

    + +
    +
    +\[ +\begin{equation} +\frac{d\sigma}{d\Omega}=\frac{1}{2\pi}\frac{d\sigma}{d\cos\theta_s}=b\frac{db}{d\cos\theta_s}=\frac{b}{(d/db)\cos\theta_s(b)}. +\label{_auto8} \tag{13} +\end{equation} +\]
    +

    Typically, one would calculate \(\cos\theta_s\) and \((d/db)\cos\theta_s\) +as functions of \(b\). This is sufficient to plot the differential cross +section as a function of \(\theta_s\).

    +

    The total cross section is

    + +
    +
    +\[ +\begin{equation} +\sigma_{\rm tot}=\int d\Omega\frac{d\sigma}{d\Omega}=2\pi\int d\cos\theta_s~\frac{d\sigma}{d\Omega}. +\label{_auto9} \tag{14} +\end{equation} +\]
    +

    Even if the total cross section is infinite, e.g. Coulomb forces, one +can still have a finite differential cross section as we will see +later on.

    +

    An asteroid of mass \(m\) and kinetic energy \(E\) approaches a planet of +radius \(R\) and mass \(M\). What is the cross section for the asteroid to +impact the planet?

    +
    +

    5.5.1. Solution

    +

    Calculate the maximum impact parameter, \(b_{\rm max}\), for which the asteroid will hit the planet. The total cross section for impact is \(\sigma_{\rm impact}=\pi b_{\rm max}^2\). The maximum cross-section can be found with the help of angular momentum conservation. The asteroid’s incoming momentum is \(p_0=\sqrt{2mE}\) and the angular momentum is \(L=p_0b\). If the asteroid just grazes the planet, it is moving with zero radial kinetic energy at impact. Combining energy and angular momentum conservation and having \(p_f\) refer to the momentum of the asteroid at a distance \(R\),

    +
    +\[\begin{split} +\begin{eqnarray*} +\frac{p_f^2}{2m}-\frac{GMm}{R}&=&E,\\ +p_fR&=&p_0b_{\rm max}, +\end{eqnarray*} +\end{split}\]
    +

    allows one to solve for \(b_{\rm max}\),

    +
    +\[\begin{split} +\begin{eqnarray*} +b_{\rm max}&=&R\frac{p_f}{p_0}\\ +&=&R\frac{\sqrt{2m(E+GMm/R)}}{\sqrt{2mE}}\\ +\sigma_{\rm impact}&=&\pi R^2\frac{E+GMm/R}{E}. +\end{eqnarray*} +\end{split}\]
    +
    +
    +
    +

    5.6. Rutherford Scattering

    +

    This refers to the calculation of \(d\sigma/d\Omega\) due to an inverse +square force, \(F_{12}=\pm\alpha/r^2\) for repulsive/attractive +interaction. Rutherford compared the scattering of \(\alpha\) particles +(\(^4\)He nuclei) off of a nucleus and found the scattering angle at +which the formula began to fail. This corresponded to the impact +parameter for which the trajectories would strike the nucleus. This +provided the first measure of the size of the atomic nucleus. At the +time, the distribution of the positive charge (the protons) was +considered to be just as spread out amongst the atomic volume as the +electrons. After Rutherford’s experiment, it was clear that the radius +of the nucleus tended to be roughly 4 orders of magnitude smaller than +that of the atom, which is less than the size of a football relative +to Spartan Stadium.

    +

    The incoming and outgoing angles of the trajectory are at +\(\pm\theta'\). They are related to the scattering angle by +\(2\theta'=\pi+\theta_s\).

    +

    In order to calculate differential cross section, we must find how the +impact parameter is related to the scattering angle. This requires +analysis of the trajectory. We consider our previous expression for +the trajectory where we derived the elliptic form for the trajectory, +Eq. (9). For that case we considered an attractive +force with the particle’s energy being negative, i.e. it was +bound. However, the same form will work for positive energy, and +repulsive forces can be considered by simple flipping the sign of +\(\alpha\). For positive energies, the trajectories will be hyperbolas, +rather than ellipses, with the asymptotes of the trajectories +representing the directions of the incoming and outgoing +tracks. Rewriting Eq. (9),

    + +
    +
    +\[ +\begin{equation}\label{eq:ruthtraj} \tag{15} +r=\frac{1}{\frac{m\alpha}{L^2}+A\cos\theta}. +\end{equation} +\]
    +

    Once \(A\) is large enough, which will happen when the energy is +positive, the denominator will become negative for a range of +\(\theta\). This is because the scattered particle will never reach +certain angles. The asymptotic angles \(\theta'\) are those for which +the denominator goes to zero,

    + +
    +
    +\[ +\begin{equation} +\cos\theta'=-\frac{m\alpha}{AL^2}. +\label{_auto10} \tag{16} +\end{equation} +\]
    +

    The trajectory’s point of closest approach is at \(\theta=0\) and the +two angles \(\theta'\), which have this value of \(\cos\theta'\), are the +angles of the incoming and outgoing particles. From +Fig (to come), one can see that the scattering angle +\(\theta_s\) is given by,

    + +
    +
    +\[\begin{split} +\begin{eqnarray} +\label{eq:sthetover2} \tag{17} +2\theta'-\pi&=&\theta_s,~~~\theta'=\frac{\pi}{2}+\frac{\theta_s}{2},\\ +\nonumber +\sin(\theta_s/2)&=&-\cos\theta'\\ +\nonumber +&=&\frac{m\alpha}{AL^2}. +\end{eqnarray} +\end{split}\]
    +

    Now that we have \(\theta_s\) in terms of \(m,\alpha,L\) and \(A\), we wish +to re-express \(L\) and \(A\) in terms of the impact parameter \(b\) and the +energy \(E\). This will set us up to calculate the differential cross +section, which requires knowing \(db/d\theta_s\). It is easy to write +the angular momentum as

    + +
    +
    +\[ +\begin{equation} +L^2=p_0^2b^2=2mEb^2. +\label{_auto11} \tag{18} +\end{equation} +\]
    +

    Finding \(A\) is more complicated. To accomplish this we realize that +the point of closest approach occurs at \(\theta=0\), so from +Eq. (15)

    + +
    +
    +\[\begin{split} +\begin{eqnarray} +\label{eq:rminofA} \tag{19} +\frac{1}{r_{\rm min}}&=&\frac{m\alpha}{L^2}+A,\\ +\nonumber +A&=&\frac{1}{r_{\rm min}}-\frac{m\alpha}{L^2}. +\end{eqnarray} +\end{split}\]
    +

    Next, \(r_{\rm min}\) can be found in terms of the energy because at the +point of closest approach the kinetic energy is due purely to the +motion perpendicular to \(\hat{r}\) and

    + +
    +
    +\[ +\begin{equation} +E=-\frac{\alpha}{r_{\rm min}}+\frac{L^2}{2mr_{\rm min}^2}. +\label{_auto12} \tag{20} +\end{equation} +\]
    +

    One can solve the quadratic equation for \(1/r_{\rm min}\),

    + +
    +
    +\[ +\begin{equation} +\frac{1}{r_{\rm min}}=\frac{m\alpha}{L^2}+\sqrt{(m\alpha/L^2)^2+2mE/L^2}. +\label{_auto13} \tag{21} +\end{equation} +\]
    +

    We can plug the expression for \(r_{\rm min}\) into the expression for \(A\), Eq. (19),

    + +
    +
    +\[ +\begin{equation} +A=\sqrt{(m\alpha/L^2)^2+2mE/L^2}=\sqrt{(\alpha^2/(4E^2b^4)+1/b^2} +\label{_auto14} \tag{22} +\end{equation} +\]
    +

    Finally, we insert the expression for \(A\) into that for the scattering angle, Eq. (17),

    + +
    +
    +\[\begin{split} +\begin{eqnarray} +\label{eq:scattangle} \tag{23} +\sin(\theta_s/2)&=&\frac{m\alpha}{AL^2}\\ +\nonumber +&=&\frac{a}{\sqrt{a^2+b^2}}, ~~a\equiv \frac{\alpha}{2E} +\end{eqnarray} +\end{split}\]
    +

    The differential cross section can now be found by differentiating the +expression for \(\theta_s\) with \(b\),

    + +
    +
    +\[\begin{split} +\begin{eqnarray} +\label{eq:rutherford} \tag{24} +\frac{1}{2}\cos(\theta_s/2)d\theta_s&=&\frac{ab~db}{(a^2+b^2)^{3/2}}=\frac{bdb}{a^2}\sin^3(\theta_s/2),\\ +\nonumber +d\sigma&=&2\pi bdb=\frac{\pi a^2}{\sin^3(\theta_s/2)}\cos(\theta_s/2)d\theta_s\\ +\nonumber +&=&\frac{\pi a^2}{2\sin^4(\theta_s/2)}\sin\theta_s d\theta_s\\ +\nonumber +\frac{d\sigma}{d\cos\theta_s}&=&\frac{\pi a^2}{2\sin^4(\theta_s/2)},\\ +\nonumber +\frac{d\sigma}{d\Omega}&=&\frac{a^2}{4\sin^4(\theta_s/2)}. +\end{eqnarray} +\end{split}\]
    +

    where \(a= \alpha/2E\). This the Rutherford formula for the differential +cross section. It diverges as \(\theta_s\rightarrow 0\) because +scatterings with arbitrarily large impact parameters still scatter to +arbitrarily small scattering angles. The expression for +\(d\sigma/d\Omega\) is the same whether the interaction is positive or +negative.

    +

    Consider a particle of mass \(m\) and charge \(z\) with kinetic energy \(E\) +(Let it be the center-of-mass energy) incident on a heavy nucleus of +mass \(M\) and charge \(Z\) and radius \(R\). Find the angle at which the +Rutherford scattering formula breaks down.

    +
    +

    5.6.1. Solution

    +

    Let \(\alpha=Zze^2/(4\pi\epsilon_0)\). The scattering angle in Eq. (23) is

    +
    +\[ +\sin(\theta_s/2)=\frac{a}{\sqrt{a^2+b^2}}, ~~a\equiv \frac{\alpha}{2E}. +\]
    +

    The impact parameter \(b\) for which the point of closest approach +equals \(R\) can be found by using angular momentum conservation,

    +
    +\[\begin{split} +\begin{eqnarray*} +p_0b&=&b\sqrt{2mE}=Rp_f=R\sqrt{2m(E-\alpha/R)},\\ +b&=&R\frac{\sqrt{2m(E-\alpha/R)}}{\sqrt{2mE}}\\ +&=&R\sqrt{1-\frac{\alpha}{ER}}. +\end{eqnarray*} +\end{split}\]
    +

    Putting these together

    +
    +\[ +\theta_s=2\sin^{-1}\left\{ +\frac{a}{\sqrt{a^2+R^2(1-\alpha/(RE))}} +\right\},~~~a=\frac{\alpha}{2E}. +\]
    +

    It was from this departure of the experimentally measured +\(d\sigma/d\Omega\) from the Rutherford formula that allowed Rutherford +to infer the radius of the gold nucleus, \(R\).

    +

    Just like electrodynamics, one can define “fields”, which for a small +additional mass \(m\) are the force per mass and the additional +potential energy per mass. The {\it gravitational field} related to +the force has dimensions of force per mass, or acceleration, and can +be labeled \(\boldsymbol{g}(\boldsymbol{r})\). The potential energy per mass has +dimensions of energy per mass. This is analogous to the +electromagnetic potential, which is the potential energy per charge, +and the electric field which is the force per charge.

    +

    Because the field \(\boldsymbol{g}\) obeys the same inverse square law for a +point mass as the electric field does for a point charge, the +gravitational field also satisfies a version of Gauss’s law,

    + +
    +
    +\[ +\begin{equation} +\label{eq:GravGauss} \tag{25} +\oint d\boldsymbol{A}\cdot\boldsymbol{g}=-4\pi GM_{\rm inside}. +\end{equation} +\]
    +

    Here, \(M_{\rm inside}\) is the net mass inside a closed area.

    +

    Gauss’s law can be understood by considering a nozzle that sprays +paint in all directions uniformly from a point source. Let \(B\) be the +number of gallons per minute of paint leaving the nozzle. If the +nozzle is at the center of a sphere of radius \(r\), the paint per +square meter per minute that is deposited on some part of the sphere +is

    +
    +\[ +\begin{eqnarray} +F(r)&=&\frac{B}{4\pi r^2}. +\end{eqnarray} +\]
    +

    Now, let \(F\) also be assigned a direction, so that it becomes a vector +pointing along the direction of the flying paint. For any surface that +surrounds the nozzle, not necessarily a sphere, one can state that

    + +
    +
    +\[ +\begin{eqnarray} +\label{eq:paint} \tag{26} +\oint \boldsymbol{dA}\cdot\boldsymbol{F}&=&B, +\end{eqnarray} +\]
    +

    regardless of the shape of the surface. This follows because the rate +at which paint is deposited on the surface should equal the rate at +which it leaves the nozzle. The dot product ensures that only the +component of \(\boldsymbol{F}\) into the surface contributes to the deposition +of paint. Similarly, if \(\boldsymbol{F}\) is any radial inverse-square forces, +that falls as \(B/(4\pi r^2)\), then one can apply +Eq. (26). For gravitational fields, \(B/(4\pi)\) is replaced +by \(GM\), and one quickly “derives” Gauss’s law for gravity, +Eq. (25).

    +

    Consider Earth to have its mass \(M\) uniformly distributed in a sphere +of radius \(R\). Find the magnitude of the gravitational acceleration as +a function of the radius \(r\) in terms of the acceleration of gravity +at the surface \(g(R)\). Assume \(r<R\), i.e. you are inside the surface.

    +

    {\bf Solution}: Take the ratio of Eq. (25) for two radii, \(R\) and \(r<R\),

    +
    +\[\begin{split} +\begin{eqnarray*} +\frac{4\pi r^2 g(r)}{4\pi R^2 g(R)}&=&\frac{4\pi GM_{\rm inside~r}}{4\pi GM_{\rm inside~R}}\\ +\nonumber +&=&\frac{r^3}{R^3}\\ +\nonumber +g(r)&=&g(R)\frac{r}{R}~. +\end{eqnarray*} +\end{split}\]
    +

    The potential energy per mass is similar conceptually to the voltage, or electric potential energy per charge, that was studied in electromagnetism, if \(V\equiv U/m\), \(\boldsymbol{g}=-\nabla V\).

    +
    +
    +
    +

    5.7. Tidal Forces

    +

    Consider a spherical planet of radius \(r\) a distance \(D\) from another +body of mass \(M\). The magnitude of the force due to \(M\) on an small +object of mass \(\delta m\) on surface of the planet can be calculated +by performing a Taylor expansion about the center of the spherical +planet.

    + +
    +
    +\[ +\begin{equation} +F=-\frac{GM\delta m}{D^2}+2\frac{GM\delta m}{D^3}\Delta D+\cdots +\label{_auto15} \tag{27} +\end{equation} +\]
    +

    If the \(z\) direction points toward the large object, \(\Delta D\) can be +referred to as \(z\). In the accelerating frame of an observer at the +center of the planet,

    + +
    +
    +\[ +\begin{equation} +\delta m\frac{d^2 z}{dt^2}=F-\delta ma'+{\rm other~forces~acting~on~} \delta m, +\label{_auto16} \tag{28} +\end{equation} +\]
    +

    where \(a'\) is the acceleration of the observer. Because \(\delta ma'\) +equals the gravitational force on \(\delta m\) if it were located at the +planet’s center, one can write

    + +
    +
    +\[ +\begin{equation} +m\frac{d^2z}{dt^2}=2\frac{GM\delta m}{D^3}z+{\rm other~forces~acting~on~}\delta m. +\label{_auto17} \tag{29} +\end{equation} +\]
    +

    Here the other forces could represent the forces acting on \(\delta m\) +from the spherical planet such as the gravitational force or the +contact force with the surface. If \(\theta\) is the angle w.r.t. the +\(z\) axis, the effective force acting on \(\delta m\) is

    + +
    +
    +\[ +\begin{equation} +F_{\rm eff}\approx 2\frac{GM\delta m}{D^3}r\cos\theta\hat{z}+{\rm other~forces~acting~on~}\delta m. +\label{_auto18} \tag{30} +\end{equation} +\]
    +

    This first force is the “tidal” force. It pulls objects outward from the center of the object. If the object were covered with water, it would distort the objects shape so that the shape would be elliptical, stretched out along the axis pointing toward the large mass \(M\). The force is always along (either parallel or antiparallel to) the \(\hat{z}\) direction.

    +

    Consider the Earth to be a sphere of radius \(R\) covered with water, +with the gravitational acceleration at the surface noted by \(g\). Now +assume that a distant body provides an additional constant +gravitational acceleration \(\boldsymbol{a}\) pointed along the \(z\) axis. Find +the distortion of the radius as a function of \(\theta\). Ignore +planetary rotation and assume \(a<<g\).

    +

    {\bf Solution}: Because Earth would then accelerate with \(a\), the +field \(a\) would seem invisible in the accelerating frame. A tidal +force would only appear if \(a\) depended on position, i.e. \(\nabla +\boldsymbol{a}\ne 0\).

    +

    Now consider that the field is no longer constant, but that instead \(a=-kz\) with \(|kR|<<g\).

    +

    {\bf Solution}: The surface of the planet needs to be at constant +potential (if the planet is not accelerating). The force per mass, +\(-kz\) is like a spring, and the potential per mass is +\(kz^2/2\). Otherwise water would move to a point of lower +potential. Thus, the potential energy for a sample mass \(\delta m\) is

    +
    +\[\begin{split} +\begin{eqnarray*} +V(R)+\delta m gh(\theta)-\frac{\delta m}{2}kr^2\cos^2\theta={\rm Constant}\\ +V(R)+\delta mgh(\theta)-\frac{\delta m}{2}kR^2\cos^2\theta-\delta m kRh(\theta)\cos^2\theta-\frac{\delta m}{2}kh^2(\theta)\cos^2\theta={\rm Constant}. +\end{eqnarray*} +\end{split}\]
    +

    Here, the potential due to the external field is \((1/2)kz^2\) so that \(-\nabla U=-kz\). One now needs to solve for \(h(\theta)\). Absorbing all the constant terms from both sides of the equation into one constant \(C\), and because both \(h\) and \(kR\) are small, we can through away terms of order \(h^2\) or \(kRh\). This gives

    +
    +\[\begin{split} +\begin{eqnarray*} +gh(\theta)-\frac{1}{2}kR^2\cos^2\theta&=&C,\\ +h(\theta)&=&\frac{C}{g}+\frac{1}{2g}kR^2\cos^2\theta,\\ +h(\theta)&=&\frac{1}{2g}kR^2(\cos^2\theta-1/3). +\end{eqnarray*} +\end{split}\]
    +

    The term with the factor of \(1/3\) replaced the constant and was chosen so that the average height of the water would be zero.

    +

    The Sun’s mass is \(27\times 10^6\) the Moon’s mass, but the Sun is 390 times further away from Earth as the Sun. What is ratio of the tidal force of the Sun to that of the Moon.

    +

    {\bf Solution}: The gravitational force due to an object \(M\) a distance \(D\) away goes as \(M/D^2\), but the tidal force is only the difference of that force over a distance \(R\),

    +
    +\[ +F_{\rm tidal}\propto \frac{M}{D^3}R. +\]
    +

    Therefore the ratio of force is

    +
    +\[\begin{split} +\begin{eqnarray*} +\frac{F_{\rm Sun's~tidal~force}}{F_{\rm Moon's~tidal~force}} +&=&\frac{M_{\rm sun}/D_{\rm sun}^3}{M_{\rm moon}/D_{\rm moon}^3}\\ +&=&\frac{27\times 10^6}{390^3}=0.46. +\end{eqnarray*} +\end{split}\]
    +

    The Moon more strongly affects tides than the Sun.

    +
    +
    + + + + +
    + +
    +
    + + + +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/chapter7.html b/doc/src/LectureNotes/testbook/_build/html/chapter7.html new file mode 100644 index 000000000..692008c09 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/chapter7.html @@ -0,0 +1,995 @@ + + + + + + + + + 6. Non-inertial Frames, Translation and Rotating Coordinate Systems — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + +
    +
    + +
    + +
    +

    6. Non-inertial Frames, Translation and Rotating Coordinate Systems

    +

    Let us quickly remind ourselves about the definition of a so-called inertial frame of reference. +An inertial frame of reference in classical physics (and in special +relativity as well) possesses the property that in this frame of reference a +body with zero net force acting upon it does not accelerate; that is, +such a body is at rest or moving at a constant velocity. If we recall the definition of Newton’s first law, this is essentially its description.

    +

    An +inertial frame of reference can be defined in analytical terms as a +frame of reference that describes time and space homogeneously, +isotropically, and in a time-independent manner.

    +

    Conceptually, the +physics of a system in an inertial frame has no causes external to +the system. An inertial frame of reference may also be called an +inertial reference frame, inertial frame, Galilean reference frame, or +inertial space.

    +

    All inertial frames are in a state of constant, rectilinear motion +with respect to one another; an accelerometer moving with any of them +would detect zero acceleration. Measurements in one inertial frame can +be converted to measurements in another by a simple transformation +(the Galilean transformation in Newtonian physics and the Lorentz +transformation in special relativity). +In general relativity, in any +region small enough for the curvature of spacetime and tidal forces +to be negligible, one can find a set of inertial frames that +approximately describe that region.

    +

    In a non-inertial reference frame in classical physics and special +relativity, the physics of a system vary depending on the acceleration +of that frame with respect to an inertial frame, and the usual +physical forces must be supplemented by fictitious forces. In +contrast, systems in general relativity don’t have external causes, +because of the principle of geodesic motion.

    +

    In classical physics, for example, a ball dropped towards the ground +does not go exactly straight down because the Earth is rotating, which +means the frame of reference of an observer on Earth is not +inertial. The physics must account for the Coriolis effect—in this +case thought of as a force—to predict the horizontal motion. Another +example of such a fictitious force associated with rotating reference +frames is the centrifugal effect, or centrifugal force. We will here, +in addition to the abovementioned example of the Coriolis effect study +a classic case in classical mechanics, namely Focoault’s pendulum.

    +
    +

    6.1. Galilean Transformations

    +

    In many of the examples studied till now we have restricted our +attention to the motion of a particle (or a system of particles) as +seen from an inertial frame of reference. An inertial reference frame +moves at constant velocity with respect to other reference frames. We +can formalize this relationship as a coordinate transformation (known +as a Galilean transformation) between say two given frames, one +labeled \(S_0\) and the other one labeled \(S\). In our discussions here we will refer to the frame \(S_0\) as the reference frame.

    +

    We could consider for example an object in a car, where the car moves with a +constant velocity with respect to the system \(S_0\). We then throw this +object up in the air and study it’s motion with respect to the two chosen frames. +We denote the position of this object in the +car relative to the car’s frame as \(\boldsymbol{r}_S(t)\). We have included an explicit +time dependence here. The position of the car relative to the +reference frame \(S_0\) is \(\boldsymbol{R}(t)\) and the position of the object in +the car relative to \(S_0\) is \(\boldsymbol{r}_{S_0}(t)\).

    +

    The following relations between the positions +link the various variables that describe the object in the two frames

    +
    +\[ +\boldsymbol{r}_{S_0}(t) = \boldsymbol{r}_{S}(t) + \boldsymbol{R}(t). +\]
    +

    We will stay with Newtonian mechanics, meaning that we do not consider +relatistic effects. This means also that the time we measure in \(S_0\) +is the same as the time we measure in \(S\). This approximation is +reasonable as long as the two frames do not move very fast relative to +each other.

    +

    We can then compute the time derivatives and obtain the corresponding velocities

    +
    +\[ +\dot{\boldsymbol{r}}_{S_0}(t) = \boldsymbol{v}_{S_0}=\dot{\boldsymbol{r}}_{S} + \dot{\boldsymbol{R}}, +\]
    +

    or

    +
    +\[ +\boldsymbol{v}_{S_0}=\boldsymbol{v}_{S} + \boldsymbol{u}, +\]
    +

    with \(\boldsymbol{u}=\dot{\boldsymbol{R}}\).

    +

    If our system \(S\) moves at constant velocity, we have that the +accelerations in the two systems equal each other since +\(\ddot{\boldsymbol{R}}=0\) and we have

    +
    +\[ +\boldsymbol{a}_{S_0}=\boldsymbol{a}_{S}. +\]
    +

    The above equations are examples of what we call a homogeneous +Galilean transformation. In an inertial frame, an object moves with +constant velocity (i.e., has zero acceleration) if there are no forces +acting on it. When we are not in an inertial frame, there will be +spurious (or fictitious) accelerations arising from the acceleration +of the reference frame. These effects can be seen in simple every-day +situations such as sitting in a vehicle that is accelerating or +rounding a corner. Or think of yourself sitting in a seat of an +aircraft that accelerates rapidly during takeoff. You feel a force +which pushes you back in the seat. Similarly, if you stand in a bus +which suddenly brakes (negative acceleration), you feel a force which +may make you fall forward unless you hold yourself. In these +situations, loose objects will appear to accelerate relative to the +observer or vehicle.

    +

    Our next step is thus to study an accelerating frame. Thereafter we +will study reference frames that are rotating. This will introduce +forces like the Coriolis force and the well-known centrifugal +force. We will use these to study again an object which falls towards +the Earth (the Earth rotates around its axis). This will lead to a +correction to the object’s acceleration twoards the Earth.

    +

    Finally, we bring together acceleration and rotation and end the +discussion here with a classic in classical mechanics, namely +Focault’s pendulum.

    +
    +
    +

    6.2. Accelerating Frames (No Rotation)

    +

    We consider first the effect of uniformly accelerating reference +frames. We will hereafter label this frame with a subscript +\(S\). Assume now that this reference systems accelerates with an +acceleration \(\boldsymbol{a}_{S_0}\) relative to an inertial reference frame, +which we will label with a subscript \(S_0\). The accelerating frame +has a velocity \(\boldsymbol{v}_{S_0}\) with respect to the inertial frame.

    +

    The figure here

    + + +

    + + +

    shows the relation between the two +frames. The position of an object in frame \(S\) relative to \(S_0\) is +labeled as \(\boldsymbol{r}_{S_0}\). Seen from this inertial frame, an object in +the accelerating frame obeys Newton’s second law

    + +
    +
    +\[ +\begin{equation} +m\frac{d^2\boldsymbol{r}_{S_0}}{dt^2}=\boldsymbol{F}. +\label{_auto1} \tag{1} +\end{equation} +\]
    +

    Here \(\boldsymbol{F}\) is the net force on an object in the accelerating frame +seen from the inertial frame.

    +

    If we on the other hand wish to study the motion of this object (say a +ball in an accelerating car) relative to the accelerating frame, we +need to define its position relative to this frame. We label this +position as \(\boldsymbol{r}_{S}\).

    +

    Using the definition of velocity as the time derivative of position +and the standard vector addition of velocities, we can define the +velocity relative to \(S_0\) as

    +
    +\[ +\dot{\boldsymbol{r}}_{S_0}=\dot{\boldsymbol{r}}_{S}+\boldsymbol{v}_{S_0}. +\]
    +

    The left hand side in the last equation defines the object’s velocity +relative to the inertial frame. The right hand side says this is the +object’s velocity relative to the accelerating frame plus the velocity +of the accelerating frame with respect to the inertial frame. If we +now take the second derivative of the above equation, +we have the corresponding accelerations

    +
    +\[ +\ddot{\boldsymbol{r}}_{S_0}=\ddot{\boldsymbol{r}}_{S}+\boldsymbol{a}_{S_0}. +\]
    +

    Multiplying with the mass of a given object, we can rewrite Newton’s +law in the accelerating frame as

    +
    +\[ +m\ddot{\boldsymbol{r}}_{S}=\boldsymbol{F}-\boldsymbol{a}_{S_0}. +\]
    +

    We see that we have again Newton’s second law except that we added a +correction which defines an effective acceleration compared to the +equation seen in the inertial frame. We can thus continue to use +Newton’s law in the accelerating frame provided we correct the +equation of motion with what is often called a fictitious force. This +often also called an inertial force or an effective force.

    +

    Add example about pendulum in train car

    +
    +
    +

    6.3. Rotating Frames

    +

    If you are on Earth’s surface and if your reference frame is fixed +with the surface, this is an example of an accelerating frame, where +the acceleration, as we will show below, is \(\Omega^2 r\), where +\(r\equiv\sqrt{x^2+y^2}\), and \(\Omega\) is the angular velocity +of Earth’s rotation. The acceleration is inward toward the axis of +rotation, so the additional contribution to the apparent acceleration +of gravity is outward in the \(x-y\) plane. In contrast the usual +acceleration \(\boldsymbol{g}\) is radially inward pointing toward the origin.

    +

    We will now deal with motion in a rotating frame and relate this to an +inertial frame. The outcome of our derivations will be effective +forces (or inertial forces) like the abovementioned acceleration (from +the centrifugal force) and the Coriolis force term.

    +

    For a reference frame that rotates with respect to an inertial frame, +Euler’s theorem is central here. It states that the most general +displacement (motion) of a rigid body with a one point fixed (we +normally approximate a rigid body with a mass center) is a rotation +about some fixed axis. In different words, the most general motion of +any body relative to a fixed point \(O\) is a rotation abotu some axis +through the same point \(O\). This means that for a specific rotation +about a given point \(O\) we only to specify the direction of the axis +about which the rotation occurs with the corresponding angle of +rotation. As we will see below, the direction of the angle of rotation +can be specified by a unit vector \(\boldsymbol{e}\) in the rotating frame and +the rate of rotation per unit time. The latter defines the angular +velocity \(\Omega\). We will define these quantities more rigorously below. +At the end of this section we will also prove Euler’s theorem.

    +

    What we will show here is that Newton’s laws for an object in the rotating frame is given by

    +
    +\[ +m\ddot{\boldsymbol{r}}_{S}=\boldsymbol{F}+m\boldsymbol{r}\times\dot{\boldsymbol{\Omega}}+2m\boldsymbol{v}_S\times\boldsymbol{\Omega}+m\left(\boldsymbol{\Omega}\times\boldsymbol{r}\right)\times\boldsymbol{\Omega}. +\]
    +

    The first term to the right is the force we defined in the inertial +system, that is \(m\ddot{\boldsymbol{r}}_{S_0}=\boldsymbol{F}\). The second term is the +angular acceleration of the rotating reference frame, a quantity which +in many cases is set to zero since we assume that the angular velocity +is constant as function of time. The third terms is the Coriolis force, that +is

    +
    +\[ +\boldsymbol{F}_{\mathrm{Coriolis}}=2m\boldsymbol{v}_S\times\boldsymbol{\Omega}, +\]
    +

    while the last term is going to give us the standard centrifugal force

    +
    +\[ +\boldsymbol{F}_{\mathrm{Centrifugal}}=m\left(\boldsymbol{\Omega}\times\boldsymbol{r}\right)\times\boldsymbol{\Omega}. +\]
    +

    Let us derive these terms, following much of the same procedure as we +did for an accelerating reference frame. The figure here (to come) +shows the two reference systems \(S\) and \(S_0\).

    +

    We define a general vector \(\boldsymbol{A}\). It could represent the position, +a given force, the velocity and other quantities of interest for +studies of the equations of motion.

    +

    We let this vector to be defined by three orthogonal (we assume motion +in three dimensions) unit vectors \(\boldsymbol{e}_i\), that is we have

    +
    +\[ +\boldsymbol{A}=A_1\boldsymbol{e}_1+A_2\boldsymbol{e}_2+A_3\boldsymbol{e}_3=\sum_iA_i\boldsymbol{e}_i. +\]
    +

    These unit vectors are fixed in the rotating frame, that is their time +derivatives are zero. However, for an observer in the inertial frame +\(S_0\), however these unit vectors are rotating and may thus have an +explicit time dependence.

    +

    Since we want to find an expression for the equations of motion in the +inertial frame and the rotating frame, we need expressions for the +time derivative of a vector \(\boldsymbol{A}\) in these two frames. Since the +unit vectors are assumed to be fixed in \(S\), we have

    +
    +\[ +\dot{\boldsymbol{A}}_S=\sum_i\frac{dA_i}{dt}\boldsymbol{e}_i=\sum_i\dot{dA_i}\boldsymbol{e}_i. +\]
    +

    In the inertial frame \(S_0\) we have

    +
    +\[ +\dot{\boldsymbol{A}}_{S_0}=\sum_i\dot{dA_i}\boldsymbol{e}_i+\sum_i A_i\left(\dot{\boldsymbol{e}}_i\right)_{S_0}. +\]
    +

    We will show below that

    +
    +\[ +\left(\dot{\boldsymbol{e}}_i\right)_{S_0}=\Omega\times\boldsymbol{e}_i, +\]
    +

    where \(\Omega\) is the angular velocity (to be derived below). This +means we can write the derivative of an arbitrary vector \(\boldsymbol{A}\) in +the inertial frame \(S_0\) as (the vector is defined in the rotating +frame),

    +
    +\[ +\dot{\boldsymbol{A}}_{S_0}=\sum_i\dot{dA_i}\boldsymbol{e}_i+\sum_i A_i\left(\dot{\boldsymbol{e}}_i\right)_{S_0}=\dot{\boldsymbol{A}}_S+\sum_i A_i(\Omega\times\boldsymbol{e}_i)=\dot{\boldsymbol{A}}_S+\boldsymbol{\Omega}\times\boldsymbol{A}. +\]
    +

    This is a very useful relation which relates the derivative of any +vector \(\boldsymbol{A}\) measured in the inertial frame \(S_0\) to the +correspoding derivative in a rotating frame \(S\).

    +

    If we now let \(\boldsymbol{A}\) be the position and the velocity vectors, we +can derive the equations of motion in the rotating frame in terms of +the same equations of motion in the inertial frame \(S_0\).

    +

    Let us start with the position \(\boldsymbol{r}\).

    +

    We have

    +
    +\[ +\dot{\boldsymbol{r}}_{S_0}=\dot{\boldsymbol{r}}_S+\boldsymbol{\Omega}\times\boldsymbol{r}. +\]
    +

    If we define the velocities in the two frames as

    +
    +\[ +\boldsymbol{v}_{S_0}=\dot{\boldsymbol{r}}_{S_0}, +\]
    +

    and

    +
    +\[ +\boldsymbol{v}_{S}=\dot{\boldsymbol{r}}_{S}, +\]
    +

    we have then

    +
    +\[ +\dot{\boldsymbol{r}}_{S_0}=\boldsymbol{v}_{S_0}=\boldsymbol{v}_{S}+\boldsymbol{\Omega}\times\boldsymbol{r}. +\]
    +

    In order to find the equations of motion, we need the acceleration and +thereby the time derivative of the last equation. The derivative of +the angular velocity \(\Omega\) will turn in handy in these derivations +(repeated applications of the chain rule again). +The latter derivative is

    +
    +\[ +\dot{\boldsymbol{\Omega}}_{S_0}=\dot{\boldsymbol{\Omega}}_S+\boldsymbol{\Omega}\times\boldsymbol{\Omega}, +\]
    +

    which leads to (an expected result, why?)

    +
    +\[ +\dot{\boldsymbol{\Omega}}_{S_0}=\dot{\boldsymbol{\Omega}}_S, +\]
    +

    since \(\boldsymbol{\Omega}\times\boldsymbol{\Omega}=0\).

    +

    Let us now take the second derivative with respect to time.

    +

    Using

    +
    +\[ +\left[\frac{d^2\boldsymbol{r}}{dt^2}\right]_{S_0}=\ddot{\boldsymbol{r}}_{S_0}=\left[\frac{d}{dt}\right]_{S_0}\left[\frac{d\boldsymbol{r}}{dt}\right]_{S_0}, +\]
    +

    we have

    +
    +\[ +\ddot{\boldsymbol{r}}_{S_0}=\left[\frac{d}{dt}\right]_{S_0}\left[\boldsymbol{v}_{S}+\boldsymbol{\Omega}\times\boldsymbol{r}\right]=\left[\frac{d}{dt}\right]_{S_0}\boldsymbol{v}_{S_0}, +\]
    +

    which gives

    +
    +\[ +\ddot{\boldsymbol{r}}_{S_0}=\left[\frac{d\boldsymbol{v}_S}{dt}\right]_{S}+\dot{\boldsymbol{\Omega}}\times \boldsymbol{r}+2\boldsymbol{\Omega}\times\boldsymbol{v}_S+\boldsymbol{\Omega}\times(\boldsymbol{\Omega}\times\boldsymbol{r}). +\]
    +

    Defining the accelerations \(\boldsymbol{a}_{S_0}=\ddot{\boldsymbol{r}}_{S_0}=\dot{\boldsymbol{v}}_{S_0}\) and \(\boldsymbol{a}_{S}=\dot{\boldsymbol{v}}_{S}\), we have

    +
    +\[ +\boldsymbol{a}_{S_0}=\boldsymbol{a}_{S}+\dot{\boldsymbol{\Omega}}\times \boldsymbol{r}+2\boldsymbol{\Omega}\times\boldsymbol{v}_S+\boldsymbol{\Omega}\times(\boldsymbol{\Omega}\times\boldsymbol{r}). +\]
    +

    If we now use Newton’s law in the inertial frame \(\boldsymbol{F}=m\boldsymbol{a}_{S_0}\), we get the effective force in the rotating frame (multiplying by the mass \(m\))

    +
    +\[ +m\boldsymbol{a}_{S}=\boldsymbol{F}+m\dot{\boldsymbol{r}\times\boldsymbol{\Omega}}+2m\boldsymbol{v}_S\times\boldsymbol{\Omega}+m(\boldsymbol{\Omega}\times\boldsymbol{r})\times\boldsymbol{\Omega}, +\]
    +

    which is what we wanted to demostrate. We have the Coriolis force

    +
    +\[ +\boldsymbol{F}_{\mathrm{Coriolis}}=2m\boldsymbol{v}_S\times\boldsymbol{\Omega}, +\]
    +

    while the last term is the standard centrifugal force

    +
    +\[ +\boldsymbol{F}_{\mathrm{Centrifugal}}=m\left(\boldsymbol{\Omega}\times\boldsymbol{r}\right)\times\boldsymbol{\Omega}. +\]
    +

    In our discussions below we will assume that the angular acceleration of the rotating frame is zero and focus only on the Coriolis force and the centrifugal force.

    +
    +

    6.3.1. Effective potential and Centrifugal force

    +

    Suppose we can ignore the Coriolis force. If we focus only on the +centrifugal force we have an additional force

    +
    +\[ +\boldsymbol{F}_{\mathrm{Centrifugal}}=m\left(\boldsymbol{\Omega}\times\boldsymbol{r}\right)\times\boldsymbol{\Omega}, +\]
    +

    where the term \(\boldsymbol{\Omega}\times\boldsymbol{r}\) is the radial velocity.

    +

    Consider now an object with position \(\boldsymbol{r}\) according to an observer in a frame +rotating about the \(z\) axis with angular velocity +\(\boldsymbol{\Omega}=\Omega\hat{z}\). To an observer in the inertial frame +the vector will change even if the vector appears +fixed to the rotating observer.

    +

    If \(\boldsymbol{\Omega}\) is in the \(z\) direction, +the centrifugal force becomes

    + +
    +
    +\[ +\begin{equation} +\boldsymbol{F}_{\mathrm{Centrifugal}}=m\Omega^2(x\hat{x}+y\hat{y}). +\label{_auto2} \tag{2} +\end{equation} +\]
    +

    The centrifugal force points outward in the \(x-y\) plane, and its +magnitude is \(m\Omega^2r\), where +\(r=\sqrt{x^2+y^2}\).

    +

    Continuing along these lines, +if we define a rotating frame which makes an angle \(\theta\) with the inertial frame and define the distance to an object in this frame from the origin as \(\boldsymbol{r}\), then the centrifugal force (which points outward) has as magnitude \(\Omega^2r\sin{\theta}\). Defining \(\rho=r\sin{\theta}\) and the unit vector \(\hat{\boldsymbol{\rho}}\) (see figure here)

    + + +

    + + +

    we have the well-known expression for the centrifugal force

    +
    +\[ +\boldsymbol{F}_{\mathrm{Centrifugal}}=m\Omega^2\rho\hat{\boldsymbol{\rho}}, +\]
    +

    and with the velocity given by its magnitude \(v=\Omega\rho\) we obtain the well-known expression for the centrifugal force

    +
    +\[ +\boldsymbol{F}_{\mathrm{Centrifugal}}=m\frac{v^2}{\rho}{\boldsymbol{\rho}}. +\]
    +

    If we now go back again to our falling object discussed in the +beginning of these lectures, we need to modify for the fact that the Earth +is rotating with respect to the falling object.

    +

    Seen from a rotating coordinate system we have now that the forces acting on the falling object are

    +
    +\[ +m\ddot{\boldsymbol{r}}=\boldsymbol{F}_{\mathrm{gravity}}+\boldsymbol{F}_{\mathrm{Centrifugal}}. +\]
    +

    If we define the mass of Earth as \(M\) and its radius as \(R\) and assuming that the object is close to the Earth, the gravitational force takes then well-known expression

    +
    +\[ +\boldsymbol{F}_{\mathrm{gravity}}=-\frac{GMm}{R^2}\hat{\boldsymbol{r}}=m\boldsymbol{g}_0. +\]
    +

    Inserting the expression for the centrifugal force, we can then define an effective force

    +
    +\[ +\boldsymbol{F}_{\mathrm{eff}}=\boldsymbol{F}_{\mathrm{gravity}}+\boldsymbol{F}_{\mathrm{Centrifugal}}=m\boldsymbol{g}_0-m\Omega^2R\sin{(\theta)}\hat{\boldsymbol{\rho}}, +\]
    +

    and with

    +
    +\[ +\boldsymbol{g}_{\mathrm{eff}}=\boldsymbol{g}_0-\Omega^2R\sin{(\theta)}\hat{\boldsymbol{\rho}}, +\]
    +

    we have

    +
    +\[ +\boldsymbol{F}_{\mathrm{eff}}=m\boldsymbol{g}_{\mathrm{eff}}. +\]
    +

    In the rotating coordinate system (not an inertial frame), motion is +thus determined by an apparent force and one can define effective +potentials. In addition to the normal gravitational potential energy, +there is a contribution to the effective potential,

    + +
    +
    +\[ +\begin{equation} +\delta V_{\rm eff}(r)=-\frac{m}{2}\Omega^2r^2=-\frac{m}{2}r^2\Omega^2\sin^2\theta, +\label{_auto3} \tag{3} +\end{equation} +\]
    +

    where \(\theta\) is the polar angle, measured from say the north +pole. If the true gravitational force can be considered as originating +from a point in Earth’s center, the net effective potential for a mass +\(m\) near Earth’s surface could be (a distance \(h\))

    + +
    +
    +\[ +\begin{equation} +V_{\rm eff}=mgh-m\frac{1}{2}\Omega^2(R+h)^2\sin^2\theta. +\label{_auto4} \tag{4} +\end{equation} +\]
    +

    As an example, let us ask ourselves how much wider is Earth at the +equator than the north-south distance between the poles assuming that +the gravitational field above the surface can be approximated by that +of a point mass at Earth’s center.

    +

    The surface of the ocean must be at constant effective potential for a +sample mass \(m\). This means that if \(h\) now refers to the height of +the water

    +
    +\[ +m g[h(\theta=\pi/2)-h(\theta=0)]=\frac{m}{2}\Omega^2(R+h)^2. +\]
    +

    Because \(R>>h\), one can approximate \(R+h\rightarrow R\) on the right-hand side, thus

    +
    +\[ +h(\theta=\pi)-h(\theta=0)=\frac{\Omega^2R^2}{2g}. +\]
    +

    This come out a bit less than 11 km, or a difference of near 22 km for +the diameter of the Earth in the equatorial plane compared to a +diameter between the poles. In reality, the difference is +approximately 41 km. The discrepancy comes from the assumption that +the true gravitational force can be treated as if it came from a point +at Earth’s center. This would be true if the distribution of mass was +radially symmetric. However, Earth’s center is molten and the rotation +distorts the mass distribution. Remarkably this effect nearly doubles +the elliptic distortion of Earth’s shape. Due to this distortion, the +top of Mount Everest is not the furthest point from the center of the +Earth. That belongs to the top of a volcano, Chimborazo, in Equador, +which is one degree in latitude below the Equator. Chimborazo is about +8500 ft lower than Everest when measured relative to sea level, but is +7700 feet further from the center of the Earth.

    +
    +
    +
    +

    6.4. Coriolis Force and Falling Objects

    +

    The Coriolis force is given by

    +
    +\[ +\boldsymbol{F}_{\mathrm{Coriolis}}=2m\boldsymbol{v}_S\times\boldsymbol{\Omega}, +\]
    +

    It does not enter problems like the shape of the Earth +above because in that case the water was not moving relative to the +rotating frame.

    +

    The Coriolis force is non-zero only if \(\boldsymbol{v}_S\ne 0\) and is directed +perpendicular to both \(\boldsymbol{v}_S\) and \(\Omega\). Viewed along the +direction of \(\boldsymbol{v}_S\), the Coriolis force associated with +counter-clockwise rotational motion produces a deflection to the +right. For clockwise rotational motion, it produces a deflection to +the left.

    +

    The Coriolis force associated with Earth’s rotational motion is +responsible for the circulating or cyclonic weather patterns +associated with hurricanes and cyclones, as illustrated in the figure +here. Basically, a pressure gradient gives rise to air currents that +tend to flow from high pressure to low pressure regions. But as the +air flows toward the low pressure region, the Coriolis force deflects +the air currents away from their straight line paths. Since the +projection of \(\Omega\) perpendicular to the local tangent plane +changes sign as one crosses the equator, the direction of the cyclonic +motion (either counter-clockwise or clockwise) is different in the +Northern and Southern hemispheres.

    + + +

    + + +

    As an example, assume a ball is dropped from a height \(h=500\)m above Minneapolis. Due to the +Coriolis force, it is deflected by an amount \(\delta x\) and \(\delta +y\). We want to find the deflection due to the Coriolis force. Here we ignore the centrifugal terms.

    +

    The equations of motion are:

    +
    +\[\begin{split} +\begin{eqnarray*} +\frac{dv_x}{dt}&=&-2(\Omega_yv_z-\Omega_zv_y),\\ +\frac{dv_y}{dt}&=&-2(\Omega_zv_x-\Omega_xv_z),\\ +\frac{dv_z}{dt}&=&-g-2(\Omega_xv_y-\Omega_yv_x),\\ +\Omega_z&=&\Omega\cos\theta,~~~\Omega_y=\Omega\sin\theta,~~~\Omega_x=0. +\end{eqnarray*} +\end{split}\]
    +

    Here the coordinate system is \(\hat{x}\) and points east, \(\hat{y}\) points +north and \(\hat{z}\) points upward.

    +

    One can now ignore all the Coriolis terms on the right-hand sides +except for those with \(v_z\). The other terms will all be doubly +small. One can also throw out terms with \(\Omega_x\). This gives

    +
    +\[\begin{split} +\begin{eqnarray*} +\frac{dv_x}{dt}&\approx& -2\Omega v_z\sin\theta,\\ +\frac{dv_y}{dt}&\approx& 0,\\ +\frac{dv_z}{dt}&\approx& -g. +\end{eqnarray*} +\end{split}\]
    +

    There will be no significant deflection in the \(y\) direction, \(\delta +y=0\), but in the \(x\) direction one can substitute \(v_z=-gt\) above,

    +
    +\[\begin{split} +\begin{eqnarray*} +v_x&\approx&\int_0^t dt'~2\Omega gt'\sin\theta=\Omega gt^2\sin\theta,\\ +\delta x&\approx& \int_0^t dt'~v_x(t')=\frac{g\Omega\sin\theta t^3}{3}. +\end{eqnarray*} +\end{split}\]
    +

    One can find the deflections by using \(h=\frac{1}{2}gt^2\), to find the +time, and using the all-knowing internet to see that the latitude of +Minneapolis is \(44.6^\circ\) or \(\theta=45.4^\circ\).

    +
    +\[\begin{split} +\begin{eqnarray*} +t&=&\sqrt{2h/g}=10.1~{\rm s},\\ +\Omega&=&\frac{2\pi}{3600\cdot 24~{\rm s}}=7.27\times 10^{-5}~{\rm s}^{-1},\\ +\delta x&=&17.4~{\rm cm}~~{\rm(east)}. +\end{eqnarray*} +\end{split}\]
    +
    +
    +

    6.5. Accelerating and Rotating Frames

    +

    It is now simple to bring together the equations for an accelerating and rotating frame. Using our results we have the equations of motion for an object in an accelerating and rotating frame with respect to an inertial frame

    +
    +\[ +m\ddot{\boldsymbol{r}}_{S}=\boldsymbol{F}+m\boldsymbol{r}\times\dot{\boldsymbol{\Omega}}+2m\boldsymbol{v}_S\times\boldsymbol{\Omega}+m\left(\boldsymbol{\Omega}\times\boldsymbol{r}\right)\times\boldsymbol{\Omega}-\boldsymbol{a}_{S_0}, +\]
    +

    where the last term is the acceleration of the accelerating frame seen from the inertial frame.

    +
    +
    +

    6.6. The Foucault Pendulum

    +

    The Foucault +Pendulum is simply +a regular pendulum moving in both horizontal directions, and with the +Coriolis force included. It is explained at its simplest if we +consider a pendulum positioned at the North pole. Foucault’s +experiment was actually the first laboratory demonstration that the +Earth is rotating. The experiment is rather simple and many physics +department worldwide have their own pendulum.

    +

    In the original experiment done in Paris in 1851, Foucault used a +massive pendulum of 28kg and 67m long.

    +

    If use an inertial frame with the North pole as its origin, the Earth +below the pendulum rotates with a period of 24h (actually 23h and +56min). Seen with respect to the surface of the Earth, the plane of +the pendulum moves in the opposite direction of the rotation of the Earth.

    +

    If we were to perform the experiment in other places, the setup is slightly more complicated since the pendulum will then rotate with the Earth. The net effect is a slower rotation compared to North pole.

    + + +

    + + +

    Let us look at the equations we need to solve.

    +
    +\[ +\begin{eqnarray*} +m\ddot{\boldsymbol{r}}&=&\boldsymbol{T}+m\boldsymbol{g}-2m\boldsymbol{\Omega}\times\boldsymbol{v}, +\end{eqnarray*} +\]
    +

    as the centrifugal force term is absorbed into the definition of +\(\boldsymbol{g}\). The magnitude of the tension, \(\boldsymbol{T}\), is considered +constant because we consider only small oscillations. Then \(T\approx mg\), and the components, using \(\hat{x},\hat{y}\) to correspond to east +and north respectively, are

    +
    +\[ +\begin{eqnarray*} +T_x=-mgx/L,~~~T_y=-mgy/L. +\end{eqnarray*} +\]
    +

    If \(\Omega\) is the rotation of the earth, and if \(\theta\) is the polar angle, \(\pi\)-latitude,

    +
    +\[\begin{split} +\begin{eqnarray*} +\ddot{x}&=&-gx/L+2\dot{y}\Omega_z,\\ +\ddot{y}&=&-gy/L-2\dot{x}\Omega_z. +\end{eqnarray*} +\end{split}\]
    +

    Here we have used the fact that the oscillations are sufficiently +small so we can ignore \(v_z\). Using \(\Omega_0\equiv\sqrt{k/m}\),

    +
    +\[\begin{split} +\begin{eqnarray*} +\ddot{x}-2\Omega_z\dot{y}+\Omega_0^2x&=&0\\ +\ddot{y}+2\Omega_z\dot{x}+\Omega_0^2y&=&0, +\end{eqnarray*} +\end{split}\]
    +

    where \(\Omega_z=|\boldsymbol{\Omega}|\cos\theta\), with \(\theta\) being the +polar angle (zero at the north pole). The terms linear in time +derivatives are what make life difficult. This will be solved with a +trick. We will incorporate both differential equations into a single +complex equation where the first/second are the real/imaginary parts.

    +
    +\[\begin{split} +\begin{eqnarray*} +\eta\equiv x+iy,\\ +\ddot{\eta}+2i\Omega_z\dot{\eta}+\Omega_0^2\eta&=&0. +\end{eqnarray*} +\end{split}\]
    +

    Now, we guess at a form for the solutions, \(\eta(t)=e^{-i\alpha t}\), +which turns the differential equation into

    +
    +\[\begin{split} +\begin{eqnarray*} +-\alpha^2+2\Omega_z\alpha+\Omega_0^2&=&0,\\ +\alpha&=&\Omega_z\pm \sqrt{\Omega_z^2+\Omega_0^2},\\ +&\approx&\Omega_z\pm \Omega_0. +\end{eqnarray*} +\end{split}\]
    +

    The solution with two arbitrary constants is then

    +
    +\[ +\begin{eqnarray*} +\eta&=&e^{-i\Omega_zt}\left[C_1e^{i\Omega_0t}+C_2e^{-i\Omega_0t}\right]. +\end{eqnarray*} +\]
    +

    Here, \(C_1\) and \(C_2\) are complex, so they actually represent four +arbitrary numbers. These four numbers should be fixed by the four +initial conditions, i.e. \(x(t=0), \dot{x}(t=0), y(t=0)\) and +\(\dot{y}(t=0)\). With some lengthy algebra, one can rewrite the +expression as

    + +
    +
    +\[ +\begin{eqnarray*} +\label{eq:precmess} \tag{5} +\eta&=&e^{-i\Omega_zt}\left[A\cos(\Omega_0t+\phi_A)+iB\cos(\Omega_0t+\phi_B)\right]. +\end{eqnarray*} +\]
    +

    Here, the four coefficients are represented by the two real arbitrary +real amplitudes, \(A\) and \(B\), and two arbitrary phases, \(\phi_A\) and +\(\phi_B\). For an initial condition where \(y=0\) at \(t=0\), one can see +that \(B=0\). This then gives

    +
    +\[\begin{split} +\begin{eqnarray*} +\eta(t)&=&Ae^{-i\Omega_zt}\cos(\Omega_0t+\gamma)\\ +\nonumber +&=&A\cos\Omega_zt\cos(\Omega_0t+\gamma)+iA\sin\Omega_zt\cos(\Omega_0t+\gamma). +\end{eqnarray*} +\end{split}\]
    +

    Translating into \(x\) and \(y\),

    +
    +\[\begin{split} +\begin{eqnarray} +x&=&A\cos\Omega_zt\cos(\Omega_0t+\gamma),\\ +\nonumber +y&=&A\sin\Omega_zt\cos(\Omega_0t+\gamma). +\end{eqnarray} +\end{split}\]
    +

    Assuming the pendulum’s frequency is much higher than Earth’s +rotational frequency, \(\Omega_0>>\Omega_z\), one can see that the plane +of the pendulum simply precesses with angular velocity +\(\Omega_z\). This means that in this limit the pendulum oscillates only +in the \(x\)-direction with frequency many times before the phase +\(\Omega_zt\) becomes noticeable. Eventually, when \(\Omega_zt=\pi/2\), +the motion is along the \(y\)-direction. If you were at the north pole, +the motion would switch from the \(x\)-direction to the \(y\) direction +every 6 hours. Away from the north pole, \(\Omega_z\ne|\boldsymbol{\Omega}|\) +and the precession frequency is less. At the equator it does not +precess at all. If one were to repeat for the solutions where \(A=0\) +and \(B\ne 0\), one would look at motions +that started in the \(y\)-direction, then precessed toward the \(-x\) +direction. Linear combinations of the two sets of solutions give +pendulum motions that resemble ellipses rather than simple +back-and-forth motion.

    +
    +
    +

    6.7. Euler’s Theorem from a Linear Algebra Perspective

    +

    this material will be added soon

    +
    +
    + + + + +
    + +
    +
    + + + +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/content.html b/doc/src/LectureNotes/testbook/_build/html/content.html new file mode 100644 index 000000000..efd4c2067 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/content.html @@ -0,0 +1,249 @@ + + + + + + + + + Content in Jupyter Book — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + +
    + + +
    +
    + Contents +
    + +
    +
    +
    +
    + +
    + +
    +

    Content in Jupyter Book

    +

    There are many ways to write content in Jupyter Book. This short section +covers a few tips for how to do so.

    +
    + + + + +
    + +
    +
    + + +
    + + +
    +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/genindex.html b/doc/src/LectureNotes/testbook/_build/html/genindex.html new file mode 100644 index 000000000..3ce82e271 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/genindex.html @@ -0,0 +1,216 @@ + + + + + + + + + Index — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    +
    + +
    + + +

    Index

    + +
    + +
    + + +
    + +
    +
    + + +
    + + +
    +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/index.html b/doc/src/LectureNotes/testbook/_build/html/index.html new file mode 100644 index 000000000..de49afb2f --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/index.html @@ -0,0 +1,2 @@ + + diff --git a/doc/src/LectureNotes/testbook/_build/html/intro.html b/doc/src/LectureNotes/testbook/_build/html/intro.html new file mode 100644 index 000000000..755f7564b --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/intro.html @@ -0,0 +1,715 @@ + + + + + + + + + PHY321, Classical Mechanics I, Michigan State University, Spring 2021 — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + +
    +
    + +
    + +
    +

    PHY321, Classical Mechanics I, Michigan State University, Spring 2021

    +

    Here you will find a general overview of the course, with learning outcomes, teaching schedule etc.

    +
    +

    Teaching team, grading and other practicalities

    + + + + + + + + + + + + + + + +

    Lectures

    Location

    Monday 3:00-3:50pm

    Wednesday 3:00-3:50pm

    Friday 3:00-3:50pm

    Room 1420 BPS

    + + + + + + + + + + + + + + + +

    Instructor

    Email

    Office

    Office phone/cellphone

    Morten Hjorth-Jensen https://github.com/mhjensen

    hjensen@msu.edu

    Office: NSCL/FRIB 2131

    5179087290/5172491375/+47-48257387

    + + + + + + + + + + + +

    Office Hours

    Monday/Wednesday 4-5:00pm, Room 2131 NSCL/FRIB

    or immediately after class

    + + + + + + + + + + + +

    Homework Grader

    Email

    Julie Butler

    butler@frib.msu.edu

    + + + + + + + + + +

    Office Hours Julie Butler

    TBA

    + + + + + + + + + + + +

    Learning Assistant

    Email

    Jeremy Rebenstock

    + + + + + + + + + + + +

    Office Hours TBA

    + + + + + + + + + + + +

    Additional Class

    Location

    Wednesday 5:00-6pm

    Room 1400 BPS

    +
    +

    Grading and dates

    + + + + + + + + + + + + + + + + + + + + + + + +

    Activity

    Percentage of total score

    Homeworks, 9 in total and due Mondays the week after

    20%

    First Midterm Project, due Wednesday March 11

    25%

    Second Midterm Project, due Friday April 17

    25%

    Final Exam project, due May 1

    30%

    Extra Credit Assignment, hw10, (Due Friday April 24)

    10%

    + + + + + + + + + + + + + + + + + + + + + +

    Grading scale

    4.0(90%)

    3.5(80%)

    3.0(70%)

    2.5(60%)

    2.0(50%)

    1.5(40%)

    1.0(30%)

    +
    +
    +
    +

    Possible textbooks and lecture notes

    +

    Recommended textbook:

    +
      +
    • JRT: John R. Taylor, Classical Mechanics (Univ. Sci. Books 2005), https://www.uscibooks.com/taylor2.htm, see also https://github.com/mhjensen/Physics321/tree/master/doc/Literature +Additional textbooks:

    • +
    • AMS: Anders Malthe-Sørenssen, Elementary Mechanics using Python (Springer 2015), https://www.springer.com/gp/book/9783319195957 and https://github.com/mhjensen/Physics321/tree/master/doc/Literature

    • +
    • Lecture notes: Posted lecture notes are in the doc/pub folder here or at https://mhjensen.github.io/Physics321/doc/web/course.html for easier viewing. They are not meant to be a replacement for textbook. These notes are updated on a weekly basis and a git pull should thus always give you the latest update.

    • +
    +
    + +
    +

    Learning outcomes

    +

    After the course you should:

    +
      +
    • be able to analyze forces that act on objects, apply Newton’s laws to determine the equations of motion, and solve these analytically and numerically,

    • +
    • Know about inertial frames and their relation to accelerating and rotating frames (non-inertial frames)

    • +
    • Know about forces, work, energy, angular momentum, linear momentum and conservation laws

    • +
    • Know about various types of motions, falling objects, objects moving in various fields

    • +
    • Know how to analyze energy diagrams and defining effective potential

    • +
    • Have knowledge about small oscillations, Harmonic oscillator potential and equations of motion

    • +
    • Have knowledge about transformation of variables that allow for analytical solutions, example two-body problems

    • +
    • Have knowledge about central forces and two-body problems, center-of-mass and relative coordinates as reference frame

    • +
    • Have knowledge about two-body scattering problems, classical scattering cross section

    • +
    • Have knowledge about Variational calculus and Lagrangian formalism

    • +
    • Know how to derive the equations of motion from the Lagrangian formalism with and without constraints (Lagrangian multipliers)

    • +
    +

    To solve many of these problems, we have through different projects and weekly exercises studied many systems numerically, from falling objects with and without friction/air resistance, small oscillations (harmonic oscillator), gravitational problems and other central force problems, rotations and the classical pendulum. To solve these systems, we have applied different algorithms for solving differential equations. These are

    +
      +
    • Euler-Cromer and Velocity-Verlet as energy conserving algorithms (time-independent forces)

    • +
    • Runge-Kutta family of algorithms for time-dependent forces +We have also, in connection with for example the work-energy theorem studied methods for evaluating integrals. These are

    • +
    • Numerical integration using the Trapezoidal, midpoint and Simpson’s rule.

    • +
    +

    You should also have acquired skills in structuring a numerical project, as well as having developed a critical understanding of the pros and cons of the methods and an understanding of their limits and what can go wrong. Computing means solving scientific problems using computers. It covers numerical as well as symbolic computing. Computing is also about developing an understanding of the scientific process by enhancing algorithmic thinking when solving problems. Computing competence has +always been a central part of the science and engineering education. +In particular, some of the competences that are important in the development of your own understanding of +computations, we would like to emphasize

    +
      +
    • derivation, verification, and implementation of algorithms

    • +
    • understanding what can go wrong with algorithms

    • +
    • overview of important, known algorithms for solving mechanics problems (To a extent large differential equations and integration)

    • +
    • understanding how algorithms are used to solve mathematical problems

    • +
    • Making science (your results) reproducible

    • +
    • algorithmic thinking for gaining deeper insights about scientific problems

    • +
    +
    +
    +
    +
    + + + + +
    + +
    +
    + + + +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/lecturenotes/CONDUCT.html b/doc/src/LectureNotes/testbook/_build/html/lecturenotes/CONDUCT.html new file mode 100644 index 000000000..eb43c32c0 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/lecturenotes/CONDUCT.html @@ -0,0 +1,320 @@ + + + + + + + + + Code of Conduct — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + +
    + + + +
    +
    +
    + +
    + +
    +

    Code of Conduct

    +
    +

    Our Pledge

    +

    In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.

    +
    +
    +

    Our Standards

    +

    Examples of behavior that contributes to creating a positive environment include:

    +
      +
    • Using welcoming and inclusive language

    • +
    • Being respectful of differing viewpoints and experiences

    • +
    • Gracefully accepting constructive criticism

    • +
    • Focusing on what is best for the community

    • +
    • Showing empathy towards other community members

    • +
    +

    Examples of unacceptable behavior by participants include:

    +
      +
    • The use of sexualized language or imagery and unwelcome sexual attention or advances

    • +
    • Trolling, insulting/derogatory comments, and personal or political attacks

    • +
    • Public or private harassment

    • +
    • Publishing others’ private information, such as a physical or electronic address, without explicit permission

    • +
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    • +
    +
    +
    +

    Our Responsibilities

    +

    Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.

    +

    Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.

    +
    +
    +

    Scope

    +

    This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.

    +
    +
    +

    Enforcement

    +

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.

    +

    Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project’s leadership.

    +
    +
    +

    Attribution

    +

    This Code of Conduct is adapted from the Contributor Covenant, version 1.4.

    +
    +
    + + + + +
    + +
    +
    + + +
    + + +
    +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/lecturenotes/CONTRIBUTING.html b/doc/src/LectureNotes/testbook/_build/html/lecturenotes/CONTRIBUTING.html new file mode 100644 index 000000000..530a8bbf9 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/lecturenotes/CONTRIBUTING.html @@ -0,0 +1,339 @@ + + + + + + + + + Contributing — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + +
    + + + +
    +
    +
    + +
    + +
    +

    Contributing

    +

    Contributions are welcome, and they are greatly appreciated! Every little bit +helps, and credit will always be given. You can contribute in the ways listed below.

    +
    +

    Report Bugs

    +

    Report bugs using GitHub issues.

    +

    If you are reporting a bug, please include:

    +
      +
    • Your operating system name and version.

    • +
    • Any details about your local setup that might be helpful in troubleshooting.

    • +
    • Detailed steps to reproduce the bug.

    • +
    +
    +
    +

    Fix Bugs

    +

    Look through the GitHub issues for bugs. Anything tagged with “bug” and “help +wanted” is open to whoever wants to implement it.

    +
    +
    +

    Implement Features

    +

    Look through the GitHub issues for features. Anything tagged with “enhancement” +and “help wanted” is open to whoever wants to implement it.

    +
    +
    +

    Write Documentation

    +

    LectureNotes could always use more documentation, whether as part of the +official LectureNotes docs, in docstrings, or even on the web in blog posts, +articles, and such.

    +
    +
    +

    Submit Feedback

    +

    The best way to send feedback is to file an issue on GitHub.

    +

    If you are proposing a feature:

    +
      +
    • Explain in detail how it would work.

    • +
    • Keep the scope as narrow as possible, to make it easier to implement.

    • +
    • Remember that this is a volunteer-driven project, and that contributions +are welcome :)

    • +
    +
    +
    +

    Get Started

    +

    Ready to contribute? Here’s how to set up LectureNotes for local development.

    +
      +
    1. Fork the repo on GitHub.

    2. +
    3. Clone your fork locally.

    4. +
    5. Install your local copy into a virtualenv, e.g., using conda.

    6. +
    7. Create a branch for local development and make changes locally.

    8. +
    9. Commit your changes and push your branch to GitHub.

    10. +
    11. Submit a pull request through the GitHub website.

    12. +
    +
    +
    +

    Code of Conduct

    +

    Please note that the LectureNotes project is released with a Contributor Code of Conduct. By contributing to this project you agree to abide by its terms.

    +
    +
    + + + + +
    + +
    +
    + + +
    + + +
    +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/lecturenotes/README.html b/doc/src/LectureNotes/testbook/_build/html/lecturenotes/README.html new file mode 100644 index 000000000..39fa88382 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/lecturenotes/README.html @@ -0,0 +1,309 @@ + + + + + + + + + LectureNotes — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + +
    + + + +
    +
    +
    + +
    + +
    +

    LectureNotes

    +

    Test book

    +
    +

    Usage

    +
    +

    Building the book

    +

    If you’d like to develop on and build the LectureNotes book, you should:

    +
      +
    • Clone this repository and run

    • +
    • Run pip install -r requirements.txt (it is recommended you do this within a virtual environment)

    • +
    • (Recommended) Remove the existing LectureNotes/_build/ directory

    • +
    • Run jupyter-book build LectureNotes/

    • +
    +

    A fully-rendered HTML version of the book will be built in LectureNotes/_build/html/.

    +
    +
    +

    Hosting the book

    +

    The html version of the book is hosted on the gh-pages branch of this repo. A GitHub actions workflow has been created that automatically builds and pushes the book to this branch on a push or pull request to main.

    +

    If you wish to disable this automation, you may remove the GitHub actions workflow and build the book manually by:

    +
      +
    • Navigating to your local build; and running,

    • +
    • ghp-import -n -p -f LectureNotes/_build/html

    • +
    +

    This will automatically push your build to the gh-pages branch. More information on this hosting process can be found here.

    +
    +
    +
    +

    Contributors

    +

    We welcome and recognize all contributions. You can see a list of current contributors in the contributors tab.

    +
    +
    +

    Credits

    +

    This project is created using the excellent open source Jupyter Book project and the executablebooks/cookiecutter-jupyter-book template.

    +
    +
    + + + + +
    + +
    +
    + + +
    + + +
    +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/content.html b/doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/content.html new file mode 100644 index 000000000..8f4660b96 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/content.html @@ -0,0 +1,249 @@ + + + + + + + + + Content in Jupyter Book — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + +
    + + +
    +
    + Contents +
    + +
    +
    +
    +
    + +
    + +
    +

    Content in Jupyter Book

    +

    There are many ways to write content in Jupyter Book. This short section +covers a few tips for how to do so.

    +
    + + + + +
    + +
    +
    + + +
    + + +
    +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/intro.html b/doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/intro.html new file mode 100644 index 000000000..884e4e99d --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/intro.html @@ -0,0 +1,250 @@ + + + + + + + + + Welcome to your Jupyter Book — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + +
    + + +
    +
    + Contents +
    + +
    +
    +
    +
    + +
    + +
    +

    Welcome to your Jupyter Book

    +

    This is a small sample book to give you a feel for how book content is +structured.

    +

    Check out the content pages bundled with this sample book to get started.

    +
    + + + + +
    + +
    +
    + + +
    + + +
    +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/markdown.html b/doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/markdown.html new file mode 100644 index 000000000..8e9bb5015 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/markdown.html @@ -0,0 +1,386 @@ + + + + + + + + + Markdown Files — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + +
    + + + +
    +
    +
    + +
    + +
    +

    Markdown Files

    +

    Whether you write your book’s content in Jupyter Notebooks (.ipynb) or +in regular markdown files (.md), you’ll write in the same flavor of markdown +called MyST Markdown.

    +
    +

    What is MyST?

    +

    MyST stands for “Markedly Structured Text”. It +is a slight variation on a flavor of markdown called “CommonMark” markdown, +with small syntax extensions to allow you to write roles and directives +in the Sphinx ecosystem.

    +
    +
    +

    What are roles and directives?

    +

    Roles and directives are two of the most powerful tools in Jupyter Book. They +are kind of like functions, but written in a markup language. They both +serve a similar purpose, but roles are written in one line, whereas +directives span many lines. They both accept different kinds of inputs, +and what they do with those inputs depends on the specific role or directive +that is being called.

    +
    +

    Using a directive

    +

    At its simplest, you can insert a directive into your book’s content like so:

    +
    ```{mydirectivename}
    +My directive content
    +```
    +
    +
    +

    This will only work if a directive with name mydirectivename already exists +(which it doesn’t). There are many pre-defined directives associated with +Jupyter Book. For example, to insert a note box into your content, you can +use the following directive:

    +
    ```{note}
    +Here is a note
    +```
    +
    +
    +

    This results in:

    +
    +

    Note

    +

    Here is a note

    +
    +

    In your built book.

    +

    For more information on writing directives, see the +MyST documentation.

    +
    +
    +

    Using a role

    +

    Roles are very similar to directives, but they are less-complex and written +entirely on one line. You can insert a role into your book’s content with +this pattern:

    +
    Some content {rolename}`and here is my role's content!`
    +
    +
    +

    Again, roles will only work if rolename is a valid role’s name. For example, +the doc role can be used to refer to another page in your book. You can +refer directly to another page by its relative path. For example, the +role syntax {doc}`intro` will result in: Welcome to your Jupyter Book.

    +

    For more information on writing roles, see the +MyST documentation.

    +
    +
    +

    Adding a citation

    +

    You can also cite references that are stored in a bibtex file. For example, +the following syntax: {cite}`holdgraf_evidence_2014` will render like +this: [HdHPK14].

    +

    Moreover, you can insert a bibliography into your page with this syntax. +The {bibliography} directive must be used for all the {cite} roles to +render properly. +For example, if the references for your book are stored in references.bib, +then the bibliography is inserted with:

    +
    ```{bibliography} references.bib
    +```
    +
    +
    +

    Resulting in a rendered bibliography that looks like:

    +

    +
    HdHPK14
    +

    Christopher Ramsay Holdgraf, Wendy de Heer, Brian N. Pasley, and Robert T. Knight. Evidence for Predictive Coding in Human Auditory Cortex. In International Conference on Cognitive Neuroscience. Brisbane, Australia, Australia, 2014. Frontiers in Neuroscience.

    +
    +
    +

    +
    +
    +

    Executing code in your markdown files

    +

    If you’d like to include computational content inside these markdown files, +you can use MyST Markdown to define cells that will be executed when your +book is built. Jupyter Book uses jupytext to do this.

    +

    First, add Jupytext metadata to the file. For example, to add Jupytext metadata +to this markdown page, run this command:

    +
    jupyter-book myst init markdown.md
    +
    +
    +

    Once a markdown file has Jupytext metadata in it, you can add the following +directive to run the code at build time:

    +
    ```{code-cell}
    +print("Here is some code to execute")
    +```
    +
    +
    +

    When your book is built, the contents of any {code-cell} blocks will be +executed with your default Jupyter kernel, and their outputs will be displayed +in-line with the rest of your content.

    +

    For more information about executing computational content with Jupyter Book, +see The MyST-NB documentation.

    +
    +
    +
    + + + + +
    + +
    +
    + + +
    + + +
    +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/notebooks.html b/doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/notebooks.html new file mode 100644 index 000000000..d08e658da --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/lecturenotes/lecturenotes/notebooks.html @@ -0,0 +1,357 @@ + + + + + + + + + Content with notebooks — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + + + +
    + + + +
    +
    +
    + +
    + +
    +

    Content with notebooks

    +

    You can also create content with Jupyter Notebooks. This means that you can include +code blocks and their outputs in your book.

    +
    +

    Markdown + notebooks

    +

    As it is markdown, you can embed images, HTML, etc into your posts!

    +

    +

    You an also \(add_{math}\) and

    +
    +\[ +math^{blocks} +\]
    +

    or

    +
    +\[\begin{split} +\begin{aligned} +\mbox{mean} la_{tex} \\ \\ +math blocks +\end{aligned} +\end{split}\]
    +

    But make sure you $Escape $your $dollar signs $you want to keep!

    +
    +
    +

    MyST markdown

    +

    MyST markdown works in Jupyter Notebooks as well. For more information about MyST markdown, check +out the MyST guide in Jupyter Book, +or see the MyST markdown documentation.

    +
    +
    +

    Code blocks and outputs

    +

    Jupyter Book will also embed your code blocks and output in your book. +For example, here’s some sample Matplotlib code:

    +
    +
    +
    from matplotlib import rcParams, cycler
    +import matplotlib.pyplot as plt
    +import numpy as np
    +plt.ion()
    +
    +
    +
    +
    +
    +
    +
    # Fixing random state for reproducibility
    +np.random.seed(19680801)
    +
    +N = 10
    +data = [np.logspace(0, 1, 100) + np.random.randn(100) + ii for ii in range(N)]
    +data = np.array(data).T
    +cmap = plt.cm.coolwarm
    +rcParams['axes.prop_cycle'] = cycler(color=cmap(np.linspace(0, 1, N)))
    +
    +
    +from matplotlib.lines import Line2D
    +custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4),
    +                Line2D([0], [0], color=cmap(.5), lw=4),
    +                Line2D([0], [0], color=cmap(1.), lw=4)]
    +
    +fig, ax = plt.subplots(figsize=(10, 5))
    +lines = ax.plot(data)
    +ax.legend(custom_lines, ['Cold', 'Medium', 'Hot']);
    +
    +
    +
    +
    +../../_images/notebooks_2_0.png +
    +
    +

    There is a lot more that you can do with outputs (such as including interactive outputs) +with your book. For more information about this, see the Jupyter Book documentation.

    +
    +
    + + + + +
    + +
    +
    + + +
    + + +
    +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/markdown.html b/doc/src/LectureNotes/testbook/_build/html/markdown.html new file mode 100644 index 000000000..fecb9350a --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/markdown.html @@ -0,0 +1,386 @@ + + + + + + + + + Markdown Files — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + +
    + + + +
    +
    +
    + +
    + +
    +

    Markdown Files

    +

    Whether you write your book’s content in Jupyter Notebooks (.ipynb) or +in regular markdown files (.md), you’ll write in the same flavor of markdown +called MyST Markdown.

    +
    +

    What is MyST?

    +

    MyST stands for “Markedly Structured Text”. It +is a slight variation on a flavor of markdown called “CommonMark” markdown, +with small syntax extensions to allow you to write roles and directives +in the Sphinx ecosystem.

    +
    +
    +

    What are roles and directives?

    +

    Roles and directives are two of the most powerful tools in Jupyter Book. They +are kind of like functions, but written in a markup language. They both +serve a similar purpose, but roles are written in one line, whereas +directives span many lines. They both accept different kinds of inputs, +and what they do with those inputs depends on the specific role or directive +that is being called.

    +
    +

    Using a directive

    +

    At its simplest, you can insert a directive into your book’s content like so:

    +
    ```{mydirectivename}
    +My directive content
    +```
    +
    +
    +

    This will only work if a directive with name mydirectivename already exists +(which it doesn’t). There are many pre-defined directives associated with +Jupyter Book. For example, to insert a note box into your content, you can +use the following directive:

    +
    ```{note}
    +Here is a note
    +```
    +
    +
    +

    This results in:

    +
    +

    Note

    +

    Here is a note

    +
    +

    In your built book.

    +

    For more information on writing directives, see the +MyST documentation.

    +
    +
    +

    Using a role

    +

    Roles are very similar to directives, but they are less-complex and written +entirely on one line. You can insert a role into your book’s content with +this pattern:

    +
    Some content {rolename}`and here is my role's content!`
    +
    +
    +

    Again, roles will only work if rolename is a valid role’s name. For example, +the doc role can be used to refer to another page in your book. You can +refer directly to another page by its relative path. For example, the +role syntax {doc}`intro` will result in: PHY321, Classical Mechanics I, Michigan State University, Spring 2021.

    +

    For more information on writing roles, see the +MyST documentation.

    +
    +
    +

    Adding a citation

    +

    You can also cite references that are stored in a bibtex file. For example, +the following syntax: {cite}`holdgraf_evidence_2014` will render like +this: [HdHPK14].

    +

    Moreoever, you can insert a bibliography into your page with this syntax: +The {bibliography} directive must be used for all the {cite} roles to +render properly. +For example, if the references for your book are stored in references.bib, +then the bibliography is inserted with:

    +
    ```{bibliography} references.bib
    +```
    +
    +
    +

    Resulting in a rendered bibliography that looks like:

    +

    +
    HdHPK14
    +

    Christopher Ramsay Holdgraf, Wendy de Heer, Brian N. Pasley, and Robert T. Knight. Evidence for Predictive Coding in Human Auditory Cortex. In International Conference on Cognitive Neuroscience. Brisbane, Australia, Australia, 2014. Frontiers in Neuroscience.

    +
    +
    +

    +
    +
    +

    Executing code in your markdown files

    +

    If you’d like to include computational content inside these markdown files, +you can use MyST Markdown to define cells that will be executed when your +book is built. Jupyter Book uses jupytext to do this.

    +

    First, add Jupytext metadata to the file. For example, to add Jupytext metadata +to this markdown page, run this command:

    +
    jupyter-book myst init markdown.md
    +
    +
    +

    Once a markdown file has Jupytext metadata in it, you can add the following +directive to run the code at build time:

    +
    ```{code-cell}
    +print("Here is some code to execute")
    +```
    +
    +
    +

    When your book is built, the contents of any {code-cell} blocks will be +executed with your default Jupyter kernel, and their outputs will be displayed +in-line with the rest of your content.

    +

    For more information about executing computational content with Jupyter Book, +see The MyST-NB documentation.

    +
    +
    +
    + + + + +
    + +
    +
    + + +
    + + +
    +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/notebooks.html b/doc/src/LectureNotes/testbook/_build/html/notebooks.html new file mode 100644 index 000000000..4d7bba8f1 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/notebooks.html @@ -0,0 +1,337 @@ + + + + + + + + + Content with notebooks — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + + + +
    + + + +
    +
    +
    + +
    + +
    +

    Content with notebooks

    +

    You can also create content with Jupyter Notebooks. This means that you can include +code blocks and their outputs in your book.

    +
    +

    Markdown + notebooks

    +

    As it is markdown, you can embed images, HTML, etc into your posts!

    +

    +

    You an also \(add_{math}\) and

    +
    +\[ +math^{blocks} +\]
    +

    or

    +
    +\[\begin{split} +\begin{aligned} +\mbox{mean} la_{tex} \\ \\ +math blocks +\end{aligned} +\end{split}\]
    +

    But make sure you $Escape $your $dollar signs $you want to keep!

    +
    +
    +

    MyST markdown

    +

    MyST markdown works in Jupyter Notebooks as well. For more information about MyST markdown, check +out the MyST guide in Jupyter Book, +or see the MyST markdown documentation.

    +
    +
    +

    Code blocks and outputs

    +

    Jupyter Book will also embed your code blocks and output in your book. +For example, here’s some sample Matplotlib code:

    +
    +
    +
    from matplotlib import rcParams, cycler
    +import matplotlib.pyplot as plt
    +import numpy as np
    +plt.ion()
    +
    +
    +
    +
    +
    +
    +
    # Fixing random state for reproducibility
    +np.random.seed(19680801)
    +
    +N = 10
    +data = [np.logspace(0, 1, 100) + np.random.randn(100) + ii for ii in range(N)]
    +data = np.array(data).T
    +cmap = plt.cm.coolwarm
    +rcParams['axes.prop_cycle'] = cycler(color=cmap(np.linspace(0, 1, N)))
    +
    +
    +from matplotlib.lines import Line2D
    +custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4),
    +                Line2D([0], [0], color=cmap(.5), lw=4),
    +                Line2D([0], [0], color=cmap(1.), lw=4)]
    +
    +fig, ax = plt.subplots(figsize=(10, 5))
    +lines = ax.plot(data)
    +ax.legend(custom_lines, ['Cold', 'Medium', 'Hot']);
    +
    +
    +
    +
    +_images/notebooks_2_01.png +
    +
    +

    There is a lot more that you can do with outputs (such as including interactive outputs) +with your book. For more information about this, see the Jupyter Book documentation

    +
    +
    + + + + +
    + +
    +
    + + +
    + + +
    +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/objects.inv b/doc/src/LectureNotes/testbook/_build/html/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..ee601e6e4fb6378c167a33327b29172a5cc9fd1a GIT binary patch literal 723 zcmV;^0xbO_AX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkVd30!R zZVDqHR%LQ?X>V>iAPOTORA^-&a%F8{X>Md?av*PJAarPHb0B7EY-J#6b0A}HZE$jB zb8}^6Aa!$TZf78RY-wUH3V7O$RZVZ(Fbuu>R}k1W-kS6a*lkVQHN%nyO^RWsLXnwR zs4QlZoXr1zlx1f%>ZZLYF{$_XL_XOv7h8{Z2+n6;Gm?-FK{m0^xi2(KjJK4P(kn7a zlN$AGAI0s9t&li?r7C!xQa}yh0oQ2JNQ7G}3UmO%WE?G&$G(8WvI^gV!9Jm>oK=HX_J6P@VNqokgl& zWS<9cW6*A@aGZjf%A!^|W(KsonhLboAL!0|=*}bEov;NN7IN>T(pvD5Thv7l>LQ|+ zdrDW7RWP@-(pVfSUG`uuBW6Y>RV>>p?p|y<55)@ObW~gqfIL5#4WETt$|vsPzPumZ7s!rlbm$6v10v%JCy}< zJdI9~ltYQ{z6hh_pqdH6l$^@aRjabs!d--~B!v4F@pR!nxW^Q{-Op6dX)= zrb^~)2*Z8}$A2_xht?_2<6dlSXwK+lG)y%6vt$dCNB3oXKf8V$FJBhy%eRfnFxZeA z7H-iirsc!r>Tx-leLqHb*z~{oR;|h~ye{Fx&A036&6`v)9Z7!1#4IGbB%OyIBfPu$ zxJBNEznbGaTboOYTJp^VPf$^5KU%Ey*2n5~oCwnvd#m)(?uB*5I^4&q9JY5mxK}=h zLoVr4epFvUS_;`%IEw>>7X47EAuWe#+uJW%+JLJlYd?= FS%zWoQ)K`E literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/html/reports/chapter1.log b/doc/src/LectureNotes/testbook/_build/html/reports/chapter1.log new file mode 100644 index 000000000..44c725b72 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/reports/chapter1.log @@ -0,0 +1,31 @@ +Traceback (most recent call last): + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/jupyter_cache/executors/utils.py", line 51, in single_nb_execution + executenb( + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 1082, in execute + return NotebookClient(nb=nb, resources=resources, km=km, **kwargs).execute() + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/util.py", line 74, in wrapped + return just_run(coro(*args, **kwargs)) + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/util.py", line 53, in just_run + return loop.run_until_complete(coro) + File "/Users/hjensen/opt/anaconda3/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete + return future.result() + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 535, in async_execute + await self.async_execute_cell( + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 827, in async_execute_cell + self._check_raise_for_error(cell, exec_reply) + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 735, in _check_raise_for_error + raise CellExecutionError.from_cell_and_msg(cell, exec_reply['content']) +nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell: +------------------ +import numpy as np +x = np.log(np.array([4.0, 7.0, 8.0]) +print(x) +------------------ + + File "", line 3 + print(x) + ^ +SyntaxError: invalid syntax + +SyntaxError: invalid syntax (, line 3) + diff --git a/doc/src/LectureNotes/testbook/_build/html/reports/chapter2.log b/doc/src/LectureNotes/testbook/_build/html/reports/chapter2.log new file mode 100644 index 000000000..98cf5707a --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/reports/chapter2.log @@ -0,0 +1,31 @@ +Traceback (most recent call last): + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/jupyter_cache/executors/utils.py", line 51, in single_nb_execution + executenb( + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 1082, in execute + return NotebookClient(nb=nb, resources=resources, km=km, **kwargs).execute() + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/util.py", line 74, in wrapped + return just_run(coro(*args, **kwargs)) + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/util.py", line 53, in just_run + return loop.run_until_complete(coro) + File "/Users/hjensen/opt/anaconda3/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete + return future.result() + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 535, in async_execute + await self.async_execute_cell( + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 827, in async_execute_cell + self._check_raise_for_error(cell, exec_reply) + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 735, in _check_raise_for_error + raise CellExecutionError.from_cell_and_msg(cell, exec_reply['content']) +nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell: +------------------ +import numpy as np +x = np.log(np.array([4.0, 7.0, 8.0]) +print(x) +------------------ + + File "", line 3 + print(x) + ^ +SyntaxError: invalid syntax + +SyntaxError: invalid syntax (, line 3) + diff --git a/doc/src/LectureNotes/testbook/_build/html/reports/chapter5.log b/doc/src/LectureNotes/testbook/_build/html/reports/chapter5.log new file mode 100644 index 000000000..7441f1b5e --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/reports/chapter5.log @@ -0,0 +1,42 @@ +Traceback (most recent call last): + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/jupyter_cache/executors/utils.py", line 51, in single_nb_execution + executenb( + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 1082, in execute + return NotebookClient(nb=nb, resources=resources, km=km, **kwargs).execute() + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/util.py", line 74, in wrapped + return just_run(coro(*args, **kwargs)) + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/util.py", line 53, in just_run + return loop.run_until_complete(coro) + File "/Users/hjensen/opt/anaconda3/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete + return future.result() + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 535, in async_execute + await self.async_execute_cell( + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 827, in async_execute_cell + self._check_raise_for_error(cell, exec_reply) + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 735, in _check_raise_for_error + raise CellExecutionError.from_cell_and_msg(cell, exec_reply['content']) +nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell: +------------------ +def RK2(v,x,t,n,Force): + for i in range(n-1): +# Setting up k1 + k1x = DeltaT*v[i] + k1v = DeltaT*Force(v[i],x[i],t[i]) +# Setting up k2 + vv = v[i]+k1v*0.5 + xx = x[i]+k1x*0.5 + k2x = DeltaT*vv + k2v = DeltaT*Force(vv,xx,t[i]+DeltaT*0.5) +# Final result + x[i+1] = x[i]+k2x + v[i+1] = v[i]+k2v + t[i+1] = t[i]+DeltaT +------------------ + + File "", line 14 + t[i+1] = t[i]+DeltaT + ^ +TabError: inconsistent use of tabs and spaces in indentation + +TabError: inconsistent use of tabs and spaces in indentation (, line 14) + diff --git a/doc/src/LectureNotes/testbook/_build/html/search.html b/doc/src/LectureNotes/testbook/_build/html/search.html new file mode 100644 index 000000000..df6cca609 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/search.html @@ -0,0 +1,235 @@ + + + + + + + + + Search — Classical mechanics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    +
    + +
    + +

    Search

    +
    + +

    + Please activate JavaScript to enable the search + functionality. +

    +
    +

    + Searching for multiple words only shows matches that contain + all words. +

    +
    + + + +
    + +
    + +
    + +
    + +
    +
    + + +
    + + +
    +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/html/searchindex.js b/doc/src/LectureNotes/testbook/_build/html/searchindex.js new file mode 100644 index 000000000..0b72ebc15 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["chapter1","chapter2","chapter3","chapter4","chapter5","chapter6","chapter7","content","intro","lecturenotes/CONDUCT","lecturenotes/CONTRIBUTING","lecturenotes/README","lecturenotes/lecturenotes/content","lecturenotes/lecturenotes/intro","lecturenotes/lecturenotes/markdown","lecturenotes/lecturenotes/notebooks","markdown"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["chapter1.ipynb","chapter2.ipynb","chapter3.ipynb","chapter4.ipynb","chapter5.ipynb","chapter6.ipynb","chapter7.ipynb","content.md","intro.md","lecturenotes/CONDUCT.md","lecturenotes/CONTRIBUTING.md","lecturenotes/README.md","lecturenotes/lecturenotes/content.md","lecturenotes/lecturenotes/intro.md","lecturenotes/lecturenotes/markdown.md","lecturenotes/lecturenotes/notebooks.ipynb","markdown.md"],objects:{},objnames:{},objtypes:{},terms:{"00pm":8,"0_tlsccwai":8,"0_utc9il9i":8,"100m":2,"10th":8,"112453549290521e":3,"12cm":1,"1970s":1,"1_2v2se359":8,"1_2v439nza":8,"1_azwo1s2r":8,"1_b81t0tta":8,"1_d70czgce":8,"1_e1cs5784":8,"1_ftgzt035":8,"1_hxxec3uc":8,"1_i9hczn21":8,"1_j5ugthfg":8,"1_rz8vr2ht":8,"1_sp7p28vk":8,"1_t1pocrww":8,"1_t2l86862":8,"1_utivxb87":8,"1_w9xc8az7":8,"1_wk9trq9k":8,"1cm":2,"1kg":1,"1kgm":1,"21st":8,"224805627923717e":3,"23h":6,"24h":6,"28kg":6,"2_i":[],"2a_":[],"2ax":[],"2cm":1,"2dimgrav":5,"2dimhovv":5,"2dx":[],"2gx":[],"2k_2":4,"2k_3":4,"2me":5,"2meb":5,"2mg":[],"2mr":5,"2mr_":5,"2nd":[4,8],"2v_":2,"2v_x":2,"2v_y":2,"2x_2":[],"2y_0":1,"30pm":8,"3q_1":[],"3q_3":[],"3rd":8,"40pt":[],"412252157986472e":3,"4ar":5,"4dr":5,"4f_0":3,"4pm":8,"4th":8,"50pm":8,"56min":6,"5cm":4,"5th":8,"67m":6,"6pm":8,"6th":8,"7th":8,"8th":8,"9th":8,"abstract":0,"break":[1,2,5],"byte":1,"case":[0,2,3,4,5,6],"class":[0,1,4,8],"default":[1,14,16],"final":[0,4,5,6],"float":[0,1,3],"function":[0,1,2,3,4,5,6,14,16],"import":[0,2,3,4,5,8,11,15],"int":[2,4,5],"long":[2,4,5,6],"new":[0,1,2,3,4],"public":[1,9],"return":[0,1,2,3,4,5],"s\u00f8renssen":8,"short":[7,12],"switch":[5,6],"throw":[2,4,6],"true":[3,4,5,6],"try":[0,1,2,4,5],"while":[2,3,4,6,8],AMS:8,Added:2,And:[0,1],Are:2,BPS:8,Being:9,But:[2,3,6,15],CAS:1,For:[1,2,3,4,5,6,8,14,15,16],I_s:4,NOT:[],Not:[],ODE:2,One:[3,4,5,6],Such:[0,2],That:[2,6],The:[0,1,5,8,9,10,11,14,16],Then:[1,5,6],There:[0,1,3,4,6,7,12,14,15,16],These:[0,1,2,4,5,6,8],Use:5,Using:[1,2,3,4,5,6,9],With:[0,1,2,3,4,5,6],Yes:2,_auto100:[],_auto101:[],_auto102:[],_auto103:[],_auto104:[],_auto10:[2,3,4,5],_auto11:[2,3,4,5],_auto12:[2,3,4,5],_auto13:[2,3,4,5],_auto14:[2,3,4,5],_auto15:[2,3,4,5],_auto16:[2,4,5],_auto17:[2,4,5],_auto18:[2,4,5],_auto19:[2,4],_auto1:[2,3,4,5,6],_auto20:[2,4],_auto21:[2,4],_auto22:[],_auto23:4,_auto24:4,_auto25:4,_auto26:4,_auto27:4,_auto28:4,_auto29:4,_auto2:[2,3,4,5,6],_auto30:4,_auto31:4,_auto32:4,_auto33:4,_auto34:4,_auto35:[],_auto36:[],_auto37:[],_auto38:[],_auto39:[],_auto3:[2,3,4,5,6],_auto40:[],_auto41:[],_auto42:[],_auto43:[],_auto44:[],_auto45:[],_auto46:[],_auto47:[],_auto48:[],_auto49:[],_auto4:[2,3,4,5,6],_auto50:[],_auto51:[],_auto52:[],_auto53:[],_auto54:[],_auto55:[],_auto56:[],_auto57:[],_auto59:[],_auto5:[2,3,4,5],_auto60:[],_auto61:[],_auto62:[],_auto63:[],_auto64:[],_auto65:[],_auto66:[],_auto67:[],_auto68:[],_auto69:[],_auto6:[2,3,4,5],_auto70:[],_auto71:[],_auto72:[],_auto73:[],_auto74:[],_auto75:[],_auto76:[],_auto77:[],_auto78:[],_auto79:[],_auto7:[2,3,4,5],_auto80:[],_auto81:[],_auto82:[],_auto83:[],_auto84:[],_auto85:[],_auto86:[],_auto87:[],_auto88:[],_auto89:[],_auto8:[2,3,4,5],_auto90:[],_auto91:[],_auto92:[],_auto93:[],_auto94:[],_auto95:[],_auto96:[],_auto97:[],_auto98:[],_auto99:[],_auto9:[2,3,4,5],_build:11,_datafram:1,a_0:3,a_1:[4,6],a_1x:3,a_2:[4,6],a_2a_3:3,a_2x:3,a_3:6,a_3a_2:3,a_i:[1,3,6],a_ja_k:3,a_n:3,a_p:4,a_x:1,a_z:1,aaverag:1,abid:10,abl:[2,4,5,8],abotu:6,about:[0,2,3,4,5,6,8,10,14,15,16],abov:[1,2,3,4,5,6],abovement:[0,6],abs:[0,3],absolut:[0,1],absorb:[4,5,6],abus:9,accelearatio:1,acceler:[3,4,5,8],acceleromet:6,accept:[2,9,14,16],accommod:4,accomplish:5,accord:[1,4,5,6],account:[1,6,9],accumul:0,accur:3,accuraci:3,achiev:1,acknowledg:[],aco:2,acquir:8,across:1,act:[1,3,4,5,6,8,9],action:[2,3,9,11],activ:8,actual:[1,2,5,6],adapt:9,add:[1,2,3,4,6,14,16],add_:15,added:[0,2,3,6],adding:[3,4],addit:[0,1,2,4,5,6,8],addition:[],address:[0,3,9],adjust:[2,4,5],adopt:1,advanc:[0,9],advantag:2,affect:[3,5],after:[1,3,4,5,8],afterward:1,again:[3,4,6,14,16],against:[2,4],age:9,agre:[4,10],ahead:[],aim:[0,1,2,3,5],air:[3,4,6,8],aircraft:6,akin:4,algebra:5,algorithm:[0,1,2,4,8],align:[9,15],all:[0,1,2,3,4,5,6,9,11,14,16],allow:[0,1,2,3,4,5,8,14,16],alon:4,along:[1,3,5,6],alpha:[2,3,5,6],alpha_n:4,alreadi:[1,2,4,14,16],also:[0,1,2,3,4,5,6,8,14,15,16],altern:[1,2,3],although:[2,3,4],alwai:[1,2,3,5,8,10],ambiti:[],amongst:5,amount:[3,4,6],amplitud:[2,4,6],anaconda:[1,8],analog:5,analogu:5,analysi:[0,1,2,5],analyt:[0,2,3,4,6,8],analyz:[2,8],ander:8,anew:[3,4,5],angl:[1,3,4,5,6],angmom:5,angular:[2,4,5,6,8],anharmon:4,ani:[2,3,4,5,6,9,10,14,16],anoth:[1,2,4,5,6,14,16],answer:[1,2,4],anticip:1,antiparallel:5,antisymmetri:3,anymor:[],anyth:10,api:1,appar:6,appear:[2,3,4,5,6,9],append:1,appendix:4,appli:[0,1,2,3,4,5,8,9],applic:[0,2,6,8],appoint:9,appreci:10,approach:[0,1,3,4,5],appropri:[2,9],approx:[2,3,4,5,6],approxim:[0,2,3,4,6],apt:1,aragorn:1,arang:1,arbitrari:[2,4,5,6],arbitrarili:5,arctan:5,arctanh:1,area:[2,3,5],areal:5,argument:[],aris:6,around:[1,2,3,4,5,6],arrai:[0,3,4,5,15],arrang:8,arriv:0,arrow:2,articl:10,asid:[3,4],asin:[2,4],ask:[2,6],aspect:[0,2],assign:[5,8],assist:8,associ:[6,14,16],assum:[1,2,3,4,5,6],assumpt:6,asteroid:5,astronom:3,astronomi:[],asymmetr:3,asymptot:5,atom:[2,3,4,5],attack:9,attempt:3,attent:[1,6,9],attitud:0,attract:5,attribut:[],auditori:[14,16],australia:[14,16],autograd:1,autom:[0,11],automag:1,automat:[1,11],automobil:2,auxiliari:[],avail:[0,1,8],avdt:2,averag:[3,5],avoid:[1,3],awai:[4,5,6],aws:8,axel:2,axes:[1,2,15],axi:[2,3,5,6],axlabel:1,axs:1,azimuth:[3,5],b_1e:4,b_2e:4,b_p:4,b_x:1,b_y:1,b_z:1,back:[1,2,3,5,6],background:1,backward:5,baggin:1,bake:0,ball:[1,2,6],ban:9,band:1,bandwidth:1,bar:[1,3],barrier:8,base:[0,1,4],basi:[1,5,8],basic:[0,4,6],bdb:5,bead:[],becaus:[0,2,3,4,5,6],becom:[1,2,3,4,5,6],been:[0,1,2,4,8,11],befor:[0,2,3,4,5,6],began:5,begin:[1,2,3,4,5,6,8,15],behav:5,behavior:[0,4,9],behind:4,being:[0,4,5,6,14,16],believ:2,belong:6,below:[0,1,2,3,4,6,10],benchmark:0,benefit:0,bent:[],best:[2,4,5,9,10],beta:5,beta_0:4,beta_n:4,better:[0,2,3,4],between:[1,2,3,4,5,6],beyond:[0,4],bib:[14,16],bibliographi:[14,16],bibtex:[14,16],bicycl:1,big:2,bilbo:1,birth:1,bit:[1,2,4,6,10],bla:1,blob:8,block:[1,8,14,16],blockeulercrom:4,blog:10,blue_patch:1,bmatrix:1,bodi:[2,3,6,8,9],boldfac:1,boldsymbol:[1,2,3,5,6],bolt:2,boltzmann:[],bonu:0,book:[8,14,15,16],borrow:1,both:[0,1,2,4,5,6,9,14,16],bottom:4,bounc:2,bound:5,boundari:2,box:[3,14,16],brake:6,branch:[10,11],brew:1,brian:[14,16],bridg:[],brief:3,briefli:[0,4],bring:[4,6],brisban:[14,16],broken:2,bte:4,bthe:5,build:[1,14,16],built:[4,11,14,16],bundl:13,buoyanc:1,bus:6,butler:8,c_1:6,c_1e:6,c_2:6,c_2e:6,c_w:2,cal:[],calcul:[0,1,2,3,4,5],calculu:8,call:[0,1,2,3,4,5,6,14,16],came:[2,6],can:[0,1,2,3,4,5,6,8,10,11,14,15,16],cancel:3,cannot:[2,3],canopi:1,capabl:1,car:[2,6],care:4,carl:[],cartesian:[1,5],catenari:[],caus:[2,6],caveat:3,cdot:[1,2,3,4,5,6],ceil:[1,3,4,5],cell:[14,16],cellphon:8,center:[2,3,4,6,8],central:[0,1,6,8],centrifug:8,centuri:0,certain:5,certainli:[],chain:[3,5,6,8],challeng:3,chanc:5,chang:[0,1,2,3,4,5,6,10],chaotic:[],chapter:[4,8],character:[],characterist:4,charg:[2,5],check:[1,2,4,13,15],checkmark:4,chimborazo:6,choic:[1,2,4,5],choos:[1,2,3,4,5],chosen:[1,2,3,4,5,6],chpater:4,christoph:[14,16],circ:6,circl:[2,5],circuit:4,circul:[5,6],circular:[2,3,5],circumst:9,cite:[14,16],civita:3,clarifi:9,classic:[0,3,5,6,16],classif:1,clear:5,clearli:[2,3],clock:[],clockwis:[2,6],clone:[10,11],close:[1,2,4,5,6],closer:2,closest:[1,5],closur:1,cloud:1,clumsi:[],cmap:15,cmse201:0,cna:2,cntk:1,code:[0,2],coeffici:[2,4,6],cognit:[14,16],col:1,colab:1,cold:15,collect:[1,2],collid:5,collis:5,color:[1,5,15],column:1,com:8,combin:[0,3,5,6],come:[1,2,4,5,6],command:[0,1,14,16],comment:9,commerci:1,commit:[9,10],common:[1,2,3,4,5],commonmark:[14,16],commun:9,commut:3,compact:[3,5],compactli:3,compar:[0,1,2,4,5,6],compdriv:4,compet:[0,8],complaint:9,complement:3,complementari:4,complet:[2,4],complex:[4,5,6,14,16],complic:[0,2,5,6],compon:[2,3,4,5,6],compress:2,comput:[0,2,3,4,6,8,14,16],con:8,concept:3,conceptu:[5,6],concern:3,concic:1,conda:[1,10],condit:[1,2,3,4,5,6],conduct:0,cone:[],confer:[14,16],confidenti:9,configur:[],confin:[],connect:[1,8],consequ:[0,5],conserv:[2,4,5,8],consid:[2,3,4,5,6,9],consider:2,consist:[2,4],constant:[2,3,4,5,6],constrain:5,constraint:8,construct:[0,9],consumpt:2,contact:[2,5,9],contain:[0,1,8],content:[1,13,14,16],continu:[0,1,2,6],contrast:[2,6],contribut:[3,4,5,6,9,11],contributor:[9,10],conveni:[0,1,2,3,5],convent:[0,1],convert:[1,5,6],convolut:4,cookiecutt:11,coolwarm:15,coordin:[2,3,4,5,8],copi:10,copyright:[],corioli:8,corner:6,corona:8,correct:[2,3,4,6,9],correspod:6,correspond:[1,3,4,5,6],cortex:[14,16],cos:[1,2,3,4,5,6],cosh:1,cosin:4,cot:[],could:[0,1,2,3,4,5,6,9,10],coulomb:5,counter:[1,4,6],coupl:[1,2,4],cours:[0,1,2,3,8],coven:9,cover:[4,5,7,8,12],creat:[0,1,5,9,10,11,15],credit:[8,10],criteria:[],critic:[3,8,9],criticallydamp:4,cromer:[4,8],cross:[1,2,3,4,6,8],crucial:[],csc:4,ctrajectori:5,cubic:[],cumsum:1,curiou:[],current:[6,11],curv:[2,3],curvatur:[5,6],custom_lin:15,cycl:5,cycler:15,cycloid:[],cyclon:6,cyclotron:2,d2l:8,da_d:5,da_i:6,dagger:1,dai:[0,2,6,8],damp:8,dampeddiffyq:4,dat:1,dat_id:[1,3,4,5],data:[0,1,2,3,4,5,15],data_id:[1,3,4,5],data_panda:1,data_path:[1,3,4,5],datafil:[1,3,4,5],datafram:1,date:1,ddot:[2,4,5,6],ddrive:4,deadlin:8,deal:[1,6],dec:[],decai:[2,4],decemb:[],declar:1,decreas:3,deduc:2,deem:[2,9],deep:2,deepen:0,deeper:[0,2,3,8],def:[0,1,3,4,5],defin:[0,1,3,4,5,6,8,9,14,16],definit:[0,1,2,4,5,6],defint:1,deflect:6,degre:[0,2,3,4,5,6],delta:[1,2,3,4,5,6],delta_:1,delta_n:4,deltat:[1,3,4,5],deltax:5,demonstr:[4,6],demostr:6,denomin:[4,5],denot:[3,6],densiti:[2,5],depart:6,departur:5,depend:[1,2,3,4,5,6,8,14,16],depict:[],deploy:1,deposit:5,deriv:[0,1,2,6,8],derogatori:9,describ:[1,2,4,5,6],descript:6,design:[2,4],desir:[],despit:2,det:[],detail:[1,3,5,8,9,10],detect:6,detector:5,determin:[1,2,3,4,6,8,9],detial:8,develop:[0,1,2,3,4,5,8,10,11],deviat:1,devic:0,df1:1,diagon:1,diagram:8,dial:4,diamet:6,did:[2,4,6],died:4,diff:2,differ:[1,2,3,4,5,6,8,9,14,16],differenti:[3,5,6,8],difficult:[2,3,6],dim:4,dimens:[3,4,6],dimension:[1,3,4,5],dimensionless:[2,3,4],diment:1,dimless:2,diod:4,direct:[1,2,3,4,5,6],directli:[1,5,14,16],directori:11,disabl:[9,11],disappear:[4,5],discours:0,discrep:6,discret:[0,4],discuss:[0,1,2,3,4,5,6,8],discussiom:8,displac:[3,4,6],displai:[1,5,14,16],dissappear:[],dissip:2,dissipitav:4,distanc:[2,3,5,6],distant:5,distinguish:2,distort:[5,6],distribuit:1,distribut:[1,5,6],distrubut:1,dive:4,diverg:5,divid:[1,2,4,5],doc:[8,10,14,16],docstr:10,doctest:0,document:[14,15,16],doe:[1,2,3,4,5,6],doesn:[2,3,14,16],doing:2,dollar:15,domin:[2,5],don:[1,2,5,6],done:[1,2,3,4,5,6],door:4,dot:[0,1,2,3,4,5,6],doubl:[1,2,5,6,8],doubli:[3,6],down:[2,4,5,6],download:1,drag:[1,2,4],draw:2,drawn:1,drive:[2,4],driven:[8,10],drivenosc:4,drop:6,dtype:1,due:[1,2,3,4,5,6,8],dure:[4,6],dv_:2,dv_x:[2,3,6],dv_y:[2,3,6],dv_z:[3,6],dx_j:[],dxdy:4,e_0:2,each:[1,3,4,5,6],earlier:[3,4],earth:[2,5,6,8],earthsuneul:3,earthsunvv:3,easi:[1,2,3,4,5],easier:[5,8,10],easili:[0,1,2,3,4],east:6,eccentr:5,econometr:1,ecosystem:[1,14,16],edit:9,edu:8,educ:[0,4,8],eff:[5,6],effect:[1,2,4,8],effici:[1,2],eigen:[],eigenfrequ:[],eigenvalu:1,eigenvector:[],eight:1,eispack:1,either:[2,3,4,5,6],elast:5,electr:[2,4,5],electrodynam:5,electromagnet:[2,5],electron:[0,3,5,9],elel:1,element:[0,2,3],elementari:[1,8],elessar:1,elimin:[4,5],ell:[],ellips:[5,6],ellipt:[6,8],els:2,email:8,emb:15,emit:3,emmi:[],empathi:9,emphas:[4,8],emphasi:1,emploi:[2,4],enabl:0,enbodi:4,encapsul:[4,5],encompass:2,encount:5,end:[1,2,3,4,5,6,8,15],endpoint:4,energi:[1,2,4,5,6,8],engag:0,engin:[1,2,8],enhanc:[0,8,10],enough:[2,5,6],enquiri:2,enscrib:3,ensu:[],ensur:[4,5],enter:[4,6],enthought:1,entir:[1,4,5,14,16],entiti:1,entropi:[],environ:[0,1,2,9,11],epsilon:3,epsilon_0:5,epsilon_:[2,3],epsilon_i:[],epsilon_ix_i:[],epsilon_j:[],eqnarrai:[2,3,4,5,6],equador:6,equal:[1,2,4,5,6],equat:[0,5,6,8],equatori:6,equilibrium:2,equiv:[3,4,5,6],equival:[1,3,4,5],equivl:[],eriador:1,error:[0,4],escap:15,especi:[3,4,5],essenti:[0,2,6],estim:3,eta:[4,6],etc:[1,2,8,15],ethic:0,ethnic:9,euler:[2,4,8],eulerintegr:1,eurler:1,evalu:[0,2,3,4,8],even:[1,2,3,4,5,6,10],event:9,eventu:[2,6],everest:6,everi:[1,2,3,6,10],everybodi:8,everyon:9,everyth:[2,5],evid:[2,14,16],evolut:[4,5],evolv:[],exact:[0,1,2,3,4],exactli:[5,6],exam:8,exampl:[2,4,6,8,9,14,15,16],excel:11,except:[2,6],excit:[4,5],executablebook:11,exercis:[0,2,3,8],exert:3,exist:[1,3,4,5,11,14,16],exp:4,expand:[1,4],expans:[3,4,5],expect:[2,4,5,6,9],expens:[],experi:[0,2,5,6,9],experiment:[2,5],experimentalist:5,explain:[6,10],explicit:[1,3,4,6,9],explicitli:3,explor:[0,1],exponenti:[2,4],express:[1,2,4,5,6,9],ext:4,extend:[0,1],extens:[3,5,14,16],extent:8,extern:[2,3,4,5,6],extra:[4,8],extract:[2,4,5],extrem:[0,1],extrema:[],f6d7a289d493:1,f_0:[3,4],f_0b:3,f_0e:4,f_g:3,f_h:3,f_i:[2,4],f_m:4,f_n:4,f_r:5,f_x:[2,3,5],f_xv_x:3,f_y:[2,5],f_yv_i:3,f_zv_z:3,face:9,fact:[1,3,4,5,6],factor:[2,3,5],fail:5,fair:9,faith:9,fall:[5,8],fallingbasebal:1,fals:4,famili:[1,4,8],familiar:[1,3,5],far:[2,5],fashion:0,fast:[1,6],fastdriven1:4,fastdriven2:4,featur:4,feb:8,februari:4,feed:2,feedback:[],feel:[1,3,4,6,13],feet:6,felt:2,few:[7,12],ffedbda27704:4,fictiti:6,field:[3,4,5,6,8],fifth:1,fig:[1,3,4,5,15],fig_id:[1,3,4,5],figsiz:[1,15],figur:[1,2,3,4,5,6],figure_id:[1,3,4,5],figurefil:[1,3,4,5],file:[1,3,4,5,8,10],filenam:1,find:[0,2,3,4,5,6,8],finish:2,finit:5,first:[0,3,4,5,6,8,14,16],fit:2,fix:[2,3,4,5,6,15],flavor:[14,16],flexibl:[0,1,4],flip:5,float64:1,floor:1,flow:[2,6],fly:5,fmax:4,focault:6,foci:5,focoault:6,focu:[1,2,5,6],focus:[4,9],folder:[1,8],follow:[0,1,2,3,4,5,6,9,14,16],font:[1,4],footbal:5,forc:[0,1,3,8],forcedblockeulercrom:4,forcedblockrk4:4,foresight:[],fork:10,form:[1,2,3,4,5,6],formal:[1,3,6,8],formalim:8,format:[0,1,3,4,5],formul:2,formula:[1,3,4,5],forth:[5,6],fortran:1,forum:8,forward:[1,2,3,4,6],forwardeul:4,forwardeulercrom:4,foster:9,foucalt:8,foucault:8,found:[2,4,5,11],foundat:0,four:[3,6],fourier:8,fourierdef1:4,fourierdef2:4,fourierseriessign:4,fouriersolut:4,fourpi2:3,fourth:[1,4],frac:[0,1,2,3,4,5,6],frame:[2,5,8],free:[1,9],freedom:[0,2,4,5],freewai:2,frequenc:[1,2,4,5,6],frib:8,friction:[2,4,8],frictionless:2,fridai:8,friendli:4,frodo:1,from:[0,1,2,3,4,5,8,9,15],frontier:[14,16],frydai:8,ftild:4,fuel:2,fulfil:2,full:1,fulli:11,fun:1,fundament:[2,4],further:[0,1,2,3,5,6,8,9],furthermor:[0,1,2],furthest:6,futur:[2,4],fwhm:4,g_m:4,g_n:4,gain:[0,2,3,4,8],galaxi:2,gallon:5,gamge:1,gamma:[2,4,5,6],gauss:5,gaussian:4,gender:9,gener:[0,1,2,3,4,5,6,8],geodes:6,geometr:[2,3],get:[0,1,2,3,4,5,6,8,13],ggplot:1,ghp:11,git:8,github:[8,10,11],give:[1,2,3,4,5,6,8,13],given:[0,1,2,3,4,5,6,10],gkr:[],global:[3,4],gm_1m_2:5,gm_:[3,5],gm_am_b:5,gmm:[5,6],goal:2,goe:[3,4,5,8],going:[2,6],gold:5,good:[0,2,4,8,9],googl:1,govern:[0,2],gracefulli:9,grader:8,gradient:6,gradual:[2,4],graphic:[0,2],gravgauss:5,gravit:[1,2,3,4,6,8],graviti:[1,5,6,8],graze:5,great:2,greatli:10,green:4,greeni:4,greeny2:4,grid:[2,5],ground:[1,6],guess:[2,4,6],guid:15,habit:0,had:[2,3,5],half:5,hamiltonian:3,hand:[0,1,2,5,6,8],handi:[3,6],handwritten:[],handwrittennot:8,hang:[],happen:[2,5],harass:9,hardcopi:1,harm:9,harmon:[2,3,8],has:[0,1,2,3,4,5,6,8,11,14,16],hassl:1,hat:[1,2,3,4,5,6],have:[0,1,2,3,4,5,6,8,9],hbar:3,hdhpk14:[14,16],heavi:[0,5],heer:[14,16],height:[2,3,5,6],helic:2,help:[0,5,10],hemispher:6,henc:2,here:[0,1,2,3,4,5,6,8,10,11,14,15,16],hereaft:[3,6],hermitian:1,hessenberg:1,hhint:3,high:[1,4,6],higher:[1,2,3,4,5,6],highli:1,hing:[],hit:[1,2,5],hjensen:8,hjorth:8,hold:[2,4,6],holdgraf:[14,16],holdgraf_evidence_2014:[14,16],home:8,homework:[3,5,8],homogen:[2,4,6],homogn:2,homogsolut:4,hope:0,hopefulli:2,horizont:[2,6],hot:15,hour:[6,8],how:[0,1,2,3,4,5,6,7,8,10,12,13],howev:[0,1,2,3,4,5,6],hspace:[1,2,4],htm:8,html:[0,8,11,15],http:[1,8],human:[14,16],hurrican:6,hv_:3,hw10:8,hyperbola:5,i_c:4,i_i:4,ideal:[0,2,4],ident:[4,9],identifi:[0,5],iet:4,ifs:1,ignor:[1,3,5,6],iii:1,ijk:[2,3],illustr:[2,5,6],imag:15,image_path:[1,3,4,5],imageri:9,imagin:[2,3],imaginari:[4,6],immedi:[4,8],impact:[0,5],impart:2,implement:[0,2,3,4,8],impli:[0,1,4],implic:2,imposs:[],improv:[2,3,4],impuls:4,inappropri:9,incid:[5,9],includ:[0,2,4,5,6,9,10,14,15,16],inclus:[0,9],incom:5,inconsist:4,incorpor:[4,6],incoveni:[],increas:[0,3,4,5],increment:0,inde:[2,3,4,5],indefinit:[],indent:4,independ:[1,2,3,4,5,6,8],index:1,indic:[1,2],individu:[4,5,9],industri:0,inelast:5,inerti:[2,8],inertia:2,infer:5,infil:1,infin:4,infinit:[2,4,5],infinitesim:4,influenc:[1,2,5],info:1,inform:[3,5,9,11,14,15,16],infti:[2,4],inherit:1,init:[14,16],initi:[1,2,3,4,5,6],inlin:[0,1,3,4,5],input:[0,1,3,4,14,16],insert:[1,3,4,5,6,14,16],insid:[5,14,16],insight:[0,2,8],inspect:[2,4,5],instal:[8,10,11],instanc:[2,9],instant:3,instantan:1,instead:[0,1,2,3,5],instructor:8,insult:9,int_0:[0,1,2,3,4,6],int_:[1,2,3,4],int_a:[0,3],integ:[1,5],integr:[0,2,4,5,8],integraldef:3,integrand:4,intens:0,interact:[1,2,4,5,15],interest:[1,3,4,6,9],interfac:0,intermedi:4,intern:[2,3,5,14,16],internet:6,interpol:3,interpret:[1,2,3],interv:[0,2,3,4],intrins:1,intro:[14,16],introduc:[0,1,2,3,4,6,8],introduct:8,intuit:[],invalid:1,invalu:[0,1],invari:3,invers:[1,2,4,5],invert:[2,3],investig:[0,9],invis:5,invok:2,involv:[1,2,4,5],inward:6,ion:15,ipynb:[1,14,16],ipython:[1,4],irrelev:4,ismov:2,isol:[1,3],isotrop:6,issu:[9,10],items:1,iter:2,its:[0,1,2,3,4,5,6,9,10,14,16],itself:[2,3,4,5],jensen:8,jeremi:8,job:2,john:8,join:[1,3,4,5],joul:1,jrt:8,juli:8,jupyt:[0,1,11,14,15,16],jupytext:[14,16],just:[1,2,3,4,5,8],k1v:4,k1x:4,k2v:4,k2x:4,k3v:4,k3x:4,k4v:4,k4x:4,k_1:4,k_2:4,k_3:4,k_4:4,kappa:[],keep:[0,1,2,3,4,10,15],kei:4,kepler:[5,8],kept:4,kera:1,kernel:[14,16],keyword:1,kilogram:1,kind:[2,5,14,16],kinet:[1,2,3,4,5],knight:[14,16],know:[1,2,4,5,6,8],knowledg:[0,8],known:[1,2,3,4,6,8],kq_1:[],kq_3:[],kr_:5,krh:5,kutta2:4,kutta4:4,kutta:8,l_z:3,la_:15,lab:5,label:[2,3,4,5,6],laboratori:[2,5,6],lagang:[],lagrang:[3,8],lagrangian:[3,8],lai:0,lambda:[],lambda_i:[],lambda_k:[],langrangian:8,languag:[1,9,14,16],lapack:1,larg:[0,1,2,4,5,8],larger:[0,4],last:[1,2,3,4,5,6],later:[1,2,3,4,5],latest:8,latex:[0,1],latitud:6,latter:[1,2,3,4,5,6],law:[0,1,4,5,6,8],lead:[1,2,3,4,5,6],leadership:9,learn:1,least:[1,2],leav:[3,5],lectur:[1,4,6],lecturenot:10,left:[0,1,2,3,4,5,6],legend:[1,15],len:1,length:[1,2,3,4],lengthi:6,less:[0,1,4,5,6,14,16],let:[0,1,2,3,4,5,6],letter:1,level:[0,1,6,9],levi:3,lhs:1,librari:0,licens:1,lies:0,life:[0,6],light:2,lightgrai:5,like:[0,1,2,3,4,5,6,8,11,14,16],lim_:1,limit:[0,1,2,3,4,6,8],line2d:15,line:[0,1,4,6,14,15,16],linear:[1,2,4,8],linearli:[2,4],linestyl:5,link:6,linpack:1,linspac:[4,5,15],linux:1,list:[1,4,10,11],literatur:[5,8],littl:[1,5,10],loc:1,local:[3,4,5,6,10,11],locat:[5,8],log10:0,log:1,logarithm:1,logspac:15,longer:[1,2,3,4,5],look:[1,2,3,5,6,10,14,16],loop:[1,2,3],loos:6,lorentz:6,loss:[1,2,3],lost:4,lot:[0,15],love:[2,4],low:[5,6],lower:[1,3,4,5,6],lowercas:1,m_0:3,m_1:5,m_1m_2:5,m_2:5,m_e:3,m_i:3,m_iv_i:3,machin:1,made:[0,3,4],magnitud:[1,2,3,4,5,6],mai:[0,1,2,3,4,6,9,11],mail:[8,9],main:[4,11],mainli:[2,4],maintain:[2,4,9],major:[0,1],make:[0,1,2,3,4,5,6,8,9,10,15],makedir:[1,3,4,5],makeplot:1,malth:8,manag:1,mani:[1,2,4,5,6,7,8,12,14,16],manifestli:3,manner:6,manual:[0,11],margin:3,mark:1,markedli:[14,16],markup:[14,16],mass:[1,2,3,4,6,8],masseval2016:1,massiv:6,massless:[],master:8,match:5,materi:[0,1,2,3,4,6],math:[0,1,3,4,5,15],mathbb:[],mathbf:1,mathcal:[],mathemat:[0,2,4,8],mathemati:1,mathrm:[1,2,3,4,6],matplotlib:[0,1,3,4,5,15],matur:0,max:[3,4,5],maxima:5,maximum:[2,3,4,5],mbox:15,mean:[0,1,2,3,4,6,8,15],meant:[0,5,8],measur:[1,2,4,5,6],mechan:[0,2,3,4,6,16],media:[8,9],mediaspac:8,medium:[2,4,15],meet:0,member:9,memori:4,mention:[2,4,5],mere:5,mesh:[1,2,3],messi:[4,5],met:3,metadata:[14,16],meter:[1,5],method:[0,2,5,8],methodolog:0,mgh:[5,6],mgkr:[],mgl:4,mglearn:1,mgr:[],mgsin:[2,4],mgx:6,mgy:6,mhjensen:8,michigan:16,mid:3,middl:[],midpoint:[3,4,8],midterm:8,might:[2,3,5,10],mileag:2,min:5,mine:1,minim:[4,5],minima:5,minimum:[4,5],minneapoli:6,minut:5,mix:[1,2,4],mixtur:[],mkdir:[1,3,4,5],mlk:8,mode:4,model:[0,5],modern:0,modif:5,modifi:[1,6],modul:[0,1],modular:0,molecul:2,molten:6,momenta:[1,5],momentum:[1,2,4,5,8],mondai:8,moon:5,more:[0,3,5,6,8,10,11,14,15,16],moreoev:16,moreov:14,morten:8,most:[0,1,2,3,5,6,14,16],motion:[0,3,4,6,8],motiv:[2,4],mount:6,move:[2,3,5,6,8],mpatch:1,mph:2,mpl:[1,4],mr_:5,mrv_:5,msu:8,mu_k:2,much:[0,1,2,3,4,5,6],multi:1,multidimension:1,multipl:[1,2],multipli:[1,2,3,6,8],multiplum:[],multivari:[],must:[2,4,5,6,14,16],mv_0:3,mv_:5,mv_e:3,mydirectivenam:[14,16],myriad:1,nabla:[3,5],nabla_i:3,nabla_jv:3,name:[1,2,3,4,6,10,14,16],narrow:10,nation:9,nativ:1,natur:[0,2,4],navig:11,nbconvert:1,nearli:6,neat:1,necessari:[2,4],necessarili:5,need:[2,3,4,5,6],neg:[2,4,5,6],neglect:[4,5],neglig:6,neighbour:[],neither:[],net:[2,3,5,6],netlib:1,network:1,neural:1,neurosci:[14,16],never:[4,5],new_hobbit:1,newdata:1,newli:1,newton1:2,newton:[1,4,6,8],newtonian:6,next:[1,3,4,5,6],nice:[1,8],noether:[],non:[3,4,8],noncommerci:[],nonetheless:[],nonsingular:1,nonumb:[2,3,4,5,6],norm:[2,3,4],normal:[0,1,2,3,4,6],normali:1,north:6,northern:6,norwai:[],notat:[1,3],note:[1,2,3,4,5,10,14,16],notebook:[0,1,14,16],notesapril10:8,notesapril13:8,notesapril15:8,notesapril17:8,notesapril1:8,notesapril20:8,notesapril22:8,notesapril24:8,notesapril3:8,notesapril6:8,notesapril8:8,notesmarch13:8,notesmarch16:8,notesmarch18:8,notesmarch20:8,notesmarch23:8,notesmarch25:8,notesmarch27:8,notesmarch30:8,notesmarch9:8,noth:1,notic:[1,3,6],now:[1,2,3,4,5,6],nowadai:0,nowher:[],nozzl:5,npt:0,nscl:8,nuclear:[4,5],nuclei:5,nucleu:5,number:[0,1,2,3,4,5,6],numer:[0,1,2,5,8],numpi:[0,3,4,5,15],obei:[2,5,6],object:[1,5,8],oblig:9,observ:[2,5,6],obtain:[1,2,3,4,5,6],obviou:3,obvious:[1,2,3],occur:[2,4,5,6],ocean:6,odd:[3,4],odot:3,off:[4,5],offens:9,offer:0,offic:8,offici:[9,10],offlin:9,often:[0,1,2,4,5,6],ofter:1,oint:5,old:3,omega02:5,omega:[1,2,3,4,5,6],omega_0:[2,5,6],omega_0a:4,omega_0t:[2,4,5,6],omega_1:[],omega_2:[],omega_:[],omega_c:2,omega_ct:2,omega_cv_i:2,omega_i:6,omega_t:4,omega_x:6,omega_xv_i:6,omega_xv_z:6,omega_yv_x:6,omega_yv_z:6,omega_z:6,omega_zt:6,omega_zv_i:6,omega_zv_x:6,omegatild:4,omnipres:4,onc:[2,4,5,14,16],one:[0,3,4,5,6,14,16],ones:[1,3],onli:[0,1,2,3,4,5,6,14,16],onlin:9,onto:2,open:[0,1,9,10,11],oper:[1,3,4,10],oppos:2,opposit:[2,3,5,6],oppotun:0,optim:[],optimum:[],orbit:[3,8],order:[0,1,2,3,4,5,6],ordinari:[2,4],org:1,organ:1,orient:[1,9],origin:[1,2,3,4,5,6],orthogon:[1,6],oscil:[2,3,6,8],oscillatori:4,oslo:[],osx:1,other:[0,2,3,4,5,6,9],otherwis:[3,5,9],our:[0,3,5,6],ourselv:[1,2,4,5,6],out:[1,3,4,5,6,13,15],outcom:[0,6],outer:[],outgo:5,outlin:0,output:[1,2,14,16],outsid:[],outward:[3,5,6],over:[0,1,2,3,4,5],overal:5,overarch:2,overcom:2,overlin:1,overview:8,own:[0,3,4,6,8],p_0:5,p_0b:5,p_0b_:5,p_2:3,p_f:5,p_fr:5,p_x:3,packag:4,page:[11,13,14,16],paint:5,pair:2,panda:[3,4,5],panel:1,paper:[0,8],parabol:[],parabola:[],parallel:[1,2,3,5],paramet:[1,5],parameter:[2,4],pari:6,part:[0,1,4,5,6,8,10],partform:4,partial:[2,3],partial_:3,partial_i:3,partial_r:5,partial_ru:5,partial_ru_:5,partial_tv:3,partial_x:[3,4],partial_xv:[3,4],partial_yv:3,partial_z:3,partial_zv:3,particip:[5,9],particl:[2,3,4,5,6,8],particular:[0,1,2,4,5,8],particularli:[0,4],paslei:[14,16],pass:[4,5],patch:1,path:[1,2,3,4,5,6,14,16],pattern:[6,14,16],pavement:2,pdf:[1,8],pedagog:0,pen:0,pencil:[0,8],pend1:[2,4],pend2:[2,4],pendulum:8,per:[0,1,5,6],percentag:8,peregrin:1,perfect:5,perfectli:2,perform:[1,2,3,4,5,6],perhap:[2,3],period:[2,5,6],perman:9,permiss:9,permut:3,perp:5,perpendicular:[2,5,6],person:9,perspect:3,pertain:1,pertin:0,perturb:5,phase:[2,4,6],phasespac:5,phenomena:4,phi:[1,2,3,4,5],phi_a:6,phi_b:6,phi_k:[],philosophi:4,phone:8,phonon:4,phy321:16,physic:[0,1,2,3,4,5,6,9],physics321:8,piazza:8,pick:4,pictur:4,pie:1,piec:[3,5],pillow:1,pip3:1,pip:[1,11],pippin:1,pitfal:3,place:[1,5,6],plai:[2,3,4],plan:8,plane:[1,5,6],planet:5,planetari:5,platform:1,pleas:[8,10],plot:[0,1,2,3,4,5,15],plt:[0,1,3,4,5,15],plu:[4,6],plug:[2,4,5],png:[1,3,4,5],point:[0,1,2,3,4,5,6],poit:[],polar:[3,4,5,6],pole:6,polici:9,polit:9,polynomi:3,popular:[1,4],posit:[1,2,3,4,5,6,9],possess:6,possibl:[0,1,2,3,4,10],post:[8,9,10,15],postpon:1,potenti:[0,1,2,3,4,8],power:[0,2,4,14,16],practic:5,pratt:[],pre:[14,16],precess:6,precis:[1,3,5],precmess:6,predic:[],predict:[1,6,14,16],prefer:4,prepar:1,presenc:[2,4],present:[0,3],pressur:6,pretti:1,previou:[1,2,4,5],prime:[3,4],princip:4,principl:[2,6],print:[1,3,5,14,16],printout:1,privat:9,privileg:1,pro:8,probabl:5,problem:[0,1,2,4,6,8],proce:[4,5],procedur:6,proceed:2,process:[0,1,2,8,11],produc:[0,1,6],product:[1,3,5],profession:9,profil:[],profound:3,program:[0,1,2,4],project:[0,6,8,9,10,11],project_root_dir:[1,3,4,5],pronounc:1,proof:3,prop_cycl:15,properli:[0,14,16],properti:[1,2,6],proport:[2,4],propos:10,propto:5,proton:5,prove:6,provid:[0,1,2,4,5,6],pub:8,publish:9,pull:[5,8,10,11],pure:[4,5],purpos:[0,2,4,14,16],push:[6,10,11],put:[4,5],puzzl:2,pycod:1,pyhton2:1,pylab:[1,4],pyplot:[0,1,3,4,5,15],python3:1,python:[0,2,4,8],pytorch:1,q_1:[],q_2:[],q_3:[],q_i:[],q_j:[],qbv_x:2,qbv_y:2,qquad:1,quadrat:[2,4,5],qualiti:[0,1,2,4],quantifi:5,quantiti:[2,3,4,6],quantum:[3,4],question:[1,2,4,8],quick:0,quickli:[3,4,5,6],quitecompl:5,r_1:4,r_1t:4,r_2:[4,5],r_2t:4,r_h:3,r_i:3,rab:[3,5],race:9,radial:[3,5,6],radialeqofmot:5,radialeqofmotion2:5,radialgvv:5,radialhovv:5,radii:5,radio:4,radiu:[2,5,6],ramsai:[14,16],rand:1,randn:[1,15],random:[1,5,15],rang:[0,1,2,3,4,5,15],rapidli:6,rare:2,rate:[3,5,6],rather:[2,3,4,5,6],ratio:[4,5],rawdata:1,rcparam:[1,4,15],rdotdot:5,rdr:4,reach:[2,3,5],reaction:[2,3],read:[0,1,2,3,4,8],reader:1,readi:[0,1,10],readili:[],real:[0,1,4,5,6],realist:0,realiti:6,realiz:[4,5],realli:2,reason:[0,6,9],rebenstock:8,recal:[1,6],recast:[2,4],receiv:4,recip:1,recogn:[5,11],recommend:[1,3,8,11],record:2,recov:1,rectangular:[],rectilinear:6,recurs:1,reduc:[2,4,5],ref:[],refactor:0,refer:[0,2,4,5,6,8,14,16],reflect:0,reformul:2,regard:9,regardless:[5,9],region:[0,6],regular:[6,14,16],reject:9,rel:[0,2,3,4,6,8,14,16],relat:[1,2,3,4,5,6,8],relationship:6,relatist:6,relativeerror:0,relativist:[2,4],relax:[],releas:[1,10],relev:[0,1],reli:2,reliabl:3,religion:9,remain:[2,4],remark:6,rememb:[1,4,10],remind:[0,2,4,5,6],remot:[],remov:[9,11],render:[1,11,14,16],reorgan:1,repeat:[1,2,3,4,5,6],repeatedli:4,repel:5,repercuss:9,rephras:2,replac:[0,1,3,4,5,8],repo:[10,11],report:[0,9],repositori:11,repres:[0,1,2,3,4,5,6,9],represent:[4,9],reproduc:[0,5,8,10,15],repuls:5,request:[10,11],requir:[0,1,2,4,5,11],resembl:6,reshap:1,resist:[3,4,8],reson:8,resort:[],respect:[0,1,2,4,6,9],respond:9,respons:[2,6],rest:[1,2,4,5,6,14,16],restor:2,restrict:6,result:[0,1,3,4,5,6,8,14,16],retain:3,reus:[3,4],revers:5,revert:1,review:9,revis:1,revisit:4,rewrit:[1,2,3,4,5,6],rewritten:5,rho:[5,6],rho_m:2,rho_ma:2,rhs:1,right:[0,1,2,3,4,5,6,9],rightarrow:[1,2,3,4,5,6],rigid:6,rigor:6,rim:[],ring:5,rise:6,rk2:4,rk4:4,rmin:5,rminofa:5,robert:[14,16],rocket:3,role:3,rolenam:[14,16],roll:4,room:8,root:4,rot:1,rotat:[1,2,3,5,8],roughli:5,round:6,routin:1,row:1,rp_f:5,rtotheta:5,rule:[0,1,5,6,8],run:[0,1,2,5,11,14,16],rung:8,runner:1,ruthtraj:5,s_0:6,s_h:3,saddl:[],sai:[1,2,5,6],sam:1,same:[1,2,3,4,5,6,14,16],sampl:[5,6,13,15],samwis:1,satisfi:[2,4,5],save:[0,1,3,4,5],save_fig:[1,3,4,5],savefig:[1,3,4,5],saw:[3,4],scalar:[],scale:[0,1,5,8],scatt:5,scattangl:5,scatter:[1,8],scheme:1,schmidt:[],sci:8,scienc:[0,1,8],scientif:[0,1,8],scikit:1,scipi:[1,4],scope:10,score:8,scott:[],sea:6,seaborn:[1,4],seamless:1,search:[2,5],seat:6,second:[1,3,4,5,6,8],secondli:4,section:[1,2,4,6,7,8,12],see:[0,1,2,3,4,5,6,8,11,14,15,16],seed:[1,15],seem:[4,5],seen:[0,2,5,6],seldomli:0,select:1,self:0,send:[8,10],sens:2,sent:8,separ:[1,2,4,5,9],sequenc:1,seri:[1,8],serif:[1,4],serv:[14,16],session:8,set:[0,1,3,4,5,6,9,10],set_xlabel:[1,3,4,5],set_xlim:[1,3,4],set_ylabel:[1,3,4,5],setup:[1,6,10],sever:[0,1,3,4,8],sexual:9,shape:[0,1,5,6],share:1,shire:1,shock:4,shorthand:[1,3],shortli:[1,2],should:[1,2,3,4,5,6,8,11],show:[0,1,2,3,4,5,6,9],shown:[2,3],side:[1,2,5,6],sigh:1,sigma:5,sigma_:5,sign:[2,5,6,8,15],signal:4,signific:6,significantli:[2,4],sim:5,similar:[0,4,5,8,14,16],similarli:[1,4,5,6],simpl:[0,2,4,5,6],simpler:[0,2,3],simplest:[1,3,4,6,14,16],simpli:[0,1,2,3,4,5,6],simplic:[1,2,5],simplicti:4,simplif:[],simplifi:[1,5],simpson:8,simul:2,sin:[1,2,3,4,5,6],sinc:[0,1,2,3,6],sine:4,singl:[1,3,4,5,6,8],sinh:[],sit:[4,6],situat:[0,4,5,6],size:[1,2,3,4,5,9],sketch:[2,5],skill:[0,8],slice:1,slide:8,slight:[14,16],slightli:[2,3,6],slope:1,sloppi:2,slow:2,slower:[1,6],small:[2,3,4,5,6,8,13,14,16],smaller:[3,5],smallest:1,social:9,societi:0,softwar:[0,8],solid:[4,5],solut:[0,2,3,4,6,8],solv:[0,3,5,6,8],solver:2,some:[0,2,3,4,5,6,8,14,15,16],someth:2,sometim:5,somewher:5,soon:[1,4,6],sought:[],sound:[0,4],sourc:[0,1,2,4,5,11],south:6,southern:6,sovl:3,space:[2,4,6,8,9],spacetim:6,span:[1,14,16],spartan:5,spatial:[1,4],speci:5,special:[0,1,2,6],specif:[0,1,2,3,4,5,6,9,14,16],specifi:[1,2,6],speed:[2,3],spell:3,sphere:5,spheric:5,sphinx:[14,16],spin:3,split:3,spontan:3,sprai:5,spread:5,spring2020:8,spring:[2,4,5,16],springer:8,springforc:4,spuriou:6,sqrsignal:4,sqrt:[1,2,3,4,5,6],squar:[1,2,4,5],stabil:[2,4],stabl:[3,5],stadium:5,stage:[2,4],stai:[2,3,4,5,6],stand:[1,6,14,16],standard:[1,2,5,6],standpoint:0,start:[0,1,2,3,4,5,6,8,13],state:[1,2,3,4,5,6,15,16],statement:1,station:4,stationari:[],statist:[1,2],std:1,steadi:4,step:[1,4,5,6,10],stepsiz:0,sthetover2:5,stiff:[],still:[2,5],stop:[1,2],store:[1,14,16],straight:[2,6],strategi:[2,3,5],strength:4,stretch:[2,5],strictli:2,strike:5,string:[],strong:[4,5],strongli:[1,5],structur:[0,1,8,13,14,16],student:0,studi:[0,1,2,5,6,8],style:[1,4],subdivid:[1,2,3],subinterv:3,subject:[],subplot:[1,3,4,5,15],subprogram:1,subscript:[1,3,6],subsect:4,subset:1,substitut:[2,3,4,5,6],subtend:5,sudden:4,suddenli:6,sudo:1,suffic:1,suffici:[4,5,6],suit:4,sum:[2,3,4,5],sum_:[2,3,4,5],sum_i:[3,4,6],sum_ia_i:6,sum_im:[],sum_im_i:3,sum_im_ix_i:3,sum_ix_i:[],sum_k:1,sum_n:4,sum_nx_:4,summari:8,sun:[2,5,8],superconduct:[],supplement:6,suppos:[1,2,6],sure:15,surfac:[2,3,5,6],surprisingli:5,surround:5,sweep:2,swing:4,symbol:[0,1,2,3,8],symmetr:[1,5,6],symmetri:4,sympi:[0,1,3],symplect:3,sync:[],syntax:[1,14,16],syntaxerror:1,system:[0,1,4,5,8,10],t_0:1,t_1:[],t_2:[],t_f:[1,2],t_h:3,t_i:[1,2,3,4],t_n:3,t_x:6,t_y:6,tab:[4,11],taberror:4,tabl:1,tabular:1,tag:[2,3,4,5,6,10],take:[0,1,2,3,4,5,6,9],taken:1,takeoff:6,tan:4,tangent:6,tanh:1,target:5,task:[],tau:[3,4],tau_z:3,taught:0,taylor2:8,taylor:[1,2,3,4,5,8],tba:8,tdt:1,teach:0,team:9,techniqu:[0,1,2,3],tediou:[0,5],tell:[2,3,4],temperatur:[],templat:11,tempor:4,temporari:9,temporarili:9,ten:1,tend:[2,5,6],tension:6,tensorflow:1,term:[0,1,2,3,4,5,6,10],termin:2,test:[0,2,5,11],tex:15,text:[1,4,8,14,16],textbook:2,textit:[],tfinal:[1,3,4,5],than:[1,2,4,5,6],theano:1,thei:[0,1,2,4,5,6,8,9,10,14,16],them:[0,1,4,6],theorem:[3,8],theoret:2,theori:[2,4],thereaft:[1,4,6],therebi:[1,4,6],therefor:[4,5],theta:[2,3,4,5,6],theta_0:[2,5],theta_1:[],theta_2:[],theta_:5,thi:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,16],thick:5,thin:5,think:[0,2,4,5,6,8],third:[1,3,4,5,6],those:[1,2,3,4,5,6,14,16],though:[2,4,5],thought:[5,6],threaten:9,three:[1,3,4,6],through:[0,1,2,3,5,6,8,10],throughout:1,thrown:2,thu:[1,2,3,4,5,6,8],thursdai:8,thw:[],tidal:6,tide:5,tight_layout:[1,3,4,5],tild:4,till:[1,2,6],time:[0,2,3,4,5,6,8,14,16],tiniti:1,tip:[7,12],tire:2,togeth:[5,6],toler:2,too:2,took:1,tool:[0,1,14,16],top:[0,1,6],topic:[0,8],torqu:[2,3,4],tot:5,total:[2,3,4,5,8],toward:[4,5,6,9],trace:[],track:[1,5],tradition:0,train:[0,2,6],trajectori:[2,3,4,5],transcendent:2,transform:[5,8],translat:[3,4],translation:3,transvers:5,trapez1:3,trapez:[0,3],trapezoid:[0,8],trapoezoid:3,travel:[2,5],treat:[4,5,6],tree:8,tri:2,triangular:1,trick:[5,6],tricki:[],trickier:1,tridiagon:1,trivial:5,troll:9,troubleshoot:10,truncat:[1,4],trust:[2,3],tune:[1,4],turn:[0,2,3,4,6],twice:[1,5],two:[1,3,4,6,8,14,16],twoard:6,txt:11,type:[1,2,3,4,8],typeset:0,typic:[2,3,4,5],u_i:[],ubuntu:1,ugli:4,unaccept:9,unari:1,unbound:5,uncertainti:2,unchang:3,undamp:4,under:[1,2,3,5],undergo:[0,2,5],underli:0,understand:[0,2,8],understood:[2,5],undesir:[],undetermin:[],undriven:[2,4],unfortun:2,uniform:2,uniformli:[5,6],uniqu:0,unit:[0,2,3,4,6],unitari:1,unitarili:1,uniti:4,univ:8,univers:16,unknown:4,unkonwn:[],unless:[2,3,4,6],unlimit:3,unscatt:5,unstabl:5,unsymmetr:1,until:4,unwelcom:9,updat:[1,3,4,5],upgrad:2,upon:[2,6],upper:[1,3],uppercas:1,upward:[2,6],usa:[],usag:1,usain:2,uscibook:8,use:[0,1,2,3,4,5,6,8,9,10,14,16],used:[0,1,2,3,4,5,6,8,14,16],useful:[1,2,3,4,5,6,8],user:[0,1,2],uses:[1,3,4,5,14,16],using:[0,1,2,3,4,5,6,8,9,10,11],usual:[2,5,6],utliz:3,v_0:[1,2,3,4],v_1:3,v_a:[],v_b:[],v_e:3,v_i:[1,2,3],v_jb_k:2,v_n:3,v_t:[1,2],v_x:[2,3,6],v_xf_x:3,v_y:[2,3],v_yf_i:3,v_z:[2,3,6],v_zf_z:3,v_zt:2,valid:[0,2,14,16],valu:[0,1,2,3,4,5],vanish:[],varabl:[],vari:[1,6],variabl:[1,3,5,6,8],variant:[0,1],variat:[3,8,14,16],varieti:1,variou:[0,1,3,4,6,8],vaverag:1,vdt:2,vecto:3,vector:[2,3,5,6,8],vehicl:6,veloc:[2,4,5,6,8],velocityverlet:4,ventur:[0,1,3],veri:[1,2,3,4,6,8,14,16],verif:[0,8],verifi:[0,1,2,4],verlet:[4,5,8],versa:3,versatil:[0,1],version:[1,4,5,9,10,11],versu:5,vert:1,vert_:3,vertic:[],via:[0,1,2,3,4,9],vibrat:5,vice:3,video:8,view:[0,1,3,6,8],viewpoint:9,virtual:11,virtualenv:10,viru:8,viscos:[2,4],viscou:[2,4],visual:4,viz:[],volcano:6,voltag:5,volum:[2,5],volunt:10,wai:[0,1,3,7,9,10,12],want:[1,2,4,6,10,15],water:[5,6],wave:4,wealth:0,weather:6,web:[0,8,10],websit:[1,10],wednesdai:8,weekli:8,weight:3,welcom:[9,10,11,14],well:[1,2,3,4,5,6,8,15],wendi:[14,16],were:[2,3,4,5,6],what:[0,1,2,3,4,5,6,8,9],wheel:[],when:[0,1,2,3,4,5,6,8,9,14,16],where:[0,1,2,3,4,5,6],wherea:[2,3,5,14,16],whether:[2,3,4,5,10,14,16],which:[0,1,2,3,4,5,6,9,14,16],who:9,whoever:10,whose:[3,4],why:[2,6],wide:[1,2,4],wider:6,wiki:9,win:5,wind:[2,4],wire:[],wish:[1,2,4,5,6,11],within:[2,9,11],without:[1,2,4,8,9],witth:4,word:6,work:[0,1,2,4,5,8,10,14,15,16],workflow:11,world:2,worldwid:6,would:[1,2,3,4,5,6,8,10],wouldn:[],wrap:[1,8],write:[0,1,3,4,5,6,7,12,14,16],written:[0,1,2,3,4,5,14,16],wrong:[0,8],www:[1,8],x_0:[1,2,3,4],x_1:[1,3],x_2:[1,3],x_3:[],x_f:3,x_i:[2,3],x_j:[],x_n:4,x_p:4,xarrai:1,xcode:1,xf_y:3,xfinal:5,xiniti:5,xlabel:[0,1],y_0:[1,2,3],y_1:[3,4],y_2:3,y_f:[],y_i:[1,3,4],y_n:3,y_p:2,yanalyt:1,year:[3,4],yet:[1,2,5],yf_x:3,yield:[1,3,4,5],ylabel:[0,1],ylim:4,you:[0,1,2,3,4,5,6,8,10,11,13,14,15,16],your:[0,1,2,3,4,6,8,10,11,15],yourself:[5,6],z_0:2,zero:[0,1,2,3,4,5,6],zoom:[],zze:5},titles:["Introduction","1. Space, Time, Motion, Reference Frames and Reminder on vectors and other mathematical quantities","2. Basic Steps of Scientific Investigations","3. Work, Energy, Momentum and Conservation laws","4. Harmonic Oscillator","5. Two-body Problems","6. Non-inertial Frames, Translation and Rotating Coordinate Systems","Content in Jupyter Book","PHY321, Classical Mechanics I, Michigan State University, Spring 2021","Code of Conduct","Contributing","LectureNotes","Content in Jupyter Book","Welcome to your Jupyter Book","Markdown Files","Content with notebooks","Markdown Files"],titleterms:{"break":8,"case":1,"final":[1,2,3,8],"function":[],"import":1,"new":[],"transient":4,Adding:[3,14,16],And:2,Going:2,One:2,The:[2,3,4,6],Then:2,Useful:1,Using:[14,16],abov:0,acceler:[1,2,6],act:2,air:[1,2],algebra:[1,6],algorithm:3,altern:4,analyt:1,angular:3,approach:2,april:8,arrai:1,asap:8,attempt:1,attribut:9,averag:1,ballist:2,basebal:1,basic:[1,2,3],beta:4,block:[2,4,15],bodi:5,book:[7,11,12,13],brachioston:[],bug:10,build:[3,11],buld:3,calculu:[],center:5,central:[],centrifug:[5,6],citat:[14,16],classic:[2,4,8],code:[1,3,4,5,9,10,14,15,16],compact:1,comput:1,concept:0,conduct:[9,10],conserv:3,constant:1,constrain:[],content:[7,12,15],contn:2,contribut:10,contributor:11,coordin:6,corioli:6,cote:3,coupl:3,credit:11,critic:4,cromer:[1,3],cross:5,damp:4,dampl:4,date:8,decemb:[],defin:2,deriv:[3,4,5],detail:2,differenti:[1,2,4],dimens:[1,2,5],direct:[14,16],discret:[1,3],document:10,driven:4,earth:3,effect:[5,6],element:1,ellipt:5,encount:1,energi:3,enforc:9,equal:3,equat:[1,2,3,4],error:3,euler:[1,3,6],exampl:[0,1,3,5],execut:[14,16],express:3,extens:1,factor:4,fall:[1,2,6],famou:1,featur:[1,10],februari:8,feedback:10,field:2,file:[14,16],find:1,first:[1,2],fix:10,forc:[2,4,5,6],formal:[],foucault:6,fouri:4,fourier:4,frame:[1,6],from:6,galilean:6,get:10,grade:8,gravit:5,graviti:[],handl:1,harmon:[4,5],height:1,host:11,identifi:2,illustr:0,implement:[1,10],includ:1,inerti:6,instal:1,integr:[1,3],introduct:0,investig:2,januari:8,jupyt:[7,12,13],known:0,kutta:4,label:1,lagrang:[],lagrangian:[],law:[2,3],learn:8,lectur:8,lecturenot:11,librari:1,linear:6,link:8,magnet:2,mai:8,mani:0,march:8,markdown:[14,15,16],mass:5,materi:8,math:[],mathemat:[1,3],matric:1,matrix:1,maxim:[],mechan:8,meet:1,method:[1,3,4],michigan:8,mode:[],model:[1,2],modifi:[],momentum:3,more:[1,2,4],motion:[1,2,5],myst:[14,15,16],need:1,newton:[2,3],non:6,normal:[],note:8,notebook:15,numer:[3,4],numpi:1,object:[2,6],omega_0:4,one:[1,2],orbit:5,oscil:[4,5],other:[1,8],our:[1,2,4,9],outcom:8,output:15,overdamp:4,packag:1,panda:1,part:2,pendulum:[2,4,6],period:4,perspect:6,philosophi:3,phy321:8,plan:[],pledg:9,possibl:8,potenti:[5,6],practic:[1,8],principl:4,problem:[3,5],projectil:2,prove:[],python:1,quadratur:3,quantiti:1,raindrop:2,readi:[],rectangl:3,rectangular:3,refer:1,rel:5,remind:1,report:10,resist:[1,2],reson:4,respons:[4,9],result:2,review:[],role:[14,16],rotat:6,rule:3,rung:4,rutherford:5,scale:[2,4],scatter:5,schedul:8,scientif:2,scope:9,second:2,section:5,seri:4,set:2,simpl:[1,3],simpson:3,singl:2,sinusoid:4,slide:[2,4],small:[],softer:2,softwar:1,solar:3,solut:[1,5],solv:[1,2,4],some:1,space:1,split:2,spring:8,stabil:5,standard:9,start:10,state:8,step:[2,3],studi:[3,4],submit:10,sun:3,superposit:4,symmetri:3,system:[2,3,6],teach:8,team:8,textbook:8,theorem:6,thi:8,third:2,tidal:5,tied:2,time:1,transform:[4,6],translat:6,trapezoid:3,truncat:3,two:[2,5],underdamp:4,unit:1,univers:8,updat:8,usag:11,variat:[],vector:1,veloc:[1,3],verlet:3,vibrat:[],wai:2,wall:2,week:8,welcom:13,well:0,what:[14,16],width:4,work:3,write:10,your:[13,14,16]}}) \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1.ipynb b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1.ipynb new file mode 100644 index 000000000..513812261 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1.ipynb @@ -0,0 +1,253 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Introduction\n", + "\n", + "Classical mechanics is a topic which has been taught intensively over\n", + "several centuries. It is, with its many variants and ways of\n", + "presenting the educational material, normally the first **real** physics\n", + "course many of us meet and it lays the foundation for further physics\n", + "studies. Many of the equations and ways of reasoning about the\n", + "underlying laws of motion and pertinent forces, shape our approaches and understanding\n", + "of the scientific method and discourse, as well as the way we develop our insights\n", + "and deeper understanding about physical systems. \n", + "\n", + "There is a wealth of\n", + "well-tested (from both a physics point of view and a pedagogical\n", + "standpoint) exercises and problems which can be solved\n", + "analytically. However, many of these problems represent idealized and\n", + "less realistic situations. The large majority of these problems are\n", + "solved by paper and pencil and are traditionally aimed\n", + "at what we normally refer to as continuous models from which we may find an analytical solution. As a consequence,\n", + "when teaching mechanics, it implies that we can seldomly venture beyond an idealized case\n", + "in order to develop our understandings and insights about the\n", + "underlying forces and laws of motion.\n", + "\n", + "\n", + "On the other hand, numerical algorithms call for approximate discrete\n", + "models and much of the development of methods for continuous models\n", + "are nowadays being replaced by methods for discrete models in science and\n", + "industry, simply because **much larger classes of problems can be addressed** with discrete models, often by simpler and more\n", + "generic methodologies.\n", + "\n", + "As we will see below, when properly scaling the equations at hand,\n", + "discrete models open up for more advanced abstractions and the possibility to\n", + "study real life systems, with the added bonus that we can explore and\n", + "deepen our basic understanding of various physical systems\n", + "\n", + "Analytical solutions are as important as before. In addition, such\n", + "solutions provide us with invaluable benchmarks and tests for our\n", + "discrete models. Such benchmarks, as we will see below, allow us \n", + "to discuss possible sources of errors and their behaviors. And\n", + "finally, since most of our models are based on various algorithms from\n", + "numerical mathematics, we have a unique oppotunity to gain a deeper\n", + "understanding of the mathematical approaches we are using.\n", + "\n", + "\n", + "\n", + "With computing and data science as important elements in essentially\n", + "all aspects of a modern society, we could then try to define Computing as\n", + "**solving scientific problems using all possible tools, including\n", + "symbolic computing, computers and numerical algorithms, and analytical\n", + "paper and pencil solutions**. \n", + "Computing provides us with the tools to develope our own understanding of the scientific method by enhancing algorithmic thinking.\n", + "\n", + "\n", + "The way we will teach this course reflects\n", + "this definition of computing. The course contains both classical paper\n", + "and pencil exercises as well as computational projects and exercises. The\n", + "hope is that this will allow you to explore the physics of systems\n", + "governed by the degrees of freedom of classical mechanics at a deeper\n", + "level, and that these insights about the scientific method will help\n", + "you to develop a better understanding of how the underlying forces and\n", + "equations of motion and how they impact a given system. Furthermore, by introducing various numerical methods\n", + "via computational projects and exercises, we aim at developing your competences and skills about these topics.\n", + "\n", + "\n", + "These competences will enable you to\n", + "\n", + "* understand how algorithms are used to solve mathematical problems,\n", + "\n", + "* derive, verify, and implement algorithms,\n", + "\n", + "* understand what can go wrong with algorithms,\n", + "\n", + "* use these algorithms to construct reproducible scientific outcomes and to engage in science in ethical ways, and\n", + "\n", + "* think algorithmically for the purposes of gaining deeper insights about scientific problems.\n", + "\n", + "All these elements are central for maturing and gaining a better understanding of the modern scientific process *per se*.\n", + "\n", + "The power of the scientific method lies in identifying a given problem\n", + "as a special case of an abstract class of problems, identifying\n", + "general solution methods for this class of problems, and applying a\n", + "general method to the specific problem (applying means, in the case of\n", + "computing, calculations by pen and paper, symbolic computing, or\n", + "numerical computing by ready-made and/or self-written software). This\n", + "generic view on problems and methods is particularly important for\n", + "understanding how to apply available, generic software to solve a\n", + "particular problem.\n", + "\n", + "*However, verification of algorithms and understanding their limitations requires much of the classical knowledge about continuous models.*\n", + "\n", + "\n", + "\n", + "## A well-known examples to illustrate many of the above concepts\n", + "\n", + "Before we venture into a reminder on Python and mechanics relevant applications, let us briefly outline some of the\n", + "abovementioned topics using an example many of you may have seen before in for example CMSE201. \n", + "A simple algorithm for integration is the Trapezoidal rule. \n", + "Integration of a function $f(x)$ by the Trapezoidal Rule is given by following algorithm for an interval $x \\in [a,b]$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^b(f(x) dx = \\frac{1}{2}\\left [f(a)+2f(a+h)+\\dots+2f(b-h)+f(b)\\right] +O(h^2),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $h$ is the so-called stepsize defined by the number of integration points $N$ as $h=(b-a)/(n)$.\n", + "Python offers an extremely versatile programming environment, allowing for\n", + "the inclusion of analytical studies in a numerical program. Here we show an\n", + "example code with the **trapezoidal rule**. We use also **SymPy** to evaluate the exact value of the integral and compute the absolute error\n", + "with respect to the numerically evaluated one of the integral\n", + "$\\int_0^1 dx x^2 = 1/3$.\n", + "The following code for the trapezoidal rule allows you to plot the relative error by comparing with the exact result. By increasing to $10^8$ points one arrives at a region where numerical errors start to accumulate." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter1_3_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "\n", + "from math import log10\n", + "import numpy as np\n", + "from sympy import Symbol, integrate\n", + "import matplotlib.pyplot as plt\n", + "# function for the trapezoidal rule\n", + "def Trapez(a,b,f,n):\n", + " h = (b-a)/float(n)\n", + " s = 0\n", + " x = a\n", + " for i in range(1,n,1):\n", + " x = x+h\n", + " s = s+ f(x)\n", + " s = 0.5*(f(a)+f(b)) +s\n", + " return h*s\n", + "# function to compute pi\n", + "def function(x):\n", + " return x*x\n", + "# define integration limits\n", + "a = 0.0; b = 1.0;\n", + "# find result from sympy\n", + "# define x as a symbol to be used by sympy\n", + "x = Symbol('x')\n", + "exact = integrate(function(x), (x, a, b))\n", + "# set up the arrays for plotting the relative error\n", + "n = np.zeros(9); y = np.zeros(9);\n", + "# find the relative error as function of integration points\n", + "for i in range(1, 8, 1):\n", + " npts = 10**i\n", + " result = Trapez(a,b,function,npts)\n", + " RelativeError = abs((exact-result)/exact)\n", + " n[i] = log10(npts); y[i] = log10(RelativeError);\n", + "plt.plot(n,y, 'ro')\n", + "plt.xlabel('n')\n", + "plt.ylabel('Relative error')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This example shows the potential of combining numerical algorithms with symbolic calculations, allowing us to \n", + "\n", + "* Validate and verify their algorithms. \n", + "\n", + "* Including concepts like unit testing, one has the possibility to test and test several or all parts of the code.\n", + "\n", + "* Validation and verification are then included *naturally* and one can develop a better attitude to what is meant with an ethically sound scientific approach.\n", + "\n", + "* The above example allows the student to also test the mathematical error of the algorithm for the trapezoidal rule by changing the number of integration points. The students get **trained from day one to think error analysis**. \n", + "\n", + "* With a Jupyter notebook you can keep exploring similar examples and turn them in as your own notebooks. \n", + "\n", + "In this process we can easily bake in\n", + "1. How to structure a code in terms of functions\n", + "\n", + "2. How to make a module\n", + "\n", + "3. How to read input data flexibly from the command line\n", + "\n", + "4. How to create graphical/web user interfaces\n", + "\n", + "5. How to write unit tests (test functions or doctests)\n", + "\n", + "6. How to refactor code in terms of classes (instead of functions only)\n", + "\n", + "7. How to conduct and automate large-scale numerical experiments\n", + "\n", + "8. How to write scientific reports in various formats (LaTeX, HTML)\n", + "\n", + "The conventions and techniques outlined here will save you a lot of time when you incrementally extend software over time from simpler to more complicated problems. In particular, you will benefit from many good habits:\n", + "1. New code is added in a modular fashion to a library (modules)\n", + "\n", + "2. Programs are run through convenient user interfaces\n", + "\n", + "3. It takes one quick command to let all your code undergo heavy testing \n", + "\n", + "4. Tedious manual work with running programs is automated,\n", + "\n", + "5. Your scientific investigations are reproducible, scientific reports with top quality typesetting are produced both for paper and electronic devices." + ] + } + ], + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1.py b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1.py new file mode 100644 index 000000000..8dbc69544 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1.py @@ -0,0 +1,187 @@ +# Introduction + +Classical mechanics is a topic which has been taught intensively over +several centuries. It is, with its many variants and ways of +presenting the educational material, normally the first **real** physics +course many of us meet and it lays the foundation for further physics +studies. Many of the equations and ways of reasoning about the +underlying laws of motion and pertinent forces, shape our approaches and understanding +of the scientific method and discourse, as well as the way we develop our insights +and deeper understanding about physical systems. + +There is a wealth of +well-tested (from both a physics point of view and a pedagogical +standpoint) exercises and problems which can be solved +analytically. However, many of these problems represent idealized and +less realistic situations. The large majority of these problems are +solved by paper and pencil and are traditionally aimed +at what we normally refer to as continuous models from which we may find an analytical solution. As a consequence, +when teaching mechanics, it implies that we can seldomly venture beyond an idealized case +in order to develop our understandings and insights about the +underlying forces and laws of motion. + + +On the other hand, numerical algorithms call for approximate discrete +models and much of the development of methods for continuous models +are nowadays being replaced by methods for discrete models in science and +industry, simply because **much larger classes of problems can be addressed** with discrete models, often by simpler and more +generic methodologies. + +As we will see below, when properly scaling the equations at hand, +discrete models open up for more advanced abstractions and the possibility to +study real life systems, with the added bonus that we can explore and +deepen our basic understanding of various physical systems + +Analytical solutions are as important as before. In addition, such +solutions provide us with invaluable benchmarks and tests for our +discrete models. Such benchmarks, as we will see below, allow us +to discuss possible sources of errors and their behaviors. And +finally, since most of our models are based on various algorithms from +numerical mathematics, we have a unique oppotunity to gain a deeper +understanding of the mathematical approaches we are using. + + + +With computing and data science as important elements in essentially +all aspects of a modern society, we could then try to define Computing as +**solving scientific problems using all possible tools, including +symbolic computing, computers and numerical algorithms, and analytical +paper and pencil solutions**. +Computing provides us with the tools to develope our own understanding of the scientific method by enhancing algorithmic thinking. + + +The way we will teach this course reflects +this definition of computing. The course contains both classical paper +and pencil exercises as well as computational projects and exercises. The +hope is that this will allow you to explore the physics of systems +governed by the degrees of freedom of classical mechanics at a deeper +level, and that these insights about the scientific method will help +you to develop a better understanding of how the underlying forces and +equations of motion and how they impact a given system. Furthermore, by introducing various numerical methods +via computational projects and exercises, we aim at developing your competences and skills about these topics. + + +These competences will enable you to + +* understand how algorithms are used to solve mathematical problems, + +* derive, verify, and implement algorithms, + +* understand what can go wrong with algorithms, + +* use these algorithms to construct reproducible scientific outcomes and to engage in science in ethical ways, and + +* think algorithmically for the purposes of gaining deeper insights about scientific problems. + +All these elements are central for maturing and gaining a better understanding of the modern scientific process *per se*. + +The power of the scientific method lies in identifying a given problem +as a special case of an abstract class of problems, identifying +general solution methods for this class of problems, and applying a +general method to the specific problem (applying means, in the case of +computing, calculations by pen and paper, symbolic computing, or +numerical computing by ready-made and/or self-written software). This +generic view on problems and methods is particularly important for +understanding how to apply available, generic software to solve a +particular problem. + +*However, verification of algorithms and understanding their limitations requires much of the classical knowledge about continuous models.* + + + +## A well-known examples to illustrate many of the above concepts + +Before we venture into a reminder on Python and mechanics relevant applications, let us briefly outline some of the +abovementioned topics using an example many of you may have seen before in for example CMSE201. +A simple algorithm for integration is the Trapezoidal rule. +Integration of a function $f(x)$ by the Trapezoidal Rule is given by following algorithm for an interval $x \in [a,b]$ + +$$ +\int_a^b(f(x) dx = \frac{1}{2}\left [f(a)+2f(a+h)+\dots+2f(b-h)+f(b)\right] +O(h^2), +$$ + +where $h$ is the so-called stepsize defined by the number of integration points $N$ as $h=(b-a)/(n)$. +Python offers an extremely versatile programming environment, allowing for +the inclusion of analytical studies in a numerical program. Here we show an +example code with the **trapezoidal rule**. We use also **SymPy** to evaluate the exact value of the integral and compute the absolute error +with respect to the numerically evaluated one of the integral +$\int_0^1 dx x^2 = 1/3$. +The following code for the trapezoidal rule allows you to plot the relative error by comparing with the exact result. By increasing to $10^8$ points one arrives at a region where numerical errors start to accumulate. + +%matplotlib inline + +from math import log10 +import numpy as np +from sympy import Symbol, integrate +import matplotlib.pyplot as plt +# function for the trapezoidal rule +def Trapez(a,b,f,n): + h = (b-a)/float(n) + s = 0 + x = a + for i in range(1,n,1): + x = x+h + s = s+ f(x) + s = 0.5*(f(a)+f(b)) +s + return h*s +# function to compute pi +def function(x): + return x*x +# define integration limits +a = 0.0; b = 1.0; +# find result from sympy +# define x as a symbol to be used by sympy +x = Symbol('x') +exact = integrate(function(x), (x, a, b)) +# set up the arrays for plotting the relative error +n = np.zeros(9); y = np.zeros(9); +# find the relative error as function of integration points +for i in range(1, 8, 1): + npts = 10**i + result = Trapez(a,b,function,npts) + RelativeError = abs((exact-result)/exact) + n[i] = log10(npts); y[i] = log10(RelativeError); +plt.plot(n,y, 'ro') +plt.xlabel('n') +plt.ylabel('Relative error') +plt.show() + +This example shows the potential of combining numerical algorithms with symbolic calculations, allowing us to + +* Validate and verify their algorithms. + +* Including concepts like unit testing, one has the possibility to test and test several or all parts of the code. + +* Validation and verification are then included *naturally* and one can develop a better attitude to what is meant with an ethically sound scientific approach. + +* The above example allows the student to also test the mathematical error of the algorithm for the trapezoidal rule by changing the number of integration points. The students get **trained from day one to think error analysis**. + +* With a Jupyter notebook you can keep exploring similar examples and turn them in as your own notebooks. + +In this process we can easily bake in +1. How to structure a code in terms of functions + +2. How to make a module + +3. How to read input data flexibly from the command line + +4. How to create graphical/web user interfaces + +5. How to write unit tests (test functions or doctests) + +6. How to refactor code in terms of classes (instead of functions only) + +7. How to conduct and automate large-scale numerical experiments + +8. How to write scientific reports in various formats (LaTeX, HTML) + +The conventions and techniques outlined here will save you a lot of time when you incrementally extend software over time from simpler to more complicated problems. In particular, you will benefit from many good habits: +1. New code is added in a modular fashion to a library (modules) + +2. Programs are run through convenient user interfaces + +3. It takes one quick command to let all your code undergo heavy testing + +4. Tedious manual work with running programs is automated, + +5. Your scientific investigations are reproducible, scientific reports with top quality typesetting are produced both for paper and electronic devices. \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1_125_1.png b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1_125_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1408e1b74a00034defa230b7e3eeaced51eba971 GIT binary patch literal 20430 zcmbrm1yo#Hw>1b6+=Dv_5G1&JkU)Y5cY?bFcL*9n2n2#V1P|`+?pnA6x5C|e*Zpq) z|9jo9$LJoNajTL`QRnP)_TFpFHRoI>R8d|E9fcSL4h|0e!+QxOI5_wc@FGD%06(!| zMKuI}J#!TMpn?Sccp({o1^f~zRU;<}j z;AC%Y=VWbRNaIVb+{wwFpM~Xrf6i>@V8#+l@jVm{juP&Jgs6&J z^8TW`)8u*6$gY-sPK3hnW~jKKZ@*QzSZbic^>fHfAR42(JdCL zKF`g4Xe>&v`8&RAvnQ5Ot%mJ6rEjxH@T-(2kmhaglMlVk@=<-p!Yv}r9MQ70k-W5`U-!8-b1d^v(7JD&-upDCMdbWaLZS-9g70LVdJg+X7R@S6AlA#3_io5kfk?bK zdSXaaPksc(VTpb9d-dNw62>g4FdOl(@!Tt_;dO;3mtZmlVi_i$xVtr7{SDKbAD@`G zJ}>b-*b_&k3XIS3_daj$`9b!y)w0Ur?&>pw{JKHKY^hdJGk+yGwuSuZ)S04ojqUUF z?ChZUc*2OD_KuD^X#Ji>jcp1G#y^KX)pV;9yg!?;o-H>S9I>;oSdH+#dxeLGCwS8P z3eL&N=_o|x?#u7r)RvZ(wFlMnjZbh^Ixt0kH#U+6w7peQ!hz`f-pB7@i6O0uc)84t zZWK2_Gcz*aD`sWQ&FRz%@fsF?%vzI=ohl^rwtd56q+?-mwVSW9A_ya3F`X(<#l^=z z8JA)CJR)@ICRkEd_LFDHEkOU_B+fjs8;ryVpGiwXTDrfq=TC7l`Bcki+V^sDF)lQ>=+laac*mp;?)8V9X7ctM>u1JwbZfg)8WxVV0 z=fgKNq#9heb)*VB!b=N*>`dfdUyu08+n4&}b#_XSdu&sI7wim*TH4xd39@kUvb6jH z0y}$qujuH^d%fSb3{Ou_b7w*#rag8rkh9o0{h67bg>W~ECK&Yp7&GYk?ZL({GLi!y zk?@Nw>$ZX{+Nc%sl$?j*mU=lo*S@kQGjaFhR)15b+sdU@JazyLxwti{XxZ^I&A-Us z!aG*(NOAY>g!%DpS|8QZiAVH*Oe9o>@mNHMZk!&WprAM)#>u>YkA%=M<9jbDB{eZM z^-e+}@YZoOT|aPaY;1CRy1u1GtBCsb>xk|1w7X5|ONcc6KE}H^-La{8sT$oe8`sgP zz4QTSdIKcG_i$m_#?|MHp?=@nX;$@7xCvt}<(9vDmWTtviZB2j{1-2V7N4w7B934; z5xmf|zOdy)ENE^pdYMVsSd+BB~SVWaj+_bKA3=861`INtD4?Ag+ z-f!e4kdVibke@itbe`e=bHqq>^gWq(HWyG9#~}HbhckuXqyM+Ak$O=Y=!Y+%C|C4`O0Z2$*$N^dC0#zlMfpG&Uxa3AmJc z-@3e|u+dOc3vT;FNke1OnT7uJn1wnUw_11uitgd%5|UQmd(mbvOYw)`h2iM?Z)j9g zq~H?h=s!{ok7RTPAsP{OIkQaJkd1me25V_^RPu_C5cxS(wq-9Bi;805tt|$G{dmWL zSuan3!=JcG7InuZ#A!ibH%==~qA)VBwYo7rIVqv6{NnTH&z;@f^4(NDvP;JNAskpm zO&GuE6En*#E%~h{E6{))weU)6^SU2d)`sj_eM?xr#$ ztjn;?u&lPl7X*R@9(L46<5A8_u8PS?^S|3?ZaVbuv=u104(<(de4*K3049Y)dtBlH zoJudnKd@b1PU-dROJ_JW>UKv^BnXOyzUKKwu-;+{c(ymR~g@RNNn zlL|52!}FXxse)ij*oLo^2Qv38#$?p&5~&&iLh#e{{fJ~zN|CSpNN}f0-2-hP=Cxp> z&uP-KeHWg(qNZkFER%NW`~g@)Gp~9(&$29t*}6X&es6p89_`Ximj0cUE5%fRhh?!n zqusHO9bo`h$wXvviP3jaBj~j`6%|%ox-YA&U2#QI3lC&kRz-oprsv0Yo6A1y?u>!A zz8~wW!T!krYZq>g5jerz-dK(`?8YX3)r=N-7~f(>~+%x3M3R zNIZ|IbmFAs=ZcZvaz-;b@GGdu>u2{qGu|NL)&9osDCSE_Nk^z;Ch*ke$EhQ2BHLYN z51tsBjZ!;m>nB!4H8n{W7w)R6Disx#tDDi6a2AQdUAW)7a0lC|4?kJ$mU|}qJEa5* z`u_aH@tov6S4br3jv%@Pw58h=BPssV)6w=<1`mdn*I~DNRp+hO-yYr;G6XnoHxy`XdTHCoe#v-r3(b?g&P27Ospp z<&=BHEErgOgoTfe!X2W-={kE`Qo>hKHC277G-bIa8|_;9E|Bm&`Ka<<%P_v!bP@94hOv{n1f?-}ya}!0?V1_$F6cK1k4!+Tt0#AK$#?Wx^6*Upz%fN}> z=rM?SMMWF?vlSq?N5{l)X@-z-5smLMMTXq)|H>S*biJ4ql#-mTz8n|mTwKJ?Ku}6< z;u`t+GXt75^}0arm(r-l7Br>K!?Kdo14>AqfjHOtg{rUO&Ni{=txw6-w}1AWa0x8O z!(x-(yzhCT{_)}C!(p@FS$tp8;JnlQs^fF*s?$U*xrXpWjHWHM`LQtXub;xuxFSLH zly^Ye!T#3RX>Xb&{<=~9_nfwnr&)}NqWXb*mdks(-zI06XdgzV5x)h>FaFY+IB#Mn z2chP4@3!$`e^%VXgI^|&`T3dErv{e;!{ugg9}+#oO;&SaWNa#GiNI1$zV@{;;gHO> zxjio8^7^K@ilN11%l$Ng2~zw{|7R~yUv%`zaQ-B-qV8oKp7`-`tkj-puH6LO;`su7 z9uhaQqTM$IcfTHZw@)Q$bJ6R6a3eCkbkI3RT2%nM9ELv%3clUnUMedpwxY5$zLl0n zv9PcJGmN!{V+@O~H1zDh?r;x3?QwM# zndehm?qV}bkKuA{FnfUb4bHHh;K&XyY4YMn+bIOnWuMhiFb*iHn%y7e81n3A8qR97&-DD( zijy)AjkCw$zJxcyBc0U-g~?5RlZG;@`>-e_>I=EwJ%Qowk`FRtFJDr*B5Of$E~}3h zK861wd_&vzdtqy8bhNdH!dF&70h5H=Ivs%5CcobzQP3tHzJpbp%=zCV8F}VAs~Sx{ ziN_i#F`H1~%Qdhm@jDwNIfFTR45_KjPY|?q_7SZ9q!yw-%N@+L6BVAz++g(``-L%o zNpNz?!P(NhS>^la<8!~K&*A&vwY$4}HS&0;km`M*sidrY?-Gmd9_=1YA#B%d`yv~c z>!69Wu%_PAtcvV@?-$6#>zzqw6W@_n2P1e4P!bjr_M2==i+KZFZU_qo3J$Sw3NCl? z@zR;}zQjff=AU1qUSAU>>g%7*HMp|O*Vw(Lr42@;@QPen`BZH^+x`?&aHR$mL?WY{ za{Bpmr2TVzH##BV(|S$noBJs-I;9S0{&?n{>20K89}g2~;x!@(p{eMdaa=fQzZG;< z?P=iXk&#t=&oEVv;U~wQD(ZY?V3s)W!H*gr#b<$dn((2%HhyQt#sLx@8p2aHHuk&u;Yo0~gUMaZAA zgE_?HsR?NnQkaO_y9LNpNdZGq$mkHpS$Sp!sXOHWc7A?nP7dwgzkk1mho^iO|B=wx*Vu=dR`b^SMTkE6MCdL6Ujy9Vs=6BnWVzPNiNI0Z1@}1z1m8oNKmNm;&RRvgzq-2@A;i% zYEssqtQ8LJ?&#>P>7u5xgzm#6x!`_;9*Aev`aoM`J%R%bZE?8EsE`?+2{#(H>X_V8bE-52V zBG3BoR^+IXv-ZXSM{9UZDy+BsF0RQJt9PI9h5GNH3Vxw)e`Z+IB1~0;7VR@zGGurWKt$XV^j zv?ia9Rd$0qX2oP4mRfGowUQ(*5nD8tv9#zx-9yGzHqGc3X(SGLKFfZcIp18SiTP$9 z2`}woOvbgY+oJd7Vh40$e7t=)MWDwyx#i)!1XNZAoWwf^2OF?LM9_zK$@kHF$$g7V zEcr4_$Mc}-k7kAG3?$}1iGkLJol`~($BvY@>owj1Zt7uruEHZ;G%;R(9DAlliZGuj z!f;Hk0xln-53ZQ9_+tQ(<84Wd$&fh5Rk8X%qgeC{KRU99HlE7ENz2I4v#^)}%0WU> za(roN_;s3BJ2+jp^Y@bz2jQ!gr{vyeAK|KP=DQ#6Z|m+(281qdFMS_fabCRWaehP9 z*-IquuaRPF>Rg{-+Ys<{OW>+j3A0>;%w}CdiX_1V!$j2sSHGV%n*5-FB%8~KcfCYn zKtKPozo1Z23iaH|BsU_1K|br@hFwB3V*{`C?~{8i&0n&aD~DbbqHz>*oKZ3gF1PjI9gyZ-ps_benbHb%yK;N>5BCiXHf;ZJMVTWMRM z`2C|(7nPSsH#avoQ)5SgO2F)trbSwqB^9Bhqw{^%I;Xli_Ul(9Zo4JH^=5Dl0?^t3 z-3Au}!p#!8f5T!lH_@E=eAnE()atdoaK80g>$UtP>)qM5ViP2myla2EPxpnarofqA zg4K$YRmFp!so#Dw2v__2*ysK0P3)X44Vzq}WUdQs0*8$q&EB`>78X<>%k7o4q*hr$ ze%w~Qdi83NkzM4t^M%(2qkcwK)>A;Fxw-KINcwkL+m42g?(5u~7Fcy5=*(1|>nNDW zhH^OxTnVPGk={CE-EF(_E(Bbq4S8R_Z?meINtE%w`le~RjF^B=jy#~A#iU=P&sfN? zhgr_?`lFeAy58f{c%xB#{MNsC=I+-w1(SwKva^cUr&}Y@v9a965Vw^th`mEYG}P3A zVC$7RY)He{0%K!p0612Lc$R;cmq!88ih+?)v&Bbx7A-dW^f6_ftFwNPA*jb!)$C#tqTQfT6!Q_9 znbjd?_IjF_`|zmvl*Y#51Kd$MfBPEFdo_sQs*A;Ebx%Cv-+&L8sf_DPU49$yeOHVN zUX=+7W6d&yo4hV3j(lZoV~mgrb+xbj9$5YI{(I_{m0d)}10U)x((-I1 zPN$TaV;W>SH5Sak_e=_N+h95aF%};`_+rh*+=571DX!&Y&q^=N_knLj@bo*xvj6dZ z`SBliHYeljC}ndp*-%_X){gyi&37arRs!xj?}b>%@?Q&Z4+_l~u?NV8ac1d$=F<7h z)jx)aXQtSN$Xd-g`eG+-j{t!oEkxbJqh8$}UdQ`<3I<>e6T{HZ|IY237Z3f&$;ypj z8FoGT3_C7Ay;bp6cE|Z(Ss;Z#V&;F_YI%QbA+X37eA0Ph*)}5T50>Tk` z;CZpXdfY>CdA=Hi#UWv=;Tu_Xd3JnV=OSEWy=5==+AML`{n%c}kx6pvQv_Yq%iPV$ z%y>e8cVV$-a8OqG@y;>g0Pq(73@rE?3aa5jGU4=a=x4-P5P5K?Tpa52lL#;%94y1V z1y0_@?~uz|*G`YLnmo8%7oFoEF1}=c0EMlGfS?HomNfOM)6d!D#<|1|?yHgH#`^tV z4X3O*LVr?qwB*G*fb(Yfqf#<54gi2HhJ?9UN?Dvn(sAx+WWHBjF~T>Kwe8>ByLpH? z9sR;=U53b1EnDg*7M18`39U)fK5Y8~hHJ>w(a!Vn{!+8aM!f8j`kBJ%?de^7UgF8$yMx-kZJ6uJLi3tqN(OURcEikYEksu14f1L+5&OT`?6jy|mFI9gGYN-#S7tqoboc0Mc&te~!xQxQT|19bKvxfh8szNvP}_$t4i5 zAN`G6dbgez6lA^xyF%qGCh>LbLMUMtO2N2;8p3JwrTO{DNkfu4I;15{7sO`6$y9uN z37`J#*V6@c6mbJ_U=&X#52M$Wo)Z=asv$U)o4QMZ1N3cw}+oH zE$}XjWmUx~FrL#Fd@Inl&?ID9<@)lQCJ3t?@o&5Mm1S{I$)=X6lij2`TC;Gg3`^7c zo;VO<;tjlfhW3^p4wicd28@8<0ZSJEALx_IBT;ptt(+dg%91@u$<|6+fY-&W86g^i zT9H;)xyb-4q1V#!3o#@%bh#Vzj?B!LsUExZH#avLRhD?_`rcfQn}Z31IDuGV&v*gj zZ|8GL!fi9xDMjJk8A9Rn-qDc*6#vFUiChxz-oeP{34lLbTW)prV}U$mNPO(>w&-(v zK$or2=*9*+9HZJFO6uRfD0m?qZ4o|auK+699AF2BmwhEn!H|}mJUHTW!7*rh8X4hx zvy;2NwRKyM1`ajxb;MH-B(_mSO+#&PO`Qp46XHP3Iqo9R|HPd%#u+Y`#O*F__Le|4pOkyi&4-12G_&QVSz*A>yr&-#f^26VqF+>A|r#!#>Vz5 zCgw9>#G^pwcsC`Vx;nQpp&(-N_;7D*YU;2#NHqONvjb>6IeBw^Y*A@cei6bqUjfa0 z^f!#fkdydzU4I{sP6Mn4YCIhlfXYZi^gNlYrvKEPg%uFxH8g0$AY;F21%37}kFzl; zRlsid2!kb-I9Fj7p(LIE?HkJZMB0PX_+GN?D~o85-t+$cH9T*9ika8m-kwkAI3E66 z7sxrLE5I_KF%oakJ9-C z1q>iLGgnzm&`wQFam|{@*Z*u*XV$4@Er6u_(CSkS>B7u+rzX$wH? z>+6H36cS1S!}_DP_Zz~mDLGCX8XEdWtJ0jIKZ*U7MchylPXnaLk(ZR?FU!u)$^pP{ zihFqp!U1M+Fph8kCx+}p!}`WXnL!6a^F>w3&yKqd){^JpMjIkUr)`abX+pGREw_cad3r@f^oa27cOlOUxFbl*Lkx%6u&hT> zv<3BH3;-FIhmdz+_@DP@*hn#YX!KnrgVp8bG0xA=&n_;W*#AeL+1}o^Pa}RqN0(k% ziR;(jFU`)*o^# b8$0IrV`dSlM9X)*W|~06c99C_ZJ)li!3N8uk|(2sTJDP0KXQ zt*kmsE95kXngQ_ygr5rMJvDCYnbu%*61ZCMz1({=@mKC8`*T%c&CSAZMY@vX<9YYb zzHoR{t^z#Anl$w6`SUWcQvNqkYBjAm25TILgha;1h6yN+$=F%wEK{IN)$=}AUGl!v z1xjPxZb6}Gr;tZS)d1Mec?AV8xw-L2ORQi*tFlhjAv%P)r1^#c;B1&01zq3+-_Zo1 zP$lj_xuXjCt+qDFVdE(Vs0`S7mc2ND?ka>IX7Y{kvIy+M|0_~!@*HgI8k{-85ktbR zHC?w52f^WsT)PYsl|<{$e|~CD-3SX;q{uAbBY3I*ZyzQ5>0uY;<$YyozIswI`#r}( zuP}Pfnp@9fhvp4FDi;@*^-QV3+z1*=AQp#cYp^;Xuz5Yqb5d`CaAc`n7G6rNx8h$4M1M*!!KQ(nw$GJX71!`$DUwrV{<;&W6bWp zKLK=EYq#+8k}nrQGTV8);cI7~RV1E6yXnTZ^%8;zXr}8=!~{r75J` zINGc%pI`r%cR5uXcoIFZshnJ08(I!`cVF`J&sn7v7c)nA4{ok@7!EG3Fc#A|uN@?_ zh@e(&DNe;G>V_5+w|~_Apzx7O=v`320~P-Jl*MIbnE}6Fv*xSVMui516W6$bCD)GL z4>}}QuK&I}%-N$kI5^~$l;qab#DSVk9?0VL^|I|0W$k z{qNt=(o)z--=m@jobj3OI0{x5rrPG^pCEA+Fs@!)J6NKRQjmADImk2Lx)+D7AY+0E6yQcR)}7H z>OlR}7e(_%vmD6y2Q|yk2Yyb@Uk%WDtMUP2t|3B<+0(J|El+Fp=^q*5MYUL}f6{zZ z;1UszKP+X$3d$Tl2PlH`#po*6qQ&Y@R#*7Bh3DYRW&+72q_~zb_UovVKUvPa;W(dC zQ+p=6RBn{KB@!D;&f*NhdWrSH?KvgWOB4tE%#Al^GsScB$p&hxM3y0!85oC8SDyH_ z!G-2O6&t$dqsL>?SOOdG@pVgn4mMLi+9^TCkpB8o&M*H9d{+gg#_TV{6R*z{3xz`X zukxEI-YS-oeM^}USgx!;$g z!=9-=DpN77exfhi+HTG(+A?Az15G0pUx>*HBbN|KPjG$>4T$HhY&3x$NYk6!9${1^ zGECMvz-}p3MkKpLUKdR!k@2t@Rp6nln_JUKKjW(<9znt6^F4@y6S5&Gr`%JSCmJ}T z_)M;L>KKTeQ=TDOHh2Z)vdcYHj^=>b6yYKpM+i)$5%u+^3M9-$#w=;MKd=KZB*J{T zyqq1m1TKRJ?Z*D@in@{}uC9hrih^^JPrNA8*ZlDsMWxFEHWGszD%(c+kQrWNE~?Hv zFb<%@mzfO2VjtYD1YpXat#(mQpovDtXJYR5wzN0to}Y_)ANY+$3@aAC5l>;7y8L`# z{mpN3mUBqg?-gya$YiDw&14{!c;eB~&2&xkMzr_4Ph{)Cvt_~tk?ij(g#jBxv1MZc?M11;zVI(%? zE2qj;Q1%Z4s89zm4zHGE!e)7V42qre2bE z`!+w3k4cw~*uAZF;qGy}7}XJ~KI-ke??IyS8qQtaKq(#_Rn+r5;DQ3KXmdDaKpazu zdX+{}0u?!ER@1zq0=8>YMF)m?#SbK~cO`zpE|f6r()wlojyY{YhW^*L8xt_6$4jtz z9JhuIYUURUNfo-wsSQ0Q+S@6OFtobUP0Z>W(l?VY8zXu!K>a=qyWOFe7*!zLNCF`I zxCxGcjBIeY)I`ef^c7quxgX%s_FWoSFd0o*hs^!|xSMMR#HQ?&dkhX9VpL@zew4z5 zU6Bim0LRLi(aC<_eFzd2b6@UimB|49lG_@3EVFJuEH-IrX}JN2Qn!SQ*-@RXW>IKRHWUSD7T6nPDm@Ed(Oq&G19J158CVf}Li{7dNVB*GhktX9X_ zgfGg*H2viqVzPnAkM#W`Bd!XVs_N=Js~sUQBxg2~YO>Vm4((yWACREXLQ0#+%>0i& zyf_au)9Jr_94(FoZy@Cy&^?Q%aVbQEmdNG%-?6e*Cq&?1ym(Q!8cb3PUO<*l=Kbss z8{uY>U8V&w0N8mfm@J*YM>)|mjm~%e;J{xl({Sl_M~QONbdmg; zAv<>+280&isOrpo7uGvCNX^1xcl8<>yOmQeV20QG?`ja3FAK{f3=Y`uW1m{M%^tWk zU;RY|w(eH4Gj$qrV1sc!*88>dU|?;>3kApYX3t=_PwMwzuRmA>eFeZQ$3fQwyN)`W0Mq? zuM0o}t!QT*`+jDTd7wCp$=7%9z=9gtcA9y>VaZ!0@&K zHwnn!u_@T_Lts6*9UCSlCN@gqbMx@ro|K9WBHfg8R8YF(kAX0%rv5Y_E@ekwA^b!+ zFN{fG4Vpg`TJ-MsrgB&AQ>(07>Lq<<~8t^%NttaC2X0HTz$zauVyohhJ!Y;NU z?O6NwNIpy^M{w{(wL{Ozg2ME5EHavqGjAOMZJb6h;R!`8)mX36>9Z$~8p4O}FPBFy zn=geTY^3Rde?b5Er~^~~qz+T$?kEz{ZQFFNruIhz{;iqW>-lP%wcF)K;h#U3wiXo9 zgoglQ0^r}O$itdQ?P2rndwF^Co|gAWY+65lxOgxQ+=ws?k7{cMXXUq9EvNtH6k{(( z{xIU=lPZ3+FN=m_X^52;tS&D8^!WH#Z(e|(KNu}(tW>K=@N&U%!DZftnwA!$;nDXV z;`=i#Z3L8g9Q(~v!&E&+KY=~5c(bl~Y!04uhtnQmj{T991=D6J zy=ro9J~)1`_6dgX5B|HlX3TA?e3~3L4BQU`qh<$~u~m~f4ImT(#n83$3umG?qQ}*0 z2=FGZg}zROJA)^M*%$y){MSB~nU!@7YH|rpO(L+>bv}3D0SJz9+AsDsKj&S7!NW^n zf?0qCxuqvt=Ru-E9+n})Ss3UVGEBXEuR=K{jhU);EZQGm%gFr4#8zoHN(f=O0SqwP z`UM~wtL>IC-U8o-$Wj2weW z?q5-i1O;BOVDXpc#!_14Usr&e@MX`5i<|od(DG$YJ4%2HdgoTVFb{m4z!}hrgBj~q z`R+ON;6}^x{652_Icgt@4@Wt}8A}?YfYB#n zCljzf?6CX33ty?xvO&wo6?3{Z%m+~-X?(j~C-Wzpd!A$R4Kj{pbZ_pe^IAC16GZ^i zMMdG?y?Y09>zF6jmf(uZno+LNNY9;z)Ikm+=4+0=cj%hxBc*7Y4 z@(D8(t2YA5&YT9Bl5Dj#@3r$;rNif9uQCOLPh44;-v$L` zB{ZoI$M?bVh2Y88vr14hrZ&eWp7PJY71R(gC!aQ^s_7!#3Mye`|!Cu z6|5MKH>f;%AKw6H1AP*40DUfo7(924LdPtDN3eVA=lNwc2d_|(q=k>>GW!F}PYx&9 z@YbAW5m6+h#QSN^r(=bG3i>$C$tM}<3KAccl{sj*`fz)J<-FUNA-8P&my+exBB=b4 z9;t->-6io!qo?&r4fa){AA)2g`TL#x;NLF5}>Tq8kxp zz2|icxP8qV6h!WS0S8rdLPB2xhnYr&DLUXv;c}V}m{pTRDpLkvlq)bkxB^1jVpmt!?iWOIMNs=f4<1Hc z2nyxsAI%#8!`3jr6|Err5w@U}`bFlThE?<%6gJ@E5A$zsJhFc&nV6XD0`Bai^tIHy z?jP>#yR3s>N(BW4(g$-@GB$ISA3*g%pY65m!VD_-K%iZJc>kV~S|Y83k%uQP01?w; z-x1Ippt6U1ub_~dnfat}s{iLJsovpXm*sF_pl@Q3@vjq9!IO&kBm<@>MdaZ)B3aPg zp?#NF&ig+cW$#|yKVwD*=LU-CzAZ&a$Lhl#gaS6)FTRzF|DCKvJ&LGq(6Cvduz^fW zbSyP_HhCB~+X@gMmtb20dgQ8&BSE&Zy4vHwh&@5@!otexbdH>yTwYr{Nq-XIDBR8~ z07mfumEZ(m1Hb?X7*vHXP7R*DH?(z@zT?8n+j^LAc>|8`3`g6ASHY*}FW)-tD zb&jv?8jlfN7e0sF!bU7Uh43)u0;8z`2BziZo!P5vw*F@v|1)K2#GTYstzD!xXj%bA z!s=Sw%wVOVL70$`0I;-SyCsQ*cbo@QrDievN@gAa-v2^rE{>dsRFf2NAEi~J{@-ZL zTe*33RT8i;xi~pTXJ`A&(!9IDQi8kM(|_y-Ytw7Vg&9Zh)vxGiac^&-rlux17C2ap`10B;MJNjR|f!lpJ^Y-(H&^;~Z?-rxg}P&#YvGX_@X z5XBrbpxFR|EC*~a;5*@3!+Dl^fu0W=Cp+6A9WEYTnccE5(D6k@MZpdaO%ZU#AtLGn zTN@mt5%iw`gSHZ&Zo0!sgd|B~V`2d!%^)b(N3qN^)6U?7pQwPm(~6hDXUbhV_GO0xf%5AE8rLHtjDO=L1RE+9Yu zf6<)(BRT3HvTU-M54urK9hH@pd(OS|Pq%LF>bQ>%|J!@Fc9K;Czhsp3geunvcdmnn_mU#09zN&RcIaC)4KlZ)-2 zUuc)3f4(*FQR*V=8*0WM++X6pqfve?*TjHZX}jy{G%=N%r5`fr*o#ruBRUQX3JIz3 zxxe|0M-4!RLw+hb@5ev}7X&rs0GL^Uug+XX4fyfkEr`q$xvRSP(Mj}tZ|9eLM@A^d z!eU}#U`a&+PBGm1rmFC-81KhtP2Bfij^0-elmyc-j^Z22~lcxl|OS_O&$~a1g)z3uYV^{ZebrAq3=kK3WJc>=s-3arVhF^6_R+J3PR+zbi zDnEhC3SU)K)q1Hh0nBuSx3skM)q$OF*zBLj=c99T{otbdfK=cNaQnm4=)U!(nv9Gu zz`FyG1x~8(gZs;uFX8Cu=vJ)sZ|Cy%UWk2to6SEDs0OhypZkg`ad0zn@%M6{RDr?& z#mTK6Wh3Nn1TK52JHxD5$OgzlrUS7|z@z$6L!Ot86zFX5QOxuKTs& zADhQ{e>l|LU=~G1O`0?8v5?3@M@2=YXJBZz=5`$70$h|NK<9TGEWR0_@hRd*3j|@Y9BtJ-|Fh>>HtYy zPlz8hmpS!s5?g=#%D@nq<8co^1UJiPF2gLYUH)X8{ob^+O9EW{lE)sCp8EzKKC{ky zU0pKR=0 z6REzJ4+3NU7VJCF_2yZ0YJriZ_IC0w@Kx1bZzg?^m4!K;(;n}(1TSWc2+=x5zH+5D zG{63P-Ml&S-#Bp?KdzhB)Eo=FrN&$bfJmV}(UQQ;;o|w!c*pR4poF@Ylw+q# zE*30xu;M;}ny0gKI~>sYv%r!xBJwEc3an&bF&u!%uYXns8o7=E^!=!<9X4i8&CPw0 z*)}ylKL8^06)0|@=QG-NOgVndevccJ6B}|x}B_n1g7(xl-IshXl@j=2@WvTz`>e407eqj^93K?fd;=b zk8prZMuhx2XsD>Zz$kp6PKE(y5Z0E5MNG_JtOaO(^HqT@8?vZIF+nxDsciEoY}wXCovE)NLPXg^gb=tJBu&*c>zH$)$K1bOxwBr)7uA} z@wvew5QGQaw13{0Ri<;Sh3rrAI7(46%H)0DPMqBq;g?Vz*Pl;@yt~@?gxVr(Q|oo@ z0C1wuSkLLnNsg*LK)x*bIl&JkK@k)PNsgwd%FpIZ)ORlRnHb)Njk7og=Hz5vTO29S zB*d!&+Vnl&&B{J~ldGx<($?^WNIZLkuW1;Fg>5H{?!P4$lz>v_b=+kT(uE3a2DyL8 z@}k7=IkcTBcQBtJcC?$^G^vNFr_)e_$OmsNv1(E??|#zv8Yqkx&O)#x1MZCSlt@L_ z&f1Four;=kXu~doH{Gp&Hv5dBKN^W1fS*A0LJ#YD>G%|dDlmGt${nNHyf$4V-6Aq( z!uN1$|4j?2HTHHeddcH;+G9ptT>{19RZsLs;LEsTnp&7yZs7NMW_>e=AKyNv=GDhH zd*E>S33XMV;~$CC^Aei<`*$FXOsuS=9O%R(SO{R!`J&48sr22+8xWDB20jfxA+l!c z3${7v3L|h__P#t`k5+(fl-qmKPar{&-+T(|P;8`7^=fr2eYaHpkidkaoKrnYWGmsz z@J6H5kK%q?O7M2S;x6s+)YnTV3dDNyY}|rPoyV%eiJtTl1z*-Vz8S+~6z|fYF{d4Z z7tyAj_X|KysUT#i`6^R~bGbj?uN6_>%p{Fb9f-k{6yw9HQT|YJW6U;u8Zic1+O)V!g_o)6TfV?Z;Eu$iA;A3uu08q=le0 zE$GebIW4FZr!P7bRG-hN^}R2zeGk|Odko7Wfk9?~r9~FVV&IS9=^%&KX0fpoF^-X^3AJTiymGq>*DoP?6!mpC&Eue$58%9-uFnI;` z_ce&}ADo;xMecVLyj9b%#N2dqmCO`Go!>pa!H4^4dN0hVu4pnGb6b>C_Aw}K$UXI{ z^~=-26ah$6tx@U1GG$;q<*PdRcjk1)TNh~$1If9U<;M11-`NT#`$k5#d>;=V<*ck2 z0m`CKD~y4irCh8G%WzP|Q~S}G!R%ArVbPN<=K?1)yZ+fiY0!6tl31VF^^0U|Ay_iY z=f@RjmM{PW66iz)K5l^bbbPKi9M;OQ3?(GJQW#v3jfcbs2ETmgV^1hLVz+kl1~=q2 zJ$)!(Gk~QGP@b+L_{7B0dU~k}sJLR!Xr~~ETrqhSx#sousm)Ox;yStC{ND|Xm2aM3 z{#oabA^ZYjcz$kbCg{(AvDx#>53$|dlCWl9A0J`R`Sp|PMC>a(Bwt?KJ%1^yfOjpm zw)#afB!4r@WOKWz;16k?JWaQ?1f-FjgQIV75Y{LK{0Sd*bOvF~y&V(}fFm{78P5ii z)PRS+*dSI`gFIJU=YX0rg<({mRaYR&W`{(P8I7je$Y7g{wP%?EE>o#2VDfqCj z0;Mn~c6aAX0mn_Ah`PoU!~=>O=hnBUl98WpJ~b7sT^m2$eQ!1jGM(G~IfSM*FdhLx zFV_Jxk5^=yUsVG44a3`kNwYjkNAg5I(|${QjtQ{7Ci9hH{Qx<|#TX5X7~5O*+S=MC z<9bw2zAK>+?=4Kwp*PDvf7_eBr;>0=Nu^n=97@kqaO4466EzxKn23mop79-)DM}x= zqq1E6<^}$qk7PE`S$ZAuDGR%UWl@f|yTHXBvv;O%S+A3e<71(6*bmBZ+s0$bl7r>j zrAyjBlvJHp;aB`qCsR;l%MWR<_Ebat*b0ucYHY~>E6RMjIn-gi>l-ZsNT$2HEs?aN zzkygC$}R%cClkEFk8aN(`N={Bf9lH5LXga}P)dMP6)?#nqx187g&u)e0dzp=;}H`l zD>(KSeid}P$8T=C?oW)RLX|PRH0ihV3(S4IDcH1j&DXRdkJlq$<@9`Ft*x;GbwE4n z3&R{m48%&#oq*Q}!O9)a&Hn^!20xhWAdbTn&AK`X9ZGzss)`4yNm}6~G5<9EdNZj*cKpeZR@g(;Wu64#yvX@z4?y&IrIh+`>b*W3l65; z4tT2=A`q#%0ZR8|J1e3bC=?M^djGmGDU{&>t-%T0fmDo)VeRc=K9>#4$5|Bjy+&!u zx$>XSwm<&kP4@u{TM2j_Kq&-sQ`9VZFoGPtQB<>JIFc#^L(njD4X_b3ABWqGj*Yd! z=yIS+K*x-54PSy5s#zLh=5*rZFOzN=BFV&i84&KX=&Vcw(2MDX(}|9fTPsl+ISSJm zu_?hEfsk@90`}MS-RX!>bxmdE_c}i?->wRbVB-V-Mu~T3X67~&nq$|R9}Vm~pn|8N zp&3lzK=cFtV$e`}7Yu|>7*7F&J(Rb=Qw$s$DypiWIiGD)t84K0uP0WB)yh2|UrR6K zUfcu}44*FLeR-Kh$wl_}#bVQISH&)xe(N2v?_+uGR_D7@3(gQ-y?IyYf_vYV(A`mo zIKl$BblBYh^>SuFin_THZ3vJ^rjFv)>0^Z-LsaE`?ry+%UtNCHn!fsBj{ zDC!u%XqDBwmqnl%ye`fG-dl?iV$?x&h{N*GEb(0g!lPQn$1hL{N$t^77hevt+#klg z-y>F0e@zhVmWq%4?&uGifAlz#v@{hjeay;l75^wDWO>*%Y&!j_77hiJ2K4lwTZVx<=&DELp$&{aWXM#UJ}Acm;KIxH zc+-jmDAe}S3Pieax3R(9&pHC&X$WMHQ}3a)y;BpLf(DsGD)eo({BBgJjfOyok70bD zdyxgzPoh~T;#UaCe`O?4BRb*H+?7hRm0Wn zPS!sFAr=9~SocIwm;vJ>c#;GN5(A*MR7y1oiL@XWF)|d;ikdwk7>CFrLS*MZn92^|8&E5iVl371NPqS<9 zJ@E7cRwoSN641uFzazU!@hc0{!=n_EEKbJg@ME0B$+9HdV*54Xb8(#~gZ*cuWm`9M zqyes^OO}&(f_^moG&i z*B&n3-LZ)o7`Ci$tpx}51y`I>t$5vWIy*Co{DVDmfa8>8$}b!gmcYW+2kLMjj2+J~ zuW~v6Qo4~V4tQ$VYBn{2UTr(~U6SX{h7@7YVX{K~CysT0=t&!uM|xn;PIR3X&Y38>fg}=FW>64166KZ; z6wW~y>hXrtx^+#G&|bSk@$a3RN(@$e%XfxG&;|q1aYR3Cx+HgZcZY*{gM?1IWVhTd zOLTZo_`Jyuo<8X%Qu8KAcrdH<_eTf}M$R-8eDZgE6-QD>nn5mQ`r#8Y*F}h`d3>_} z3$bT`A43SX1E@fA3t&@W9V5WsnTAVXKb+j^(wHa0Db_*xvROp7{kwU_)AlYr@~6!Z z9Rr6l`_IEBJZd?UDx5ou;PEaCdF_lMB55$YJaE;VMyK5c0ze9$@-bWcIjdwBl`i=3 z&hJ;6O>T~9Zw4Y@=V^OElv^pi=ppy~4ju#$m7FZArZyc&fSeh4m#twk z5Dv<;iaNWx;4=;};AjwjXJv`o%#@0{H|YUBJ_LhI$)%yGClRQdbV)P}2M%R6b4?!}eMiTNg2F;&pw8_A%f}Z; z)u?W%wX{W6!^z3XTM^g8B~_3arRi;)2;L+q&22-ci?j=}v)=)ubH^%7KKS1s$8 zZao*QJ{9@@qmgU>hB}SIvpH;gTym?}aartU+gwTrxwN9IOSePGFfqbuLPev|XvZzB z8cFCvrk&Hu5z@-YU7;kxR6|2kMr3KGM$+WA&v*A9*dOP7XTI~E_kBP2=XrcM@_6TM z#oY{{cNAG;2d2-(#l^Ez{=&bM*V@>`L-8lmF4NfUpnSNUbe6o11JC?YBs%eVLLUar zE{gWLVtdBi_gaK0xe01J)y%11@~kLBZ#(jmbH~NQn7D?%tc~@!u_;4aQ}^vD+YS zJSF?M+#3C5nYeK}K*!iv9C}XlUOL4DEHjF~U#FksR~Fbl)S9vH4(&U0pZun=SdD-x z_Q<%bFNPsBwu~E{R8+HO?9qx-H7LoE&R)VmrW@B81L-z;$3V_P&uE^=LyDav(%|W zEoVq-hEBS;BP`Y&H;f$7FwaqEFy?x;F?O7XO-EE{XkQkWmMY_TZqozCq=;?o#7|6@C_cGdSaL?1 zMA!pT30+-XVE)kqBJ_n;cwN$zOKaMbPb?_c4*CG5>{P%3>I5UC>Xx|%R6s~+dqGPzuzjj!3!gKG>DfzWB@jyZEDyi<&Hmdq#DMqPcW`QZmm+2xNPUHU5ip0YpMN}y%hW; zxG@o?kvc6CXJ=(KgOc*w2L_D9uSO}Rc5tBjNHV-HW(xbNV@#O!uET?DHDYL~wIvG7 z-IR0(8v?}aVW3Y)YMFBWd$u`^P}WK}dqAL_Te9B#UW-@;p@JB$sk~%pkU;ntxiCFI3c+BMhtBWJv`jKR(_eLX|LX%q$gq&qf1_z=*olKxBD>BDFadI4 zeYGVuCeDS-&nnQYp38b_*+RXr${K&Tbd?|016Vo+K3(~a8==WXf^FavcRX@}5W493 z!}DTpu1(luUC<0Ne2OHPK(u08Zj2 zznuE-#&q8VAcF*6`S$SeaO&C~sBH-b2Gp8Buu9L!P^ITa+J1lJUSM6~T+P#CIQ4u~ z3$CZ;y|5zq7KKuwM|!h4Up=+^rnHm9QeR)t*VpGNT$oj4PfXAW z1R=&&4l%Dus0seAI8>&YwEDO?Q9!$9zkD={xq6$&OGe9s zOO7;hOEk#q@Z7UU7p|anbW&^S(kYS5+N1hWPM+q0)euLp3aZ-@7iWh%d!w}U9HR6c zpqk;TNe;|UKPxLM=er~<%j;-u&o;;F2O3zg$L**>!P-Dxiaxc{df~{(h|1t`77oh5 z@n{NIyv{~T5CBYO=4?#dx7zb`hukc1K|>#MvcR(8P9a9$x@DpGTG#D-Pp*xJc6K?v zy}MR;UwJ0mZI6-*Bb(|#D}^F2eeuz^gv{K~qviJh!zhSv&MxUY*lsF*c$5z9Jv(MUVuQk`4znK1)v2v7q==UH9La87xa}_~| z=HPdD7b(26Y`Gv0|Lw3jub{dMeq49m@`Jy3Tgq$NAP6}v`b*T>@4gOi3fW$`W~*Xx z+t%TRwIO15!`AYyh3#GAn@8;pt!<1g%z1gv@|-<&^p35qr3eP|=jS{Y)<&2J=7;_W zauiXJIj8Cvh3ogQY+s13o71qbKA%T))7LJNolTxKS(SpA^Z^5_^@&u!=9>r7!UsA6 zKZ|Qw6jV$vJjNOoY(B}?h?K6kJs)o!mFoRK?TG1x7sqe5X&;ceFHd}bHgCUrARCQf z*%Fyy6T^|b;7{)OZZT%w=)AT5jhVGD{y_~1$;v?sJ=PHUT?lfh?uG*qf_xdK8HPU| z(2yaoFW(nJ5FgeWBINXb7AnLuewP)3P=s4J5YZ*3r=Kubn_t^F+^=tOLDYsE_mR7R zxA<0Rw0l)mn;GGMedmH733C1Tc?JZL-uvh9vN4=gakHhfm2Wa~oBHBSN8dkTawCjj zi>tOa*R)EklW)F!GE+Luqia=rz!_KARdBO*kJ~0bwo9;TMaijR;PI^4-Mj5m9hr7p z8%qwQTgT)AC*pmXTASmg3mxZ%ZHgrEA9q6J98d_IDVvpW+gcm!Vvp1bZE-%k5=}ddJiMwOn=3f@Ew->}t#4c+)oSEj zdSRiOhK`jt+hmVvZif%$5k8x*AF(7lp%)bu7cg7%nDPFt6|ibnZqo$q(6sd zu)sL1GfOj3hBdyty!;_(5GySZ~Cbtex7*sYdE z>NzWnynCeRvwSQ_to2wStaNh#pP=B$LlhZFNirewGAb#TuBfSn$G9zOZghEUM0V!t zV-!{=l|3>R7wstzpOxt?w$M;e@Za2=-O>xSooHqeUl|SSDX~dC$fJ{naUCM>fq7wL z#L_!5HB3J~Ig^o*5z1CrTs$o&xf(*nAQU(2v9)F`61_SXw^}%sYG;{HC3EhHLzt zH&@2l6}Faxw$hZI3rwb`#a?XQYbYuPNUVRC-uOZ$30v6Kk|?); zkKNKSG&B^kod}izW2!3X>$GL-`tnV2Gg^%xyQsTwl+5kZ&Z^~GKpRDrDn!b zu@AZ}^=lQIM+@Bj90yT834!lg?DMFpF_Mms4#G#l$ep8jz&VpGUBAkGb-HSEnrBHx zUq5!egyM+6rL{$zqWQ@aCluUeGh&6RF+9mit*q3m z3uJ6-a$n?)7P2}YscZijbDkZby;*K6x9kN`G!lj#FFc{^59ixQFwp9qF=XaG^ zL*PjHw)gb(OuA4pinPZo>28Fau^xR-CE4ahM$O^UIw_*9?dDd|)7y)gsAzq<>PvYf z#lju`9G&^?#;EQg>VSNRc3OX#NXaGJ=6z(I_+>~;ghtWXi7;h}7C57Pw?7_&gQhlQ zc`dhc)#NOjMvhK;p=nn}Nr|SkFI9NkWc#~EM>_iYvLJvj@ZSE|yol>v_-qjLVRk7K zHX$_0pe}H-LqlJUjkX1*OPFuKoMfPy4)Rz}75$Cy`|ss8br!xA;+rQ z*yMNS=w=Grd`(M8I6vp8W7?S&(lxDAgw6!^w6L&{9>y;+>rDycRGxyh)5^Q$?+&GP z8eWUof4gQaH`n$F1JLeGYonb|XO7yEfPiC9c`5e&>W-JNd~gwE1ZC<~6TwqT#7mpUvuXN=={ zh)WeX6bl+23mW6DjY$e&C_JbgnKRF=Z&GBV^*6_{P`2Drg^6lNOM5XnPp~MoehA}S zXjf7GFugGKeW+UN#r1m+0s`84^i#~|ZfjEU3$BgYYtOF?AMQ4?sO3g%6!p!Gij>bZ zBrOfNU`pO@FmDbq6Dnril=X6#5-OXDiUdk@cs52kC0kmP6~n|A2eL3*4!!*wb{r?g z=laVWOreVPRC##Jm)K2r8h`uz^4VF#2LtYFX4$%B0wovoQ~3qQPtY7!KR$Yujnzqv zNlm@z#G!}vxS6>sW5iavh`5+DORqv}q%H_8bt#vgS`W0fmFB^70sxt;KbgzN`nrWT zk9HV#v9mE+R8(v!RdPc?A7BidLZVzy=lobh{*?!8=snEL&dpm1eN#0vyGKlvp7M3s zX`tIJV(hZCbY*@0P2s^cvgQ_pAn}NoZfgnuk-YNt&!YZHaM_9YIo~zzY+5b z3T9SR=wegzc`w7!@962_D(;P5 z-?AlHcg2(Fb{8u@khy9RAQNR`JePi?Y_|QApkiU+*3$Cb*{uN=a>BH}(I)=tWMk7O zHh_}NjeX}uc^isos-`kB3yhkWP<#ULsB?L4q|M#J;ULAUekxcq@9Oc*H(%xoGGCld zNJ;s)Si{{AkLwi=ZQS^X>+Mz3pqreFw>$WF^kC0Z?K?*1AHKdV%F6Qj40RpFAh5L4 z-A1u$+S=Ol?Y|ktx~W@KEJT=BZ7kk>%o;oU@w7cxc(|E3Z3-pj3e0{h?bu#l`Xj<^ z)QII!UMQ2nyN4}L&KQV@ja!%4cIi48j*K+zrI0)pn{O-fgY% z68j5QCd67UmSQg7wer=vyP+$USa@K?R$ykE%bxLS5-IcPHkKHr*qIGMfv=eb1>;To zit(DF^P>ie#+hl=8)hcyXF`S z>sG!ap5It&Y_6R?q-JNASw3Jd%n;hu3&6LNNp~+b@}7x9*5+DKlP?)^i;iW0?AG>e z7Eeb7GFg31!5Co;Ne}{s^YHuQGta4zZfU{YhwT=*tcG5w%sCFE=Fn=~budPPZFX7R zx+J3EPlDW{l2f}y0k6=zhMdu1r$X`qXyo2mh6^F@dCoH&?wI4U+MPp7hKTzqT)g#| zaY>2Hv+@CrT+sVYw>F|UjDZm2Kk|ufx^nZz5o;eq;R1`;QG3yAd#U4;kJj8M4|KqW zi7`<-U`d)ePe)OW*p=Hndu2oKDd9!q+k(ERe0YrE;k)QIgkX4I=r3M$%{3YiHyR_W z6dV*c%9RI&vy*F6-@e@?Zi%=Nvjj#B;cLg16qS^A2zgfC8?ptS^w*r{pD9(`5!h;6 zZ^_sR#Kp2!;0r6?pGjdjxX$LQ?5Q``Rm~mV&dei(y|&Dr0W`bzXBHJnZLe(1+Z(AS zrsVr~?eEov$GJ~K#uIEPynj#0RdaIhLt13P;tXb<K{(e;G^njCKL)kXuquYp0TlV zFe1+M)sz1>t^BvkB`8HiVW3Hc>*Xxzr<#c(C0N}Ty6*S&tJqHBTF6BYWY~i066@;) zc6wbY>EB(}KysbLr;SK@2XSpiHuq)7d}2J_)!2^CgU4x(7nSiL0xUH|B-bLOBV4e0e zhT?*b)eu!LyIQSmTvgdeL`ATpNJSZQugh?g_)-*F^v`*bPNFpn3bjs7`*<}m;<;sD zsw_tT$fVkba<#W=L)&faq<+g}TWX=(n!TtZG4lFQku&h?$(}-dSTdb5Ct{0wY3-7Xjk6}R>lLK_^b(1hwKaf8Wf`fBk^T+zlKd! zL19GoP_stWY6reD7nK0`mp3*a&g2#+M3;Eme?@cb*?w%*;NYZywr^Vyqi9M(0;_N| zR^h6Z)ytlqtNP)fyV%~Eo+6;U7zj3uc;&{8c$7K<<>*Ck`wni)Nab5O_sHV2CNcay zd=v9`LZ|eWCY9OXOsJvNd&GI4cJ61=I0sYnMwO$Nvo60+mal;_1snDwOo|4Oy`B^P zBtk(_an}k9ckc0xeo%+sPbCTkAxtP!UMi4-(6# z$Ft~%$WKYj{5Vlop8X(>oCpuE9i6LDF~>U&b8$a1EMY~qm|3WfvO^_dEmDOD8O0}4 zIYM&uBbiYBCC~1LP=WKMcKT2uMCR~*USxde_wrzOo2tBkPnMct;sV@37tqQ4%2n!Y zk{8tf&nN0nP3PYoKGn+porn}y#8`8sTWBvXxQVW~j3G_~q#**=r%z6Mc04$+r)0ms zJX4SyWDUp+)@A$bBgqI{5XKW~#P@EZ$Bx0Ciz)Kgbk#f!T9Y&7AB$UZOOqkbQ+Y&? zSSq*W#~HkFg4QbSWyoQvFKzJj6|z4v)`h!F$~wu(FHdRgAei45^3wIckWfw?a#P=+Qh+FDz|#aK2N<`95yZG>nljU5eH-UkRKzw zzK2EU!yb#_snRzwVSRnC5lY2R+3Vje(JuS$HEmh2%XUucWnR7FXDigK*E2Kwa`4&z}NNOv~Hl#E;z8%3i_MpZmV8H*Nc z$oK3SU0PGScI~(Vy|{CM{Y+oCp`Rc>zhM?>)nIJP#)A4bcKk>$x=70?p%Xm3qOMTa z(Z>GW?Q6uP;x><%DpoV`pkbh1T|fp71jRnJ5OF4?`A{*Mpwo`~C3DmM8Z@t+x_kCv zxVTyqE(8=fFPKo$^T~sn*u1`ihkPoa2Poni)myP zION?xOY|2?=s%-^zX2dnO?I%`r%TU;8y8J+=(JQAhf=-#IgppdqkWb^9_7DT<5yr$ z`$%>-=(l-UZ8XehZr*2d{Bp0re!iM{^R&TEBE*wmE5a#ZF;HIMV9k=d6G5J~82jlv zjfLx0u26d{OZRNQ*D-0inp%7FOvOT{wutqp-_4iT=2w8=O+PcunS2S#uGDzzo;i>c zRO^D6yP(#L*@}cUdCY&{6jwh4l6h6Z`E?LKoJT|C8l5&Bs@8Phkwc1~RG7Yr0dm~& z(x49B2ZVnZ1Cn$SXLihTfpHt*H3@ZETADlwDTTa5mB*HQzjXt*xH_oG6FOQfo693X zra)G?xVgit=RBg9?(p>(c*7In6;IZXQ8Q&hVTr}NDkvzVOoPB}e9;u^3NmKTO9NkQ zv`EL$3gr<2g8UVvSp#BRyEtaWA>((pG^=@d+SF07D0LI@!W67(JswjaESH$@c^R|t|w`23QvF+b8JO(y=G5O zOPh%5B1Rf>e-xf-3$*YUXl;-L8k96+?6M8&u9}lf3T_G&A6CvZ{_*ym1?#>(7^(@GlKCK}|Sm|{T(PG)7HD4Fma|1hWP#)nom2kLEh;rpA`gOkfk_9KFawpY%_n|T;qz^HL5%P` z1kgB$;pgA`<&~we_cBOxYzk^>YH*ZVL2^t)B_Uv;sG3;VrI$HBKhMOyA3()pb-!Gl zlB;N{D>CoT;MOjhfH-<4=9HJB^gIQX3GrV)Ij@XG+5t~nu&n^A0|T*|KO_!v$ER3H z{e7I+Z!eyhf$X2F@n#$@72SD;1)GvvS~a( zhZ(a@u9S&mQ;HT*15xwSwJQh`XKKvNEvfHGf&iv>hsggY7v;ZPBYyX0{^L<647N#! zZr&-@*S0J6bO`c3@E0h}Fz+~=k#$$)^r7(H=oe*TIy*KgNIWH2w{?VjP{W7k#C`?S zI!Stahe5w71)-$y_9yx>MIz5Az+v9!a~}7eXYuJ&>Nr_hxG>#i3PP2ABoQK<`8$4c z|AC(}Ir7A7ih+=$YGNs&RT0Ot6R}p`F85+%0sz@sTdzf&JkRl&ei+Vl`x`GZe&bd) z(FVjbY8)S}Src&)&ZTQ*J5kU8Hzq{>a}nDdz|`>JxmWXe`~ryBTn7WvGcqm;4mc+2 zvJ*))ia1@>Dv<`QeX)XR;P1Kr`pr) zBX=Oe4clZ~ynrg7@PH;3;*vu-<}OqQ#oMro;|KFnc|BY4t zyAYwi7+=lZfI4RU)}!(pD@`7qukVrYdu+P?q=w4?fb2f;cTG%X=0>pf+cb&OOS+fK z1~M2MX+l)K>7>bpqVruSL_W=9Yg0gt1o70I2Z8+U3@h7YcJV+fD2@vYxgPy9V4|P? zEn9ppf52r{9CUjZa9FLhash?be>PhCR}8UNBekoe{-q9oo{aqwhns%IveF*%9RWsb1eU zBII=~u=-!@YAI~qDc>RshYxwyf>X}5P5@DE{aVmLK}5sjhw6HuOR(Wd-v)jM(##2> z!cW;CCKaNyr-vBcvX6`a)d4wb^amV1zU0$slgW>GN@V}YXm~@4dV|y*URTsKitDG% zBCA7!w^cZG5H`vb8(#H21K>k&`dM9nC@#WXB$5FTqoZsPqp_HUX6Kyie<_clcmLJR z|LY_DcZ2Q!`>6HBWzdpg?fp~u8^zbUtmDysh0^pAVPybg=UF0I_kI|eOUuhs+Sbz& z>Leo3Q(XE(9pA2MRwsUEMN(El?mWPcr3C-jX;6r!O48V2{U&^VWS|i~Gy}aHzny~u z>(cmt%s@eI0^0-pl7KoBGuyW>g?Rht1at>(nfinXX;%8Vx4$E&Au$;K((vyJqd4;y z+HLBO?)Sgw(fF~ey-oW(#-kkwo!S=0&2i^Y+n2kz@8-`Vwv0+efWZ2#>KIq+H7XN) zd`MAi#y(;P;&}$how&>5dswh->k7PeaN-&pL*c0VWLHlzd#t|%7dY5e=kn#aAj!>F z4NEI<&^tpWe^Rg?HL}Op)Q=iWOVFM!N|>9Ob$~Na=BlrvqVmq<`(Lz=jIVjU?i?b3 z7j}ZyA9dbB*l+_C+Mv@H=RIpgQ%o>=rGOAi?J{E=hj(Xd=BHG%yDPP*iSF~iuje{V%asRw<;zMBB%R*j;q! zv-17g7@Y|j-4xeTD4^yt*IKdG4=Bm*`EjcI$0l^`MjM??_oTFH8vb~}RE=t^` zXmO@L6K!E|{`%C2&ux`(N~0TZJ#@&H<&p$x@-gkYqc%a7bVsAhl2J1rVuw+W_fB(M zR>zawlLH5M4hC#18(=NEO6UtHe)NOgCrn%c^KAN&;DEfu(mK9r8X5$yIypJ1o8kg( zE1SSugJutT5u4P+h=_xX;?Anj%459!Vb99!*5>T9GX_3r%m78X1FZ#hlIx>+rj;JL0Pz{+~m@wM`)(E!s| zyPMooz*~ims}N`WCqdk)l?2<4MzlRedvG-ZjieHr@rxpDVZ0|^Cle~0PUgHiFBixV z!Umln$C-jMU%mQV^b8{_f?J2SgDgd!5}8owCV^UQ)aNJ7Rbo#ubt#9@OT?h=%=;2( z?J+z&Xo?Aojm?Dy3-PUW{Ob2=YP%2YkrSoUIc;sqlBkP(hcMAXFKnGO;5b6*1}1Vw zW@a0%crXW;TaWJQPKDHHG|Nm)PcLk)&6)z2L+x*H?u{KL>DZ#}FB*Nt#(Hcz;rdEc zpmoQ+YOCDlT7{Ab?i2>o1$`#%&CPL=>qFGf1TA8q-RB$6#&1b&jW8dSy5^ly)Gjvf z0I31>_{$Wlj+WWuTH#v-AU1$mo(?X0lf>FxEaU$=1y*#tfbBXs!Dv9Wi~Rufte}=YwGL*_L?K$+C~7T5n(I*S9Br6@=7T~f{OwOqdB>x=z-*R2B51A( z7CCH7sgZ%KirP<9 zZLL-9wu++z7$Fr24NnBHo714vVIRjO`GKdqJu6T(di4#pdmP%;AUe1b=sq77dz}7J zk1j0&t!J%YY(?y#`k1WDkJ0np368+%n?vORCncEg`fCK$3!ycn6YWs4DcV}DlT;UD ziUhL)(Zfs`3DaH55El&*+=^>?nV?f+Q+Wf_h=Y^L pWmrRAl!4l0IRy9nzt!F?asdV}G6RjzmjP@b3Ky_4Ip?qc_CMjh_;~;T literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1_3_0.png b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter1_3_0.png new file mode 100644 index 0000000000000000000000000000000000000000..eb6c5ae7218daf04343c8497763f280d86344bbf GIT binary patch literal 5246 zcmcIod011|w$FeB2SQt)qKpnls4{7p14z+=91&0<%(E2?V+ivg0kNPJ5Km-=(3U8A zm}H(M7OxmkQUU>)LM%~~8Dt*9J+!^;?f2gI{<-hv`_7l0z1Ke3d;ivNt>4UJyRZ0*kz+YYUE7h-*4_ylmCKJ@u z{u);epm?dJ%O~ANq4o}e-xyhk=S~e@CtnS_J~FrL)pz(1E+^R6yWK(QitmAwz~S%r z{;CCdqPul;;%;VMa?sAYE#>=F>IJjWFEx&JPcbx7JOAr~QqsXQ+}R70=%3@y9x_*W zer@XAvr`tyQ_lNok;4h64tckA)KZ5U?TU_)W=cb*>ur}ev%8$~M(P{J)b;e%K5TSa z!Mi}nX0R&+1#&)=%K)HwdOYy>86_3aw8KM;1gi%8lYN~!qeIq>rL>RQUCKEA8GZ`fPzlS4@OC=YJaDvg(k~ALvkw(G;4MX-HhHgJq)zHVuN3VqDxz0r z-|ijxxyvBIsO=c(Mv}Mgw|V7P=;y78cZiyf#7ZxE{WNzZXR!X$^B2F5%V0WPs+)G# zd70IoG^BcrLK;RU)iS5Cxfz07;4VfL=l_PI;uIv_wDC@2=J@1LzvI*Q*($?HKytyo zra2d)!F|C#=DD~$W(YB4B0b%rwfq2NFJ|(fX8S5cFKQ0 ztoV0_K<_924T}HB=%_6o6k0)Q3ad_#1Q6lWmj#eGNlv;bd7SDa*b76&It>TPf!R8U zA#t%Bj(pUzLUOash}d4SlWy^x8B@Nj_6RE)dIxkQO32Gml)(X>#Yc|<&|jp}!Hau_ z=sZGYV`e{lQpNMK<{o(>c2ZBzQN=ioal3~_KTDi?4Daq;B{=M{MP*=ui0{;5VjmpK z%!-rMi!3vn2z?0n-L_bg(V_{y;E$l#kKwe^Pf0fsi~Phip8BA#iM*+t82BVi?Si?io|Yz8I)ky_4nOMVkKZrpzU*%rS$5}+TvB>Z_C3A#KZw72 zZ7&KXyf8rg_x}TuKRqDHR~J~d1y8UJI(yw?fa=h@RDmx)g88hp(v$-XRLMY-7v_Ch zcU88}V9P||ct11F^T8?^cwCI!pIU)R6&N#Z;ql70h><_hxl91F_Z04#rMH;QoA8~P z+IR6b+}DbYU4S;mtEAE!y<*N^ZCg)*9Ypq{J-xh!TT>Y-8m77%*R~eJY?Akp=UDz# z@KUihU2u@8%k-k5CNcgN6nEn06wBXI*3RL^cRO^#KYLi{KI4*^GeJmWpk-^36)7fs z&S)uNWA7R^S89hw%2PxQDxs>KJYnvqxARxp$m9m0kZoPe@^wVyHz@!{0L1yc9 z;$m6i{d158MzmgOqB7yWF{E)sG|OgS<`fRhR+bAwLhT-kZLh10$!ACmJ|HM99#dSU z0j?j^4Aofy)$-<0Pnywm$-;iVH-82Vj|VZ|`6VF#=95avgyEdtB!eE410d(x0fx-9 z8AY`@{uf}?o?le*@V6CJrj=s$#}z89?jlR_Ww`)JT3X=yKrhY!wAc}9&Fve!dkh@s z9E!rDthw5Ew^Tt+=*gGJ$~ZTF%LegIBHC#JO_0ZNJ*~!iFm;Xwgj_|Aw-zmdVo$5d zV}#dzZUbPRG()Dd1n!%g-NzZhaJ)}|mkULYC*o-O35jYq^fGw#Z+xH)Z)lJ}qa#Kk_tWPD*%7_z9-vO6c#p7Ingm=1bb?>FL&% z!kge+?z_$Clnrw@&T5R6e;D?Hlk-6~Y9;heRw=f0!Z3Zoi2r@H)p<_3y~B;w2s`_a zD)KtNIErR|>RiZnYRj`ZPuV#;2NS-^HC5~+9m}iA%5pheTpgu7bba|rx9QpH{whvF z6dqJ9g)LE5%&V+&Nn=~?dacHTp6}vumcCBepXHb<8Q@k#X00ZQm6()YR&wYrRQ5A< zzQ$WEPx&5{E-lk?LZpU zb^uB2zy5?P(45oKdp~Q<|H%9Zx-@xnNz8&lyn^`aZ90{d_n%5EL~_C1(Kn-b*TS&F zxd>kdCNojsI7W`7V3%bEEhjMgNH%EyFu z)@ePYxUGI{11g}*E7unXjv z_D>$E>%*(x0!YC!%f1hQZN3U={igG;fEI3y26)+aJAA1yxeJ!05}1w7s6BWd>M1d5 zcZXqr2lb_k((V9Q;GRmUQ)AUH(1j*Y{*I>uzmuk3Z2E-T=i%N^87d6T+i-zu%8gWS zH12&v6Ie$^NsVA)}uU2St5 zNC!x=Im3>mv6Jz|JPmSHxCL(dr~kdiR#lgHH{~ zG?tPzGdpQ0fx~}IoC%5H-MFY^QZ5s7F#I~i#%#q219y;qRZ(WPx0hd0Qfdw)-ANuo ze}vb9__)T-!^ye7F(p#OB#>>yiPRz}u`3sQFdarxlK+-hNO$bb? zhdINDV3E?^y<0-E^%Am`ITa6GQ%;?3`0Vo+mNyV-IqDg?_Gc4G-`RvvUvF6ZsWBqd zrL=>Bp45pohMna^IXew;#_mMbK#07puUAotuO{>dna&4+{^s*jK&4Nwa~`7RYZW7m zBv%nJ8B#qqyMzA^Ce_g(Q$S+AV|K?;MTRm38%Su{xCLp{BeNgDgYfuLh>f#o6C&Xs z!HuzcvAYvf}? zF5NnLD|mBq(pN=IEll<-$6H;!`HY>AUcu3cJYOb^x8t9(i9$o&wQurvu1Jtp4p$je<=?xY= z$K{ufg1`AXg8n-!F0$ifxr7phZ3O+LllQhGtl#$OXbe*2X&7Ah7~T5=jq(?|MKAI* zzIBDz%dTqENAejvEC15W`4^q1bfeMXr)Ir;Ud&))V3>|}LN{G`^9(TmpE>|b z;g8L#suq*au6_96`v7hbKg1fCbF@+6?b0W(!fd(Nvq_4iFJ8Yk4?b9|+1@7Of*Go~ zbPC9_tjPU#b@pxR*%SqE(9s9UT7MQ7)ZF~*gjxBxv492ozf|kQ=ij6OC0!1>)?7Mm zwH|1Ul|XGZ!B4BI9|K_gfyYRAyo)_8;)EoVt`MZSv3AaDUsDJ1XtwC-`+|Z^Vi}6Q zr%8b&6!wiazWfrTDHBHxo%01J$^6fwpC4SXD3HaC-rx5^smy**-6EpxxRQQFQ)AKi zt3?~%JCtw+q-@KboEzzH4s72wn$}l5b+E7ru^;HryWEC=TkuB}ZE(jKr-T0ci>mJT zUD=KWe>#EtPl)h52Krl4&Osv|2y9QtDMP?RL?EGK4$#$OY(?SK{G@A13s3z46ix#)u$A0txqa3C2YAz>kqByDMYZ}{(CLo8~9M1$jwJ@)lSI7KZ47U za%FR-1wSOJUp{CpT|^I9kZdX1(yX9rE(Tbv(wNoGUi}t`MBg|tYZD7cl4ZXCai*S` zQ3D@vtLS)po0(y&BJXjN8kbxIs52!{RIVTNda;nSgk8qSm%*1h*Yo3Su_M!jm$AE6 z?6$gEJ~=1$Kc~gEG6&bJLi-eSt0yjE8)Q~mOE#FGYGSdvRs~fhr2rVgHc5mNiNhnv z0b6tL!D}&Yl4N)2UT%XK?Uv*y@Ya|)Z(te+Fq|CCN|0<>{>c9eN=)60D$l-OL2z}FzQ;>8?W|FnW?u_ww;pX~Oeqnetj zFWT_@VWQ@I;jNV0RI%tEmX|SwsI3C{G{=u&zIozF&sO{#Qj6(zRz3!-7CP%TG8~2d zw8#@h0O<-%zXSjWV*mH65*5?0x~XzZ$2ImX1mtlalCmBCa#SalXHB%kJr!+YjOufk z%DBe{VMK1%VB#d!lkn*y5YgGj2Ej2_w1&hyVZp literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter2.ipynb b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter2.ipynb new file mode 100644 index 000000000..589271b48 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter2.ipynb @@ -0,0 +1,2698 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Space, Time, Motion, Reference Frames and Reminder on vectors and other mathematical quantities\n", + "\n", + "Our studies will start with the motion of different types of objects\n", + "such as a falling ball, a runner, a bicycle etc etc. It means that an\n", + "object's position in space varies with time.\n", + "In order to study such systems we need to define\n", + "* choice of origin\n", + "\n", + "* choice of the direction of the axes\n", + "\n", + "* choice of positive direction (left-handed or right-handed system of reference)\n", + "\n", + "* choice of units and dimensions\n", + "\n", + "These choices lead to some important questions such as\n", + "\n", + "* is the physics of a system independent of the origin of the axes?\n", + "\n", + "* is the physics independent of the directions of the axes, that is are there privileged axes?\n", + "\n", + "* is the physics independent of the orientation of system?\n", + "\n", + "* is the physics independent of the scale of the length?\n", + "\n", + "### Dimension, units and labels\n", + "\n", + "Throughout this course we will use the standardized SI units. The standard unit for length is thus one meter 1m, for mass\n", + "one kilogram 1kg, for time one second 1s, for force one Newton 1kgm/s$^2$ and for energy 1 Joule 1kgm$^2$s$^{-2}$.\n", + "\n", + "We will use the following notations for various variables (vectors are always boldfaced in these lecture notes):\n", + "* position $\\boldsymbol{r}$, in one dimention we will normally just use $x$,\n", + "\n", + "* mass $m$,\n", + "\n", + "* time $t$,\n", + "\n", + "* velocity $\\boldsymbol{v}$ or just $v$ in one dimension,\n", + "\n", + "* acceleration $\\boldsymbol{a}$ or just $a$ in one dimension,\n", + "\n", + "* momentum $\\boldsymbol{p}$ or just $p$ in one dimension,\n", + "\n", + "* kinetic energy $K$,\n", + "\n", + "* potential energy $V$ and\n", + "\n", + "* frequency $\\omega$.\n", + "\n", + "More variables will be defined as we need them.\n", + "\n", + "It is also important to keep track of dimensionalities. Don't mix this up with a chosen unit for a given variable. We mark the dimensionality in these lectures as $[a]$, where $a$ is the quantity we are interested in. Thus\n", + "\n", + "* $[\\boldsymbol{r}]=$ length\n", + "\n", + "* $[m]=$ mass\n", + "\n", + "* $[K]=$ energy\n", + "\n", + "* $[t]=$ time\n", + "\n", + "* $[\\boldsymbol{v}]=$ length over time\n", + "\n", + "* $[\\boldsymbol{a}]=$ length over time squared\n", + "\n", + "* $[\\boldsymbol{p}]=$ mass times length over time\n", + "\n", + "* $[\\omega]=$ 1/time\n", + "\n", + "## Elements of Vector Algebra\n", + "\n", + "**Note**: This section is under revision\n", + "\n", + "In these lectures we will use boldfaced lower-case letters to label a vector. A vector $\\boldsymbol{a}$ in three dimensions is thus defined as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a} =(a_x,a_y, a_z),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and using the unit vectors in a cartesian system we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a} = a_x\\boldsymbol{e}_x+a_y\\boldsymbol{e}_y+a_z\\boldsymbol{e}_z,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the unit vectors have magnitude $\\vert\\boldsymbol{e}_i\\vert = 1$ with $i=x,y,z$.\n", + "\n", + "Using the fact that multiplication of reals is distributive we can show that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a}(\\boldsymbol{b}+\\boldsymbol{c})=\\boldsymbol{a}\\boldsymbol{b}+\\boldsymbol{a}\\boldsymbol{c},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similarly we can also show that (using product rule for differentiating reals)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d}{dt}(\\boldsymbol{a}\\boldsymbol{b})=\\boldsymbol{a}\\frac{d\\boldsymbol{b}}{dt}+\\boldsymbol{b}\\frac{d\\boldsymbol{a}}{dt}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can repeat these operations for the cross products and show that they are distribuitive" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a}\\times(\\boldsymbol{b}+\\boldsymbol{c})=\\boldsymbol{a}\\times\\boldsymbol{b}+\\boldsymbol{a}\\times\\boldsymbol{c}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have also that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d}{dt}(\\boldsymbol{a}\\times\\boldsymbol{b})=\\boldsymbol{a}\\times\\frac{d\\boldsymbol{b}}{dt}+\\boldsymbol{b}\\times\\frac{d\\boldsymbol{a}}{dt}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The rotation of a three-dimensional vector $\\boldsymbol{a}=(a_x,a_y,a_z)$ in the $xy$ plane around an angle $\\phi$ results in a new vector $\\boldsymbol{b}=(b_x,b_y,b_z)$. This operation can be expressed in terms of linear algebra as a matrix (the rotation matrix) multiplied with a vector. We can write this as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{bmatrix} b_x \\\\ b_y \\\\ b_z \\end{bmatrix} = \\begin{bmatrix} \\cos{\\phi} & \\sin{\\phi} & 0 \\\\ -\\sin{\\phi} & \\cos{\\phi} & 0 \\\\ 0 & 0 & 1\\end{bmatrix}\\begin{bmatrix} a_x \\\\ a_y \\\\ a_z \\end{bmatrix}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can write this in a more compact form as $\\boldsymbol{b} = \\boldsymbol{R}\\boldsymbol{a}$, where the rotation matrix is defined as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{R} = \\begin{bmatrix} \\cos{\\phi} & \\sin{\\phi} & 0 \\\\ -\\sin{\\phi} & \\cos{\\phi} & 0 \\\\ 0 & 0 & 1\\end{bmatrix}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Falling baseball in one dimension\n", + "\n", + "We anticipate the mathematical model to come and assume that we have a\n", + "model for the motion of a falling baseball without air resistance.\n", + "Our system (the baseball) is at an initial height $y_0$ (which we will\n", + "specify in the program below) at the initial time $t_0=0$. In our program example here we will plot the position in steps of $\\Delta t$ up to a final time $t_f$. \n", + "The mathematical formula for the position $y(t)$ as function of time $t$ is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t) = y_0-\\frac{1}{2}gt^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $g=9.80665=0.980655\\times 10^1$m/s$^2$ is a constant representing the standard acceleration due to gravity.\n", + "We have here adopted the conventional standard value. This does not take into account other effects, such as buoyancy or drag.\n", + "Furthermore, we stop when the ball hits the ground, which takes place at" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t) = 0= y_0-\\frac{1}{2}gt^2,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which gives us a final time $t_f=\\sqrt{2y_0/g}$. \n", + "\n", + "As of now we simply assume that we know the formula for the falling object. Afterwards, we will derive it.\n", + "\n", + "\n", + "## Our Python Encounter\n", + "\n", + "We start with preparing folders for storing our calculations, figures and if needed, specific data files we use as input or output files." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "# Common imports\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import os\n", + "\n", + "# Where to save the figures and data files\n", + "PROJECT_ROOT_DIR = \"Results\"\n", + "FIGURE_ID = \"Results/FigureFiles\"\n", + "DATA_ID = \"DataFiles/\"\n", + "\n", + "if not os.path.exists(PROJECT_ROOT_DIR):\n", + " os.mkdir(PROJECT_ROOT_DIR)\n", + "\n", + "if not os.path.exists(FIGURE_ID):\n", + " os.makedirs(FIGURE_ID)\n", + "\n", + "if not os.path.exists(DATA_ID):\n", + " os.makedirs(DATA_ID)\n", + "\n", + "def image_path(fig_id):\n", + " return os.path.join(FIGURE_ID, fig_id)\n", + "\n", + "def data_path(dat_id):\n", + " return os.path.join(DATA_ID, dat_id)\n", + "\n", + "def save_fig(fig_id):\n", + " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", + "\n", + "#in case we have an input file we wish to read in\n", + "#infile = open(data_path(\"MassEval2016.dat\"),'r')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You could also define a function for making our plots. You\n", + "can obviously avoid this and simply set up various **matplotlib**\n", + "commands every time you need them. You may however find it convenient\n", + "to collect all such commands in one function and simply call this\n", + "function." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from pylab import plt, mpl\n", + "plt.style.use('seaborn')\n", + "mpl.rcParams['font.family'] = 'serif'\n", + "\n", + "def MakePlot(x,y, styles, labels, axlabels):\n", + " plt.figure(figsize=(10,6))\n", + " for i in range(len(x)):\n", + " plt.plot(x[i], y[i], styles[i], label = labels[i])\n", + " plt.xlabel(axlabels[0])\n", + " plt.ylabel(axlabels[1])\n", + " plt.legend(loc=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thereafter we start setting up the code for the falling object." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    t[s]y[m]
    00.010.000000
    10.19.950967
    20.29.803869
    30.39.558705
    40.49.215476
    50.58.774181
    60.68.234821
    70.77.597395
    80.86.861904
    90.96.028347
    101.05.096725
    111.14.067037
    121.22.939284
    131.31.713465
    141.40.389581
    \n", + "
    " + ], + "text/plain": [ + " t[s] y[m]\n", + "0 0.0 10.000000\n", + "1 0.1 9.950967\n", + "2 0.2 9.803869\n", + "3 0.3 9.558705\n", + "4 0.4 9.215476\n", + "5 0.5 8.774181\n", + "6 0.6 8.234821\n", + "7 0.7 7.597395\n", + "8 0.8 6.861904\n", + "9 0.9 6.028347\n", + "10 1.0 5.096725\n", + "11 1.1 4.067037\n", + "12 1.2 2.939284\n", + "13 1.3 1.713465\n", + "14 1.4 0.389581" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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7UtuKykpSX5Gqp/PRx99lByiT/X+TDh7DfOioqLkvwcOHJisp76+XseOHdPPfvYznThxQpdddpmOHTuW8Tn1T6MnDgDdVF5ers9+9rNauHChFi5cqOuuu06DBg3q8JoRI0bo4MGDyceHDx/usL2zEHU4zhymP/zww3O2zZs3Txs2bND+/ftVXl5+zvYnn3xS5eXlWrRoka699trk8/v379e9996r5cuXq66uLuW+P62goCAZVOFw+JztqWovLy9P3gTk9OnT+u1vf5tsTyKR0KFDh9Ta2trpew4dOtShTV39kTFy5MgOP9ODBw8me9LpOltbfX292tvbL+i90pn6hw0bpm9+85tauHChZs6c2eEPi7OcTqcSiUSXP/d00BMHgPP44IMP9M477+iTTz7Rrl27NGbMGG3dulXhcFivvvpqMiRXrlyptWvXqrm5WUOHDpXT6dTGjRvV3NysV155RTNmzND27dv12GOPye/3q1+/fpKkY8eO6dVXX1UkEtGhQ4f08ssvKxwO649//KMmTJigUaNGadWqVXK5XOes4B4+fLiGDBmiq6++OmXtM2fO1IYNG2RZlo4cOaL6+np98MEH2rlzp3bt2qUBAwZoxIgRuuyyyzq87+WXX1Zzc7PWrl2rOXPmqKKiQvF4XGvWrJHX6022ye/3q76+XrW1tRo+fLi2bdumkydP6tChQ1qyZIl+/vOf69ChQzp27FhyOHrChAn6zW9+o0QioYULF+qdd95RfX29JkyYoPvuu0/r16/X22+/rQMHDui+++5TW1ubamtrk7V/9NFHam5u1muvvdbhD5PS0lLNmzdPwWBQbrdb+fn5+pu/+Ru9++67yRoLCws1atSoTr/rqqoqrVu3Tm1tbZo9e3byfT6fL9m2AwcOJOvZs2ePtm3bpnA4rLfffls33HCDVq5cqSeeeELHjh1T//799Vd/9VfnfM6kSZO0YsUKxePxbq/Kz0skEolu7SEN0WhU69evV0NDgx566CFJ0smTJ/XUU0/J6/Xq8OHDWrBggYqLi9PaX6Zu8WZZDjU3++R2W/L54hnZZ2/FLQBzS19uZ7ZPMcuk9957L7nC/R/+4R/0ve99T16v96K+z7a2NrlcLv3kJz/R0qVLkz323qwv/3fb3f11Jis98d27d2vixInav39/8rl169Zp7NixmjJlit5++22tXbs2uUqz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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter2_25_1.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "import matplotlib.patches as mpatches\n", + "\n", + "g = 9.80655 #m/s^2\n", + "y_0 = 10.0 # initial position in meters\n", + "DeltaT = 0.1 # time step\n", + "# final time when y = 0, t = sqrt(2*10/g)\n", + "tfinal = np.sqrt(2.0*y_0/g)\n", + "#set up arrays \n", + "t = np.arange(0,tfinal,DeltaT)\n", + "y =y_0 -g*.5*t**2\n", + "# Then make a nice printout in table form using Pandas\n", + "import pandas as pd\n", + "from IPython.display import display\n", + "data = {'t[s]': t,\n", + " 'y[m]': y\n", + " }\n", + "RawData = pd.DataFrame(data)\n", + "display(RawData)\n", + "plt.style.use('ggplot')\n", + "plt.figure(figsize=(8,8))\n", + "plt.scatter(t, y, color = 'b')\n", + "blue_patch = mpatches.Patch(color = 'b', label = 'Height y as function of time t')\n", + "plt.legend(handles=[blue_patch])\n", + "plt.xlabel(\"t[s]\")\n", + "plt.ylabel(\"y[m]\")\n", + "save_fig(\"FallingBaseball\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we used **pandas** (see below) to systemize the output of the position as function of time.\n", + "\n", + "\n", + "\n", + "## Average quantities\n", + "We define now the average velocity as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\overline{v}(t) = \\frac{y(t+\\Delta t)-y(t)}{\\Delta t}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the code we have set the time step $\\Delta t$ to a given value. We could define it in terms of the number of points $n$ as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\Delta t = \\frac{t_{\\mathrm{final}-}t_{\\mathrm{initial}}}{n+1}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since we have discretized the variables, we introduce the counter $i$ and let $y(t)\\rightarrow y(t_i)=y_i$ and $t\\rightarrow t_i$\n", + "with $i=0,1,\\dots, n$. This gives us the following shorthand notations that we will use for the rest of this course. We define" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_i = y(t_i),\\hspace{0.2cm} i=0,1,2,\\dots,n.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This applies to other variables which depend on say time. Examples are the velocities, accelerations, momenta etc.\n", + "Furthermore we use the shorthand" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_{i\\pm 1} = y(t_i\\pm \\Delta t),\\hspace{0.12cm} i=0,1,2,\\dots,n.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Compact equations\n", + "We can then rewrite in a more compact form the average velocity as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\overline{v}_i = \\frac{y_{i+1}-y_{i}}{\\Delta t}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The velocity is defined as the change in position per unit time.\n", + "In the limit $\\Delta t \\rightarrow 0$ this defines the instantaneous velocity, which is nothing but the slope of the position at a time $t$.\n", + "We have thus" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t) = \\frac{dy}{dt}=\\lim_{\\Delta t \\rightarrow 0}\\frac{y(t+\\Delta t)-y(t)}{\\Delta t}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similarly, we can define the average acceleration as the change in velocity per unit time as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\overline{a}_i = \\frac{v_{i+1}-v_{i}}{\\Delta t},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "resulting in the instantaneous acceleration" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "a(t) = \\frac{dv}{dt}=\\lim_{\\Delta t\\rightarrow 0}\\frac{v(t+\\Delta t)-v(t)}{\\Delta t}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**A note on notations**: When writing for example the velocity as $v(t)$ we are then referring to the continuous and instantaneous value. A subscript like\n", + "$v_i$ refers always to the discretized values.\n", + "\n", + "\n", + "## A differential equation\n", + "\n", + "We can rewrite the instantaneous acceleration as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "a(t) = \\frac{dv}{dt}=\\frac{d}{dt}\\frac{dy}{dt}=\\frac{d^2y}{dt^2}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This forms the starting point for our definition of forces later. It is a famous second-order differential equation. If the acceleration is constant we can now recover the formula for the falling ball we started with.\n", + "The acceleration can depend on the position and the velocity. To be more formal we should then write the above differential equation as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2y}{dt^2}=a(t,y(t),\\frac{dy}{dt}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With given initial conditions for $y(t_0)$ and $v(t_0)$ we can then\n", + "integrate the above equation and find the velocities and positions at\n", + "a given time $t$.\n", + "\n", + "If we multiply with mass, we have one of the famous expressions for Newton's second law," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F(y,v,t)=m\\frac{d^2y}{dt^2}=ma(t,y(t),\\frac{dy}{dt}),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $F$ is the force acting on an object with mass $m$. We see that it also has the right dimension, mass times length divided by time squared.\n", + "We will come back to this soon.\n", + "\n", + "\n", + "## Integrating our equations\n", + "\n", + "Formally we can then, starting with the acceleration (suppose we have measured it, how could we do that?)\n", + "compute say the height of a building. To see this we perform the following integrations from an initial time $t_0$ to a given time $t$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_{t_0}^t dt a(t) = \\int_{t_0}^t dt \\frac{dv}{dt} = v(t)-v(t_0),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t)=v(t_0)+\\int_{t_0}^t dt a(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When we know the velocity as function of time, we can find the position as function of time starting from the defintion of velocity as the derivative with respect to time, that is we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_{t_0}^t dt v(t) = \\int_{t_0}^t dt \\frac{dy}{dt} = y(t)-y(t_0),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t)=y(t_0)+\\int_{t_0}^t dt v(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These equations define what is called the integration method for\n", + "finding the position and the velocity as functions of time. There is\n", + "no loss of generality if we extend these equations to more than one\n", + "spatial dimension.\n", + "\n", + "\n", + "## Constant acceleration case, the velocity\n", + "\n", + "Let us compute the velocity using the constant value for the acceleration given by $-g$. We have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t)=v(t_0)+\\int_{t_0}^t dt a(t)=v(t_0)+\\int_{t_0}^t dt (-g).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using our initial time as $t_0=0$s and setting the initial velocity $v(t_0)=v_0=0$m/s we get when integrating" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t)=-gt.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The more general case is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t)=v_0-g(t-t_0).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then integrate the velocity and obtain the final formula for the position as function of time through" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t)=y(t_0)+\\int_{t_0}^t dt v(t)=y_0+\\int_{t_0}^t dt v(t)=y_0+\\int_{t_0}^t dt (-gt),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With $y_0=10$m and $t_0=0$s, we obtain the equation we started with" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t)=10-\\frac{1}{2}gt^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Computing the averages\n", + "\n", + "After this mathematical background we are now ready to compute the mean velocity using our data." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    t[s]y[m]v[m/s]a[m/s^2]
    00.010.0000000.000000-9.80655
    10.19.950967-1.470982-9.80655
    20.29.803869-2.451638-9.80655
    30.39.558705-3.432292-9.80655
    40.49.215476-4.412948-9.80655
    50.58.774181-5.393602-9.80655
    60.68.234821-6.374258-9.80655
    70.77.597395-7.354913-9.80655
    80.86.861904-8.335567-9.80655
    90.96.028347-9.316222-9.80655
    101.05.096725-10.296878-9.80655
    111.14.067037-11.277533-9.80655
    121.22.939284-12.258187-9.80655
    \n", + "
    " + ], + "text/plain": [ + " t[s] y[m] v[m/s] a[m/s^2]\n", + "0 0.0 10.000000 0.000000 -9.80655\n", + "1 0.1 9.950967 -1.470982 -9.80655\n", + "2 0.2 9.803869 -2.451638 -9.80655\n", + "3 0.3 9.558705 -3.432292 -9.80655\n", + "4 0.4 9.215476 -4.412948 -9.80655\n", + "5 0.5 8.774181 -5.393602 -9.80655\n", + "6 0.6 8.234821 -6.374258 -9.80655\n", + "7 0.7 7.597395 -7.354913 -9.80655\n", + "8 0.8 6.861904 -8.335567 -9.80655\n", + "9 0.9 6.028347 -9.316222 -9.80655\n", + "10 1.0 5.096725 -10.296878 -9.80655\n", + "11 1.1 4.067037 -11.277533 -9.80655\n", + "12 1.2 2.939284 -12.258187 -9.80655" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Now we can compute the mean velocity using our data\n", + "# We define first an array Vaverage\n", + "n = np.size(t)\n", + "Vaverage = np.zeros(n)\n", + "for i in range(1,n-1):\n", + " Vaverage[i] = (y[i+1]-y[i])/DeltaT\n", + "# Now we can compute the mean accelearatio using our data\n", + "# We define first an array Aaverage\n", + "n = np.size(t)\n", + "Aaverage = np.zeros(n)\n", + "Aaverage[0] = -g\n", + "for i in range(1,n-1):\n", + " Aaverage[i] = (Vaverage[i+1]-Vaverage[i])/DeltaT\n", + "data = {'t[s]': t,\n", + " 'y[m]': y,\n", + " 'v[m/s]': Vaverage,\n", + " 'a[m/s^2]': Aaverage\n", + " }\n", + "NewData = pd.DataFrame(data)\n", + "display(NewData[0:n-2])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we don't print the last values! \n", + "\n", + "\n", + "\n", + "\n", + "## Including Air Resistance in our model\n", + "\n", + "In our discussions till now of the falling baseball, we have ignored\n", + "air resistance and simply assumed that our system is only influenced\n", + "by the gravitational force. We will postpone the derivation of air\n", + "resistance till later, after our discussion of Newton's laws and\n", + "forces.\n", + "\n", + "For our discussions here it suffices to state that the accelerations is now modified to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a}(t) = -g +D\\boldsymbol{v}(t)\\vert v(t)\\vert,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\vert v(t)\\vert$ is the absolute value of the velocity and $D$ is a constant which pertains to the specific object we are studying.\n", + "Since we are dealing with motion in one dimension, we can simplify the above to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "a(t) = -g +Dv^2(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can rewrite this as a differential equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "a(t) = \\frac{dv}{dt}=\\frac{d^2y}{dt^2}= -g +Dv^2(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the integral equations discussed above we can integrate twice\n", + "and obtain first the velocity as function of time and thereafter the\n", + "position as function of time.\n", + "\n", + "For this particular case, we can actually obtain an analytical\n", + "solution for the velocity and for the position. Here we will first\n", + "compute the solutions analytically, thereafter we will derive Euler's\n", + "method for solving these differential equations numerically.\n", + "\n", + "\n", + "## Analytical solutions\n", + "\n", + "For simplicity let us just write $v(t)$ as $v$. We have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{dv}{dt}= -g +Dv^2(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can solve this using the technique of separation of variables. We\n", + "isolate on the left all terms that involve $v$ and on the right all\n", + "terms that involve time. We get then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{dv}{g -Dv^2(t) }= -dt,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We scale now the equation to the left by introducing a constant\n", + "$v_T=\\sqrt{g/D}$. This constant has dimension length/time. Can you\n", + "show this?\n", + "\n", + "Next we integrate the left-hand side (lhs) from $v_0=0$ m/s to $v$ and\n", + "the right-hand side (rhs) from $t_0=0$ to $t$ and obtain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_{0}^v\\frac{dv}{g -Dv^2(t) }= \\frac{v_T}{g}\\mathrm{arctanh}(\\frac{v}{v_T}) =-\\int_0^tdt = -t.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can reorganize these equations as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v_T\\mathrm{arctanh}(\\frac{v}{v_T}) =-gt,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which gives us $v$ as function of time" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t)=v_T\\tanh{-(\\frac{gt}{v_T})}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Finding the final height\n", + "\n", + "With the velocity we can then find the height $y(t)$ by integrating yet another time, that is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t)=y(t_0)+\\int_{t_0}^t dt v(t)=\\int_{0}^t dt[v_T\\tanh{-(\\frac{gt}{v_T})}].\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This integral is a little bit trickier but we can look it up in a table over \n", + "known integrals and we get" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t)=y(t_0)-\\frac{v_T^2}{g}\\log{[\\cosh{(\\frac{gt}{v_T})}]}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Alternatively we could have used the symbolic Python package **Sympy** (example will be inserted later). \n", + "\n", + "In most cases however, we need to revert to numerical solutions. \n", + "\n", + "\n", + "\n", + "## Our first attempt at solving differential equations\n", + "\n", + "Here we will try the simplest possible approach to solving the second-order differential \n", + "equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "a(t) =\\frac{d^2y}{dt^2}= -g +Dv^2(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We rewrite it as two coupled first-order equations (this is a standard approach)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{dy}{dt} = v(t),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with initial condition $y(t_0)=y_0$ and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "a(t) =\\frac{dv}{dt}= -g +Dv^2(t),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with initial condition $v(t_0)=v_0$.\n", + "\n", + "Many of the algorithms for solving differential equations start with simple Taylor equations.\n", + "If we now Taylor expand $y$ and $v$ around a value $t+\\Delta t$ we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t+\\Delta t) = y(t)+\\Delta t \\frac{dy}{dt}+\\frac{\\Delta t^2}{2!} \\frac{d^2y}{dt^2}+O(\\Delta t^3),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t+\\Delta t) = v(t)+\\Delta t \\frac{dv}{dt}+\\frac{\\Delta t^2}{2!} \\frac{d^2v}{dt^2}+O(\\Delta t^3).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the fact that $dy/dt = v$ and $dv/dt=a$ and keeping only terms up to $\\Delta t$ we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y(t+\\Delta t) = y(t)+\\Delta t v(t)+O(\\Delta t^2),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v(t+\\Delta t) = v(t)+\\Delta t a(t)+O(\\Delta t^2).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Discretizing our equations\n", + "\n", + "Using our discretized versions of the equations with for example\n", + "$y_{i}=y(t_i)$ and $y_{i\\pm 1}=y(t_i+\\Delta t)$, we can rewrite the\n", + "above equations as (and truncating at $\\Delta t$)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_{i+1} = y_i+\\Delta t v_i,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v_{i+1} = v_i+\\Delta t a_i.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are the famous Euler equations (forward Euler).\n", + "\n", + "To solve these equations numerically we start at a time $t_0$ and simply integrate up these equations to a final time $t_f$,\n", + "The step size $\\Delta t$ is an input parameter in our code.\n", + "You can define it directly in the code below as" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "DeltaT = 0.1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With a given final time **tfinal** we can then find the number of integration points via the **ceil** function included in the **math** package of Python\n", + "as" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n" + ] + } + ], + "source": [ + "#define final time, assuming that initial time is zero\n", + "from math import ceil\n", + "tfinal = 0.5\n", + "n = ceil(tfinal/DeltaT)\n", + "print(n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The **ceil** function returns the smallest integer not less than the input in say" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "22\n" + ] + } + ], + "source": [ + "x = 21.15\n", + "print(ceil(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which in the case here is 22." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "22\n" + ] + } + ], + "source": [ + "x = 21.75\n", + "print(ceil(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which also yields 22. The **floor** function in the **math** package\n", + "is used to return the closest integer value which is less than or equal to the specified expression or value.\n", + "Compare the previous result to the usage of **floor**" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "21\n" + ] + } + ], + "source": [ + "from math import floor\n", + "x = 21.75\n", + "print(floor(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Alternatively, we can define ourselves the number of integration(mesh) points. In this case we could have" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.05\n" + ] + } + ], + "source": [ + "n = 10\n", + "tinitial = 0.0\n", + "tfinal = 0.5\n", + "DeltaT = (tfinal-tinitial)/(n)\n", + "print(DeltaT)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since we will set up one-dimensional arrays that contain the values of\n", + "various variables like time, position, velocity, acceleration etc, we\n", + "need to know the value of $n$, the number of data points (or\n", + "integration or mesh points). With $n$ we can initialize a given array\n", + "by setting all elelements to zero, as done here" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n" + ] + } + ], + "source": [ + "# define array a\n", + "a = np.zeros(n)\n", + "print(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Code for implementing Euler's method\n", + "In the code here we implement this simple Eurler scheme choosing a value for $D=0.0245$ m/s." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    t[s]y[m]v[m/s]a[m/s^2]
    00.00.0000000.000000-9.806550
    10.10.049031-0.980655-9.804194
    20.20.098034-1.961074-9.797128
    30.30.146963-2.940787-9.785362
    40.40.195770-3.919323-9.768915
    \n", + "
    " + ], + "text/plain": [ + " t[s] y[m] v[m/s] a[m/s^2]\n", + "0 0.0 0.000000 0.000000 -9.806550\n", + "1 0.1 0.049031 -0.980655 -9.804194\n", + "2 0.2 0.098034 -1.961074 -9.797128\n", + "3 0.3 0.146963 -2.940787 -9.785362\n", + "4 0.4 0.195770 -3.919323 -9.768915" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter2_121_1.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "# Common imports\n", + "import numpy as np\n", + "import pandas as pd\n", + "from math import *\n", + "import matplotlib.pyplot as plt\n", + "import os\n", + "\n", + "# Where to save the figures and data files\n", + "PROJECT_ROOT_DIR = \"Results\"\n", + "FIGURE_ID = \"Results/FigureFiles\"\n", + "DATA_ID = \"DataFiles/\"\n", + "\n", + "if not os.path.exists(PROJECT_ROOT_DIR):\n", + " os.mkdir(PROJECT_ROOT_DIR)\n", + "\n", + "if not os.path.exists(FIGURE_ID):\n", + " os.makedirs(FIGURE_ID)\n", + "\n", + "if not os.path.exists(DATA_ID):\n", + " os.makedirs(DATA_ID)\n", + "\n", + "def image_path(fig_id):\n", + " return os.path.join(FIGURE_ID, fig_id)\n", + "\n", + "def data_path(dat_id):\n", + " return os.path.join(DATA_ID, dat_id)\n", + "\n", + "def save_fig(fig_id):\n", + " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", + "\n", + "\n", + "g = 9.80655 #m/s^2\n", + "D = 0.00245 #m/s\n", + "DeltaT = 0.1\n", + "#set up arrays \n", + "tfinal = 0.5\n", + "n = ceil(tfinal/DeltaT)\n", + "# define scaling constant vT\n", + "vT = sqrt(g/D)\n", + "# set up arrays for t, a, v, and y and we can compare our results with analytical ones\n", + "t = np.zeros(n)\n", + "a = np.zeros(n)\n", + "v = np.zeros(n)\n", + "y = np.zeros(n)\n", + "yanalytic = np.zeros(n)\n", + "# Initial conditions\n", + "v[0] = 0.0 #m/s\n", + "y[0] = 10.0 #m\n", + "yanalytic[0] = y[0]\n", + "# Start integrating using Euler's method\n", + "for i in range(n-1):\n", + " # expression for acceleration\n", + " a[i] = -g + D*v[i]*v[i]\n", + " # update velocity and position\n", + " y[i+1] = y[i] + DeltaT*v[i]\n", + " v[i+1] = v[i] + DeltaT*a[i]\n", + " # update time to next time step and compute analytical answer\n", + " t[i+1] = t[i] + DeltaT\n", + " yanalytic[i+1] = y[0]-(vT*vT/g)*log(cosh(g*t[i+1]/vT))\n", + " if ( y[i+1] < 0.0):\n", + " break\n", + "a[n-1] = -g + D*v[n-1]*v[n-1]\n", + "data = {'t[s]': t,\n", + " 'y[m]': y-yanalytic,\n", + " 'v[m/s]': v,\n", + " 'a[m/s^2]': a\n", + " }\n", + "NewData = pd.DataFrame(data)\n", + "display(NewData)\n", + "#finally we plot the data\n", + "fig, axs = plt.subplots(3, 1)\n", + "axs[0].plot(t, y, t, yanalytic)\n", + "axs[0].set_xlim(0, tfinal)\n", + "axs[0].set_ylabel('y and exact')\n", + "axs[1].plot(t, v)\n", + "axs[1].set_ylabel('v[m/s]')\n", + "axs[2].plot(t, a)\n", + "axs[2].set_xlabel('time[s]')\n", + "axs[2].set_ylabel('a[m/s^2]')\n", + "fig.tight_layout()\n", + "save_fig(\"EulerIntegration\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Try different values for $\\Delta t$ and study the difference between the exact solution and the numerical solution.\n", + "\n", + "\n", + "## Simple extension, the Euler-Cromer method\n", + "\n", + "The Euler-Cromer method is a simple variant of the standard Euler\n", + "method. We use the newly updated velocity $v_{i+1}$ as an input to the\n", + "new position, that is, instead of" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_{i+1} = y_i+\\Delta t v_i,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v_{i+1} = v_i+\\Delta t a_i,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we use now the newly calculate for $v_{i+1}$ as input to $y_{i+1}$, that is \n", + "we compute first" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v_{i+1} = v_i+\\Delta t a_i,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_{i+1} = y_i+\\Delta t v_{i+1},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Implementing the Euler-Cromer method yields a simple change to the previous code. We only need to change the following line in the loop over time\n", + "steps" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for i in range(n-1):\n", + " # more codes in between here\n", + " v[i+1] = v[i] + DeltaT*a[i]\n", + " y[i+1] = y[i] + DeltaT*v[i+1]\n", + " # more code" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Python practicalities, Software and needed installations\n", + "\n", + "We will make extensive use of Python as programming language and its\n", + "myriad of available libraries. You will find\n", + "Jupyter notebooks invaluable in your work. \n", + "\n", + "If you have Python installed (we strongly recommend Python3) and you feel\n", + "pretty familiar with installing different packages, we recommend that\n", + "you install the following Python packages via **pip** as \n", + "\n", + "1. pip install numpy scipy matplotlib ipython scikit-learn mglearn sympy pandas pillow \n", + "\n", + "For Python3, replace **pip** with **pip3**.\n", + "\n", + "For OSX users we recommend, after having installed Xcode, to\n", + "install **brew**. Brew allows for a seamless installation of additional\n", + "software via for example \n", + "\n", + "1. brew install python3\n", + "\n", + "For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution,\n", + "you can use **pip** as well and simply install Python as \n", + "\n", + "1. sudo apt-get install python3 (or python for pyhton2.7)\n", + "\n", + "etc etc. \n", + "\n", + "\n", + "\n", + "## Python installers\n", + "\n", + "If you don't want to perform these operations separately and venture\n", + "into the hassle of exploring how to set up dependencies and paths, we\n", + "recommend two widely used distrubutions which set up all relevant\n", + "dependencies for Python, namely \n", + "\n", + "* [Anaconda](https://docs.anaconda.com/), \n", + "\n", + "which is an open source\n", + "distribution of the Python and R programming languages for large-scale\n", + "data processing, predictive analytics, and scientific computing, that\n", + "aims to simplify package management and deployment. Package versions\n", + "are managed by the package management system **conda**. \n", + "\n", + "* [Enthought canopy](https://www.enthought.com/product/canopy/) \n", + "\n", + "is a Python\n", + "distribution for scientific and analytic computing distribution and\n", + "analysis environment, available for free and under a commercial\n", + "license.\n", + "\n", + "Furthermore, [Google's Colab](https://colab.research.google.com/notebooks/welcome.ipynb) is a free Jupyter notebook environment that requires \n", + "no setup and runs entirely in the cloud. Try it out!\n", + "\n", + "## Useful Python libraries\n", + "Here we list several useful Python libraries we strongly recommend (if you use anaconda many of these are already there)\n", + "\n", + "* [NumPy](https://www.numpy.org/) is a highly popular library for large, multi-dimensional arrays and matrices, along with a large collection of high-level mathematical functions to operate on these arrays\n", + "\n", + "* [The pandas](https://pandas.pydata.org/) library provides high-performance, easy-to-use data structures and data analysis tools \n", + "\n", + "* [Xarray](http://xarray.pydata.org/en/stable/) is a Python package that makes working with labelled multi-dimensional arrays simple, efficient, and fun!\n", + "\n", + "* [Scipy](https://www.scipy.org/) (pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software for mathematics, science, and engineering. \n", + "\n", + "* [Matplotlib](https://matplotlib.org/) is a Python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms.\n", + "\n", + "* [Autograd](https://github.com/HIPS/autograd) can automatically differentiate native Python and Numpy code. It can handle a large subset of Python's features, including loops, ifs, recursion and closures, and it can even take derivatives of derivatives of derivatives\n", + "\n", + "* [SymPy](https://www.sympy.org/en/index.html) is a Python library for symbolic mathematics. \n", + "\n", + "* [scikit-learn](https://scikit-learn.org/stable/) has simple and efficient tools for machine learning, data mining and data analysis\n", + "\n", + "* [TensorFlow](https://www.tensorflow.org/) is a Python library for fast numerical computing created and released by Google\n", + "\n", + "* [Keras](https://keras.io/) is a high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, or Theano\n", + "\n", + "* And many more such as [pytorch](https://pytorch.org/), [Theano](https://pypi.org/project/Theano/) etc \n", + "\n", + "Your jupyter notebook can easily be\n", + "converted into a nicely rendered **PDF** file or a Latex file for\n", + "further processing. For example, convert to latex as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " pycod jupyter nbconvert filename.ipynb --to latex \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And to add more versatility, the Python package [SymPy](http://www.sympy.org/en/index.html) is a Python library for symbolic mathematics. It aims to become a full-featured computer algebra system (CAS) and is entirely written in Python. \n", + "\n", + "\n", + "\n", + "## Numpy examples and Important Matrix and vector handling packages\n", + "\n", + "There are several central software libraries for linear algebra and eigenvalue problems. Several of the more\n", + "popular ones have been wrapped into ofter software packages like those from the widely used text **Numerical Recipes**. The original source codes in many of the available packages are often taken from the widely used\n", + "software package LAPACK, which follows two other popular packages\n", + "developed in the 1970s, namely EISPACK and LINPACK. We describe them shortly here.\n", + "\n", + " * LINPACK: package for linear equations and least square problems.\n", + "\n", + " * LAPACK:package for solving symmetric, unsymmetric and generalized eigenvalue problems. From LAPACK's website it is possible to download for free all source codes from this library. Both C/C++ and Fortran versions are available.\n", + "\n", + " * BLAS (I, II and III): (Basic Linear Algebra Subprograms) are routines that provide standard building blocks for performing basic vector and matrix operations. Blas I is vector operations, II vector-matrix operations and III matrix-matrix operations. Highly parallelized and efficient codes, all available for download from .\n", + "\n", + "## Basic Matrix Features\n", + "\n", + "**Matrix properties reminder.**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbf{A} =\n", + " \\begin{bmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\\\\n", + " a_{21} & a_{22} & a_{23} & a_{24} \\\\\n", + " a_{31} & a_{32} & a_{33} & a_{34} \\\\\n", + " a_{41} & a_{42} & a_{43} & a_{44}\n", + " \\end{bmatrix}\\qquad\n", + "\\mathbf{I} =\n", + " \\begin{bmatrix} 1 & 0 & 0 & 0 \\\\\n", + " 0 & 1 & 0 & 0 \\\\\n", + " 0 & 0 & 1 & 0 \\\\\n", + " 0 & 0 & 0 & 1\n", + " \\end{bmatrix}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The inverse of a matrix is defined by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\mathbf{A}^{-1} \\cdot \\mathbf{A} = I\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Relations Name matrix elements
    $A = A^{T}$ symmetric $a_{ij} = a_{ji}$
    $A = \\left (A^{T} \\right )^{-1}$ real orthogonal $\\sum_k a_{ik} a_{jk} = \\sum_k a_{ki} a_{kj} = \\delta_{ij}$
    $A = A^{ * }$ real matrix $a_{ij} = a_{ij}^{ * }$
    $A = A^{\\dagger}$ hermitian $a_{ij} = a_{ji}^{ * }$
    $A = \\left (A^{\\dagger} \\right )^{-1}$ unitary $\\sum_k a_{ik} a_{jk}^{ * } = \\sum_k a_{ki}^{ * } a_{kj} = \\delta_{ij}$
    \n", + "\n", + "\n", + "\n", + "\n", + "### Some famous Matrices\n", + "\n", + " * Diagonal if $a_{ij}=0$ for $i\\ne j$\n", + "\n", + " * Upper triangular if $a_{ij}=0$ for $i > j$\n", + "\n", + " * Lower triangular if $a_{ij}=0$ for $i < j$\n", + "\n", + " * Upper Hessenberg if $a_{ij}=0$ for $i > j+1$\n", + "\n", + " * Lower Hessenberg if $a_{ij}=0$ for $i < j+1$\n", + "\n", + " * Tridiagonal if $a_{ij}=0$ for $|i -j| > 1$\n", + "\n", + " * Lower banded with bandwidth $p$: $a_{ij}=0$ for $i > j+p$\n", + "\n", + " * Upper banded with bandwidth $p$: $a_{ij}=0$ for $i < j+p$\n", + "\n", + " * Banded, block upper triangular, block lower triangular....\n", + "\n", + "### More Basic Matrix Features\n", + "\n", + "**Some Equivalent Statements.**\n", + "\n", + "For an $N\\times N$ matrix $\\mathbf{A}$ the following properties are all equivalent\n", + "\n", + " * If the inverse of $\\mathbf{A}$ exists, $\\mathbf{A}$ is nonsingular.\n", + "\n", + " * The equation $\\mathbf{Ax}=0$ implies $\\mathbf{x}=0$.\n", + "\n", + " * The rows of $\\mathbf{A}$ form a basis of $R^N$.\n", + "\n", + " * The columns of $\\mathbf{A}$ form a basis of $R^N$.\n", + "\n", + " * $\\mathbf{A}$ is a product of elementary matrices.\n", + "\n", + " * $0$ is not eigenvalue of $\\mathbf{A}$.\n", + "\n", + "\n", + "\n", + "\n", + "## Numpy and arrays\n", + "[Numpy](http://www.numpy.org/) provides an easy way to handle arrays in Python. The standard way to import this library is as" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here follows a simple example where we set up an array of ten elements, all determined by random numbers drawn according to the normal distribution," + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0.35453366 0.01307903 -0.54733885 0.46190793 0.21826624 1.43253023\n", + " 0.40071053 -0.78290213 0.37635957 2.81890295]\n" + ] + } + ], + "source": [ + "n = 10\n", + "x = np.random.normal(size=n)\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We defined a vector $x$ with $n=10$ elements with its values given by the Normal distribution $N(0,1)$.\n", + "Another alternative is to declare a vector as follows" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 2 3]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "x = np.array([1, 2, 3])\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we have defined a vector with three elements, with $x_0=1$, $x_1=2$ and $x_2=3$. Note that both Python and C++\n", + "start numbering array elements from $0$ and on. This means that a vector with $n$ elements has a sequence of entities $x_0, x_1, x_2, \\dots, x_{n-1}$. We could also let (recommended) Numpy to compute the logarithms of a specific array as" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1.38629436 1.94591015 2.07944154]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "x = np.log(np.array([4, 7, 8]))\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the last example we used Numpy's unary function $np.log$. This function is\n", + "highly tuned to compute array elements since the code is vectorized\n", + "and does not require looping. We normaly recommend that you use the\n", + "Numpy intrinsic functions instead of the corresponding **log** function\n", + "from Python's **math** module. The looping is done explicitely by the\n", + "**np.log** function. The alternative, and slower way to compute the\n", + "logarithms of a vector would be to write" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 1 2]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from math import log\n", + "x = np.array([4, 7, 8])\n", + "for i in range(0, len(x)):\n", + " x[i] = log(x[i])\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We note that our code is much longer already and we need to import the **log** function from the **math** module. \n", + "The attentive reader will also notice that the output is $[1, 1, 2]$. Python interprets automagically our numbers as integers (like the **automatic** keyword in C++). To change this we could define our array elements to be double precision numbers as" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1.38629436 1.94591015 2.07944154]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "x = np.log(np.array([4, 7, 8], dtype = np.float64))\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or simply write them as double precision numbers (Python uses 64 bits as default for floating point type variables), that is" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (, line 3)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m3\u001b[0m\n\u001b[0;31m print(x)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "x = np.log(np.array([4.0, 7.0, 8.0])\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To check the number of bytes (remember that one byte contains eight bits for double precision variables), you can use simple use the **itemsize** functionality (the array $x$ is actually an object which inherits the functionalities defined in Numpy) as" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "x = np.log(np.array([4.0, 7.0, 8.0])\n", + "print(x.itemsize)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Matrices in Python\n", + "\n", + "Having defined vectors, we are now ready to try out matrices. We can\n", + "define a $3 \\times 3 $ real matrix $\\hat{A}$ as (recall that we user\n", + "lowercase letters for vectors and uppercase letters for matrices)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "A = np.log(np.array([ [4.0, 7.0, 8.0], [3.0, 10.0, 11.0], [4.0, 5.0, 7.0] ]))\n", + "print(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we use the **shape** function we would get $(3, 3)$ as output, that is verifying that our matrix is a $3\\times 3$ matrix. We can slice the matrix and print for example the first column (Python organized matrix elements in a row-major order, see below) as" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "A = np.log(np.array([ [4.0, 7.0, 8.0], [3.0, 10.0, 11.0], [4.0, 5.0, 7.0] ]))\n", + "# print the first column, row-major order and elements start with 0\n", + "print(A[:,0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can continue this was by printing out other columns or rows. The example here prints out the second column" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "A = np.log(np.array([ [4.0, 7.0, 8.0], [3.0, 10.0, 11.0], [4.0, 5.0, 7.0] ]))\n", + "# print the first column, row-major order and elements start with 0\n", + "print(A[1,:])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Numpy contains many other functionalities that allow us to slice, subdivide etc etc arrays. We strongly recommend that you look up the [Numpy website for more details](http://www.numpy.org/). Useful functions when defining a matrix are the **np.zeros** function which declares a matrix of a given dimension and sets all elements to zero" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "n = 10\n", + "# define a matrix of dimension 10 x 10 and set all elements to zero\n", + "A = np.zeros( (n, n) )\n", + "print(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or initializing all elements to" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "n = 10\n", + "# define a matrix of dimension 10 x 10 and set all elements to one\n", + "A = np.ones( (n, n) )\n", + "print(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or as unitarily distributed random numbers (see the material on random number generators in the statistics part)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "n = 10\n", + "# define a matrix of dimension 10 x 10 and set all elements to random numbers with x \\in [0, 1]\n", + "A = np.random.rand(n, n)\n", + "print(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Meet the Pandas\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Another useful Python package is\n", + "[pandas](https://pandas.pydata.org/), which is an open source library\n", + "providing high-performance, easy-to-use data structures and data\n", + "analysis tools for Python. **pandas** stands for panel data, a term borrowed from econometrics and is an efficient library for data analysis with an emphasis on tabular data.\n", + "**pandas** has two major classes, the **DataFrame** class with two-dimensional data objects and tabular data organized in columns and the class **Series** with a focus on one-dimensional data objects. Both classes allow you to index data easily as we will see in the examples below. \n", + "**pandas** allows you also to perform mathematical operations on the data, spanning from simple reshapings of vectors and matrices to statistical operations. \n", + "\n", + "The following simple example shows how we can, in an easy way make tables of our data. Here we define a data set which includes names, place of birth and date of birth, and displays the data in an easy to read way. We will see repeated use of **pandas**, in particular in connection with classification of data." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from IPython.display import display\n", + "data = {'First Name': [\"Frodo\", \"Bilbo\", \"Aragorn II\", \"Samwise\"],\n", + " 'Last Name': [\"Baggins\", \"Baggins\",\"Elessar\",\"Gamgee\"],\n", + " 'Place of birth': [\"Shire\", \"Shire\", \"Eriador\", \"Shire\"],\n", + " 'Date of Birth T.A.': [2968, 2890, 2931, 2980]\n", + " }\n", + "data_pandas = pd.DataFrame(data)\n", + "display(data_pandas)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the above we have imported **pandas** with the shorthand **pd**, the latter has become the standard way we import **pandas**. We make then a list of various variables\n", + "and reorganize the above lists into a **DataFrame** and then print out a neat table with specific column labels as *Name*, *place of birth* and *date of birth*.\n", + "Displaying these results, we see that the indices are given by the default numbers from zero to three.\n", + "**pandas** is extremely flexible and we can easily change the above indices by defining a new type of indexing as" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "data_pandas = pd.DataFrame(data,index=['Frodo','Bilbo','Aragorn','Sam'])\n", + "display(data_pandas)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thereafter we display the content of the row which begins with the index **Aragorn**" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "display(data_pandas.loc['Aragorn'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can easily append data to this, for example" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "new_hobbit = {'First Name': [\"Peregrin\"],\n", + " 'Last Name': [\"Took\"],\n", + " 'Place of birth': [\"Shire\"],\n", + " 'Date of Birth T.A.': [2990]\n", + " }\n", + "data_pandas=data_pandas.append(pd.DataFrame(new_hobbit, index=['Pippin']))\n", + "display(data_pandas)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are other examples where we use the **DataFrame** functionality to handle arrays, now with more interesting features for us, namely numbers. We set up a matrix \n", + "of dimensionality $10\\times 5$ and compute the mean value and standard deviation of each column. Similarly, we can perform mathematial operations like squaring the matrix elements and many other operations." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from IPython.display import display\n", + "np.random.seed(100)\n", + "# setting up a 10 x 5 matrix\n", + "rows = 10\n", + "cols = 5\n", + "a = np.random.randn(rows,cols)\n", + "df = pd.DataFrame(a)\n", + "display(df)\n", + "print(df.mean())\n", + "print(df.std())\n", + "display(df**2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thereafter we can select specific columns only and plot final results" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.columns = ['First', 'Second', 'Third', 'Fourth', 'Fifth']\n", + "df.index = np.arange(10)\n", + "\n", + "display(df)\n", + "print(df['Second'].mean() )\n", + "print(df.info())\n", + "print(df.describe())\n", + "\n", + "from pylab import plt, mpl\n", + "plt.style.use('seaborn')\n", + "mpl.rcParams['font.family'] = 'serif'\n", + "\n", + "df.cumsum().plot(lw=2.0, figsize=(10,6))\n", + "plt.show()\n", + "\n", + "\n", + "df.plot.bar(figsize=(10,6), rot=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can produce a $4\\times 4$ matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "b = np.arange(16).reshape((4,4))\n", + "print(b)\n", + "df1 = pd.DataFrame(b)\n", + "print(df1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and many other operations. \n", + "\n", + "The **Series** class is another important class included in\n", + "**pandas**. You can view it as a specialization of **DataFrame** but where\n", + "we have just a single column of data. It shares many of the same features as _DataFrame. As with **DataFrame**,\n", + "most operations are vectorized, achieving thereby a high performance when dealing with computations of arrays, in particular labeled arrays.\n", + "As we will see below it leads also to a very concice code close to the mathematical operations we may be interested in.\n", + "For multidimensional arrays, we recommend strongly [xarray](http://xarray.pydata.org/en/stable/). **xarray** has much of the same flexibility as **pandas**, but allows for the extension to higher dimensions than two." + ] + } + ], + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter2.py b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter2.py new file mode 100644 index 000000000..1dbc06118 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter2.py @@ -0,0 +1,1159 @@ +# Space, Time, Motion, Reference Frames and Reminder on vectors and other mathematical quantities + +Our studies will start with the motion of different types of objects +such as a falling ball, a runner, a bicycle etc etc. It means that an +object's position in space varies with time. +In order to study such systems we need to define +* choice of origin + +* choice of the direction of the axes + +* choice of positive direction (left-handed or right-handed system of reference) + +* choice of units and dimensions + +These choices lead to some important questions such as + +* is the physics of a system independent of the origin of the axes? + +* is the physics independent of the directions of the axes, that is are there privileged axes? + +* is the physics independent of the orientation of system? + +* is the physics independent of the scale of the length? + +### Dimension, units and labels + +Throughout this course we will use the standardized SI units. The standard unit for length is thus one meter 1m, for mass +one kilogram 1kg, for time one second 1s, for force one Newton 1kgm/s$^2$ and for energy 1 Joule 1kgm$^2$s$^{-2}$. + +We will use the following notations for various variables (vectors are always boldfaced in these lecture notes): +* position $\boldsymbol{r}$, in one dimention we will normally just use $x$, + +* mass $m$, + +* time $t$, + +* velocity $\boldsymbol{v}$ or just $v$ in one dimension, + +* acceleration $\boldsymbol{a}$ or just $a$ in one dimension, + +* momentum $\boldsymbol{p}$ or just $p$ in one dimension, + +* kinetic energy $K$, + +* potential energy $V$ and + +* frequency $\omega$. + +More variables will be defined as we need them. + +It is also important to keep track of dimensionalities. Don't mix this up with a chosen unit for a given variable. We mark the dimensionality in these lectures as $[a]$, where $a$ is the quantity we are interested in. Thus + +* $[\boldsymbol{r}]=$ length + +* $[m]=$ mass + +* $[K]=$ energy + +* $[t]=$ time + +* $[\boldsymbol{v}]=$ length over time + +* $[\boldsymbol{a}]=$ length over time squared + +* $[\boldsymbol{p}]=$ mass times length over time + +* $[\omega]=$ 1/time + +## Elements of Vector Algebra + +**Note**: This section is under revision + +In these lectures we will use boldfaced lower-case letters to label a vector. A vector $\boldsymbol{a}$ in three dimensions is thus defined as + +$$ +\boldsymbol{a} =(a_x,a_y, a_z), +$$ + +and using the unit vectors in a cartesian system we have + +$$ +\boldsymbol{a} = a_x\boldsymbol{e}_x+a_y\boldsymbol{e}_y+a_z\boldsymbol{e}_z, +$$ + +where the unit vectors have magnitude $\vert\boldsymbol{e}_i\vert = 1$ with $i=x,y,z$. + +Using the fact that multiplication of reals is distributive we can show that + +$$ +\boldsymbol{a}(\boldsymbol{b}+\boldsymbol{c})=\boldsymbol{a}\boldsymbol{b}+\boldsymbol{a}\boldsymbol{c}, +$$ + +Similarly we can also show that (using product rule for differentiating reals) + +$$ +\frac{d}{dt}(\boldsymbol{a}\boldsymbol{b})=\boldsymbol{a}\frac{d\boldsymbol{b}}{dt}+\boldsymbol{b}\frac{d\boldsymbol{a}}{dt}. +$$ + +We can repeat these operations for the cross products and show that they are distribuitive + +$$ +\boldsymbol{a}\times(\boldsymbol{b}+\boldsymbol{c})=\boldsymbol{a}\times\boldsymbol{b}+\boldsymbol{a}\times\boldsymbol{c}. +$$ + +We have also that + +$$ +\frac{d}{dt}(\boldsymbol{a}\times\boldsymbol{b})=\boldsymbol{a}\times\frac{d\boldsymbol{b}}{dt}+\boldsymbol{b}\times\frac{d\boldsymbol{a}}{dt}. +$$ + +The rotation of a three-dimensional vector $\boldsymbol{a}=(a_x,a_y,a_z)$ in the $xy$ plane around an angle $\phi$ results in a new vector $\boldsymbol{b}=(b_x,b_y,b_z)$. This operation can be expressed in terms of linear algebra as a matrix (the rotation matrix) multiplied with a vector. We can write this as + +$$ +\begin{bmatrix} b_x \\ b_y \\ b_z \end{bmatrix} = \begin{bmatrix} \cos{\phi} & \sin{\phi} & 0 \\ -\sin{\phi} & \cos{\phi} & 0 \\ 0 & 0 & 1\end{bmatrix}\begin{bmatrix} a_x \\ a_y \\ a_z \end{bmatrix}. +$$ + +We can write this in a more compact form as $\boldsymbol{b} = \boldsymbol{R}\boldsymbol{a}$, where the rotation matrix is defined as + +$$ +\boldsymbol{R} = \begin{bmatrix} \cos{\phi} & \sin{\phi} & 0 \\ -\sin{\phi} & \cos{\phi} & 0 \\ 0 & 0 & 1\end{bmatrix}. +$$ + +## Falling baseball in one dimension + +We anticipate the mathematical model to come and assume that we have a +model for the motion of a falling baseball without air resistance. +Our system (the baseball) is at an initial height $y_0$ (which we will +specify in the program below) at the initial time $t_0=0$. In our program example here we will plot the position in steps of $\Delta t$ up to a final time $t_f$. +The mathematical formula for the position $y(t)$ as function of time $t$ is + +$$ +y(t) = y_0-\frac{1}{2}gt^2, +$$ + +where $g=9.80665=0.980655\times 10^1$m/s$^2$ is a constant representing the standard acceleration due to gravity. +We have here adopted the conventional standard value. This does not take into account other effects, such as buoyancy or drag. +Furthermore, we stop when the ball hits the ground, which takes place at + +$$ +y(t) = 0= y_0-\frac{1}{2}gt^2, +$$ + +which gives us a final time $t_f=\sqrt{2y_0/g}$. + +As of now we simply assume that we know the formula for the falling object. Afterwards, we will derive it. + + +## Our Python Encounter + +We start with preparing folders for storing our calculations, figures and if needed, specific data files we use as input or output files. + +%matplotlib inline + +# Common imports +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import os + +# Where to save the figures and data files +PROJECT_ROOT_DIR = "Results" +FIGURE_ID = "Results/FigureFiles" +DATA_ID = "DataFiles/" + +if not os.path.exists(PROJECT_ROOT_DIR): + os.mkdir(PROJECT_ROOT_DIR) + +if not os.path.exists(FIGURE_ID): + os.makedirs(FIGURE_ID) + +if not os.path.exists(DATA_ID): + os.makedirs(DATA_ID) + +def image_path(fig_id): + return os.path.join(FIGURE_ID, fig_id) + +def data_path(dat_id): + return os.path.join(DATA_ID, dat_id) + +def save_fig(fig_id): + plt.savefig(image_path(fig_id) + ".png", format='png') + +#in case we have an input file we wish to read in +#infile = open(data_path("MassEval2016.dat"),'r') + +You could also define a function for making our plots. You +can obviously avoid this and simply set up various **matplotlib** +commands every time you need them. You may however find it convenient +to collect all such commands in one function and simply call this +function. + +from pylab import plt, mpl +plt.style.use('seaborn') +mpl.rcParams['font.family'] = 'serif' + +def MakePlot(x,y, styles, labels, axlabels): + plt.figure(figsize=(10,6)) + for i in range(len(x)): + plt.plot(x[i], y[i], styles[i], label = labels[i]) + plt.xlabel(axlabels[0]) + plt.ylabel(axlabels[1]) + plt.legend(loc=0) + +Thereafter we start setting up the code for the falling object. + +%matplotlib inline +import matplotlib.patches as mpatches + +g = 9.80655 #m/s^2 +y_0 = 10.0 # initial position in meters +DeltaT = 0.1 # time step +# final time when y = 0, t = sqrt(2*10/g) +tfinal = np.sqrt(2.0*y_0/g) +#set up arrays +t = np.arange(0,tfinal,DeltaT) +y =y_0 -g*.5*t**2 +# Then make a nice printout in table form using Pandas +import pandas as pd +from IPython.display import display +data = {'t[s]': t, + 'y[m]': y + } +RawData = pd.DataFrame(data) +display(RawData) +plt.style.use('ggplot') +plt.figure(figsize=(8,8)) +plt.scatter(t, y, color = 'b') +blue_patch = mpatches.Patch(color = 'b', label = 'Height y as function of time t') +plt.legend(handles=[blue_patch]) +plt.xlabel("t[s]") +plt.ylabel("y[m]") +save_fig("FallingBaseball") +plt.show() + +Here we used **pandas** (see below) to systemize the output of the position as function of time. + + + +## Average quantities +We define now the average velocity as + +$$ +\overline{v}(t) = \frac{y(t+\Delta t)-y(t)}{\Delta t}. +$$ + +In the code we have set the time step $\Delta t$ to a given value. We could define it in terms of the number of points $n$ as + +$$ +\Delta t = \frac{t_{\mathrm{final}-}t_{\mathrm{initial}}}{n+1}. +$$ + +Since we have discretized the variables, we introduce the counter $i$ and let $y(t)\rightarrow y(t_i)=y_i$ and $t\rightarrow t_i$ +with $i=0,1,\dots, n$. This gives us the following shorthand notations that we will use for the rest of this course. We define + +$$ +y_i = y(t_i),\hspace{0.2cm} i=0,1,2,\dots,n. +$$ + +This applies to other variables which depend on say time. Examples are the velocities, accelerations, momenta etc. +Furthermore we use the shorthand + +$$ +y_{i\pm 1} = y(t_i\pm \Delta t),\hspace{0.12cm} i=0,1,2,\dots,n. +$$ + +## Compact equations +We can then rewrite in a more compact form the average velocity as + +$$ +\overline{v}_i = \frac{y_{i+1}-y_{i}}{\Delta t}. +$$ + +The velocity is defined as the change in position per unit time. +In the limit $\Delta t \rightarrow 0$ this defines the instantaneous velocity, which is nothing but the slope of the position at a time $t$. +We have thus + +$$ +v(t) = \frac{dy}{dt}=\lim_{\Delta t \rightarrow 0}\frac{y(t+\Delta t)-y(t)}{\Delta t}. +$$ + +Similarly, we can define the average acceleration as the change in velocity per unit time as + +$$ +\overline{a}_i = \frac{v_{i+1}-v_{i}}{\Delta t}, +$$ + +resulting in the instantaneous acceleration + +$$ +a(t) = \frac{dv}{dt}=\lim_{\Delta t\rightarrow 0}\frac{v(t+\Delta t)-v(t)}{\Delta t}. +$$ + +**A note on notations**: When writing for example the velocity as $v(t)$ we are then referring to the continuous and instantaneous value. A subscript like +$v_i$ refers always to the discretized values. + + +## A differential equation + +We can rewrite the instantaneous acceleration as + +$$ +a(t) = \frac{dv}{dt}=\frac{d}{dt}\frac{dy}{dt}=\frac{d^2y}{dt^2}. +$$ + +This forms the starting point for our definition of forces later. It is a famous second-order differential equation. If the acceleration is constant we can now recover the formula for the falling ball we started with. +The acceleration can depend on the position and the velocity. To be more formal we should then write the above differential equation as + +$$ +\frac{d^2y}{dt^2}=a(t,y(t),\frac{dy}{dt}). +$$ + +With given initial conditions for $y(t_0)$ and $v(t_0)$ we can then +integrate the above equation and find the velocities and positions at +a given time $t$. + +If we multiply with mass, we have one of the famous expressions for Newton's second law, + +$$ +F(y,v,t)=m\frac{d^2y}{dt^2}=ma(t,y(t),\frac{dy}{dt}), +$$ + +where $F$ is the force acting on an object with mass $m$. We see that it also has the right dimension, mass times length divided by time squared. +We will come back to this soon. + + +## Integrating our equations + +Formally we can then, starting with the acceleration (suppose we have measured it, how could we do that?) +compute say the height of a building. To see this we perform the following integrations from an initial time $t_0$ to a given time $t$ + +$$ +\int_{t_0}^t dt a(t) = \int_{t_0}^t dt \frac{dv}{dt} = v(t)-v(t_0), +$$ + +or as + +$$ +v(t)=v(t_0)+\int_{t_0}^t dt a(t). +$$ + +When we know the velocity as function of time, we can find the position as function of time starting from the defintion of velocity as the derivative with respect to time, that is we have + +$$ +\int_{t_0}^t dt v(t) = \int_{t_0}^t dt \frac{dy}{dt} = y(t)-y(t_0), +$$ + +or as + +$$ +y(t)=y(t_0)+\int_{t_0}^t dt v(t). +$$ + +These equations define what is called the integration method for +finding the position and the velocity as functions of time. There is +no loss of generality if we extend these equations to more than one +spatial dimension. + + +## Constant acceleration case, the velocity + +Let us compute the velocity using the constant value for the acceleration given by $-g$. We have + +$$ +v(t)=v(t_0)+\int_{t_0}^t dt a(t)=v(t_0)+\int_{t_0}^t dt (-g). +$$ + +Using our initial time as $t_0=0$s and setting the initial velocity $v(t_0)=v_0=0$m/s we get when integrating + +$$ +v(t)=-gt. +$$ + +The more general case is + +$$ +v(t)=v_0-g(t-t_0). +$$ + +We can then integrate the velocity and obtain the final formula for the position as function of time through + +$$ +y(t)=y(t_0)+\int_{t_0}^t dt v(t)=y_0+\int_{t_0}^t dt v(t)=y_0+\int_{t_0}^t dt (-gt), +$$ + +With $y_0=10$m and $t_0=0$s, we obtain the equation we started with + +$$ +y(t)=10-\frac{1}{2}gt^2. +$$ + +## Computing the averages + +After this mathematical background we are now ready to compute the mean velocity using our data. + +# Now we can compute the mean velocity using our data +# We define first an array Vaverage +n = np.size(t) +Vaverage = np.zeros(n) +for i in range(1,n-1): + Vaverage[i] = (y[i+1]-y[i])/DeltaT +# Now we can compute the mean accelearatio using our data +# We define first an array Aaverage +n = np.size(t) +Aaverage = np.zeros(n) +Aaverage[0] = -g +for i in range(1,n-1): + Aaverage[i] = (Vaverage[i+1]-Vaverage[i])/DeltaT +data = {'t[s]': t, + 'y[m]': y, + 'v[m/s]': Vaverage, + 'a[m/s^2]': Aaverage + } +NewData = pd.DataFrame(data) +display(NewData[0:n-2]) + +Note that we don't print the last values! + + + + +## Including Air Resistance in our model + +In our discussions till now of the falling baseball, we have ignored +air resistance and simply assumed that our system is only influenced +by the gravitational force. We will postpone the derivation of air +resistance till later, after our discussion of Newton's laws and +forces. + +For our discussions here it suffices to state that the accelerations is now modified to + +$$ +\boldsymbol{a}(t) = -g +D\boldsymbol{v}(t)\vert v(t)\vert, +$$ + +where $\vert v(t)\vert$ is the absolute value of the velocity and $D$ is a constant which pertains to the specific object we are studying. +Since we are dealing with motion in one dimension, we can simplify the above to + +$$ +a(t) = -g +Dv^2(t). +$$ + +We can rewrite this as a differential equation + +$$ +a(t) = \frac{dv}{dt}=\frac{d^2y}{dt^2}= -g +Dv^2(t). +$$ + +Using the integral equations discussed above we can integrate twice +and obtain first the velocity as function of time and thereafter the +position as function of time. + +For this particular case, we can actually obtain an analytical +solution for the velocity and for the position. Here we will first +compute the solutions analytically, thereafter we will derive Euler's +method for solving these differential equations numerically. + + +## Analytical solutions + +For simplicity let us just write $v(t)$ as $v$. We have + +$$ +\frac{dv}{dt}= -g +Dv^2(t). +$$ + +We can solve this using the technique of separation of variables. We +isolate on the left all terms that involve $v$ and on the right all +terms that involve time. We get then + +$$ +\frac{dv}{g -Dv^2(t) }= -dt, +$$ + +We scale now the equation to the left by introducing a constant +$v_T=\sqrt{g/D}$. This constant has dimension length/time. Can you +show this? + +Next we integrate the left-hand side (lhs) from $v_0=0$ m/s to $v$ and +the right-hand side (rhs) from $t_0=0$ to $t$ and obtain + +$$ +\int_{0}^v\frac{dv}{g -Dv^2(t) }= \frac{v_T}{g}\mathrm{arctanh}(\frac{v}{v_T}) =-\int_0^tdt = -t. +$$ + +We can reorganize these equations as + +$$ +v_T\mathrm{arctanh}(\frac{v}{v_T}) =-gt, +$$ + +which gives us $v$ as function of time + +$$ +v(t)=v_T\tanh{-(\frac{gt}{v_T})}. +$$ + +## Finding the final height + +With the velocity we can then find the height $y(t)$ by integrating yet another time, that is + +$$ +y(t)=y(t_0)+\int_{t_0}^t dt v(t)=\int_{0}^t dt[v_T\tanh{-(\frac{gt}{v_T})}]. +$$ + +This integral is a little bit trickier but we can look it up in a table over +known integrals and we get + +$$ +y(t)=y(t_0)-\frac{v_T^2}{g}\log{[\cosh{(\frac{gt}{v_T})}]}. +$$ + +Alternatively we could have used the symbolic Python package **Sympy** (example will be inserted later). + +In most cases however, we need to revert to numerical solutions. + + + +## Our first attempt at solving differential equations + +Here we will try the simplest possible approach to solving the second-order differential +equation + +$$ +a(t) =\frac{d^2y}{dt^2}= -g +Dv^2(t). +$$ + +We rewrite it as two coupled first-order equations (this is a standard approach) + +$$ +\frac{dy}{dt} = v(t), +$$ + +with initial condition $y(t_0)=y_0$ and + +$$ +a(t) =\frac{dv}{dt}= -g +Dv^2(t), +$$ + +with initial condition $v(t_0)=v_0$. + +Many of the algorithms for solving differential equations start with simple Taylor equations. +If we now Taylor expand $y$ and $v$ around a value $t+\Delta t$ we have + +$$ +y(t+\Delta t) = y(t)+\Delta t \frac{dy}{dt}+\frac{\Delta t^2}{2!} \frac{d^2y}{dt^2}+O(\Delta t^3), +$$ + +and + +$$ +v(t+\Delta t) = v(t)+\Delta t \frac{dv}{dt}+\frac{\Delta t^2}{2!} \frac{d^2v}{dt^2}+O(\Delta t^3). +$$ + +Using the fact that $dy/dt = v$ and $dv/dt=a$ and keeping only terms up to $\Delta t$ we have + +$$ +y(t+\Delta t) = y(t)+\Delta t v(t)+O(\Delta t^2), +$$ + +and + +$$ +v(t+\Delta t) = v(t)+\Delta t a(t)+O(\Delta t^2). +$$ + +## Discretizing our equations + +Using our discretized versions of the equations with for example +$y_{i}=y(t_i)$ and $y_{i\pm 1}=y(t_i+\Delta t)$, we can rewrite the +above equations as (and truncating at $\Delta t$) + +$$ +y_{i+1} = y_i+\Delta t v_i, +$$ + +and + +$$ +v_{i+1} = v_i+\Delta t a_i. +$$ + +These are the famous Euler equations (forward Euler). + +To solve these equations numerically we start at a time $t_0$ and simply integrate up these equations to a final time $t_f$, +The step size $\Delta t$ is an input parameter in our code. +You can define it directly in the code below as + +DeltaT = 0.1 + +With a given final time **tfinal** we can then find the number of integration points via the **ceil** function included in the **math** package of Python +as + +#define final time, assuming that initial time is zero +from math import ceil +tfinal = 0.5 +n = ceil(tfinal/DeltaT) +print(n) + +The **ceil** function returns the smallest integer not less than the input in say + +x = 21.15 +print(ceil(x)) + +which in the case here is 22. + +x = 21.75 +print(ceil(x)) + +which also yields 22. The **floor** function in the **math** package +is used to return the closest integer value which is less than or equal to the specified expression or value. +Compare the previous result to the usage of **floor** + +from math import floor +x = 21.75 +print(floor(x)) + +Alternatively, we can define ourselves the number of integration(mesh) points. In this case we could have + +n = 10 +tinitial = 0.0 +tfinal = 0.5 +DeltaT = (tfinal-tinitial)/(n) +print(DeltaT) + +Since we will set up one-dimensional arrays that contain the values of +various variables like time, position, velocity, acceleration etc, we +need to know the value of $n$, the number of data points (or +integration or mesh points). With $n$ we can initialize a given array +by setting all elelements to zero, as done here + +# define array a +a = np.zeros(n) +print(a) + +## Code for implementing Euler's method +In the code here we implement this simple Eurler scheme choosing a value for $D=0.0245$ m/s. + +# Common imports +import numpy as np +import pandas as pd +from math import * +import matplotlib.pyplot as plt +import os + +# Where to save the figures and data files +PROJECT_ROOT_DIR = "Results" +FIGURE_ID = "Results/FigureFiles" +DATA_ID = "DataFiles/" + +if not os.path.exists(PROJECT_ROOT_DIR): + os.mkdir(PROJECT_ROOT_DIR) + +if not os.path.exists(FIGURE_ID): + os.makedirs(FIGURE_ID) + +if not os.path.exists(DATA_ID): + os.makedirs(DATA_ID) + +def image_path(fig_id): + return os.path.join(FIGURE_ID, fig_id) + +def data_path(dat_id): + return os.path.join(DATA_ID, dat_id) + +def save_fig(fig_id): + plt.savefig(image_path(fig_id) + ".png", format='png') + + +g = 9.80655 #m/s^2 +D = 0.00245 #m/s +DeltaT = 0.1 +#set up arrays +tfinal = 0.5 +n = ceil(tfinal/DeltaT) +# define scaling constant vT +vT = sqrt(g/D) +# set up arrays for t, a, v, and y and we can compare our results with analytical ones +t = np.zeros(n) +a = np.zeros(n) +v = np.zeros(n) +y = np.zeros(n) +yanalytic = np.zeros(n) +# Initial conditions +v[0] = 0.0 #m/s +y[0] = 10.0 #m +yanalytic[0] = y[0] +# Start integrating using Euler's method +for i in range(n-1): + # expression for acceleration + a[i] = -g + D*v[i]*v[i] + # update velocity and position + y[i+1] = y[i] + DeltaT*v[i] + v[i+1] = v[i] + DeltaT*a[i] + # update time to next time step and compute analytical answer + t[i+1] = t[i] + DeltaT + yanalytic[i+1] = y[0]-(vT*vT/g)*log(cosh(g*t[i+1]/vT)) + if ( y[i+1] < 0.0): + break +a[n-1] = -g + D*v[n-1]*v[n-1] +data = {'t[s]': t, + 'y[m]': y-yanalytic, + 'v[m/s]': v, + 'a[m/s^2]': a + } +NewData = pd.DataFrame(data) +display(NewData) +#finally we plot the data +fig, axs = plt.subplots(3, 1) +axs[0].plot(t, y, t, yanalytic) +axs[0].set_xlim(0, tfinal) +axs[0].set_ylabel('y and exact') +axs[1].plot(t, v) +axs[1].set_ylabel('v[m/s]') +axs[2].plot(t, a) +axs[2].set_xlabel('time[s]') +axs[2].set_ylabel('a[m/s^2]') +fig.tight_layout() +save_fig("EulerIntegration") +plt.show() + +Try different values for $\Delta t$ and study the difference between the exact solution and the numerical solution. + + +## Simple extension, the Euler-Cromer method + +The Euler-Cromer method is a simple variant of the standard Euler +method. We use the newly updated velocity $v_{i+1}$ as an input to the +new position, that is, instead of + +$$ +y_{i+1} = y_i+\Delta t v_i, +$$ + +and + +$$ +v_{i+1} = v_i+\Delta t a_i, +$$ + +we use now the newly calculate for $v_{i+1}$ as input to $y_{i+1}$, that is +we compute first + +$$ +v_{i+1} = v_i+\Delta t a_i, +$$ + +and then + +$$ +y_{i+1} = y_i+\Delta t v_{i+1}, +$$ + +Implementing the Euler-Cromer method yields a simple change to the previous code. We only need to change the following line in the loop over time +steps + +for i in range(n-1): + # more codes in between here + v[i+1] = v[i] + DeltaT*a[i] + y[i+1] = y[i] + DeltaT*v[i+1] + # more code + +## Python practicalities, Software and needed installations + +We will make extensive use of Python as programming language and its +myriad of available libraries. You will find +Jupyter notebooks invaluable in your work. + +If you have Python installed (we strongly recommend Python3) and you feel +pretty familiar with installing different packages, we recommend that +you install the following Python packages via **pip** as + +1. pip install numpy scipy matplotlib ipython scikit-learn mglearn sympy pandas pillow + +For Python3, replace **pip** with **pip3**. + +For OSX users we recommend, after having installed Xcode, to +install **brew**. Brew allows for a seamless installation of additional +software via for example + +1. brew install python3 + +For Linux users, with its variety of distributions like for example the widely popular Ubuntu distribution, +you can use **pip** as well and simply install Python as + +1. sudo apt-get install python3 (or python for pyhton2.7) + +etc etc. + + + +## Python installers + +If you don't want to perform these operations separately and venture +into the hassle of exploring how to set up dependencies and paths, we +recommend two widely used distrubutions which set up all relevant +dependencies for Python, namely + +* [Anaconda](https://docs.anaconda.com/), + +which is an open source +distribution of the Python and R programming languages for large-scale +data processing, predictive analytics, and scientific computing, that +aims to simplify package management and deployment. Package versions +are managed by the package management system **conda**. + +* [Enthought canopy](https://www.enthought.com/product/canopy/) + +is a Python +distribution for scientific and analytic computing distribution and +analysis environment, available for free and under a commercial +license. + +Furthermore, [Google's Colab](https://colab.research.google.com/notebooks/welcome.ipynb) is a free Jupyter notebook environment that requires +no setup and runs entirely in the cloud. Try it out! + +## Useful Python libraries +Here we list several useful Python libraries we strongly recommend (if you use anaconda many of these are already there) + +* [NumPy](https://www.numpy.org/) is a highly popular library for large, multi-dimensional arrays and matrices, along with a large collection of high-level mathematical functions to operate on these arrays + +* [The pandas](https://pandas.pydata.org/) library provides high-performance, easy-to-use data structures and data analysis tools + +* [Xarray](http://xarray.pydata.org/en/stable/) is a Python package that makes working with labelled multi-dimensional arrays simple, efficient, and fun! + +* [Scipy](https://www.scipy.org/) (pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software for mathematics, science, and engineering. + +* [Matplotlib](https://matplotlib.org/) is a Python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms. + +* [Autograd](https://github.com/HIPS/autograd) can automatically differentiate native Python and Numpy code. It can handle a large subset of Python's features, including loops, ifs, recursion and closures, and it can even take derivatives of derivatives of derivatives + +* [SymPy](https://www.sympy.org/en/index.html) is a Python library for symbolic mathematics. + +* [scikit-learn](https://scikit-learn.org/stable/) has simple and efficient tools for machine learning, data mining and data analysis + +* [TensorFlow](https://www.tensorflow.org/) is a Python library for fast numerical computing created and released by Google + +* [Keras](https://keras.io/) is a high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, or Theano + +* And many more such as [pytorch](https://pytorch.org/), [Theano](https://pypi.org/project/Theano/) etc + +Your jupyter notebook can easily be +converted into a nicely rendered **PDF** file or a Latex file for +further processing. For example, convert to latex as + + pycod jupyter nbconvert filename.ipynb --to latex + + +And to add more versatility, the Python package [SymPy](http://www.sympy.org/en/index.html) is a Python library for symbolic mathematics. It aims to become a full-featured computer algebra system (CAS) and is entirely written in Python. + + + +## Numpy examples and Important Matrix and vector handling packages + +There are several central software libraries for linear algebra and eigenvalue problems. Several of the more +popular ones have been wrapped into ofter software packages like those from the widely used text **Numerical Recipes**. The original source codes in many of the available packages are often taken from the widely used +software package LAPACK, which follows two other popular packages +developed in the 1970s, namely EISPACK and LINPACK. We describe them shortly here. + + * LINPACK: package for linear equations and least square problems. + + * LAPACK:package for solving symmetric, unsymmetric and generalized eigenvalue problems. From LAPACK's website it is possible to download for free all source codes from this library. Both C/C++ and Fortran versions are available. + + * BLAS (I, II and III): (Basic Linear Algebra Subprograms) are routines that provide standard building blocks for performing basic vector and matrix operations. Blas I is vector operations, II vector-matrix operations and III matrix-matrix operations. Highly parallelized and efficient codes, all available for download from . + +## Basic Matrix Features + +**Matrix properties reminder.** + +$$ +\mathbf{A} = + \begin{bmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ + a_{21} & a_{22} & a_{23} & a_{24} \\ + a_{31} & a_{32} & a_{33} & a_{34} \\ + a_{41} & a_{42} & a_{43} & a_{44} + \end{bmatrix}\qquad +\mathbf{I} = + \begin{bmatrix} 1 & 0 & 0 & 0 \\ + 0 & 1 & 0 & 0 \\ + 0 & 0 & 1 & 0 \\ + 0 & 0 & 0 & 1 + \end{bmatrix} +$$ + +The inverse of a matrix is defined by + +$$ +\mathbf{A}^{-1} \cdot \mathbf{A} = I +$$ + + + + + + + + + + + + +
    Relations Name matrix elements
    $A = A^{T}$ symmetric $a_{ij} = a_{ji}$
    $A = \left (A^{T} \right )^{-1}$ real orthogonal $\sum_k a_{ik} a_{jk} = \sum_k a_{ki} a_{kj} = \delta_{ij}$
    $A = A^{ * }$ real matrix $a_{ij} = a_{ij}^{ * }$
    $A = A^{\dagger}$ hermitian $a_{ij} = a_{ji}^{ * }$
    $A = \left (A^{\dagger} \right )^{-1}$ unitary $\sum_k a_{ik} a_{jk}^{ * } = \sum_k a_{ki}^{ * } a_{kj} = \delta_{ij}$
    + + + + +### Some famous Matrices + + * Diagonal if $a_{ij}=0$ for $i\ne j$ + + * Upper triangular if $a_{ij}=0$ for $i > j$ + + * Lower triangular if $a_{ij}=0$ for $i < j$ + + * Upper Hessenberg if $a_{ij}=0$ for $i > j+1$ + + * Lower Hessenberg if $a_{ij}=0$ for $i < j+1$ + + * Tridiagonal if $a_{ij}=0$ for $|i -j| > 1$ + + * Lower banded with bandwidth $p$: $a_{ij}=0$ for $i > j+p$ + + * Upper banded with bandwidth $p$: $a_{ij}=0$ for $i < j+p$ + + * Banded, block upper triangular, block lower triangular.... + +### More Basic Matrix Features + +**Some Equivalent Statements.** + +For an $N\times N$ matrix $\mathbf{A}$ the following properties are all equivalent + + * If the inverse of $\mathbf{A}$ exists, $\mathbf{A}$ is nonsingular. + + * The equation $\mathbf{Ax}=0$ implies $\mathbf{x}=0$. + + * The rows of $\mathbf{A}$ form a basis of $R^N$. + + * The columns of $\mathbf{A}$ form a basis of $R^N$. + + * $\mathbf{A}$ is a product of elementary matrices. + + * $0$ is not eigenvalue of $\mathbf{A}$. + + + + +## Numpy and arrays +[Numpy](http://www.numpy.org/) provides an easy way to handle arrays in Python. The standard way to import this library is as + +import numpy as np + +Here follows a simple example where we set up an array of ten elements, all determined by random numbers drawn according to the normal distribution, + +n = 10 +x = np.random.normal(size=n) +print(x) + +We defined a vector $x$ with $n=10$ elements with its values given by the Normal distribution $N(0,1)$. +Another alternative is to declare a vector as follows + +import numpy as np +x = np.array([1, 2, 3]) +print(x) + +Here we have defined a vector with three elements, with $x_0=1$, $x_1=2$ and $x_2=3$. Note that both Python and C++ +start numbering array elements from $0$ and on. This means that a vector with $n$ elements has a sequence of entities $x_0, x_1, x_2, \dots, x_{n-1}$. We could also let (recommended) Numpy to compute the logarithms of a specific array as + +import numpy as np +x = np.log(np.array([4, 7, 8])) +print(x) + +In the last example we used Numpy's unary function $np.log$. This function is +highly tuned to compute array elements since the code is vectorized +and does not require looping. We normaly recommend that you use the +Numpy intrinsic functions instead of the corresponding **log** function +from Python's **math** module. The looping is done explicitely by the +**np.log** function. The alternative, and slower way to compute the +logarithms of a vector would be to write + +import numpy as np +from math import log +x = np.array([4, 7, 8]) +for i in range(0, len(x)): + x[i] = log(x[i]) +print(x) + +We note that our code is much longer already and we need to import the **log** function from the **math** module. +The attentive reader will also notice that the output is $[1, 1, 2]$. Python interprets automagically our numbers as integers (like the **automatic** keyword in C++). To change this we could define our array elements to be double precision numbers as + +import numpy as np +x = np.log(np.array([4, 7, 8], dtype = np.float64)) +print(x) + +or simply write them as double precision numbers (Python uses 64 bits as default for floating point type variables), that is + +import numpy as np +x = np.log(np.array([4.0, 7.0, 8.0]) +print(x) + +To check the number of bytes (remember that one byte contains eight bits for double precision variables), you can use simple use the **itemsize** functionality (the array $x$ is actually an object which inherits the functionalities defined in Numpy) as + +import numpy as np +x = np.log(np.array([4.0, 7.0, 8.0]) +print(x.itemsize) + +## Matrices in Python + +Having defined vectors, we are now ready to try out matrices. We can +define a $3 \times 3 $ real matrix $\hat{A}$ as (recall that we user +lowercase letters for vectors and uppercase letters for matrices) + +import numpy as np +A = np.log(np.array([ [4.0, 7.0, 8.0], [3.0, 10.0, 11.0], [4.0, 5.0, 7.0] ])) +print(A) + +If we use the **shape** function we would get $(3, 3)$ as output, that is verifying that our matrix is a $3\times 3$ matrix. We can slice the matrix and print for example the first column (Python organized matrix elements in a row-major order, see below) as + +import numpy as np +A = np.log(np.array([ [4.0, 7.0, 8.0], [3.0, 10.0, 11.0], [4.0, 5.0, 7.0] ])) +# print the first column, row-major order and elements start with 0 +print(A[:,0]) + +We can continue this was by printing out other columns or rows. The example here prints out the second column + +import numpy as np +A = np.log(np.array([ [4.0, 7.0, 8.0], [3.0, 10.0, 11.0], [4.0, 5.0, 7.0] ])) +# print the first column, row-major order and elements start with 0 +print(A[1,:]) + +Numpy contains many other functionalities that allow us to slice, subdivide etc etc arrays. We strongly recommend that you look up the [Numpy website for more details](http://www.numpy.org/). Useful functions when defining a matrix are the **np.zeros** function which declares a matrix of a given dimension and sets all elements to zero + +import numpy as np +n = 10 +# define a matrix of dimension 10 x 10 and set all elements to zero +A = np.zeros( (n, n) ) +print(A) + +or initializing all elements to + +import numpy as np +n = 10 +# define a matrix of dimension 10 x 10 and set all elements to one +A = np.ones( (n, n) ) +print(A) + +or as unitarily distributed random numbers (see the material on random number generators in the statistics part) + +import numpy as np +n = 10 +# define a matrix of dimension 10 x 10 and set all elements to random numbers with x \in [0, 1] +A = np.random.rand(n, n) +print(A) + +## Meet the Pandas + + + + + +

    + + + + + +Another useful Python package is +[pandas](https://pandas.pydata.org/), which is an open source library +providing high-performance, easy-to-use data structures and data +analysis tools for Python. **pandas** stands for panel data, a term borrowed from econometrics and is an efficient library for data analysis with an emphasis on tabular data. +**pandas** has two major classes, the **DataFrame** class with two-dimensional data objects and tabular data organized in columns and the class **Series** with a focus on one-dimensional data objects. Both classes allow you to index data easily as we will see in the examples below. +**pandas** allows you also to perform mathematical operations on the data, spanning from simple reshapings of vectors and matrices to statistical operations. + +The following simple example shows how we can, in an easy way make tables of our data. Here we define a data set which includes names, place of birth and date of birth, and displays the data in an easy to read way. We will see repeated use of **pandas**, in particular in connection with classification of data. + +import pandas as pd +from IPython.display import display +data = {'First Name': ["Frodo", "Bilbo", "Aragorn II", "Samwise"], + 'Last Name': ["Baggins", "Baggins","Elessar","Gamgee"], + 'Place of birth': ["Shire", "Shire", "Eriador", "Shire"], + 'Date of Birth T.A.': [2968, 2890, 2931, 2980] + } +data_pandas = pd.DataFrame(data) +display(data_pandas) + +In the above we have imported **pandas** with the shorthand **pd**, the latter has become the standard way we import **pandas**. We make then a list of various variables +and reorganize the above lists into a **DataFrame** and then print out a neat table with specific column labels as *Name*, *place of birth* and *date of birth*. +Displaying these results, we see that the indices are given by the default numbers from zero to three. +**pandas** is extremely flexible and we can easily change the above indices by defining a new type of indexing as + +data_pandas = pd.DataFrame(data,index=['Frodo','Bilbo','Aragorn','Sam']) +display(data_pandas) + +Thereafter we display the content of the row which begins with the index **Aragorn** + +display(data_pandas.loc['Aragorn']) + +We can easily append data to this, for example + +new_hobbit = {'First Name': ["Peregrin"], + 'Last Name': ["Took"], + 'Place of birth': ["Shire"], + 'Date of Birth T.A.': [2990] + } +data_pandas=data_pandas.append(pd.DataFrame(new_hobbit, index=['Pippin'])) +display(data_pandas) + +Here are other examples where we use the **DataFrame** functionality to handle arrays, now with more interesting features for us, namely numbers. We set up a matrix +of dimensionality $10\times 5$ and compute the mean value and standard deviation of each column. Similarly, we can perform mathematial operations like squaring the matrix elements and many other operations. + +import numpy as np +import pandas as pd +from IPython.display import display +np.random.seed(100) +# setting up a 10 x 5 matrix +rows = 10 +cols = 5 +a = np.random.randn(rows,cols) +df = pd.DataFrame(a) +display(df) +print(df.mean()) +print(df.std()) +display(df**2) + +Thereafter we can select specific columns only and plot final results + +df.columns = ['First', 'Second', 'Third', 'Fourth', 'Fifth'] +df.index = np.arange(10) + +display(df) +print(df['Second'].mean() ) +print(df.info()) +print(df.describe()) + +from pylab import plt, mpl +plt.style.use('seaborn') +mpl.rcParams['font.family'] = 'serif' + +df.cumsum().plot(lw=2.0, figsize=(10,6)) +plt.show() + + +df.plot.bar(figsize=(10,6), rot=15) +plt.show() + +We can produce a $4\times 4$ matrix + +b = np.arange(16).reshape((4,4)) +print(b) +df1 = pd.DataFrame(b) +print(df1) + +and many other operations. + +The **Series** class is another important class included in +**pandas**. You can view it as a specialization of **DataFrame** but where +we have just a single column of data. It shares many of the same features as _DataFrame. As with **DataFrame**, +most operations are vectorized, achieving thereby a high performance when dealing with computations of arrays, in particular labeled arrays. +As we will see below it leads also to a very concice code close to the mathematical operations we may be interested in. +For multidimensional arrays, we recommend strongly [xarray](http://xarray.pydata.org/en/stable/). **xarray** has much of the same flexibility as **pandas**, but allows for the extension to higher dimensions than two. \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter2_121_1.png b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter2_121_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1408e1b74a00034defa230b7e3eeaced51eba971 GIT binary patch literal 20430 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter3.ipynb b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter3.ipynb new file mode 100644 index 000000000..0d39a5276 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter3.ipynb @@ -0,0 +1,1656 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Basic Steps of Scientific Investigations\n", + "\n", + "An overarching aim in this course is to give you a deeper\n", + "understanding of the scientific method. The problems we study will all\n", + "involve cases where we can apply classical mechanics. In our previous\n", + "material we already assumed that we had a model for the motion of an\n", + "object. Alternatively we could have data from experiment (like Usain\n", + "Bolt's 100m world record run in 2008). Or we could have performed\n", + "ourselves an experiment and we want to understand which forces are at\n", + "play and whether these forces can be understood in terms of\n", + "fundamental forces.\n", + "\n", + "Our first step consists in identifying the problem. What we sketch\n", + "here may include a mix of experiment and theoretical simulations, or\n", + "just experiment or only theory.\n", + "\n", + "\n", + "## Identifying our System\n", + "\n", + "Here we can ask questions like\n", + "1. What kind of object is moving\n", + "\n", + "2. What kind of data do we have\n", + "\n", + "3. How do we measure position, velocity, acceleration etc\n", + "\n", + "4. Which initial conditions influence our system\n", + "\n", + "5. Other aspects which allow us to identify the system\n", + "\n", + "## Defining a Model\n", + "\n", + "With our eventual data and observations we would now like to develop a\n", + "model for the system. In the end we want obviously to be able to\n", + "understand which forces are at play and how they influence our\n", + "specific system. That is, can we extract some deeper insights about a\n", + "system?\n", + "\n", + "We need then to\n", + "1. Find the forces that act on our system\n", + "\n", + "2. Introduce models for the forces\n", + "\n", + "3. Identify the equations which can govern the system (Newton's second law for example)\n", + "\n", + "4. More elements we deem important for defining our model\n", + "\n", + "## Solving the Equations\n", + "\n", + "With the model at hand, we can then solve the equations. In classical mechanics we normally end up with solving sets of coupled ordinary differential equations or partial differential equations.\n", + "1. Using Newton's second law we have equations of the type $\\boldsymbol{F}=m\\boldsymbol{a}=md\\boldsymbol{v}/dt$\n", + "\n", + "2. We need to define the initial conditions (typically the initial velocity and position as functions of time) and/or initial conditions and boundary conditions\n", + "\n", + "3. The solution of the equations give us then the position, the velocity and other time-dependent quantities which may specify the motion of a given object.\n", + "\n", + "We are not yet done. With our lovely solvers, we need to start thinking.\n", + "\n", + "\n", + "Now it is time to ask the big questions. What do our results mean? Can we give a simple interpretation in terms of fundamental laws? What do our results mean? Are they correct?\n", + "Thus, typical questions we may ask are\n", + "1. Are our results for say $\\boldsymbol{r}(t)$ valid? Do we trust what we did? Can you validate and verify the correctness of your results?\n", + "\n", + "2. Evaluate the answers and their implications\n", + "\n", + "3. Compare with experimental data if possible. Does our model make sense?\n", + "\n", + "4. and obviously many other questions.\n", + "\n", + "The analysis stage feeds back to the first stage. It may happen that\n", + "the data we had were not good enough, there could be large statistical\n", + "uncertainties. We may need to collect more data or perhaps we did a\n", + "sloppy job in identifying the degrees of freedom.\n", + "\n", + "All these steps are essential elements in a scientific\n", + "enquiry. Hopefully, through a mix of numerical simulations, analytical\n", + "calculations and experiments we may gain a deeper insight about the\n", + "physics of a specific system.\n", + "\n", + "Let us now remind ourselves of Newton's laws, since these are the laws of motion we will study in this course.\n", + "\n", + "\n", + "## Newton's Laws\n", + "\n", + "When analyzing a physical system we normally start with distinguishing between the object we are studying (we will label this in more general terms as our **system**) and how this system interacts with the environment (which often means everything else!)\n", + "\n", + "In our investigations we will thus analyze a specific physics problem in terms of the system and the environment.\n", + "In doing so we need to identify the forces that act on the system and assume that the\n", + "forces acting on the system must have a source, an identifiable cause in\n", + "the environment.\n", + "\n", + "A force acting on for example a falling object must be related to an interaction with something in the environment.\n", + "This also means that we do not consider internal forces. The latter are forces between\n", + "one part of the object and another part. In this course we will mainly focus on external forces.\n", + "\n", + "Forces are either contact forces or long-range forces.\n", + "\n", + "Contact forces, as evident from the name, are forces that occur at the contact between\n", + "the system and the environment. Well-known long-range forces are the gravitional force and the electromagnetic force.\n", + "\n", + "\n", + "\n", + "## Setting up a model for forces acting on an object\n", + "\n", + "In order to set up the forces which act on an object, the following steps may be useful\n", + "1. Divide the problem into system and environment.\n", + "\n", + "2. Draw a figure of the object and everything in contact with the object.\n", + "\n", + "3. Draw a closed curve around the system.\n", + "\n", + "4. Find contact points—these are the points where contact forces may act.\n", + "\n", + "5. Give names and symbols to all the contact forces.\n", + "\n", + "6. Identify the long-range forces.\n", + "\n", + "7. Make a drawing of the object. Draw the forces as arrows, vectors, starting from where the force is acting. The direction of the vector(s) indicates the (positive) direction of the force. Try to make the length of the arrow indicate the relative magnitude of the forces.\n", + "\n", + "8. Draw in the axes of the coordinate system. It is often convenient to make one axis parallel to the direction of motion. When you choose the direction of the axis you also choose the positive direction for the axis.\n", + "\n", + "## Newton's Laws, the Second one first\n", + "\n", + "\n", + "Newton’s second law of motion: The force $\\boldsymbol{F}$ on an object of inertial mass $m$\n", + "is related to the acceleration a of the object through" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F} = m\\boldsymbol{a},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\boldsymbol{a}$ is the acceleration.\n", + "\n", + "Newton’s laws of motion are laws of nature that have been found by experimental\n", + "investigations and have been shown to hold up to continued experimental investigations.\n", + "Newton’s laws are valid over a wide range of length- and time-scales. We\n", + "use Newton’s laws of motion to describe everything from the motion of atoms to the\n", + "motion of galaxies.\n", + "\n", + "The second law is a vector equation with the acceleration having the same\n", + "direction as the force. The acceleration is proportional to the force via the mass $m$ of the system under study.\n", + "\n", + "\n", + "Newton’s second law introduces a new property of an object, the so-called \n", + "inertial mass $m$. We determine the inertial mass of an object by measuring the\n", + "acceleration for a given applied force.\n", + "\n", + "\n", + "\n", + "## Then the First Law\n", + "\n", + "\n", + "What happens if the net external force on a body is zero? Applying Newton’s second\n", + "law, we find:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F} = 0 = m\\boldsymbol{a},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which gives using the definition of the acceleration" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a} = \\frac{d\\boldsymbol{v}}{dt}=0.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The acceleration is zero, which means that the velocity of the object is constant. This\n", + "is often referred to as Newton’s first law. An object in a state of uniform motion tends to remain in\n", + "that state unless an external force changes its state of motion.\n", + "Why do we need a separate law for this? Is it not simply a special case of Newton’s\n", + "second law? Yes, Newton’s first law can be deduced from the second law as we have\n", + "illustrated. However, the first law is often used for a different purpose: Newton’s\n", + "First Law tells us about the limit of applicability of Newton’s Second law. Newton’s\n", + "Second law can only be used in reference systems where the First law is obeyed. But\n", + "is not the First law always valid? No! The First law is only valid in reference systems\n", + "that are not accelerated. If you observe the motion of a ball from an accelerating\n", + "car, the ball will appear to accelerate even if there are no forces acting on it. We call\n", + "systems that are not accelerating inertial systems, and Newton’s first law is often\n", + "called the law of inertia. Newton’s first and second laws of motion are only valid in\n", + "inertial systems. \n", + "\n", + "A system is an inertial system if it is not accelerated. It means that the reference system\n", + "must not be accelerating linearly or rotating. Unfortunately, this means that most\n", + "systems we know are not really inertial systems. For example, the surface of the\n", + "Earth is clearly not an inertial system, because the Earth is rotating. The Earth is also\n", + "not an inertial system, because it ismoving in a curved path around the Sun. However,\n", + "even if the surface of the Earth is not strictly an inertial system, it may be considered\n", + "to be approximately an inertial system for many laboratory-size experiments.\n", + "\n", + "\n", + "## And finally the Third Law\n", + "\n", + "\n", + "If there is a force from object A on object B, there is also a force from object B on object A.\n", + "This fundamental principle of interactions is called Newton’s third law. We do not\n", + "know of any force that do not obey this law: All forces appear in pairs. Newton’s\n", + "third law is usually formulated as: For every action there is an equal and opposite\n", + "reaction.\n", + "\n", + "\n", + "\n", + "## Motion of a Single Object\n", + "\n", + "Here we consider the motion of a single particle moving under\n", + "the influence of some set of forces. We will consider some problems where\n", + "the force does not depend on the position. In that case Newton's law\n", + "$m\\dot{\\boldsymbol{v}}=\\boldsymbol{F}(\\boldsymbol{v})$ is a first-order differential\n", + "equation and one solves for $\\boldsymbol{v}(t)$, then moves on to integrate\n", + "$\\boldsymbol{v}$ to get the position. In essentially all of these cases we cna find an analytical solution.\n", + "\n", + "\n", + "\n", + "## Air Resistance in One Dimension\n", + "\n", + "Air resistance tends to scale as the square of the velocity. This is\n", + "in contrast to many problems chosen for textbooks, where it is linear\n", + "in the velocity. The choice of a linear dependence is motivated by\n", + "mathematical simplicity (it keeps the differential equation linear)\n", + "rather than by physics. One can see that the force should be quadratic\n", + "in velocity by considering the momentum imparted on the air\n", + "molecules. If an object sweeps through a volume $dV$ of air in time\n", + "$dt$, the momentum imparted on the air is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "dP=\\rho_m dV v,\n", + "\\label{_auto1} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $v$ is the velocity of the object and $\\rho_m$ is the mass\n", + "density of the air. If the molecules bounce back as opposed to stop\n", + "you would double the size of the term. The opposite value of the\n", + "momentum is imparted onto the object itself. Geometrically, the\n", + "differential volume is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "dV=Avdt,\n", + "\\label{_auto2} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $A$ is the cross-sectional area and $vdt$ is the distance the\n", + "object moved in time $dt$.\n", + "\n", + "\n", + "## Resulting Acceleration\n", + "Plugging this into the expression above," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{dP}{dt}=-\\rho_m A v^2.\n", + "\\label{_auto3} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the force felt by the particle, and is opposite to its\n", + "direction of motion. Now, because air doesn't stop when it hits an\n", + "object, but flows around the best it can, the actual force is reduced\n", + "by a dimensionless factor $c_W$, called the drag coefficient." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F_{\\rm drag}=-c_W\\rho_m Av^2,\n", + "\\label{_auto4} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the acceleration is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{dv}{dt}=-\\frac{c_W\\rho_mA}{m}v^2.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a particle with initial velocity $v_0$, one can separate the $dt$\n", + "to one side of the equation, and move everything with $v$s to the\n", + "other side. We did this in our discussion of simple motion and will not repeat it here.\n", + "\n", + "On more general terms,\n", + "for many systems, e.g. an automobile, there are multiple sources of\n", + "resistance. In addition to wind resistance, where the force is\n", + "proportional to $v^2$, there are dissipative effects of the tires on\n", + "the pavement, and in the axel and drive train. These other forces can\n", + "have components that scale proportional to $v$, and components that\n", + "are independent of $v$. Those independent of $v$, e.g. the usual\n", + "$f=\\mu_K N$ frictional force you consider in your first Physics courses, only set in\n", + "once the object is actually moving. As speeds become higher, the $v^2$\n", + "components begin to dominate relative to the others. For automobiles\n", + "at freeway speeds, the $v^2$ terms are largely responsible for the\n", + "loss of efficiency. To travel a distance $L$ at fixed speed $v$, the\n", + "energy/work required to overcome the dissipative forces are $fL$,\n", + "which for a force of the form $f=\\alpha v^n$ becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "W=\\int dx~f=\\alpha v^n L.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For $n=0$ the work is\n", + "independent of speed, but for the wind resistance, where $n=2$,\n", + "slowing down is essential if one wishes to reduce fuel consumption. It\n", + "is also important to consider that engines are designed to be most\n", + "efficient at a chosen range of power output. Thus, some cars will get\n", + "better mileage at higher speeds (They perform better at 50 mph than at\n", + "5 mph) despite the considerations mentioned above.\n", + "\n", + "\n", + "## Going Ballistic, Projectile Motion or a Softer Approach, Falling Raindrops\n", + "\n", + "\n", + "As an example of Newton's Laws we consider projectile motion (or a\n", + "falling raindrop or a ball we throw up in the air) with a drag force. Even though air resistance is\n", + "largely proportional to the square of the velocity, we will consider\n", + "the drag force to be linear to the velocity, $\\boldsymbol{F}=-m\\gamma\\boldsymbol{v}$,\n", + "for the purposes of this exercise. The acceleration for a projectile moving upwards,\n", + "$\\boldsymbol{a}=\\boldsymbol{F}/m$, becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{dv_x}{dt}=-\\gamma v_x,\\\\\n", + "\\nonumber\n", + "\\frac{dv_y}{dt}=-\\gamma v_y-g,\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and $\\gamma$ has dimensions of inverse time. \n", + "\n", + "If you on the other hand have a falling raindrop, how do these equations change? See for example Figure 2.1 in Taylor.\n", + "Let us stay with a ball which is thrown up in the air at $t=0$. \n", + "\n", + "\n", + "## Ways of solving these equations\n", + "\n", + "We will go over two different ways to solve this equation. The first\n", + "by direct integration, and the second as a differential equation. To\n", + "do this by direct integration, one simply multiplies both sides of the\n", + "equations above by $dt$, then divide by the appropriate factors so\n", + "that the $v$s are all on one side of the equation and the $dt$ is on\n", + "the other. For the $x$ motion one finds an easily integrable equation," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{dv_x}{v_x}&=&-\\gamma dt,\\\\\n", + "\\nonumber\n", + "\\int_{v_{0x}}^{v_{x}}\\frac{dv_x}{v_x}&=&-\\gamma\\int_0^{t}dt,\\\\\n", + "\\nonumber\n", + "\\ln\\left(\\frac{v_{x}}{v_{0x}}\\right)&=&-\\gamma t,\\\\\n", + "\\nonumber\n", + "v_{x}(t)&=&v_{0x}e^{-\\gamma t}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is very much the result you would have written down\n", + "by inspection. For the $y$-component of the velocity," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{dv_y}{v_y+g/\\gamma}&=&-\\gamma dt\\\\\n", + "\\nonumber\n", + "\\ln\\left(\\frac{v_{y}+g/\\gamma}{v_{0y}-g/\\gamma}\\right)&=&-\\gamma t_f,\\\\\n", + "\\nonumber\n", + "v_{fy}&=&-\\frac{g}{\\gamma}+\\left(v_{0y}+\\frac{g}{\\gamma}\\right)e^{-\\gamma t}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Whereas $v_x$ starts at some value and decays\n", + "exponentially to zero, $v_y$ decays exponentially to the terminal\n", + "velocity, $v_t=-g/\\gamma$.\n", + "\n", + "\n", + "## Solving as differential equations\n", + "\n", + "Although this direct integration is simpler than the method we invoke\n", + "below, the method below will come in useful for some slightly more\n", + "difficult differential equations in the future. The differential\n", + "equation for $v_x$ is straight-forward to solve. Because it is first\n", + "order there is one arbitrary constant, $A$, and by inspection the\n", + "solution is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_x=Ae^{-\\gamma t}.\n", + "\\label{_auto5} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The arbitrary constants for equations of motion are usually determined\n", + "by the initial conditions, or more generally boundary conditions. By\n", + "inspection $A=v_{0x}$, the initial $x$ component of the velocity.\n", + "\n", + "\n", + "\n", + "## Differential Equations, contn\n", + "\n", + "The differential equation for $v_y$ is a bit more complicated due to\n", + "the presence of $g$. Differential equations where all the terms are\n", + "linearly proportional to a function, in this case $v_y$, or to\n", + "derivatives of the function, e.g., $v_y$, $dv_y/dt$,\n", + "$d^2v_y/dt^2\\cdots$, are called linear differential equations. If\n", + "there are terms proportional to $v^2$, as would happen if the drag\n", + "force were proportional to the square of the velocity, the\n", + "differential equation is not longer linear. Because this expression\n", + "has only one derivative in $v$ it is a first-order linear differential\n", + "equation. If a term were added proportional to $d^2v/dt^2$ it would be\n", + "a second-order differential equation. In this case we have a term\n", + "completely independent of $v$, the gravitational acceleration $g$, and\n", + "the usual strategy is to first rewrite the equation with all the\n", + "linear terms on one side of the equal sign," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{dv_y}{dt}+\\gamma v_y=-g.\n", + "\\label{_auto6} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Splitting into two parts\n", + "\n", + "Now, the solution to the equation can be broken into two\n", + "parts. Because this is a first-order differential equation we know\n", + "that there will be one arbitrary constant. Physically, the arbitrary\n", + "constant will be determined by setting the initial velocity, though it\n", + "could be determined by setting the velocity at any given time. Like\n", + "most differential equations, solutions are not \"solved\". Instead,\n", + "one guesses at a form, then shows the guess is correct. For these\n", + "types of equations, one first tries to find a single solution,\n", + "i.e. one with no arbitrary constants. This is called the {\\it\n", + "particular} solution, $y_p(t)$, though it should really be called\n", + "\"a\" particular solution because there are an infinite number of such\n", + "solutions. One then finds a solution to the {\\it homogenous} equation,\n", + "which is the equation with zero on the right-hand side," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{dv_{y,h}}{dt}+\\gamma v_{y,h}=0.\n", + "\\label{_auto7} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Homogenous solutions will have arbitrary constants. \n", + "\n", + "The particular solution will solve the same equation as the original\n", + "general equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{dv_{y,p}}{dt}+\\gamma v_{y,p}=-g.\n", + "\\label{_auto8} \\tag{8}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, we don't need find one with arbitrary constants. Hence, it is\n", + "called a **particular** solution.\n", + "\n", + "The sum of the two," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_y=v_{y,p}+v_{y,h},\n", + "\\label{_auto9} \\tag{9}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "is a solution of the total equation because of the linear nature of\n", + "the differential equation. One has now found a *general* solution\n", + "encompassing all solutions, because it both satisfies the general\n", + "equation (like the particular solution), and has an arbitrary constant\n", + "that can be adjusted to fit any initial condition (like the homogneous\n", + "solution). If the equation were not linear, e.g if there were a term\n", + "such as $v_y^2$ or $v_y\\dot{v}_y$, this technique would not work.\n", + "\n", + "\n", + "## More details\n", + "\n", + "Returning to the example above, the homogenous solution is the same as\n", + "that for $v_x$, because there was no gravitational acceleration in\n", + "that case," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_{y,h}=Be^{-\\gamma t}.\n", + "\\label{_auto10} \\tag{10}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case a particular solution is one with constant velocity," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_{y,p}=-g/\\gamma.\n", + "\\label{_auto11} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that this is the terminal velocity of a particle falling from a\n", + "great height. The general solution is thus," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_y=Be^{-\\gamma t}-g/\\gamma,\n", + "\\label{_auto12} \\tag{12}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and one can find $B$ from the initial velocity," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_{0y}=B-g/\\gamma,~~~B=v_{0y}+g/\\gamma.\n", + "\\label{_auto13} \\tag{13}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plugging in the expression for $B$ gives the $y$ motion given the initial velocity," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_y=(v_{0y}+g/\\gamma)e^{-\\gamma t}-g/\\gamma.\n", + "\\label{_auto14} \\tag{14}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is easy to see that this solution has $v_y=v_{0y}$ when $t=0$ and\n", + "$v_y=-g/\\gamma$ when $t\\rightarrow\\infty$.\n", + "\n", + "One can also integrate the two equations to find the coordinates $x$\n", + "and $y$ as functions of $t$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x&=&\\int_0^t dt'~v_{0x}(t')=\\frac{v_{0x}}{\\gamma}\\left(1-e^{-\\gamma t}\\right),\\\\\n", + "\\nonumber\n", + "y&=&\\int_0^t dt'~v_{0y}(t')=-\\frac{gt}{\\gamma}+\\frac{v_{0y}+g/\\gamma}{\\gamma}\\left(1-e^{-\\gamma t}\\right).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the question was to find the position at a time $t$, we would be\n", + "finished. However, the more common goal in a projectile equation\n", + "problem is to find the range, i.e. the distance $x$ at which $y$\n", + "returns to zero. For the case without a drag force this was much\n", + "simpler. The solution for the $y$ coordinate would have been\n", + "$y=v_{0y}t-gt^2/2$. One would solve for $t$ to make $y=0$, which would\n", + "be $t=2v_{0y}/g$, then plug that value for $t$ into $x=v_{0x}t$ to\n", + "find $x=2v_{0x}v_{0y}/g=v_0\\sin(2\\theta_0)/g$. One follows the same\n", + "steps here, except that the expression for $y(t)$ is more\n", + "complicated. Searching for the time where $y=0$, and we get" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "0=-\\frac{gt}{\\gamma}+\\frac{v_{0y}+g/\\gamma}{\\gamma}\\left(1-e^{-\\gamma t}\\right).\n", + "\\label{_auto15} \\tag{15}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This cannot be inverted into a simple expression $t=\\cdots$. Such\n", + "expressions are known as \"transcendental equations\", and are not the\n", + "rare instance, but are the norm. In the days before computers, one\n", + "might plot the right-hand side of the above graphically as\n", + "a function of time, then find the point where it crosses zero.\n", + "\n", + "Now, the most common way to solve for an equation of the above type\n", + "would be to apply Newton's method numerically. This involves the\n", + "following algorithm for finding solutions of some equation $F(t)=0$.\n", + "\n", + "1. First guess a value for the time, $t_{\\rm guess}$.\n", + "\n", + "2. Calculate $F$ and its derivative, $F(t_{\\rm guess})$ and $F'(t_{\\rm guess})$. \n", + "\n", + "3. Unless you guessed perfectly, $F\\ne 0$, and assuming that $\\Delta F\\approx F'\\Delta t$, one would choose \n", + "\n", + "4. $\\Delta t=-F(t_{\\rm guess})/F'(t_{\\rm guess})$.\n", + "\n", + "5. Now repeat step 1, but with $t_{\\rm guess}\\rightarrow t_{\\rm guess}+\\Delta t$.\n", + "\n", + "If the $F(t)$ were perfectly linear in $t$, one would find $t$ in one\n", + "step. Instead, one typically finds a value of $t$ that is closer to\n", + "the final answer than $t_{\\rm guess}$. One breaks the loop once one\n", + "finds $F$ within some acceptable tolerance of zero. A program to do\n", + "this will be added shortly.\n", + "\n", + "\n", + "## Motion in a Magnetic Field\n", + "\n", + "\n", + "Another example of a velocity-dependent force is magnetism," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\boldsymbol{F}&=&q\\boldsymbol{v}\\times\\boldsymbol{B},\\\\\n", + "\\nonumber\n", + "F_i&=&q\\sum_{jk}\\epsilon_{ijk}v_jB_k.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a uniform field in the $z$ direction $\\boldsymbol{B}=B\\hat{z}$, the force can only have $x$ and $y$ components," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "F_x&=&qBv_y\\\\\n", + "\\nonumber\n", + "F_y&=&-qBv_x.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The differential equations are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\dot{v}_x&=&\\omega_c v_y,\\omega_c= qB/m\\\\\n", + "\\nonumber\n", + "\\dot{v}_y&=&-\\omega_c v_x.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One can solve the equations by taking time derivatives of either equation, then substituting into the other equation," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\ddot{v}_x=\\omega_c\\dot{v_y}=-\\omega_c^2v_x,\\\\\n", + "\\nonumber\n", + "\\ddot{v}_y&=&-\\omega_c\\dot{v}_x=-\\omega_cv_y.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The solution to these equations can be seen by inspection," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "v_x&=&A\\sin(\\omega_ct+\\phi),\\\\\n", + "\\nonumber\n", + "v_y&=&A\\cos(\\omega_ct+\\phi).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One can integrate the equations to find the positions as a function of time," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x-x_0&=&\\int_{x_0}^x dx=\\int_0^t dt v(t)\\\\\n", + "\\nonumber\n", + "&=&\\frac{-A}{\\omega_c}\\cos(\\omega_ct+\\phi),\\\\\n", + "\\nonumber\n", + "y-y_0&=&\\frac{A}{\\omega_c}\\sin(\\omega_ct+\\phi).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The trajectory is a circle centered at $x_0,y_0$ with amplitude $A$ rotating in the clockwise direction.\n", + "\n", + "The equations of motion for the $z$ motion are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\dot{v_z}=0,\n", + "\\label{_auto16} \\tag{16}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which leads to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "z-z_0=V_zt.\n", + "\\label{_auto17} \\tag{17}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Added onto the circle, the motion is helical.\n", + "\n", + "Note that the kinetic energy," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "T=\\frac{1}{2}m(v_x^2+v_y^2+v_z^2)=\\frac{1}{2}m(\\omega_c^2A^2+V_z^2),\n", + "\\label{_auto18} \\tag{18}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "is constant. This is because the force is perpendicular to the\n", + "velocity, so that in any differential time element $dt$ the work done\n", + "on the particle $\\boldsymbol{F}\\cdot{dr}=dt\\boldsymbol{F}\\cdot{v}=0$.\n", + "\n", + "One should think about the implications of a velocity dependent\n", + "force. Suppose one had a constant magnetic field in deep space. If a\n", + "particle came through with velocity $v_0$, it would undergo cyclotron\n", + "motion with radius $R=v_0/\\omega_c$. However, if it were still its\n", + "motion would remain fixed. Now, suppose an observer looked at the\n", + "particle in one reference frame where the particle was moving, then\n", + "changed their velocity so that the particle's velocity appeared to be\n", + "zero. The motion would change from circular to fixed. Is this\n", + "possible?\n", + "\n", + "The solution to the puzzle above relies on understanding\n", + "relativity. Imagine that the first observer believes $\\boldsymbol{B}\\ne 0$ and\n", + "that the electric field $\\boldsymbol{E}=0$. If the observer then changes\n", + "reference frames by accelerating to a velocity $\\boldsymbol{v}$, in the new\n", + "frame $\\boldsymbol{B}$ and $\\boldsymbol{E}$ both change. If the observer moved to the\n", + "frame where the charge, originally moving with a small velocity $v$,\n", + "is now at rest, the new electric field is indeed $\\boldsymbol{v}\\times\\boldsymbol{B}$,\n", + "which then leads to the same acceleration as one had before. If the\n", + "velocity is not small compared to the speed of light, additional\n", + "$\\gamma$ factors come into play,\n", + "$\\gamma=1/\\sqrt{1-(v/c)^2}$. Relativistic motion will not be\n", + "considered in this course.\n", + "\n", + "\n", + "\n", + "\n", + "## Sliding Block tied to a Wall\n", + "\n", + "Another classical case is that of simple harmonic oscillations, here represented by a block sliding on a horizontal frictionless surface. The block is tied to a wall with a spring. If the spring is not compressed or stretched too far, the force on the block at a given position $x$ is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F=-kx.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The negative sign means that the force acts to restore the object to an equilibrium position. Newton's equation of motion for this idealized system is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\frac{d^2x}{dt^2}=-kx,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or we could rephrase it as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\frac{d^2x}{dt^2}=-\\frac{k}{m}x=-\\omega_0^2x,\n", + "\\label{eq:newton1} \\tag{19}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with the angular frequency $\\omega_0^2=k/m$. \n", + "\n", + "The above differential equation has the advantage that it can be solved analytically with solutions on the form" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x(t)=Acos(\\omega_0t+\\nu),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $A$ is the amplitude and $\\nu$ the phase constant. This provides in turn an important test for the numerical\n", + "solution and the development of a program for more complicated cases which cannot be solved analytically. \n", + "\n", + "\n", + "With the position $x(t)$ and the velocity $v(t)=dx/dt$ we can reformulate Newton's equation in the following way" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{dx(t)}{dt}=v(t),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{dv(t)}{dt}=-\\omega_0^2x(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We are now going to solve these equations using first the standard forward Euler method. Later we will try to improve upon this.\n", + "\n", + "\n", + "Before proceeding however, it is important to note that in addition to the exact solution, we have at least two further tests which can be used to check our solution. \n", + "\n", + "Since functions like $cos$ are periodic with a period $2\\pi$, then the solution $x(t)$ has also to be periodic. This means that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x(t+T)=x(t),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $T$ the period defined as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "T=\\frac{2\\pi}{\\omega_0}=\\frac{2\\pi}{\\sqrt{k/m}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Observe that $T$ depends only on $k/m$ and not on the amplitude of the solution. \n", + "\n", + "\n", + "In addition to the periodicity test, the total energy has also to be conserved. \n", + "\n", + "Suppose we choose the initial conditions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x(t=0)=1\\hspace{0.1cm} \\mathrm{m}\\hspace{1cm} v(t=0)=0\\hspace{0.1cm}\\mathrm{m/s},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "meaning that block is at rest at $t=0$ but with a potential energy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "E_0=\\frac{1}{2}kx(t=0)^2=\\frac{1}{2}k.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The total energy at any time $t$ has however to be conserved, meaning that our solution has to fulfil the condition" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "E_0=\\frac{1}{2}kx(t)^2+\\frac{1}{2}mv(t)^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will derive this equation in our discussion on [energy conservation](https://mhjensen.github.io/Physics321/doc/pub/energyconserv/html/energyconserv.html).\n", + "\n", + "\n", + "An algorithm which implements these equations is included below.\n", + " * Choose the initial position and speed, with the most common choice $v(t=0)=0$ and some fixed value for the position. \n", + "\n", + " * Choose the method you wish to employ in solving the problem.\n", + "\n", + " * Subdivide the time interval $[t_i,t_f] $ into a grid with step size" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "h=\\frac{t_f-t_i}{N},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $N$ is the number of mesh points. \n", + " * Calculate now the total energy given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "E_0=\\frac{1}{2}kx(t=0)^2=\\frac{1}{2}k.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Choose ODE solver to obtain $x_{i+1}$ and $v_{i+1}$ starting from the previous values $x_i$ and $v_i$.\n", + "\n", + " * When we have computed $x(v)_{i+1}$ we upgrade $t_{i+1}=t_i+h$.\n", + "\n", + " * This iterative process continues till we reach the maximum time $t_f$.\n", + "\n", + " * The results are checked against the exact solution. Furthermore, one has to check the stability of the numerical solution against the chosen number of mesh points $N$. \n", + "\n", + "The following python program ( code will be added shortly)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#\n", + "# This program solves Newtons equation for a block sliding on\n", + "# an horizontal frictionless surface.\n", + "# The block is tied to the wall with a spring, so N's eq takes the form:\n", + "#\n", + "# m d^2x/dt^2 = - kx\n", + "#\n", + "# In order to make the solution dimless, we set k/m = 1.\n", + "# This results in two coupled diff. eq's that may be written as:\n", + "#\n", + "# dx/dt = v\n", + "# dv/dt = -x\n", + "#\n", + "# The user has to specify the initial velocity and position,\n", + "# and the number of steps. The time interval is fixed to\n", + "# t \\in [0, 4\\pi) (two periods)\n", + "#" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The classical pendulum and scaling the equations\n", + "\n", + "The angular equation of motion of the pendulum is given by\n", + "Newton's equation and with no external force it reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " ml\\frac{d^2\\theta}{dt^2}+mgsin(\\theta)=0,\n", + "\\label{_auto19} \\tag{20}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with an angular velocity and acceleration given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " v=l\\frac{d\\theta}{dt},\n", + "\\label{_auto20} \\tag{21}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " a=l\\frac{d^2\\theta}{dt^2}.\n", + "\\label{_auto21} \\tag{22}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More on the Pendulum\n", + "\n", + "We do however expect that the motion will gradually come to an end due a viscous drag torque acting on the pendulum. \n", + "In the presence of the drag, the above equation becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " ml\\frac{d^2\\theta}{dt^2}+\\nu\\frac{d\\theta}{dt} +mgsin(\\theta)=0, \\label{eq:pend1} \\tag{23}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\nu$ is now a positive constant parameterizing the viscosity\n", + "of the medium in question. In order to maintain the motion against\n", + "viscosity, it is necessary to add some external driving force. \n", + "We choose here a periodic driving force. The last equation becomes then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " ml\\frac{d^2\\theta}{dt^2}+\\nu\\frac{d\\theta}{dt} +mgsin(\\theta)=Asin(\\omega t), \\label{eq:pend2} \\tag{24}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $A$ and $\\omega$ two constants representing the amplitude and \n", + "the angular frequency respectively. The latter is called the driving frequency.\n", + "\n", + "\n", + "\n", + "\n", + "## More on the Pendulum\n", + "\n", + "We define" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\omega_0=\\sqrt{g/l},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "the so-called natural frequency and the new dimensionless quantities" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{t}=\\omega_0t,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with the dimensionless driving frequency" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{\\omega}=\\frac{\\omega}{\\omega_0},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and introducing the quantity $Q$, called the *quality factor*," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "Q=\\frac{mg}{\\omega_0\\nu},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the dimensionless amplitude" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{A}=\\frac{A}{mg}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2\\theta}{d\\hat{t}^2}+\\frac{1}{Q}\\frac{d\\theta}{d\\hat{t}} \n", + " +sin(\\theta)=\\hat{A}cos(\\hat{\\omega}\\hat{t}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This equation can in turn be recast in terms of two coupled first-order differential equations as follows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d\\theta}{d\\hat{t}}=\\hat{v},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d\\hat{v}}{d\\hat{t}}=-\\frac{\\hat{v}}{Q}-sin(\\theta)+\\hat{A}cos(\\hat{\\omega}\\hat{t}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are the equations to be solved. The factor $Q$ represents the number of oscillations of the undriven system that must occur before its energy is significantly reduced due to the viscous drag. The amplitude $\\hat{A}$ is measured in units of the maximum possible gravitational torque while $\\hat{\\omega}$ is the angular frequency of the external torque measured in units of the pendulum's natural frequency." + ] + } + ], + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter3.py b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter3.py new file mode 100644 index 000000000..ebc5591fd --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter3.py @@ -0,0 +1,1026 @@ +# Basic Steps of Scientific Investigations + +An overarching aim in this course is to give you a deeper +understanding of the scientific method. The problems we study will all +involve cases where we can apply classical mechanics. In our previous +material we already assumed that we had a model for the motion of an +object. Alternatively we could have data from experiment (like Usain +Bolt's 100m world record run in 2008). Or we could have performed +ourselves an experiment and we want to understand which forces are at +play and whether these forces can be understood in terms of +fundamental forces. + +Our first step consists in identifying the problem. What we sketch +here may include a mix of experiment and theoretical simulations, or +just experiment or only theory. + + +## Identifying our System + +Here we can ask questions like +1. What kind of object is moving + +2. What kind of data do we have + +3. How do we measure position, velocity, acceleration etc + +4. Which initial conditions influence our system + +5. Other aspects which allow us to identify the system + +## Defining a Model + +With our eventual data and observations we would now like to develop a +model for the system. In the end we want obviously to be able to +understand which forces are at play and how they influence our +specific system. That is, can we extract some deeper insights about a +system? + +We need then to +1. Find the forces that act on our system + +2. Introduce models for the forces + +3. Identify the equations which can govern the system (Newton's second law for example) + +4. More elements we deem important for defining our model + +## Solving the Equations + +With the model at hand, we can then solve the equations. In classical mechanics we normally end up with solving sets of coupled ordinary differential equations or partial differential equations. +1. Using Newton's second law we have equations of the type $\boldsymbol{F}=m\boldsymbol{a}=md\boldsymbol{v}/dt$ + +2. We need to define the initial conditions (typically the initial velocity and position as functions of time) and/or initial conditions and boundary conditions + +3. The solution of the equations give us then the position, the velocity and other time-dependent quantities which may specify the motion of a given object. + +We are not yet done. With our lovely solvers, we need to start thinking. + + +Now it is time to ask the big questions. What do our results mean? Can we give a simple interpretation in terms of fundamental laws? What do our results mean? Are they correct? +Thus, typical questions we may ask are +1. Are our results for say $\boldsymbol{r}(t)$ valid? Do we trust what we did? Can you validate and verify the correctness of your results? + +2. Evaluate the answers and their implications + +3. Compare with experimental data if possible. Does our model make sense? + +4. and obviously many other questions. + +The analysis stage feeds back to the first stage. It may happen that +the data we had were not good enough, there could be large statistical +uncertainties. We may need to collect more data or perhaps we did a +sloppy job in identifying the degrees of freedom. + +All these steps are essential elements in a scientific +enquiry. Hopefully, through a mix of numerical simulations, analytical +calculations and experiments we may gain a deeper insight about the +physics of a specific system. + +Let us now remind ourselves of Newton's laws, since these are the laws of motion we will study in this course. + + +## Newton's Laws + +When analyzing a physical system we normally start with distinguishing between the object we are studying (we will label this in more general terms as our **system**) and how this system interacts with the environment (which often means everything else!) + +In our investigations we will thus analyze a specific physics problem in terms of the system and the environment. +In doing so we need to identify the forces that act on the system and assume that the +forces acting on the system must have a source, an identifiable cause in +the environment. + +A force acting on for example a falling object must be related to an interaction with something in the environment. +This also means that we do not consider internal forces. The latter are forces between +one part of the object and another part. In this course we will mainly focus on external forces. + +Forces are either contact forces or long-range forces. + +Contact forces, as evident from the name, are forces that occur at the contact between +the system and the environment. Well-known long-range forces are the gravitional force and the electromagnetic force. + + + +## Setting up a model for forces acting on an object + +In order to set up the forces which act on an object, the following steps may be useful +1. Divide the problem into system and environment. + +2. Draw a figure of the object and everything in contact with the object. + +3. Draw a closed curve around the system. + +4. Find contact points—these are the points where contact forces may act. + +5. Give names and symbols to all the contact forces. + +6. Identify the long-range forces. + +7. Make a drawing of the object. Draw the forces as arrows, vectors, starting from where the force is acting. The direction of the vector(s) indicates the (positive) direction of the force. Try to make the length of the arrow indicate the relative magnitude of the forces. + +8. Draw in the axes of the coordinate system. It is often convenient to make one axis parallel to the direction of motion. When you choose the direction of the axis you also choose the positive direction for the axis. + +## Newton's Laws, the Second one first + + +Newton’s second law of motion: The force $\boldsymbol{F}$ on an object of inertial mass $m$ +is related to the acceleration a of the object through + +$$ +\boldsymbol{F} = m\boldsymbol{a}, +$$ + +where $\boldsymbol{a}$ is the acceleration. + +Newton’s laws of motion are laws of nature that have been found by experimental +investigations and have been shown to hold up to continued experimental investigations. +Newton’s laws are valid over a wide range of length- and time-scales. We +use Newton’s laws of motion to describe everything from the motion of atoms to the +motion of galaxies. + +The second law is a vector equation with the acceleration having the same +direction as the force. The acceleration is proportional to the force via the mass $m$ of the system under study. + + +Newton’s second law introduces a new property of an object, the so-called +inertial mass $m$. We determine the inertial mass of an object by measuring the +acceleration for a given applied force. + + + +## Then the First Law + + +What happens if the net external force on a body is zero? Applying Newton’s second +law, we find: + +$$ +\boldsymbol{F} = 0 = m\boldsymbol{a}, +$$ + +which gives using the definition of the acceleration + +$$ +\boldsymbol{a} = \frac{d\boldsymbol{v}}{dt}=0. +$$ + +The acceleration is zero, which means that the velocity of the object is constant. This +is often referred to as Newton’s first law. An object in a state of uniform motion tends to remain in +that state unless an external force changes its state of motion. +Why do we need a separate law for this? Is it not simply a special case of Newton’s +second law? Yes, Newton’s first law can be deduced from the second law as we have +illustrated. However, the first law is often used for a different purpose: Newton’s +First Law tells us about the limit of applicability of Newton’s Second law. Newton’s +Second law can only be used in reference systems where the First law is obeyed. But +is not the First law always valid? No! The First law is only valid in reference systems +that are not accelerated. If you observe the motion of a ball from an accelerating +car, the ball will appear to accelerate even if there are no forces acting on it. We call +systems that are not accelerating inertial systems, and Newton’s first law is often +called the law of inertia. Newton’s first and second laws of motion are only valid in +inertial systems. + +A system is an inertial system if it is not accelerated. It means that the reference system +must not be accelerating linearly or rotating. Unfortunately, this means that most +systems we know are not really inertial systems. For example, the surface of the +Earth is clearly not an inertial system, because the Earth is rotating. The Earth is also +not an inertial system, because it ismoving in a curved path around the Sun. However, +even if the surface of the Earth is not strictly an inertial system, it may be considered +to be approximately an inertial system for many laboratory-size experiments. + + +## And finally the Third Law + + +If there is a force from object A on object B, there is also a force from object B on object A. +This fundamental principle of interactions is called Newton’s third law. We do not +know of any force that do not obey this law: All forces appear in pairs. Newton’s +third law is usually formulated as: For every action there is an equal and opposite +reaction. + + + +## Motion of a Single Object + +Here we consider the motion of a single particle moving under +the influence of some set of forces. We will consider some problems where +the force does not depend on the position. In that case Newton's law +$m\dot{\boldsymbol{v}}=\boldsymbol{F}(\boldsymbol{v})$ is a first-order differential +equation and one solves for $\boldsymbol{v}(t)$, then moves on to integrate +$\boldsymbol{v}$ to get the position. In essentially all of these cases we cna find an analytical solution. + + + +## Air Resistance in One Dimension + +Air resistance tends to scale as the square of the velocity. This is +in contrast to many problems chosen for textbooks, where it is linear +in the velocity. The choice of a linear dependence is motivated by +mathematical simplicity (it keeps the differential equation linear) +rather than by physics. One can see that the force should be quadratic +in velocity by considering the momentum imparted on the air +molecules. If an object sweeps through a volume $dV$ of air in time +$dt$, the momentum imparted on the air is + + +
    + +$$ +\begin{equation} +dP=\rho_m dV v, +\label{_auto1} \tag{1} +\end{equation} +$$ + +where $v$ is the velocity of the object and $\rho_m$ is the mass +density of the air. If the molecules bounce back as opposed to stop +you would double the size of the term. The opposite value of the +momentum is imparted onto the object itself. Geometrically, the +differential volume is + + +
    + +$$ +\begin{equation} +dV=Avdt, +\label{_auto2} \tag{2} +\end{equation} +$$ + +where $A$ is the cross-sectional area and $vdt$ is the distance the +object moved in time $dt$. + + +## Resulting Acceleration +Plugging this into the expression above, + + +
    + +$$ +\begin{equation} +\frac{dP}{dt}=-\rho_m A v^2. +\label{_auto3} \tag{3} +\end{equation} +$$ + +This is the force felt by the particle, and is opposite to its +direction of motion. Now, because air doesn't stop when it hits an +object, but flows around the best it can, the actual force is reduced +by a dimensionless factor $c_W$, called the drag coefficient. + + +
    + +$$ +\begin{equation} +F_{\rm drag}=-c_W\rho_m Av^2, +\label{_auto4} \tag{4} +\end{equation} +$$ + +and the acceleration is + +$$ +\begin{eqnarray} +\frac{dv}{dt}=-\frac{c_W\rho_mA}{m}v^2. +\end{eqnarray} +$$ + +For a particle with initial velocity $v_0$, one can separate the $dt$ +to one side of the equation, and move everything with $v$s to the +other side. We did this in our discussion of simple motion and will not repeat it here. + +On more general terms, +for many systems, e.g. an automobile, there are multiple sources of +resistance. In addition to wind resistance, where the force is +proportional to $v^2$, there are dissipative effects of the tires on +the pavement, and in the axel and drive train. These other forces can +have components that scale proportional to $v$, and components that +are independent of $v$. Those independent of $v$, e.g. the usual +$f=\mu_K N$ frictional force you consider in your first Physics courses, only set in +once the object is actually moving. As speeds become higher, the $v^2$ +components begin to dominate relative to the others. For automobiles +at freeway speeds, the $v^2$ terms are largely responsible for the +loss of efficiency. To travel a distance $L$ at fixed speed $v$, the +energy/work required to overcome the dissipative forces are $fL$, +which for a force of the form $f=\alpha v^n$ becomes + +$$ +\begin{eqnarray} +W=\int dx~f=\alpha v^n L. +\end{eqnarray} +$$ + +For $n=0$ the work is +independent of speed, but for the wind resistance, where $n=2$, +slowing down is essential if one wishes to reduce fuel consumption. It +is also important to consider that engines are designed to be most +efficient at a chosen range of power output. Thus, some cars will get +better mileage at higher speeds (They perform better at 50 mph than at +5 mph) despite the considerations mentioned above. + + +## Going Ballistic, Projectile Motion or a Softer Approach, Falling Raindrops + + +As an example of Newton's Laws we consider projectile motion (or a +falling raindrop or a ball we throw up in the air) with a drag force. Even though air resistance is +largely proportional to the square of the velocity, we will consider +the drag force to be linear to the velocity, $\boldsymbol{F}=-m\gamma\boldsymbol{v}$, +for the purposes of this exercise. The acceleration for a projectile moving upwards, +$\boldsymbol{a}=\boldsymbol{F}/m$, becomes + +$$ +\begin{eqnarray} +\frac{dv_x}{dt}=-\gamma v_x,\\ +\nonumber +\frac{dv_y}{dt}=-\gamma v_y-g, +\end{eqnarray} +$$ + +and $\gamma$ has dimensions of inverse time. + +If you on the other hand have a falling raindrop, how do these equations change? See for example Figure 2.1 in Taylor. +Let us stay with a ball which is thrown up in the air at $t=0$. + + +## Ways of solving these equations + +We will go over two different ways to solve this equation. The first +by direct integration, and the second as a differential equation. To +do this by direct integration, one simply multiplies both sides of the +equations above by $dt$, then divide by the appropriate factors so +that the $v$s are all on one side of the equation and the $dt$ is on +the other. For the $x$ motion one finds an easily integrable equation, + +$$ +\begin{eqnarray} +\frac{dv_x}{v_x}&=&-\gamma dt,\\ +\nonumber +\int_{v_{0x}}^{v_{x}}\frac{dv_x}{v_x}&=&-\gamma\int_0^{t}dt,\\ +\nonumber +\ln\left(\frac{v_{x}}{v_{0x}}\right)&=&-\gamma t,\\ +\nonumber +v_{x}(t)&=&v_{0x}e^{-\gamma t}. +\end{eqnarray} +$$ + +This is very much the result you would have written down +by inspection. For the $y$-component of the velocity, + +$$ +\begin{eqnarray} +\frac{dv_y}{v_y+g/\gamma}&=&-\gamma dt\\ +\nonumber +\ln\left(\frac{v_{y}+g/\gamma}{v_{0y}-g/\gamma}\right)&=&-\gamma t_f,\\ +\nonumber +v_{fy}&=&-\frac{g}{\gamma}+\left(v_{0y}+\frac{g}{\gamma}\right)e^{-\gamma t}. +\end{eqnarray} +$$ + +Whereas $v_x$ starts at some value and decays +exponentially to zero, $v_y$ decays exponentially to the terminal +velocity, $v_t=-g/\gamma$. + + +## Solving as differential equations + +Although this direct integration is simpler than the method we invoke +below, the method below will come in useful for some slightly more +difficult differential equations in the future. The differential +equation for $v_x$ is straight-forward to solve. Because it is first +order there is one arbitrary constant, $A$, and by inspection the +solution is + + +
    + +$$ +\begin{equation} +v_x=Ae^{-\gamma t}. +\label{_auto5} \tag{5} +\end{equation} +$$ + +The arbitrary constants for equations of motion are usually determined +by the initial conditions, or more generally boundary conditions. By +inspection $A=v_{0x}$, the initial $x$ component of the velocity. + + + +## Differential Equations, contn + +The differential equation for $v_y$ is a bit more complicated due to +the presence of $g$. Differential equations where all the terms are +linearly proportional to a function, in this case $v_y$, or to +derivatives of the function, e.g., $v_y$, $dv_y/dt$, +$d^2v_y/dt^2\cdots$, are called linear differential equations. If +there are terms proportional to $v^2$, as would happen if the drag +force were proportional to the square of the velocity, the +differential equation is not longer linear. Because this expression +has only one derivative in $v$ it is a first-order linear differential +equation. If a term were added proportional to $d^2v/dt^2$ it would be +a second-order differential equation. In this case we have a term +completely independent of $v$, the gravitational acceleration $g$, and +the usual strategy is to first rewrite the equation with all the +linear terms on one side of the equal sign, + + +
    + +$$ +\begin{equation} +\frac{dv_y}{dt}+\gamma v_y=-g. +\label{_auto6} \tag{6} +\end{equation} +$$ + +## Splitting into two parts + +Now, the solution to the equation can be broken into two +parts. Because this is a first-order differential equation we know +that there will be one arbitrary constant. Physically, the arbitrary +constant will be determined by setting the initial velocity, though it +could be determined by setting the velocity at any given time. Like +most differential equations, solutions are not "solved". Instead, +one guesses at a form, then shows the guess is correct. For these +types of equations, one first tries to find a single solution, +i.e. one with no arbitrary constants. This is called the {\it +particular} solution, $y_p(t)$, though it should really be called +"a" particular solution because there are an infinite number of such +solutions. One then finds a solution to the {\it homogenous} equation, +which is the equation with zero on the right-hand side, + + +
    + +$$ +\begin{equation} +\frac{dv_{y,h}}{dt}+\gamma v_{y,h}=0. +\label{_auto7} \tag{7} +\end{equation} +$$ + +Homogenous solutions will have arbitrary constants. + +The particular solution will solve the same equation as the original +general equation + + +
    + +$$ +\begin{equation} +\frac{dv_{y,p}}{dt}+\gamma v_{y,p}=-g. +\label{_auto8} \tag{8} +\end{equation} +$$ + +However, we don't need find one with arbitrary constants. Hence, it is +called a **particular** solution. + +The sum of the two, + + +
    + +$$ +\begin{equation} +v_y=v_{y,p}+v_{y,h}, +\label{_auto9} \tag{9} +\end{equation} +$$ + +is a solution of the total equation because of the linear nature of +the differential equation. One has now found a *general* solution +encompassing all solutions, because it both satisfies the general +equation (like the particular solution), and has an arbitrary constant +that can be adjusted to fit any initial condition (like the homogneous +solution). If the equation were not linear, e.g if there were a term +such as $v_y^2$ or $v_y\dot{v}_y$, this technique would not work. + + +## More details + +Returning to the example above, the homogenous solution is the same as +that for $v_x$, because there was no gravitational acceleration in +that case, + + +
    + +$$ +\begin{equation} +v_{y,h}=Be^{-\gamma t}. +\label{_auto10} \tag{10} +\end{equation} +$$ + +In this case a particular solution is one with constant velocity, + + +
    + +$$ +\begin{equation} +v_{y,p}=-g/\gamma. +\label{_auto11} \tag{11} +\end{equation} +$$ + +Note that this is the terminal velocity of a particle falling from a +great height. The general solution is thus, + + +
    + +$$ +\begin{equation} +v_y=Be^{-\gamma t}-g/\gamma, +\label{_auto12} \tag{12} +\end{equation} +$$ + +and one can find $B$ from the initial velocity, + + +
    + +$$ +\begin{equation} +v_{0y}=B-g/\gamma,~~~B=v_{0y}+g/\gamma. +\label{_auto13} \tag{13} +\end{equation} +$$ + +Plugging in the expression for $B$ gives the $y$ motion given the initial velocity, + + +
    + +$$ +\begin{equation} +v_y=(v_{0y}+g/\gamma)e^{-\gamma t}-g/\gamma. +\label{_auto14} \tag{14} +\end{equation} +$$ + +It is easy to see that this solution has $v_y=v_{0y}$ when $t=0$ and +$v_y=-g/\gamma$ when $t\rightarrow\infty$. + +One can also integrate the two equations to find the coordinates $x$ +and $y$ as functions of $t$, + +$$ +\begin{eqnarray} +x&=&\int_0^t dt'~v_{0x}(t')=\frac{v_{0x}}{\gamma}\left(1-e^{-\gamma t}\right),\\ +\nonumber +y&=&\int_0^t dt'~v_{0y}(t')=-\frac{gt}{\gamma}+\frac{v_{0y}+g/\gamma}{\gamma}\left(1-e^{-\gamma t}\right). +\end{eqnarray} +$$ + +If the question was to find the position at a time $t$, we would be +finished. However, the more common goal in a projectile equation +problem is to find the range, i.e. the distance $x$ at which $y$ +returns to zero. For the case without a drag force this was much +simpler. The solution for the $y$ coordinate would have been +$y=v_{0y}t-gt^2/2$. One would solve for $t$ to make $y=0$, which would +be $t=2v_{0y}/g$, then plug that value for $t$ into $x=v_{0x}t$ to +find $x=2v_{0x}v_{0y}/g=v_0\sin(2\theta_0)/g$. One follows the same +steps here, except that the expression for $y(t)$ is more +complicated. Searching for the time where $y=0$, and we get + + +
    + +$$ +\begin{equation} +0=-\frac{gt}{\gamma}+\frac{v_{0y}+g/\gamma}{\gamma}\left(1-e^{-\gamma t}\right). +\label{_auto15} \tag{15} +\end{equation} +$$ + +This cannot be inverted into a simple expression $t=\cdots$. Such +expressions are known as "transcendental equations", and are not the +rare instance, but are the norm. In the days before computers, one +might plot the right-hand side of the above graphically as +a function of time, then find the point where it crosses zero. + +Now, the most common way to solve for an equation of the above type +would be to apply Newton's method numerically. This involves the +following algorithm for finding solutions of some equation $F(t)=0$. + +1. First guess a value for the time, $t_{\rm guess}$. + +2. Calculate $F$ and its derivative, $F(t_{\rm guess})$ and $F'(t_{\rm guess})$. + +3. Unless you guessed perfectly, $F\ne 0$, and assuming that $\Delta F\approx F'\Delta t$, one would choose + +4. $\Delta t=-F(t_{\rm guess})/F'(t_{\rm guess})$. + +5. Now repeat step 1, but with $t_{\rm guess}\rightarrow t_{\rm guess}+\Delta t$. + +If the $F(t)$ were perfectly linear in $t$, one would find $t$ in one +step. Instead, one typically finds a value of $t$ that is closer to +the final answer than $t_{\rm guess}$. One breaks the loop once one +finds $F$ within some acceptable tolerance of zero. A program to do +this will be added shortly. + + +## Motion in a Magnetic Field + + +Another example of a velocity-dependent force is magnetism, + +$$ +\begin{eqnarray} +\boldsymbol{F}&=&q\boldsymbol{v}\times\boldsymbol{B},\\ +\nonumber +F_i&=&q\sum_{jk}\epsilon_{ijk}v_jB_k. +\end{eqnarray} +$$ + +For a uniform field in the $z$ direction $\boldsymbol{B}=B\hat{z}$, the force can only have $x$ and $y$ components, + +$$ +\begin{eqnarray} +F_x&=&qBv_y\\ +\nonumber +F_y&=&-qBv_x. +\end{eqnarray} +$$ + +The differential equations are + +$$ +\begin{eqnarray} +\dot{v}_x&=&\omega_c v_y,\omega_c= qB/m\\ +\nonumber +\dot{v}_y&=&-\omega_c v_x. +\end{eqnarray} +$$ + +One can solve the equations by taking time derivatives of either equation, then substituting into the other equation, + +$$ +\begin{eqnarray} +\ddot{v}_x=\omega_c\dot{v_y}=-\omega_c^2v_x,\\ +\nonumber +\ddot{v}_y&=&-\omega_c\dot{v}_x=-\omega_cv_y. +\end{eqnarray} +$$ + +The solution to these equations can be seen by inspection, + +$$ +\begin{eqnarray} +v_x&=&A\sin(\omega_ct+\phi),\\ +\nonumber +v_y&=&A\cos(\omega_ct+\phi). +\end{eqnarray} +$$ + +One can integrate the equations to find the positions as a function of time, + +$$ +\begin{eqnarray} +x-x_0&=&\int_{x_0}^x dx=\int_0^t dt v(t)\\ +\nonumber +&=&\frac{-A}{\omega_c}\cos(\omega_ct+\phi),\\ +\nonumber +y-y_0&=&\frac{A}{\omega_c}\sin(\omega_ct+\phi). +\end{eqnarray} +$$ + +The trajectory is a circle centered at $x_0,y_0$ with amplitude $A$ rotating in the clockwise direction. + +The equations of motion for the $z$ motion are + + +
    + +$$ +\begin{equation} +\dot{v_z}=0, +\label{_auto16} \tag{16} +\end{equation} +$$ + +which leads to + + +
    + +$$ +\begin{equation} +z-z_0=V_zt. +\label{_auto17} \tag{17} +\end{equation} +$$ + +Added onto the circle, the motion is helical. + +Note that the kinetic energy, + + +
    + +$$ +\begin{equation} +T=\frac{1}{2}m(v_x^2+v_y^2+v_z^2)=\frac{1}{2}m(\omega_c^2A^2+V_z^2), +\label{_auto18} \tag{18} +\end{equation} +$$ + +is constant. This is because the force is perpendicular to the +velocity, so that in any differential time element $dt$ the work done +on the particle $\boldsymbol{F}\cdot{dr}=dt\boldsymbol{F}\cdot{v}=0$. + +One should think about the implications of a velocity dependent +force. Suppose one had a constant magnetic field in deep space. If a +particle came through with velocity $v_0$, it would undergo cyclotron +motion with radius $R=v_0/\omega_c$. However, if it were still its +motion would remain fixed. Now, suppose an observer looked at the +particle in one reference frame where the particle was moving, then +changed their velocity so that the particle's velocity appeared to be +zero. The motion would change from circular to fixed. Is this +possible? + +The solution to the puzzle above relies on understanding +relativity. Imagine that the first observer believes $\boldsymbol{B}\ne 0$ and +that the electric field $\boldsymbol{E}=0$. If the observer then changes +reference frames by accelerating to a velocity $\boldsymbol{v}$, in the new +frame $\boldsymbol{B}$ and $\boldsymbol{E}$ both change. If the observer moved to the +frame where the charge, originally moving with a small velocity $v$, +is now at rest, the new electric field is indeed $\boldsymbol{v}\times\boldsymbol{B}$, +which then leads to the same acceleration as one had before. If the +velocity is not small compared to the speed of light, additional +$\gamma$ factors come into play, +$\gamma=1/\sqrt{1-(v/c)^2}$. Relativistic motion will not be +considered in this course. + + + + +## Sliding Block tied to a Wall + +Another classical case is that of simple harmonic oscillations, here represented by a block sliding on a horizontal frictionless surface. The block is tied to a wall with a spring. If the spring is not compressed or stretched too far, the force on the block at a given position $x$ is + +$$ +F=-kx. +$$ + +The negative sign means that the force acts to restore the object to an equilibrium position. Newton's equation of motion for this idealized system is then + +$$ +m\frac{d^2x}{dt^2}=-kx, +$$ + +or we could rephrase it as + + +
    + +$$ +\frac{d^2x}{dt^2}=-\frac{k}{m}x=-\omega_0^2x, +\label{eq:newton1} \tag{19} +$$ + +with the angular frequency $\omega_0^2=k/m$. + +The above differential equation has the advantage that it can be solved analytically with solutions on the form + +$$ +x(t)=Acos(\omega_0t+\nu), +$$ + +where $A$ is the amplitude and $\nu$ the phase constant. This provides in turn an important test for the numerical +solution and the development of a program for more complicated cases which cannot be solved analytically. + + +With the position $x(t)$ and the velocity $v(t)=dx/dt$ we can reformulate Newton's equation in the following way + +$$ +\frac{dx(t)}{dt}=v(t), +$$ + +and + +$$ +\frac{dv(t)}{dt}=-\omega_0^2x(t). +$$ + +We are now going to solve these equations using first the standard forward Euler method. Later we will try to improve upon this. + + +Before proceeding however, it is important to note that in addition to the exact solution, we have at least two further tests which can be used to check our solution. + +Since functions like $cos$ are periodic with a period $2\pi$, then the solution $x(t)$ has also to be periodic. This means that + +$$ +x(t+T)=x(t), +$$ + +with $T$ the period defined as + +$$ +T=\frac{2\pi}{\omega_0}=\frac{2\pi}{\sqrt{k/m}}. +$$ + +Observe that $T$ depends only on $k/m$ and not on the amplitude of the solution. + + +In addition to the periodicity test, the total energy has also to be conserved. + +Suppose we choose the initial conditions + +$$ +x(t=0)=1\hspace{0.1cm} \mathrm{m}\hspace{1cm} v(t=0)=0\hspace{0.1cm}\mathrm{m/s}, +$$ + +meaning that block is at rest at $t=0$ but with a potential energy + +$$ +E_0=\frac{1}{2}kx(t=0)^2=\frac{1}{2}k. +$$ + +The total energy at any time $t$ has however to be conserved, meaning that our solution has to fulfil the condition + +$$ +E_0=\frac{1}{2}kx(t)^2+\frac{1}{2}mv(t)^2. +$$ + +We will derive this equation in our discussion on [energy conservation](https://mhjensen.github.io/Physics321/doc/pub/energyconserv/html/energyconserv.html). + + +An algorithm which implements these equations is included below. + * Choose the initial position and speed, with the most common choice $v(t=0)=0$ and some fixed value for the position. + + * Choose the method you wish to employ in solving the problem. + + * Subdivide the time interval $[t_i,t_f] $ into a grid with step size + +$$ +h=\frac{t_f-t_i}{N}, +$$ + +where $N$ is the number of mesh points. + * Calculate now the total energy given by + +$$ +E_0=\frac{1}{2}kx(t=0)^2=\frac{1}{2}k. +$$ + +* Choose ODE solver to obtain $x_{i+1}$ and $v_{i+1}$ starting from the previous values $x_i$ and $v_i$. + + * When we have computed $x(v)_{i+1}$ we upgrade $t_{i+1}=t_i+h$. + + * This iterative process continues till we reach the maximum time $t_f$. + + * The results are checked against the exact solution. Furthermore, one has to check the stability of the numerical solution against the chosen number of mesh points $N$. + +The following python program ( code will be added shortly) + +# +# This program solves Newtons equation for a block sliding on +# an horizontal frictionless surface. +# The block is tied to the wall with a spring, so N's eq takes the form: +# +# m d^2x/dt^2 = - kx +# +# In order to make the solution dimless, we set k/m = 1. +# This results in two coupled diff. eq's that may be written as: +# +# dx/dt = v +# dv/dt = -x +# +# The user has to specify the initial velocity and position, +# and the number of steps. The time interval is fixed to +# t \in [0, 4\pi) (two periods) +# + +## The classical pendulum and scaling the equations + +The angular equation of motion of the pendulum is given by +Newton's equation and with no external force it reads + + +
    + +$$ +\begin{equation} + ml\frac{d^2\theta}{dt^2}+mgsin(\theta)=0, +\label{_auto19} \tag{20} +\end{equation} +$$ + +with an angular velocity and acceleration given by + + +
    + +$$ +\begin{equation} + v=l\frac{d\theta}{dt}, +\label{_auto20} \tag{21} +\end{equation} +$$ + +and + + +
    + +$$ +\begin{equation} + a=l\frac{d^2\theta}{dt^2}. +\label{_auto21} \tag{22} +\end{equation} +$$ + +## More on the Pendulum + +We do however expect that the motion will gradually come to an end due a viscous drag torque acting on the pendulum. +In the presence of the drag, the above equation becomes + + +
    + +$$ +\begin{equation} + ml\frac{d^2\theta}{dt^2}+\nu\frac{d\theta}{dt} +mgsin(\theta)=0, \label{eq:pend1} \tag{23} +\end{equation} +$$ + +where $\nu$ is now a positive constant parameterizing the viscosity +of the medium in question. In order to maintain the motion against +viscosity, it is necessary to add some external driving force. +We choose here a periodic driving force. The last equation becomes then + + +
    + +$$ +\begin{equation} + ml\frac{d^2\theta}{dt^2}+\nu\frac{d\theta}{dt} +mgsin(\theta)=Asin(\omega t), \label{eq:pend2} \tag{24} +\end{equation} +$$ + +with $A$ and $\omega$ two constants representing the amplitude and +the angular frequency respectively. The latter is called the driving frequency. + + + + +## More on the Pendulum + +We define + +$$ +\omega_0=\sqrt{g/l}, +$$ + +the so-called natural frequency and the new dimensionless quantities + +$$ +\hat{t}=\omega_0t, +$$ + +with the dimensionless driving frequency + +$$ +\hat{\omega}=\frac{\omega}{\omega_0}, +$$ + +and introducing the quantity $Q$, called the *quality factor*, + +$$ +Q=\frac{mg}{\omega_0\nu}, +$$ + +and the dimensionless amplitude + +$$ +\hat{A}=\frac{A}{mg} +$$ + +We have + +$$ +\frac{d^2\theta}{d\hat{t}^2}+\frac{1}{Q}\frac{d\theta}{d\hat{t}} + +sin(\theta)=\hat{A}cos(\hat{\omega}\hat{t}). +$$ + +This equation can in turn be recast in terms of two coupled first-order differential equations as follows + +$$ +\frac{d\theta}{d\hat{t}}=\hat{v}, +$$ + +and + +$$ +\frac{d\hat{v}}{d\hat{t}}=-\frac{\hat{v}}{Q}-sin(\theta)+\hat{A}cos(\hat{\omega}\hat{t}). +$$ + +These are the equations to be solved. The factor $Q$ represents the number of oscillations of the undriven system that must occur before its energy is significantly reduced due to the viscous drag. The amplitude $\hat{A}$ is measured in units of the maximum possible gravitational torque while $\hat{\omega}$ is the angular frequency of the external torque measured in units of the pendulum's natural frequency. \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter4.ipynb b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter4.ipynb new file mode 100644 index 000000000..8959efd23 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter4.ipynb @@ -0,0 +1,2478 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Work, Energy, Momentum and Conservation laws\n", + "\n", + "Energy conservation is most convenient as a strategy for addressing\n", + "problems where time does not appear. For example, a particle goes\n", + "from position $x_0$ with speed $v_0$, to position $x_f$; what is its\n", + "new speed? However, it can also be applied to problems where time\n", + "does appear, such as in solving for the trajectory $x(t)$, or\n", + "equivalently $t(x)$.\n", + "\n", + "\n", + "\n", + "## Work and Energy\n", + "\n", + "Material to be added here.\n", + "\n", + "\n", + "\n", + "## Energy Conservation\n", + "Energy is conserved in the case where the potential energy, $V(\\boldsymbol{r})$, depends only on position, and not on time. The force is determined by $V$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\boldsymbol{F}(\\boldsymbol{r})=-\\nabla V(\\boldsymbol{r}).\n", + "\\label{_auto1} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The net energy, $E=V+K$ where $K$ is the kinetic energy, is then conserved," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{d}{dt}(K+V)&=&\\frac{d}{dt}\\left(\\frac{m}{2}(v_x^2+v_y^2+v_z^2)+V(\\boldsymbol{r})\\right)\\\\\n", + "\\nonumber\n", + "&=&m\\left(v_x\\frac{dv_x}{dt}+v_y\\frac{dv_y}{dt}+v_z\\frac{dv_z}{dt}\\right)\n", + "+\\partial_xV\\frac{dx}{dt}+\\partial_yV\\frac{dy}{dt}+\\partial_zV\\frac{dz}{dt}\\\\\n", + "\\nonumber\n", + "&=&v_xF_x+v_yF_y+v_zF_z-F_xv_x-F_yv_y-F_zv_z=0.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The same proof can be written more compactly with vector notation," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{d}{dt}\\left(\\frac{m}{2}v^2+V(\\boldsymbol{r})\\right)\n", + "&=&m\\boldsymbol{v}\\cdot\\dot{\\boldsymbol{v}}+\\nabla V(\\boldsymbol{r})\\cdot\\dot{\\boldsymbol{r}}\\\\\n", + "\\nonumber\n", + "&=&\\boldsymbol{v}\\cdot\\boldsymbol{F}-\\boldsymbol{F}\\cdot\\boldsymbol{v}=0.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inverting the expression for kinetic energy," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v=\\sqrt{2K/m}=\\sqrt{2(E-V)/m},\n", + "\\label{_auto2} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "allows one to solve for the one-dimensional trajectory $x(t)$, by finding $t(x)$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "t=\\int_{x_0}^x \\frac{dx'}{v(x')}=\\int_{x_0}^x\\frac{dx'}{\\sqrt{2(E-V(x'))/m}}.\n", + "\\label{_auto3} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note this would be much more difficult in higher dimensions, because\n", + "you would have to determine which points, $x,y,z$, the particles might\n", + "reach in the trajectory, whereas in one dimension you can typically\n", + "tell by simply seeing whether the kinetic energy is positive at every\n", + "point between the old position and the new position.\n", + "\n", + "\n", + "Consider a simple harmonic oscillator potential, $V(x)=kx^2/2$, with a particle emitted from $x=0$ with velocity $v_0$. Solve for the trajectory $t(x)$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "t&=&\\int_{0}^x \\frac{dx'}{\\sqrt{2(E-kx^2/2)/m}}\\\\\n", + "\\nonumber\n", + "&=&\\sqrt{m/k}\\int_0^x~\\frac{dx'}{\\sqrt{x_{\\rm max}^2-x^{\\prime 2}}},~~~x_{\\rm max}^2=2E/k.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here $E=mv_0^2/2$ and $x_{\\rm max}$ is defined as the maximum\n", + "displacement before the particle turns around. This integral is done\n", + "by the substitution $\\sin\\theta=x/x_{\\rm max}$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "(k/m)^{1/2}t&=&\\sin^{-1}(x/x_{\\rm max}),\\\\\n", + "\\nonumber\n", + "x&=&x_{\\rm max}\\sin\\omega t,~~~\\omega=\\sqrt{k/m}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conservation of Momentum\n", + "\n", + "\n", + "Newton's third law which we met earlier states that **For every action there is an equal and opposite reaction**, is more accurately stated as\n", + "**If two bodies exert forces on each other, these forces are equal in magnitude and opposite in direction**.\n", + "\n", + "This means that for two bodies $i$ and $j$, if the force on $i$ due to $j$ is called $\\boldsymbol{F}_{ij}$, then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\boldsymbol{F}_{ij}=-\\boldsymbol{F}_{ji}. \n", + "\\label{_auto4} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Newton's second law, $\\boldsymbol{F}=m\\boldsymbol{a}$, can be written for a particle $i$ as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\boldsymbol{F}_i=\\sum_{j\\ne i} \\boldsymbol{F}_{ij}=m_i\\boldsymbol{a}_i,\n", + "\\label{_auto5} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\boldsymbol{F}_i$ (a single subscript) denotes the net force acting on $i$. Because the mass of $i$ is fixed, one can see that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\boldsymbol{F}_i=\\frac{d}{dt}m_i\\boldsymbol{v}_i=\\sum_{j\\ne i}\\boldsymbol{F}_{ij}.\n", + "\\label{_auto6} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, one can sum over all the particles and obtain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{d}{dt}\\sum_i m_iv_i&=&\\sum_{ij, i\\ne j}\\boldsymbol{F}_{ij}\\\\\n", + "\\nonumber\n", + "&=&0.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The last step made use of the fact that for every term $ij$, there is\n", + "an equivalent term $ji$ with opposite force. Because the momentum is\n", + "defined as $m\\boldsymbol{v}$, for a system of particles," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d}{dt}\\sum_im_i\\boldsymbol{v}_i=0,~~{\\rm for~isolated~particles}.\n", + "\\label{_auto7} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By \"isolated\" one means that the only force acting on any particle $i$\n", + "are those originating from other particles in the sum, i.e. \"no\n", + "external\" forces. Thus, Newton's third law leads to the conservation\n", + "of total momentum," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\boldsymbol{P}&=&\\sum_i m_i\\boldsymbol{v}_i,\\\\\n", + "\\nonumber\n", + "\\frac{d}{dt}\\boldsymbol{P}&=&0.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Consider the rocket of mass $M$ moving with velocity $v$. After a\n", + "brief instant, the velocity of the rocket is $v+\\Delta v$ and the mass\n", + "is $M-\\Delta M$. Momentum conservation gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "Mv&=&(M-\\Delta M)(v+\\Delta v)+\\Delta M(v-v_e)\\\\\n", + "0&=&-\\Delta Mv+M\\Delta v+\\Delta M(v-v_e),\\\\\n", + "0&=&M\\Delta v-\\Delta Mv_e.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the second step we ignored the term $\\Delta M\\Delta v$ because it is doubly small. The last equation gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\Delta v&=&\\frac{v_e}{M}\\Delta M,\\\\\n", + "\\nonumber\n", + "\\frac{dv}{dt}&=&\\frac{v_e}{M}\\frac{dM}{dt}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Integrating the expression with lower limits $v_0=0$ and $M_0$, one finds" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "v&=&v_e\\int_{M_0}^M \\frac{dM'}{M'}\\\\\n", + "v&=&-v_e\\ln(M/M_0)\\\\\n", + "&=&-v_e\\ln[(M_0-\\alpha t)/M_0].\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because the total momentum of an isolated system is constant, one can\n", + "also quickly see that the center of mass of an isolated system is also\n", + "constant. The center of mass is the average position of a set of\n", + "masses weighted by the mass," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\bar{x}=\\frac{\\sum_im_ix_i}{\\sum_i m_i}.\n", + "\\label{_auto8} \\tag{8}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The rate of change of $\\bar{x}$ is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\dot{\\bar{x}}&=&\\frac{1}{M}\\sum_i m_i\\dot{x}_i=\\frac{1}{M}P_x.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thus if the total momentum is constant the center of mass moves at a\n", + "constant velocity, and if the total momentum is zero the center of\n", + "mass is fixed.\n", + "\n", + "\n", + "\n", + "## Conservation of Angular Momentum\n", + "\n", + "\n", + "Consider a case where the force always points radially," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\boldsymbol{F}(\\boldsymbol{r})=F(r)\\hat{r},\n", + "\\label{_auto9} \\tag{9}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\hat{r}$ is a unit vector pointing outward from the origin. The angular momentum is defined as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\boldsymbol{L}=\\boldsymbol{r}\\times\\boldsymbol{p}=m\\boldsymbol{r}\\times\\boldsymbol{v}.\n", + "\\label{_auto10} \\tag{10}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The rate of change of the angular momentum is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{d\\boldsymbol{L}}{dt}&=&m\\boldsymbol{v}\\times\\boldsymbol{v}+m\\boldsymbol{r}\\times\\dot{\\boldsymbol{v}}\\\\\n", + "\\nonumber\n", + "&=&m\\boldsymbol{v}\\times\\boldsymbol{v}+\\boldsymbol{r}\\times{\\boldsymbol{F}}=0.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first term is zero because $\\boldsymbol{v}$ is parallel to itself, and the\n", + "second term is zero because $\\boldsymbol{F}$ is parallel to $\\boldsymbol{r}$.\n", + "\n", + "As an aside, one can see from the Levi-Civita symbol that the cross\n", + "product of a vector with itself is zero. Here, we consider a vector" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\boldsymbol{V}&=&\\boldsymbol{A}\\times\\boldsymbol{A},\\\\\n", + "\\nonumber\n", + "V_i&=&(\\boldsymbol{A}\\times\\boldsymbol{A})_i=\\sum_{jk}\\epsilon_{ijk}A_jA_k.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For any term $i$, there are two contributions. For example, for $i$\n", + "denoting the $x$ direction, either $j$ denotes the $y$ direction and\n", + "$k$ denotes the $z$ direction, or vice versa, so" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "V_1=\\epsilon_{123}A_2A_3+\\epsilon_{132}A_3A_2.\n", + "\\label{_auto11} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is zero by the antisymmetry of $\\epsilon$ under permutations.\n", + "\n", + "If the force is not radial, $\\boldsymbol{r}\\times\\boldsymbol{F}\\ne 0$ as above, and angular momentum is no longer conserved," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d\\boldsymbol{L}}{dt}=\\boldsymbol{r}\\times\\boldsymbol{F}\\equiv\\boldsymbol{\\tau},\n", + "\\label{_auto12} \\tag{12}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\boldsymbol{\\tau}$ is the torque.\n", + "\n", + "For a system of isolated particles, one can write" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{d}{dt}\\sum_i\\boldsymbol{L}_i&=&\\sum_{i\\ne j}\\boldsymbol{r}_i\\times \\boldsymbol{F}_{ij}\\\\\n", + "\\nonumber\n", + "&=&\\frac{1}{2}\\sum_{i\\ne j} \\boldsymbol{r}_i\\times \\boldsymbol{F}_{ij}+\\boldsymbol{r}_j\\times\\boldsymbol{F}_{ji}\\\\\n", + "\\nonumber\n", + "&=&\\frac{1}{2}\\sum_{i\\ne j} (\\boldsymbol{r}_i-\\boldsymbol{r}_j)\\times\\boldsymbol{F}_{ij}=0,\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the last step used Newton's third law,\n", + "$\\boldsymbol{F}_{ij}=-\\boldsymbol{F}_{ji}$. If the forces between the particles are\n", + "radial, i.e. $\\boldsymbol{F}_{ij} ~||~ (\\boldsymbol{r}_i-\\boldsymbol{r}_j)$, then each term in\n", + "the sum is zero and the net angular momentum is fixed. Otherwise, you\n", + "could imagine an isolated system that would start spinning\n", + "spontaneously.\n", + "\n", + "One can write the torque about a given axis, which we will denote as $\\hat{z}$, in polar coordinates, where" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x&=&r\\sin\\theta\\cos\\phi,~~y=r\\sin\\theta\\cos\\phi,~~z=r\\cos\\theta,\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "to find the $z$ component of the torque," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\tau_z&=&xF_y-yF_x\\\\\n", + "\\nonumber\n", + "&=&-r\\sin\\theta\\left\\{\\cos\\phi \\partial_y-\\sin\\phi \\partial_x\\right\\}V(x,y,z).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One can use the chain rule to write the partial derivative w.r.t. $\\phi$ (keeping $r$ and $\\theta$ fixed)," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\partial_\\phi&=&\\frac{\\partial x}{\\partial\\phi}\\partial_x+\\frac{\\partial_y}{\\partial\\phi}\\partial_y\n", + "+\\frac{\\partial z}{\\partial\\phi}\\partial_z\\\\\n", + "\\nonumber\n", + "&=&-r\\sin\\theta\\sin\\phi\\partial_x+\\sin\\theta\\cos\\phi\\partial_y.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Combining the two equations," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\tau_z&=&-\\partial_\\phi V(r,\\theta,\\phi).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thus, if the potential is independent of the azimuthal angle $\\phi$,\n", + "there is no torque about the $z$ axis and $L_z$ is conserved.\n", + "\n", + "\n", + "\n", + "## Symmetries and Conservation Laws\n", + "\n", + "When we derived the conservation of energy, we assumed that the\n", + "potential depended only on position, not on time. If it depended\n", + "explicitly on time, one can quickly see that the energy would have\n", + "changed at a rate $\\partial_tV(x,y,z,t)$. Note that if there is no\n", + "explicit dependence on time, i.e. $V(x,y,z)$, the potential energy can\n", + "depend on time through the variations of $x,y,z$ with time. However,\n", + "that variation does not lead to energy non-conservation. Further, we\n", + "just saw that if a potential does not depend on the azimuthal angle\n", + "about some axis, $\\phi$, that the angular momentum about that axis is\n", + "conserved.\n", + "\n", + "Now, we relate momentum conservation to translational\n", + "invariance. Considering a system of particles with positions,\n", + "$\\boldsymbol{r}_i$, if one changed the coordinate system by a translation by a\n", + "differential distance $\\boldsymbol{\\epsilon}$, the net potential would change\n", + "by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\delta V(\\boldsymbol{r}_1,\\boldsymbol{r}_2\\cdots)&=&\\sum_i \\boldsymbol{\\epsilon}\\cdot\\nabla_i V(\\boldsymbol{r}_1,\\boldsymbol{r}_2,\\cdots)\\\\\n", + "\\nonumber\n", + "&=&-\\sum_i \\boldsymbol{\\epsilon}\\cdot\\boldsymbol{F}_i\\\\\n", + "\\nonumber\n", + "&=&-\\frac{d}{dt}\\sum_i \\boldsymbol{\\epsilon}\\cdot\\boldsymbol{p}_i.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thus, if the potential is unchanged by a translation of the coordinate\n", + "system, the total momentum is conserved. If the potential is\n", + "translationally invariant in a given direction, defined by a unit\n", + "vector, $\\hat{\\epsilon}$ in the $\\boldsymbol{\\epsilon}$ direction, one can see\n", + "that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\hat{\\epsilon}\\cdot\\nabla_i V(\\boldsymbol{r}_i)&=&0.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The component of the total momentum along that axis is conserved. This\n", + "is rather obvious for a single particle. If $V(\\boldsymbol{r})$ does not\n", + "depend on some coordinate $x$, then the force in the $x$ direction is\n", + "$F_x=-\\partial_xV=0$, and momentum along the $x$ direction is\n", + "constant.\n", + "\n", + "We showed how the total momentum of an isolated system of particle was conserved, even if the particles feel internal forces in all directions. In that case the potential energy could be written" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "V=\\sum_{i,j\\le i}V_{ij}(\\boldsymbol{r}_i-\\boldsymbol{r}_j).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case, a translation leads to $\\boldsymbol{r}_i\\rightarrow\n", + "\\boldsymbol{r}_i+\\boldsymbol{\\epsilon}$, with the translation equally affecting the\n", + "coordinates of each particle. Because the potential depends only on\n", + "the relative coordinates, $\\delta V$ is manifestly zero. If one were\n", + "to go through the exercise of calculating $\\delta V$ for small\n", + "$\\boldsymbol{\\epsilon}$, one would find that the term\n", + "$\\nabla_i V(\\boldsymbol{r}_i-\\boldsymbol{r}_j)$ would be canceled by the term\n", + "$\\nabla_jV(\\boldsymbol{r}_i-\\boldsymbol{r}_j)$.\n", + "\n", + "The relation between symmetries of the potential and conserved\n", + "quantities (also called constants of motion) is one of the most\n", + "profound concepts one should gain from this course. It plays a\n", + "critical role in all fields of physics. This is especially true in\n", + "quantum mechanics, where a quantity $A$ is conserved if its operator\n", + "commutes with the Hamiltonian. For example if the momentum operator\n", + "$-i\\hbar\\partial_x$ commutes with the Hamiltonian, momentum is\n", + "conserved, and clearly this operator commutes if the Hamiltonian\n", + "(which represents the total energy, not just the potential) does not\n", + "depend on $x$. Also in quantum mechanics the angular momentum operator\n", + "is $L_z=-i\\hbar\\partial_\\phi$. In fact, if the potential is unchanged\n", + "by rotations about some axis, angular momentum about that axis is\n", + "conserved. We return to this concept, from a more formal perspective,\n", + "later in the course when Lagrangian mechanics is presented.\n", + "\n", + "\n", + "## Bulding a code for the Earth-Sun system\n", + "\n", + "We will now venture into a study of a system which is energy\n", + "conserving. The aim is to see if we (since it is not possible to solve\n", + "the general equations analytically) we can develop stable numerical\n", + "algorithms whose results we can trust!\n", + "\n", + "We solve the equations of motion numerically. We will also compute\n", + "quantities like the energy numerically.\n", + "\n", + "We start with a simpler case first, the Earth-Sun system in two dimensions only. The gravitational force $F_G$ on the earth from the sun is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_G=-\\frac{GM_{\\odot}M_E}{r^3}\\boldsymbol{r},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $G$ is the gravitational constant," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "M_E=6\\times 10^{24}\\mathrm{Kg},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "the mass of Earth," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "M_{\\odot}=2\\times 10^{30}\\mathrm{Kg},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "the mass of the Sun and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "r=1.5\\times 10^{11}\\mathrm{m},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "is the distance between Earth and the Sun. The latter defines what we call an astronomical unit **AU**.\n", + "From Newton's second law we have then for the $x$ direction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{dt^2}=-\\frac{F_{x}}{M_E},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2y}{dt^2}=-\\frac{F_{y}}{M_E},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for the $y$ direction.\n", + "\n", + "Here we will use that $x=r\\cos{(\\theta)}$, $y=r\\sin{(\\theta)}$ and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "r = \\sqrt{x^2+y^2}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can rewrite" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F_{x}=-\\frac{GM_{\\odot}M_E}{r^2}\\cos{(\\theta)}=-\\frac{GM_{\\odot}M_E}{r^3}x,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F_{y}=-\\frac{GM_{\\odot}M_E}{r^2}\\sin{(\\theta)}=-\\frac{GM_{\\odot}M_E}{r^3}y,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for the $y$ direction.\n", + "\n", + "\n", + "We can rewrite these two equations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F_{x}=-\\frac{GM_{\\odot}M_E}{r^2}\\cos{(\\theta)}=-\\frac{GM_{\\odot}M_E}{r^3}x,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F_{y}=-\\frac{GM_{\\odot}M_E}{r^2}\\sin{(\\theta)}=-\\frac{GM_{\\odot}M_E}{r^3}y,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "as four first-order coupled differential equations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4\n", + "3\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4\n", + "4\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4\n", + "5\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{dy}{dt}=v_y.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Building a code for the solar system, final coupled equations\n", + "\n", + "The four coupled differential equations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4\n", + "7\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4\n", + "8\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4\n", + "9\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{dy}{dt}=v_y,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "can be turned into dimensionless equations or we can introduce astronomical units with $1$ AU = $1.5\\times 10^{11}$. \n", + "\n", + "Using the equations from circular motion (with $r =1\\mathrm{AU}$)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{M_E v^2}{r} = F = \\frac{GM_{\\odot}M_E}{r^2},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "GM_{\\odot}=v^2r,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and using that the velocity of Earth (assuming circular motion) is\n", + "$v = 2\\pi r/\\mathrm{yr}=2\\pi\\mathrm{AU}/\\mathrm{yr}$, we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "GM_{\\odot}= v^2r = 4\\pi^2 \\frac{(\\mathrm{AU})^3}{\\mathrm{yr}^2}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Building a code for the solar system, discretized equations\n", + "\n", + "The four coupled differential equations can then be discretized using Euler's method as (with step length $h$)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5\n", + "4\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5\n", + "5\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5\n", + "6\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_{i+1}=y_i+hv_{y,i},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Code Example with Euler's Method\n", + "\n", + "The code here implements Euler's method for the Earth-Sun system using a more compact way of representing the vectors. Alternatively, you could have spelled out all the variables $v_x$, $v_y$, $x$ and $y$ as one-dimensional arrays." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter4_108_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "\n", + "# Common imports\n", + "import numpy as np\n", + "import pandas as pd\n", + "from math import *\n", + "import matplotlib.pyplot as plt\n", + "import os\n", + "\n", + "# Where to save the figures and data files\n", + "PROJECT_ROOT_DIR = \"Results\"\n", + "FIGURE_ID = \"Results/FigureFiles\"\n", + "DATA_ID = \"DataFiles/\"\n", + "\n", + "if not os.path.exists(PROJECT_ROOT_DIR):\n", + " os.mkdir(PROJECT_ROOT_DIR)\n", + "\n", + "if not os.path.exists(FIGURE_ID):\n", + " os.makedirs(FIGURE_ID)\n", + "\n", + "if not os.path.exists(DATA_ID):\n", + " os.makedirs(DATA_ID)\n", + "\n", + "def image_path(fig_id):\n", + " return os.path.join(FIGURE_ID, fig_id)\n", + "\n", + "def data_path(dat_id):\n", + " return os.path.join(DATA_ID, dat_id)\n", + "\n", + "def save_fig(fig_id):\n", + " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", + "\n", + "\n", + "DeltaT = 0.001\n", + "#set up arrays \n", + "tfinal = 10 # in years\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, a, v, and x\n", + "t = np.zeros(n)\n", + "v = np.zeros((n,2))\n", + "r = np.zeros((n,2))\n", + "# Initial conditions as compact 2-dimensional arrays\n", + "r0 = np.array([1.0,0.0])\n", + "v0 = np.array([0.0,2*pi])\n", + "r[0] = r0\n", + "v[0] = v0\n", + "Fourpi2 = 4*pi*pi\n", + "# Start integrating using Euler's method\n", + "for i in range(n-1):\n", + " # Set up the acceleration\n", + " # Here you could have defined your own function for this\n", + " rabs = sqrt(sum(r[i]*r[i]))\n", + " a = -Fourpi2*r[i]/(rabs**3)\n", + " # update velocity, time and position using Euler's forward method\n", + " v[i+1] = v[i] + DeltaT*a\n", + " r[i+1] = r[i] + DeltaT*v[i]\n", + " t[i+1] = t[i] + DeltaT\n", + "# Plot position as function of time \n", + "fig, ax = plt.subplots()\n", + "#ax.set_xlim(0, tfinal)\n", + "ax.set_ylabel('x[m]')\n", + "ax.set_xlabel('y[m]')\n", + "ax.plot(r[:,0], r[:,1])\n", + "fig.tight_layout()\n", + "save_fig(\"EarthSunEuler\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Problems with Euler's Method\n", + "\n", + "We notice here that Euler's method doesn't give a stable orbit. It\n", + "means that we cannot trust Euler's method. In a deeper way, as we will\n", + "see in homework 5, Euler's method does not conserve energy. It is an\n", + "example of an integrator which is not\n", + "[symplectic](https://en.wikipedia.org/wiki/Symplectic_integrator).\n", + "\n", + "Here we present thus two methods, which with simple changes allow us to avoid these pitfalls. The simplest possible extension is the so-called Euler-Cromer method.\n", + "The changes we need to make to our code are indeed marginal here.\n", + "We need simply to replace" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + " r[i+1] = r[i] + DeltaT*v[i]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in the above code with the velocity at the new time $t_{i+1}$" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + " r[i+1] = r[i] + DeltaT*v[i+1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By this simple caveat we get stable orbits.\n", + "Below we derive the Euler-Cromer method as well as one of the most utlized algorithms for sovling the above type of problems, the so-called Velocity-Verlet method. \n", + "\n", + "\n", + "## Deriving the Euler-Cromer Method\n", + "\n", + "Let us repeat Euler's method.\n", + "We have a differential equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "y'(t_i)=f(t_i,y_i) \n", + "\\label{_auto13} \\tag{13}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and if we truncate at the first derivative, we have from the Taylor expansion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "y_{i+1}=y(t_i) + (\\Delta t) f(t_i,y_i) + O(\\Delta t^2), \\label{eq:euler} \\tag{14}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which when complemented with $t_{i+1}=t_i+\\Delta t$ forms\n", + "the algorithm for the well-known Euler method. \n", + "Note that at every step we make an approximation error\n", + "of the order of $O(\\Delta t^2)$, however the total error is the sum over all\n", + "steps $N=(b-a)/(\\Delta t)$ for $t\\in [a,b]$, yielding thus a global error which goes like\n", + "$NO(\\Delta t^2)\\approx O(\\Delta t)$. \n", + "\n", + "To make Euler's method more precise we can obviously\n", + "decrease $\\Delta t$ (increase $N$), but this can lead to loss of numerical precision.\n", + "Euler's method is not recommended for precision calculation,\n", + "although it is handy to use in order to get a first\n", + "view on how a solution may look like.\n", + "\n", + "Euler's method is asymmetric in time, since it uses information about the derivative at the beginning\n", + "of the time interval. This means that we evaluate the position at $y_1$ using the velocity\n", + "at $v_0$. A simple variation is to determine $x_{n+1}$ using the velocity at\n", + "$v_{n+1}$, that is (in a slightly more generalized form)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \n", + "y_{n+1}=y_{n}+ v_{n+1}+O(\\Delta t^2)\n", + "\\label{_auto14} \\tag{15}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v_{n+1}=v_{n}+(\\Delta t) a_{n}+O(\\Delta t^2).\n", + "\\label{_auto15} \\tag{16}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The acceleration $a_n$ is a function of $a_n(y_n, v_n, t_n)$ and needs to be evaluated\n", + "as well. This is the Euler-Cromer method.\n", + "\n", + "**Exercise**: go back to the above code with Euler's method and add the Euler-Cromer method. \n", + "\n", + "\n", + "\n", + "## Deriving the Velocity-Verlet Method\n", + "\n", + "Let us stay with $x$ (position) and $v$ (velocity) as the quantities we are interested in.\n", + "\n", + "We have the Taylor expansion for the position given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x_{i+1} = x_i+(\\Delta t)v_i+\\frac{(\\Delta t)^2}{2}a_i+O((\\Delta t)^3).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The corresponding expansion for the velocity is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v_{i+1} = v_i+(\\Delta t)a_i+\\frac{(\\Delta t)^2}{2}v^{(2)}_i+O((\\Delta t)^3).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Via Newton's second law we have normally an analytical expression for the derivative of the velocity, namely" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "a_i= \\frac{d^2 x}{dt^2}\\vert_{i}=\\frac{d v}{dt}\\vert_{i}= \\frac{F(x_i,v_i,t_i)}{m}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we add to this the corresponding expansion for the derivative of the velocity" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v^{(1)}_{i+1} = a_{i+1}= a_i+(\\Delta t)v^{(2)}_i+O((\\Delta t)^2)=a_i+(\\Delta t)v^{(2)}_i+O((\\Delta t)^2),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and retain only terms up to the second derivative of the velocity since our error goes as $O(h^3)$, we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "(\\Delta t)v^{(2)}_i\\approx a_{i+1}-a_i.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then rewrite the Taylor expansion for the velocity as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v_{i+1} = v_i+\\frac{(\\Delta t)}{2}\\left( a_{i+1}+a_{i}\\right)+O((\\Delta t)^3).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The velocity Verlet method\n", + "\n", + "Our final equations for the position and the velocity become then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x_{i+1} = x_i+(\\Delta t)v_i+\\frac{(\\Delta t)^2}{2}a_{i}+O((\\Delta t)^3),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "v_{i+1} = v_i+\\frac{(\\Delta t)}{2}\\left(a_{i+1}+a_{i}\\right)+O((\\Delta t)^3).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note well that the term $a_{i+1}$ depends on the position at $x_{i+1}$. This means that you need to calculate \n", + "the position at the updated time $t_{i+1}$ before the computing the next velocity. Note also that the derivative of the velocity at the time\n", + "$t_i$ used in the updating of the position can be reused in the calculation of the velocity update as well. \n", + "\n", + "\n", + "\n", + "## Adding the Velocity-Verlet Method\n", + "\n", + "We can now easily add the Verlet method to our original code as" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter4_138_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "DeltaT = 0.01\n", + "#set up arrays \n", + "tfinal = 10\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, a, v, and x\n", + "t = np.zeros(n)\n", + "v = np.zeros((n,2))\n", + "r = np.zeros((n,2))\n", + "# Initial conditions as compact 2-dimensional arrays\n", + "r0 = np.array([1.0,0.0])\n", + "v0 = np.array([0.0,2*pi])\n", + "r[0] = r0\n", + "v[0] = v0\n", + "Fourpi2 = 4*pi*pi\n", + "# Start integrating using the Velocity-Verlet method\n", + "for i in range(n-1):\n", + " # Set up forces, air resistance FD, note now that we need the norm of the vecto\n", + " # Here you could have defined your own function for this\n", + " rabs = sqrt(sum(r[i]*r[i]))\n", + " a = -Fourpi2*r[i]/(rabs**3)\n", + " # update velocity, time and position using the Velocity-Verlet method\n", + " r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a\n", + " rabs = sqrt(sum(r[i+1]*r[i+1]))\n", + " anew = -4*(pi**2)*r[i+1]/(rabs**3)\n", + " v[i+1] = v[i] + 0.5*DeltaT*(a+anew)\n", + " t[i+1] = t[i] + DeltaT\n", + "# Plot position as function of time \n", + "fig, ax = plt.subplots()\n", + "ax.set_ylabel('x[m]')\n", + "ax.set_xlabel('y[m]')\n", + "ax.plot(r[:,0], r[:,1])\n", + "fig.tight_layout()\n", + "save_fig(\"EarthSunVV\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can easily generalize the calculation of the forces by defining a function\n", + "which takes in as input the various variables. We leave this as a challenge to you.\n", + "\n", + "\n", + "## Studying Energy Conservation\n", + "\n", + "In order to study the conservation of energy, we will need to perform\n", + "a numerical integration, unless we can integrate analytically. Here we\n", + "present the Trapezoidal rule as a the simplest possible approximation.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Numerical Integration\n", + "\n", + "It is also useful to consider methods to integrate numerically.\n", + "Let us consider the following case.\n", + "We have classical electron which moves in the $x$-direction along a surface. The force from the surface is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}(x)=-F_0\\sin{(\\frac{2\\pi x}{b})}\\boldsymbol{e}_x.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The constant $b$ represents the distance between atoms at the surface of the material, $F_0$ is a constant and $x$ is the position of the electron.\n", + " Using the work-energy theorem we can find the work $W$ done when moving an electron from a position $x_0$ to a final position $x$ through the\n", + " integral" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "W=-\\int_{x_0}^x \\boldsymbol{F}(x')dx' = \\int_{x_0}^x F_0\\sin{(\\frac{2\\pi x'}{b})} dx',\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which results in" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "W=\\frac{F_0b}{2\\pi}\\left[\\cos{(\\frac{2\\pi x}{b})}-\\cos{(\\frac{2\\pi x_0}{b})}\\right].\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Numerical Integration\n", + "\n", + "There are several numerical algorithms for finding an integral\n", + "numerically. The more familiar ones like the rectangular rule or the\n", + "trapezoidal rule have simple geometric interpretations.\n", + "\n", + "Let us look at the mathematical details of what are called equal-step methods, also known as Newton-Cotes quadrature.\n", + "\n", + "\n", + "## Newton-Cotes Quadrature or equal-step methods\n", + "The integral" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " I=\\int_a^bf(x) dx\n", + "\\label{eq:integraldef} \\tag{17}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "has a very simple meaning. The integral is the\n", + "area enscribed by the function $f(x)$ starting from $x=a$ to $x=b$. It is subdivided in several smaller areas whose evaluation is to be approximated by different techniques. The areas under the curve can for example be approximated by rectangular boxes or trapezoids.\n", + "\n", + "\n", + "\n", + "\n", + "## Basic philosophy of equal-step methods\n", + "In considering equal step methods, our basic approach is that of approximating\n", + "a function $f(x)$ with a polynomial of at most \n", + "degree $N-1$, given $N$ integration points. If our polynomial is of degree $1$,\n", + "the function will be approximated with $f(x)\\approx a_0+a_1x$.\n", + "\n", + "\n", + "\n", + "\n", + "## Simple algorithm for equal step methods\n", + "The algorithm for these integration methods is rather simple, and the number of approximations perhaps unlimited!\n", + "\n", + "* Choose a step size $h=(b-a)/N$ where $N$ is the number of steps and $a$ and $b$ the lower and upper limits of integration.\n", + "\n", + "* With a given step length we rewrite the integral as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^bf(x) dx= \\int_a^{a+h}f(x)dx + \\int_{a+h}^{a+2h}f(x)dx+\\dots \\int_{b-h}^{b}f(x)dx.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* The strategy then is to find a reliable polynomial approximation for $f(x)$ in the various intervals. Choosing a given approximation for $f(x)$, we obtain a specific approximation to the integral.\n", + "\n", + "* With this approximation to $f(x)$ we perform the integration by computing the integrals over all subintervals.\n", + "\n", + "## Simple algorithm for equal step methods\n", + "\n", + "One possible strategy then is to find a reliable polynomial expansion for $f(x)$ in the smaller\n", + "subintervals. Consider for example evaluating" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^{a+2h}f(x)dx,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which we rewrite as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\int_a^{a+2h}f(x)dx=\\int_{x_0-h}^{x_0+h}f(x)dx.\n", + "\\label{eq:hhint} \\tag{18}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have chosen a midpoint $x_0$ and have defined $x_0=a+h$.\n", + "\n", + "\n", + "\n", + "\n", + "## The rectangle method\n", + "\n", + "A very simple approach is the so-called midpoint or rectangle method.\n", + "In this case the integration area is split in a given number of rectangles with length $h$ and height given by the mid-point value of the function. This gives the following simple rule for approximating an integral" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "I=\\int_a^bf(x) dx \\approx h\\sum_{i=1}^N f(x_{i-1/2}), \n", + "\\label{eq:rectangle} \\tag{19}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $f(x_{i-1/2})$ is the midpoint value of $f$ for a given rectangle. We will discuss its truncation \n", + "error below. It is easy to implement this algorithm, as shown below\n", + "\n", + "\n", + "## Truncation error for the rectangular rule\n", + "\n", + "The correct mathematical expression for the local error for the rectangular rule $R_i(h)$ for element $i$ is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_{-h}^hf(x)dx - R_i(h)=-\\frac{h^3}{24}f^{(2)}(\\xi),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the global error reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^bf(x)dx -R_h(f)=-\\frac{b-a}{24}h^2f^{(2)}(\\xi),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $R_h$ is the result obtained with rectangular rule and $\\xi \\in [a,b]$.\n", + "\n", + "\n", + "\n", + "## Codes for the Rectangular rule\n", + "\n", + "We go back to our simple example above and set $F_0=b=1$ and choose $x_0=0$ and $x=1/2$, and have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "W=\\frac{1}{\\pi}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The code here computes the integral using the rectangle rule and $n=100$ integration points we have a relative error of\n", + "$10^{-5}$." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Relative error= 4.112453549290521e-05\n" + ] + } + ], + "source": [ + "from math import sin, pi\n", + "import numpy as np\n", + "from sympy import Symbol, integrate\n", + "# function for the Rectangular rule \n", + "def Rectangular(a,b,f,n):\n", + " h = (b-a)/float(n)\n", + " s = 0\n", + " for i in range(0,n,1):\n", + " x = (i+0.5)*h\n", + " s = s+ f(x)\n", + " return h*s\n", + "# function to integrate\n", + "def function(x):\n", + " return sin(2*pi*x)\n", + "# define integration limits and integration points \n", + "a = 0.0; b = 0.5;\n", + "n = 100\n", + "Exact = 1./pi\n", + "print(\"Relative error= \", abs( (Rectangular(a,b,function,n)-Exact)/Exact))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The trapezoidal rule\n", + "\n", + "The other integral gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_{x_0-h}^{x_0}f(x)dx=\\frac{h}{2}\\left(f(x_0) + f(x_0-h)\\right)+O(h^3),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and adding up we obtain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " \\int_{x_0-h}^{x_0+h}f(x)dx=\\frac{h}{2}\\left(f(x_0+h) + 2f(x_0) + f(x_0-h)\\right)+O(h^3),\n", + "\\label{eq:trapez} \\tag{20}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which is the well-known trapezoidal rule. Concerning the error in the approximation made,\n", + "$O(h^3)=O((b-a)^3/N^3)$, you should note \n", + "that this is the local error. Since we are splitting the integral from\n", + "$a$ to $b$ in $N$ pieces, we will have to perform approximately $N$ \n", + "such operations.\n", + "\n", + "This means that the *global error* goes like $\\approx O(h^2)$. \n", + "The trapezoidal reads then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " I=\\int_a^bf(x) dx=h\\left(f(a)/2 + f(a+h) +f(a+2h)+\n", + " \\dots +f(b-h)+ f_{b}/2\\right),\n", + "\\label{eq:trapez1} \\tag{21}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with a global error which goes like $O(h^2)$. \n", + "\n", + "Hereafter we use the shorthand notations $f_{-h}=f(x_0-h)$, $f_{0}=f(x_0)$\n", + "and $f_{h}=f(x_0+h)$.\n", + "\n", + "\n", + "## Error in the trapezoidal rule\n", + "\n", + "The correct mathematical expression for the local error for the trapezoidal rule is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^bf(x)dx -\\frac{b-a}{2}\\left[f(a)+f(b)\\right]=-\\frac{h^3}{12}f^{(2)}(\\xi),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the global error reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^bf(x)dx -T_h(f)=-\\frac{b-a}{12}h^2f^{(2)}(\\xi),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $T_h$ is the trapezoidal result and $\\xi \\in [a,b]$.\n", + "\n", + "\n", + "\n", + "## Algorithm for the trapezoidal rule\n", + "The trapezoidal rule is easy to implement numerically \n", + "through the following simple algorithm\n", + "\n", + " * Choose the number of mesh points and fix the step length.\n", + "\n", + " * calculate $f(a)$ and $f(b)$ and multiply with $h/2$.\n", + "\n", + " * Perform a loop over $n=1$ to $n-1$ ($f(a)$ and $f(b)$ are known) and sum up the terms $f(a+h) +f(a+2h)+f(a+3h)+\\dots +f(b-h)$. Each step in the loop corresponds to a given value $a+nh$.\n", + "\n", + " * Multiply the final result by $h$ and add $hf(a)/2$ and $hf(b)/2$.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Trapezoidal Rule\n", + "\n", + "We use the same function and integrate now using the trapoezoidal rule." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Relative error= 8.224805627923717e-05\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from sympy import Symbol, integrate\n", + "# function for the trapezoidal rule\n", + "def Trapez(a,b,f,n):\n", + " h = (b-a)/float(n)\n", + " s = 0\n", + " x = a\n", + " for i in range(1,n,1):\n", + " x = x+h\n", + " s = s+ f(x)\n", + " s = 0.5*(f(a)+f(b)) +s\n", + " return h*s\n", + "# function to integrate\n", + "def function(x):\n", + " return sin(2*pi*x)\n", + "# define integration limits and integration points \n", + "a = 0.0; b = 0.5;\n", + "n = 100\n", + "Exact = 1./pi\n", + "print(\"Relative error= \", abs( (Trapez(a,b,function,n)-Exact)/Exact))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simpsons' rule\n", + "\n", + "Instead of using the above first-order polynomials \n", + "approximations for $f$, we attempt at using a second-order polynomials.\n", + "In this case we need three points in order to define a second-order \n", + "polynomial approximation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "f(x) \\approx P_2(x)=a_0+a_1x+a_2x^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using again Lagrange's interpolation formula we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "P_2(x)=\\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}y_2+\n", + " \\frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}y_1+\n", + " \\frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}y_0.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inserting this formula in the integral of Eq. ([18](#eq:hhint)) we obtain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_{-h}^{+h}f(x)dx=\\frac{h}{3}\\left(f_h + 4f_0 + f_{-h}\\right)+O(h^5),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which is Simpson's rule. \n", + "\n", + "\n", + "\n", + "## Simpson's rule\n", + "Note that the improved accuracy in the evaluation of\n", + "the derivatives gives a better error approximation, $O(h^5)$ vs.\\ $O(h^3)$ .\n", + "But this is again the *local error approximation*. \n", + "Using Simpson's rule we can easily compute\n", + "the integral of Eq. ([17](#eq:integraldef)) to be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " I=\\int_a^bf(x) dx=\\frac{h}{3}\\left(f(a) + 4f(a+h) +2f(a+2h)+\n", + " \\dots +4f(b-h)+ f_{b}\\right),\n", + "\\label{eq:simpson} \\tag{22}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with a global error which goes like $O(h^4)$. \n", + "\n", + "\n", + "\n", + "## Mathematical expressions for the truncation error\n", + "More formal expressions for the local and global errors are for the local error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^bf(x)dx -\\frac{b-a}{6}\\left[f(a)+4f((a+b)/2)+f(b)\\right]=-\\frac{h^5}{90}f^{(4)}(\\xi),\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and for the global error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\int_a^bf(x)dx -S_h(f)=-\\frac{b-a}{180}h^4f^{(4)}(\\xi).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $\\xi\\in[a,b]$ and $S_h$ the results obtained with Simpson's method.\n", + "\n", + "\n", + "\n", + "## Algorithm for Simpson's rule\n", + "The method \n", + "can easily be implemented numerically through the following simple algorithm\n", + "\n", + " * Choose the number of mesh points and fix the step.\n", + "\n", + " * calculate $f(a)$ and $f(b)$\n", + "\n", + " * Perform a loop over $n=1$ to $n-1$ ($f(a)$ and $f(b)$ are known) and sum up the terms $4f(a+h) +2f(a+2h)+4f(a+3h)+\\dots +4f(b-h)$. Each step in the loop corresponds to a given value $a+nh$. Odd values of $n$ give $4$ as factor while even values yield $2$ as factor.\n", + "\n", + " * Multiply the final result by $\\frac{h}{3}$.\n", + "\n", + "## Code example" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Relative error= 5.412252157986472e-09\n" + ] + } + ], + "source": [ + "from math import sin, pi\n", + "import numpy as np\n", + "from sympy import Symbol, integrate\n", + "# function for the trapezoidal rule \n", + "def Simpson(a,b,f,n):\n", + " h = (b-a)/float(n)\n", + " sum = f(a)/float(2);\n", + " for i in range(1,n):\n", + " sum = sum + f(a+i*h)*(3+(-1)**(i+1))\n", + " sum = sum + f(b)/float(2)\n", + " return sum*h/3.0\n", + "# function to integrate \n", + "def function(x):\n", + " return sin(2*pi*x)\n", + "# define integration limits and integration points \n", + "a = 0.0; b = 0.5;\n", + "n = 100\n", + "Exact = 1./pi\n", + "print(\"Relative error= \", abs( (Simpson(a,b,function,n)-Exact)/Exact))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that Simpson's rule gives a much better estimation of the relative error with the same amount of points as we had for the Rectangle rule and the Trapezoidal rule." + ] + } + ], + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter4.py b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter4.py new file mode 100644 index 000000000..7acbbd549 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter4.py @@ -0,0 +1,1423 @@ +# Work, Energy, Momentum and Conservation laws + +Energy conservation is most convenient as a strategy for addressing +problems where time does not appear. For example, a particle goes +from position $x_0$ with speed $v_0$, to position $x_f$; what is its +new speed? However, it can also be applied to problems where time +does appear, such as in solving for the trajectory $x(t)$, or +equivalently $t(x)$. + + + +## Work and Energy + +Material to be added here. + + + +## Energy Conservation +Energy is conserved in the case where the potential energy, $V(\boldsymbol{r})$, depends only on position, and not on time. The force is determined by $V$, + + +
    + +$$ +\begin{equation} +\boldsymbol{F}(\boldsymbol{r})=-\nabla V(\boldsymbol{r}). +\label{_auto1} \tag{1} +\end{equation} +$$ + +The net energy, $E=V+K$ where $K$ is the kinetic energy, is then conserved, + +$$ +\begin{eqnarray} +\frac{d}{dt}(K+V)&=&\frac{d}{dt}\left(\frac{m}{2}(v_x^2+v_y^2+v_z^2)+V(\boldsymbol{r})\right)\\ +\nonumber +&=&m\left(v_x\frac{dv_x}{dt}+v_y\frac{dv_y}{dt}+v_z\frac{dv_z}{dt}\right) ++\partial_xV\frac{dx}{dt}+\partial_yV\frac{dy}{dt}+\partial_zV\frac{dz}{dt}\\ +\nonumber +&=&v_xF_x+v_yF_y+v_zF_z-F_xv_x-F_yv_y-F_zv_z=0. +\end{eqnarray} +$$ + +The same proof can be written more compactly with vector notation, + +$$ +\begin{eqnarray} +\frac{d}{dt}\left(\frac{m}{2}v^2+V(\boldsymbol{r})\right) +&=&m\boldsymbol{v}\cdot\dot{\boldsymbol{v}}+\nabla V(\boldsymbol{r})\cdot\dot{\boldsymbol{r}}\\ +\nonumber +&=&\boldsymbol{v}\cdot\boldsymbol{F}-\boldsymbol{F}\cdot\boldsymbol{v}=0. +\end{eqnarray} +$$ + +Inverting the expression for kinetic energy, + + +
    + +$$ +\begin{equation} +v=\sqrt{2K/m}=\sqrt{2(E-V)/m}, +\label{_auto2} \tag{2} +\end{equation} +$$ + +allows one to solve for the one-dimensional trajectory $x(t)$, by finding $t(x)$, + + +
    + +$$ +\begin{equation} +t=\int_{x_0}^x \frac{dx'}{v(x')}=\int_{x_0}^x\frac{dx'}{\sqrt{2(E-V(x'))/m}}. +\label{_auto3} \tag{3} +\end{equation} +$$ + +Note this would be much more difficult in higher dimensions, because +you would have to determine which points, $x,y,z$, the particles might +reach in the trajectory, whereas in one dimension you can typically +tell by simply seeing whether the kinetic energy is positive at every +point between the old position and the new position. + + +Consider a simple harmonic oscillator potential, $V(x)=kx^2/2$, with a particle emitted from $x=0$ with velocity $v_0$. Solve for the trajectory $t(x)$, + +$$ +\begin{eqnarray} +t&=&\int_{0}^x \frac{dx'}{\sqrt{2(E-kx^2/2)/m}}\\ +\nonumber +&=&\sqrt{m/k}\int_0^x~\frac{dx'}{\sqrt{x_{\rm max}^2-x^{\prime 2}}},~~~x_{\rm max}^2=2E/k. +\end{eqnarray} +$$ + +Here $E=mv_0^2/2$ and $x_{\rm max}$ is defined as the maximum +displacement before the particle turns around. This integral is done +by the substitution $\sin\theta=x/x_{\rm max}$. + +$$ +\begin{eqnarray} +(k/m)^{1/2}t&=&\sin^{-1}(x/x_{\rm max}),\\ +\nonumber +x&=&x_{\rm max}\sin\omega t,~~~\omega=\sqrt{k/m}. +\end{eqnarray} +$$ + +## Conservation of Momentum + + +Newton's third law which we met earlier states that **For every action there is an equal and opposite reaction**, is more accurately stated as +**If two bodies exert forces on each other, these forces are equal in magnitude and opposite in direction**. + +This means that for two bodies $i$ and $j$, if the force on $i$ due to $j$ is called $\boldsymbol{F}_{ij}$, then + + +
    + +$$ +\begin{equation} +\boldsymbol{F}_{ij}=-\boldsymbol{F}_{ji}. +\label{_auto4} \tag{4} +\end{equation} +$$ + +Newton's second law, $\boldsymbol{F}=m\boldsymbol{a}$, can be written for a particle $i$ as + + +
    + +$$ +\begin{equation} +\boldsymbol{F}_i=\sum_{j\ne i} \boldsymbol{F}_{ij}=m_i\boldsymbol{a}_i, +\label{_auto5} \tag{5} +\end{equation} +$$ + +where $\boldsymbol{F}_i$ (a single subscript) denotes the net force acting on $i$. Because the mass of $i$ is fixed, one can see that + + +
    + +$$ +\begin{equation} +\boldsymbol{F}_i=\frac{d}{dt}m_i\boldsymbol{v}_i=\sum_{j\ne i}\boldsymbol{F}_{ij}. +\label{_auto6} \tag{6} +\end{equation} +$$ + +Now, one can sum over all the particles and obtain + +$$ +\begin{eqnarray} +\frac{d}{dt}\sum_i m_iv_i&=&\sum_{ij, i\ne j}\boldsymbol{F}_{ij}\\ +\nonumber +&=&0. +\end{eqnarray} +$$ + +The last step made use of the fact that for every term $ij$, there is +an equivalent term $ji$ with opposite force. Because the momentum is +defined as $m\boldsymbol{v}$, for a system of particles, + + +
    + +$$ +\begin{equation} +\frac{d}{dt}\sum_im_i\boldsymbol{v}_i=0,~~{\rm for~isolated~particles}. +\label{_auto7} \tag{7} +\end{equation} +$$ + +By "isolated" one means that the only force acting on any particle $i$ +are those originating from other particles in the sum, i.e. "no +external" forces. Thus, Newton's third law leads to the conservation +of total momentum, + +$$ +\begin{eqnarray} +\boldsymbol{P}&=&\sum_i m_i\boldsymbol{v}_i,\\ +\nonumber +\frac{d}{dt}\boldsymbol{P}&=&0. +\end{eqnarray} +$$ + +Consider the rocket of mass $M$ moving with velocity $v$. After a +brief instant, the velocity of the rocket is $v+\Delta v$ and the mass +is $M-\Delta M$. Momentum conservation gives + +$$ +\begin{eqnarray*} +Mv&=&(M-\Delta M)(v+\Delta v)+\Delta M(v-v_e)\\ +0&=&-\Delta Mv+M\Delta v+\Delta M(v-v_e),\\ +0&=&M\Delta v-\Delta Mv_e. +\end{eqnarray*} +$$ + +In the second step we ignored the term $\Delta M\Delta v$ because it is doubly small. The last equation gives + +$$ +\begin{eqnarray} +\Delta v&=&\frac{v_e}{M}\Delta M,\\ +\nonumber +\frac{dv}{dt}&=&\frac{v_e}{M}\frac{dM}{dt}. +\end{eqnarray} +$$ + +Integrating the expression with lower limits $v_0=0$ and $M_0$, one finds + +$$ +\begin{eqnarray*} +v&=&v_e\int_{M_0}^M \frac{dM'}{M'}\\ +v&=&-v_e\ln(M/M_0)\\ +&=&-v_e\ln[(M_0-\alpha t)/M_0]. +\end{eqnarray*} +$$ + +Because the total momentum of an isolated system is constant, one can +also quickly see that the center of mass of an isolated system is also +constant. The center of mass is the average position of a set of +masses weighted by the mass, + + +
    + +$$ +\begin{equation} +\bar{x}=\frac{\sum_im_ix_i}{\sum_i m_i}. +\label{_auto8} \tag{8} +\end{equation} +$$ + +The rate of change of $\bar{x}$ is + +$$ +\begin{eqnarray} +\dot{\bar{x}}&=&\frac{1}{M}\sum_i m_i\dot{x}_i=\frac{1}{M}P_x. +\end{eqnarray} +$$ + +Thus if the total momentum is constant the center of mass moves at a +constant velocity, and if the total momentum is zero the center of +mass is fixed. + + + +## Conservation of Angular Momentum + + +Consider a case where the force always points radially, + + +
    + +$$ +\begin{equation} +\boldsymbol{F}(\boldsymbol{r})=F(r)\hat{r}, +\label{_auto9} \tag{9} +\end{equation} +$$ + +where $\hat{r}$ is a unit vector pointing outward from the origin. The angular momentum is defined as + + +
    + +$$ +\begin{equation} +\boldsymbol{L}=\boldsymbol{r}\times\boldsymbol{p}=m\boldsymbol{r}\times\boldsymbol{v}. +\label{_auto10} \tag{10} +\end{equation} +$$ + +The rate of change of the angular momentum is + +$$ +\begin{eqnarray} +\frac{d\boldsymbol{L}}{dt}&=&m\boldsymbol{v}\times\boldsymbol{v}+m\boldsymbol{r}\times\dot{\boldsymbol{v}}\\ +\nonumber +&=&m\boldsymbol{v}\times\boldsymbol{v}+\boldsymbol{r}\times{\boldsymbol{F}}=0. +\end{eqnarray} +$$ + +The first term is zero because $\boldsymbol{v}$ is parallel to itself, and the +second term is zero because $\boldsymbol{F}$ is parallel to $\boldsymbol{r}$. + +As an aside, one can see from the Levi-Civita symbol that the cross +product of a vector with itself is zero. Here, we consider a vector + +$$ +\begin{eqnarray} +\boldsymbol{V}&=&\boldsymbol{A}\times\boldsymbol{A},\\ +\nonumber +V_i&=&(\boldsymbol{A}\times\boldsymbol{A})_i=\sum_{jk}\epsilon_{ijk}A_jA_k. +\end{eqnarray} +$$ + +For any term $i$, there are two contributions. For example, for $i$ +denoting the $x$ direction, either $j$ denotes the $y$ direction and +$k$ denotes the $z$ direction, or vice versa, so + + +
    + +$$ +\begin{equation} +V_1=\epsilon_{123}A_2A_3+\epsilon_{132}A_3A_2. +\label{_auto11} \tag{11} +\end{equation} +$$ + +This is zero by the antisymmetry of $\epsilon$ under permutations. + +If the force is not radial, $\boldsymbol{r}\times\boldsymbol{F}\ne 0$ as above, and angular momentum is no longer conserved, + + +
    + +$$ +\begin{equation} +\frac{d\boldsymbol{L}}{dt}=\boldsymbol{r}\times\boldsymbol{F}\equiv\boldsymbol{\tau}, +\label{_auto12} \tag{12} +\end{equation} +$$ + +where $\boldsymbol{\tau}$ is the torque. + +For a system of isolated particles, one can write + +$$ +\begin{eqnarray} +\frac{d}{dt}\sum_i\boldsymbol{L}_i&=&\sum_{i\ne j}\boldsymbol{r}_i\times \boldsymbol{F}_{ij}\\ +\nonumber +&=&\frac{1}{2}\sum_{i\ne j} \boldsymbol{r}_i\times \boldsymbol{F}_{ij}+\boldsymbol{r}_j\times\boldsymbol{F}_{ji}\\ +\nonumber +&=&\frac{1}{2}\sum_{i\ne j} (\boldsymbol{r}_i-\boldsymbol{r}_j)\times\boldsymbol{F}_{ij}=0, +\end{eqnarray} +$$ + +where the last step used Newton's third law, +$\boldsymbol{F}_{ij}=-\boldsymbol{F}_{ji}$. If the forces between the particles are +radial, i.e. $\boldsymbol{F}_{ij} ~||~ (\boldsymbol{r}_i-\boldsymbol{r}_j)$, then each term in +the sum is zero and the net angular momentum is fixed. Otherwise, you +could imagine an isolated system that would start spinning +spontaneously. + +One can write the torque about a given axis, which we will denote as $\hat{z}$, in polar coordinates, where + +$$ +\begin{eqnarray} +x&=&r\sin\theta\cos\phi,~~y=r\sin\theta\cos\phi,~~z=r\cos\theta, +\end{eqnarray} +$$ + +to find the $z$ component of the torque, + +$$ +\begin{eqnarray} +\tau_z&=&xF_y-yF_x\\ +\nonumber +&=&-r\sin\theta\left\{\cos\phi \partial_y-\sin\phi \partial_x\right\}V(x,y,z). +\end{eqnarray} +$$ + +One can use the chain rule to write the partial derivative w.r.t. $\phi$ (keeping $r$ and $\theta$ fixed), + +$$ +\begin{eqnarray} +\partial_\phi&=&\frac{\partial x}{\partial\phi}\partial_x+\frac{\partial_y}{\partial\phi}\partial_y ++\frac{\partial z}{\partial\phi}\partial_z\\ +\nonumber +&=&-r\sin\theta\sin\phi\partial_x+\sin\theta\cos\phi\partial_y. +\end{eqnarray} +$$ + +Combining the two equations, + +$$ +\begin{eqnarray} +\tau_z&=&-\partial_\phi V(r,\theta,\phi). +\end{eqnarray} +$$ + +Thus, if the potential is independent of the azimuthal angle $\phi$, +there is no torque about the $z$ axis and $L_z$ is conserved. + + + +## Symmetries and Conservation Laws + +When we derived the conservation of energy, we assumed that the +potential depended only on position, not on time. If it depended +explicitly on time, one can quickly see that the energy would have +changed at a rate $\partial_tV(x,y,z,t)$. Note that if there is no +explicit dependence on time, i.e. $V(x,y,z)$, the potential energy can +depend on time through the variations of $x,y,z$ with time. However, +that variation does not lead to energy non-conservation. Further, we +just saw that if a potential does not depend on the azimuthal angle +about some axis, $\phi$, that the angular momentum about that axis is +conserved. + +Now, we relate momentum conservation to translational +invariance. Considering a system of particles with positions, +$\boldsymbol{r}_i$, if one changed the coordinate system by a translation by a +differential distance $\boldsymbol{\epsilon}$, the net potential would change +by + +$$ +\begin{eqnarray} +\delta V(\boldsymbol{r}_1,\boldsymbol{r}_2\cdots)&=&\sum_i \boldsymbol{\epsilon}\cdot\nabla_i V(\boldsymbol{r}_1,\boldsymbol{r}_2,\cdots)\\ +\nonumber +&=&-\sum_i \boldsymbol{\epsilon}\cdot\boldsymbol{F}_i\\ +\nonumber +&=&-\frac{d}{dt}\sum_i \boldsymbol{\epsilon}\cdot\boldsymbol{p}_i. +\end{eqnarray} +$$ + +Thus, if the potential is unchanged by a translation of the coordinate +system, the total momentum is conserved. If the potential is +translationally invariant in a given direction, defined by a unit +vector, $\hat{\epsilon}$ in the $\boldsymbol{\epsilon}$ direction, one can see +that + +$$ +\begin{eqnarray} +\hat{\epsilon}\cdot\nabla_i V(\boldsymbol{r}_i)&=&0. +\end{eqnarray} +$$ + +The component of the total momentum along that axis is conserved. This +is rather obvious for a single particle. If $V(\boldsymbol{r})$ does not +depend on some coordinate $x$, then the force in the $x$ direction is +$F_x=-\partial_xV=0$, and momentum along the $x$ direction is +constant. + +We showed how the total momentum of an isolated system of particle was conserved, even if the particles feel internal forces in all directions. In that case the potential energy could be written + +$$ +\begin{eqnarray} +V=\sum_{i,j\le i}V_{ij}(\boldsymbol{r}_i-\boldsymbol{r}_j). +\end{eqnarray} +$$ + +In this case, a translation leads to $\boldsymbol{r}_i\rightarrow +\boldsymbol{r}_i+\boldsymbol{\epsilon}$, with the translation equally affecting the +coordinates of each particle. Because the potential depends only on +the relative coordinates, $\delta V$ is manifestly zero. If one were +to go through the exercise of calculating $\delta V$ for small +$\boldsymbol{\epsilon}$, one would find that the term +$\nabla_i V(\boldsymbol{r}_i-\boldsymbol{r}_j)$ would be canceled by the term +$\nabla_jV(\boldsymbol{r}_i-\boldsymbol{r}_j)$. + +The relation between symmetries of the potential and conserved +quantities (also called constants of motion) is one of the most +profound concepts one should gain from this course. It plays a +critical role in all fields of physics. This is especially true in +quantum mechanics, where a quantity $A$ is conserved if its operator +commutes with the Hamiltonian. For example if the momentum operator +$-i\hbar\partial_x$ commutes with the Hamiltonian, momentum is +conserved, and clearly this operator commutes if the Hamiltonian +(which represents the total energy, not just the potential) does not +depend on $x$. Also in quantum mechanics the angular momentum operator +is $L_z=-i\hbar\partial_\phi$. In fact, if the potential is unchanged +by rotations about some axis, angular momentum about that axis is +conserved. We return to this concept, from a more formal perspective, +later in the course when Lagrangian mechanics is presented. + + +## Bulding a code for the Earth-Sun system + +We will now venture into a study of a system which is energy +conserving. The aim is to see if we (since it is not possible to solve +the general equations analytically) we can develop stable numerical +algorithms whose results we can trust! + +We solve the equations of motion numerically. We will also compute +quantities like the energy numerically. + +We start with a simpler case first, the Earth-Sun system in two dimensions only. The gravitational force $F_G$ on the earth from the sun is + +$$ +\boldsymbol{F}_G=-\frac{GM_{\odot}M_E}{r^3}\boldsymbol{r}, +$$ + +where $G$ is the gravitational constant, + +$$ +M_E=6\times 10^{24}\mathrm{Kg}, +$$ + +the mass of Earth, + +$$ +M_{\odot}=2\times 10^{30}\mathrm{Kg}, +$$ + +the mass of the Sun and + +$$ +r=1.5\times 10^{11}\mathrm{m}, +$$ + +is the distance between Earth and the Sun. The latter defines what we call an astronomical unit **AU**. +From Newton's second law we have then for the $x$ direction + +$$ +\frac{d^2x}{dt^2}=-\frac{F_{x}}{M_E}, +$$ + +and + +$$ +\frac{d^2y}{dt^2}=-\frac{F_{y}}{M_E}, +$$ + +for the $y$ direction. + +Here we will use that $x=r\cos{(\theta)}$, $y=r\sin{(\theta)}$ and + +$$ +r = \sqrt{x^2+y^2}. +$$ + +We can rewrite + +$$ +F_{x}=-\frac{GM_{\odot}M_E}{r^2}\cos{(\theta)}=-\frac{GM_{\odot}M_E}{r^3}x, +$$ + +and + +$$ +F_{y}=-\frac{GM_{\odot}M_E}{r^2}\sin{(\theta)}=-\frac{GM_{\odot}M_E}{r^3}y, +$$ + +for the $y$ direction. + + +We can rewrite these two equations + +$$ +F_{x}=-\frac{GM_{\odot}M_E}{r^2}\cos{(\theta)}=-\frac{GM_{\odot}M_E}{r^3}x, +$$ + +and + +$$ +F_{y}=-\frac{GM_{\odot}M_E}{r^2}\sin{(\theta)}=-\frac{GM_{\odot}M_E}{r^3}y, +$$ + +as four first-order coupled differential equations + +4 +3 + +< +< +< +! +! +M +A +T +H +_ +B +L +O +C +K + +4 +4 + +< +< +< +! +! +M +A +T +H +_ +B +L +O +C +K + +4 +5 + +< +< +< +! +! +M +A +T +H +_ +B +L +O +C +K + +$$ +\frac{dy}{dt}=v_y. +$$ + +## Building a code for the solar system, final coupled equations + +The four coupled differential equations + +4 +7 + +< +< +< +! +! +M +A +T +H +_ +B +L +O +C +K + +4 +8 + +< +< +< +! +! +M +A +T +H +_ +B +L +O +C +K + +4 +9 + +< +< +< +! +! +M +A +T +H +_ +B +L +O +C +K + +$$ +\frac{dy}{dt}=v_y, +$$ + +can be turned into dimensionless equations or we can introduce astronomical units with $1$ AU = $1.5\times 10^{11}$. + +Using the equations from circular motion (with $r =1\mathrm{AU}$) + +$$ +\frac{M_E v^2}{r} = F = \frac{GM_{\odot}M_E}{r^2}, +$$ + +we have + +$$ +GM_{\odot}=v^2r, +$$ + +and using that the velocity of Earth (assuming circular motion) is +$v = 2\pi r/\mathrm{yr}=2\pi\mathrm{AU}/\mathrm{yr}$, we have + +$$ +GM_{\odot}= v^2r = 4\pi^2 \frac{(\mathrm{AU})^3}{\mathrm{yr}^2}. +$$ + +## Building a code for the solar system, discretized equations + +The four coupled differential equations can then be discretized using Euler's method as (with step length $h$) + +5 +4 + +< +< +< +! +! +M +A +T +H +_ +B +L +O +C +K + +5 +5 + +< +< +< +! +! +M +A +T +H +_ +B +L +O +C +K + +5 +6 + +< +< +< +! +! +M +A +T +H +_ +B +L +O +C +K + +$$ +y_{i+1}=y_i+hv_{y,i}, +$$ + +## Code Example with Euler's Method + +The code here implements Euler's method for the Earth-Sun system using a more compact way of representing the vectors. Alternatively, you could have spelled out all the variables $v_x$, $v_y$, $x$ and $y$ as one-dimensional arrays. + +%matplotlib inline + +# Common imports +import numpy as np +import pandas as pd +from math import * +import matplotlib.pyplot as plt +import os + +# Where to save the figures and data files +PROJECT_ROOT_DIR = "Results" +FIGURE_ID = "Results/FigureFiles" +DATA_ID = "DataFiles/" + +if not os.path.exists(PROJECT_ROOT_DIR): + os.mkdir(PROJECT_ROOT_DIR) + +if not os.path.exists(FIGURE_ID): + os.makedirs(FIGURE_ID) + +if not os.path.exists(DATA_ID): + os.makedirs(DATA_ID) + +def image_path(fig_id): + return os.path.join(FIGURE_ID, fig_id) + +def data_path(dat_id): + return os.path.join(DATA_ID, dat_id) + +def save_fig(fig_id): + plt.savefig(image_path(fig_id) + ".png", format='png') + + +DeltaT = 0.001 +#set up arrays +tfinal = 10 # in years +n = ceil(tfinal/DeltaT) +# set up arrays for t, a, v, and x +t = np.zeros(n) +v = np.zeros((n,2)) +r = np.zeros((n,2)) +# Initial conditions as compact 2-dimensional arrays +r0 = np.array([1.0,0.0]) +v0 = np.array([0.0,2*pi]) +r[0] = r0 +v[0] = v0 +Fourpi2 = 4*pi*pi +# Start integrating using Euler's method +for i in range(n-1): + # Set up the acceleration + # Here you could have defined your own function for this + rabs = sqrt(sum(r[i]*r[i])) + a = -Fourpi2*r[i]/(rabs**3) + # update velocity, time and position using Euler's forward method + v[i+1] = v[i] + DeltaT*a + r[i+1] = r[i] + DeltaT*v[i] + t[i+1] = t[i] + DeltaT +# Plot position as function of time +fig, ax = plt.subplots() +#ax.set_xlim(0, tfinal) +ax.set_ylabel('x[m]') +ax.set_xlabel('y[m]') +ax.plot(r[:,0], r[:,1]) +fig.tight_layout() +save_fig("EarthSunEuler") +plt.show() + +## Problems with Euler's Method + +We notice here that Euler's method doesn't give a stable orbit. It +means that we cannot trust Euler's method. In a deeper way, as we will +see in homework 5, Euler's method does not conserve energy. It is an +example of an integrator which is not +[symplectic](https://en.wikipedia.org/wiki/Symplectic_integrator). + +Here we present thus two methods, which with simple changes allow us to avoid these pitfalls. The simplest possible extension is the so-called Euler-Cromer method. +The changes we need to make to our code are indeed marginal here. +We need simply to replace + + r[i+1] = r[i] + DeltaT*v[i] + +in the above code with the velocity at the new time $t_{i+1}$ + + r[i+1] = r[i] + DeltaT*v[i+1] + +By this simple caveat we get stable orbits. +Below we derive the Euler-Cromer method as well as one of the most utlized algorithms for sovling the above type of problems, the so-called Velocity-Verlet method. + + +## Deriving the Euler-Cromer Method + +Let us repeat Euler's method. +We have a differential equation + + +
    + +$$ +\begin{equation} +y'(t_i)=f(t_i,y_i) +\label{_auto13} \tag{13} +\end{equation} +$$ + +and if we truncate at the first derivative, we have from the Taylor expansion + + +
    + +$$ +\begin{equation} +y_{i+1}=y(t_i) + (\Delta t) f(t_i,y_i) + O(\Delta t^2), \label{eq:euler} \tag{14} +\end{equation} +$$ + +which when complemented with $t_{i+1}=t_i+\Delta t$ forms +the algorithm for the well-known Euler method. +Note that at every step we make an approximation error +of the order of $O(\Delta t^2)$, however the total error is the sum over all +steps $N=(b-a)/(\Delta t)$ for $t\in [a,b]$, yielding thus a global error which goes like +$NO(\Delta t^2)\approx O(\Delta t)$. + +To make Euler's method more precise we can obviously +decrease $\Delta t$ (increase $N$), but this can lead to loss of numerical precision. +Euler's method is not recommended for precision calculation, +although it is handy to use in order to get a first +view on how a solution may look like. + +Euler's method is asymmetric in time, since it uses information about the derivative at the beginning +of the time interval. This means that we evaluate the position at $y_1$ using the velocity +at $v_0$. A simple variation is to determine $x_{n+1}$ using the velocity at +$v_{n+1}$, that is (in a slightly more generalized form) + + +
    + +$$ +\begin{equation} +y_{n+1}=y_{n}+ v_{n+1}+O(\Delta t^2) +\label{_auto14} \tag{15} +\end{equation} +$$ + +and + + +
    + +$$ +\begin{equation} +v_{n+1}=v_{n}+(\Delta t) a_{n}+O(\Delta t^2). +\label{_auto15} \tag{16} +\end{equation} +$$ + +The acceleration $a_n$ is a function of $a_n(y_n, v_n, t_n)$ and needs to be evaluated +as well. This is the Euler-Cromer method. + +**Exercise**: go back to the above code with Euler's method and add the Euler-Cromer method. + + + +## Deriving the Velocity-Verlet Method + +Let us stay with $x$ (position) and $v$ (velocity) as the quantities we are interested in. + +We have the Taylor expansion for the position given by + +$$ +x_{i+1} = x_i+(\Delta t)v_i+\frac{(\Delta t)^2}{2}a_i+O((\Delta t)^3). +$$ + +The corresponding expansion for the velocity is + +$$ +v_{i+1} = v_i+(\Delta t)a_i+\frac{(\Delta t)^2}{2}v^{(2)}_i+O((\Delta t)^3). +$$ + +Via Newton's second law we have normally an analytical expression for the derivative of the velocity, namely + +$$ +a_i= \frac{d^2 x}{dt^2}\vert_{i}=\frac{d v}{dt}\vert_{i}= \frac{F(x_i,v_i,t_i)}{m}. +$$ + +If we add to this the corresponding expansion for the derivative of the velocity + +$$ +v^{(1)}_{i+1} = a_{i+1}= a_i+(\Delta t)v^{(2)}_i+O((\Delta t)^2)=a_i+(\Delta t)v^{(2)}_i+O((\Delta t)^2), +$$ + +and retain only terms up to the second derivative of the velocity since our error goes as $O(h^3)$, we have + +$$ +(\Delta t)v^{(2)}_i\approx a_{i+1}-a_i. +$$ + +We can then rewrite the Taylor expansion for the velocity as + +$$ +v_{i+1} = v_i+\frac{(\Delta t)}{2}\left( a_{i+1}+a_{i}\right)+O((\Delta t)^3). +$$ + +## The velocity Verlet method + +Our final equations for the position and the velocity become then + +$$ +x_{i+1} = x_i+(\Delta t)v_i+\frac{(\Delta t)^2}{2}a_{i}+O((\Delta t)^3), +$$ + +and + +$$ +v_{i+1} = v_i+\frac{(\Delta t)}{2}\left(a_{i+1}+a_{i}\right)+O((\Delta t)^3). +$$ + +Note well that the term $a_{i+1}$ depends on the position at $x_{i+1}$. This means that you need to calculate +the position at the updated time $t_{i+1}$ before the computing the next velocity. Note also that the derivative of the velocity at the time +$t_i$ used in the updating of the position can be reused in the calculation of the velocity update as well. + + + +## Adding the Velocity-Verlet Method + +We can now easily add the Verlet method to our original code as + +DeltaT = 0.01 +#set up arrays +tfinal = 10 +n = ceil(tfinal/DeltaT) +# set up arrays for t, a, v, and x +t = np.zeros(n) +v = np.zeros((n,2)) +r = np.zeros((n,2)) +# Initial conditions as compact 2-dimensional arrays +r0 = np.array([1.0,0.0]) +v0 = np.array([0.0,2*pi]) +r[0] = r0 +v[0] = v0 +Fourpi2 = 4*pi*pi +# Start integrating using the Velocity-Verlet method +for i in range(n-1): + # Set up forces, air resistance FD, note now that we need the norm of the vecto + # Here you could have defined your own function for this + rabs = sqrt(sum(r[i]*r[i])) + a = -Fourpi2*r[i]/(rabs**3) + # update velocity, time and position using the Velocity-Verlet method + r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a + rabs = sqrt(sum(r[i+1]*r[i+1])) + anew = -4*(pi**2)*r[i+1]/(rabs**3) + v[i+1] = v[i] + 0.5*DeltaT*(a+anew) + t[i+1] = t[i] + DeltaT +# Plot position as function of time +fig, ax = plt.subplots() +ax.set_ylabel('x[m]') +ax.set_xlabel('y[m]') +ax.plot(r[:,0], r[:,1]) +fig.tight_layout() +save_fig("EarthSunVV") +plt.show() + +You can easily generalize the calculation of the forces by defining a function +which takes in as input the various variables. We leave this as a challenge to you. + + +## Studying Energy Conservation + +In order to study the conservation of energy, we will need to perform +a numerical integration, unless we can integrate analytically. Here we +present the Trapezoidal rule as a the simplest possible approximation. + + + + + +## Numerical Integration + +It is also useful to consider methods to integrate numerically. +Let us consider the following case. +We have classical electron which moves in the $x$-direction along a surface. The force from the surface is + +$$ +\boldsymbol{F}(x)=-F_0\sin{(\frac{2\pi x}{b})}\boldsymbol{e}_x. +$$ + +The constant $b$ represents the distance between atoms at the surface of the material, $F_0$ is a constant and $x$ is the position of the electron. + Using the work-energy theorem we can find the work $W$ done when moving an electron from a position $x_0$ to a final position $x$ through the + integral + +$$ +W=-\int_{x_0}^x \boldsymbol{F}(x')dx' = \int_{x_0}^x F_0\sin{(\frac{2\pi x'}{b})} dx', +$$ + +which results in + +$$ +W=\frac{F_0b}{2\pi}\left[\cos{(\frac{2\pi x}{b})}-\cos{(\frac{2\pi x_0}{b})}\right]. +$$ + +## Numerical Integration + +There are several numerical algorithms for finding an integral +numerically. The more familiar ones like the rectangular rule or the +trapezoidal rule have simple geometric interpretations. + +Let us look at the mathematical details of what are called equal-step methods, also known as Newton-Cotes quadrature. + + +## Newton-Cotes Quadrature or equal-step methods +The integral + + +
    + +$$ +\begin{equation} + I=\int_a^bf(x) dx +\label{eq:integraldef} \tag{17} +\end{equation} +$$ + +has a very simple meaning. The integral is the +area enscribed by the function $f(x)$ starting from $x=a$ to $x=b$. It is subdivided in several smaller areas whose evaluation is to be approximated by different techniques. The areas under the curve can for example be approximated by rectangular boxes or trapezoids. + + + + +## Basic philosophy of equal-step methods +In considering equal step methods, our basic approach is that of approximating +a function $f(x)$ with a polynomial of at most +degree $N-1$, given $N$ integration points. If our polynomial is of degree $1$, +the function will be approximated with $f(x)\approx a_0+a_1x$. + + + + +## Simple algorithm for equal step methods +The algorithm for these integration methods is rather simple, and the number of approximations perhaps unlimited! + +* Choose a step size $h=(b-a)/N$ where $N$ is the number of steps and $a$ and $b$ the lower and upper limits of integration. + +* With a given step length we rewrite the integral as + +$$ +\int_a^bf(x) dx= \int_a^{a+h}f(x)dx + \int_{a+h}^{a+2h}f(x)dx+\dots \int_{b-h}^{b}f(x)dx. +$$ + +* The strategy then is to find a reliable polynomial approximation for $f(x)$ in the various intervals. Choosing a given approximation for $f(x)$, we obtain a specific approximation to the integral. + +* With this approximation to $f(x)$ we perform the integration by computing the integrals over all subintervals. + +## Simple algorithm for equal step methods + +One possible strategy then is to find a reliable polynomial expansion for $f(x)$ in the smaller +subintervals. Consider for example evaluating + +$$ +\int_a^{a+2h}f(x)dx, +$$ + +which we rewrite as + + +
    + +$$ +\begin{equation} +\int_a^{a+2h}f(x)dx=\int_{x_0-h}^{x_0+h}f(x)dx. +\label{eq:hhint} \tag{18} +\end{equation} +$$ + +We have chosen a midpoint $x_0$ and have defined $x_0=a+h$. + + + + +## The rectangle method + +A very simple approach is the so-called midpoint or rectangle method. +In this case the integration area is split in a given number of rectangles with length $h$ and height given by the mid-point value of the function. This gives the following simple rule for approximating an integral + + +
    + +$$ +\begin{equation} +I=\int_a^bf(x) dx \approx h\sum_{i=1}^N f(x_{i-1/2}), +\label{eq:rectangle} \tag{19} +\end{equation} +$$ + +where $f(x_{i-1/2})$ is the midpoint value of $f$ for a given rectangle. We will discuss its truncation +error below. It is easy to implement this algorithm, as shown below + + +## Truncation error for the rectangular rule + +The correct mathematical expression for the local error for the rectangular rule $R_i(h)$ for element $i$ is + +$$ +\int_{-h}^hf(x)dx - R_i(h)=-\frac{h^3}{24}f^{(2)}(\xi), +$$ + +and the global error reads + +$$ +\int_a^bf(x)dx -R_h(f)=-\frac{b-a}{24}h^2f^{(2)}(\xi), +$$ + +where $R_h$ is the result obtained with rectangular rule and $\xi \in [a,b]$. + + + +## Codes for the Rectangular rule + +We go back to our simple example above and set $F_0=b=1$ and choose $x_0=0$ and $x=1/2$, and have + +$$ +W=\frac{1}{\pi}. +$$ + +The code here computes the integral using the rectangle rule and $n=100$ integration points we have a relative error of +$10^{-5}$. + +from math import sin, pi +import numpy as np +from sympy import Symbol, integrate +# function for the Rectangular rule +def Rectangular(a,b,f,n): + h = (b-a)/float(n) + s = 0 + for i in range(0,n,1): + x = (i+0.5)*h + s = s+ f(x) + return h*s +# function to integrate +def function(x): + return sin(2*pi*x) +# define integration limits and integration points +a = 0.0; b = 0.5; +n = 100 +Exact = 1./pi +print("Relative error= ", abs( (Rectangular(a,b,function,n)-Exact)/Exact)) + +## The trapezoidal rule + +The other integral gives + +$$ +\int_{x_0-h}^{x_0}f(x)dx=\frac{h}{2}\left(f(x_0) + f(x_0-h)\right)+O(h^3), +$$ + +and adding up we obtain + + +
    + +$$ +\begin{equation} + \int_{x_0-h}^{x_0+h}f(x)dx=\frac{h}{2}\left(f(x_0+h) + 2f(x_0) + f(x_0-h)\right)+O(h^3), +\label{eq:trapez} \tag{20} +\end{equation} +$$ + +which is the well-known trapezoidal rule. Concerning the error in the approximation made, +$O(h^3)=O((b-a)^3/N^3)$, you should note +that this is the local error. Since we are splitting the integral from +$a$ to $b$ in $N$ pieces, we will have to perform approximately $N$ +such operations. + +This means that the *global error* goes like $\approx O(h^2)$. +The trapezoidal reads then + + +
    + +$$ +\begin{equation} + I=\int_a^bf(x) dx=h\left(f(a)/2 + f(a+h) +f(a+2h)+ + \dots +f(b-h)+ f_{b}/2\right), +\label{eq:trapez1} \tag{21} +\end{equation} +$$ + +with a global error which goes like $O(h^2)$. + +Hereafter we use the shorthand notations $f_{-h}=f(x_0-h)$, $f_{0}=f(x_0)$ +and $f_{h}=f(x_0+h)$. + + +## Error in the trapezoidal rule + +The correct mathematical expression for the local error for the trapezoidal rule is + +$$ +\int_a^bf(x)dx -\frac{b-a}{2}\left[f(a)+f(b)\right]=-\frac{h^3}{12}f^{(2)}(\xi), +$$ + +and the global error reads + +$$ +\int_a^bf(x)dx -T_h(f)=-\frac{b-a}{12}h^2f^{(2)}(\xi), +$$ + +where $T_h$ is the trapezoidal result and $\xi \in [a,b]$. + + + +## Algorithm for the trapezoidal rule +The trapezoidal rule is easy to implement numerically +through the following simple algorithm + + * Choose the number of mesh points and fix the step length. + + * calculate $f(a)$ and $f(b)$ and multiply with $h/2$. + + * Perform a loop over $n=1$ to $n-1$ ($f(a)$ and $f(b)$ are known) and sum up the terms $f(a+h) +f(a+2h)+f(a+3h)+\dots +f(b-h)$. Each step in the loop corresponds to a given value $a+nh$. + + * Multiply the final result by $h$ and add $hf(a)/2$ and $hf(b)/2$. + + + + + + +## Trapezoidal Rule + +We use the same function and integrate now using the trapoezoidal rule. + +import numpy as np +from sympy import Symbol, integrate +# function for the trapezoidal rule +def Trapez(a,b,f,n): + h = (b-a)/float(n) + s = 0 + x = a + for i in range(1,n,1): + x = x+h + s = s+ f(x) + s = 0.5*(f(a)+f(b)) +s + return h*s +# function to integrate +def function(x): + return sin(2*pi*x) +# define integration limits and integration points +a = 0.0; b = 0.5; +n = 100 +Exact = 1./pi +print("Relative error= ", abs( (Trapez(a,b,function,n)-Exact)/Exact)) + +## Simpsons' rule + +Instead of using the above first-order polynomials +approximations for $f$, we attempt at using a second-order polynomials. +In this case we need three points in order to define a second-order +polynomial approximation + +$$ +f(x) \approx P_2(x)=a_0+a_1x+a_2x^2. +$$ + +Using again Lagrange's interpolation formula we have + +$$ +P_2(x)=\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}y_2+ + \frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}y_1+ + \frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}y_0. +$$ + +Inserting this formula in the integral of Eq. ([18](#eq:hhint)) we obtain + +$$ +\int_{-h}^{+h}f(x)dx=\frac{h}{3}\left(f_h + 4f_0 + f_{-h}\right)+O(h^5), +$$ + +which is Simpson's rule. + + + +## Simpson's rule +Note that the improved accuracy in the evaluation of +the derivatives gives a better error approximation, $O(h^5)$ vs.\ $O(h^3)$ . +But this is again the *local error approximation*. +Using Simpson's rule we can easily compute +the integral of Eq. ([17](#eq:integraldef)) to be + + +
    + +$$ +\begin{equation} + I=\int_a^bf(x) dx=\frac{h}{3}\left(f(a) + 4f(a+h) +2f(a+2h)+ + \dots +4f(b-h)+ f_{b}\right), +\label{eq:simpson} \tag{22} +\end{equation} +$$ + +with a global error which goes like $O(h^4)$. + + + +## Mathematical expressions for the truncation error +More formal expressions for the local and global errors are for the local error + +$$ +\int_a^bf(x)dx -\frac{b-a}{6}\left[f(a)+4f((a+b)/2)+f(b)\right]=-\frac{h^5}{90}f^{(4)}(\xi), +$$ + +and for the global error + +$$ +\int_a^bf(x)dx -S_h(f)=-\frac{b-a}{180}h^4f^{(4)}(\xi). +$$ + +with $\xi\in[a,b]$ and $S_h$ the results obtained with Simpson's method. + + + +## Algorithm for Simpson's rule +The method +can easily be implemented numerically through the following simple algorithm + + * Choose the number of mesh points and fix the step. + + * calculate $f(a)$ and $f(b)$ + + * Perform a loop over $n=1$ to $n-1$ ($f(a)$ and $f(b)$ are known) and sum up the terms $4f(a+h) +2f(a+2h)+4f(a+3h)+\dots +4f(b-h)$. Each step in the loop corresponds to a given value $a+nh$. Odd values of $n$ give $4$ as factor while even values yield $2$ as factor. + + * Multiply the final result by $\frac{h}{3}$. + +## Code example + +from math import sin, pi +import numpy as np +from sympy import Symbol, integrate +# function for the trapezoidal rule +def Simpson(a,b,f,n): + h = (b-a)/float(n) + sum = f(a)/float(2); + for i in range(1,n): + sum = sum + f(a+i*h)*(3+(-1)**(i+1)) + sum = sum + f(b)/float(2) + return sum*h/3.0 +# function to integrate +def function(x): + return sin(2*pi*x) +# define integration limits and integration points +a = 0.0; b = 0.5; +n = 100 +Exact = 1./pi +print("Relative error= ", abs( (Simpson(a,b,function,n)-Exact)/Exact)) + +We see that Simpson's rule gives a much better estimation of the relative error with the same amount of points as we had for the Rectangle rule and the Trapezoidal rule. \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter4_108_0.png b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter4_108_0.png new file mode 100644 index 0000000000000000000000000000000000000000..fa2c7e3287f230f02ef56439785244f6f5243f1f GIT binary patch literal 54410 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

    DP6EKE$M?rhSeK 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 QjsXZfUHx3vIVCg!0KPkjrvLx| literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter4_138_0.png b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter4_138_0.png new file mode 100644 index 0000000000000000000000000000000000000000..42dda929f0113321df1d24984a8aca273f47b053 GIT binary patch literal 11269 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\n", + "

    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "V(x)=V(x_0)+(x-x_0)\\left.\\partial_xV(x)\\right|_{x_0}+\\frac{1}{2}(x-x_0)^2\\left.\\partial_x^2V(x)\\right|_{x_0}\n", + "+\\frac{1}{3!}\\left.\\partial_x^3V(x)\\right|_{x_0}+\\cdots\n", + "\\label{_auto1} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the position $x_0$ is at the minimum of the resonance, the first two non-zero terms of the potential are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "V(x)&\\approx& V(x_0)+\\frac{1}{2}(x-x_0)^2\\left.\\partial_x^2V(x)\\right|_{x_0},\\\\\n", + "\\nonumber\n", + "&=&V(x_0)+\\frac{1}{2}k(x-x_0)^2,~~~~k\\equiv \\left.\\partial_x^2V(x)\\right|_{x_0},\\\\\n", + "\\nonumber\n", + "F&=&-\\partial_xV(x)=-k(x-x_0).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Put into Newton's 2nd law (assuming $x_0=0$)," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "m\\ddot{x}&=&-kx,\\\\\n", + "x&=&A\\cos(\\omega_0 t-\\phi),~~~\\omega_0=\\sqrt{k/m}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here $A$ and $\\phi$ are arbitrary. Equivalently, one could have\n", + "written this as $A\\cos(\\omega_0 t)+B\\sin(\\omega_0 t)$, or as the real\n", + "part of $Ae^{i\\omega_0 t}$. In this last case $A$ could be an\n", + "arbitrary complex constant. Thus, there are 2 arbitrary constants\n", + "(either $A$ and $B$ or $A$ and $\\phi$, or the real and imaginary part\n", + "of one complex constant. This is the expectation for a second order\n", + "differential equation, and also agrees with the physical expectation\n", + "that if you know a particle's initial velocity and position you should\n", + "be able to define its future motion, and that those two arbitrary\n", + "conditions should translate to two arbitrary constants.\n", + "\n", + "A key feature of harmonic motion is that the system repeats itself\n", + "after a time $T=1/f$, where $f$ is the frequency, and $\\omega=2\\pi f$\n", + "is the angular frequency. The period of the motion is independent of\n", + "the amplitude. However, this independence is only exact when one can\n", + "neglect higher terms of the potential, $x^3, x^4\\cdots$. Once can\n", + "neglect these terms for sufficiently small amplitudes, and for larger\n", + "amplitudes the motion is no longer purely sinusoidal, and even though\n", + "the motion repeats itself, the time for repeating the motion is no\n", + "longer independent of the amplitude.\n", + "\n", + "One can also calculate the velocity and the kinetic energy as a function of time," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\dot{x}&=&-\\omega_0A\\sin(\\omega_0 t-\\phi),\\\\\n", + "\\nonumber\n", + "K&=&\\frac{1}{2}m\\dot{x}^2=\\frac{m\\omega_0^2A^2}{2}\\sin^2(\\omega_0t-\\phi),\\\\\n", + "\\nonumber\n", + "&=&\\frac{k}{2}A^2\\sin^2(\\omega_0t-\\phi).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The total energy is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "E=K+V=\\frac{1}{2}m\\dot{x}^2+\\frac{1}{2}kx^2=\\frac{1}{2}kA^2.\n", + "\\label{_auto2} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The total energy then goes as the square of the amplitude.\n", + "\n", + "\n", + "A pendulum is an example of a harmonic oscillator. By expanding the\n", + "kinetic and potential energies for small angles find the frequency for\n", + "a pendulum of length $L$ with all the mass $m$ centered at the end by\n", + "writing the eq.s of motion in the form of a harmonic oscillator.\n", + "\n", + "The potential energy and kinetic energies are (for $x$ being the displacement)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "V&=&mgL(1-\\cos\\theta)\\approx mgL\\frac{x^2}{2L^2},\\\\\n", + "K&=&\\frac{1}{2}mL^2\\dot{\\theta}^2\\approx \\frac{m}{2}\\dot{x}^2.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For small $x$ Newton's 2nd law becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\ddot{x}=-\\frac{mg}{L}x,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the spring constant would appear to be $k=mg/L$, which makes the\n", + "frequency equal to $\\omega_0=\\sqrt{g/L}$. Note that the frequency is\n", + "independent of the mass.\n", + "\n", + "\n", + "## Damped Oscillators\n", + "\n", + "We consider only the case where the damping force is proportional to\n", + "the velocity. This is counter to dragging friction, where the force is\n", + "proportional in strength to the normal force and independent of\n", + "velocity, and is also inconsistent with wind resistance, where the\n", + "magnitude of the drag force is proportional the square of the\n", + "velocity. Rolling resistance does seem to be mainly proportional to\n", + "the velocity. However, the main motivation for considering damping\n", + "forces proportional to the velocity is that the math is more\n", + "friendly. This is because the differential equation is linear,\n", + "i.e. each term is of order $x$, $\\dot{x}$, $\\ddot{x}\\cdots$, or even\n", + "terms with no mention of $x$, and there are no terms such as $x^2$ or\n", + "$x\\ddot{x}$. The equations of motion for a spring with damping force\n", + "$-b\\dot{x}$ are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "m\\ddot{x}+b\\dot{x}+kx=0.\n", + "\\label{_auto3} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just to make the solution a bit less messy, we rewrite this equation as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:dampeddiffyq} \\tag{4}\n", + "\\ddot{x}+2\\beta\\dot{x}+\\omega_0^2x=0,~~~~\\beta\\equiv b/2m,~\\omega_0\\equiv\\sqrt{k/m}.\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Both $\\beta$ and $\\omega$ have dimensions of inverse time. To find solutions (see appendix C in the text) you must make an educated guess at the form of the solution. To do this, first realize that the solution will need an arbitrary normalization $A$ because the equation is linear. Secondly, realize that if the form is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x=Ae^{rt}\n", + "\\label{_auto4} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "that each derivative simply brings out an extra power of $r$. This\n", + "means that the $Ae^{rt}$ factors out and one can simply solve for an\n", + "equation for $r$. Plugging this form into Eq. ([4](#eq:dampeddiffyq))," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "r^2+2\\beta r+\\omega_0^2=0.\n", + "\\label{_auto5} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because this is a quadratic equation there will be two solutions," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "r=-\\beta\\pm\\sqrt{\\beta^2-\\omega_0^2}.\n", + "\\label{_auto6} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We refer to the two solutions as $r_1$ and $r_2$ corresponding to the\n", + "$+$ and $-$ roots. As expected, there should be two arbitrary\n", + "constants involved in the solution," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x=A_1e^{r_1t}+A_2e^{r_2t},\n", + "\\label{_auto7} \\tag{8}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the coefficients $A_1$ and $A_2$ are determined by initial\n", + "conditions.\n", + "\n", + "The roots listed above, $\\sqrt{\\omega_0^2-\\beta_0^2}$, will be\n", + "imaginary if the damping is small and $\\beta<\\omega_0$. In that case,\n", + "$r$ is complex and the factor $e{rt}$ will have some oscillatory\n", + "behavior. If the roots are real, there will only be exponentially\n", + "decaying solutions. There are three cases:\n", + "\n", + "\n", + "\n", + "### Underdamped: $\\beta<\\omega_0$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x&=&A_1e^{-\\beta t}e^{i\\omega't}+A_2e^{-\\beta t}e^{-i\\omega't},~~\\omega'\\equiv\\sqrt{\\omega_0^2-\\beta^2}\\\\\n", + "\\nonumber\n", + "&=&(A_1+A_2)e^{-\\beta t}\\cos\\omega't+i(A_1-A_2)e^{-\\beta t}\\sin\\omega't.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we have made use of the identity\n", + "$e^{i\\omega't}=\\cos\\omega't+i\\sin\\omega't$. Because the constants are\n", + "arbitrary, and because the real and imaginary parts are both solutions\n", + "individually, we can simply consider the real part of the solution\n", + "alone:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:homogsolution} \\tag{9}\n", + "x&=&B_1e^{-\\beta t}\\cos\\omega't+B_2e^{-\\beta t}\\sin\\omega't,\\\\\n", + "\\nonumber \n", + "\\omega'&\\equiv&\\sqrt{\\omega_0^2-\\beta^2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Critical dampling: $\\beta=\\omega_0$\n", + "\n", + "In this case the two terms involving $r_1$ and $r_2$ are identical\n", + "because $\\omega'=0$. Because we need to arbitrary constants, there\n", + "needs to be another solution. This is found by simply guessing, or by\n", + "taking the limit of $\\omega'\\rightarrow 0$ from the underdamped\n", + "solution. The solution is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:criticallydamped} \\tag{10}\n", + "x=Ae^{-\\beta t}+Bte^{-\\beta t}.\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The critically damped solution is interesting because the solution\n", + "approaches zero quickly, but does not oscillate. For a problem with\n", + "zero initial velocity, the solution never crosses zero. This is a good\n", + "choice for designing shock absorbers or swinging doors.\n", + "\n", + "### Overdamped: $\\beta>\\omega_0$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x&=&A_1\\exp{-(\\beta+\\sqrt{\\beta^2-\\omega_0^2})t}+A_2\\exp{-(\\beta-\\sqrt{\\beta^2-\\omega_0^2})t}\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This solution will also never pass the origin more than once, and then\n", + "only if the initial velocity is strong and initially toward zero.\n", + "\n", + "\n", + "\n", + "\n", + "Given $b$, $m$ and $\\omega_0$, find $x(t)$ for a particle whose\n", + "initial position is $x=0$ and has initial velocity $v_0$ (assuming an\n", + "underdamped solution).\n", + "\n", + "The solution is of the form," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "x&=&e^{-\\beta t}\\left[A_1\\cos(\\omega' t)+A_2\\sin\\omega't\\right],\\\\\n", + "\\dot{x}&=&-\\beta x+\\omega'e^{-\\beta t}\\left[-A_1\\sin\\omega't+A_2\\cos\\omega't\\right].\\\\\n", + "\\omega'&\\equiv&\\sqrt{\\omega_0^2-\\beta^2},~~~\\beta\\equiv b/2m.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the initial conditions, $A_1=0$ because $x(0)=0$ and $\\omega'A_2=v_0$. So" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "x=\\frac{v_0}{\\omega'}e^{-\\beta t}\\sin\\omega't.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Our Sliding Block Code\n", + "Here we study first the case without additional friction term and scale our equation\n", + "in terms of a dimensionless time $\\tau$.\n", + "\n", + "Let us remind ourselves about the differential equation we want to solve (the general case with damping due to friction)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\frac{d^2x}{dt^2} + b\\frac{dx}{dt}+kx(t) =0.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We divide by $m$ and introduce $\\omega_0^2=\\sqrt{k/m}$ and obtain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{dt^2} + \\frac{b}{m}\\frac{dx}{dt}+\\omega_0^2x(t) =0.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thereafter we introduce a dimensionless time $\\tau = t\\omega_0$ (check\n", + "that the dimensionality is correct) and rewrite our equation as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{d\\tau^2} + \\frac{b}{m\\omega_0}\\frac{dx}{d\\tau}+x(\\tau) =0,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which gives us" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{d\\tau^2} + \\frac{b}{m\\omega_0}\\frac{dx}{d\\tau}+x(\\tau) =0.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We then define $\\gamma = b/(2m\\omega_0)$ and rewrite our equations as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{d\\tau^2} + 2\\gamma\\frac{dx}{d\\tau}+x(\\tau) =0.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the equation we will code below. The first version employs the Euler-Cromer method." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter5_49_0.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "\n", + "# Common imports\n", + "import numpy as np\n", + "import pandas as pd\n", + "from math import *\n", + "import matplotlib.pyplot as plt\n", + "import os\n", + "\n", + "# Where to save the figures and data files\n", + "PROJECT_ROOT_DIR = \"Results\"\n", + "FIGURE_ID = \"Results/FigureFiles\"\n", + "DATA_ID = \"DataFiles/\"\n", + "\n", + "if not os.path.exists(PROJECT_ROOT_DIR):\n", + " os.mkdir(PROJECT_ROOT_DIR)\n", + "\n", + "if not os.path.exists(FIGURE_ID):\n", + " os.makedirs(FIGURE_ID)\n", + "\n", + "if not os.path.exists(DATA_ID):\n", + " os.makedirs(DATA_ID)\n", + "\n", + "def image_path(fig_id):\n", + " return os.path.join(FIGURE_ID, fig_id)\n", + "\n", + "def data_path(dat_id):\n", + " return os.path.join(DATA_ID, dat_id)\n", + "\n", + "def save_fig(fig_id):\n", + " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", + "\n", + "\n", + "from pylab import plt, mpl\n", + "plt.style.use('seaborn')\n", + "mpl.rcParams['font.family'] = 'serif'\n", + "\n", + "DeltaT = 0.001\n", + "#set up arrays \n", + "tfinal = 20 # in years\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, v, and x\n", + "t = np.zeros(n)\n", + "v = np.zeros(n)\n", + "x = np.zeros(n)\n", + "# Initial conditions as simple one-dimensional arrays of time\n", + "x0 = 1.0 \n", + "v0 = 0.0\n", + "x[0] = x0\n", + "v[0] = v0\n", + "gamma = 0.0\n", + "# Start integrating using Euler-Cromer's method\n", + "for i in range(n-1):\n", + " # Set up the acceleration\n", + " # Here you could have defined your own function for this\n", + " a = -2*gamma*v[i]-x[i]\n", + " # update velocity, time and position\n", + " v[i+1] = v[i] + DeltaT*a\n", + " x[i+1] = x[i] + DeltaT*v[i+1]\n", + " t[i+1] = t[i] + DeltaT\n", + "# Plot position as function of time \n", + "fig, ax = plt.subplots()\n", + "#ax.set_xlim(0, tfinal)\n", + "ax.set_ylabel('x[m]')\n", + "ax.set_xlabel('t[s]')\n", + "ax.plot(t, x)\n", + "fig.tight_layout()\n", + "save_fig(\"BlockEulerCromer\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When setting up the value of $\\gamma$ we see that for $\\gamma=0$ we get the simple oscillatory motion with no damping.\n", + "Choosing $\\gamma < 1$ leads to the classical underdamped case with oscillatory motion, but where the motion comes to an end.\n", + "\n", + "Choosing $\\gamma =1$ leads to what normally is called critical damping and $\\gamma> 1$ leads to critical overdamping.\n", + "Try it out and try also to change the initial position and velocity. Setting $\\gamma=1$\n", + "yields a situation, as discussed above, where the solution approaches quickly zero and does not oscillate. With zero initial velocity it will never cross zero. \n", + "\n", + "\n", + "## Sinusoidally Driven Oscillators\n", + "\n", + "Here, we consider the force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F=-kx-b\\dot{x}+F_0\\cos\\omega t,\n", + "\\label{_auto8} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which leads to the differential equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:drivenosc} \\tag{12}\n", + "\\ddot{x}+2\\beta\\dot{x}+\\omega_0^2x=(F_0/m)\\cos\\omega t.\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Consider a single solution with no arbitrary constants, which we will\n", + "call a {\\it particular solution}, $x_p(t)$. It should be emphasized\n", + "that this is {\\bf A} particular solution, because there exists an\n", + "infinite number of such solutions because the general solution should\n", + "have two arbitrary constants. Now consider solutions to the same\n", + "equation without the driving term, which include two arbitrary\n", + "constants. These are called either {\\it homogenous solutions} or {\\it\n", + "complementary solutions}, and were given in the previous section,\n", + "e.g. Eq. ([9](#eq:homogsolution)) for the underdamped case. The\n", + "homogenous solution already incorporates the two arbitrary constants,\n", + "so any sum of a homogenous solution and a particular solution will\n", + "represent the {\\it general solution} of the equation. The general\n", + "solution incorporates the two arbitrary constants $A$ and $B$ to\n", + "accommodate the two initial conditions. One could have picked a\n", + "different particular solution, i.e. the original particular solution\n", + "plus any homogenous solution with the arbitrary constants $A_p$ and\n", + "$B_p$ chosen at will. When one adds in the homogenous solution, which\n", + "has adjustable constants with arbitrary constants $A'$ and $B'$, to\n", + "the new particular solution, one can get the same general solution by\n", + "simply adjusting the new constants such that $A'+A_p=A$ and\n", + "$B'+B_p=B$. Thus, the choice of $A_p$ and $B_p$ are irrelevant, and\n", + "when choosing the particular solution it is best to make the simplest\n", + "choice possible.\n", + "\n", + "To find a particular solution, one first guesses at the form," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:partform} \\tag{13}\n", + "x_p(t)=D\\cos(\\omega t-\\delta),\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and rewrite the differential equation as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "D\\left\\{-\\omega^2\\cos(\\omega t-\\delta)-2\\beta\\omega\\sin(\\omega t-\\delta)+\\omega_0^2\\cos(\\omega t-\\delta)\\right\\}=\\frac{F_0}{m}\\cos(\\omega t).\n", + "\\label{_auto9} \\tag{14}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One can now use angle addition formulas to get" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "D\\left\\{(-\\omega^2\\cos\\delta+2\\beta\\omega\\sin\\delta+\\omega_0^2\\cos\\delta)\\cos(\\omega t)\\right.&&\\\\\n", + "\\nonumber\n", + "\\left.+(-\\omega^2\\sin\\delta-2\\beta\\omega\\cos\\delta+\\omega_0^2\\sin\\delta)\\sin(\\omega t)\\right\\}\n", + "&=&\\frac{F_0}{m}\\cos(\\omega t).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Both the $\\cos$ and $\\sin$ terms need to equate if the expression is to hold at all times. Thus, this becomes two equations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "D\\left\\{-\\omega^2\\cos\\delta+2\\beta\\omega\\sin\\delta+\\omega_0^2\\cos\\delta\\right\\}&=&\\frac{F_0}{m}\\\\\n", + "\\nonumber\n", + "-\\omega^2\\sin\\delta-2\\beta\\omega\\cos\\delta+\\omega_0^2\\sin\\delta&=&0.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After dividing by $\\cos\\delta$, the lower expression leads to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\tan\\delta=\\frac{2\\beta\\omega}{\\omega_0^2-\\omega^2}.\n", + "\\label{_auto10} \\tag{15}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the identities $\\tan^2+1=\\csc^2$ and $\\sin^2+\\cos^2=1$, one can also express $\\sin\\delta$ and $\\cos\\delta$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\sin\\delta&=&\\frac{2\\beta\\omega}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\omega^2\\beta^2}},\\\\\n", + "\\nonumber\n", + "\\cos\\delta&=&\\frac{(\\omega_0^2-\\omega^2)}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\omega^2\\beta^2}}\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inserting the expressions for $\\cos\\delta$ and $\\sin\\delta$ into the expression for $D$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:Ddrive} \\tag{16}\n", + "D=\\frac{F_0/m}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\omega^2\\beta^2}}.\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a given initial condition, e.g. initial displacement and velocity,\n", + "one must add the homogenous solution then solve for the two arbitrary\n", + "constants. However, because the homogenous solutions decay with time\n", + "as $e^{-\\beta t}$, the particular solution is all that remains at\n", + "large times, and is therefore the steady state solution. Because the\n", + "arbitrary constants are all in the homogenous solution, all memory of\n", + "the initial conditions are lost at large times, $t>>1/\\beta$.\n", + "\n", + "The amplitude of the motion, $D$, is linearly proportional to the\n", + "driving force ($F_0/m$), but also depends on the driving frequency\n", + "$\\omega$. For small $\\beta$ the maximum will occur at\n", + "$\\omega=\\omega_0$. This is referred to as a resonance. In the limit\n", + "$\\beta\\rightarrow 0$ the amplitude at resonance approaches infinity.\n", + "\n", + "\n", + "## Alternative Derivation for Driven Oscillators\n", + "\n", + "Here, we derive the same expressions as in Equations ([13](#eq:partform)) and ([16](#eq:Ddrive)) but express the driving forces as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "F(t)&=&F_0e^{i\\omega t},\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "rather than as $F_0\\cos\\omega t$. The real part of $F$ is the same as before. For the differential equation," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:compdrive} \\tag{17}\n", + "\\ddot{x}+2\\beta\\dot{x}+\\omega_0^2x&=&\\frac{F_0}{m}e^{i\\omega t},\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "one can treat $x(t)$ as an imaginary function. Because the operations\n", + "$d^2/dt^2$ and $d/dt$ are real and thus do not mix the real and\n", + "imaginary parts of $x(t)$, Eq. ([17](#eq:compdrive)) is effectively 2\n", + "equations. Because $e^{\\omega t}=\\cos\\omega t+i\\sin\\omega t$, the real\n", + "part of the solution for $x(t)$ gives the solution for a driving force\n", + "$F_0\\cos\\omega t$, and the imaginary part of $x$ corresponds to the\n", + "case where the driving force is $F_0\\sin\\omega t$. It is rather easy\n", + "to solve for the complex $x$ in this case, and by taking the real part\n", + "of the solution, one finds the answer for the $\\cos\\omega t$ driving\n", + "force.\n", + "\n", + "We assume a simple form for the particular solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x_p=De^{i\\omega t},\n", + "\\label{_auto11} \\tag{18}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $D$ is a complex constant.\n", + "\n", + "From Eq. ([17](#eq:compdrive)) one inserts the form for $x_p$ above to get" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "D\\left\\{-\\omega^2+2i\\beta\\omega+\\omega_0^2\\right\\}e^{i\\omega t}=(F_0/m)e^{i\\omega t},\\\\\n", + "\\nonumber\n", + "D=\\frac{F_0/m}{(\\omega_0^2-\\omega^2)+2i\\beta\\omega}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The norm and phase for $D=|D|e^{-i\\delta}$ can be read by inspection," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "|D|=\\frac{F_0/m}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\beta^2\\omega^2}},~~~~\\tan\\delta=\\frac{2\\beta\\omega}{\\omega_0^2-\\omega^2}.\n", + "\\label{_auto12} \\tag{19}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the same expression for $\\delta$ as before. One then finds $x_p(t)$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:fastdriven1} \\tag{20}\n", + "x_p(t)&=&\\Re\\frac{(F_0/m)e^{i\\omega t-i\\delta}}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\beta^2\\omega^2}}\\\\\n", + "\\nonumber\n", + "&=&\\frac{(F_0/m)\\cos(\\omega t-\\delta)}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\beta^2\\omega^2}}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the same answer as before.\n", + "If one wished to solve for the case where $F(t)= F_0\\sin\\omega t$, the imaginary part of the solution would work" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:fastdriven2} \\tag{21}\n", + "x_p(t)&=&\\Im\\frac{(F_0/m)e^{i\\omega t-i\\delta}}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\beta^2\\omega^2}}\\\\\n", + "\\nonumber\n", + "&=&\\frac{(F_0/m)\\sin(\\omega t-\\delta)}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\beta^2\\omega^2}}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Consider the damped and driven harmonic oscillator worked out above. Given $F_0, m,\\beta$ and $\\omega_0$, solve for the complete solution $x(t)$ for the case where $F=F_0\\sin\\omega t$ with initial conditions $x(t=0)=0$ and $v(t=0)=0$. Assume the underdamped case.\n", + "\n", + "The general solution including the arbitrary constants includes both the homogenous and particular solutions," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "x(t)&=&\\frac{F_0}{m}\\frac{\\sin(\\omega t-\\delta)}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\beta^2\\omega^2}}\n", + "+A\\cos\\omega't e^{-\\beta t}+B\\sin\\omega't e^{-\\beta t}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The quantities $\\delta$ and $\\omega'$ are given earlier in the\n", + "section, $\\omega'=\\sqrt{\\omega_0^2-\\beta^2},\n", + "\\delta=\\tan^{-1}(2\\beta\\omega/(\\omega_0^2-\\omega^2)$. Here, solving\n", + "the problem means finding the arbitrary constants $A$ and\n", + "$B$. Satisfying the initial conditions for the initial position and\n", + "velocity:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "x(t=0)=0&=&-\\eta\\sin\\delta+A,\\\\\n", + "v(t=0)=0&=&\\omega\\eta\\cos\\delta-\\beta A+\\omega'B,\\\\\n", + "\\eta&\\equiv&\\frac{F_0}{m}\\frac{1}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\beta^2\\omega^2}}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The problem is now reduced to 2 equations and 2 unknowns, $A$ and $B$. The solution is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "A&=& \\eta\\sin\\delta ,~~~B=\\frac{-\\omega\\eta\\cos\\delta+\\beta\\eta\\sin\\delta}{\\omega'}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Resonance Widths; the $Q$ factor\n", + "\n", + "From the previous two sections, the particular solution for a driving force, $F=F_0\\cos\\omega t$, is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x_p(t)&=&\\frac{F_0/m}{\\sqrt{(\\omega_0^2-\\omega^2)^2+4\\omega^2\\beta^2}}\\cos(\\omega_t-\\delta),\\\\\n", + "\\nonumber\n", + "\\delta&=&\\tan^{-1}\\left(\\frac{2\\beta\\omega}{\\omega_0^2-\\omega^2}\\right).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If one fixes the driving frequency $\\omega$ and adjusts the\n", + "fundamental frequency $\\omega_0=\\sqrt{k/m}$, the maximum amplitude\n", + "occurs when $\\omega_0=\\omega$ because that is when the term from the\n", + "denominator $(\\omega_0^2-\\omega^2)^2+4\\omega^2\\beta^2$ is at a\n", + "minimum. This is akin to dialing into a radio station. However, if one\n", + "fixes $\\omega_0$ and adjusts the driving frequency one minimize with\n", + "respect to $\\omega$, e.g. set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d}{d\\omega}\\left[(\\omega_0^2-\\omega^2)^2+4\\omega^2\\beta^2\\right]=0,\n", + "\\label{_auto13} \\tag{22}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and one finds that the maximum amplitude occurs when\n", + "$\\omega=\\sqrt{\\omega_0^2-2\\beta^2}$. If $\\beta$ is small relative to\n", + "$\\omega_0$, one can simply state that the maximum amplitude is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x_{\\rm max}\\approx\\frac{F_0}{2m\\beta \\omega_0}.\n", + "\\label{_auto14} \\tag{23}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\frac{4\\omega^2\\beta^2}{(\\omega_0^2-\\omega^2)^2+4\\omega^2\\beta^2}=\\frac{1}{2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For small damping this occurs when $\\omega=\\omega_0\\pm \\beta$, so the $FWHM\\approx 2\\beta$. For the purposes of tuning to a specific frequency, one wants the width to be as small as possible. The ratio of $\\omega_0$ to $FWHM$ is known as the {\\it quality} factor, or $Q$ factor," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "Q\\equiv \\frac{\\omega_0}{2\\beta}.\n", + "\\label{_auto15} \\tag{24}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Numerical Studies of Driven Oscillations\n", + "\n", + "Solving the problem of driven oscillations numerically gives us much\n", + "more flexibility to study different types of driving forces. We can\n", + "reuse our earlier code by simply adding a driving force. If we stay in\n", + "the $x$-direction only this can be easily done by adding a term\n", + "$F_{\\mathrm{ext}}(x,t)$. Note that we have kept it rather general\n", + "here, allowing for both a spatial and a temporal dependence.\n", + "\n", + "Before we dive into the code, we need to briefly remind ourselves\n", + "about the equations we started with for the case with damping, namely" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\frac{d^2x}{dt^2} + b\\frac{dx}{dt}+kx(t) =0,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with no external force applied to the system.\n", + "\n", + "Let us now for simplicty assume that our external force is given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "F_{\\mathrm{ext}}(t) = F_0\\cos{(\\omega t)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $F_0$ is a constant (what is its dimension?) and $\\omega$ is the frequency of the applied external driving force.\n", + "**Small question:** would you expect energy to be conserved now?\n", + "\n", + "\n", + "Introducing the external force into our lovely differential equation\n", + "and dividing by $m$ and introducing $\\omega_0^2=\\sqrt{k/m}$ we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{dt^2} + \\frac{b}{m}\\frac{dx}{dt}+\\omega_0^2x(t) =\\frac{F_0}{m}\\cos{(\\omega t)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thereafter we introduce a dimensionless time $\\tau = t\\omega_0$\n", + "and a dimensionless frequency $\\tilde{\\omega}=\\omega/\\omega_0$. We have then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{d\\tau^2} + \\frac{b}{m\\omega_0}\\frac{dx}{d\\tau}+x(\\tau) =\\frac{F_0}{m\\omega_0^2}\\cos{(\\tilde{\\omega}\\tau)},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Introducing a new amplitude $\\tilde{F} =F_0/(m\\omega_0^2)$ (check dimensionality again) we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{d\\tau^2} + \\frac{b}{m\\omega_0}\\frac{dx}{d\\tau}+x(\\tau) =\\tilde{F}\\cos{(\\tilde{\\omega}\\tau)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our final step, as we did in the case of various types of damping, is\n", + "to define $\\gamma = b/(2m\\omega_0)$ and rewrite our equations as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2x}{d\\tau^2} + 2\\gamma\\frac{dx}{d\\tau}+x(\\tau) =\\tilde{F}\\cos{(\\tilde{\\omega}\\tau)}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the equation we will code below using the Euler-Cromer method." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter5_110_0.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "DeltaT = 0.001\n", + "#set up arrays \n", + "tfinal = 20 # in years\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, v, and x\n", + "t = np.zeros(n)\n", + "v = np.zeros(n)\n", + "x = np.zeros(n)\n", + "# Initial conditions as one-dimensional arrays of time\n", + "x0 = 1.0 \n", + "v0 = 0.0\n", + "x[0] = x0\n", + "v[0] = v0\n", + "gamma = 0.2\n", + "Omegatilde = 0.5\n", + "Ftilde = 1.0\n", + "# Start integrating using Euler-Cromer's method\n", + "for i in range(n-1):\n", + " # Set up the acceleration\n", + " # Here you could have defined your own function for this\n", + " a = -2*gamma*v[i]-x[i]+Ftilde*cos(t[i]*Omegatilde)\n", + " # update velocity, time and position\n", + " v[i+1] = v[i] + DeltaT*a\n", + " x[i+1] = x[i] + DeltaT*v[i+1]\n", + " t[i+1] = t[i] + DeltaT\n", + "# Plot position as function of time \n", + "fig, ax = plt.subplots()\n", + "ax.set_ylabel('x[m]')\n", + "ax.set_xlabel('t[s]')\n", + "ax.plot(t, x)\n", + "fig.tight_layout()\n", + "save_fig(\"ForcedBlockEulerCromer\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the above example we have focused on the Euler-Cromer method. This\n", + "method has a local truncation error which is proportional to $\\Delta t^2$\n", + "and thereby a global error which is proportional to $\\Delta t$.\n", + "We can improve this by using the Runge-Kutta family of\n", + "methods. The widely popular Runge-Kutta to fourth order or just **RK4**\n", + "has indeed a much better truncation error. The RK4 method has a global\n", + "error which is proportional to $\\Delta t$.\n", + "\n", + "Let us revisit this method and see how we can implement it for the above example.\n", + "\n", + "\n", + "\n", + "## Differential Equations, Runge-Kutta methods\n", + "\n", + "Runge-Kutta (RK) methods are based on Taylor expansion formulae, but yield\n", + "in general better algorithms for solutions of an ordinary differential equation.\n", + "The basic philosophy is that it provides an intermediate step in the computation of $y_{i+1}$.\n", + "\n", + "To see this, consider first the following definitions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{dy}{dt}=f(t,y), \n", + "\\label{_auto16} \\tag{25}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "y(t)=\\int f(t,y) dt, \n", + "\\label{_auto17} \\tag{26}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "y_{i+1}=y_i+ \\int_{t_i}^{t_{i+1}} f(t,y) dt.\n", + "\\label{_auto18} \\tag{27}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To demonstrate the philosophy behind RK methods, let us consider\n", + "the second-order RK method, RK2.\n", + "The first approximation consists in Taylor expanding $f(t,y)$\n", + "around the center of the integration interval $t_i$ to $t_{i+1}$,\n", + "that is, at $t_i+h/2$, $h$ being the step.\n", + "Using the midpoint formula for an integral, \n", + "defining $y(t_i+h/2) = y_{i+1/2}$ and \n", + "$t_i+h/2 = t_{i+1/2}$, we obtain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\int_{t_i}^{t_{i+1}} f(t,y) dt \\approx hf(t_{i+1/2},y_{i+1/2}) +O(h^3).\n", + "\\label{_auto19} \\tag{28}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This means in turn that we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "y_{i+1}=y_i + hf(t_{i+1/2},y_{i+1/2}) +O(h^3).\n", + "\\label{_auto20} \\tag{29}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, we do not know the value of $y_{i+1/2}$. Here comes thus the next approximation, namely, we use Euler's\n", + "method to approximate $y_{i+1/2}$. We have then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "y_{(i+1/2)}=y_i + \\frac{h}{2}\\frac{dy}{dt}=y(t_i) + \\frac{h}{2}f(t_i,y_i).\n", + "\\label{_auto21} \\tag{30}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This means that we can define the following algorithm for \n", + "the second-order Runge-Kutta method, RK2." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "6\n", + "0\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "k_2=hf(t_{i+1/2},y_i+k_1/2),\n", + "\\label{_auto23} \\tag{32}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with the final value" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \n", + "y_{i+i}\\approx y_i + k_2 +O(h^3). \n", + "\\label{_auto24} \\tag{33}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The difference between the previous one-step methods \n", + "is that we now need an intermediate step in our evaluation,\n", + "namely $t_i+h/2 = t_{(i+1/2)}$ where we evaluate the derivative $f$. \n", + "This involves more operations, but the gain is a better stability\n", + "in the solution.\n", + "\n", + "The fourth-order Runge-Kutta, RK4, has the following algorithm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "6\n", + "3\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "M\n", + "A\n", + "T\n", + "H\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "k_3=hf(t_i+h/2,y_i+k_2/2)\\hspace{0.5cm} k_4=hf(t_i+h,y_i+k_3)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with the final result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "y_{i+1}=y_i +\\frac{1}{6}\\left( k_1 +2k_2+2k_3+k_4\\right).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thus, the algorithm consists in first calculating $k_1$ \n", + "with $t_i$, $y_1$ and $f$ as inputs. Thereafter, we increase the step\n", + "size by $h/2$ and calculate $k_2$, then $k_3$ and finally $k_4$. The global error goes as $O(h^4)$.\n", + "\n", + "\n", + "However, at this stage, if we keep adding different methods in our\n", + "main program, the code will quickly become messy and ugly. Before we\n", + "proceed thus, we will now introduce functions that enbody the various\n", + "methods for solving differential equations. This means that we can\n", + "separate out these methods in own functions and files (and later as classes and more\n", + "generic functions) and simply call them when needed. Similarly, we\n", + "could easily encapsulate various forces or other quantities of\n", + "interest in terms of functions. To see this, let us bring up the code\n", + "we developed above for the simple sliding block, but now only with the simple forward Euler method. We introduce\n", + "two functions, one for the simple Euler method and one for the\n", + "force.\n", + "\n", + "Note that here the forward Euler method does not know the specific force function to be called.\n", + "It receives just an input the name. We can easily change the force by adding another function." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def ForwardEuler(v,x,t,n,Force):\n", + " for i in range(n-1):\n", + " v[i+1] = v[i] + DeltaT*Force(v[i],x[i],t[i])\n", + " x[i+1] = x[i] + DeltaT*v[i]\n", + " t[i+1] = t[i] + DeltaT" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def SpringForce(v,x,t):\n", + "# note here that we have divided by mass and we return the acceleration\n", + " return -2*gamma*v-x+Ftilde*cos(t*Omegatilde)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is easy to add a new method like the Euler-Cromer" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def ForwardEulerCromer(v,x,t,n,Force):\n", + " for i in range(n-1):\n", + " a = Force(v[i],x[i],t[i])\n", + " v[i+1] = v[i] + DeltaT*a\n", + " x[i+1] = x[i] + DeltaT*v[i+1]\n", + " t[i+1] = t[i] + DeltaT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the Velocity Verlet method (be careful with time-dependence here, it is not an ideal method for non-conservative forces))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def VelocityVerlet(v,x,t,n,Force):\n", + " for i in range(n-1):\n", + " a = Force(v[i],x[i],t[i])\n", + " x[i+1] = x[i] + DeltaT*v[i]+0.5*a\n", + " anew = Force(v[i],x[i+1],t[i+1])\n", + " v[i+1] = v[i] + 0.5*DeltaT*(a+anew)\n", + " t[i+1] = t[i] + DeltaT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we can now add the Runge-Kutta2 method via a new function" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "TabError", + "evalue": "inconsistent use of tabs and spaces in indentation (, line 14)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m14\u001b[0m\n\u001b[0;31m t[i+1] = t[i]+DeltaT\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mTabError\u001b[0m\u001b[0;31m:\u001b[0m inconsistent use of tabs and spaces in indentation\n" + ] + } + ], + "source": [ + "def RK2(v,x,t,n,Force):\n", + " for i in range(n-1):\n", + "# Setting up k1\n", + " k1x = DeltaT*v[i]\n", + " k1v = DeltaT*Force(v[i],x[i],t[i])\n", + "# Setting up k2\n", + " vv = v[i]+k1v*0.5\n", + " xx = x[i]+k1x*0.5\n", + " k2x = DeltaT*vv\n", + " k2v = DeltaT*Force(vv,xx,t[i]+DeltaT*0.5)\n", + "# Final result\n", + " x[i+1] = x[i]+k2x\n", + " v[i+1] = v[i]+k2v\n", + "\tt[i+1] = t[i]+DeltaT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we can now add the Runge-Kutta2 method via a new function" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def RK4(v,x,t,n,Force):\n", + " for i in range(n-1):\n", + "# Setting up k1\n", + " k1x = DeltaT*v[i]\n", + " k1v = DeltaT*Force(v[i],x[i],t[i])\n", + "# Setting up k2\n", + " vv = v[i]+k1v*0.5\n", + " xx = x[i]+k1x*0.5\n", + " k2x = DeltaT*vv\n", + " k2v = DeltaT*Force(vv,xx,t[i]+DeltaT*0.5)\n", + "# Setting up k3\n", + " vv = v[i]+k2v*0.5\n", + " xx = x[i]+k2x*0.5\n", + " k3x = DeltaT*vv\n", + " k3v = DeltaT*Force(vv,xx,t[i]+DeltaT*0.5)\n", + "# Setting up k4\n", + " vv = v[i]+k3v\n", + " xx = x[i]+k3x\n", + " k4x = DeltaT*vv\n", + " k4v = DeltaT*Force(vv,xx,t[i]+DeltaT)\n", + "# Final result\n", + " x[i+1] = x[i]+(k1x+2*k2x+2*k3x+k4x)/6.\n", + " v[i+1] = v[i]+(k1v+2*k2v+2*k3v+k4v)/6.\n", + " t[i+1] = t[i] + DeltaT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Runge-Kutta family of methods are particularly useful when we have a time-dependent acceleration.\n", + "If we have forces which depend only the spatial degrees of freedom (no velocity and/or time-dependence), then energy conserving methods like the Velocity Verlet or the Euler-Cromer method are preferred. As soon as we introduce an explicit time-dependence and/or add dissipitave forces like friction or air resistance, then methods like the family of Runge-Kutta methods are well suited for this. \n", + "The code below uses the Runge-Kutta4 methods." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "DeltaT = 0.001\n", + "#set up arrays \n", + "tfinal = 20 # in years\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, v, and x\n", + "t = np.zeros(n)\n", + "v = np.zeros(n)\n", + "x = np.zeros(n)\n", + "# Initial conditions (can change to more than one dim)\n", + "x0 = 1.0 \n", + "v0 = 0.0\n", + "x[0] = x0\n", + "v[0] = v0\n", + "gamma = 0.2\n", + "Omegatilde = 0.5\n", + "Ftilde = 1.0\n", + "# Start integrating using Euler's method\n", + "# Note that we define the force function as a SpringForce\n", + "RK4(v,x,t,n,SpringForce)\n", + "\n", + "# Plot position as function of time \n", + "fig, ax = plt.subplots()\n", + "ax.set_ylabel('x[m]')\n", + "ax.set_xlabel('t[s]')\n", + "ax.plot(t, x)\n", + "fig.tight_layout()\n", + "save_fig(\"ForcedBlockRK4\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Principle of Superposition and Periodic Forces (Fourier Transforms)\n", + "\n", + "If one has several driving forces, $F(t)=\\sum_n F_n(t)$, one can find\n", + "the particular solution to each $F_n$, $x_{pn}(t)$, and the particular\n", + "solution for the entire driving force is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x_p(t)=\\sum_nx_{pn}(t).\n", + "\\label{_auto25} \\tag{34}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is known as the principal of superposition. It only applies when\n", + "the homogenous equation is linear. If there were an anharmonic term\n", + "such as $x^3$ in the homogenous equation, then when one summed various\n", + "solutions, $x=(\\sum_n x_n)^2$, one would get cross\n", + "terms. Superposition is especially useful when $F(t)$ can be written\n", + "as a sum of sinusoidal terms, because the solutions for each\n", + "sinusoidal (sine or cosine) term is analytic, as we saw above.\n", + "\n", + "Driving forces are often periodic, even when they are not\n", + "sinusoidal. Periodicity implies that for some time $\\tau$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "F(t+\\tau)=F(t). \n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One example of a non-sinusoidal periodic force is a square wave. Many\n", + "components in electric circuits are non-linear, e.g. diodes, which\n", + "makes many wave forms non-sinusoidal even when the circuits are being\n", + "driven by purely sinusoidal sources.\n", + "\n", + "The code here shows a typical example of such a square wave generated using the functionality included in the **scipy** Python package. We have used a period of $\\tau=0.2$." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import math\n", + "from scipy import signal\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# number of points \n", + "n = 500\n", + "# start and final times \n", + "t0 = 0.0\n", + "tn = 1.0\n", + "# Period \n", + "t = np.linspace(t0, tn, n, endpoint=False)\n", + "SqrSignal = np.zeros(n)\n", + "SqrSignal = 1.0+signal.square(2*np.pi*5*t)\n", + "plt.plot(t, SqrSignal)\n", + "plt.ylim(-0.5, 2.5)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the sinusoidal example studied in the previous subsections the\n", + "period is $\\tau=2\\pi/\\omega$. However, higher harmonics can also\n", + "satisfy the periodicity requirement. In general, any force that\n", + "satisfies the periodicity requirement can be expressed as a sum over\n", + "harmonics," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F(t)=\\frac{f_0}{2}+\\sum_{n>0} f_n\\cos(2n\\pi t/\\tau)+g_n\\sin(2n\\pi t/\\tau).\n", + "\\label{_auto26} \\tag{35}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the previous subsection, one can write down the answer for\n", + "$x_{pn}(t)$, by substituting $f_n/m$ or $g_n/m$ for $F_0/m$ into Eq.s\n", + "([20](#eq:fastdriven1)) or ([21](#eq:fastdriven2)) respectively. By\n", + "writing each factor $2n\\pi t/\\tau$ as $n\\omega t$, with $\\omega\\equiv\n", + "2\\pi/\\tau$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:fourierdef1} \\tag{36}\n", + "F(t)=\\frac{f_0}{2}+\\sum_{n>0}f_n\\cos(n\\omega t)+g_n\\sin(n\\omega t).\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The solutions for $x(t)$ then come from replacing $\\omega$ with\n", + "$n\\omega$ for each term in the particular solution in Equations\n", + "([13](#eq:partform)) and ([16](#eq:Ddrive))," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x_p(t)&=&\\frac{f_0}{2k}+\\sum_{n>0} \\alpha_n\\cos(n\\omega t-\\delta_n)+\\beta_n\\sin(n\\omega t-\\delta_n),\\\\\n", + "\\nonumber\n", + "\\alpha_n&=&\\frac{f_n/m}{\\sqrt{((n\\omega)^2-\\omega_0^2)+4\\beta^2n^2\\omega^2}},\\\\\n", + "\\nonumber\n", + "\\beta_n&=&\\frac{g_n/m}{\\sqrt{((n\\omega)^2-\\omega_0^2)+4\\beta^2n^2\\omega^2}},\\\\\n", + "\\nonumber\n", + "\\delta_n&=&\\tan^{-1}\\left(\\frac{2\\beta n\\omega}{\\omega_0^2-n^2\\omega^2}\\right).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because the forces have been applied for a long time, any non-zero\n", + "damping eliminates the homogenous parts of the solution, so one need\n", + "only consider the particular solution for each $n$.\n", + "\n", + "The problem will considered solved if one can find expressions for the\n", + "coefficients $f_n$ and $g_n$, even though the solutions are expressed\n", + "as an infinite sum. The coefficients can be extracted from the\n", + "function $F(t)$ by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:fourierdef2} \\tag{37}\n", + "f_n&=&\\frac{2}{\\tau}\\int_{-\\tau/2}^{\\tau/2} dt~F(t)\\cos(2n\\pi t/\\tau),\\\\\n", + "\\nonumber\n", + "g_n&=&\\frac{2}{\\tau}\\int_{-\\tau/2}^{\\tau/2} dt~F(t)\\sin(2n\\pi t/\\tau).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To check the consistency of these expressions and to verify\n", + "Eq. ([37](#eq:fourierdef2)), one can insert the expansion of $F(t)$ in\n", + "Eq. ([36](#eq:fourierdef1)) into the expression for the coefficients in\n", + "Eq. ([37](#eq:fourierdef2)) and see whether" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "f_n&=?&\\frac{2}{\\tau}\\int_{-\\tau/2}^{\\tau/2} dt~\\left\\{\n", + "\\frac{f_0}{2}+\\sum_{m>0}f_m\\cos(m\\omega t)+g_m\\sin(m\\omega t)\n", + "\\right\\}\\cos(n\\omega t).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Immediately, one can throw away all the terms with $g_m$ because they\n", + "convolute an even and an odd function. The term with $f_0/2$\n", + "disappears because $\\cos(n\\omega t)$ is equally positive and negative\n", + "over the interval and will integrate to zero. For all the terms\n", + "$f_m\\cos(m\\omega t)$ appearing in the sum, one can use angle addition\n", + "formulas to see that $\\cos(m\\omega t)\\cos(n\\omega\n", + "t)=(1/2)(\\cos[(m+n)\\omega t]+\\cos[(m-n)\\omega t]$. This will integrate\n", + "to zero unless $m=n$. In that case the $m=n$ term gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\int_{-\\tau/2}^{\\tau/2}dt~\\cos^2(m\\omega t)=\\frac{\\tau}{2},\n", + "\\label{_auto27} \\tag{38}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "f_n&=?&\\frac{2}{\\tau}\\int_{-\\tau/2}^{\\tau/2} dt~f_n/2\\\\\n", + "\\nonumber\n", + "&=&f_n~\\checkmark.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The same method can be used to check for the consistency of $g_n$.\n", + "\n", + "\n", + "Consider the driving force:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F(t)=At/\\tau,~~-\\tau/2\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:fouriersolution} \\tag{40}\n", + "g_n&=&\\frac{2}{\\tau}\\int_{-\\tau/2}^{\\tau/2}dt~\\sin(n\\omega t) \\frac{At}{\\tau}\\\\\n", + "\\nonumber\n", + "u&=&t,~dv=\\sin(n\\omega t)dt,~v=-\\cos(n\\omega t)/(n\\omega),\\\\\n", + "\\nonumber\n", + "g_n&=&\\frac{-2A}{n\\omega \\tau^2}\\int_{-\\tau/2}^{\\tau/2}dt~\\cos(n\\omega t)\n", + "+\\left.2A\\frac{-t\\cos(n\\omega t)}{n\\omega\\tau^2}\\right|_{-\\tau/2}^{\\tau/2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first term is zero because $\\cos(n\\omega t)$ will be equally\n", + "positive and negative over the interval. Using the fact that\n", + "$\\omega\\tau=2\\pi$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "g_n&=&-\\frac{2A}{2n\\pi}\\cos(n\\omega\\tau/2)\\\\\n", + "\\nonumber\n", + "&=&-\\frac{A}{n\\pi}\\cos(n\\pi)\\\\\n", + "\\nonumber\n", + "&=&\\frac{A}{n\\pi}(-1)^{n+1}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fourier Series\n", + "\n", + "More text will come here, chpater 5.7-5.8 of Taylor are discussed\n", + "during the lectures. The code here uses the Fourier series discussed\n", + "in chapter 5.7 for a square wave signal. The equations for the\n", + "coefficients are are discussed in Taylor section 5.7, see Example\n", + "5.4. The code here visualizes the various approximations given by\n", + "Fourier series compared with a square wave with period $T=0.2$, witth\n", + "$0.1$ and max value $F=2$. We see that when we increase the number of\n", + "components in the Fourier series, the Fourier series approximation gets closes and closes to the square wave signal." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import math\n", + "from scipy import signal\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# number of points \n", + "n = 500\n", + "# start and final times \n", + "t0 = 0.0\n", + "tn = 1.0\n", + "# Period \n", + "T =0.2\n", + "# Max value of square signal \n", + "Fmax= 2.0\n", + "# Width of signal \n", + "Width = 0.1\n", + "t = np.linspace(t0, tn, n, endpoint=False)\n", + "SqrSignal = np.zeros(n)\n", + "FourierSeriesSignal = np.zeros(n)\n", + "SqrSignal = 1.0+signal.square(2*np.pi*5*t+np.pi*Width/T)\n", + "a0 = Fmax*Width/T\n", + "FourierSeriesSignal = a0\n", + "Factor = 2.0*Fmax/np.pi\n", + "for i in range(1,500):\n", + " FourierSeriesSignal += Factor/(i)*np.sin(np.pi*i*Width/T)*np.cos(i*t*2*np.pi/T)\n", + "plt.plot(t, SqrSignal)\n", + "plt.plot(t, FourierSeriesSignal)\n", + "plt.ylim(-0.5, 2.5)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solving differential equations with Fouries series\n", + "\n", + "The material here was discussed during the lecture of February 19 and 21.\n", + "It is also covered by Taylor in section 5.8.\n", + "\n", + "\n", + "\n", + "## Response to Transient Force\n", + "\n", + "Consider a particle at rest in the bottom of an underdamped harmonic\n", + "oscillator, that then feels a sudden impulse, or change in momentum,\n", + "$I=F\\Delta t$ at $t=0$. This increases the velocity immediately by an\n", + "amount $v_0=I/m$ while not changing the position. One can then solve\n", + "the trajectory by solving Eq. ([9](#eq:homogsolution)) with initial\n", + "conditions $v_0=I/m$ and $x_0=0$. This gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x(t)=\\frac{I}{m\\omega'}e^{-\\beta t}\\sin\\omega't, ~~t>0.\n", + "\\label{_auto29} \\tag{41}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, $\\omega'=\\sqrt{\\omega_0^2-\\beta^2}$. For an impulse $I_i$ that\n", + "occurs at time $t_i$ the trajectory would be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x(t)=\\frac{I_i}{m\\omega'}e^{-\\beta (t-t_i)}\\sin[\\omega'(t-t_i)] \\Theta(t-t_i),\n", + "\\label{_auto30} \\tag{42}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\Theta(t-t_i)$ is a step function, i.e. $\\Theta(x)$ is zero for\n", + "$x<0$ and unity for $x>0$. If there were several impulses linear\n", + "superposition tells us that we can sum over each contribution," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "x(t)=\\sum_i\\frac{I_i}{m\\omega'}e^{-\\beta(t-t_i)}\\sin[\\omega'(t-t_i)]\\Theta(t-t_i)\n", + "\\label{_auto31} \\tag{43}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now one can consider a series of impulses at times separated by\n", + "$\\Delta t$, where each impulse is given by $F_i\\Delta t$. The sum\n", + "above now becomes an integral," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\\label{eq:Greeny} \\tag{44}\n", + "x(t)&=&\\int_{-\\infty}^\\infty dt'~F(t')\\frac{e^{-\\beta(t-t')}\\sin[\\omega'(t-t')]}{m\\omega'}\\Theta(t-t')\\\\\n", + "\\nonumber\n", + "&=&\\int_{-\\infty}^\\infty dt'~F(t')G(t-t'),\\\\\n", + "\\nonumber\n", + "G(\\Delta t)&=&\\frac{e^{-\\beta\\Delta t}\\sin[\\omega' \\Delta t]}{m\\omega'}\\Theta(\\Delta t)\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The quantity\n", + "$e^{-\\beta(t-t')}\\sin[\\omega'(t-t')]/m\\omega'\\Theta(t-t')$ is called a\n", + "Green's function, $G(t-t')$. It describes the response at $t$ due to a\n", + "force applied at a time $t'$, and is a function of $t-t'$. The step\n", + "function ensures that the response does not occur before the force is\n", + "applied. One should remember that the form for $G$ would change if the\n", + "oscillator were either critically- or over-damped.\n", + "\n", + "When performing the integral in Eq. ([44](#eq:Greeny)) one can use\n", + "angle addition formulas to factor out the part with the $t'$\n", + "dependence in the integrand," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:Greeny2} \\tag{45}\n", + "x(t)&=&\\frac{1}{m\\omega'}e^{-\\beta t}\\left[I_c(t)\\sin(\\omega't)-I_s(t)\\cos(\\omega't)\\right],\\\\\n", + "\\nonumber\n", + "I_c(t)&\\equiv&\\int_{-\\infty}^t dt'~F(t')e^{\\beta t'}\\cos(\\omega't'),\\\\\n", + "\\nonumber\n", + "I_s(t)&\\equiv&\\int_{-\\infty}^t dt'~F(t')e^{\\beta t'}\\sin(\\omega't').\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the time $t$ is beyond any time at which the force acts,\n", + "$F(t'>t)=0$, the coefficients $I_c$ and $I_s$ become independent of\n", + "$t$.\n", + "\n", + "\n", + "Consider an undamped oscillator ($\\beta\\rightarrow 0$), with\n", + "characteristic frequency $\\omega_0$ and mass $m$, that is at rest\n", + "until it feels a force described by a Gaussian form," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "F(t)&=&F_0 \\exp\\left\\{\\frac{-t^2}{2\\tau^2}\\right\\}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For large times ($t>>\\tau$), where the force has died off, find\n", + "$x(t)$.\\\\ Solve for the coefficients $I_c$ and $I_s$ in\n", + "Eq. ([45](#eq:Greeny2)). Because the Gaussian is an even function,\n", + "$I_s=0$, and one need only solve for $I_c$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "I_c&=&F_0\\int_{-\\infty}^\\infty dt'~e^{-t^{\\prime 2}/(2\\tau^2)}\\cos(\\omega_0 t')\\\\\n", + "&=&\\Re F_0 \\int_{-\\infty}^\\infty dt'~e^{-t^{\\prime 2}/(2\\tau^2)}e^{i\\omega_0 t'}\\\\\n", + "&=&\\Re F_0 \\int_{-\\infty}^\\infty dt'~e^{-(t'-i\\omega_0\\tau^2)^2/(2\\tau^2)}e^{-\\omega_0^2\\tau^2/2}\\\\\n", + "&=&F_0\\tau \\sqrt{2\\pi} e^{-\\omega_0^2\\tau^2/2}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The third step involved completing the square, and the final step used the fact that the integral" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\int_{-\\infty}^\\infty dx~e^{-x^2/2}&=&\\sqrt{2\\pi}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To see that this integral is true, consider the square of the integral, which you can change to polar coordinates," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "I&=&\\int_{-\\infty}^\\infty dx~e^{-x^2/2}\\\\\n", + "I^2&=&\\int_{-\\infty}^\\infty dxdy~e^{-(x^2+y^2)/2}\\\\\n", + "&=&2\\pi\\int_0^\\infty rdr~e^{-r^2/2}\\\\\n", + "&=&2\\pi.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, the expression for $x$ from Eq. ([45](#eq:Greeny2)) is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "x(t>>\\tau)&=&\\frac{F_0\\tau}{m\\omega_0} \\sqrt{2\\pi} e^{-\\omega_0^2\\tau^2/2}\\sin(\\omega_0t).\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The classical pendulum and scaling the equations\n", + "\n", + "Let us end our discussion of oscillations with another classical case, the pendulum.\n", + "\n", + "The angular equation of motion of the pendulum is given by\n", + "Newton's equation and with no external force it reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " ml\\frac{d^2\\theta}{dt^2}+mgsin(\\theta)=0,\n", + "\\label{_auto32} \\tag{46}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with an angular velocity and acceleration given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " v=l\\frac{d\\theta}{dt},\n", + "\\label{_auto33} \\tag{47}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " a=l\\frac{d^2\\theta}{dt^2}.\n", + "\\label{_auto34} \\tag{48}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We do however expect that the motion will gradually come to an end due a viscous drag torque acting on the pendulum. \n", + "In the presence of the drag, the above equation becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " ml\\frac{d^2\\theta}{dt^2}+\\nu\\frac{d\\theta}{dt} +mgsin(\\theta)=0, \\label{eq:pend1} \\tag{49}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\nu$ is now a positive constant parameterizing the viscosity\n", + "of the medium in question. In order to maintain the motion against\n", + "viscosity, it is necessary to add some external driving force. \n", + "We choose here a periodic driving force. The last equation becomes then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " ml\\frac{d^2\\theta}{dt^2}+\\nu\\frac{d\\theta}{dt} +mgsin(\\theta)=Asin(\\omega t), \\label{eq:pend2} \\tag{50}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $A$ and $\\omega$ two constants representing the amplitude and \n", + "the angular frequency respectively. The latter is called the driving frequency.\n", + "\n", + "\n", + "\n", + "We define" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\omega_0=\\sqrt{g/l},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "the so-called natural frequency and the new dimensionless quantities" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{t}=\\omega_0t,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with the dimensionless driving frequency" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{\\omega}=\\frac{\\omega}{\\omega_0},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and introducing the quantity $Q$, called the *quality factor*," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "Q=\\frac{mg}{\\omega_0\\nu},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the dimensionless amplitude" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{A}=\\frac{A}{mg}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More on the Pendulum\n", + "\n", + "We have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d^2\\theta}{d\\hat{t}^2}+\\frac{1}{Q}\\frac{d\\theta}{d\\hat{t}} \n", + " +sin(\\theta)=\\hat{A}cos(\\hat{\\omega}\\hat{t}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This equation can in turn be recast in terms of two coupled first-order differential equations as follows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d\\theta}{d\\hat{t}}=\\hat{v},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{d\\hat{v}}{d\\hat{t}}=-\\frac{\\hat{v}}{Q}-sin(\\theta)+\\hat{A}cos(\\hat{\\omega}\\hat{t}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are the equations to be solved. The factor $Q$ represents the\n", + "number of oscillations of the undriven system that must occur before\n", + "its energy is significantly reduced due to the viscous drag. The\n", + "amplitude $\\hat{A}$ is measured in units of the maximum possible\n", + "gravitational torque while $\\hat{\\omega}$ is the angular frequency of\n", + "the external torque measured in units of the pendulum's natural\n", + "frequency." + ] + } + ], + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter5.py b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter5.py new file mode 100644 index 000000000..b06c2eae4 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter5.py @@ -0,0 +1,1700 @@ +# Harmonic Oscillator + +The harmonic oscillator is omnipresent in physics. Although you may think +of this as being related to springs, it, or an equivalent +mathematical representation, appears in just about any problem where a +mode is sitting near its potential energy minimum. At that point, +$\partial_x V(x)=0$, and the first non-zero term (aside from a +constant) in the potential energy is that of a harmonic oscillator. In +a solid, sound modes (phonons) are built on a picture of coupled +harmonic oscillators, and in relativistic field theory the fundamental +interactions are also built on coupled oscillators positioned +infinitesimally close to one another in space. The phenomena of a +resonance of an oscillator driven at a fixed frequency plays out +repeatedly in atomic, nuclear and high-energy physics, when quantum +mechanically the evolution of a state oscillates according to +$e^{-iEt}$ and exciting discrete quantum states has very similar +mathematics as exciting discrete states of an oscillator. + +The potential energy for a single particle as a function of its position $x$ can be written as a Taylor expansion about some point $x_0$ + + +
    + +$$ +\begin{equation} +V(x)=V(x_0)+(x-x_0)\left.\partial_xV(x)\right|_{x_0}+\frac{1}{2}(x-x_0)^2\left.\partial_x^2V(x)\right|_{x_0} ++\frac{1}{3!}\left.\partial_x^3V(x)\right|_{x_0}+\cdots +\label{_auto1} \tag{1} +\end{equation} +$$ + +If the position $x_0$ is at the minimum of the resonance, the first two non-zero terms of the potential are + +$$ +\begin{eqnarray} +V(x)&\approx& V(x_0)+\frac{1}{2}(x-x_0)^2\left.\partial_x^2V(x)\right|_{x_0},\\ +\nonumber +&=&V(x_0)+\frac{1}{2}k(x-x_0)^2,~~~~k\equiv \left.\partial_x^2V(x)\right|_{x_0},\\ +\nonumber +F&=&-\partial_xV(x)=-k(x-x_0). +\end{eqnarray} +$$ + +Put into Newton's 2nd law (assuming $x_0=0$), + +$$ +\begin{eqnarray} +m\ddot{x}&=&-kx,\\ +x&=&A\cos(\omega_0 t-\phi),~~~\omega_0=\sqrt{k/m}. +\end{eqnarray} +$$ + +Here $A$ and $\phi$ are arbitrary. Equivalently, one could have +written this as $A\cos(\omega_0 t)+B\sin(\omega_0 t)$, or as the real +part of $Ae^{i\omega_0 t}$. In this last case $A$ could be an +arbitrary complex constant. Thus, there are 2 arbitrary constants +(either $A$ and $B$ or $A$ and $\phi$, or the real and imaginary part +of one complex constant. This is the expectation for a second order +differential equation, and also agrees with the physical expectation +that if you know a particle's initial velocity and position you should +be able to define its future motion, and that those two arbitrary +conditions should translate to two arbitrary constants. + +A key feature of harmonic motion is that the system repeats itself +after a time $T=1/f$, where $f$ is the frequency, and $\omega=2\pi f$ +is the angular frequency. The period of the motion is independent of +the amplitude. However, this independence is only exact when one can +neglect higher terms of the potential, $x^3, x^4\cdots$. Once can +neglect these terms for sufficiently small amplitudes, and for larger +amplitudes the motion is no longer purely sinusoidal, and even though +the motion repeats itself, the time for repeating the motion is no +longer independent of the amplitude. + +One can also calculate the velocity and the kinetic energy as a function of time, + +$$ +\begin{eqnarray} +\dot{x}&=&-\omega_0A\sin(\omega_0 t-\phi),\\ +\nonumber +K&=&\frac{1}{2}m\dot{x}^2=\frac{m\omega_0^2A^2}{2}\sin^2(\omega_0t-\phi),\\ +\nonumber +&=&\frac{k}{2}A^2\sin^2(\omega_0t-\phi). +\end{eqnarray} +$$ + +The total energy is then + + +
    + +$$ +\begin{equation} +E=K+V=\frac{1}{2}m\dot{x}^2+\frac{1}{2}kx^2=\frac{1}{2}kA^2. +\label{_auto2} \tag{2} +\end{equation} +$$ + +The total energy then goes as the square of the amplitude. + + +A pendulum is an example of a harmonic oscillator. By expanding the +kinetic and potential energies for small angles find the frequency for +a pendulum of length $L$ with all the mass $m$ centered at the end by +writing the eq.s of motion in the form of a harmonic oscillator. + +The potential energy and kinetic energies are (for $x$ being the displacement) + +$$ +\begin{eqnarray*} +V&=&mgL(1-\cos\theta)\approx mgL\frac{x^2}{2L^2},\\ +K&=&\frac{1}{2}mL^2\dot{\theta}^2\approx \frac{m}{2}\dot{x}^2. +\end{eqnarray*} +$$ + +For small $x$ Newton's 2nd law becomes + +$$ +m\ddot{x}=-\frac{mg}{L}x, +$$ + +and the spring constant would appear to be $k=mg/L$, which makes the +frequency equal to $\omega_0=\sqrt{g/L}$. Note that the frequency is +independent of the mass. + + +## Damped Oscillators + +We consider only the case where the damping force is proportional to +the velocity. This is counter to dragging friction, where the force is +proportional in strength to the normal force and independent of +velocity, and is also inconsistent with wind resistance, where the +magnitude of the drag force is proportional the square of the +velocity. Rolling resistance does seem to be mainly proportional to +the velocity. However, the main motivation for considering damping +forces proportional to the velocity is that the math is more +friendly. This is because the differential equation is linear, +i.e. each term is of order $x$, $\dot{x}$, $\ddot{x}\cdots$, or even +terms with no mention of $x$, and there are no terms such as $x^2$ or +$x\ddot{x}$. The equations of motion for a spring with damping force +$-b\dot{x}$ are + + +
    + +$$ +\begin{equation} +m\ddot{x}+b\dot{x}+kx=0. +\label{_auto3} \tag{3} +\end{equation} +$$ + +Just to make the solution a bit less messy, we rewrite this equation as + + +
    + +$$ +\begin{equation} +\label{eq:dampeddiffyq} \tag{4} +\ddot{x}+2\beta\dot{x}+\omega_0^2x=0,~~~~\beta\equiv b/2m,~\omega_0\equiv\sqrt{k/m}. +\end{equation} +$$ + +Both $\beta$ and $\omega$ have dimensions of inverse time. To find solutions (see appendix C in the text) you must make an educated guess at the form of the solution. To do this, first realize that the solution will need an arbitrary normalization $A$ because the equation is linear. Secondly, realize that if the form is + + +
    + +$$ +\begin{equation} +x=Ae^{rt} +\label{_auto4} \tag{5} +\end{equation} +$$ + +that each derivative simply brings out an extra power of $r$. This +means that the $Ae^{rt}$ factors out and one can simply solve for an +equation for $r$. Plugging this form into Eq. ([4](#eq:dampeddiffyq)), + + +
    + +$$ +\begin{equation} +r^2+2\beta r+\omega_0^2=0. +\label{_auto5} \tag{6} +\end{equation} +$$ + +Because this is a quadratic equation there will be two solutions, + + +
    + +$$ +\begin{equation} +r=-\beta\pm\sqrt{\beta^2-\omega_0^2}. +\label{_auto6} \tag{7} +\end{equation} +$$ + +We refer to the two solutions as $r_1$ and $r_2$ corresponding to the +$+$ and $-$ roots. As expected, there should be two arbitrary +constants involved in the solution, + + +
    + +$$ +\begin{equation} +x=A_1e^{r_1t}+A_2e^{r_2t}, +\label{_auto7} \tag{8} +\end{equation} +$$ + +where the coefficients $A_1$ and $A_2$ are determined by initial +conditions. + +The roots listed above, $\sqrt{\omega_0^2-\beta_0^2}$, will be +imaginary if the damping is small and $\beta<\omega_0$. In that case, +$r$ is complex and the factor $e{rt}$ will have some oscillatory +behavior. If the roots are real, there will only be exponentially +decaying solutions. There are three cases: + + + +### Underdamped: $\beta<\omega_0$ + +$$ +\begin{eqnarray} +x&=&A_1e^{-\beta t}e^{i\omega't}+A_2e^{-\beta t}e^{-i\omega't},~~\omega'\equiv\sqrt{\omega_0^2-\beta^2}\\ +\nonumber +&=&(A_1+A_2)e^{-\beta t}\cos\omega't+i(A_1-A_2)e^{-\beta t}\sin\omega't. +\end{eqnarray} +$$ + +Here we have made use of the identity +$e^{i\omega't}=\cos\omega't+i\sin\omega't$. Because the constants are +arbitrary, and because the real and imaginary parts are both solutions +individually, we can simply consider the real part of the solution +alone: + + +
    + +$$ +\begin{eqnarray} +\label{eq:homogsolution} \tag{9} +x&=&B_1e^{-\beta t}\cos\omega't+B_2e^{-\beta t}\sin\omega't,\\ +\nonumber +\omega'&\equiv&\sqrt{\omega_0^2-\beta^2}. +\end{eqnarray} +$$ + +### Critical dampling: $\beta=\omega_0$ + +In this case the two terms involving $r_1$ and $r_2$ are identical +because $\omega'=0$. Because we need to arbitrary constants, there +needs to be another solution. This is found by simply guessing, or by +taking the limit of $\omega'\rightarrow 0$ from the underdamped +solution. The solution is then + + +
    + +$$ +\begin{equation} +\label{eq:criticallydamped} \tag{10} +x=Ae^{-\beta t}+Bte^{-\beta t}. +\end{equation} +$$ + +The critically damped solution is interesting because the solution +approaches zero quickly, but does not oscillate. For a problem with +zero initial velocity, the solution never crosses zero. This is a good +choice for designing shock absorbers or swinging doors. + +### Overdamped: $\beta>\omega_0$ + +$$ +\begin{eqnarray} +x&=&A_1\exp{-(\beta+\sqrt{\beta^2-\omega_0^2})t}+A_2\exp{-(\beta-\sqrt{\beta^2-\omega_0^2})t} +\end{eqnarray} +$$ + +This solution will also never pass the origin more than once, and then +only if the initial velocity is strong and initially toward zero. + + + + +Given $b$, $m$ and $\omega_0$, find $x(t)$ for a particle whose +initial position is $x=0$ and has initial velocity $v_0$ (assuming an +underdamped solution). + +The solution is of the form, + +$$ +\begin{eqnarray*} +x&=&e^{-\beta t}\left[A_1\cos(\omega' t)+A_2\sin\omega't\right],\\ +\dot{x}&=&-\beta x+\omega'e^{-\beta t}\left[-A_1\sin\omega't+A_2\cos\omega't\right].\\ +\omega'&\equiv&\sqrt{\omega_0^2-\beta^2},~~~\beta\equiv b/2m. +\end{eqnarray*} +$$ + +From the initial conditions, $A_1=0$ because $x(0)=0$ and $\omega'A_2=v_0$. So + +$$ +x=\frac{v_0}{\omega'}e^{-\beta t}\sin\omega't. +$$ + +## Our Sliding Block Code +Here we study first the case without additional friction term and scale our equation +in terms of a dimensionless time $\tau$. + +Let us remind ourselves about the differential equation we want to solve (the general case with damping due to friction) + +$$ +m\frac{d^2x}{dt^2} + b\frac{dx}{dt}+kx(t) =0. +$$ + +We divide by $m$ and introduce $\omega_0^2=\sqrt{k/m}$ and obtain + +$$ +\frac{d^2x}{dt^2} + \frac{b}{m}\frac{dx}{dt}+\omega_0^2x(t) =0. +$$ + +Thereafter we introduce a dimensionless time $\tau = t\omega_0$ (check +that the dimensionality is correct) and rewrite our equation as + +$$ +\frac{d^2x}{d\tau^2} + \frac{b}{m\omega_0}\frac{dx}{d\tau}+x(\tau) =0, +$$ + +which gives us + +$$ +\frac{d^2x}{d\tau^2} + \frac{b}{m\omega_0}\frac{dx}{d\tau}+x(\tau) =0. +$$ + +We then define $\gamma = b/(2m\omega_0)$ and rewrite our equations as + +$$ +\frac{d^2x}{d\tau^2} + 2\gamma\frac{dx}{d\tau}+x(\tau) =0. +$$ + +This is the equation we will code below. The first version employs the Euler-Cromer method. + +%matplotlib inline + +# Common imports +import numpy as np +import pandas as pd +from math import * +import matplotlib.pyplot as plt +import os + +# Where to save the figures and data files +PROJECT_ROOT_DIR = "Results" +FIGURE_ID = "Results/FigureFiles" +DATA_ID = "DataFiles/" + +if not os.path.exists(PROJECT_ROOT_DIR): + os.mkdir(PROJECT_ROOT_DIR) + +if not os.path.exists(FIGURE_ID): + os.makedirs(FIGURE_ID) + +if not os.path.exists(DATA_ID): + os.makedirs(DATA_ID) + +def image_path(fig_id): + return os.path.join(FIGURE_ID, fig_id) + +def data_path(dat_id): + return os.path.join(DATA_ID, dat_id) + +def save_fig(fig_id): + plt.savefig(image_path(fig_id) + ".png", format='png') + + +from pylab import plt, mpl +plt.style.use('seaborn') +mpl.rcParams['font.family'] = 'serif' + +DeltaT = 0.001 +#set up arrays +tfinal = 20 # in years +n = ceil(tfinal/DeltaT) +# set up arrays for t, v, and x +t = np.zeros(n) +v = np.zeros(n) +x = np.zeros(n) +# Initial conditions as simple one-dimensional arrays of time +x0 = 1.0 +v0 = 0.0 +x[0] = x0 +v[0] = v0 +gamma = 0.0 +# Start integrating using Euler-Cromer's method +for i in range(n-1): + # Set up the acceleration + # Here you could have defined your own function for this + a = -2*gamma*v[i]-x[i] + # update velocity, time and position + v[i+1] = v[i] + DeltaT*a + x[i+1] = x[i] + DeltaT*v[i+1] + t[i+1] = t[i] + DeltaT +# Plot position as function of time +fig, ax = plt.subplots() +#ax.set_xlim(0, tfinal) +ax.set_ylabel('x[m]') +ax.set_xlabel('t[s]') +ax.plot(t, x) +fig.tight_layout() +save_fig("BlockEulerCromer") +plt.show() + +When setting up the value of $\gamma$ we see that for $\gamma=0$ we get the simple oscillatory motion with no damping. +Choosing $\gamma < 1$ leads to the classical underdamped case with oscillatory motion, but where the motion comes to an end. + +Choosing $\gamma =1$ leads to what normally is called critical damping and $\gamma> 1$ leads to critical overdamping. +Try it out and try also to change the initial position and velocity. Setting $\gamma=1$ +yields a situation, as discussed above, where the solution approaches quickly zero and does not oscillate. With zero initial velocity it will never cross zero. + + +## Sinusoidally Driven Oscillators + +Here, we consider the force + + +
    + +$$ +\begin{equation} +F=-kx-b\dot{x}+F_0\cos\omega t, +\label{_auto8} \tag{11} +\end{equation} +$$ + +which leads to the differential equation + + +
    + +$$ +\begin{equation} +\label{eq:drivenosc} \tag{12} +\ddot{x}+2\beta\dot{x}+\omega_0^2x=(F_0/m)\cos\omega t. +\end{equation} +$$ + +Consider a single solution with no arbitrary constants, which we will +call a {\it particular solution}, $x_p(t)$. It should be emphasized +that this is {\bf A} particular solution, because there exists an +infinite number of such solutions because the general solution should +have two arbitrary constants. Now consider solutions to the same +equation without the driving term, which include two arbitrary +constants. These are called either {\it homogenous solutions} or {\it +complementary solutions}, and were given in the previous section, +e.g. Eq. ([9](#eq:homogsolution)) for the underdamped case. The +homogenous solution already incorporates the two arbitrary constants, +so any sum of a homogenous solution and a particular solution will +represent the {\it general solution} of the equation. The general +solution incorporates the two arbitrary constants $A$ and $B$ to +accommodate the two initial conditions. One could have picked a +different particular solution, i.e. the original particular solution +plus any homogenous solution with the arbitrary constants $A_p$ and +$B_p$ chosen at will. When one adds in the homogenous solution, which +has adjustable constants with arbitrary constants $A'$ and $B'$, to +the new particular solution, one can get the same general solution by +simply adjusting the new constants such that $A'+A_p=A$ and +$B'+B_p=B$. Thus, the choice of $A_p$ and $B_p$ are irrelevant, and +when choosing the particular solution it is best to make the simplest +choice possible. + +To find a particular solution, one first guesses at the form, + + +
    + +$$ +\begin{equation} +\label{eq:partform} \tag{13} +x_p(t)=D\cos(\omega t-\delta), +\end{equation} +$$ + +and rewrite the differential equation as + + +
    + +$$ +\begin{equation} +D\left\{-\omega^2\cos(\omega t-\delta)-2\beta\omega\sin(\omega t-\delta)+\omega_0^2\cos(\omega t-\delta)\right\}=\frac{F_0}{m}\cos(\omega t). +\label{_auto9} \tag{14} +\end{equation} +$$ + +One can now use angle addition formulas to get + +$$ +\begin{eqnarray} +D\left\{(-\omega^2\cos\delta+2\beta\omega\sin\delta+\omega_0^2\cos\delta)\cos(\omega t)\right.&&\\ +\nonumber +\left.+(-\omega^2\sin\delta-2\beta\omega\cos\delta+\omega_0^2\sin\delta)\sin(\omega t)\right\} +&=&\frac{F_0}{m}\cos(\omega t). +\end{eqnarray} +$$ + +Both the $\cos$ and $\sin$ terms need to equate if the expression is to hold at all times. Thus, this becomes two equations + +$$ +\begin{eqnarray} +D\left\{-\omega^2\cos\delta+2\beta\omega\sin\delta+\omega_0^2\cos\delta\right\}&=&\frac{F_0}{m}\\ +\nonumber +-\omega^2\sin\delta-2\beta\omega\cos\delta+\omega_0^2\sin\delta&=&0. +\end{eqnarray} +$$ + +After dividing by $\cos\delta$, the lower expression leads to + + +
    + +$$ +\begin{equation} +\tan\delta=\frac{2\beta\omega}{\omega_0^2-\omega^2}. +\label{_auto10} \tag{15} +\end{equation} +$$ + +Using the identities $\tan^2+1=\csc^2$ and $\sin^2+\cos^2=1$, one can also express $\sin\delta$ and $\cos\delta$, + +$$ +\begin{eqnarray} +\sin\delta&=&\frac{2\beta\omega}{\sqrt{(\omega_0^2-\omega^2)^2+4\omega^2\beta^2}},\\ +\nonumber +\cos\delta&=&\frac{(\omega_0^2-\omega^2)}{\sqrt{(\omega_0^2-\omega^2)^2+4\omega^2\beta^2}} +\end{eqnarray} +$$ + +Inserting the expressions for $\cos\delta$ and $\sin\delta$ into the expression for $D$, + + +
    + +$$ +\begin{equation} +\label{eq:Ddrive} \tag{16} +D=\frac{F_0/m}{\sqrt{(\omega_0^2-\omega^2)^2+4\omega^2\beta^2}}. +\end{equation} +$$ + +For a given initial condition, e.g. initial displacement and velocity, +one must add the homogenous solution then solve for the two arbitrary +constants. However, because the homogenous solutions decay with time +as $e^{-\beta t}$, the particular solution is all that remains at +large times, and is therefore the steady state solution. Because the +arbitrary constants are all in the homogenous solution, all memory of +the initial conditions are lost at large times, $t>>1/\beta$. + +The amplitude of the motion, $D$, is linearly proportional to the +driving force ($F_0/m$), but also depends on the driving frequency +$\omega$. For small $\beta$ the maximum will occur at +$\omega=\omega_0$. This is referred to as a resonance. In the limit +$\beta\rightarrow 0$ the amplitude at resonance approaches infinity. + + +## Alternative Derivation for Driven Oscillators + +Here, we derive the same expressions as in Equations ([13](#eq:partform)) and ([16](#eq:Ddrive)) but express the driving forces as + +$$ +\begin{eqnarray} +F(t)&=&F_0e^{i\omega t}, +\end{eqnarray} +$$ + +rather than as $F_0\cos\omega t$. The real part of $F$ is the same as before. For the differential equation, + + +
    + +$$ +\begin{eqnarray} +\label{eq:compdrive} \tag{17} +\ddot{x}+2\beta\dot{x}+\omega_0^2x&=&\frac{F_0}{m}e^{i\omega t}, +\end{eqnarray} +$$ + +one can treat $x(t)$ as an imaginary function. Because the operations +$d^2/dt^2$ and $d/dt$ are real and thus do not mix the real and +imaginary parts of $x(t)$, Eq. ([17](#eq:compdrive)) is effectively 2 +equations. Because $e^{\omega t}=\cos\omega t+i\sin\omega t$, the real +part of the solution for $x(t)$ gives the solution for a driving force +$F_0\cos\omega t$, and the imaginary part of $x$ corresponds to the +case where the driving force is $F_0\sin\omega t$. It is rather easy +to solve for the complex $x$ in this case, and by taking the real part +of the solution, one finds the answer for the $\cos\omega t$ driving +force. + +We assume a simple form for the particular solution + + +
    + +$$ +\begin{equation} +x_p=De^{i\omega t}, +\label{_auto11} \tag{18} +\end{equation} +$$ + +where $D$ is a complex constant. + +From Eq. ([17](#eq:compdrive)) one inserts the form for $x_p$ above to get + +$$ +\begin{eqnarray} +D\left\{-\omega^2+2i\beta\omega+\omega_0^2\right\}e^{i\omega t}=(F_0/m)e^{i\omega t},\\ +\nonumber +D=\frac{F_0/m}{(\omega_0^2-\omega^2)+2i\beta\omega}. +\end{eqnarray} +$$ + +The norm and phase for $D=|D|e^{-i\delta}$ can be read by inspection, + + +
    + +$$ +\begin{equation} +|D|=\frac{F_0/m}{\sqrt{(\omega_0^2-\omega^2)^2+4\beta^2\omega^2}},~~~~\tan\delta=\frac{2\beta\omega}{\omega_0^2-\omega^2}. +\label{_auto12} \tag{19} +\end{equation} +$$ + +This is the same expression for $\delta$ as before. One then finds $x_p(t)$, + + +
    + +$$ +\begin{eqnarray} +\label{eq:fastdriven1} \tag{20} +x_p(t)&=&\Re\frac{(F_0/m)e^{i\omega t-i\delta}}{\sqrt{(\omega_0^2-\omega^2)^2+4\beta^2\omega^2}}\\ +\nonumber +&=&\frac{(F_0/m)\cos(\omega t-\delta)}{\sqrt{(\omega_0^2-\omega^2)^2+4\beta^2\omega^2}}. +\end{eqnarray} +$$ + +This is the same answer as before. +If one wished to solve for the case where $F(t)= F_0\sin\omega t$, the imaginary part of the solution would work + + +
    + +$$ +\begin{eqnarray} +\label{eq:fastdriven2} \tag{21} +x_p(t)&=&\Im\frac{(F_0/m)e^{i\omega t-i\delta}}{\sqrt{(\omega_0^2-\omega^2)^2+4\beta^2\omega^2}}\\ +\nonumber +&=&\frac{(F_0/m)\sin(\omega t-\delta)}{\sqrt{(\omega_0^2-\omega^2)^2+4\beta^2\omega^2}}. +\end{eqnarray} +$$ + +Consider the damped and driven harmonic oscillator worked out above. Given $F_0, m,\beta$ and $\omega_0$, solve for the complete solution $x(t)$ for the case where $F=F_0\sin\omega t$ with initial conditions $x(t=0)=0$ and $v(t=0)=0$. Assume the underdamped case. + +The general solution including the arbitrary constants includes both the homogenous and particular solutions, + +$$ +\begin{eqnarray*} +x(t)&=&\frac{F_0}{m}\frac{\sin(\omega t-\delta)}{\sqrt{(\omega_0^2-\omega^2)^2+4\beta^2\omega^2}} ++A\cos\omega't e^{-\beta t}+B\sin\omega't e^{-\beta t}. +\end{eqnarray*} +$$ + +The quantities $\delta$ and $\omega'$ are given earlier in the +section, $\omega'=\sqrt{\omega_0^2-\beta^2}, +\delta=\tan^{-1}(2\beta\omega/(\omega_0^2-\omega^2)$. Here, solving +the problem means finding the arbitrary constants $A$ and +$B$. Satisfying the initial conditions for the initial position and +velocity: + +$$ +\begin{eqnarray*} +x(t=0)=0&=&-\eta\sin\delta+A,\\ +v(t=0)=0&=&\omega\eta\cos\delta-\beta A+\omega'B,\\ +\eta&\equiv&\frac{F_0}{m}\frac{1}{\sqrt{(\omega_0^2-\omega^2)^2+4\beta^2\omega^2}}. +\end{eqnarray*} +$$ + +The problem is now reduced to 2 equations and 2 unknowns, $A$ and $B$. The solution is + +$$ +\begin{eqnarray} +A&=& \eta\sin\delta ,~~~B=\frac{-\omega\eta\cos\delta+\beta\eta\sin\delta}{\omega'}. +\end{eqnarray} +$$ + +## Resonance Widths; the $Q$ factor + +From the previous two sections, the particular solution for a driving force, $F=F_0\cos\omega t$, is + +$$ +\begin{eqnarray} +x_p(t)&=&\frac{F_0/m}{\sqrt{(\omega_0^2-\omega^2)^2+4\omega^2\beta^2}}\cos(\omega_t-\delta),\\ +\nonumber +\delta&=&\tan^{-1}\left(\frac{2\beta\omega}{\omega_0^2-\omega^2}\right). +\end{eqnarray} +$$ + +If one fixes the driving frequency $\omega$ and adjusts the +fundamental frequency $\omega_0=\sqrt{k/m}$, the maximum amplitude +occurs when $\omega_0=\omega$ because that is when the term from the +denominator $(\omega_0^2-\omega^2)^2+4\omega^2\beta^2$ is at a +minimum. This is akin to dialing into a radio station. However, if one +fixes $\omega_0$ and adjusts the driving frequency one minimize with +respect to $\omega$, e.g. set + + +
    + +$$ +\begin{equation} +\frac{d}{d\omega}\left[(\omega_0^2-\omega^2)^2+4\omega^2\beta^2\right]=0, +\label{_auto13} \tag{22} +\end{equation} +$$ + +and one finds that the maximum amplitude occurs when +$\omega=\sqrt{\omega_0^2-2\beta^2}$. If $\beta$ is small relative to +$\omega_0$, one can simply state that the maximum amplitude is + + +
    + +$$ +\begin{equation} +x_{\rm max}\approx\frac{F_0}{2m\beta \omega_0}. +\label{_auto14} \tag{23} +\end{equation} +$$ + +$$ +\begin{eqnarray} +\frac{4\omega^2\beta^2}{(\omega_0^2-\omega^2)^2+4\omega^2\beta^2}=\frac{1}{2}. +\end{eqnarray} +$$ + +For small damping this occurs when $\omega=\omega_0\pm \beta$, so the $FWHM\approx 2\beta$. For the purposes of tuning to a specific frequency, one wants the width to be as small as possible. The ratio of $\omega_0$ to $FWHM$ is known as the {\it quality} factor, or $Q$ factor, + + +
    + +$$ +\begin{equation} +Q\equiv \frac{\omega_0}{2\beta}. +\label{_auto15} \tag{24} +\end{equation} +$$ + +## Numerical Studies of Driven Oscillations + +Solving the problem of driven oscillations numerically gives us much +more flexibility to study different types of driving forces. We can +reuse our earlier code by simply adding a driving force. If we stay in +the $x$-direction only this can be easily done by adding a term +$F_{\mathrm{ext}}(x,t)$. Note that we have kept it rather general +here, allowing for both a spatial and a temporal dependence. + +Before we dive into the code, we need to briefly remind ourselves +about the equations we started with for the case with damping, namely + +$$ +m\frac{d^2x}{dt^2} + b\frac{dx}{dt}+kx(t) =0, +$$ + +with no external force applied to the system. + +Let us now for simplicty assume that our external force is given by + +$$ +F_{\mathrm{ext}}(t) = F_0\cos{(\omega t)}, +$$ + +where $F_0$ is a constant (what is its dimension?) and $\omega$ is the frequency of the applied external driving force. +**Small question:** would you expect energy to be conserved now? + + +Introducing the external force into our lovely differential equation +and dividing by $m$ and introducing $\omega_0^2=\sqrt{k/m}$ we have + +$$ +\frac{d^2x}{dt^2} + \frac{b}{m}\frac{dx}{dt}+\omega_0^2x(t) =\frac{F_0}{m}\cos{(\omega t)}, +$$ + +Thereafter we introduce a dimensionless time $\tau = t\omega_0$ +and a dimensionless frequency $\tilde{\omega}=\omega/\omega_0$. We have then + +$$ +\frac{d^2x}{d\tau^2} + \frac{b}{m\omega_0}\frac{dx}{d\tau}+x(\tau) =\frac{F_0}{m\omega_0^2}\cos{(\tilde{\omega}\tau)}, +$$ + +Introducing a new amplitude $\tilde{F} =F_0/(m\omega_0^2)$ (check dimensionality again) we have + +$$ +\frac{d^2x}{d\tau^2} + \frac{b}{m\omega_0}\frac{dx}{d\tau}+x(\tau) =\tilde{F}\cos{(\tilde{\omega}\tau)}. +$$ + +Our final step, as we did in the case of various types of damping, is +to define $\gamma = b/(2m\omega_0)$ and rewrite our equations as + +$$ +\frac{d^2x}{d\tau^2} + 2\gamma\frac{dx}{d\tau}+x(\tau) =\tilde{F}\cos{(\tilde{\omega}\tau)}. +$$ + +This is the equation we will code below using the Euler-Cromer method. + +DeltaT = 0.001 +#set up arrays +tfinal = 20 # in years +n = ceil(tfinal/DeltaT) +# set up arrays for t, v, and x +t = np.zeros(n) +v = np.zeros(n) +x = np.zeros(n) +# Initial conditions as one-dimensional arrays of time +x0 = 1.0 +v0 = 0.0 +x[0] = x0 +v[0] = v0 +gamma = 0.2 +Omegatilde = 0.5 +Ftilde = 1.0 +# Start integrating using Euler-Cromer's method +for i in range(n-1): + # Set up the acceleration + # Here you could have defined your own function for this + a = -2*gamma*v[i]-x[i]+Ftilde*cos(t[i]*Omegatilde) + # update velocity, time and position + v[i+1] = v[i] + DeltaT*a + x[i+1] = x[i] + DeltaT*v[i+1] + t[i+1] = t[i] + DeltaT +# Plot position as function of time +fig, ax = plt.subplots() +ax.set_ylabel('x[m]') +ax.set_xlabel('t[s]') +ax.plot(t, x) +fig.tight_layout() +save_fig("ForcedBlockEulerCromer") +plt.show() + +In the above example we have focused on the Euler-Cromer method. This +method has a local truncation error which is proportional to $\Delta t^2$ +and thereby a global error which is proportional to $\Delta t$. +We can improve this by using the Runge-Kutta family of +methods. The widely popular Runge-Kutta to fourth order or just **RK4** +has indeed a much better truncation error. The RK4 method has a global +error which is proportional to $\Delta t$. + +Let us revisit this method and see how we can implement it for the above example. + + + +## Differential Equations, Runge-Kutta methods + +Runge-Kutta (RK) methods are based on Taylor expansion formulae, but yield +in general better algorithms for solutions of an ordinary differential equation. +The basic philosophy is that it provides an intermediate step in the computation of $y_{i+1}$. + +To see this, consider first the following definitions + + +
    + +$$ +\begin{equation} +\frac{dy}{dt}=f(t,y), +\label{_auto16} \tag{25} +\end{equation} +$$ + +and + + +
    + +$$ +\begin{equation} +y(t)=\int f(t,y) dt, +\label{_auto17} \tag{26} +\end{equation} +$$ + +and + + +
    + +$$ +\begin{equation} +y_{i+1}=y_i+ \int_{t_i}^{t_{i+1}} f(t,y) dt. +\label{_auto18} \tag{27} +\end{equation} +$$ + +To demonstrate the philosophy behind RK methods, let us consider +the second-order RK method, RK2. +The first approximation consists in Taylor expanding $f(t,y)$ +around the center of the integration interval $t_i$ to $t_{i+1}$, +that is, at $t_i+h/2$, $h$ being the step. +Using the midpoint formula for an integral, +defining $y(t_i+h/2) = y_{i+1/2}$ and +$t_i+h/2 = t_{i+1/2}$, we obtain + + +
    + +$$ +\begin{equation} +\int_{t_i}^{t_{i+1}} f(t,y) dt \approx hf(t_{i+1/2},y_{i+1/2}) +O(h^3). +\label{_auto19} \tag{28} +\end{equation} +$$ + +This means in turn that we have + + +
    + +$$ +\begin{equation} +y_{i+1}=y_i + hf(t_{i+1/2},y_{i+1/2}) +O(h^3). +\label{_auto20} \tag{29} +\end{equation} +$$ + +However, we do not know the value of $y_{i+1/2}$. Here comes thus the next approximation, namely, we use Euler's +method to approximate $y_{i+1/2}$. We have then + + +
    + +$$ +\begin{equation} +y_{(i+1/2)}=y_i + \frac{h}{2}\frac{dy}{dt}=y(t_i) + \frac{h}{2}f(t_i,y_i). +\label{_auto21} \tag{30} +\end{equation} +$$ + +This means that we can define the following algorithm for +the second-order Runge-Kutta method, RK2. + +6 +0 + +< +< +< +! +! +M +A +T +H +_ +B +L +O +C +K + + +
    + +$$ +\begin{equation} +k_2=hf(t_{i+1/2},y_i+k_1/2), +\label{_auto23} \tag{32} +\end{equation} +$$ + +with the final value + + +
    + +$$ +\begin{equation} +y_{i+i}\approx y_i + k_2 +O(h^3). +\label{_auto24} \tag{33} +\end{equation} +$$ + +The difference between the previous one-step methods +is that we now need an intermediate step in our evaluation, +namely $t_i+h/2 = t_{(i+1/2)}$ where we evaluate the derivative $f$. +This involves more operations, but the gain is a better stability +in the solution. + +The fourth-order Runge-Kutta, RK4, has the following algorithm + +6 +3 + +< +< +< +! +! +M +A +T +H +_ +B +L +O +C +K + +$$ +k_3=hf(t_i+h/2,y_i+k_2/2)\hspace{0.5cm} k_4=hf(t_i+h,y_i+k_3) +$$ + +with the final result + +$$ +y_{i+1}=y_i +\frac{1}{6}\left( k_1 +2k_2+2k_3+k_4\right). +$$ + +Thus, the algorithm consists in first calculating $k_1$ +with $t_i$, $y_1$ and $f$ as inputs. Thereafter, we increase the step +size by $h/2$ and calculate $k_2$, then $k_3$ and finally $k_4$. The global error goes as $O(h^4)$. + + +However, at this stage, if we keep adding different methods in our +main program, the code will quickly become messy and ugly. Before we +proceed thus, we will now introduce functions that enbody the various +methods for solving differential equations. This means that we can +separate out these methods in own functions and files (and later as classes and more +generic functions) and simply call them when needed. Similarly, we +could easily encapsulate various forces or other quantities of +interest in terms of functions. To see this, let us bring up the code +we developed above for the simple sliding block, but now only with the simple forward Euler method. We introduce +two functions, one for the simple Euler method and one for the +force. + +Note that here the forward Euler method does not know the specific force function to be called. +It receives just an input the name. We can easily change the force by adding another function. + +def ForwardEuler(v,x,t,n,Force): + for i in range(n-1): + v[i+1] = v[i] + DeltaT*Force(v[i],x[i],t[i]) + x[i+1] = x[i] + DeltaT*v[i] + t[i+1] = t[i] + DeltaT + +def SpringForce(v,x,t): +# note here that we have divided by mass and we return the acceleration + return -2*gamma*v-x+Ftilde*cos(t*Omegatilde) + +It is easy to add a new method like the Euler-Cromer + +def ForwardEulerCromer(v,x,t,n,Force): + for i in range(n-1): + a = Force(v[i],x[i],t[i]) + v[i+1] = v[i] + DeltaT*a + x[i+1] = x[i] + DeltaT*v[i+1] + t[i+1] = t[i] + DeltaT + +and the Velocity Verlet method (be careful with time-dependence here, it is not an ideal method for non-conservative forces)) + +def VelocityVerlet(v,x,t,n,Force): + for i in range(n-1): + a = Force(v[i],x[i],t[i]) + x[i+1] = x[i] + DeltaT*v[i]+0.5*a + anew = Force(v[i],x[i+1],t[i+1]) + v[i+1] = v[i] + 0.5*DeltaT*(a+anew) + t[i+1] = t[i] + DeltaT + +Finally, we can now add the Runge-Kutta2 method via a new function + +def RK2(v,x,t,n,Force): + for i in range(n-1): +# Setting up k1 + k1x = DeltaT*v[i] + k1v = DeltaT*Force(v[i],x[i],t[i]) +# Setting up k2 + vv = v[i]+k1v*0.5 + xx = x[i]+k1x*0.5 + k2x = DeltaT*vv + k2v = DeltaT*Force(vv,xx,t[i]+DeltaT*0.5) +# Final result + x[i+1] = x[i]+k2x + v[i+1] = v[i]+k2v + t[i+1] = t[i]+DeltaT + +Finally, we can now add the Runge-Kutta2 method via a new function + +def RK4(v,x,t,n,Force): + for i in range(n-1): +# Setting up k1 + k1x = DeltaT*v[i] + k1v = DeltaT*Force(v[i],x[i],t[i]) +# Setting up k2 + vv = v[i]+k1v*0.5 + xx = x[i]+k1x*0.5 + k2x = DeltaT*vv + k2v = DeltaT*Force(vv,xx,t[i]+DeltaT*0.5) +# Setting up k3 + vv = v[i]+k2v*0.5 + xx = x[i]+k2x*0.5 + k3x = DeltaT*vv + k3v = DeltaT*Force(vv,xx,t[i]+DeltaT*0.5) +# Setting up k4 + vv = v[i]+k3v + xx = x[i]+k3x + k4x = DeltaT*vv + k4v = DeltaT*Force(vv,xx,t[i]+DeltaT) +# Final result + x[i+1] = x[i]+(k1x+2*k2x+2*k3x+k4x)/6. + v[i+1] = v[i]+(k1v+2*k2v+2*k3v+k4v)/6. + t[i+1] = t[i] + DeltaT + +The Runge-Kutta family of methods are particularly useful when we have a time-dependent acceleration. +If we have forces which depend only the spatial degrees of freedom (no velocity and/or time-dependence), then energy conserving methods like the Velocity Verlet or the Euler-Cromer method are preferred. As soon as we introduce an explicit time-dependence and/or add dissipitave forces like friction or air resistance, then methods like the family of Runge-Kutta methods are well suited for this. +The code below uses the Runge-Kutta4 methods. + +DeltaT = 0.001 +#set up arrays +tfinal = 20 # in years +n = ceil(tfinal/DeltaT) +# set up arrays for t, v, and x +t = np.zeros(n) +v = np.zeros(n) +x = np.zeros(n) +# Initial conditions (can change to more than one dim) +x0 = 1.0 +v0 = 0.0 +x[0] = x0 +v[0] = v0 +gamma = 0.2 +Omegatilde = 0.5 +Ftilde = 1.0 +# Start integrating using Euler's method +# Note that we define the force function as a SpringForce +RK4(v,x,t,n,SpringForce) + +# Plot position as function of time +fig, ax = plt.subplots() +ax.set_ylabel('x[m]') +ax.set_xlabel('t[s]') +ax.plot(t, x) +fig.tight_layout() +save_fig("ForcedBlockRK4") +plt.show() + +## Principle of Superposition and Periodic Forces (Fourier Transforms) + +If one has several driving forces, $F(t)=\sum_n F_n(t)$, one can find +the particular solution to each $F_n$, $x_{pn}(t)$, and the particular +solution for the entire driving force is + + +
    + +$$ +\begin{equation} +x_p(t)=\sum_nx_{pn}(t). +\label{_auto25} \tag{34} +\end{equation} +$$ + +This is known as the principal of superposition. It only applies when +the homogenous equation is linear. If there were an anharmonic term +such as $x^3$ in the homogenous equation, then when one summed various +solutions, $x=(\sum_n x_n)^2$, one would get cross +terms. Superposition is especially useful when $F(t)$ can be written +as a sum of sinusoidal terms, because the solutions for each +sinusoidal (sine or cosine) term is analytic, as we saw above. + +Driving forces are often periodic, even when they are not +sinusoidal. Periodicity implies that for some time $\tau$ + +$$ +\begin{eqnarray} +F(t+\tau)=F(t). +\end{eqnarray} +$$ + +One example of a non-sinusoidal periodic force is a square wave. Many +components in electric circuits are non-linear, e.g. diodes, which +makes many wave forms non-sinusoidal even when the circuits are being +driven by purely sinusoidal sources. + +The code here shows a typical example of such a square wave generated using the functionality included in the **scipy** Python package. We have used a period of $\tau=0.2$. + +import numpy as np +import math +from scipy import signal +import matplotlib.pyplot as plt + +# number of points +n = 500 +# start and final times +t0 = 0.0 +tn = 1.0 +# Period +t = np.linspace(t0, tn, n, endpoint=False) +SqrSignal = np.zeros(n) +SqrSignal = 1.0+signal.square(2*np.pi*5*t) +plt.plot(t, SqrSignal) +plt.ylim(-0.5, 2.5) +plt.show() + +For the sinusoidal example studied in the previous subsections the +period is $\tau=2\pi/\omega$. However, higher harmonics can also +satisfy the periodicity requirement. In general, any force that +satisfies the periodicity requirement can be expressed as a sum over +harmonics, + + +
    + +$$ +\begin{equation} +F(t)=\frac{f_0}{2}+\sum_{n>0} f_n\cos(2n\pi t/\tau)+g_n\sin(2n\pi t/\tau). +\label{_auto26} \tag{35} +\end{equation} +$$ + +From the previous subsection, one can write down the answer for +$x_{pn}(t)$, by substituting $f_n/m$ or $g_n/m$ for $F_0/m$ into Eq.s +([20](#eq:fastdriven1)) or ([21](#eq:fastdriven2)) respectively. By +writing each factor $2n\pi t/\tau$ as $n\omega t$, with $\omega\equiv +2\pi/\tau$, + + +
    + +$$ +\begin{equation} +\label{eq:fourierdef1} \tag{36} +F(t)=\frac{f_0}{2}+\sum_{n>0}f_n\cos(n\omega t)+g_n\sin(n\omega t). +\end{equation} +$$ + +The solutions for $x(t)$ then come from replacing $\omega$ with +$n\omega$ for each term in the particular solution in Equations +([13](#eq:partform)) and ([16](#eq:Ddrive)), + +$$ +\begin{eqnarray} +x_p(t)&=&\frac{f_0}{2k}+\sum_{n>0} \alpha_n\cos(n\omega t-\delta_n)+\beta_n\sin(n\omega t-\delta_n),\\ +\nonumber +\alpha_n&=&\frac{f_n/m}{\sqrt{((n\omega)^2-\omega_0^2)+4\beta^2n^2\omega^2}},\\ +\nonumber +\beta_n&=&\frac{g_n/m}{\sqrt{((n\omega)^2-\omega_0^2)+4\beta^2n^2\omega^2}},\\ +\nonumber +\delta_n&=&\tan^{-1}\left(\frac{2\beta n\omega}{\omega_0^2-n^2\omega^2}\right). +\end{eqnarray} +$$ + +Because the forces have been applied for a long time, any non-zero +damping eliminates the homogenous parts of the solution, so one need +only consider the particular solution for each $n$. + +The problem will considered solved if one can find expressions for the +coefficients $f_n$ and $g_n$, even though the solutions are expressed +as an infinite sum. The coefficients can be extracted from the +function $F(t)$ by + + +
    + +$$ +\begin{eqnarray} +\label{eq:fourierdef2} \tag{37} +f_n&=&\frac{2}{\tau}\int_{-\tau/2}^{\tau/2} dt~F(t)\cos(2n\pi t/\tau),\\ +\nonumber +g_n&=&\frac{2}{\tau}\int_{-\tau/2}^{\tau/2} dt~F(t)\sin(2n\pi t/\tau). +\end{eqnarray} +$$ + +To check the consistency of these expressions and to verify +Eq. ([37](#eq:fourierdef2)), one can insert the expansion of $F(t)$ in +Eq. ([36](#eq:fourierdef1)) into the expression for the coefficients in +Eq. ([37](#eq:fourierdef2)) and see whether + +$$ +\begin{eqnarray} +f_n&=?&\frac{2}{\tau}\int_{-\tau/2}^{\tau/2} dt~\left\{ +\frac{f_0}{2}+\sum_{m>0}f_m\cos(m\omega t)+g_m\sin(m\omega t) +\right\}\cos(n\omega t). +\end{eqnarray} +$$ + +Immediately, one can throw away all the terms with $g_m$ because they +convolute an even and an odd function. The term with $f_0/2$ +disappears because $\cos(n\omega t)$ is equally positive and negative +over the interval and will integrate to zero. For all the terms +$f_m\cos(m\omega t)$ appearing in the sum, one can use angle addition +formulas to see that $\cos(m\omega t)\cos(n\omega +t)=(1/2)(\cos[(m+n)\omega t]+\cos[(m-n)\omega t]$. This will integrate +to zero unless $m=n$. In that case the $m=n$ term gives + + +
    + +$$ +\begin{equation} +\int_{-\tau/2}^{\tau/2}dt~\cos^2(m\omega t)=\frac{\tau}{2}, +\label{_auto27} \tag{38} +\end{equation} +$$ + +and + +$$ +\begin{eqnarray} +f_n&=?&\frac{2}{\tau}\int_{-\tau/2}^{\tau/2} dt~f_n/2\\ +\nonumber +&=&f_n~\checkmark. +\end{eqnarray} +$$ + +The same method can be used to check for the consistency of $g_n$. + + +Consider the driving force: + + +
    + +$$ +\begin{equation} +F(t)=At/\tau,~~-\tau/2 +
    + +$$ +\begin{eqnarray} +\label{eq:fouriersolution} \tag{40} +g_n&=&\frac{2}{\tau}\int_{-\tau/2}^{\tau/2}dt~\sin(n\omega t) \frac{At}{\tau}\\ +\nonumber +u&=&t,~dv=\sin(n\omega t)dt,~v=-\cos(n\omega t)/(n\omega),\\ +\nonumber +g_n&=&\frac{-2A}{n\omega \tau^2}\int_{-\tau/2}^{\tau/2}dt~\cos(n\omega t) ++\left.2A\frac{-t\cos(n\omega t)}{n\omega\tau^2}\right|_{-\tau/2}^{\tau/2}. +\end{eqnarray} +$$ + +The first term is zero because $\cos(n\omega t)$ will be equally +positive and negative over the interval. Using the fact that +$\omega\tau=2\pi$, + +$$ +\begin{eqnarray} +g_n&=&-\frac{2A}{2n\pi}\cos(n\omega\tau/2)\\ +\nonumber +&=&-\frac{A}{n\pi}\cos(n\pi)\\ +\nonumber +&=&\frac{A}{n\pi}(-1)^{n+1}. +\end{eqnarray} +$$ + +## Fourier Series + +More text will come here, chpater 5.7-5.8 of Taylor are discussed +during the lectures. The code here uses the Fourier series discussed +in chapter 5.7 for a square wave signal. The equations for the +coefficients are are discussed in Taylor section 5.7, see Example +5.4. The code here visualizes the various approximations given by +Fourier series compared with a square wave with period $T=0.2$, witth +$0.1$ and max value $F=2$. We see that when we increase the number of +components in the Fourier series, the Fourier series approximation gets closes and closes to the square wave signal. + +import numpy as np +import math +from scipy import signal +import matplotlib.pyplot as plt + +# number of points +n = 500 +# start and final times +t0 = 0.0 +tn = 1.0 +# Period +T =0.2 +# Max value of square signal +Fmax= 2.0 +# Width of signal +Width = 0.1 +t = np.linspace(t0, tn, n, endpoint=False) +SqrSignal = np.zeros(n) +FourierSeriesSignal = np.zeros(n) +SqrSignal = 1.0+signal.square(2*np.pi*5*t+np.pi*Width/T) +a0 = Fmax*Width/T +FourierSeriesSignal = a0 +Factor = 2.0*Fmax/np.pi +for i in range(1,500): + FourierSeriesSignal += Factor/(i)*np.sin(np.pi*i*Width/T)*np.cos(i*t*2*np.pi/T) +plt.plot(t, SqrSignal) +plt.plot(t, FourierSeriesSignal) +plt.ylim(-0.5, 2.5) +plt.show() + +## Solving differential equations with Fouries series + +The material here was discussed during the lecture of February 19 and 21. +It is also covered by Taylor in section 5.8. + + + +## Response to Transient Force + +Consider a particle at rest in the bottom of an underdamped harmonic +oscillator, that then feels a sudden impulse, or change in momentum, +$I=F\Delta t$ at $t=0$. This increases the velocity immediately by an +amount $v_0=I/m$ while not changing the position. One can then solve +the trajectory by solving Eq. ([9](#eq:homogsolution)) with initial +conditions $v_0=I/m$ and $x_0=0$. This gives + + +
    + +$$ +\begin{equation} +x(t)=\frac{I}{m\omega'}e^{-\beta t}\sin\omega't, ~~t>0. +\label{_auto29} \tag{41} +\end{equation} +$$ + +Here, $\omega'=\sqrt{\omega_0^2-\beta^2}$. For an impulse $I_i$ that +occurs at time $t_i$ the trajectory would be + + +
    + +$$ +\begin{equation} +x(t)=\frac{I_i}{m\omega'}e^{-\beta (t-t_i)}\sin[\omega'(t-t_i)] \Theta(t-t_i), +\label{_auto30} \tag{42} +\end{equation} +$$ + +where $\Theta(t-t_i)$ is a step function, i.e. $\Theta(x)$ is zero for +$x<0$ and unity for $x>0$. If there were several impulses linear +superposition tells us that we can sum over each contribution, + + +
    + +$$ +\begin{equation} +x(t)=\sum_i\frac{I_i}{m\omega'}e^{-\beta(t-t_i)}\sin[\omega'(t-t_i)]\Theta(t-t_i) +\label{_auto31} \tag{43} +\end{equation} +$$ + +Now one can consider a series of impulses at times separated by +$\Delta t$, where each impulse is given by $F_i\Delta t$. The sum +above now becomes an integral, + + +
    + +$$ +\begin{eqnarray}\label{eq:Greeny} \tag{44} +x(t)&=&\int_{-\infty}^\infty dt'~F(t')\frac{e^{-\beta(t-t')}\sin[\omega'(t-t')]}{m\omega'}\Theta(t-t')\\ +\nonumber +&=&\int_{-\infty}^\infty dt'~F(t')G(t-t'),\\ +\nonumber +G(\Delta t)&=&\frac{e^{-\beta\Delta t}\sin[\omega' \Delta t]}{m\omega'}\Theta(\Delta t) +\end{eqnarray} +$$ + +The quantity +$e^{-\beta(t-t')}\sin[\omega'(t-t')]/m\omega'\Theta(t-t')$ is called a +Green's function, $G(t-t')$. It describes the response at $t$ due to a +force applied at a time $t'$, and is a function of $t-t'$. The step +function ensures that the response does not occur before the force is +applied. One should remember that the form for $G$ would change if the +oscillator were either critically- or over-damped. + +When performing the integral in Eq. ([44](#eq:Greeny)) one can use +angle addition formulas to factor out the part with the $t'$ +dependence in the integrand, + + +
    + +$$ +\begin{eqnarray} +\label{eq:Greeny2} \tag{45} +x(t)&=&\frac{1}{m\omega'}e^{-\beta t}\left[I_c(t)\sin(\omega't)-I_s(t)\cos(\omega't)\right],\\ +\nonumber +I_c(t)&\equiv&\int_{-\infty}^t dt'~F(t')e^{\beta t'}\cos(\omega't'),\\ +\nonumber +I_s(t)&\equiv&\int_{-\infty}^t dt'~F(t')e^{\beta t'}\sin(\omega't'). +\end{eqnarray} +$$ + +If the time $t$ is beyond any time at which the force acts, +$F(t'>t)=0$, the coefficients $I_c$ and $I_s$ become independent of +$t$. + + +Consider an undamped oscillator ($\beta\rightarrow 0$), with +characteristic frequency $\omega_0$ and mass $m$, that is at rest +until it feels a force described by a Gaussian form, + +$$ +\begin{eqnarray*} +F(t)&=&F_0 \exp\left\{\frac{-t^2}{2\tau^2}\right\}. +\end{eqnarray*} +$$ + +For large times ($t>>\tau$), where the force has died off, find +$x(t)$.\\ Solve for the coefficients $I_c$ and $I_s$ in +Eq. ([45](#eq:Greeny2)). Because the Gaussian is an even function, +$I_s=0$, and one need only solve for $I_c$, + +$$ +\begin{eqnarray*} +I_c&=&F_0\int_{-\infty}^\infty dt'~e^{-t^{\prime 2}/(2\tau^2)}\cos(\omega_0 t')\\ +&=&\Re F_0 \int_{-\infty}^\infty dt'~e^{-t^{\prime 2}/(2\tau^2)}e^{i\omega_0 t'}\\ +&=&\Re F_0 \int_{-\infty}^\infty dt'~e^{-(t'-i\omega_0\tau^2)^2/(2\tau^2)}e^{-\omega_0^2\tau^2/2}\\ +&=&F_0\tau \sqrt{2\pi} e^{-\omega_0^2\tau^2/2}. +\end{eqnarray*} +$$ + +The third step involved completing the square, and the final step used the fact that the integral + +$$ +\begin{eqnarray*} +\int_{-\infty}^\infty dx~e^{-x^2/2}&=&\sqrt{2\pi}. +\end{eqnarray*} +$$ + +To see that this integral is true, consider the square of the integral, which you can change to polar coordinates, + +$$ +\begin{eqnarray*} +I&=&\int_{-\infty}^\infty dx~e^{-x^2/2}\\ +I^2&=&\int_{-\infty}^\infty dxdy~e^{-(x^2+y^2)/2}\\ +&=&2\pi\int_0^\infty rdr~e^{-r^2/2}\\ +&=&2\pi. +\end{eqnarray*} +$$ + +Finally, the expression for $x$ from Eq. ([45](#eq:Greeny2)) is + +$$ +\begin{eqnarray*} +x(t>>\tau)&=&\frac{F_0\tau}{m\omega_0} \sqrt{2\pi} e^{-\omega_0^2\tau^2/2}\sin(\omega_0t). +\end{eqnarray*} +$$ + +## The classical pendulum and scaling the equations + +Let us end our discussion of oscillations with another classical case, the pendulum. + +The angular equation of motion of the pendulum is given by +Newton's equation and with no external force it reads + + +
    + +$$ +\begin{equation} + ml\frac{d^2\theta}{dt^2}+mgsin(\theta)=0, +\label{_auto32} \tag{46} +\end{equation} +$$ + +with an angular velocity and acceleration given by + + +
    + +$$ +\begin{equation} + v=l\frac{d\theta}{dt}, +\label{_auto33} \tag{47} +\end{equation} +$$ + +and + + +
    + +$$ +\begin{equation} + a=l\frac{d^2\theta}{dt^2}. +\label{_auto34} \tag{48} +\end{equation} +$$ + +We do however expect that the motion will gradually come to an end due a viscous drag torque acting on the pendulum. +In the presence of the drag, the above equation becomes + + +
    + +$$ +\begin{equation} + ml\frac{d^2\theta}{dt^2}+\nu\frac{d\theta}{dt} +mgsin(\theta)=0, \label{eq:pend1} \tag{49} +\end{equation} +$$ + +where $\nu$ is now a positive constant parameterizing the viscosity +of the medium in question. In order to maintain the motion against +viscosity, it is necessary to add some external driving force. +We choose here a periodic driving force. The last equation becomes then + + +
    + +$$ +\begin{equation} + ml\frac{d^2\theta}{dt^2}+\nu\frac{d\theta}{dt} +mgsin(\theta)=Asin(\omega t), \label{eq:pend2} \tag{50} +\end{equation} +$$ + +with $A$ and $\omega$ two constants representing the amplitude and +the angular frequency respectively. The latter is called the driving frequency. + + + +We define + +$$ +\omega_0=\sqrt{g/l}, +$$ + +the so-called natural frequency and the new dimensionless quantities + +$$ +\hat{t}=\omega_0t, +$$ + +with the dimensionless driving frequency + +$$ +\hat{\omega}=\frac{\omega}{\omega_0}, +$$ + +and introducing the quantity $Q$, called the *quality factor*, + +$$ +Q=\frac{mg}{\omega_0\nu}, +$$ + +and the dimensionless amplitude + +$$ +\hat{A}=\frac{A}{mg} +$$ + +## More on the Pendulum + +We have + +$$ +\frac{d^2\theta}{d\hat{t}^2}+\frac{1}{Q}\frac{d\theta}{d\hat{t}} + +sin(\theta)=\hat{A}cos(\hat{\omega}\hat{t}). +$$ + +This equation can in turn be recast in terms of two coupled first-order differential equations as follows + +$$ +\frac{d\theta}{d\hat{t}}=\hat{v}, +$$ + +and + +$$ +\frac{d\hat{v}}{d\hat{t}}=-\frac{\hat{v}}{Q}-sin(\theta)+\hat{A}cos(\hat{\omega}\hat{t}). +$$ + +These are the equations to be solved. The factor $Q$ represents the +number of oscillations of the undriven system that must occur before +its energy is significantly reduced due to the viscous drag. The +amplitude $\hat{A}$ is measured in units of the maximum possible +gravitational torque while $\hat{\omega}$ is the angular frequency of +the external torque measured in units of the pendulum's natural +frequency. \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter5_110_0.png b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter5_110_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f8c4c2a3ebd5abb8a0fe8df5cb82e5c27f366938 GIT binary patch literal 20655 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6.ipynb b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6.ipynb new file mode 100644 index 000000000..5a220a1f2 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6.ipynb @@ -0,0 +1,2604 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Two-body Problems\n", + "\n", + "\n", + "The gravitational potential energy and forces involving two masses $a$ and $b$ are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "U_{ab}&=&-\\frac{Gm_am_b}{|\\boldsymbol{r}_a-\\boldsymbol{r}_b|},\\\\\n", + "\\nonumber\n", + "F_{ba}&=&-\\frac{Gm_am_b}{|\\boldsymbol{r}_a-\\boldsymbol{r}_b|^2}\\hat{r}_{ab},\\\\\n", + "\\nonumber\n", + "\\hat{r}_{ab}&=&\\frac{\\boldsymbol{r}_b-\\boldsymbol{r}_a}{|\\boldsymbol{r}_a-\\boldsymbol{r}_b|}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here $G=6.67\\times 10^{-11}$ Nm$^2$/kg$^2$, and $F_{ba}$ is the force\n", + "on $b$ due to $a$. By inspection, one can see that the force on $b$\n", + "due to $a$ and the force on $a$ due to $b$ are equal and opposite. The\n", + "net potential energy for a large number of masses would be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "U=\\sum_{a\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:radialeqofmotion} \\tag{2}\n", + "\\frac{d}{dt}r^2&=&\\frac{d}{dt}(x^2+y^2)=2x\\dot{x}+2y\\dot{y}=2r\\dot{r},\\\\\n", + "\\nonumber\n", + "\\dot{r}&=&\\frac{x}{r}\\dot{x}+\\frac{y}{r}\\dot{y},\\\\\n", + "\\nonumber\n", + "\\ddot{r}&=&\\frac{x}{r}\\ddot{x}+\\frac{y}{r}\\ddot{y}\n", + "+\\frac{\\dot{x}^2+\\dot{y}^2}{r}\n", + "-\\frac{\\dot{r}^2}{r}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Recognizing that the numerator of the third term is the velocity squared, and that it can be written in polar coordinates," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "v^2=\\dot{x}^2+\\dot{y}^2=\\dot{r}^2+r^2\\dot{\\theta}^2,\n", + "\\label{_auto2} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "one can write $\\ddot{r}$ as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:radialeqofmotion2} \\tag{4}\n", + "\\ddot{r}&=&\\frac{F_x\\cos\\theta+F_y\\sin\\theta}{m}+\\frac{\\dot{r}^2+r^2\\dot{\\theta}^2}{r}-\\frac{\\dot{r}^2}{r}\\\\\n", + "\\nonumber\n", + "&=&\\frac{F}{m}+\\frac{r^2\\dot{\\theta}^2}{r}\\\\\n", + "\\nonumber\n", + "m\\ddot{r}&=&F+\\frac{L^2}{mr^3}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This derivation used the fact that the force was radial,\n", + "$F=F_r=F_x\\cos\\theta+F_y\\sin\\theta$, and that angular momentum is\n", + "$L=mrv_{\\theta}=mr^2\\dot{\\theta}$. The term $L^2/mr^3=mv^2/r$ behaves\n", + "like an additional force. Sometimes this is referred to as a\n", + "centrifugal force, but it is not a force. Instead, it is the\n", + "consequence of considering the motion in a rotating (and therefore\n", + "accelerating) frame.\n", + "\n", + "Now, we switch to the particular case of an attractive inverse square\n", + "force, $F=-\\alpha/r^2$, and show that the trajectory, $r(\\theta)$, is\n", + "an ellipse. To do this we transform derivatives w.r.t. time to\n", + "derivatives w.r.t. $\\theta$ using the chain rule combined with angular\n", + "momentum conservation, $\\dot{\\theta}=L/mr^2$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:rtotheta} \\tag{5}\n", + "\\dot{r}&=&\\frac{dr}{d\\theta}\\dot{\\theta}=\\frac{dr}{d\\theta}\\frac{L}{mr^2},\\\\\n", + "\\nonumber\n", + "\\ddot{r}&=&\\frac{d^2r}{d\\theta^2}\\dot{\\theta}^2\n", + "+\\frac{dr}{d\\theta}\\left(\\frac{d}{dr}\\frac{L}{mr^2}\\right)\\dot{r}\\\\\n", + "\\nonumber\n", + "&=&\\frac{d^2r}{d\\theta^2}\\left(\\frac{L}{mr^2}\\right)^2\n", + "-2\\frac{dr}{d\\theta}\\frac{L}{mr^3}\\dot{r}\\\\\n", + "\\nonumber\n", + "&=&\\frac{d^2r}{d\\theta^2}\\left(\\frac{L}{mr^2}\\right)^2\n", + "-\\frac{2}{r}\\left(\\frac{dr}{d\\theta}\\right)^2\\left(\\frac{L}{mr^2}\\right)^2\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Equating the two expressions for $\\ddot{r}$ in Eq.s ([4](#eq:radialeqofmotion2)) and ([5](#eq:rtotheta)) eliminates all the derivatives w.r.t. time, and provides a differential equation with only derivatives w.r.t. $\\theta$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:rdotdot} \\tag{6}\n", + "\\frac{d^2r}{d\\theta^2}\\left(\\frac{L}{mr^2}\\right)^2\n", + "-\\frac{2}{r}\\left(\\frac{dr}{d\\theta}\\right)^2\\left(\\frac{L}{mr^2}\\right)^2\n", + "=\\frac{F}{m}+\\frac{L^2}{m^2r^3},\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "that when solved yields the trajectory, i.e. $r(\\theta)$. Up to this\n", + "point the expressions work for any radial force, not just forces that\n", + "fall as $1/r^2$.\n", + "\n", + "The trick to simplifying this differential equation for the inverse\n", + "square problems is to make a substitution, $u\\equiv 1/r$, and rewrite\n", + "the differential equation for $u(\\theta)$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "r&=&1/u,\\\\\n", + "\\nonumber\n", + "\\frac{dr}{d\\theta}&=&-\\frac{1}{u^2}\\frac{du}{d\\theta},\\\\\n", + "\\nonumber\n", + "\\frac{d^2r}{d\\theta^2}&=&\\frac{2}{u^3}\\left(\\frac{du}{d\\theta}\\right)^2-\\frac{1}{u^2}\\frac{d^2u}{d\\theta^2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plugging these expressions into Eq. ([6](#eq:rdotdot)) gives an\n", + "expression in terms of $u$, $du/d\\theta$, and $d^2u/d\\theta^2$. After\n", + "some tedious algebra," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d^2u}{d\\theta^2}=-u-\\frac{F m}{L^2u^2}.\n", + "\\label{_auto3} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the attractive inverse square law force, $F=-\\alpha u^2$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d^2u}{d\\theta^2}=-u+\\frac{m\\alpha}{L^2}.\n", + "\\label{_auto4} \\tag{8}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The solution has two arbitrary constants, $A$ and $\\theta_0$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:Ctrajectory} \\tag{9}\n", + "u&=&\\frac{m\\alpha}{L^2}+A\\cos(\\theta-\\theta_0),\\\\\n", + "\\nonumber\n", + "r&=&\\frac{1}{(m\\alpha/L^2)+A\\cos(\\theta-\\theta_0)}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The radius will be at a minimum when $\\theta=\\theta_0$ and at a\n", + "maximum when $\\theta=\\theta_0+\\pi$. The constant $A$ is related to the\n", + "eccentricity of the orbit. When $A=0$ the radius is a constant\n", + "$r=L^2/(m\\alpha)$, and the motion is circular. If one solved the\n", + "expression $mv^2/r=-\\alpha/r^2$ for a circular orbit, using the\n", + "substitution $v=L/(mr)$, one would reproduce the expression\n", + "$r=L^2/(m\\alpha)$.\n", + "\n", + "The form describing the elliptical trajectory in\n", + "Eq. ([9](#eq:Ctrajectory)) can be identified as an ellipse with one\n", + "focus being the center of the ellipse by considering the definition of\n", + "an ellipse as being the points such that the sum of the two distances\n", + "between the two foci are a constant. Making that distance $2D$, the\n", + "distance between the two foci as $2a$, and putting one focus at the\n", + "origin," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "2D&=&r+\\sqrt{(r\\cos\\theta-2a)^2+r^2\\sin^2\\theta},\\\\\n", + "\\nonumber\n", + "4D^2+r^2-4Dr&=&r^2+4a^2-4ar\\cos\\theta,\\\\\n", + "\\nonumber\n", + "r&=&\\frac{D^2-a^2}{D+a\\cos\\theta}=\\frac{1}{D/(D^2-a^2)-a\\cos\\theta/(D^2-a^2)}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By inspection, this is the same form as Eq. ([9](#eq:Ctrajectory)) with $D/(D^2-a^2)=m\\alpha/L^2$ and $a/(D^2-a^2)=A$.\n", + "\n", + "\n", + "Let us remind ourselves about what an ellipse is before we proceed." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter6_37_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "\n", + "import numpy as np\n", + "from matplotlib import pyplot as plt\n", + "from math import pi\n", + "\n", + "u=1. #x-position of the center\n", + "v=0.5 #y-position of the center\n", + "a=2. #radius on the x-axis\n", + "b=1.5 #radius on the y-axis\n", + "\n", + "t = np.linspace(0, 2*pi, 100)\n", + "plt.plot( u+a*np.cos(t) , v+b*np.sin(t) )\n", + "plt.grid(color='lightgray',linestyle='--')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Effective or Centrifugal Potential\n", + "\n", + "The total energy of a particle is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "E&=&U(r)+\\frac{1}{2}mv_\\theta^2+\\frac{1}{2}m\\dot{r}^2\\\\\n", + "\\nonumber\n", + "&=&U(r)+\\frac{1}{2}mr^2\\dot{\\theta}^2+\\frac{1}{2}m\\dot{r}^2\\\\\n", + "\\nonumber\n", + "&=&U(r)+\\frac{L^2}{2mr^2}+\\frac{1}{2}m\\dot{r}^2.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The second term then contributes to the energy like an additional\n", + "repulsive potential. The term is sometimes referred to as the\n", + "\"centrifugal\" potential, even though it is actually the kinetic energy\n", + "of the angular motion. Combined with $U(r)$, it is sometimes referred\n", + "to as the \"effective\" potential," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "U_{\\rm eff}(r)&=&U(r)+\\frac{L^2}{2mr^2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that if one treats the effective potential like a real potential, one would expect to be able to generate an effective force," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "F_{\\rm eff}&=&-\\frac{d}{dr}U(r) -\\frac{d}{dr}\\frac{L^2}{2mr^2}\\\\\n", + "\\nonumber\n", + "&=&F(r)+\\frac{L^2}{mr^3}=F(r)+m\\frac{v_\\perp^2}{r},\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which is indeed matches the form for $m\\ddot{r}$ in Eq. ([4](#eq:radialeqofmotion2)), which included the **centrifugal** force.\n", + "\n", + "The following code plots this effective potential for a simple choice of parameters, with a standard gravitational potential $-\\alpha/r$. Here we have chosen $L=m=\\alpha=1$." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter6_45_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Common imports\n", + "import numpy as np\n", + "from math import *\n", + "import matplotlib.pyplot as plt\n", + "\n", + "Deltax = 0.01\n", + "#set up arrays\n", + "xinitial = 0.3\n", + "xfinal = 5.0\n", + "alpha = 1.0 # spring constant\n", + "m = 1.0 # mass, you can change these\n", + "AngMom = 1.0 # The angular momentum\n", + "n = ceil((xfinal-xinitial)/Deltax)\n", + "x = np.zeros(n)\n", + "for i in range(n):\n", + " x[i] = xinitial+i*Deltax\n", + "V = np.zeros(n)\n", + "V = -alpha/x+0.5*AngMom*AngMom/(m*x*x)\n", + "# Plot potential\n", + "fig, ax = plt.subplots()\n", + "ax.set_xlabel('r[m]')\n", + "ax.set_ylabel('V[J]')\n", + "ax.plot(x, V)\n", + "fig.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Gravitational force example\n", + "\n", + "Using the above parameters, we can now study the evolution of the system using for example the velocity Verlet method.\n", + "This is done in the code here for an initial radius equal to the minimum of the potential well. We seen then that the radius is always the same and corresponds to a circle (the radius is always constant)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter6_47_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Common imports\n", + "import numpy as np\n", + "import pandas as pd\n", + "from math import *\n", + "import matplotlib.pyplot as plt\n", + "import os\n", + "\n", + "# Where to save the figures and data files\n", + "PROJECT_ROOT_DIR = \"Results\"\n", + "FIGURE_ID = \"Results/FigureFiles\"\n", + "DATA_ID = \"DataFiles/\"\n", + "\n", + "if not os.path.exists(PROJECT_ROOT_DIR):\n", + " os.mkdir(PROJECT_ROOT_DIR)\n", + "\n", + "if not os.path.exists(FIGURE_ID):\n", + " os.makedirs(FIGURE_ID)\n", + "\n", + "if not os.path.exists(DATA_ID):\n", + " os.makedirs(DATA_ID)\n", + "\n", + "def image_path(fig_id):\n", + " return os.path.join(FIGURE_ID, fig_id)\n", + "\n", + "def data_path(dat_id):\n", + " return os.path.join(DATA_ID, dat_id)\n", + "\n", + "def save_fig(fig_id):\n", + " plt.savefig(image_path(fig_id) + \".png\", format='png')\n", + "\n", + "\n", + "# Simple Gravitational Force -alpha/r\n", + " \n", + "DeltaT = 0.01\n", + "#set up arrays \n", + "tfinal = 100.0\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, v and r\n", + "t = np.zeros(n)\n", + "v = np.zeros(n)\n", + "r = np.zeros(n)\n", + "# Constants of the model, setting all variables to one for simplicity\n", + "alpha = 1.0\n", + "AngMom = 1.0 # The angular momentum\n", + "m = 1.0 # scale mass to one\n", + "c1 = AngMom*AngMom/(m*m)\n", + "c2 = AngMom*AngMom/m\n", + "rmin = (AngMom*AngMom/m/alpha)\n", + "# Initial conditions\n", + "r0 = rmin\n", + "v0 = 0.0\n", + "r[0] = r0\n", + "v[0] = v0\n", + "# Start integrating using the Velocity-Verlet method\n", + "for i in range(n-1):\n", + " # Set up acceleration\n", + " a = -alpha/(r[i]**2)+c1/(r[i]**3)\n", + " # update velocity, time and position using the Velocity-Verlet method\n", + " r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a\n", + " anew = -alpha/(r[i+1]**2)+c1/(r[i+1]**3)\n", + " v[i+1] = v[i] + 0.5*DeltaT*(a+anew)\n", + " t[i+1] = t[i] + DeltaT\n", + " # Plot position as function of time\n", + "fig, ax = plt.subplots(2,1)\n", + "ax[0].set_xlabel('time')\n", + "ax[0].set_ylabel('radius')\n", + "ax[0].plot(t,r)\n", + "ax[1].set_xlabel('time')\n", + "ax[1].set_ylabel('Velocity')\n", + "ax[1].plot(t,v)\n", + "save_fig(\"RadialGVV\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Changing the value of the initial position to a value where the energy is positive, leads to an increasing radius with time, a so-called unbound orbit. Choosing on the other hand an initial radius that corresponds to a negative energy and different from the minimum value leads to a radius that oscillates back and forth between two values. \n", + "\n", + "### Harmonic Oscillator in two dimensions\n", + "\n", + "Consider a particle of mass $m$ in a 2-dimensional harmonic oscillator with potential" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "U=\\frac{1}{2}kr^2=\\frac{1}{2}k(x^2+y^2).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the orbit has angular momentum $L$, we can find the radius and angular velocity of the circular orbit as well as the b) the angular frequency of small radial perturbations.\n", + "\n", + "We consider the effective potential. The radius of a circular orbit is at the minimum of the potential (where the effective force is zero).\n", + "The potential is plotted here with the parameters $k=m=0.1$ and $L=1.0$." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter6_51_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Common imports\n", + "import numpy as np\n", + "from math import *\n", + "import matplotlib.pyplot as plt\n", + "\n", + "Deltax = 0.01\n", + "#set up arrays\n", + "xinitial = 1.0\n", + "xfinal = 5.0\n", + "k = 0.1 # spring constant\n", + "m = 0.1 # mass, you can change these\n", + "AngMom = 1.0 # The angular momentum\n", + "n = ceil((xfinal-xinitial)/Deltax)\n", + "x = np.zeros(n)\n", + "for i in range(n):\n", + " x[i] = xinitial+i*Deltax\n", + "V = np.zeros(n)\n", + "V = 0.5*k*x*x+0.5*AngMom*AngMom/(m*x*x)\n", + "# Plot potential\n", + "fig, ax = plt.subplots()\n", + "ax.set_xlabel('r[m]')\n", + "ax.set_ylabel('V[J]')\n", + "ax.plot(x, V)\n", + "fig.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "U_{\\rm eff}&=&\\frac{1}{2}kr^2+\\frac{L^2}{2mr^2}\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The effective potential looks like that of a harmonic oscillator for\n", + "large $r$, but for small $r$, the centrifugal potential repels the\n", + "particle from the origin. The combination of the two potentials has a\n", + "minimum for at some radius $r_{\\rm min}$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "0&=&kr_{\\rm min}-\\frac{L^2}{mr_{\\rm min}^3},\\\\\n", + "r_{\\rm min}&=&\\left(\\frac{L^2}{mk}\\right)^{1/4},\\\\\n", + "\\dot{\\theta}&=&\\frac{L}{mr_{\\rm min}^2}=\\sqrt{k/m}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For particles at $r_{\\rm min}$ with $\\dot{r}=0$, the particle does not\n", + "accelerate and $r$ stays constant, i.e. a circular orbit. The radius\n", + "of the circular orbit can be adjusted by changing the angular momentum\n", + "$L$.\n", + "\n", + "For the above parameters this minimum is at $r_{\\rm min}=1$.\n", + "\n", + " Now consider small vibrations about $r_{\\rm min}$. The effective spring constant is the curvature of the effective potential." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "k_{\\rm eff}&=&\\left.\\frac{d^2}{dr^2}U_{\\rm eff}(r)\\right|_{r=r_{\\rm min}}=k+\\frac{3L^2}{mr_{\\rm min}^4}\\\\\n", + "&=&4k,\\\\\n", + "\\omega&=&\\sqrt{k_{\\rm eff}/m}=2\\sqrt{k/m}=2\\dot{\\theta}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, the second step used the result of the last step from part\n", + "(a). Because the radius oscillates with twice the angular frequency,\n", + "the orbit has two places where $r$ reaches a minimum in one\n", + "cycle. This differs from the inverse-square force where there is one\n", + "minimum in an orbit. One can show that the orbit for the harmonic\n", + "oscillator is also elliptical, but in this case the center of the\n", + "potential is at the center of the ellipse, not at one of the foci.\n", + "\n", + "The solution is also simple to write down exactly in Cartesian coordinates. The $x$ and $y$ equations of motion separate," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\ddot{x}&=&-kx,\\\\\n", + "\\ddot{y}&=&-ky.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So the general solution can be expressed as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "x&=&A\\cos\\omega_0 t+B\\sin\\omega_0 t,\\\\\n", + "y&=&C\\cos\\omega_0 t+D\\sin\\omega_0 t.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The code here finds the solution for $x$ and $y$ using the code we developed in homework 4." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter6_62_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "DeltaT = 0.01\n", + "#set up arrays \n", + "tfinal = 10.0\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays\n", + "t = np.zeros(n)\n", + "v = np.zeros((n,2))\n", + "r = np.zeros((n,2))\n", + "radius = np.zeros(n)\n", + "# Constants of the model\n", + "k = 0.1 # spring constant\n", + "m = 0.1 # mass, you can change these\n", + "omega02 = sqrt(k/m) # Frequency\n", + "AngMom = 1.0 # The angular momentum\n", + "rmin = (AngMom*AngMom/k/m)**0.25\n", + "# Initial conditions as compact 2-dimensional arrays\n", + "#x0 =rmin*0.5; y0 = sqrt(rmin*rmin-x0*x0)\n", + "x0 = 1.0; y0= 1.0\n", + "r0 = np.array([x0,y0]) \n", + "v0 = np.array([0.0,0.0])\n", + "r[0] = r0\n", + "v[0] = v0\n", + "# Start integrating using the Velocity-Verlet method\n", + "for i in range(n-1):\n", + " # Set up the acceleration\n", + " a = -r[i]*omega02 \n", + " # update velocity, time and position using the Velocity-Verlet method\n", + " r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a\n", + " anew = -r[i+1]*omega02 \n", + " v[i+1] = v[i] + 0.5*DeltaT*(a+anew)\n", + " t[i+1] = t[i] + DeltaT\n", + "# Plot position as function of time\n", + "radius = np.sqrt(r[:,0]**2+r[:,1]**2)\n", + "fig, ax = plt.subplots(3,1)\n", + "ax[0].set_xlabel('time')\n", + "ax[0].set_ylabel('radius squared')\n", + "ax[0].plot(t,r[:,0]**2+r[:,1]**2)\n", + "ax[1].set_xlabel('time')\n", + "ax[1].set_ylabel('x position')\n", + "ax[1].plot(t,r[:,0])\n", + "ax[2].set_xlabel('time')\n", + "ax[2].set_ylabel('y position')\n", + "ax[2].plot(t,r[:,1])\n", + "\n", + "fig.tight_layout()\n", + "save_fig(\"2DimHOVV\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With some work using double angle formulas, one can calculate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "r^2&=&x^2+y^2\\\\\n", + "\\nonumber\n", + "&=&(A^2+C^2)\\cos^2(\\omega_0t)+(B^2+D^2)\\sin^2\\omega_0t+(AB+CD)\\cos(\\omega_0t)\\sin(\\omega_0t)\\\\\n", + "\\nonumber\n", + "&=&\\alpha+\\beta\\cos 2\\omega_0 t+\\gamma\\sin 2\\omega_0 t,\\\\\n", + "\\alpha&=&\\frac{A^2+B^2+C^2+D^2}{2},~~\\beta=\\frac{A^2-B^2+C^2-D^2}{2},~~\\gamma=AB+CD,\\\\\n", + "r^2&=&\\alpha+(\\beta^2+\\gamma^2)^{1/2}\\cos(2\\omega_0 t-\\delta),~~~\\delta=\\arctan(\\gamma/\\beta),\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and see that radius oscillates with frequency $2\\omega_0$. The\n", + "factor of two comes because the oscillation $x=A\\cos\\omega_0t$ has two\n", + "maxima for $x^2$, one at $t=0$ and one a half period later.\n", + "\n", + "The following code shows first how we can solve this problem using the radial degrees of freedom only." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter6_66_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "DeltaT = 0.01\n", + "#set up arrays \n", + "tfinal = 10.0\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, v and r\n", + "t = np.zeros(n)\n", + "v = np.zeros(n)\n", + "r = np.zeros(n)\n", + "E = np.zeros(n)\n", + "# Constants of the model\n", + "AngMom = 1.0 # The angular momentum\n", + "m = 0.1\n", + "k = 0.1\n", + "omega02 = k/m\n", + "c1 = AngMom*AngMom/(m*m)\n", + "c2 = AngMom*AngMom/m\n", + "rmin = (AngMom*AngMom/k/m)**0.25\n", + "# Initial conditions\n", + "r0 = rmin\n", + "v0 = 0.0\n", + "r[0] = r0\n", + "v[0] = v0\n", + "E[0] = 0.5*m*v0*v0+0.5*k*r0*r0+0.5*c2/(r0*r0)\n", + "# Start integrating using the Velocity-Verlet method\n", + "for i in range(n-1):\n", + " # Set up acceleration\n", + " a = -r[i]*omega02+c1/(r[i]**3) \n", + " # update velocity, time and position using the Velocity-Verlet method\n", + " r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a\n", + " anew = -r[i+1]*omega02+c1/(r[i+1]**3)\n", + " v[i+1] = v[i] + 0.5*DeltaT*(a+anew)\n", + " t[i+1] = t[i] + DeltaT\n", + " E[i+1] = 0.5*m*v[i+1]*v[i+1]+0.5*k*r[i+1]*r[i+1]+0.5*c2/(r[i+1]*r[i+1])\n", + " # Plot position as function of time\n", + "fig, ax = plt.subplots(2,1)\n", + "ax[0].set_xlabel('time')\n", + "ax[0].set_ylabel('radius')\n", + "ax[0].plot(t,r)\n", + "ax[1].set_xlabel('time')\n", + "ax[1].set_ylabel('Energy')\n", + "ax[1].plot(t,E)\n", + "save_fig(\"RadialHOVV\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Stability of Orbits\n", + "\n", + "The effective force can be extracted from the effective potential, $U_{\\rm eff}$. Beginning from the equations of motion, Eq. ([2](#eq:radialeqofmotion)), for $r$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "m\\ddot{r}&=&F+\\frac{L^2}{mr^3}\\\\\n", + "\\nonumber\n", + "&=&F_{\\rm eff}\\\\\n", + "\\nonumber\n", + "&=&-\\partial_rU_{\\rm eff},\\\\\n", + "\\nonumber\n", + "F_{\\rm eff}&=&-\\partial_r\\left[U(r)+(L^2/2mr^2)\\right].\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a circular orbit, the radius must be fixed as a function of time,\n", + "so one must be at a maximum or a minimum of the effective\n", + "potential. However, if one is at a maximum of the effective potential\n", + "the radius will be unstable. For the attractive Coulomb force the\n", + "effective potential will be dominated by the $-\\alpha/r$ term for\n", + "large $r$ because the centrifugal part falls off more quickly, $\\sim\n", + "1/r^2$. At low $r$ the centrifugal piece wins and the effective\n", + "potential is repulsive. Thus, the potential must have a minimum\n", + "somewhere with negative potential. The circular orbits are then stable\n", + "to perturbation.\n", + "\n", + "\n", + "The effective potential is sketched for two cases, a $1/r$ attractive\n", + "potential and a $1/r^3$ attractive potential. The $1/r$ case has a\n", + "stable minimum, whereas the circular orbit in the $1/r^3$ case is\n", + "unstable.\n", + "\n", + "\n", + "If one considers a potential that falls as $1/r^3$, the situation is\n", + "reversed and the point where $\\partial_rU$ disappears will be a local\n", + "maximum rather than a local minimum. **Fig to come here with code**\n", + "\n", + "The repulsive centrifugal piece dominates at large $r$ and the attractive\n", + "Coulomb piece wins out at small $r$. The circular orbit is then at a\n", + "maximum of the effective potential and the orbits are unstable. It is\n", + "the clear that for potentials that fall as $r^n$, that one must have\n", + "$n>-2$ for the orbits to be stable.\n", + "\n", + "\n", + "Consider a potential $U(r)=\\beta r$. For a particle of mass $m$ with\n", + "angular momentum $L$, find the angular frequency of a circular\n", + "orbit. Then find the angular frequency for small radial perturbations.\n", + "\n", + "\n", + "For the circular orbit you search for the position $r_{\\rm min}$ where the effective potential is minimized," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\partial_r\\left\\{\\beta r+\\frac{L^2}{2mr^2}\\right\\}&=&0,\\\\\n", + "\\beta&=&\\frac{L^2}{mr_{\\rm min}^3},\\\\\n", + "r_{\\rm min}&=&\\left(\\frac{L^2}{\\beta m}\\right)^{1/3},\\\\\n", + "\\dot{\\theta}&=&\\frac{L}{mr_{\\rm min}^2}=\\frac{\\beta^{2/3}}{(mL)^{1/3}}\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we can find the angular frequency of small perturbations about the circular orbit. To do this we find the effective spring constant for the effective potential," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "k_{\\rm eff}&=&\\partial_r^2 \\left.U_{\\rm eff}\\right|_{r_{\\rm min}}\\\\\n", + "&=&\\frac{3L^2}{mr_{\\rm min}^4},\\\\\n", + "\\omega&=&\\sqrt{\\frac{k_{\\rm eff}}{m}}\\\\\n", + "&=&\\frac{\\beta^{2/3}}{(mL)^{1/3}}\\sqrt{3}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the two frequencies, $\\dot{\\theta}$ and $\\omega$, differ by an\n", + "integer factor, the orbit's trajectory will repeat itself each time\n", + "around. This is the case for the inverse-square force,\n", + "$\\omega=\\dot{\\theta}$, and for the harmonic oscillator,\n", + "$\\omega=2\\dot{\\theta}$. In this case, $\\omega=\\sqrt{3}\\dot{\\theta}$,\n", + "and the angles at which the maxima and minima occur change with each\n", + "orbit.\n", + "\n", + "\n", + "### Code example with gravitional force\n", + "\n", + "The code example here is meant to illustrate how we can make a plot of the final orbit. We solve the equations in polar coordinates (the example here uses the minimum of the potential as initial value) and then we transform back to cartesian coordinates and plot $x$ versus $y$. We see that we get a perfect circle when we place ourselves at the minimum of the potential energy, as expected." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEHCAYAAAC0pdErAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dd3gc5bX48e9R7122ui3bwt2WjbAx2ISOcei9hbQbbhKchJubQpKbQPoNSQghJOFHDAFSIJQYDJdOIKa5yb1brpItWb333fP7Y1dmMWtZZVe7ks7nefbZnZmdmaPV7px533nnfUVVMcYYY44XEugAjDHGBCdLEMYYY7yyBGGMMcYrSxDGGGO8sgRhjDHGK0sQxhhjvArz14ZF5BHgEqBSVWd4WS7Ab4ElQCvwGVVd7152AGgCHEC3qhb1ZZ9paWk6fvx4n8RvjDGjQXFxcbWqpntb5rcEATwKPAA8foLlFwMF7sd84I/u5x7nqGp1f3Y4fvx41q1b1/9IjTFmlBKRgyda5rcqJlVdCdT28pbLgcfVZRWQJCKZ/orHGGNM/wTyGkQ2UOoxXeaeB6DAayJSLCK39bYREblNRNaJyLqqqio/hWqMMaNPIBOEeJnX0+/Hmao6F1c11O0ictaJNqKqD6lqkaoWpad7rUYzxhgzAIFMEGVArsd0DnAEQFV7niuB5cC8IY/OGGNGuUAmiBXAreJyOtCgquUiEisi8QAiEgtcCGwNYJzGGDMq+bOZ6xPA2UCaiJQBdwHhAKr6IPASriauJbiauX7WvepYYLmrFSxhwN9V9RV/xWmMMcY7vyUIVb3xJMsVuN3L/H3AbH/FZYwxpm/sTmpjjDFeWYIwxhjjlSUIY4wxXlmCMMYY45UlCGOMMV5ZgjDGGOOVJQhjjDFeWYIwxhjjlSUIY4wxXlmCMMYY45UlCGOMMV71KUGIyJnunlURkVtE5F4RGeff0IwxxgRSX0sQfwRaRWQ28C3gICcea9oYY8wI0NcE0e3uffVy4Leq+lsg3n9hGWOMCbS+dvfdJCLfAW4BzhKRUNxjOxhjjBmZ+lqCuB7oAD6vqhVANvBLv0VljDEm4PpUgnAnhXs9pg9h1yCMMWZE61OCEJEmQN2TEbiql5pVNdFfgRljjAmsvpYgPnJBWkSuAOb5JSJjjDFBYUA3yqnqc8C5Po7FGGNMEOlrFdNVHpMhQBEfVjmdaJ1HgEuASlWd4WW5AL8FlgCtwGdUdb172WL3slBgmar+b1/iNMYY4zt9beZ6qcfrbuAArnsievMo8AAnvph9MVDgfszHdTPefHcT2t8DFwBlwFoRWaGq2/sYqzHGGB/o6zWIz/Z3w6q6UkTG9/KWy4HH3TfgrRKRJBHJBMYDJaq6D0BEnnS/128J4ocvbGP7kUZ/bd4YY/xqWlYCd1063efb7TVBiMi3VPUeEfkdXqqUVPWrg9h3NlDqMV3mnudt/vxeYrwNuA0gLy9vEOEYY4zxdLISxA738zo/7Fu8zNNe5nulqg8BDwEUFRX1el3kRPyReY0xZrjrNUGo6gvu58f8sO8yINdjOgc4gus+C2/zjTHGDKGTVTG9QO9n75cNYt8rgKXuawzzgQZVLReRKqBARPKBw8ANwE2D2I8xxpgBOFkV06/cz1cBGcBf3dM34mrJdEIi8gRwNpAmImXAXbg7+FPVB4GXcDVxLcHVzPWz7mXdIrIUeBVXM9dHVHVbf/4oY4wxgyeuRkQneZPISlU962TzAq2oqEjXrfPH5RJjjBmZRKRYVYu8LevrndTpIjLBY4P5QLovgjPGGBOc+nqj3H8Bb4vIPvf0eOA//RKRMcaYoNDXG+VeEZECYIp71k5V7fBfWMYYYwKtryUIcHWJMRmIAmaLCKpqY0IYY8wI1dfO+u7C1SJpGq7WRxcD72KDBhljzIjV14vU1wDnARXufplmA5F+i8oYY0zA9TVBtKuqE+gWkQSgEphwknWMMcYMYyetYnKP27BZRJKAPwHFQDOwxs+xGWOMCaCTJghVVREpVNV64EEReQVIUNXN/g/PGGNMoPS1immViJwGoKoHLDkYY8zI19dmrucA/ykiB4EWXF1yq6rO8ltkxhhjAqqvCeJiv0ZhjDEm6PT1TuqD/g7EGGNMcOnrNQhjjDGjjCUIY4wxXlmCMMYY45UlCGOMMV5ZgjDGGOOVJQhjjDFeWYIwxhjjlV8ThIgsFpFdIlIiInd6WZ4sIstFZLOIrBGRGR7LDojIFhHZKCLr/BmnMcaYj+vPiHL9IiKhwO+BC4AyYK2IrFDV7R5v+y6wUVWvFJEp7vef57H8HFWt9leMxhhjTsyfJYh5QImq7lPVTuBJ4PLj3jMNeBNAVXcC40VkrB9jMsYY00f+TBDZQKnHdJl7nqdNwFUAIjIPGAfkuJcp8JqIFIvIbSfaiYjcJiLrRGRdVVWVz4I3xpjRzp8JQrzM0+Om/xdIFpGNwFeADUC3e9mZqjoXV0eBt4vIWd52oqoPqWqRqhalp6f7KHRjjDF+uwaBq8SQ6zGdAxzxfIOqNgKfhWMj1+13P1DVI+7nShFZjqvKaqUf4zXGGOPBnwliLVAgIvnAYeAG4CbPN7iHMW11X6P4D2ClqjaKSCwQoqpN7tcXAj862Q6Li4ur3WNWDEQaEIwXxC2u/rG4+sfi6p9gjQsGHtu4Ey3wW4JQ1W4RWQq8CoQCj6jqNhH5onv5g8BU4HERcQDbgc+7Vx8LLHcVKggD/q6qr/RhnwOuYxKRdapaNND1/cXi6h+Lq38srv4J1rjAP7H5swSBqr4EvHTcvAc9Xn8AFHhZbx8w25+xGWOM6Z3dSW2MMcYrSxAfeijQAZyAxdU/Flf/WFz9E6xxgR9iE9XjW54aY4wxVoIwxhhzApYgjDHGeDXqE8TJepwNFBF5REQqRWRroGPxJCK5IvKWiOwQkW0i8rVAxwQgIlHuHoE3ueP6YaBj6iEioSKyQUReDHQsnoK1x2QRSRKRZ0Rkp/t7tiAIYprs/px6Ho0ickeg4wIQkf9yf+e3isgTIhLls22P5msQ7h5nd+PR4yxw43E9zgaEu2uRZuBxVZ1xsvcPFRHJBDJVdb2IxAPFwBWB/szcd+LHqmqziIQD7wJfU9VVgYwLQES+DhQBCap6SaDj6SEiB4CiYOsxWUQeA95R1WUiEgHEqGp9oOPq4T5uHAbmq+pAb8z1VSzZuL7r01S1TUSeAl5S1Ud9sf3RXoLoS4+zAaGqK4HaQMdxPFUtV9X17tdNwA4+3gnjkFOXZvdkuPsR8LMfEckBPgksC3Qsw4GIJABnAQ8DqGpnMCUHt/OAvYFODh7CgGgRCQNiOK5Lo8EY7QmiLz3OmhMQkfHAHGB1YCNxcVflbAQqgddVNRjiug/4FuAMdCBe9KnH5CE2AagC/uyullvm7m4nmNwAPBHoIABU9TDwK+AQUA40qOprvtr+aE8Qfelx1nghInHAs8Ad7k4XA05VHapaiKtjyHmeIxQGgohcAlSqanEg4+hFn3pMHmJhwFzgj6o6B2gBgunaYARwGfB0oGMB16icuGo98oEsIFZEbvHZ9oP1GoSIPAL0/MD69ENPS0vT8ePH+zUuY4wZSYqLi6tP1I+dX/tiGqRHgQeAx/u6wvjx41m3LmgaYxhjTNDrrQfsoE0QqrrSXcftd5/58xqcCpFhIUSFhxIXGcbYhEjGJkSRkRDFhPRYcpNjCAnxViNljPGXboeTsro29le3UFrXSnVzJ7UtHdS1dNHR7cDhVLqdSogIcVFhxEeGER8VRkZiNNlJ0eQkRzM+LZa4yKA91AW1Yf+puS+u3QaQl5c3oG10O5Smjm46uhx0dDtpau+ipqUTz9q3qPAQCsbEMy0zgaLxyczLTyEvJQZ3l+TGmEFSVfZUNrPhUB0bDtWzsbSevVXNdDk+/CGKQFJ0OMmxEUSHhxIaIoSGCA6nUlrXSnN7Nw1tXXR0f7RNwPjUGKZnJTI9O4H5+SnMykkiPHS0X4I9uaC9BgHHWsm82NdrEEVFReqrKqYuh5Oqpg7KG9rYW9nCrqNN7KpoYsvhBhraugAYEx/J2ZPTOW/qWBYVpBETMezzrTFDqqG1i5V7qvj3btejqqkDgMTocApzk5iamcCE9FgmpMWSlxpDSkwEYSc5sKsqda1dHK5ro6yulZLKZrYdaWRbeQOltW0AxESEctr4FM6enM6F0zPITor2+98arESk+ETjSFiC6CenUympambN/lo+2FfDyt1VNLV3ExEWwlkF6Vw9N5tzp44hMizUr3EYM1y1dnbz+vajvLDpCP/eXUWXQ0mKCWdRQTqLCtIoGpdMflqsX0rntS2drN5Xw/t7a3h/bzV7q1oAmJWTyOIZGVw1J4eMRJ/diDws+C1BuJt8hapq24A30vv2xxNkCeJ4XQ4na/fX8vqOo7y4uZyqpg4So8P55KxMbpqXx4zsxCGNx5hgtam0nr+sOsj/bS6nrctBRkIUl87O5OKZmczOSSI0ANf49le38Oq2Cl7ZWsHG0npCBM46JZ3rinI5f+pYIsJGfjWUXxKEuw+eHwDtQCPwe1V9YMBRfnz7TwBn4xpn9Shwl6o+3Ns6gUgQnrodTt7bW8Py9WW8sq2C9i4np41P5jNn5HPR9LEnLRobM9K0dzlYsfEIf1l1kC2HG4iJCOXywiyuKMzmtPEpQdXw42BNC0+vK+OZ4jIqGttJi4vg1gXjueX0caTERgQ6PL/xaYIQkfuA9cDdwOmqWiki6cAPgRpV/f4g4x2wQCcIT43tXTy1tpTHPzjIodpWMhOj+MKiCdw4L4/oCKt+MiNbS0c3f199iD+9s4/Kpg4KxsTxqQXjuHJONvFR4YEOr1cOp7JyTxWPv3+At3ZVERkWwtWn5vCFRRPITwu2m7oHz9cJ4kpc3SvcgatLg0ZgM7AF+CJwWqD6TgmmBNHD4VTe2lnJQ+/sY83+WtLiIrntrHxuOX2cXdQ2I05DWxePvneAP7+/n/rWLs6clMqXz57EGRNTh2WLvz1Hm3jkvf08u/4wDqdy5ZxsvnpuAXmpMYEOzWf8VcX0GvBfuPr/mA3MwlXlVArEqeqkgYU7cMGYIDyt3lfD7/5Vwrsl1aTERvDVcydx0/xxo6Ke04xs7V0O/vLBQR54q4SGti7OnzqWL58zkbl5yYEOzSeqmjp48N97+euqgzicyrVFOSw9t2BEtH7yV4I4BfgHsBFX6WEqUKCqZ4tIhLt31CEV7AmiR/HBWn756i5W7atlfGoM3148hcUzMoblGZYZ3RxOZfmGw9z72i6ONLTziVPS+dbiyUzPGpmNM442tvOHt0p4Yk0pCHxhUT5fOnvSsL4Rz9+tmC4ACoEG4G+qWjfgDQ7ScEkQ4Gqr/dauSn7+0k72VDZz6rhk7rp0GrNykgIdmjF9Unywlu8/t43t5Y3MyknkzsVTOGNSWqDDGhKH69v41au7WL7hMOnxkXzzwslcfWpOQFpiDZa/ShDXAq+oapOIfB/XdYkfq+qGgYc6OMMpQfTodjh5dn0Zv3ptN9XNHdwyfxzfuHAyiTHBfSHPjF5VTR3878s7eXZ9GZmJUXxnyVQumZkZVC2ShsqGQ3X86MXtbDhUz/SsBH565UwKc4fXSZ6/EsRmVZ0lIguBnwG/Br6rqvMHHurgDMcE0aOxvYvfvL6bx94/QHJMBN9ZMpWr52ZbtZMJGg6n8pcPDvDr13fT3uXg8wsn8JVzJxE7jKtXfEFVWbHpCD97aQeVTR186vRxfOOiySQEeWutHv5KEBtUdY6I/BzYoqp/75k3mGAHYzgniB7bjjTwP89tZcOheublp/CLq2eNyKZ1ZnjZfbSJbz6zmU2l9SwqSOPuy6YzMT0u0GEFlab2Ln792m4e++AA6XGR3HXpdJbMDP5ri/5KEC/iGpf1fOBUoA1Yo6qzBxroYI2EBAGu7jyeWlfKT1/aQWe3k29eNJnPnpk/LOs3zfDW5XDy4Nt7uf9fe4iLDOPuy6Zz2eysoD/oBdKm0nq+u3wL2440cv7UMfzsypmMSQje7jv8lSBigMW4Sg973IPZz/TlcHf9NVISRI+jje18b/kW3thRyZy8JH55zSwmjYkPdFhmlNh6uIFvPrOZHeWNXDIrk7svm05aXGSgwxoWuh1O/vzeAX712i6iI0L5YRAnVn+2YpoNLHJPvqOqmwa8MR8YaQkCXPWbz288wt0vbKO108HXLziFLyyaYKUJ4zddDie/e3MPv397LymxEfzkihlcND0j0GENSyWVzXzj6U1sLK3n4hkZ/PiKGUGXZP3ZF9MXgH+6Z10JPKSqvxvQBn1gJCaIHpVN7fzguW28sq2C+fkp3Ht94Yi4SccEl/3VLdzxj41sKq3nqrnZ3HXJdGtRN0jdDid/emc/v3l9N/FRYfz0yhksnpEZ6LCO8VsrJmCBqra4p2OBD1R11oAjHaSRnCDAVZp4dv1h7np+KyEhwk+umMHlhdmBDsuMAKrKk2tL+dEL24kIC+HnV81kyczgOYiNBLuPNvHfT21iy+EGbjgtlx9cOi0outvpLUEMpo8HARwe0w73POMnIsI1p+bw8tfOomBMHF97ciN3PLnh2ABGxgxETXMHt/2lmO/8cwtzxyXxyh2LLDn4wSlj4/nnl8/g9nMm8o91pVxy/7tsPdwQ6LB6NZgSxNeBTwPL3bOuAB5V1ft8FFu/jfQShKduh5M/vL2X3765h4yEKO67oZDTxqcEOiwzzPx7dxXfeHoTDa1dfGvxZD53Zv6ovOFtqL2/t5qv/2MTNS0dfHvxlIB+7v68SD0XWIir5LAykHdRw+hKED02HKrjjn9spKyuja9fcApf+sRE+4Gbk+p2OLn39d384e29nDI2jvuun8O0rIRAhzWq1LV08u1nN/Pa9qMsKkjj19fNZkz80DeHHbZDjvbXaEwQ4LpB5zv/3MKLm8tZVJDGb64vDLqWEiZ4VDS085Un1rP2QB03nJbLXZdOtzFKAkRV+fuaQ/z4xe3ERoRx3w2FLCpIH9IY/HINQkQeE5Ekj+lkEXlkoNszAxcfFc7vbpzDz66cyZr9tSz57Tt8sLcm0GGZIPT2rkqW3P8O2440ct/1hfzv1bMsOQSQiHDz/HG8sHQhqXER3PrIGu59bRcOZ3CcuA/mIvUsz4GB3L24BqybjdFORLhpfh7P3X4mcVFh3LxsFfe9sTtovmgmsLodTu55ZSef+fNaxsRHsmLpQq6YYy3ggkXB2Hieu/1Mrp6bw/3/KuGWZaupbGoPdFiDShAhInJsNBARSQEC32ZrlJuamcALSxdyRWE2972xh089HBxfNBM4FQ3t3PinVfzh7b3cOC+X524/k0ljrB+lYBMTEcavrp3NL6+ZxYbSOpb89l3e31sd0JgG04rpVuA7wDOAAtcBP1XVv/guvP4ZrdcgvFFVni4u4wfPbyUuMoz7rp/DwoLR0Ve/+dDbuyr5+lObaO9y8LMrZ1qpYZjYVdHEl/9W7Lpx8fxTuP2cSX7rPcEv1yBU9XHgauAoUAVc5evkICKLRWSXiJSIyJ2+3PZIJyJcV5TLC0sXkhwTwaceWc29r1uV02hxfJXSC1+xKqXhZHJGPCuWLuSy2Vnc+/puPvPnNVQ3dwx5HEHbiklEQoHduEasKwPWAjeq6vYTrWMlCO9aO7v5wfPbeKa4jAUTUvntDYVB3bukGZyKhna++sQG1hyo5cZ5rlZKUeF2IXo46rnD/a4V20iOCef+G+Ywf0KqT/fhrzup/W0eUKKq+9zjWz8JXB7gmIalj9Vt3v8u75UEtm7T+MfK3VUsuf8dth5p4L7rC/n5VbMsOQxjIsKN8/J47stnEhMRxk3LVvOHt0twDlFNQDAniGyg1GO6zD3vI0TkNhFZJyLrqqqqhiy44ejaolxWLF1IUkw4tzy82lo5jSAOp3Lv67v59J/XkB5nrZRGmmlZCaxYeiaLZ2Rwzyu7+MLj66hv7fT7fgdzH4SIyC0i8gP3dJ6IzPNdaF77dfrY0UxVH1LVIlUtSk8f2htMhqNTxsazYumZXDnHWjmNFFVNHXzq4dXc/+YerpmbY62URqj4qHAeuHEOP7xsOiv3VPHJ+99lY2n9yVcchMGUIP4ALABudE83Ab8fdEQfKgNyPaZzgCM+3P6oFRMRxr3XFfLLa2ax/pC7OZ1VOQ1LH+ytYcn977D+UB33XDOLX1472258G8FEhE+fMZ6nv3gGANc++D6PvX8Af11LHkyCmK+qtwPtcOxGuQifROWyFigQkXwRiQBuAFb4cPuj3rVFuTx/+0ISo8O42aqchhWnU/n9WyXcvGwV8VFhPHf7mVxXlHvyFc2IUJibxP99dSGLCtK5a8U2lj6xgbZOx8lX7KfBJIgud0sjBRCRdMDpk6gAVe0GlgKvAjuAp1R1m6+2b1x6mtNd6b6x7tZHVlPVNPTN6Uzf1bZ08tlH1/LLV3dxyawsVixdyJQM62hvtEmKiWDZrUV8e/EUWjq6iQjz/SXlwdwodzNwPTAXeAy4BvgfVX3ad+H1jzVzHTjPG+vio8L57Q2FnDHRbqwLNsUHa1n69w3UNHdy12XTuGleXlCOc2yGltOpA+7F2Z/dfU8BzsN1QflNVd0x4I35gCWIwRvKOzhN3zmdyoMr93Lva7vJSormDzfPZUZ2YqDDMiOAdfdt+qWlo5v/eW4ryzccZuEkV/fh6fHWfXigHG1s5+tPbeS9kho+OTOTn189k4QoGyfa+EZvCaLfneuJSBOu6w49p5U9GUYAVVWrDB3mYiPDuPe62Zw+IYUfPL+NJfe/w/03zGHBRN/ewWlO7s0dR/nG05to73Lyi6tncl1RrlUpmSHT76saqhqvqgnu557XPdOWHEYIEeH60/J4fumZxLu7D//N67vpdvisHYLpRXuXg7tXbOPzj60jMzGaF76ykOtPs+sNZmgNuHtu95jUx2sAilV148BDMsFkSoar+/DvP7eV3765h7d3V/Gb62YzId1uxPKXPUeb+MoTG9hZ0cTnzszn2xdPJjLM7m0wQ28w7aKKgC/i6v4iG7gNOBv4k4h8a/ChmWARGxnGvdcX8sBNczhQ3cKS+9/hL6sO+u3mnNHK4VSWvbOPS373LlVNHfz5M6fxg0unWXIwATOYAX5Sgbmq2gwgInfhGhviLKAYuGfw4ZlgcsmsLIrGpfDNZzbx/ee28uaOo9xz9SzrGdYHDta08M2nN7PmQC3nTx3Lz66aEZAB7I3xNJgSRB7g2VtUFzBOVdsAu9NqhMpIjOLxz83jR5dPZ9W+Gi68byXPbzxspYkBUlX+uuogF//2HXaUN/Kra2fzp1tPteRggsJgShB/B1aJyPPu6UuBJ0QkFjjhmA1m+BMRbl0wnjMmpvHfT2/ia09u5PmNR/jJFTPISooOdHjDRmltK99dvoV39lSzqCCNX1w9yz4/E1QGe6PcqcBCXE1c31XVgN6EYPdBDD2HU3n0/QP86tVdhAh8++Ip3DJ/3IDv6hwNuhxOHn53P/e9sZtQEe5cMpVb5lsLJRMYdqOc8TvPs+Giccn89MqZTM6ID3RYQWdjaT13PruZnRVNXDBtLD+8bLqVGkxA+SVBiEgkrjGpx+NRVaWqPxrQBn3AEkRgqSrPrj/MT/5vO03t3Xzq9HH81wWnkBhtd/3WtnRy7+u7+NvqQ4yJj+SHl81g8YyMQIdljG/vpPbwPO77HrCL0gbXtYlrTs3hvClj+PXru3j8gwOs2HSEb100meuKckdltVOXw8lfPjjIfW/spqXTwacXjOe/LzyFeOsqwwwDgylBbFXVGT6OZ1CsBBFcth5u4IcvbGPtgTpmZCfw7cVTWDgpbVTUtasqb+2q5Kf/t4O9VS0sKkjj+5dM45SxVu1mgou/ShDvi8hMVd0yiG2YEWxGdiJP/ecCVmw6wj2v7OJTD69hwYRUvrV4MnPykgMdnt+8v7eaX7+2m+KDdeSnxfLwp4s4d8qYUZEYzcgymBLEdmASsB9XFZMATlWd7bvw+sdKEMGro9vB31cf4oF/lVDT0skF08bylXMnMSsnKdCh+UzxwTrufX0X75XUkJEQxVfOm8S1p+b6ZSAXY3zFXxepx3lO4hoz+ruqumRAG/QBSxDBr7mjm0fe3c+f3tlHU3s3Z05K5UufmMSZk1KH5Rm206n8a2clD72zjzX7a0mLi+DLZ0/ipvl5RIVbFxkm+PlzwKBC4CbgOlwliWdV9YEBb3CQLEEMH03tXfx99SGWvbufqqYOpmcl8KnTx3FZYRYxEYOp+RwaTe1drNh0hEfe3c/eqhayk6L53MJ8bpyXOyziN6aHTxOEiJwC3ADcCNQA/wC+oarjel1xCFiCGH7auxws33CYR987wK6jTcRHhnHl3GyuK8plelZCUJUqVJX1h+p4ck0pL24up63LwfSsBG47awKfnJlJWKhVJZnhx9cJwgm8A3xeVUvc8/ap6oRBRzpIliCGr56D799WHeLFLeV0djvJT4vlklmZXDIrK2A33akqWw838tLWcl7eUs6BmlZiIkK5bHYW15+WS2FuUlAlMWP6y9cJ4kpcJYgzgFeAJ4Flqpo/2EA99nEtcDcwFZjX1y48LEGMDHUtnbyyrYIXNx/hg701OBXyUmJYVJDGooJ0FkxM9evNdzXNHby/t4b3Sqp5Z081h+vbCA0RzpiYyiWzMvnkrCziIq0ayYwM/rpIHQtcgauq6VzgMWC5qr420EA9tj0VcAL/D1f1lSWIUaqqqYNXtlXw711VfLC3mpZOBwAT0mOZnZPErJxECsbEMy41hqykaEL7cTNet8NJeUM7B2ta2VHeyJbDDWw93MC+6hYA4qPCOH1CKhdMG8sFU8eSHBvhl7/RmEDye19MIpICXAtcr6rnDnqDH273bSxBGLfObicbDtWxen8tm8vq2VTWQFXThzfxR4SGMDYxkuSYCJJiIkiMDicsRBBcd3m3dztobOuisa2LmpZOyhvacTg//P5nJUYxIzuR2blJnDkpjRlZCXZdwYx4w7azvr4kCBG5DddoduTl5Z168ODBIYrOBJqqUtnUwb6qFg7UtHCguoWjje3UtXZR39pJY3s3DqfiVEUVIsNDSIwOJyEqnOSYcHKSY1YdyesAAB1JSURBVMhLiSEnJZrJY+NJjYsM9J9kzJDz153UgyIibwDeeiv7nqo+72W+V6r6EPAQuEoQPgrPDAMiwtiEKMYmRLFgYmqgwzFmxAlYglDV8wO1b2OMMSc3oppiFBcXV4vIQOuY0oBqX8bjIxZX/1hc/WNx9U+wxgUDj+2E97AF5TUId1Pa3wHpQD2wUVUv8vM+152oHi6QLK7+sbj6x+Lqn2CNC/wTW1CWIFR1ObA80HEYY8xoZm34jDHGeGUJ4kMPBTqAE7C4+sfi6h+Lq3+CNS7wQ2xBeQ3CGGNM4FkJwhhjjFeWIIwxxng16hOEiCwWkV0iUiIidwY6nh4i8oiIVIrI1kDH4klEckXkLRHZISLbRORrgY4JQESiRGSNiGxyx/XDQMfUQ0RCRWSDiLwY6Fg8icgBEdkiIhtFJGg6MRORJBF5RkR2ur9nC4Igpsnuz6nn0SgidwQ6LgAR+S/3d36riDwhIlE+2/ZovgYhIqHAbuACoAxYC9yoqtsDGhggImcBzcDjqjoj0PH0EJFMIFNV14tIPFAMXBHoz0xcgzLEqmqziIQD7wJfU9VVgYwLQES+DhQBCap6SaDj6SEiB4AiVQ2qG79E5DHgHVVdJiIRQIyq1gc6rh7u48ZhYL6qBrTzNxHJxvVdn6aqbSLyFPCSqj7qi+2P9hLEPKBEVfepaieusS0uD3BMAKjqSqA20HEcT1XLVXW9+3UTsAPIDmxUoC7N7slw9yPgZz8ikgN8ElgW6FiGAxFJAM4CHgZQ1c5gSg5u5wF7A50cPIQB0SISBsQAR3y14dGeILKBUo/pMoLgYDdciMh4YA6wOrCRuLircjYClcDrqhoMcd0HfAvX+CbBRoHXRKTY3StyMJgAVAF/dlfLLXOPPRNMbgCeCHQQAKp6GPgVcAgoBxp8MSZPj9GeILyNLhPws87hQETigGeBO1S1MdDxAKiqQ1ULgRxgnogEtGpORC4BKlW1OJBx9OJMVZ0LXAzc7q7WDLQwYC7wR1WdA7QAwXRtMAK4DHg60LEAiEgyrlqPfCALiBWRW3y2/WC9BiEijwA9P7A+/dDT0tJ0/Pjxfo3LGGNGkuLi4mpVTfe2LCj7YnJ7FHgAeLyvK4wfPx4bUc4YY/qutx6wgzZBqOpKdx23MSelqnR0O2np6Ka5o5um9m5aOx20dTlo/8jD+eFz9/HzHLy8tSLQf8qghYUISTHhJEa7Hj3DrybFhDMmPoqMxEjGxkcxNjGKjIQoYiOD9jBgAmzYfzOOG3I0wNGYgVJV2roc1LV2UdfSSUNbF3WtndS1dtHQ6pruOfB7JoGWzm6a213TXY7+VZeGhwpRYaFEhocSFR5CdHion/66odXtVKqbO6lu7vTZNuMjwxiXFsO41FjyU2MZlxrD+DTXc3pcJK5WxmakCdprEHCslcyLfb0GUVRUpFbFFBxUleaObqqaOqhq6qC6uZOqpnb3gavD4+DvSgT1rV10Ok7c0CcqPIS4yHDio8KIi3Q/osKIjwwj1v06LjLsI8tjI8OIch/8Xc+hRIV9+Do0ZGQe1Nq7HDS2ddHgftS3dh1LuFVNHVQ0tlPR0M7RxnaONnbQ1uXwWyxTMuKZnBHPlIyEY68zE6MsoQSRoByT2gxfbZ0OjjS0UdHQzpF613N5Y7tHMnA9d3R//IAfGiIkx0SQEuuq+hiXGkNhbhJJseEkRUeQHOOqCkmKiSA5JuJYVUnUCDm7Hwo9CXBMgs9uqKW+tZODNa0cqGnhQHUrB2taOFDTwsGaVmpaTlxS2VnRxM6KJp4/SdP8hKgwCvOSKcxNYk5uEoW5SSTHRvgsfjMwliDMR6gqVc0dlNa2cqi2lcN1bRxpaP8wGTS2U9/a9bH1UmIjGBMfSVpcJPlpsaTHR5IWF+F+jjz2nBwTMWLP3EeypJgIkmIimJ2b1Od12rsclFQ2u5JEeSO7jrqSRVVTx8fe29jezcrdVazcXXXC7SVGh7NgQipnTErljImpTEyPs5KInwVtFZOIPAGcjWuc1aPAXar6cG/rWBVT37R3OSircyWAQzWtHKxtPZYQDtW20t710TP/lNgIMhKiyEqKIjMxmoxE1+uMhGiykqIYmxBlZ/hmUCqb2tlU2sCm0no2uh/NHd392kZ2UjSfmJzOBVPHsmBiqn0n+6i3KqagTRADYQnio+paOimpamZvZTN7q5rZW9VCSWUzpXWteP7bYyJCyUuJITclhryUGMalfvg6OynafmgmKFQ2tvPBvho+2FvD+3trOFTb2ud1Tx2XzPlTx3LBtDFW8jiOJYgRrqm9i50VTWw/0sjOikZKKl3JoNajbjgiLIQJabFMGhPHxPQ48tNiyUt1JYHU2Aj7wZhhTVXZV93CWzsreXNHJR/sq+nTejOzE7m8MItLZ2cx1ofXbIYTSxAjhKpSVtfG9vJGdrgf28sbKa1tO/aepJhwCsbEHUsEE9Ndr7OSoq3u34xKnd1O1uyv5Y0dR3l9+1EO17eddJ3rinK4ef64fl1zGa4sQQxTtS2dbCytY+OhejaU1rO5rIGGNtcFYhHIT41lamYCUzPjmZaVwNTMBDISrAmhMX3hdCprDtTy/MbDPLfhSK/NfUMEbp4/jltOH8fkjPghjNL/LEEMA06nsutoE2v217L+UB0bS+s5WOOqYw0ROGVsPHPykpiRncjUTFeb8pgIa4RmjK/VtXTy7Poy/rb6EPurW074vsLcJL509kQumDqWkGFcOrcEEYScTmVHRSOr9tWyel8Naw7UHms+mpEQRWFuEoV5rvbgM7MTrTsEYwKosrGdp9aV8tgHB7020wXX7/bOi6dw2eysYZUwLEEEiaON7fx7VxVv767kvZKaY9VFeSkxzM9P4fQJqcyfkEJOckyAIzXG9MbpVN7cWcmD/95L8cE6r+9ZOCmNOy+ewozsxCGOrn8sQQSIw6lsOFTHW7sqeWtnFdvLXcMmjE2I5BOnpLNgYirz81PJSooOcKTGmMHacKiOn7+8kzX7vQ8E+dMrZ3DjaXlBV7qwBDGEHE5l9f4aXtpSzitbj1Ld3EFoiHDquGTOmTyGsyenMyUj3i4kGzOCOZzKs8Vl/OzlHV57HvjquZP4ynkFhIcGfsw2SxB+pqpsPdzI08WlvLSlnOrmTqLCQzhvylgunpnBooJ0EqPDhzwuY0xw2FvVzPeWb2HVvo+XLn5z/WyunJMTgKhcLEH4SV1LJ8s3HOapdaXsrGgiMiyE86eOZcnMTM6Zkm6tjIwxH1Pb0sl3/7mFV7Z9dOyRgjFx/PU/5g/5DXuWIHyspLKJZe/s558bDtPZ7WRWTiLXFeVy6ewsKykYY/qspLKZL/+tmN1Hmz8y/8FbTmXxjIwhicEShI8UH6zj92+V8K+dlUSGhXDV3BxuXTCOqZkJftunMWbkU1Uee/8Ad7+w/SPz77lmFtcV5fp135YgBqmksol7XtnFa9uPkhobwacWjONTp48jNS7S5/syxoxue442ccFvVn5k3p8/exrnTB7jl/1ZghigpvYufvnqLv666iAxEWH851kT+NzCfLtpzRjjd4fr2zjnl29/ZKTFtd87n/R4356YWoIYgJW7q7jz2c2UN7Zz6+nj+Nr5p5BiI1wZY4bYtiMNfPL+d49Nf3vxFL509kSfbd8SRD84ncoDb5Xwmzd2Myk9jl9cM4u5eck+itAYYwbmgX/t4Vev7QYgLS6Std87zyf3U/WWIAJ/l0YQcTiVrz+1kXtf382Vhdm88JWFlhyMMUFh6bkFrPnueQBUN3eQ/52X6HZ8fNx3X7IE4aaqfOuZzTy38QjfvGgyv75uto2kZowJKmMSotj7syXHpid972X8WQtkCcLtsfcP8Oz6Mu44v4Dbz5lkXWEYY4JSaIiw/+cfJombl632274sQeAaMP0Xr+zinMnpfO28gkCHY4wxvRIRdv/kYgDe31tDaT/G5+6PoE4QIrJYRHaJSImI3Omv/fx11SE6uh384NLpVnIwxgwLEWEh/PKaWQBc9cf3/bKPoE0QIhIK/B64GJgG3Cgi0/yxr7d2VlI0PoX8tFh/bN4YY/ziWvdd1icaxGiwBp0gRGSpiPijqc88oERV96lqJ/AkcLkf9kNpXSunjI3zx6aNMWbY8kUJIgNYKyJPuauEfFVHkw2UekyXued9hIjcJiLrRGRdVVXVgHYUGRZCe5d/m4sZY8xwM+gEoar/AxQADwOfAfaIyM9EZLC3+nlLNB9rz6WqD6lqkaoWpaenD2hHUzMTWLO/1q/NxYwxxtccTiUtLpJPzsr0y/Z9cg1CXUfWCvejG0gGnhGRewax2TLAsxvDHODIILZ3QpfNzuJQbSuvbjvqj80bY4xfPLfhMNXNHVw2O8sv2/fFNYivikgxcA/wHjBTVb8EnApcPYhNrwUKRCRfRCKAG4AVg43Xm8tmZzFpTBx3r9hGbUunP3ZhjDE+VdHQzk9f2sGsnEQumDrWL/vwRQkiDbhKVS9S1adVtQtAVZ3AJQPdqKp2A0uBV4EdwFOqus0H8X5MWGgI911fSG1LJ//x2FpaOrr9sRtjjPGJupZOPvfoWtq7HNx7XSEhIf5pnu+LaxA/UNWDJ1i2Y5DbfklVT1HViar608Fs62RmZCdy/42FbCyt56Zlq6lsbPfn7owxZkCO1Ldx07LVlFQ188dbTmXSGP+1wAza+yACYfGMTB685VR2VzRx+e/fY/W+mkCHZIwxx7y7p5pLfvcupbWtLLu1iE+cMrCGOX1lCeI4F07P4JkvLSAiLIQb/rSKn7y4ndZOq3IyxgROY3sX3/nnFm55eDUpsRE8v/RMzvJzcgAbD+KEWjq6+d+Xd/KXVQcZmxDJtxdP4YrCbL/V9RljzPG6HE6eWlfKfW/soaa5g88vzOfrF0wmOsJ3PU3bgEGDsO5ALT9+cTubyhqYlpnAV86dxEXTMyxRGGP8xuFUXtpSzr2v72Z/dQtF45L5/iXTmJ2b5PN9WYIYJKdTWbHpCPe/uYd91S0UjInjC4smcOnsLJ9mcmPM6NbS0c3T60p55L0DHKptZfLYeL61eDLnThnjt45ELUH4iMOp/N+Wcv7wVgk7K5pIjA7nuqIcbp4/jvHW0Z8xZoB2H23iqbWlPLWulMb2bk4dl8x/LMznwukZhPq5tsIShI+pKqv31/KXDw7y6rYKup3KvPwUrpyTzZIZmSTGhPs9BmPM8NbQ1sWLm4/w1LoyNpXWEx4qXDgtg88vyh/SoY4tQfjR0cZ2nl5Xyj83HGZfVQsRoSGcO2UMn5yVydmT04mPsmRhjHFpaO3ite0VvLy1gnf2VNHlUCaPjee603K5ojCL1LjIIY/JEsQQUFW2Hm5k+YbDrNh0hOrmDiJCQzhjUioXTsvg/GljGBMfFZDYjDGBU1rbytu7KnlzZyXvlVTT5VCyk6JZMjODS2dnMTM7MaADlVmCGGIOp7L+UB2vbavg1W1HOeQeDnB6VgILC9I4qyCdU8clExVuF7iNGWk6uh2s3V/H27sqeWtXJXurWgDIS4nh4hkZXDwzk9k5gU0KnixBBJCqsutoE29sP8rKPdWsP1hHt1OJCg9hXn4qiyalcfqEVKZmxhMWavctGjPcdHQ72FzWwOp9NazeX8u6A3W0dTmICA1h/oQUzp48hnMmp5OfFhs0ScGTJYgg0tLRzer9NazcXc27JdWUVDYDEBMRyty8ZIrGJ3Pa+BQKc5OIjQwLcLTGmOM1tXexpayBtQfqWL2/hvWH6o4NODYlI575+SmcdUo6CyamEhMR/L9hSxBBrKKhnbUHall3oJa1B+rYUdGIKoSGCNMyE5iVk+h+JFEwJs5KGcYMoW6Hk11Hm9hYWs/GQ/VsKqtnT2UzqiACUzMSmD8hhfn5qczLTyElNiLQIfebJYhhpLG9i/UH61h3oI7ig3VsPdxAk7v78ciwEKZnJTArJ4mZ2YlMzUxg4phYIsPsWoYxg9XW6WBnRSM7ypvYUd7I9vJGth9ppK3LAUByTDiFuUkU5iZTmJdEYU7SiGjSbgliGHM6lQM1LWw53MDmsga2lDWw9UgDrZ2uL21YiDAhPZbJGQlMyYhnSkY8kzPiyU6KDsr6TmMCzelUjjS0sftoEzvKm9he3siO8kb2V7fQcziMjwxjSmY807MSmZOXRGFuEnkpMSPyN2UJYoRxOJV9Vc3sqGhiV0UjO8ub2FnRxOH6tmPviY8MY0J6LBPS45iQ5n5OjyU/LdZaT5lRob3Lwf7qFvZWNbO3soWSqmb2Vjazr7r52DUDgNyUaKZmJDAtK4GpmQlMy0wgJ3n0nGD1liCC/wqK+ZjQEKFgbDwFY+PBYyzaxvYudle4ksWuiib2VTezal8NyzccPvYeEchKjGZCeiwT0+MYlxpDbnIMuSkx5KZED4uLasb0aO7o5lBNK4dqWymtdT0fqm1lX3UzZXVtx0oEIpCTHM3E9DgWTExl0pg4Jo2JY0pGvN3M2gsrQYwCrZ3d7KtqYV91C/uqmt2vm9lf1UKLu6qqR2psBDkpMeQmR7uSRrIrcWQnRZORGGUJxAypxvYuKhraOVLfRnlDO2V1rRyqbTuWEI4fQz4+Koy8lBgmpMcx0X0SNGlMnJWce2EliFEuJiKMGdmJzMhO/Mh8VaW6uZPSOtePrayujdLaVkrrWtlc1sArW139THlKiAojM9GVLDISolzPPY+EKDITo0iMDh81xXMzMA6nUtvSSXVzB5VNHZS7E0B5Q89zOxUN7TQfNz58WIiQnRxNbnIMF03PIC8l5iOPkXDROJhYghjFRIT0+EjS4yO9dg7mcCoVje2U1rZyuK6NikbXj7bneXt5I9XNHRxfCA0PFVJjI0mLjyAtLvLD1+7n1NhI0uJcr5OiI4gIs6a7I0Fbp4P6tk7qWrqoa3Ud/KuaOqjqeW7qoLq5k6qmDmpbOjju3AMRSI+LJDMxiknpcSyclEZWUhQZidFkeZyEWFPvoROUCUJErgXuBqYC81TV6o0CIDREyE5yVS+dSJfDSWVTBxUNbVQ0dFDR2E5VUwc1zR1UN3dQ09LJ7oomqps76XQ4vW4jNiKUpJgIEqPDSYpxPRKjI1yvoz+cTowOJy4yjNjIUOKiwoiLDCM6PNRKKz6iqrR2Omju6HY92l3PTe3dNLR1UtfaRX1rF/WtndS3upJAQ5vrub61i45u7//fiLAQ0uMiSYuPJDspisLcRNLiXCcmPc+ZiVGMiY+yk4UgE5QJAtgKXAX8v0AHYnoXHhpy0iQCroNPU0c3Nc2uM8ua5g6qmjupb+mkvs114Glocx1odh9tPjbd5ej9GlmIQGykK1m4kkcY8VFhxEaEERcVRmxEKFHhoUSGhxIVHkJUWCiR7ueonnnhoUSGhRybjgwLJSIshNAQISxECAsNISxEjk0PVUJSVbocSrfTSbdT6e557VAcTqWj20F7l5P2Lo/nj8xz0NH94ev2LidtXQ5aOj488Ld4JIOWzu6PndUfLyI05FgST4qJIC8lhtk5Scemkz2W9SSAhKgwS+LDVFAmCFXdAdiXagQRERKiwkmICie/j4Mr9ZzRuhKI62y1pcN1gGvqcB3cWjwOdC2dH74+2thOS4frbLjnQOkroR7JIjRECA91JZNQEU70le2tLYhT1Z0A3InA/fpkB+v+6EmE0eGhrmQa5UqkmYlRx6Z7kuxHXrunew7+VmIbXYIyQfSHiNwG3AaQl5cX4GiML4kIse5SwclKKCejqnR0O+noctLe7Tj23HNm3XHcmbfnAdvhdJ3JOz5yJu+a7nKfzfdM9/r34P3AKgJhoUJYSMhHSiyueR7TIUJoaAjh7sQUGR5K1LGSz4elIVfpyFUSigwPITIsxA7qZkACliBE5A0gw8ui76nq833djqo+BDwErmauPgrPjDAicuxAmoi1dDGmLwKWIFT1/EDt2xhjzMkN+yomT8XFxdUicnCAq6cB1b6Mx0csrv6xuPrH4uqfkRjXuBMtCMo7qUXkSuB3QDpQD2xU1Yv8vM91J7qbMJAsrv6xuPrH4uqf0RZXUJYgVHU5sDzQcRhjzGhmd6UYY4zxyhLEhx4KdAAnYHH1j8XVPxZX/4yquILyGoQxxpjAsxKEMcYYryxBGGOM8WpUJQgRuVZEtomIU0RO2CRMRBaLyC4RKRGROz3mp4jI6yKyx/388T6yBxbXSbcrIpNFZKPHo1FE7nAvu1tEDnssWzJUcbnfd0BEtrj3va6/6/sjLhHJFZG3RGSH+3/+NY9lPvu8TvRd8VguInK/e/lmEZnb13UHow9x3eyOZ7OIvC8isz2Wef1/DmFsZ4tIg8f/5wd9XdfPcX3TI6atIuIQkRT3Mr98ZiLyiIhUisjWEyz37/dLVUfNA1f34ZOBt4GiE7wnFNgLTAAigE3ANPeye4A73a/vBH7ho7j6tV13jBXAOPf03cA3/PB59Sku4ACQNti/y5dxAZnAXPfreGC3x//RJ59Xb98Vj/csAV4GBDgdWN3Xdf0c1xlAsvv1xT1x9fb/HMLYzgZeHMi6/ozruPdfCvzL358ZcBYwF9h6guV+/X6NqhKEqu5Q1V0neds8oERV96lqJ/AkcLl72eXAY+7XjwFX+Ci0/m73PGCvqg70rvG+GuzfG7DPS1XLVXW9+3UTsAPI9tH+e/T2XfGM9XF1WQUkiUhmH9f1W1yq+r6q1rknVwE5Ptr3oGPz07q+3vaNwBM+2vcJqepKoLaXt/j1+zWqEkQfZQOlHtNlfHhgGauq5eA6AAFjfLTP/m73Bj7+5VzqLmI+4quqnH7EpcBrIlIsrt51+7u+v+ICQETGA3OA1R6zffF59fZdOdl7+rLuQPV325/HdRba40T/z6GMbYGIbBKRl0Vkej/X9WdciEgMsBh41mO2Pz+z3vj1+xWUd1IPhgy+l1hv/SIPui1wb3H1czsRwGXAdzxm/xH4Ma44fwz8GvjcEMZ1pqoeEZExwOsistN95jNgPvy84nD9kO9Q1Ub37AF/Xsdv3su8478rJ3qPX75nJ9nnx98ocg6uBLHQY7bP/5/9jG09rurTZvf1oeeAgj6u68+4elwKvKeqnmf2/vzMeuPX79eISxA6+F5iy4Bcj+kc4Ij79VERyVTVcncxrtIXcYlIf7Z7MbBeVY96bPvYaxH5E/DiUMalqkfcz5UishxX8XYlAf68RCQcV3L4m6r+02PbA/68jtPbd+Vk74now7oD1Ze4EJFZwDLgYlWt6Znfy/9zSGLzSOSo6ksi8gcRSevLuv6My8PHSvB+/sx649fvl1UxfdxaoEBE8t1n6zcAK9zLVgCfdr/+NNDncStOoj/b/Vjdp/sg2eNKXEO2DklcIhIrIvE9r4ELPfYfsM9LRAR4GNihqvcet8xXn1dv3xXPWG91tzY5HWhwV4v1Zd2BOum2RSQP+CfwKVXd7TG/t//nUMWW4f7/ISLzcB2navqyrj/jcseTCHwCj+/cEHxmvfHv98vXV92D+YHrYFAGdABHgVfd87OAlzzetwRXq5e9uKqmeuanAm8Ce9zPKT6Ky+t2vcQVg+uHknjc+n8BtgCb3V+CzKGKC1criU3ux7Zg+bxwVZmo+zPZ6H4s8fXn5e27AnwR+KL7tQC/dy/fgkfruRN9z3z0GZ0srmVAncdns+5k/88hjG2pe9+bcF1APyMYPjP39GeAJ49bz2+fGa6TwXKgC9ex6/ND+f2yrjaMMcZ4ZVVMxhhjvLIEYYwxxitLEMYYY7yyBGGMMcYrSxDGGGO8sgRhjDHGK0sQxhhjvLIEYYyfiMhp7g4Bo9x3224TkRmBjsuYvrIb5YzxIxH5CRAFRANlqvrzAIdkTJ9ZgjDGj9z94KwF2nF1GeEIcEjG9JlVMRnjXylAHK5R7aICHIsx/WIlCGP8SERW4BrNKx9Xp4BLAxySMX024saDMCZYiMitQLeq/l1EQoH3ReRcVf1XoGMzpi+sBGGMMcYruwZhjDHGK0sQxhhjvLIEYYwxxitLEMYYY7yyBGGMMcYrSxDGGGO8sgRhjDHGq/8PryGCsB8QWN0AAAAASUVORK5CYII=\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter6_74_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "# Simple Gravitational Force -alpha/r\n", + " \n", + "DeltaT = 0.01\n", + "#set up arrays \n", + "tfinal = 8.0\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays for t, v and r\n", + "t = np.zeros(n)\n", + "v = np.zeros(n)\n", + "r = np.zeros(n)\n", + "phi = np.zeros(n)\n", + "x = np.zeros(n)\n", + "y = np.zeros(n)\n", + "# Constants of the model, setting all variables to one for simplicity\n", + "alpha = 1.0\n", + "AngMom = 1.0 # The angular momentum\n", + "m = 1.0 # scale mass to one\n", + "c1 = AngMom*AngMom/(m*m)\n", + "c2 = AngMom*AngMom/m\n", + "rmin = (AngMom*AngMom/m/alpha)\n", + "# Initial conditions, place yourself at the potential min\n", + "r0 = rmin\n", + "v0 = 0.0 # starts at rest\n", + "r[0] = r0\n", + "v[0] = v0\n", + "phi[0] = 0.0\n", + "# Start integrating using the Velocity-Verlet method\n", + "for i in range(n-1):\n", + " # Set up acceleration\n", + " a = -alpha/(r[i]**2)+c1/(r[i]**3)\n", + " # update velocity, time and position using the Velocity-Verlet method\n", + " r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a\n", + " anew = -alpha/(r[i+1]**2)+c1/(r[i+1]**3)\n", + " v[i+1] = v[i] + 0.5*DeltaT*(a+anew)\n", + " t[i+1] = t[i] + DeltaT\n", + " phi[i+1] = t[i+1]*c2/(r0**2)\n", + "# Find cartesian coordinates for easy plot \n", + "x = r*np.cos(phi)\n", + "y = r*np.sin(phi)\n", + "fig, ax = plt.subplots(3,1)\n", + "ax[0].set_xlabel('time')\n", + "ax[0].set_ylabel('radius')\n", + "ax[0].plot(t,r)\n", + "ax[1].set_xlabel('time')\n", + "ax[1].set_ylabel('Angle $\\cos{\\phi}$')\n", + "ax[1].plot(t,np.cos(phi))\n", + "ax[2].set_ylabel('y')\n", + "ax[2].set_xlabel('x')\n", + "ax[2].plot(x,y)\n", + "\n", + "save_fig(\"Phasespace\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Try to change the initial value for $r$ and see what kind of orbits you get.\n", + "In order to test different energies, it can be useful to look at the plot of the effective potential discussed above.\n", + "\n", + "However, for orbits different from a circle the above code would need modifications in order to allow us to display say an ellipse. For the latter, it is much easier to run our code in cartesian coordinates, as done here. In this code we test also energy conservation and see that it is conserved to numerical precision. The code here is a simple extension of the code we developed for homework 4." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOydd3hc5ZW436Pee5ctq7g3jG3cwaYbQ0JJSCAEloSETXZJ2U2BsGm7CQkhPb8UQgi7sCSUTQgY03EB994tW1azimX13mfm/P6YkRGyZI2kuTMj+3ufZ56ZuWXuud/ce893zne+c0RVMRgMBoPB3wjwtQAGg8FgMAyGUVAGg8Fg8EuMgjIYDAaDX2IUlMFgMBj8EqOgDAaDweCXBPlaAG+SlJSk2dnZvhbDYDAYDP3Yu3dvnaomD1x+USmo7Oxs9uzZ42sxDIZBUVUcCg5V58vR77N+sF5VERECBARBAkCAABFEnO8M+C6ACIhrncHgT4jIqcGW+1RBichq4NdAIPCkqj46YP1dwIOur23AF1X1oGtdKdAK2AGbqi70ltyG8Yuq0m1z0NVrp73HTlNHD43tvdS3d1PV3MXppk4qGzspqWunuK7d1+KOO1JjQkmLCSMlJsz5Hh1KXGQIseHBxIYHEx/hfI8MDSIyJIiw4ACjNA1D4jMFJSKBwO+Aa4EKYLeIrFXVY/02KwFWqmqjiNwAPAEs7rf+SlWt85rQBp/R1WunpauXmpZuKho7KKhuI7+qhT2nGqlt7fa1eAYX1S3dVLd0A80e/+2kqBCmp8UwMyOG7MRIMuLCyIgLJzY8mOiwIMKDA42yu8DwpQW1CChU1WIAEXkeuBk4q6BUdVu/7XcAE7wqocGj2OwOGjt6KWvo4FhVC7tKGlifX01Hj93XovmE8OBAIkICCQ9xvQcHEhocSGhQAKFBzncRUAW7Q7E5nO4+m0NxOBR736vfMptDsTscZ9f12Bx09Npp7uxlvCeNqWvrYUthHVsKR9cnnTshlvlZ8UxPiyYnKZL02HDiIoOJDg0yis1P8aWCygTK+32v4MPW0UDuA97o912Bt0VEgT+q6hOeF9FwPlSVtm4bZQ0dHChvYn1+DRuO1/harEHJiA1jWlo0OUlRZCWEkxEXTlJ0KEmRoUSFBRER0qcQzINqpDgcSo/d6TY96z7tdirF5s5eGjt6qGrq5FRDB6fqOyipa6e5s9frch6qaOZQhfuWXWZcOJdPSeKSiXFMT4smPTacxKgQggNN8LO38KWCGuxJMGgfT0SuxKmgVvRbvFxVT4tICvCOiBxX1fcH2fd+4H6ArKyssUt9kdBjc1DW0MH24npe2lfB/rImr8uwcFI88yc5e7yTEiNJjw0jLiLYuHL8jIAAISwgkLDgQI//tqrS3mOnpbOXhvYeKl1jhMV1bRyvauVYVYtlFnhlUyfP7y7n+d3lw25745x0luYlMndCLBPiI4iPCDbXqAcQXyWLFZGlwPdV9XrX928BqOqPB2w3F/gHcIOqFgzxW98H2lT1Z+c75sKFC9VE8Tlp67axv6yRF/dU8OrB05Yea+GkeK6ekcq8iXFkJ0UQHxFiycPMYOijs8dOY0cP1S1dlNS1U1Ddxr6yRvaUNuDwwSMvOFD4+IKJrJyaxKyMWNJjwwgylthZRGTvYIFuvlRQQUABcDVQCewGPqWqR/ttkwVsAO7pPx4lIpFAgKq2uj6/A/yXqr55vmNeTApKVTnT0sW6g1U88nq+x3//htlp3DAnnUsnxpEWG2bcHoZxjarS0mWjpqWLkzVtHKlsZmtRPQfLveM5SIsJ41OLs1g5NZkpqVFEhFxUM4D8T0EBiMga4Fc4w8yfUtVHROQLAKr6uIg8CXwM6IuRt6nqQhHJxWlVgdNN+VdVfWS4412ICqrbZuf9gjq+/n8HPeLXz4gN4/NX5HLltBQmxIebXp7BMACb3UFtWzdFNe3sK2tk44kaS13gcyfEcvvCiayamkxmXDgBARee69AvFZS3Gc8KqtfuYEdxPd/82yGqmrtG/TsrJifx+StymZ8VR3RYsAclNBgMfdgdSm1rNwXVrWwtquMf+yqp8fB0iMuy4/nU4iyW5SWREh06rse8jIJi/Cgou0PZcLyGzz8zOllvnpfBZ5fnMDMjxrjeDAY/pNfuoKqpiyOnm3nnWDX/2F/pkd8NDQrgm6uns3p2GhmxYeNGaRkFhf8qqMKaVq75xTkBiMPytWun8qnFWSRGhVoglcFg8AW9dmcE7a6SBl45UMmO4oYx/V5WQgTfuWkml09J8tvgJKOg8B8FdbK6lWt/6b5CumZGKj+4ZRbpseEWSmUwGPwZVaWyqZMtJ+t4ducpjlS2jPq3Hrl1NrfMyyQy1D+CMYyCwncKqqvXzo2/2UxR7fC53VZOTebHt80hI84oI4PBMDzdNjuHKpp5dscpXjkw8ikjM9JjeOTW2cybEOezAAyjoPCugmps7+HSH7wz7HY/unUOn7xsIoEXYGSOwWDwDZ09dvaVNfLbDYVsL64f0b5P3rOQq6aneFVZGQWF9QrK7lDyHn79vNv85GNzuH3BxAsyVNRgMPgnDody/EwrT20t4W97K9ze7+V/Xc68iXEWSubEKCisU1BVzZ0s/fGGIde/941VTEqM9PhxDQaDYTQ4HMreska+8/IRjp9pHXb7b1w/jfuvyLUsKtgoKDyvoA5XNPOR324ZdN3eb19jousMBsO4oKG9h99vLOTJLSXn3e5zK3J4eM0Mj3uAjILCcwpKVcn51rmuvH9emcu3bpgx5t83GAwGX1HT2sWjbxznpX1Dz8168p6FXDMz1WPHNAoKzyio3aUN3P749g8tW/elFczOjB3T7xoMBoM/oaq8f7KOf3pq16DrJ8SHs/mbV3pkMvBQCsqkGRgBDe09H1JOKyYnUfrojUY5GQyGCw4RYeXUZEofvZH3vrHqnPUVjZ2DepI8iU8VlIisFpETIlIoIg8Nsl5E5Deu9YdEZL67+1rB/H5h40f/83qe/dz56isaDAbDhcGkxEhKH72Rpz+76Jx1X31+v2XH9ZmCEpFA4HfADcBM4E4RmTlgsxuAKa7X/cAfRrCvR8l+6LWznwt+eIPfzMA2GAwGb7FyajLHf7D6Q8teHsXkYHcZVkGJyAMiEm/BsRcBhaparKo9wPPAzQO2uRl4Rp3sAOJEJN3NfS0jJMh4Rg0Gw8VJWHAgxT9a86FlXb3WVDV250mbBuwWkRddbjVPxRdmAv1rKVe4lrmzjTv7As6S7yKyR0T21NbWjllog8FguNgJCBA2f/PKs9977A5rjjPcBqr6bZwutj8D9wInReRHIpI3xmMPpugGhhQOtY07+zoXqj6hqgtVdWFycvIIRRyczh5regsGg8EwXuifni3Gotpybvmq1BmLfsb1sgHxwN9E5LExHLsCmNjv+wRgoDNzqG3c2dejHPzedWc/z/jum9gs6jEYDAaDv9PU0cOyR4fOnuMp3BmD+rKI7AUeA7YCc1T1i8ACnOXYR8tuYIqI5IhICHAHsHbANmuBe1zRfEuAZlWtcnNfjxIbHvyhCJbJ//EGf3yvyMpDGgwGg9/x5pEq5v3XBxHNf//iUsuO5U4oWhJwm6qe6r9QVR0ictNoD6yqNhF5AHgLCASeUtWjIvIF1/rHgdeBNUAh0AF85nz7jlYWd1k5NZnbLs3kJVf1yx+/cZwfv3Gcg9+7jthwUz7dYDBcuFQ0drDiJxs/tCwvOZIFkxIsO6bJJDEKhiql8dfPLWbZ5KQx/77BYDD4C6V17az62aZzlq+elcbjdy/wyDFMqiM8nyz2J28e5w+bznXzXTMjlT/evcDUeDIYDOMSu0N5Znsp//nqsUHXv/nVy5meFuOx4xkFhTXlNlSVX757kt+sPzno+lXTkvnj3QsIDQr06HENBoPBk9jsDt48eoYH/jp0ZogvXz2Ff7tmikfy7/XHKCisL1hYUN3Kdb98f8j1SVGhvPGVy0mONmU4DAaD72nu6OXZnaf46VsnzrvdP6/M5cHrp1tWaNUoKLxX8t3hUP74fjE/efP4ebe7NCuOP92zkCRTN8pgMHiBrl47m0/W8cBf99FtG36qjLcqNRgFhfcUVH9UlXWHqvjSc8MnVJwQH87jn17ArIwYj5vQBoPh4qOurZuX91fyw9fy3d7n13fM46a5GV4dQzcKCt8oqIHUtHZx/zN7OVDe5Nb2i7ITePRjc8hNjrJYMoPBMJ5p6uhh88k6frex0K0y7n0ECPz53stYOSXZMhfecBgFhX8oqIGcburk3v/eRUF124j2++nH57JmTrrJqm4wXGTY7A5K6zvYcLya324opKXLNuLfeHD1dD69JItoi1IUjRSjoPBPBTWQbpud1w5V8e8vHhzxvjFhQXz7xplcMzOVhMgQC6QzGAzeottm51R9BxuP1/DnLSXUtHaP6ncCA4Sffnwu185M9RuFNBCjoBgfCmowWrt6eWF3+Yj8yAPJSYrkq9dMYdXUFGIj/PMiNRguNrptdsrqO9hWVM+rB0+z51TjmH/zgSsnc8ulGeQmRfnMZTdSjIJi/CqowVBVTtV38Mf3i3luV9mYf+/yKUl8alEWl+UkkBgZYoI0DAYP0NVrp6KxkwPlTWw+WcsrHizul5UQwX0rcrh2ZirpsWHj+p71KwUlIgnAC0A2UAp8QlUbB2wzEXgGZz0qB/CEqv7ate77wOeBvgJPD6vq68Md90JSUEOhqtS2dfPW0Wp+uO6YW6Gk7nLD7DRunJvOpVnxpMWEmUwZhosWVaW120ZVUxfHqprZU9rIW0erqWsbnRvufOQmR/KZZdmsnJrChPjwcWMVjQR/U1CPAQ2q+qiIPATEq+qDA7ZJB9JVdZ+IRAN7gVtU9ZhLQbWp6s9GctyLQUGdD4dDOdPSxXsFtfxpczHFte2WHGfexDiun5XGwux48pKjiAsPviBvKsOFR0ePjbrWHk41tHPiTCv7yhrZfLKO1lEEIoyECfHh3Lkoi5VTk8lNjiQi5OIKfhpKQfmqFW4GVrk+Pw1sAj6koFxlNapcn1tFJB9n1dzBk0MZhiUgQMiIc94Idy7KOme9ze7gVEMH24vq+dveCrdD4QdyoLxpRPtGhgRy7cxUFmQnMCMtmoy4cGLDg4kICRzXbguD71BV2rptNHX0cqali5K6dopr2zlY3sTeskZ6POhZcIfUmFBumZfJ0rxEpqfFkBwdajwQbuArC6pJVeP6fW9U1fjzbJ8NvA/MVtUWlwV1L9AC7AG+NtBF2G/f+4H7AbKyshacOnVqsM0MbtJjc1DZ1MmhiibW59ew9qCldSLdIjc5knkT45iRFsPk1CgmxkcQHxFMREgQoUEBxnobZ/TaHXR02+notdHebaOmtZvTTV1UNHZQWNPGyeo2TlS7P8/HanKSIrlmRgoLJsUzNTWa1JgwM/1jhHjdxSci7+IcPxrIfwBPu6ugRCQKeA94RFVfci1LBepwlnn/AU5X4GeHk+lid/F5E4dDae7spbKpkxNnWtlb1sjG4zVUNXf5WjS3yU6MIDc5itSYMJKiQkiIDCE+IoSo0CAiQ4OICg0iIjSQ8OBAggMDCAkKICQwgOBAITBAxr31p6o41KkwbA7FZnfQa1d67A46e+y0dvXS0mWjpbOX5s5eWrp6aWjrobq1m5qWLmpbu6lo6vS6teIJ4iKCWT45iQVZ8UxPi2ZiQgSJUSEXnevNW3jdxaeq15xHmGoRSVfVKtdYU80Q2wUDfwf+0qecXL9d3W+bPwHrPCe5wRMEBAjxkSHER4YwOzOWjy2YMOw+dpdSO93USUF1K/vLmthaWEdxnTVjZcNRWt9BaX2HT45t8ByJkSFcmhXP3Amx5CZHkp0YSVJUKHERwYQFmyoD/oyvugNrgX8CHnW9vzJwA3F2P/8M5KvqLwasS3eNUQHcChyxVlyDNwgMEBIinZbK7MxYbps/vFLrT1evnbZuGw3tPVQ1d1He0MHJ6laOn2nlYEUTXb3jryd/sZMRG8bEhAiyEyPJTookMz6cjNgwkqNDiQ4LJio0iJCgAF+LabAIXymoR4EXReQ+oAy4HUBEMoAnVXUNsBy4GzgsIgdc+/WFkz8mIvNwuvhKgX/2svwGPyQsOJCw4ECSokKZmhrtkd9UVbptDrp67XT22mntcirA5s5e2rtttHbZaO7spanjAzdXc0cv9e3dNLT30NjR6xE5/IHo0CBiwoOJDgsiOiyI2PBgEiJDSIkOIzEqhNjwYGLCgs9uExniVB6hQQGEBjvdn0GBRpkY3MdM1DUYDAaDT/GreVC+QkRagfNX5vJ/knAGiIxnzDn4B+YcfM94lx88cw6TVDV54MKLLSTlxGBaejwhInvMOfgecw7+wXg/h/EuP1h7DsYhbDAYDAa/xCgog8FgMPglF5uCesLXAngAcw7+gTkH/2C8n8N4lx8sPIeLKkjCYDAYDOOHi82CMhgMBsM4wSgog8FgMPglF7SCEpEEEXlHRE663s9JSCsiE0Vko4jki8hREfmKL2QdCnfOwbXdUyJSIyJ+k/ZJRFaLyAkRKXTV/Rq4XkTkN671h0Rkvi/kHAo35J8uIttFpFtEvu4LGYfDjXO4y9X2h0Rkm4hc4gs5z4cb53CzS/4DIrJHRFb4Qs7zMdw59NvuMhGxi8jHvSmfO7jxP6wSkWbX/3BARL475oOq6gX7Ah4DHnJ9fgj4ySDbpAPzXZ+jgQJgpq9lH8k5uNZdAcwHjvhaZpc8gUARkAuEAAcHtiuwBngDEGAJsNPXco9Q/hTgMuAR4Ou+lnmU57AMZ8FQgBv86T8YwTlE8cF4+lzguK/lHuk59NtuA/A68HFfyz2K/2EVsM6Tx72gLSichRGfdn1+Grhl4AaqWqWq+1yfW4G+woj+wrDnAKCq7wMN3hLKDRYBhaparKo9wPM4z6U/NwPPqJMdQJwru70/MKz8qlqjqrsBf0245845bNMPaqntAEaWodd63DmHNnU9IYFInDk6/Ql37gWAL+Gs3jBodQcf4+45eJQLXUGlqivrues95XwbuwojXgrstFwy9xnROfgRmUB5v+8VnKv43dnGV/izbO4y0nO4D6dF60+4dQ4icquIHAdeA4atDedlhj0HEcnEWZnhcS/KNRLcvZaWishBEXlDRGaN9aDjPtXRMIURR/I7UTh7L19V1RZPyDaCY3vkHPyMwar1DezZurONr/Bn2dzF7XMQkStxKih/G79x6xxU9R/AP0TkCpxFTIesR+cD3DmHXwEPqqrdTwtdunMO+3Dm1GsTkTXAy8CUsRx03CsotbAworfwxDn4IRXAxH7fJwAD68O7s42v8GfZ3MWtcxCRucCTwA2qWu8l2dxlRP+Dqr4vInkikqSq/pKE1Z1zWAg871JOScAaEbGp6sveEXFYhj2H/h17VX1dRH4/1v/hQnfx9RVGhFEURvQThj0HP2U3MEVEckQkBLgD57n0Zy1wjyuabwnQrB8UovQ17sjv7wx7DiKSBbwE3K2qBT6QcTjcOYfJrvsYVyRoCOBPinbYc1DVHFXNVtVs4G/Av/iRcgL3/oe0fv/DIpz6ZWz/g6+jQ6x8AYnAeuCk6z3BtTwDeN31eQVOU/UQcMD1WuNr2UdyDq7vzwFVOAfsK4D7/ED2NTijIouA/3At+wLwBddnAX7nWn8YWOhrmUcof5qrrVuAJtfnGF/LPcJzeBJo7Hft7/G1zKM4hweBoy75twMrfC3zSM9hwLb/g59F8bn5Pzzg+h8O4gy4WTbWY5pURwaDwWDwSy50F5/BYDAYxilGQRkMBoPBLzEKymAwGAx+iVFQBoPBYPBLjIIyGAwGg19iFJTBYDAY/BKjoAwGg8HglxgFZTCMI1z1gg6JSJiIRIqzhtlsX8tlMFiBmahrMIwzROSHQBgQDlSo6o99LJLBYAlGQRkM4wxXLrTdQBfOdDJ2H4tkMFiCcfEZDOOPBJxVZKNxWlIGwwWJsaAMhnGGiKzFWdE0B0hX1Qd8LJLBYAnjvh6UwXAxISL3ADZV/auIBALbROQqVd3ga9kMBk9jLCiDwWAw+CVmDMpgMBgMfolRUAaDwWDwS4yCMhgMBoNfYhSUwWAwGPwSo6AMBoPB4JcYBWUwGAwGv8QoKIPBYDD4JUZBGQwGg8EvMQrKYDAYDH6JUVAGg8Fg8EuMgjIYDAaDX+K3CkpEVovICREpFJGHBlm/SkSaReSA6/VdX8hpMBgMBmvwy2zmrizNvwOuBSqA3SKyVlWPDdh0s6re5O7vJiUlaXZ2tucENRgMBsOY2bt3b52qJg9c7pcKClgEFKpqMYCIPA/cDAxUUCMiOzubPXv2jGrfk9WtlDV0MDU1mokJEWMRw+OcburkRHUrEcGBXDIxjrDgQF+LdJZeu4Ojp1to7OghOzGS7MQIRMTXYp2lrq2b/KoWggMDmJMZS2So/9wSDody/EwrdW3dZMaHk5sU6Vdt19zZS35VCwLM9rO2U1VK6zuoauokJSaMvGT/arvOHjsnqluxO5QpqVHEhAX7WqQPcaa5i/LGDhIjQ8jxwnUnIqcGW+4/V9SHyQTK+32vABYPst1SETkInAa+rqpHB24gIvcD9wNkZWWNWqBXDpzmtxsLAViSm8D3PzqL6Wkxo/49T1BU28b31x5l88m6s8siQwL53OW5/OuVkwkJ8p0HV1V5dscpfr2+kLq27rPLL5kYx/c+MpP5WfE+kw2cSv2Hrx3j9cNnzi4LCw7gnqXZ/Ns1UwkP8a2Sf+VAJT996wQVjZ1nl81Ij+E7N81gWV6SDyWDpo4efvz6cV7aX0Gv3VmuJyQogDsvm8jXrp/m84ft+wW1/Oj1fI6faT27bEpKFA+vmcGV01N8KBl09Nj49bsn+cvOMtq6bYCz7T42fwLfvH4a8ZEhPpXvUEUTP3wtn10lDWeX5SZH8s3rp7N6dprX5bG0HpSIJAOfB7LppwxV9bPD7Hc7cL2qfs71/W5gkap+qd82MYBDVdtEZA3wa1Wdcr7fXbhwoY7Wgmrq6KGkrp2dJQ088X4x7d02fn3HpT750wA2najhi8/uIzQ4gPuW57AkL5GWzl7+vq+C1w+fYeGkeP5872XEhnv/YdFjc/DVF/bz+uEzLMlN4O4l2aTFhnKwvJk/bS6mtrWbH906h09cNtHrsgHsPdXI557eTbfNwT8ty+aKKcl02ey8evA0L+2rZEZ6DM98dhHJ0aFel83hUL7zyhH+srOMOZmx3Lssm6zECI5XtfDklhLKGjr4jzUz+NzluV6XDaCkrp27/rSDmtZuPrU4i6tnpOJQ5a0jZ3hxTznZSZE8/ZlFPvMy/HbDSX72dgG5SZF8Znk2k1OiKa5r46ktJRTVtvPlq6fwb9dM8Yk1VdXcyWf+ezfHz7Ry87wM1sxJJzhQWJ9fwwu7y0mNCePpzy5ickqU12UDeGF3GQ//4wiJkSH807JsZmXEUNHYyf9uP8WJ6lY+tyKHh9fMICDA820nIntVdeE5K1TVshewDfgJ8AngY30vN/ZbCrzV7/u3gG8Ns08pkHS+bRYsWKCeoK61S2/53RbN/dZruulEjUd+cyTsLK7XKQ+/rmt+/b5WNXWes/6VA5U6+eHX9Lbfb9XOHptXZXM4HPovz+7VSQ+u0z++V6gOh+ND65s6evTTT+7Q7IfW6cv7K7wqm6rqsdPNOuu7b+rKxzZoUU3rOes35Ffr9G+/odf94j1t6ezxunzfefmwTnpwnT7y2jG12T/cdu3dvfrFZ/fopAfX6TPbSrwuW1l9u172w3d0/n+9rQfLG89Zv72oTud+/y294rENWtva5XX5frvhpE56cJ1+5bl951z3Xb02/fqLB3TSg+v0txtOel22pvYevfJnG3XWd98c9JlxoKxRF/zgbV30yDta2djhdfn+vrdcJz24Tu/+805t6vjwdd9rs+v3Xjmikx5cpz96/Zglxwf26GDP9cEWeuoFHBjlfkFAMZADhAAHgVkDtknjAwtwEVDW932ol6cUlKpqS2ePrv7V+zr7u29qhRcvqDPNnbrgB+/olT/dqE3tQz9AXzt0Wic9uE6/+/Jhr8mmqvr4pkKd9OA6fXxT4ZDbdPbY9PY/bNPp335DC860eE225s4eXfnYBl30yDt6umno/2xzQa3mfus1/edn9pyjYK3k//Y4HxI/ePXokMfttdn1s/+9S/O+9ZruLqn3mmxdvTb9yP/brLO/96Yerxr6P9t7qkGn/sfres+fd6rd7r2223SiRic9uE6//Ny+cxR7H3a7Q7/y3D7NfmidbjlZ6zXZ7HaH3vWnHTr54dd0R1HdkNvlVzXr7O++qR/97Rbttdm9Jt/eUw065eHX9Y4/btfu3sGP63A49D/+cUgnPbhOXz902uMyDKWgrB6kWOdyv40IVbUBDwBvAfnAi6p6VES+ICJfcG32ceCIawzqN8AdrhP1CtFhwfzx0wtwqPL1Fw/icFh/aFXlwb8for3bxuN3LyA2Ymj33Zo56XxuRQ5Pbz/F+vxqy2UDOHa6hcfeOsGaOWncf8XQLqiw4ED+36cuJSIkkC89tx+b3eEV+b6/9ijljZ387lPzSY8NH3K7FVOSeHD1NN48eoa1B097Rbbyhg6+8/IRluQm8NAN04d0QQUFBvDLO+aRERfON/52iK5eu1fk+/nbBRyqaOZnt1/CtLToIbebnxXPt2+ayXsFtTy9vdQrstW3dfNvLxxgelo0P/nYXAKHcEEFBAg/vm0ueclR/NsLB2ju6PWKfE9vL2VLYR3/dfNsFucmDrnd9LQYfnTbHA6WN/GHTUVeka2r187XXjxIcnQof/j0/CHHrUWE731kFnMnxPLwPw5T09LlFfmsVlBfwamkukSk1fVqcWdHVX1dVaeqap6qPuJa9riqPu76/FtVnaWql6jqElXdZuF5DEpWYgTfuWkm24vreWl/peXHe+voGTadqOVr101laurQD4k+vrl6OlNSovjPV49Z/iBzOJRvv3yYuPBgfnzr3GF9/KkxYTxy6xyOn2nl2R2DBvB4lB3F9by0r5IvrMxlYXbCsNvftyKXSybG8V+vHqOpo8dy+f7z1aOIwC8/OY+gwPPfljFhwfzo1jmU1LXzO1fgjp2+SBQAACAASURBVJWcONPKn7eUcOeiiVw/a/gx108vzmLVtGR+/nYBta3dw24/Vh578wQtnb385s5Lh41gDQ8J5FefnEddWze/Wl9guWzlDR089uYJVk1L5g43xlw/ckkGN81N5zcbTlJW32G5fL98t4CSunYe+/hc4iLOH6ARHBjALz4xj/YeO4++cdxy2cBiBaWq0aoaoKphrs/Rqurb0DcP84mFE7lkQiw/e+sEnT3WKYEem4MfrMtnelo09y7LdmufkKAAvv/RWZQ1dPDk5mLLZAP4x/5K9pU18fCaGee17Ppz/axULp+SxM/fKaCh3Tol4HAo3197lMy4cB648rxxNGcJDBB+dOtsGjp6+MN71vZmN56o4d38Gr56zZTzWnb9WTEliVvmZfDE+8VUW9ibVXW2XXRYEN+8frpb+4gI371pJl29dn7xzgnLZAM4WN7EC3vK+eyKHLc6beAMif/kZVn87/ZTFNa0WSrfz98+gaL86NY5bgdmfOemmQQGCD9729q2K2/o4KktJXx8wQSWT3YvMnRyShSfXZ7DPw5UcvR0s6XygRcySYjIR0XkZ66X25NqxwsBAcLDa2ZwpqWL/9lWatlxXtxTTmVTJw+vmTFsD7s/yycncc2MVJ54v5jWLmtcGja7g99sOMnM9Bhum5/p9n4iwndumklbt43/3lpiiWwAbxw5w/EzrXxz9bQRhY/Pyojl5ksyeGbbKcssAVXlF28XkJUQwWeW54xo33+/dhp2h1pqRW0vqmd7cT1fvXrKiEKgc5OjuHvpJF7YXW6pJfDzdwpIiAzhS1dNHtF+X7tuKqFBAfy/DSctkgyOnm7m5QOn+ezyHDLi3Ot4gNO78PnLc1l78DRHKq1TAr94p4AAEb5+3bQR7ffFVXnEhgfz07esVaBgsYISkUdxuvmOuV5fcS27oFicm8jlU5J4amuJJa60bpud328sZH5WHJdPGfkcmC9fPZmWLhvP7ijzuGwALx84zan6Dr46ivDdqanR3DA7jf/ZWkpzp+cVqMOh/Hp9AXnJkdw0N2PE+3/56il02+w88b41VtTGEzUcrmzmgSsnEzyCjgc4Xcy3L5zIc7vKONNsjRX1q/UnSY0J5Y5FI59D+IWVeQQFBPAni6z3/WWNvF9Qy+cvzyV6hHOvkqJCuWvJJF49eNoyBfqb9SeJDQ/mn1fmjXjfz1+RS1RokGVtV1TbxssHKrl3WTZpsWEj2jc2PJjPrchh04laTvSba2YFVltQa4BrVfUpVX0KWO1adsHxhZV51LZ287IFY1FvHD7D6eYuvnz16OZvzJ0QxxVTk3lyczHdNs8qUFXlifeLmJEew7UzU0f1G/965WRau238Zafnx6I2FdRQUN3Gl66aMuTg+fnITY7ixrkZPL+7nHbXxEpP8odNRUyID+fWEVie/fniyjxsDrWk7faeamBXSQNfWJk3quwkqTFhfGxBJi/uKbfEAv39piLiI4K5Z+mkUe1/34ocyxRoSV07bx+r5p6lk0Y1FzEmLJg7LpvIukNVVDZ1Dr/DCPnzlhKCAwP4/HmCmc7HXYsnER4caJkC7cMbqQbi+n2O9cLxfMKyvETmZMby5JYSPB1M+Mz2UnKTIrliyjmpqtzm85fnUN/ew5tHzgy/8QjYVdJAQXUbn1mWPerJj7MyYlmam8hfdpRh93A05P9uP0VydCg3zk0f9W/cuyyb1i6bxwNh8qta2F3ayL3LskdsPfWRlRjB1dNT+OvOMo9b789sP0V0aBCfHMOE6s9dnku3zcGLe8qH33gEVDR2sD6/mk8tzhp1iqXUmDA+Oi+Dv++rOJvVwVM8ubmY4ABnZpLRcu9y577PbC/1hEhnqWvr5u97K/jY/EySokY3GT0+MoRPLJzAKwcqLQ2EsVpB/RjYLyL/IyJPA3uBH1l8TJ8gIty9ZBKFNW3sPdXosd89UtnMvrIm7loyaUwzuJfnJTEpMcLjEXP/u+MUMWFBfOSSkbvP+vPpJZOobOrkvYIaD0kGZfUdbCqo5c5FWaNWAADzs+KYkxnLM9tKPdr5eHbHKUKDAvj4gglj+p17lzk7H68frvKQZM7Q7TcOn+FjCyYQETL6jGh5yVEsyU3ghd3lHp2K8dwup7v6zlG4Hvtz56IsOnqcWUQ8RWtXLy/tq+TmeRljykYyIT6Cq6an8Pe9lfR6cCrGC7vL6bY5uG/FyMY8B3L30kn02pV/7K/wkGTnYnUU33PAEuAl12upqj5v5TF9yY1z04kKDeL53Z7rLf5l5ynCgsf+EAsIEO5anMXu0kYKqj3jN65p7eLNI2e4feHEMeeuu25WKsnRofx1p+fGyf6y6xQBIty5aGwplUScbXeypo1DFZ4ZtG7t6uXl/ZV85JKMYcN7h2P55EQmJUbw932ee1C8uKeCHruDTy8ZmwIApxIoa+hge3G9ByRzRrS+sLucq6anMCF+bCmV5mfFMS01mud3ee66e+1QFZ29du5cPPa2+8TCidS1dfPeiVoPSOZ0yf/fnnIW5SQwOcW9qMehmJwSzYJJ8Ty/u9zjXqM+LFFQIjLd9T4fSMeZ7LUcyHAtuyCJDHVaEusOnfZIxFxXr51XD1Zx09wMj+TU+9j8CQQGCP/wkKvqlf2nsTmUT3ngRgwODOC2+ZlsOlHrkZBzm93B3/dWcvX0FLdDt8/HmrnphAQF8JKHlMC6Q1W099i5ywNtJyLcMi+TbUX1VDWPfbxCVXl+dxlLcsf+EAO4flYaseHB/J+H3Hzv5ldT19bDXUtGN/bUHxHhk5dN5GBFMyc91HF7cU85k1OiuHRi3PAbD8OqackkRYV4zEW6u7SR0voOPrHQM3kwP3nZRLp67FS3WOPms8qC+nfX+88Hef3MomP6BR9fkElXr4N3PZC9YdOJGtq6bdw8b2zusz4So0K5fEoSaw+c9oi75dVDp5mTGUtesmeSW958SSY2h3rEVbWjuIG6tm5uvXR0wQcDiQkL5tqZqaw9eJoe29jdLWsPnCY3KZJ5HniIAdw2PxNVeHn/2F1VByuaOVXfwW3zx2a19xEWHMgNs9N451i1R8bJXjlQSUp06JjGZPtz0yXpBAi8emjs111hTRv7ypr4xMIJHklIGxwYwC3zMtl4ooYWD3R6X9xTTmRIIGvmeCbJ9a2XZrL5watGHAnoLpYoKFW93/XxBlW9sv+LCzSKr49LJ8aTHhvGa4fGHoyw9uBpkqJCWHqe9Cgj5ZZ5mVQ2dbK3bGzjZCV17RyqaOajYxx76s+M9GimpESx9sDYH7JrD1YSFRrk0fIKt12aSWNHL1sKx+ZuqWnpYkdJPTddkuGxrNqTEiNZMCneI6mZ1h44TUhggFtZI9zlprkZtPfY2XRibGOMLV29bDxRy41z00cVlTkYKdFhLM5JZN2h02N2Vb20r4LAAOEWD3WMwGm999p1zCnLOnpsvHbI6ZEZy7hif4IDAzz2PwyG1UESg6Uf8npKIm8SECCsmZPO+wW1Y+rxtHXbWJ9fw41z0kc0MXc4rp2ZSnhw4JgHhde59h9LdNxARISb52Wwq7RhTK6qbpudN4+c4bpZqR4t3rhiShJRoUG8fXRsD4p1h6pQhY9e4rm2A1g9K438qhbKG0Y/r8fuUNYdOs3KackeLdWyJDeBxMiQMVspbx05Q4/N4dGOETiv4+LadvKrRu/mU3Va/8vyEkmJ9pxFMW9CnEc6ve+dqKWz1+4xj4w3sGoMKk1EFgDhInKpiMx3vVYB/lWO1gJunJtOj93Bu8dG/yB791g13TbHmKPjBhIZGsQVU5N491j1mHqLrx46zaLshBHNkHeHvl77+vzR97TfL6ijpcvm8bYLDQpk1bRk3s2vHlM4/NqDp5mRHuOR8Z3+XDfLOQ/t7TFcd7tKGqhp7fa4AggKDGD17DQ2Hq8Z01y8tQdPk5UQ4THXaB83zE5DBN4+NnolcPxMK6X1HR6vERcQIKyencb7J2vHNLb9+pEzJESGsChn+FyU/oJVFtT1OMeaJgC/4IPxp38HHrbomH7DpRPjyIwLH9NYyjv51SRHh1pSefbqGamcbu7iWJVbeXvPobSunYLqNm7wkB+7P5NTopiUGDGmMby3j54hJiyIFW7mFxsJ181Ko66th/2jdJGeae7iQHkTN3nQ8uxjUmIk09Oiefvo6B+ybx6pIiw4gKtneL7y7NUzUujosbOzuGH4jQehuaOXbUX13DQ33eMFBxOjQpk3MY6Nx0ffMXrjyBkCBK6b6fn7YvWsNHpsDrYW1g2/8SB09drZkF/N9bNSPeqRsRqrxqCedo033TtgDOqjqvqSFcf0J0SEa2aksKWwblSDwr12B++fqOWqaSmWVK+8anoKIvDusdHdjOtdN/HV00eXOeJ8ONsulW1F9aPK3OBwKBtP1LBqWsqY5j4NxappyQQHyqitlI2uMZhrZni+7QCum5nK7tKGUUVCqirv5tewYnKSx8Yo+rM0N4nQoAA2jFIJbCqowe7QUWcsGY6rpqVwsKJ51BNP3zhcxaKcBEsqMc+fFE90aBCbRhluvvlkHe09dlbP9nzHyEqscvF92vUxW0T+feDLimP6G6ump9DV62Bnych7i7tLG2jttnGVBb1YcOYhm58VP2orZcPxaqakRJGVaI239poZqfTYHGw+OfLe4qHKZuraeiyxAMAZzbc0L4l3Rqmg1udXkxkXztRUa8p6XzszDYcyKiVQUN1GZVMnV1ukPMNDAlmWl8jGEzWjci+vz68hKSqESyZ41r3XR9/9NppAjpK6dk7WtLHag4El/QkODGDFlCQ2nagdVdu95fIqLMvzXMCVN7DK1ot0vUcB0YO8LniW5iYSGhQwKpfBhvwaQgIDLHFR9XHNjFQOVzaPOBihtauXncUNlilPgIXZ8cSGB49Kga7PryZAYOVUz4QgD8aV05IpqWsfcTBCV6+dLYV1XDMjxeMuqj5mZcSQFBXClpMj72n3tfdVHox8HMhV01M4Vd9BcV37iPbrtTvYdKKGKy3yKgDMTI8hLSbsrJU7Era4XG+rplnXdiunJnOmpYuC6pGVCFFVtpys4/KpyZZ4FazEKhffH13v/znYy4pj+hthwYEszUvkvYKRPyg2HK9hSV7iqHOMucOV050P8JFaKZtP1mFzqCXuvT6CAwO4fEoSm0+OvLe4Pr+GhZMSxpyd4Xz0ZZQfadttK6qjq9fBVRZZKOAcUF8+OYkthfUjnuu24XgNczJjSY2xZk4LcDbsf6Qdtz2ljbR02SyzjMHpXr5yejKbC+pGnFpo68k6MuPCmWSRVwFg5TTnPTtSC6+otp0zLV2WdnitwupyG4+JSIyIBIvIehGp6+f+u+C5cloKJXXtlIygt1je4OxdXjnNOgsAYFpqNElRoSMedN10ooaYsCDmZ1njZulj+eQkqlu6Kap1v+2qW5yBH56c+zQYeclRpMWEjXg+1MbjtUSEBLIk19ooqhWTk6hr6+b4CEohNLb3sK+s0VLrCZz55XKTI0d83W084fIqeGhy7lCsmJxMa7eNwyOow2R3KNuK6lgxOckyyxggPTacaanRIx6H6mtro6DO5TpVbQFuwpnuaCrwDYuP6TescimZ90dgRfVdTKOp+zQSRIQVkxPZWljntpWiqmwtrGdZXpLlkUB9N9NIHmTbirzXdpdPSWJrYf2Iws23FtaxOCeB0CDPzc0ajMtdD/GRKNBtRfWowhUWukb7WJaXyK6ShhFZKZtP1rFgUjxRFnoVgLOdh+1F7ucNPFLZTEuXjWWTrR/fWT45ib1ljSMKvtpSWEdWQgQTE8bfDB+rFVTfTL81wHOqOrr40nHKpMRIMuPCR3SxbyuqJzk61GPpg87H8slJ1LX1cMLNHGRlDR1UNnV65UacmBBBVkLEWd++O2wrrCc2PJiZ6TEWSuZkxZQkmjt73a54WtXcSXFdu9ultcdCWmwYk1OiRuSC3FpUR1RoEJdMsL4izrK8JNp77G5bKXVt3eRXtbDC4o4HOMPNp6dFj+ie3erqGC3Ls16+JbkJ9NgcHCxvcmt7m93BjqJ6r1x3VmC1gnpVRI4DC4H1IpIMWFP6009ZkpvIjhL3xgNUlW1F9SzLS7TUVdBH30W7xc0H2TbXTeuNGxGcWbp3FNVjc6On3dd2S3MTLRtE70+fheeuAt1W6Gy7pV6KoloxOYldJQ1uT4rdXlTP4pwEr8yRWeJK3eWuEth+9rrzTtstyU1kzyn3225rYR3T06ItCS8fyKKcBERwOzr4YEUzrd22ceneA+vLbTwELAUWqmov0A7cbOUx/Y2leYk0dfS6ZaWcrGmjrq2b5V5SABlx4eQmR7r9kN1aWEdKdCh5yZHDb+wBlk9OorXbxkE3SlyUN3RS2dTJci9Yd+DsaU9LjXb7QbGtqJ6EyBBmpFlv3YHzIdttc3DYjbY73dRJSV2715RnQmTIiKyUbUV1RIcGMSfTO/VOl+Yl0tXr4EDZ8FZKV6+d3aWNXlMAcREhruvOvbbbWliHiPc6Rp7G6iCJYOBu4AUR+RtwH+CZojDjhL4Lw52bcZtLUXjzYlqel+TWeICqst3lKvCGdQcfWGo73Kgj1OdmWeol5Q7O3uze0oZhLTyndVfnNesO4LJsZwaSXaXDK9C+cT5vuoGW5SWxu9Q9K2VrYT2LcxO9lgFhSU4iIrhVv2rvqUZ6bA6vtt2S3MSzxx2OLYV1zMqIISHSuqhWK7H6H/8DsAD4ves137XsoiEzLpyshAi3LvZtRfVMTAj36mDmsrxEOnrswxbiO1HdSn17j1eV50h62tuK6r1q3YFTQbX32IdNGVVa30FVc5dX2y4xKpQpKVHscsPC21ZUT2Kks2fuLZbmOS284ayU8oYOyho6vGYZA8RGOMcx3ekYbSmsIyhAvJrfbnFOAl29Dg5Xnr/t2rtt7C9rHLfjT2C9grpMVf9JVTe4Xp8BLrP4mH7HktwEdhafP+LL7lB2FNd7zb3Xx2LXeMBwN2PfGIq3L3Z3xgOc1l2d18bu+uh7KA2nBHxhoQBclpPA3tLG8153zsjMOpbmec+6A6eFJzJ82/VFZnq77RbnJLK/rGlYC29rYR3zs+ItnbM4kL7rbscwOQ13lTbQa9dxO/4E1isou4jk9X0RkVzArZFHEVktIidEpFBEHhpkvYjIb1zrD/lzpd6leYm0dNnIP09PO7+qhZYu29kBZG/RZ6X0PQiGYntxPVkJEWR6OHv5cPSNBxwsH9rCK6huo66th2VevhFTY8LITowYdhxqe1E96bHObb3J4pwEWrvPf90V1bZT09rtdQXwwVjKcMrdGdU6JcX6qNb+LMpJGHYMr6mjh8OVzV6Jau1PYlQoU1Ojhm+7k3WEBAVwWfb4yV4+EKsV1DeAjSKySUTeAzYAXxtuJxEJBH4H3ADMBO4UkZkDNrsBmOJ63Y8fuw6X5g4/ltJ3sS22eBLnYCzNS2RPaeOQvUWHQ9ld2mD5BNPBODsecB433/a+8ScvK3dwPsh2lzYMGaXpcCjbi+tZ6mXrDjj7YDqflbLtbIi099uubyxlqPFPb0e19qfPSjmfEthR7Jw75gsLxZ3xzy2FdSycFO/RmmjexuoovvU4FciXXa9pqrrRjV0XAYWqWqyqPcDznBv9dzPwjDrZAcSJiF+m6k1z9Z7PZ5LvdFko6bHetVDA+WA/33jAiepWmjp6WZzj/YdY33jA9uKhLbwdxQ1MiPfu2F0fi3KcUZonawbPj3aypo2G9h6vheb3JyMunAnx4ew+T6DEjuL6s+Ok3mZxTgKdvUPPhyp0RbX6ouOREBkyrJWypbCOyJBALvFwbSp3uCzbOf45VIHF2lZnJpHxPP4E1kfxhQH/Cnwf+C7wRdey4cgEyvt9r3AtG+k2iMj9IrJHRPbU1o6tVPdYWJyTyK6SwcehHA5lV2kDi31USGxxbiIB8sE8p4H0WX6+sO7AqUD3lTUNOnve4VB2ltR73TXax+Kz41DDtJ2P/ttFOQnsKmkYNFuIqrKjuIHFuQlet1DAOUYGDFkfqi+wyFch0otzEs9rpWwtdF53vkjAenb8c4jOR59lPJ7Hn8B6F98zwCzg/wG/xemu+1839hvsbhl4h7mzDar6hKouVNWFycnWp3EZiiV5CbR02Th+5tzxgIIal4Xio4dsbHgwszJih4w03OmyUCbE+yZVytK8RHpsDvYNUiTwZE0bjR29PlMAE+LDSY8NY8cQPe0dxfU+s+4AFmUnUN/eM2hOw4Jqp3XnK+WeFBXK5JSoIef0bC+qJyM2zCfWHXwQpXn09Ln3bKVr7pi3xz37SI8NZ2JC+JAdo62FdcSEBTHbS3PHrMJqBTVNVe9T1Y2u1/048/ENRwUwsd/3CcDpUWzjN/S5xwZz8/X1IH31kAWnEjgwiJXSZ6H4wr3Xx2U5CQQI7BjEwuuzUHz1kBVxhhjvLD7XSnG2XYPPZIMPojQHUwJ9becLF1ofi3MS2FPaeI6VcrbtfDD+1F82GHwMzx8SsF6W7Wy7gdddX3mNZXlJBHoxMtMKrFZQ+0VkSd8XEVkMbHVjv93AFBHJEZEQ4A5g7YBt1gL3uKL5lgDNqjr6GusWk+Hy8+8cxErZWeIcB/BlMseluYn02B3sPfVhK6XPQvFFgEQfMWHBzM6MHVS5942h+LLtluUlUtfWTeGAcai+8SdfKqjsxAjSYsIGdd/6Q9stzk2krdt2zlyygppWGtp7fKo8U2LCyEmKHFS5by2sI8kVTecrFucMbh2X1ndwurmL5V7IXWg1ViuoxcA2ESkVkVJgO7BSRA6LyKGhdlJVG/AA8BaQD7yoqkdF5Asi8gXXZq8DxUAh8CfgXyw8D4+wJDeBXQMivlSVXSW+G3/q47KcBAID5Jxw876b05cPWXAq0P3ljXT2fGDhqTp72b4aG+ujLwBioBLw9fgTOC28ZXnOnIb9e9oO17w7X6fAGcpK6Yva9PV1t9g1hjfwnt1aWM+Kyb6z7mDoKM2+YpXjffwJrFdQq4EcYKXrlYMzs/lNwEfOt6Oqvq6qU1U1T1UfcS17XFUfd31WVf1X1/o5qrrH0jPxAItzzs3LV1TrnMPj64dsVGgQcyfEnhPOvaPYOQ4wId770YX9WZKXSK9dP2Th+YOFAs7M64Nlrff1+FMfS/ISqW/v+VAl1oKaVpdl7Nu265tLNtA63l7kH223KMc5dtz/ns2vanXmzPSxAshJiiQpKuScKM33CpzFE709784KrA4zP3W+l5XH9kf6lFD/+VB9JRH65kr5kqW5iRyqaKat2wY4U/VvK6r36ThAH5dlOy28/uHmfXW2fOkG6mNZXiLbiz/IWt9rdzgzNPiJbPDBfDH4oO18Mf9pIItzEj80l6zH5mC7D7KqDMbZMbx+9+ymAmdF25VeqJ11PvrGP/tbUD02B9uK6lg1Ldnn96wnGF8F6sc5E+KdNY76FzDccLyGvORIsvygt7M0LxGba1IuwP7yJpo6ei0t7+4ug1l46/NrmJoa5fNeNsCyyYk0d/aeHUvxRolyd5kQH8HEhPAPuSDfza9helo0GV7ODDIYi3ISaO7sPVsBeHdpA61dNq7yg7bLjAsnMy78Q+Hcm07UMjM9hpQYd2bMWMui7AQqmzo5Ve8ch9pT2kBHj51V03zfdp7AKCgvc/2sVLYU1tHS1Utbt40dxfVcPcP3CgBg4aQEggPlbLTc+vwaggKEy6f6vicLH1h47d02mjt72V3a4Ddt1zcO9Z6r87HheDUhgQFnq9v6mmW5SWwvrqfbZqepo4e9pxq5xk/abonLiuurAPxufjUhQQGWV0Z2lyW5iWwvqqfX7qCxvYd9pxrPVsv2NVdOdyqi9flOq+7d/BpCAgN8PrboKayeqPuAiMRbeYzxxg1z0um1K+vzq3nn2Bl67cpV0/2jtxMeEsilWfG8m1+N3aG8caSKRTkJxIQFD7+zF1g+OQmbQ3mvoJa3j57B5lCu8YNeNjjHUuZnxfHqwdPYHcrrh8+wJC/Rq0lEz8fqOWm0dtl4v6CON46cwe5QrpnpHwoqMy6cOZmxrDtUhc3u4M0jZ1gxOYmIEP9ou+tnpdLY0cvWwjrWHa7C5lBumpvha7EAZ9XuKSlRvH7Y2XZrD57myunJRPnJdTdWrLag0oDdIvKiK/nr+HeKjpFLJ8YxIT6cJzeX8OctJeQkRbLIj5I53r5gAkW17Xxv7RFO1Xdwx6IsX4t0liW5iWTGhfPk5mKe2lrK1NQo5mf5T//n1kszOX6mlW+/fITKpk7uvGzi8Dt5iRWTk0iKCuGP7xXx31tLmJ4W7ZXy7u5y87wMDlU08721R6lq7uJOP7ruVk5LJi4imD9sKuKpLSXMSI9hRrr3SpMMxycWTmTPqUZ+sO4YdW3dfHyB/1x3Y8XqIIlv48zF92fgXuCkiPyof4bziw0R4evXTePo6RaOVLbwxVV5Xi1zMBwfuSSDiQnhPLujjNykSFbPSvO1SGcJDBC+sCqPfWVN5Fe18C+rJvvVQPDtCyeSlRDBc7vKmJISxbV+YqEABAcG8JVrprLnVCMF1W08cJV/td1diyeRERvGX3aWMT0t2m+8CgChQYF8+aop7CxpoKSunW9eP82v2u4TCyeSEBnC09tPMT8rzm+8Cp5ABsvR5fGDiFwCfAZn2PlGYAnwjqp+0/KD92PhwoW6Z4/vo9FVlbUHTyMifGRuul9d7OAsEvfGkSpumpvhF4Po/VFVXj5QSUhgIGvmpPld252qb+fNI2e4eV4mabG+H0Tvj6ryt70VRIUGccMc/8urXFTbxttHq/nY/Ey/CEDoj8OhvLinnLiIYFbP9r+2K6hu5d38aj6+YAIp0f7Vdu4gIntVdeE5y61UUCLyZeCfgDrgSeBlVe0VkQDgpKp61ZLyFwVlMBgMhg8YSkFZPZKWBNw2cM6TqjpE5CaLj30Oe/furRORscy/SsKpbC92TDuYNgDTBmDaoI+x8FtgKgAAIABJREFUtsOkwRZ6xcV3oSAiewbT8hcbph1MG4BpAzBt0IdV7WDmQRkMBoPBLzEKymAwGAx+iVFQI+MJXwvgJ5h2MG0Apg3AtEEflrSDGYMyGAwGg19iLCiDwWAw+CVGQRkMBoPBLzEKyk1cuQRPiEihiDzka3m8jYhMFJGNIpIvIkdF5Cu+lslXiEigiOwXkXW+lsVXiEiciPxNRI67romlvpbJ24jIv7nuhSMi8pyIjL8UDiNERJ4SkRoROdJvWYKIvCMiJ13vHkuQaRSUG4hIIPA74AZgJnCniMz0rVRexwZ8TVVn4ExV9a8XYRv08RUg39dC+JhfA2+q6nTgEi6y9hCRTODLwEJVnQ0EAnf4Viqv8D84U9b15yFgvapOAda7vnsEo6DcYxFQqKrFqtoDPA/c7GOZvIqqVqnqPtfnVpwPpEzfSuV9RGQCcCPO1F0XJSISA1yBMwk0qtqjqk2+lconBAHhIhIERACnfSyP5ajq+0DDgMU3A0+7Pj8N3OKp4xkF5R6ZQHm/7xVchA/nPkQkG7gU2OlbSXzCr4BvAg5fC+JDcoFa4L9drs4nRSTS10J5E1WtBH4GlAFVQLOqvu1bqXxGqqpWgbMjC3gsnbpRUO4xWMrsizI+X0SigL8DX1XVFl/L401c+SNrVHWvr2XxMUHAfOAPqnop0I4H3TrjAdc4y81ADpABRIrIp30r1YWHUVDuUQH0rwI2gYvAnB+IiATjVE5/UdWXfC2PD1gOfFRESnG6ea8SkWd9K5JPqAAqVLXPgv4bToV1MXENUKKqtaraC7wELPOxTL6iWkTSAVzvNZ76YaOg3GM3MEVEckQkBOdg6Fofy+RVXNWQ/wzkq+ovfC2PL1DVb6nqBFXNxnkNbFDVi67XrKpngHIRmeZadDVwzIci+YIyYImIRLjujau5yAJF+rEWZ1klXO+veOqHL4zC9RajqjYReQB4C2e0zlOqetTHYnmb5cDdwGEROeBa9rCqvu5DmQy+40vAX1wdtmKcBUkvGlR1p4j8DdiHM8J1PxdB2iMReQ5YBSSJSAXwPeBR4EURuQ+n4r7dY8czqY4MBoPB4I8YF5/BYDAY/BKjoAwGg8HglxgFZTAYDAa/xCgog8FgMPglRkEZDAaDwS8xCspg8BNcGcL/xfU5wxXGbDBctJgwc4PBT3DlOFznyo5tMFz0mIm6BoP/8CiQ55oIfRKYoaqzReRenBmiA4HZwM+BEJwTp7uBNaraICJ5OMvCJAMdwOdV9bj3T8Ng8AzGxWcw+A8PAUWqOg/4xoB1s4FP4Sz98gjQ4UrUuh24x7XNE8CXVHUB8HXg916R2mCwCGNBGQzjg42uOlytItIMvOpafhiY68oyvwz4P2dqOABCvS+mweA5jIIyGMYH3f0+O/p9d+C8jwOAJpf1ZTBcEBgXn8HgP7QC0aPZ0VWbq0REbgdn9nkRucSTwhkM3sYoKIPBT1DVemCriBwBfjqKn7gLuE9EDgJHcRbUMxjGLSbM3GAwGAx+ibGgDAaDweCXGAVlMBgMBr/EKCiDwWAw+CVGQRkMBoPBLzEKymAwGAx+iVFQBoPBYPBLjIIyGAwGg19iFJTBYDAY/BKjoAwGg8HglxgFZTAYDAa/xCgog8FgMPglRkEZDAaDwS+5qOpBJSUlaXZ2tq/FMBgMBkM/9u7dW6eqyQOXX1QKKjs7mz179njlWK1dvby8v5La1m6unZnGnAmxXjmuu1S3dLH5ZB1JUSFcPiWZwAAZficvUt7QQWVTJ3MyY4kM9b/LtKa1i/DgQKLDgn0tyqCoKv0q6xoMfo2InBpsuU/vfBFZDfwaCASeVNVHB6y/C3jQ9bUN+KL+//bOOzyO6nrY7111rYpVVsWWrGpL7k3uxoViwDiQBGKqgVBDIEBCCiGN/JJ8IUBICCUJ2KbHwfQSYwPGGMtd7pZtWbK61XuXttzvj901QlbZMrMr0LzPM493Z2d2jq9m59xz7ilSHrZ9Voy1wZsZMEkpszwl91Acr2jhlhf3UdXSBcDTWwt49KppXDUrwcuSWfnPnlJ+/0Eu3SYLAIvHG3hu9SwC/Xy8LBl0Gc389r1jbMgpByA6JIDnb5zFjLERXpbMSml9Bw+8cYh9xY346gR3L0vn/gvHDRtlsOVENX/ZdJLC2nYWpkfz6FVTiQ0L9LZYAJjMFtZmF/HOwTME+vlw3wXjWJYZ422xzlLf1s2/vyjkRGULc1MiuX1xKgG+3v9N2MmrauXN/WXodIIb5iaRGBnsbZFUZ8g1KCGEQQjxkBDiOSHEOvvm7oWFED7AM8ClwETgWiHExD6HFQFLpJRTgT8Az/X5fJmUcvpwUk6na9u45rldCAFv/3ABRx5ezrzUKH71zlEKa9u8LR6v7CrmoXeOMi81io/uO4+HvzWRL07V8vjmPG+Lhsls4faXc9iQU86di1N5bvUsgv19uO2lHJo6erwtHgU1bXzn2R3k17Txi0syuWRyHE9uyefVPaXeFg2A1/aUcNvLOQgEN8xLYm9RAzet20uPbSLiTbpNZn7w6gH+/NFJwoL8aOkyctvLOWw7Vett0QAorG1j5VPZrMsuoqalm8c/PsV96w8xXPrlvbm/nJVPbeelnSWs3V7EZf/YTkGN958nauNIkMR7QDjwKfC/Xpu7zAEKpJSFUsoe4L/06QAqpdwppWy0vd0NDA8TZAA6ekzc/nIOfj46Ntw5n5ljIwgL9OPv10zHRyd4+rMCr8qXU9zA7z84zgWZMay5KYsJ8WHcvDCFa2Yn8tKuYiqaOr0q3582nmB7fh2PfHcKv1wxgeWT4vj36lk0dvTwzFbvjl1Ll5E7XslBCHjrrgXctTSNf1wzg0Xp0Ty26STNHUavyrejoI7fvHuMZRkxvHfPQh6+fBL/uHYGJ6taeXlXsVdlk1Lym3eP8emJan5/+SQ23DmfD+5ZREq0nl+9c5Ruk9mr8tW3dXPDmj0YzRbevXshm3+8mAcvzWRTbhUfHqn0qmwAm3Or+Nmbh5mbEsWehy5gywNL8PXR8cAbh72uQM0WSX1bt2rf74iCCpZS/kJKuUFK+ZZ9U+DaY4CyXu/LbfsG4lbgo17vJfCxEGK/EOKOgU4SQtwhhMgRQuTU1qo7W3t88ykKa9t56toZXzG/Y0IDuWb2WN47XKHqH3Mw2rpN3Lv+IGMignji6un4+Xz5p7/n/HQsEl7Z3a8b2CN8nlfDCzuKuXlBMtfMGXt2/4T4MFZOHc1/95XR2eO9B9nv3sultL6DZ66bSZohBACdTvDgpZm0dJl480C512Sra+vmR+sPkmoI4alrZ5x11V40MZYFaVGsyy7CZPaeFfX+4Qo25JTzo/PTuWlBMgD6AF9+ddkEyhs7+eholddkk1Lykw2HqWvv4cXvz2HyGOta8e3npZIRG8ozWwu8qgTKGzv4yeuHmDomnDU3ZRGh9ycpSs/PL87gcFmT1y3Ql3YWc8ET2yhr6FDl+x1RUB8KIVaocO3+nPb93glCiGVYFdQveu1eKKWcidVFeLcQYnF/50opn5NSZkkpswyGc4JEFONgaSMv7Cxi9bwkFqRHn/P597ISMFskHx3zzo/x75+corKliydWTSc86KsL+wkRwSxMj+aDwxVe+TG2d5v41TvHSDPo+eWKzHM+v27uWFq7THx83Dtjt6OgjncOnuGupWnMTY36ymeTx4QzPXEUb+SUDXC2+vy//52gtcvIs9fPPCeg5Mb5SVQ0d7G9oM4rstW3dfPw+7lMTxzF/ReO/8pnS8YZSInWs36v91yk7x46w7ZTtTx0aeZZ5QTgoxPctCCZk1WtHCpr8opsUkp++fZRJPD0dTO/skZ85awEovT+vJHjvYlRWUMHj23OY+bYCBIiglS5hiMK6j6sSqpLCNFq21oUuHY5kNjrfQJQ0fcgIcRUYA1whZSy3r5fSllh+7cGeAery9ArSCn5w4fHiQ4J4BeXnvuABciMCyXVoGdzrucfsqeqW3lhZzHXzhnLrKT+gw2+NTWe8sZOciuU+NM6x7+2neZMUyePXDm130XpOcmRRIf48+mJGo/L1m0y85t3j5EUFczdy9L7PWbl1HhOVrWqNoscjF2n63n74Bl+sCSN8bGh53y+NCOGYH8fPjle7XHZAB7dlEdbt4lHr5p6TqSoTif41tR49hU30Nju+TXG5k4jf/jwBDPGjmL1/ORzPr9sajy+OsHmXO+M3QdHKtmeX8eDl2aeExDh56Nj5dR4Pj1RTXu3ySvy/frdY/joBH/89mTVgoSGVFBSylAppU5KGWh7HSqlDFPg2vuAcUKIFCGEP3AN8H7vA4QQY4G3gdVSylO99uuFEKH218By4JgCMrnER8eqOFDaxE+XjydkgJBoIQSLxxnYV9zgcZ/7Y5vzCPbz4WfLMwY8Zsl4q3W5w8Mz7ZrWLtZsL2Ll1HhmJ0f2e4xOJ1iWEcPneTWYLZ618P6zp5TCunZ+f/mkAaMcL5gQC8DWPM8qUCklj2w6yejwwAGVZ6CfD4vHGfjsRI3HreP86lbe2F/G6nnJ/SpPsI6dRcLnpzw/+fjXttM0dvTwx29P7jfNIjzIj7mpkWw54XkF1W0y8+imk0yID+P6uUn9HrN8UhzdJgt7ixo8LB1k59ex7VQt9184jtGj1LGewMFKEkKIy4UQj9u2lUpcWEppAu4BNgMngA1SylwhxA+EED+wHfZbIAp4VghxSAhhT2KKBbKFEIeBvcD/pJSblJDLWYxmC3/ZdJKM2FCumpU46LGL0qPpMlo4WOo5l8GB0kY+OV7NHYtTidD7D3hcTFgg42JCyPawgnpqSwFGs4WfDqI8ARakR9HaZSKvqtVDklmDXp7ZWsD81CiWZgwcDp0SrWd0eKDHHxSbc6s5XNbEfReOGzRFYOG4aKpauihr8GwQzGOb8wj29+We8/tXngBTxoQTFujLnkLPjl1Vcxfrsou4YtpoJo0eOEfxvHEG8mvaPL52/MquEsobO3loReaAOYqzkiLw99V5/DdrsUj+/NEJxowKYvX8/pWnUgyZByWEeASYDbxm23WfEGKRlPJBdy8updwIbOyz71+9Xt8G3NbPeYXANHevrwTvH6qgpL6D52/MGjLZ1e5eO1zWxLw+axlqIKXksU15RIf4c8uilCGPz0qO5H9HKjyW5FlS3876vaVcMyeR5Gj94LIlWa2rnJIGJo5WwoAfmhd3FlPX1sO/V48f8thZyZHsLar32NiZLZK/fpxHqkHPlTMHD26dnWy973JKGhgb5Zncmf0ljXx8vJoHLhpP5CATI51OkJUcyb5izyqof3yWj0VKHhhiYpSVZB+7Ri6eFOcJ0egymnn289OcNy6a88YNvG4e6OfDzLGjPD4x2nisktyKFv529TTV88QcsaBWABdJKddJKdcBl9j2jXjMFskznxcwIT6MCycMnXAYofdnzKggjpxp9oB01h/VrsJ6frg03aFqDFPGhNPSZfLYTHvN9iJ0QnDv+eOGPDYhIojYsAAOlDQOeawStHYZ+fe2QpZlGJiV1L/rsTdZSRFUt3RT0dzlAengwyMV5Ne08cBFGfj6DP4zHh8TSmigL/s9NHYAz2wtIErv6MQogtO17R7Ldatr6+bN/eVcNStxyGTXKQnh+PvqPDp2bx84Q0N7z4Bu295MTRhFXlWrx3LdpJQ8/0UhKdF6rpg2WNC1MjhaLHZUr9fDq2aPF/noWCWFte3csyzd4VnzlDHhHPOQglq7vYjwID+umTO469HOFFsU01EPyNfU0cOb+8u5YvpoYhyodCCEYGJ8GCc95OLbkFNOc6fxnMizgZhks+pOVqofZCKlZG12EakGPZdOHnpWr9MJJnhw7E7XtvHZyRpumJfk0MRoss3FdqLSM/K9truUHpOFWx1QngG+PmTEhnLCA39XsLrP1u0oYvKYMOamDD0xmjwmnB6zhfwaz4zd/pJGDpc3c8vCZHQeKI/miIL6M3BQCPGiEOIlYD/w/9QVa/gjpeTpzwpINei5xIGHhJ0pCeGU1HfQ3KluYmdZQwcfH6/iurljCfZ3rKLV+LgQ/HyERxTU+r1ldBrN3Hre0A8JOxPiwyioaVN9tmi2SF7cWcTs5AimJY4a+gQgI84aBOAJJbC/pJEj5c18f2GKww+JCXGhnKxsweKBIJMXdhTh76PjhnmOrU9kxtvHTn0l0G0y88ruEpZmGEiPCXHonIy4UI8pz235tRTUtHHrohSHJr2TbROj3DOeUaBrs62T3is9VLbNkSi+9cA8rNF0bwPzpZT/VVuw4c7nebWcrGrlh0vTnSq0as+1yK1QVwm8uLMYnRDc1E/47EAE+PqQERequoVnNFt4aWcxC9OjyIxzfD0pMz4Mk0VyWuWSUZ8cr6asoZNbFjquPEMD/UiMDPLITHvdDttDYqbjLpbM+DDae8yUN6rrvm3q6OGt/We4fPpoDKEBDp1jCAkgSu/PSQ8ogfcPVVDX1u2Q9WQnMy6UurZualvVD5RYl11ETGgAl00Z7dDxyVF6QgJ8PTKpLGvoYHNuFdfOcXzS6y4DKighRKbt35lAPNa8pTJgtG3fiGbdjiJiwwK4YrpjN5KdDFu47WkV62i1dhl5fV8Zl02NJy7cuUKhGbFhqtf42ni0kqqWLqceEmC1AgDVlcC6HUWMGRXERRNjnTovM059N1pZQwebjjn/kMi0j53KVordMnZGuQshyIwPVd2CsrtGM2JDWdRPMv1ATIi3TqLUjiDNq2ple34dNy1Ixt/XsdUXq/tW/bGDXpPeBepG7vVmsFH4ie3fv/azPa6yXMOaU9XWG+nG+clfKRnkCLFhAej9fThd266SdNb1k7Zuk1MPCTtpMXqqWrpoUyn5T0rJOtv6ydLxzlWyTonW4++rU1UJHDvTzN6iBr6/MHnI4IO+TIgLpbC2jS6jenluL+8qRrjwkBgfG4oQ6ip3u2W8IC3K6UjLjNgw8qpbVc1z23W6npNVrdyyKNmpSMvMOM+4INdmFxLop+P6uWOHPrgXqdEhFKr4PIEvJ70rpsQTH65e3lNfBvwFSint9e0ulVIu670xwqP4XthRTICvjmvnOHcjgXW2mBYTopqbyr5+kpXk+PpJb+x15tSqvG5fZHVm/cSOr4+O1Gi9qhbeuuwi9P4+rJrtWGBJb8bFhmKRUFSnzsOirdvEf/e69pDQB/iSGBGs6ti5ahkDZMSF0GW0UN6oXjWOtdlFROn9uWK6c9FnUSEBRIf4q2pB1bV18+6hCq6cmcCo4IHD8vsj1aCnvr1H1YLF9kmvK39bd3BkirjTwX0jgsb2Ht4+UM53ZowZNL9jMNIMIaq5+OzrJ67eSHYFpdaD7OwiqxPrJ71RU7nXtHTxwZEKvpeVSJgLjQjti+5qyfdmThmtbjwk0gzqKXe7ZZwSrWfZIEnNA6H22BXWtrHlZA3Xz0tyqe9ZmkG9+w7g1d0l9JgsDoXl9yXVPqmsG56TXncYbA0qTggxCwgSQswQQsy0bUuBb36nrAFYv6+UbpOF77vgPrOTZtBT0dylSg2tddmurZ/YSYoKxlcnVPkx2hdZnYks7EuaIYSyhg5V3Giv7C7BZJHcbKu47Swp0XqEgNM1yltQZovkhZ3FzBw7iukuPiTSY0IoqmtXxY12oNRuGbsWfpwabVNQKowdWL0e/j46VjsYWdgX68SoXZVyUV1GM6/uLuH8zJizE0RnSDVYk9zVcvN9crzKrUmvOwz2lLgYuBlrEdcneu1vBR5SUaZhi9Fs4eWdJSxMjzobVuwKX7rR2hVtBX+0vJm9xQ38+rIJTq+f2PHz0TE2Sh1XkCuRhX1JM+ixSCiub3cqAnAouoxmXttTygWZsUNWtRiIQD8fEiKCKFBBuW85UU1JfQc/v7j/YsSOkGYIodtkoaKpU/FurGuziwgL9B2yqsVAROj9idL7qzIxsufcORNZ2Jd0QwjNnUbq23uIDnHtOwbCGlnY47ICSIwIxkcnVHMtr80uIiEiiOUeqqTRm8HWoF6yrTfd3GcN6nIp5dtKXFwIcYkQIk8IUSCEOKd0krDyD9vnR3pHDw51rhp8dKyKqpYul4IPeqOWSb5uh+vrJ71JjQ5R/GZ3J7KwN2ddQQrPtN87ZM3ev2VRslvfo5b71h5ZePEk1yxjsFoBgOIK9Gxk4dyxDiXmDkRaTIgqEyNXIgv7knb2vlNWPimtibmZcaEsSHOt/Jm/r46xkcGquPiOlDexr7iRmxckO5VOoxSDufhusL1MFkL8pO/m7oUdbPl+KTDOtt0B/NOJcxXnhR1FJEcFu+Rj701SVDBCKGuSV7d08cHhClbNdm39pDepBj3F9R2KuoKUWmQ96wpS8CFrDz+eEB/GfDdrJKYbQiisa1M0ITa3opndhQ3ctCDJZcsYvrTclX7IvrTTFlnohmUM6qzzuBNZ2Js0mxtNaeW+o8AaWehoYu5ApEbrVXHxrc0uIiTAl6vdnPS6ymB3u93PEQKE9rO5y5At323vX5ZWdgOjhBDxDp6rKAdLGzlY2sTNC9wv8RHo58OYUUGKWikv7yrGLF1fP+lNarSeHpsrSAl6V2aYmuDeImuQv3XslHyQ7Sio51R1G7csdC78uD/SYqzRaBXNyiXErssuJtjfh6tnOx812ptIvT+RCrvR2rpNZ8OP3W27kGbQ09hhpEHB3lDuRBb2ZnR4EEF+Popb7muzC4kOCeByJ/Mp+5Jq0FNU167oxKiquYv/HalkVVYioW5Oel1lQHtcSvlv27+/V+na/bV8n+vAMWMcPBewtnzHan0xdqzrP/CPj1cTGuDLVVnKzCRSovWKmeSdPdb1k4smxJIU5dr6SW9SbGswhXXtiqxV2BdZf7VigtvfBcpH8q3bUUR0iD/fmubeQwK+GgWZEOH+2NW0Wi3ja+ckntMJ2RXSDHpFH7Jv2CILb1mY7PZ3nXVB1rQxx4E6dENxNufOxcjC3uh0glSDXtH7rqCmla15tfz4wvFuVwVPta0vnlFwffGlXcVYpOT7CvxtXWVIf4EQ4lEhRJgQwk8IsUUIUdfL/ecOjrR8H+gYh9vFK9Xy/ecXZ7DxvvMGbEjoLGmGEIoUigp65+AZmjqMikXZpNjcGUUK/RjXZheRGBnERROVWWS1P2SVmC32LmzqSvhxf7JZv1cZJfDq7lKMFveiRnuTZghRzE1ltkhe2GGNLJwxtv9Ozc6QblDWfftlzp0yhU3TDMquka3bUYy/r44b5rlnGYPV6wHWSaUSdPSY+M+eUpZPjFM8oMYZHHFoL5dStgArsVoq44GfKXBtR1q+D3SMQ+3ilUQIoegfKiVaT3uP2e36XvZF1sljwhSZdYK1NlpogK8iN/uXi6wpii2ypseE0Gk0U9nifmuLF23hxwN1LXWWqJAAIoL9FHnIdhnNvLa7xK3Iwr6kx4TQ0N6jiBvt0xPVlDZ0cOuiVAUkgzGjggjw1Sm2RrZmu7KFTdNjQjjT1Elnj/spDg22fMrvzhhDlAJRgakKJ9i/deAMzZ1Gp4o5q4EjCsruV1gBrJdSKtUda8iW77b3N9qi+eYBzVLKSgfPHdbY3WjuzrS3nbJWP75loXuLrL0RQpBi82m7i32RdVWWctWPlVrsb+4wuh1+3B9KRfK9f6iCegUiC3ujZKWQtdnuRxb2xupGU8Z9a6/mr2Rh0zQFo2//s6eELqNribn9ER3iT2igryKBEhaL5IXsIqYmhJ9t2OgtHFFQHwghTgJZwBYhhAFwe+rqYMv3jUAhUAA8D/xwsHPdlcmT2JPr3FUCa23Vj1dOdX/9pDcpCkQF2RdZr56t7CJrmkKuoPX7St0OP+4PJaLR7JaxEpGFvVGqUoi9ZuHNC5yvWTgY6THKuCBf2KF8YdO0GFskn5tj12Oy8PKuEhaPNzA+Vol4M+ukMtUWQeoun5+qobCu3e3IQiVwpN3Gg8B8IEtKaQTaUShiTkq5UUo5XkqZJqX8k23fv+xt323Re3fbPp8ipcwZ7NyvE6PDg/D31VHkxg2Vf7ZobZLD1Y8dJTU6hIrmTrcqNtgXWZWILOxNdIg/YYG+bikBa9J1MfNT3Qs/7o+0GD11bT1udYi1hx8rEVnYmzERNjeam0pgXXYRwQrk3PUlzaCnvNG9+661y8iGHOULmyZH6dEJ970eHx6poKbVuZYfjpCmUKj52uwi4sICWTElXgGp3MORIAk/YDXwuhDiTeBWoF5twb7p6HSClCj3bqg124sI9NNxnULrJ71JMeiRtooNrtDebV1kvXiS8ousZwvuuhGNtvFoJRXN7ocf98eXFp4bf1uFwo/74qMTpETr3ZKtqtlas3BVljKRhb1JM4Qg3Sy4+/q+MlUKmwb6+ZAYGeyWcrfn3I2LCWHxOMdbfjhCqkFPZXMXHT2ul1A7UdnCjoJ6blyQ5HSnBjVwRIJ/ArOAZ23bTNs+DTdJdWOdp6a1i3cOnuGqWQkuF60dDHtUUJGLD7INOWU0dxq5fbEyC+h9SXcjGk1KyfPbC0k16Dk/073w4/5wt/BpXlUrn+fVcvOCJLfDj/vD3TD9F3cWY7ZIxV2j4L4L0mi28MKOYuYkR6pS2NTd9cVdp+vJrWjhFhXcZ6m9Sqi5yvPbCwn29+E6Fzo1qIEjCmq2lPImKeVntu37wGy1BRsJpETrKW3owGh2voX5K7tKMFosikVQ9SXFjbBVk9nC2mxr9eOZCoQf90daTAi1rd00dzrfYmB3YQPHzrRw26JURcKP+5IQEYy/j+vRaGu22/sCqdMYLt2Ngrtt3SZe21PCpZPjGRulfPhxqsFWcNdFBbrxaCVnmjq5Q62JUUwIhW4U3P33F1bL+DszXKvmPxhni8a6OOmtbO7k/UNWy9jZlh9q4YiCMgsh0uxvhBCpgHod2UYQKdF6TBZJWYNzPXA6eky8sruEiybEnlUkSqMP8CU2LMCl2dim3CrKGztVs57AvWi0NdsLidL/86V1AAASZElEQVT7810XW34MxZduNOdlq2np4t1DZ1iVlUiECpYxWJW7xUX37ev7ymjtMnGbSuHH9oK7rrggpZQ890UhaSpZxmBdI+sxWTjT6HylkJNVLWw7ZbWMlci560tylN5WQs015f7iTuuasTeqlg+EIwrqZ8BWIcTnQohtwGfAA+qKNTKwR/A42yH2rf3lNHUYVZsl2hkfG0petXNdRKWUPP9FISnRei6coEz4cX+4mhBbUNPKFgUTcwciLca1dZ6XdhVjsqj7kDg7dk6u4ZnMFtZlFzEnOVKRxNyBcNWNttPmPrv9PHUsY3AvgvS5L6zusxtcbPkxFHblnu/C2LV2GfnP7lJWTIn3amJuXxyJ4tuCtVjrvbYtQ0q5VW3BRgIZcaH46gRHzzQ7fI7JbGFNdhEzxo5ilso5CpNGh5NX1Uq3yXGDeU9RA4fLm7l1kXKJuf0xNjIYPx/n+1Y990Uh/r46Vs9X5yFhJ90QQmlDh1Nj19Zt4tXdpVw8MU6RklUDkRodghDOr/NsPFbFmSZ1LWNwveDuczb32bdVcJ/ZcXWNzFPus0nx4eQ68Tyx8/o+a8kqtSe9zuJIFF8gcDfwMPBb4C7bPg03CfTzYXxsKMecuKHeO1RBSX0Hdy1JUz1HYWpCOEazdKrV9VOf5RMd4u9yXyBH8fXRkRzlXIfYsoYO3j5whmtnJyre06cvaTEhmC2SknrH3bcv7yqmudPInUvUfUi4UnDXYpE881kBqQY9F6jkPrNjL7h7xolixcfONKvqPrPjat+qtduLkKC6+2xKQjjF9R1OtX/vNplZm13E3JRIt4s5K40jLr6XgUnAU8DTWNtbvKKmUCOJqQnhHClvdqgmn8ls4anP8pk0OszljrnOMGWMtZmioxbe3qIGdhTU84MlaQT5q/eQsJMeE8KpaseV5zNbC9AJwQ+Wpg19sJvYZ9qOytfWbeL5LwpZmmFQ1X1mJ83g3Nh9dKyKvOpW7rtgnGruMzuuWCl//zSfsEBfblQ4564/0gwhTrnRalq7eHVPCZdPG626+2yqrQHqsQrHJ72v7yujsrmLey8Yp5ZYLuOIgsqQUt4qpdxq2+7AWo9PQwEmjwmnudNIWcPQs8X3DlVQXN/B/ReO90iGd0JEEOFBfhwpc+xm/9snp4gOCVAt+qwvs5IiKKnvoNqBmnxlDR28ub+ca+YkKpq8ORDjY0MJ8vMhp7jRoeNf3lVMY4eR+y/0zE9reuIoTlW3OhQFabFIntxyivSYEMUrlvTHpNFh+OgE+0scG7sj5U18eqKaOxanut0LzRGmJIRz7Eyzw1GQz249jdEsuc8DCmDyaKuCOlLu2G+2y2jmma0FzEmOdLlhopo4oqAO2urgASCEmAvsUE+kkcXsZGuB112FdYMe120y8+QWq/V04QR1XSx2hBBkJUWwu2jovOxdp+vZVVjPXUs9Yz0BzE2x/qB2Fw4t35Nb8tEJwV0esJ7A2uU0KznCIdlauow8/0UhyzIMTFchd6c/5qVGYZGQUzx0ac3/Ha3kVHUb914wziNdVfUBvkxNCHdo7MA6MRoV7MfNKuRl9ce81Ci6TRYOlzUNeWxlcyf/2VPKlTPHKFbwdzAi9P4kRQU7rNz/u7eU6pZu7r9onNfLGvWHIwpqLrBTCFEshCgGdgFLhBBHhRBHXLmoECJSCPGJECLf9u85Pg0hRKIQYqsQ4oQQIlcIcV+vzx4WQpwRQhyybStckWM4MD42hLiwQD7Pqx30uHXZxZQ2dPCLSzI9eiMtyTBQUt9B8SC5FWaL5P8+PM6YUUFcP9dzCX4TR4cRGuDL7sLBH7JHy5t560A5Ny9M9oj1ZGdeahQnq1qHrBz+1JZ8mjqNPLA8w0OSwYyxo/D31bGnaPCx6zKa+cumk2TEhnKZB0vfzE2J4nB505BVEXaermNrXi13LE5VrBXOUMxJjkQIhrzvAJ78NB+J5Efne859tig9ml2n6+gxDZ5f2dJl5OmtBcxNiVS03qOSOKKgLgFSgCW2LQVrZfOVwLdcvO6DwBYp5Thgi+19X0zAA1LKCcA84O4+bd3/JqWcbts2uiiH1xFCsGS8gez8ugETdmtaunj6s3wunBDL4vGu97RyhSW26207NbACXb+3lBOVLfzqsgmqLlD3xUcnmJMSyfb82gHX8KSU/OHD40QG+3PP+ekekw1gXqrVOs4uGNg6Lqxt48Wdxayalchk25qfJwj082FG4iiy8we33J//opDyxk5+962JHrGe7MxLjcRoluwdRIGazBYefj+XhIggVapaDER4sB8T48PYeXrwsTtc1sTrOWXcOD/Zo6HbS8YbaO8xD2lF/ePTfOrbe/jNyonD0noCx8LMSwbbXLzuFcBLttcvAd/u57qVUsoDttetWKuWqxc/6kWWZcbQ2m1i5+lzXRpSSn77Xi5Gs+TXlynTkdYZkqL0pETr2Zxb1e/nNS1dPP5xHvNSI7l0sjINCZ3h4slxlDd2Duhzf2N/OXuLG/jJ8vEeWZ/ozfTECAyhAWw8Utnv51JKfvd+LgG+Pvz0Ys9ZT3YumhjL8cqWActtlTd28Oznp7l0chwL0pWtGzcU81Kj0Pv7sOlY//cdwMu7SjhV3cZvVk706MQI4PzMGPYVNwzYz81ikfz2/Vyi9AHcf6Fngw/mp0XhqxN8nlcz4DEFNdaJ0dVZnp0YOYu3qgHG2vo6Yft30EUVIUQyMAPY02v3PUKII0KIdf25CHude4cQIkcIkVNbO7gbzVssyzQQqffntd3n6vs39pezKbeKB5aP94gPuz+unDmGnafrz3mQWSySB944TJfRzB+/PcUrs7CLJ8Xh76vjv/tKz/msrKGD//vgOHNTIrl2tudri/noBJdNieezvJp+H2Sv7C5he34dv7gkQ9F+VI6yYko8QlgTv/titkh+8vphfHSCX3lhYhTo58PySXFsPFrZr5uvoKaNxzbnsWS8geUeiGjty8qpo7FI+OBw/31S12YXcbisiYdWZCraasYRQgP9WDQumvcOVfRbkslotvDAG4fRB/h6ZWLkDKopKCHEp0KIY/1sTrXqEEKEAG8B99s6+4K1WG0aMB2oBP460PlKtXxXkwBfH26YO5aPj1d/xSzfW9TAr989xrzUSG47z3sJdKtmJxLop+OJT059Zf+jm/PYnl/Hb1ZOPFsg1dOEB/lx1awE3tp/5islo9q6Tdz5yn4AHv/eNNVDowdi9fwkjGYLa7ILv7J/f0kjf/rfCZaMN6hWWWAoRo8K4qIJsby6p4TWrq9G8/3tk1PsLW7g95dPIiHCO5UFrp87lpYuExv2lX1lf0ePiXvXHyTQT8ejV031ysQoIy6UmWNH8eLOYkx9XPOHy5p4dPNJLp4Uq0rNPUe4ZnYiVS1d/VqgT36az+GyJv70ncmq5wO6iyOJuvcMZqEMhJTyQinl5H6294BqIUS87fvjgX5tUVurj7eA16SUb/f67moppVlKacHayHCOs/INN+5YkkZ8eCD3/OcAnxyvZs32Qlav3UNCRBDPXj/Lo/7/vsSEBnLn4jQ+OFzBv7adpqyhg1++fZR/bTvN9XPHer3y8d3L0vHzEdz/+iGaO4yUNXRw3fO7OVnVwtPXzfBq6ZY0QwjfmTGGtduL2GOLSttRUMctL+4jPjyQJ1ZN86r//0fnj6Ol08jD7x9HSomUkme2FvD01gKuzkpUrV6hI8xKimBeaiR/+zSfClvSbmuXkTtf2c/Jqhb+umoasWHeqxnww6XplDZ08Pz2orP78qtbueXFfcSEBvKXK72jPAEumhhHekwIj3+c9xUL9PV9pTy9tYBVWQkeSRlwFzFUgqgQ4o9YW6ofANYBm6UjWaWDf+djQL2U8hEhxINApJTy532OEVjXpxqklPf3+Sze7iIUQvwYmCulvGao62ZlZcmcnJyhDvMauRXN3PZSDpXN1rye88ZF8/erpxM1DGY5JrOFH752gI+PV5/d94Mlafzs4gyvKk87G49W8qP1BxGAySIJ9vfhyWtmeCSheSiaOnr47j93UlLfQXJUMKdr20mPCeGFm2cPi7pnT3xyin9syWearXLI8coWLp82mr+umub1nkCna9v49tM7CAn05dLJ8XxyooqKpi7+/N0prMpStlmis0gpuevVA2w+XsUd56US5O/D818UEuTvw+t3zj+bcOwtdhbUcf3aPSxIi+L281LZerKGl3aVcN64aNbeNFvxJqfuIITYL6XMOme/I7rGpiyWA9/H2vp9A7BWSnnaRWGibN8xFigFvielbBBCjAbWSClXCCEWAduBo4Ddhn5ISrlRCPEKVveeBIqBO+0KazCGu4ICq/viYGkTkXp/MuNCh1V0jZSSbadqKWvsZF5KJOMUaletFLkVzXxwuJKQAB+unJXg0ZDyoWhs7+G57YXkV7cxM2kUN85P9lhY9FBIKXl1Tykb9pXh6yO4ZnYiq7ISh829d6S8id+8l8uJyhYmjQ7jwUsymTtMwqI7e8z84q0jvG9bi1qaYeCR704lLnx4VIPbkFPGr989Ro/Jgk7ADfOS+PVlE4eVcgI3FZTtC6ZhVVCXAFuxhn5/0tfyGc58HRSUhobG14/mDiMWKVVrkeIOje09nKhqIc0Q4lWX6GAMpKCGnMIJIe4FbgLqgDXAz6SURiGEDsgHvjYKSkNDQ0MNwoM9G6nnDBF6fxakeTZNQCkc8TFEA9/tm/MkpbQIIVaqI5Y67N+/v04I4WruFljHYvDsvJGBNg7aGIA2BqCNgR13x6HfUFaHXXwaIITI6c8MHWlo46CNAWhjANoY2FFrHIbXSpmGhoaGhoYNTUFpaGhoaAxLNAXlHM95W4BhgjYO2hiANgagjYEdVcZBW4PS0NDQ0BiWaBaUhoaGhsawRFNQGhoaGhrDEk1BOYgQ4hIhRJ4QosBWP3BEMViH45GGEMJHCHFQCPGht2XxFkKIUUKIN4UQJ233xHxvy+RphBA/tv0Wjgkh1gshhmeZBgWxtTeqEUIc67VvyA7prqIpKAcQQvgAzwCXAhOBa/t09x0JDNXheCRxH9YGmiOZJ4FNUspMYBojbDyEEGOAe4EsKeVkwAdrUe1vOi9iLXfXG0c6pLuEpqAcYw5QIKUslFL2AP/F2hV4xDCSOhwPhhAiAbgMa9mvEYkQIgxYDKwFkFL2SCmbvCuVV/AFgoQQvkAw0H/3wm8QUsovgIY+u4fskO4qmoJyjDFA765p5YzAh7OdATocjxT+jrX+pGWoA7/BpAK1wAs2V+caIYR32j17CSnlGeBxrN0YKoFmKeXH3pXKazjVId0ZNAXlGP31HRiR8fkDdDgeEdhqT9ZIKfd7WxYv4wvMBP4ppZwBtKOgW+frgG2d5QogBRgN6IUQN3hXqm8emoJyjHKgd3e0BEaAOd+XgTocjyAWApcLIYqxunnPF0K86l2RvEI5UC6ltFvQb2JVWCOJC4EiKWWtlNIIvA0s8LJM3sKhDumuoCkox9gHjBNCpAgh/LEuhr7vZZk8iq1p5VrghJTyCW/L4w2klL+UUiZIKZOx3gOfSSlH3KxZSlkFlAkhMmy7LgCOe1Ekb1AKzBNCBNt+GxcwwgJFevE+1pZM2P59T6kvHh4tPYc5UkqTEOIeYDPWaJ11UspcL4vlaRYCq4GjQohDtn0PSSk3elEmDe/xI+A124StEGsz0xGDlHKPEOJN4ADWCNeDjICyR0KI9cBSIFoIUQ78DngE2CCEuBVbh3TFrqeVOtLQ0NDQGI5oLj4NDQ0NjWGJpqA0NDQ0NIYlmoLS0NDQ0BiWaApKQ0NDQ2NYoikoDQ0NDY1hiaagNDSGCbYK4T+0vR5tC2PW0BixaGHmGhrDBFuNww9t1bE1NEY8WqKuhsbw4REgzZYInQ9MkFJOFkLcjLVCtA8wGfgr4I81cbobWCGlbBBCpGFtC2MAOoDbpZQnPf/f0NBQBs3Fp6ExfHgQOC2lnA78rM9nk4HrsLZ++RPQYSvUugu40XbMc8CPpJSzgJ8Cz3pEag0NldAsKA2NrwdbbX24WoUQzcAHtv1Hgam2KvMLgDespeEACPC8mBoayqEpKA2NrwfdvV5ber23YP0d64Amm/WlofGNQHPxaWgMH1qBUFdOtPXmKhJCfA+s1eeFENOUFE5Dw9NoCkpDY5ggpawHdgghjgGPufAV1wO3CiEOA7lYG+ppaHxt0cLMNTQ0NDSGJZoFpaGhoaExLNEUlIaGhobGsERTUBoaGhoawxJNQWloaGhoDEs0BaWhoaGhMSzRFJSGhoaGxrBEU1AaGhoaGsOS/w96w4SLy934sQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/chapter6_76_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[-1.5 -1.49999996 -1.49999984 -1.49999964 -1.49999935 -1.49999898\n", + " -1.49999853 -1.49999798 -1.49999734 -1.49999659 -1.49999574 -1.49999478\n", + " -1.49999369 -1.49999247 -1.49999112 -1.49998961 -1.49998794 -1.49998609\n", + " -1.49998404 -1.49998178 -1.49997929 -1.49997654 -1.49997351 -1.49997017\n", + " -1.49996649 -1.49996243 -1.49995796 -1.49995304 -1.49994762 -1.49994165\n", + " -1.49993508 -1.49992786 -1.49991994 -1.49991127 -1.4999018 -1.49989151\n", + " -1.49988041 -1.49986852 -1.49985595 -1.49984292 -1.49982978 -1.49981712\n", + " -1.49980588 -1.49979754 -1.49979431 -1.49979958 -1.4998184 -1.4998583\n", + " -1.49993028 -1.50005034 -1.50024115 -1.500534 -1.50097003 -1.50159939\n", + " -1.50247522 -1.50363822 -1.5050881 -1.50674417 -1.50841251 -1.50979454\n", + " -1.51056842 -1.5105255 -1.50967788 -1.5082518 -1.50657253 -1.50493047\n", + " -1.50350752 -1.50237442 -1.50152565 -1.50091821 -1.50049876 -1.50021789\n", + " -1.50003547 -1.49992116 -1.49985304 -1.4998157 -1.49979853 -1.49979431\n", + " -1.49979819 -1.49980692 -1.49981835 -1.49983109 -1.49984425 -1.49985725\n", + " -1.49986975 -1.49988156 -1.49989259 -1.49990279 -1.49991218 -1.49992077\n", + " -1.49992862 -1.49993577 -1.49994227 -1.49994819 -1.49995356 -1.49995843\n", + " -1.49996286 -1.49996688 -1.49997052 -1.49997383 -1.49997683 -1.49997955\n", + " -1.49998202 -1.49998426 -1.49998628 -1.49998812 -1.49998977 -1.49999126\n", + " -1.4999926 -1.49999381 -1.49999488 -1.49999583 -1.49999667 -1.49999741\n", + " -1.49999804 -1.49999858 -1.49999903 -1.49999939 -1.49999966 -1.49999986\n", + " -1.49999997 -1.5 -1.49999995 -1.49999982 -1.49999961 -1.49999932\n", + " -1.49999894 -1.49999848 -1.49999792 -1.49999727 -1.49999651 -1.49999565\n", + " -1.49999467 -1.49999357 -1.49999234 -1.49999097 -1.49998945 -1.49998776\n", + " -1.49998589 -1.49998382 -1.49998154 -1.49997902 -1.49997625 -1.49997319\n", + " -1.49996981 -1.4999661 -1.499962 -1.49995749 -1.49995252 -1.49994704\n", + " -1.49994101 -1.49993438 -1.49992709 -1.4999191 -1.49991035 -1.4999008\n", + " -1.49989043 -1.49987924 -1.49986728 -1.49985466 -1.49984159 -1.49982847\n", + " -1.4998159 -1.49980488 -1.49979693 -1.49979438 -1.49980076 -1.49982132\n", + " -1.49986388 -1.49993989 -1.50006592 -1.50026544 -1.50057068 -1.5010238\n", + " -1.50167564 -1.50257898 -1.50377191 -1.50524791 -1.50691602 -1.50857033\n", + " -1.50990493 -1.51060284 -1.51047421 -1.50955526 -1.50808857 -1.50640137\n", + " -1.50477517 -1.50337982 -1.50227653 -1.50145437 -1.5008683 -1.50046492\n", + " -1.50019563 -1.50002129 -1.49991251 -1.49984809 -1.4998132 -1.49979762\n", + " -1.4997944 -1.49979889 -1.49980797 -1.49981959 -1.49983241 -1.49984557\n", + " -1.49985853 -1.49987097 -1.49988271 -1.49989365 -1.49990377 -1.49991308\n", + " -1.49992159 -1.49992937 -1.49993645 -1.4999429 -1.49994875 -1.49995407\n", + " -1.4999589 -1.49996328 -1.49996726 -1.49997087 -1.49997414 -1.49997712\n", + " -1.49997981 -1.49998226 -1.49998447 -1.49998648 -1.49998829 -1.49998993\n", + " -1.4999914 -1.49999273 -1.49999392 -1.49999498 -1.49999592 -1.49999675\n", + " -1.49999747 -1.4999981 -1.49999863 -1.49999907 -1.49999942 -1.49999969\n", + " -1.49999987 -1.49999997 -1.5 -1.49999994 -1.49999981 -1.49999959\n", + " -1.49999929 -1.4999989 -1.49999842 -1.49999786 -1.49999719 -1.49999643\n", + " -1.49999556 -1.49999457 -1.49999346 -1.49999221 -1.49999083 -1.49998929\n", + " -1.49998758 -1.49998569 -1.4999836 -1.4999813 -1.49997876 -1.49997595\n", + " -1.49997286 -1.49996946 -1.4999657 -1.49996157 -1.49995701 -1.49995199\n", + " -1.49994646 -1.49994037 -1.49993368 -1.49992632 -1.49991825 -1.49990942\n", + " -1.49989979 -1.49988934 -1.49987807 -1.49986604 -1.49985336 -1.49984027\n", + " -1.49982716 -1.4998147 -1.49980391 -1.49979638 -1.49979455 -1.49980208\n", + " -1.49982445 -1.49986979 -1.49994999 -1.50008223 -1.50029079 -1.50060886\n", + " -1.50107959 -1.50175446 -1.50268571 -1.50390854 -1.50540978 -1.50708783\n", + " -1.50872493 -1.51000875 -1.51062866 -1.51041471 -1.509427 -1.50792313\n", + " -1.50623094 -1.50462231 -1.50325515 -1.50218152 -1.5013855 -1.50082025\n", + " -1.50043244 -1.50017432 -1.50000777 -1.4999043 -1.49984344 -1.49981089\n", + " -1.49979682 -1.49979457 -1.49979964 -1.49980906 -1.49982085 -1.49983373\n", + " -1.49984689 -1.49985981 -1.49987219 -1.49988385 -1.49989471 -1.49990475\n", + " -1.49991397 -1.49992241 -1.49993011 -1.49993713 -1.49994351 -1.49994931\n", + " -1.49995458 -1.49995936 -1.4999637 -1.49996764 -1.49997121 -1.49997446\n", + " -1.4999774 -1.49998007 -1.49998249 -1.49998468 -1.49998667 -1.49998846\n", + " -1.49999008 -1.49999154 -1.49999286 -1.49999403 -1.49999508 -1.49999601\n", + " -1.49999683 -1.49999754 -1.49999816 -1.49999868 -1.49999911 -1.49999945\n", + " -1.49999971 -1.49999988 -1.49999998 -1.5 -1.49999993 -1.49999979\n", + " -1.49999956 -1.49999925 -1.49999886 -1.49999837 -1.4999978 -1.49999712\n", + " -1.49999635 -1.49999546 -1.49999446 -1.49999334 -1.49999208 -1.49999068\n", + " -1.49998912 -1.4999874 -1.49998549 -1.49998338 -1.49998105 -1.49997849\n", + " -1.49997566 -1.49997253 -1.49996909 -1.4999653 -1.49996113 -1.49995652\n", + " -1.49995145 -1.49994587 -1.49993973 -1.49993297 -1.49992554 -1.4999174\n", + " -1.49990849 -1.49989878 -1.49988824 -1.49987689 -1.49986478 -1.49985205\n", + " -1.49983894 -1.49982587 -1.49981352 -1.49980297 -1.49979589 -1.49979481\n", + " -1.49980355 -1.49982782 -1.49987606 -1.49996062 -1.50009932 -1.50031724\n", + " -1.50064858 -1.50113745 -1.50183589 -1.50279545 -1.50404807 -1.50557355\n", + " -1.50725931 -1.50887594 -1.51010569 -1.51064581 -1.51034718 -1.50929344\n", + " -1.50775585 -1.50606146 -1.504472 -1.50313352 -1.50208936 -1.50131897\n", + " -1.50077398 -1.50040126 -1.50015393 -1.49999488 -1.49989651 -1.49983907\n", + " -1.49980877 -1.49979615 -1.49979481 -1.49980043 -1.49981016 -1.49982211\n", + " -1.49983506 -1.49984821 -1.49986109 -1.4998734 -1.49988498 -1.49989576\n", + " -1.49990571 -1.49991486 -1.49992322 -1.49993085 -1.4999378 -1.49994412\n", + " -1.49994987 -1.49995508 -1.49995982 -1.49996411 -1.49996802 -1.49997156\n", + " -1.49997477 -1.49997768 -1.49998032 -1.49998272 -1.49998489 -1.49998686\n", + " -1.49998863 -1.49999024 -1.49999168 -1.49999298 -1.49999414 -1.49999518\n", + " -1.4999961 -1.4999969 -1.49999761 -1.49999821 -1.49999872 -1.49999914\n", + " -1.49999948 -1.49999973 -1.4999999 -1.49999999 -1.49999999 -1.49999992\n", + " -1.49999977 -1.49999953 -1.49999922 -1.49999881 -1.49999832 -1.49999773\n", + " -1.49999705 -1.49999626 -1.49999537 -1.49999435 -1.49999322 -1.49999195\n", + " -1.49999053 -1.49998896 -1.49998722 -1.49998529 -1.49998316 -1.49998081\n", + " -1.49997821 -1.49997535 -1.4999722 -1.49996873 -1.4999649 -1.49996068\n", + " -1.49995603 -1.49995092 -1.49994528 -1.49993907 -1.49993225 -1.49992475\n", + " -1.49991654 -1.49990755 -1.49989775 -1.49988713 -1.4998757 -1.49986353\n", + " -1.49985074 -1.49983761 -1.49982457 -1.49981235 -1.49980207 -1.49979546\n", + " -1.49979517 -1.49980518 -1.49983142 -1.49988269 -1.49997179 -1.5001172\n", + " -1.50034484 -1.50068989 -1.50119744 -1.50191999 -1.5029082 -1.50419046\n", + " -1.50573905 -1.50743018 -1.50902301 -1.5101955 -1.51065423 -1.51027181\n", + " -1.50915493 -1.50758703 -1.50589314 -1.50432432 -1.50301493 -1.502\n", + " -1.50125473 -1.50072947 -1.50037135 -1.50013443 -1.4999826 -1.49988914\n", + " -1.49983497 -1.49980682 -1.49979559 -1.49979512 -1.49980126 -1.49981129\n", + " -1.49982339 -1.49983638 -1.49984953 -1.49986236 -1.4998746 -1.49988611\n", + " -1.4998968 -1.49990667 -1.49991573 -1.49992402 -1.49993158 -1.49993847\n", + " -1.49994473 -1.49995041 -1.49995558 -1.49996027 -1.49996453 -1.49996839\n", + " -1.49997189 -1.49997507 -1.49997796 -1.49998058 -1.49998295 -1.4999851\n", + " -1.49998704 -1.4999888 -1.49999039 -1.49999182 -1.4999931 -1.49999425\n", + " -1.49999528 -1.49999618 -1.49999698 -1.49999767 -1.49999827 -1.49999877\n", + " -1.49999918 -1.49999951 -1.49999975 -1.49999991 -1.49999999 -1.49999999\n", + " -1.49999991 -1.49999975 -1.49999951 -1.49999918 -1.49999877 -1.49999826\n", + " -1.49999767 -1.49999697 -1.49999618 -1.49999527 -1.49999424 -1.49999309\n", + " -1.49999181 -1.49999038 -1.49998879 -1.49998703 -1.49998508 -1.49998293\n", + " -1.49998056 -1.49997794 -1.49997505 -1.49997187 -1.49996836 -1.49996449\n", + " -1.49996023 -1.49995554 -1.49995037 -1.49994468 -1.49993841 -1.49993153\n", + " -1.49992396 -1.49991567 -1.4999066 -1.49989672 -1.49988602 -1.49987451\n", + " -1.49986226 -1.49984943 -1.49983628 -1.49982329 -1.4998112 -1.4998012\n", + " -1.49979509 -1.49979563 -1.49980697 -1.49983528 -1.49988969 -1.49998353\n", + " -1.50013591 -1.50037362 -1.50073284 -1.50125961 -1.5020068 -1.50302398\n", + " -1.50433563 -1.5059061 -1.50760012 -1.50916579 -1.5102779 -1.51065389\n", + " -1.51018882 -1.5090118 -1.50741701 -1.5057262 -1.50417936 -1.50289938\n", + " -1.5019134 -1.50119273 -1.50068664 -1.50034266 -1.50011579 -1.49997091\n", + " -1.49988216 -1.49983114 -1.49980505 -1.49979514 -1.49979549 -1.49980214\n", + " -1.49981244 -1.49982467 -1.49983771 -1.49985084 -1.49986362 -1.4998758\n", + " -1.49988722 -1.49989783 -1.49990762 -1.4999166 -1.49992482 -1.49993231\n", + " -1.49993912 -1.49994532 -1.49995096 -1.49995607 -1.49996072 -1.49996493\n", + " -1.49996876 -1.49997223 -1.49997538 -1.49997824 -1.49998083 -1.49998318\n", + " -1.4999853 -1.49998723 -1.49998897 -1.49999054 -1.49999196 -1.49999323\n", + " -1.49999436 -1.49999537 -1.49999627 -1.49999705 -1.49999774 -1.49999832\n", + " -1.49999881 -1.49999922 -1.49999954 -1.49999977 -1.49999992 -1.49999999\n", + " -1.49999999 -1.4999999 -1.49999973 -1.49999948 -1.49999914 -1.49999872\n", + " -1.49999821 -1.4999976 -1.4999969 -1.49999609 -1.49999517 -1.49999413\n", + " -1.49999297 -1.49999167 -1.49999023 -1.49998862 -1.49998684 -1.49998488\n", + " -1.4999827 -1.4999803 -1.49997766 -1.49997474 -1.49997153 -1.49996799\n", + " -1.49996408 -1.49995978 -1.49995504 -1.49994982 -1.49994408 -1.49993775\n", + " -1.49993079 -1.49992316 -1.49991479 -1.49990564 -1.49989568 -1.49988489\n", + " -1.49987331 -1.49986099 -1.49984811 -1.49983496 -1.49982202 -1.49981008\n", + " -1.49980037 -1.49979479 -1.4997962 -1.49980893 -1.4998394 -1.4998971\n", + " -1.49999586 -1.50015547 -1.50040363 -1.5007775 -1.50132402 -1.50209638\n", + " -1.50314281 -1.50448352 -1.50607451 -1.50776883 -1.50930394 -1.51035268\n", + " -1.5106448 -1.51009845 -1.50886441 -1.50724608 -1.50556083 -1.50403719\n", + " -1.50278686 -1.50182951 -1.50113291 -1.50064545 -1.50031516 -1.50009797\n", + " -1.49995978 -1.49987556 -1.49982755 -1.49980343 -1.49979479 -1.49979593\n", + " -1.49980304 -1.49981361 -1.49982597 -1.49983904 -1.49985215 -1.49986488\n", + " -1.49987698 -1.49988833 -1.49989886 -1.49990856 -1.49991746 -1.4999256\n", + " -1.49993302 -1.49993978 -1.49994592 -1.4999515 -1.49995656 -1.49996116\n", + " -1.49996533 -1.49996912 -1.49997256 -1.49997568 -1.49997851 -1.49998107\n", + " -1.4999834 -1.49998551 -1.49998741 -1.49998914 -1.49999069 -1.49999209\n", + " -1.49999335 -1.49999447 -1.49999547 -1.49999635 -1.49999713 -1.4999978\n", + " -1.49999838 -1.49999886 -1.49999925 -1.49999956 -1.49999979 -1.49999993\n", + " -1.5 -1.49999998 -1.49999988 -1.49999971 -1.49999945 -1.4999991\n", + " -1.49999867 -1.49999815 -1.49999754 -1.49999682 -1.499996 -1.49999507\n", + " -1.49999402 -1.49999285 -1.49999153 -1.49999007 -1.49998845 -1.49998665\n", + " -1.49998467 -1.49998247 -1.49998005 -1.49997738 -1.49997443 -1.49997119\n", + " -1.49996761 -1.49996367 -1.49995932 -1.49995454 -1.49994927 -1.49994346\n", + " -1.49993708 -1.49993006 -1.49992235 -1.4999139 -1.49990467 -1.49989463\n", + " -1.49988376 -1.4998721 -1.49985972 -1.49984679 -1.49983363 -1.49982075\n", + " -1.49980897 -1.49979958 -1.49979455 -1.49979688 -1.49981106 -1.49984379\n", + " -1.49990491 -1.50000879 -1.50017593 -1.5004349 -1.50082389 -1.50139073\n", + " -1.50218876 -1.50326468 -1.50463403 -1.50624407 -1.50793598 -1.5094371\n", + " -1.5104196 -1.51062698 -1.51000097 -1.50871311 -1.50707457 -1.50539721\n", + " -1.50389788 -1.50267736 -1.50174828 -1.50107521 -1.50060585 -1.50028879\n", + " -1.50008095 -1.49994919 -1.49986932 -1.4998242 -1.49980197 -1.49979453\n", + " -1.49979642 -1.49980398 -1.49981479 -1.49982726 -1.49984037 -1.49985346\n", + " -1.49986613 -1.49987816 -1.49988943 -1.49989987 -1.49990949 -1.49991832\n", + " -1.49992638 -1.49993373 -1.49994042 -1.4999465 -1.49995203 -1.49995705\n", + " -1.4999616 -1.49996573 -1.49996948 -1.49997289 -1.49997598 -1.49997878\n", + " -1.49998132 -1.49998362 -1.49998571 -1.4999876 -1.4999893 -1.49999084\n", + " -1.49999222 -1.49999347 -1.49999458 -1.49999556 -1.49999644 -1.4999972\n", + " -1.49999786 -1.49999843 -1.4999989 -1.49999929 -1.49999959 -1.49999981\n", + " -1.49999994 -1.5 -1.49999997 -1.49999987 -1.49999968 -1.49999942\n", + " -1.49999906 -1.49999862 -1.49999809 -1.49999747 -1.49999674 -1.49999591\n", + " -1.49999497 -1.49999391 -1.49999272 -1.49999139 -1.49998992 -1.49998828\n", + " -1.49998646 -1.49998446 -1.49998224 -1.49997979 -1.49997709 -1.49997412\n", + " -1.49997084 -1.49996723 -1.49996325 -1.49995886 -1.49995403 -1.49994871\n", + " -1.49994285 -1.4999364 -1.49992931 -1.49992153]\n" + ] + } + ], + "source": [ + "# Common imports\n", + "import numpy as np\n", + "import pandas as pd\n", + "from math import *\n", + "import matplotlib.pyplot as plt\n", + "\n", + "DeltaT = 0.01\n", + "#set up arrays \n", + "tfinal = 10.0\n", + "n = ceil(tfinal/DeltaT)\n", + "# set up arrays\n", + "t = np.zeros(n)\n", + "v = np.zeros((n,2))\n", + "r = np.zeros((n,2))\n", + "E = np.zeros(n)\n", + "# Constants of the model\n", + "m = 1.0 # mass, you can change these\n", + "alpha = 1.0\n", + "# Initial conditions as compact 2-dimensional arrays\n", + "x0 = 0.5; y0= 0.\n", + "r0 = np.array([x0,y0]) \n", + "v0 = np.array([0.0,1.0])\n", + "r[0] = r0\n", + "v[0] = v0\n", + "rabs = sqrt(sum(r[0]*r[0]))\n", + "E[0] = 0.5*m*(v[0,0]**2+v[0,1]**2)-alpha/rabs\n", + "# Start integrating using the Velocity-Verlet method\n", + "for i in range(n-1):\n", + " # Set up the acceleration\n", + " rabs = sqrt(sum(r[i]*r[i]))\n", + " a = -alpha*r[i]/(rabs**3)\n", + " # update velocity, time and position using the Velocity-Verlet method\n", + " r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a\n", + " rabs = sqrt(sum(r[i+1]*r[i+1]))\n", + " anew = -alpha*r[i+1]/(rabs**3)\n", + " v[i+1] = v[i] + 0.5*DeltaT*(a+anew)\n", + " E[i+1] = 0.5*m*(v[i+1,0]**2+v[i+1,1]**2)-alpha/rabs\n", + " t[i+1] = t[i] + DeltaT\n", + "# Plot position as function of time\n", + "fig, ax = plt.subplots(3,1)\n", + "ax[0].set_ylabel('y')\n", + "ax[0].set_xlabel('x')\n", + "ax[0].plot(r[:,0],r[:,1])\n", + "ax[1].set_xlabel('time')\n", + "ax[1].set_ylabel('y position')\n", + "ax[1].plot(t,r[:,0])\n", + "ax[2].set_xlabel('time')\n", + "ax[2].set_ylabel('y position')\n", + "ax[2].plot(t,r[:,1])\n", + "\n", + "fig.tight_layout()\n", + "save_fig(\"2DimGravity\")\n", + "plt.show()\n", + "print(E)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Scattering and Cross Sections\n", + "\n", + "Scattering experiments don't measure entire trajectories. For elastic\n", + "collisions, they measure the distribution of final scattering angles\n", + "at best. Most experiments use targets thin enough so that the number\n", + "of scatterings is typically zero or one. The cross section, $\\sigma$,\n", + "describes the cross-sectional area for particles to scatter with an\n", + "individual target atom or nucleus. Cross section measurements form the\n", + "basis for MANY fields of physics. BThe cross section, and the\n", + "differential cross section, encapsulates everything measurable for a\n", + "collision where all that is measured is the final state, e.g. the\n", + "outgoing particle had momentum $\\boldsymbol{p}_f$. y studying cross sections,\n", + "one can infer information about the potential interaction between the\n", + "two particles. Inferring, or constraining, the potential from the\n", + "cross section is a classic {\\it inverse} problem. Collisions are\n", + "either elastic or inelastic. Elastic collisions are those for which\n", + "the two bodies are in the same internal state before and after the\n", + "collision. If the collision excites one of the participants into a\n", + "higher state, or transforms the particles into different species, or\n", + "creates additional particles, the collision is inelastic. Here, we\n", + "consider only elastic collisions.\n", + "\n", + "For Coulomb forces, the cross section is infinite because the range of\n", + "the Coulomb force is infinite, but for interactions such as the strong\n", + "interaction in nuclear or particle physics, there is no long-range\n", + "force and cross-sections are finite. Even for Coulomb forces, the part\n", + "of the cross section that corresponds to a specific scattering angle,\n", + "$d\\sigma/d\\Omega$, which is a function of the scattering angle\n", + "$\\theta_s$ is still finite.\n", + "\n", + "If a particle travels through a thin target, the chance the particle\n", + "scatters is $P_{\\rm scatt}=\\sigma dN/dA$, where $dN/dA$ is the number\n", + "of scattering centers per area the particle encounters. If the density\n", + "of the target is $\\rho$ particles per volume, and if the thickness of\n", + "the target is $t$, the areal density (number of target scatterers per\n", + "area) is $dN/dA=\\rho t$. Because one wishes to quantify the collisions\n", + "independently of the target, experimentalists measure scattering\n", + "probabilities, then divide by the areal density to obtain\n", + "cross-sections," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "\\sigma=\\frac{P_{\\rm scatt}}{dN/dA}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Instead of merely stating that a particle collided, one can measure\n", + "the probability the particle scattered by a given angle. The\n", + "scattering angle $\\theta_s$ is defined so that at zero the particle is\n", + "unscattered and at $\\theta_s=\\pi$ the particle is scattered directly\n", + "backward. Scattering angles are often described in the center-of-mass\n", + "frame, but that is a detail we will neglect for this first discussion,\n", + "where we will consider the scattering of particles moving classically\n", + "under the influence of fixed potentials $U(\\boldsymbol{r})$. Because the\n", + "distribution of scattering angles can be measured, one expresses the\n", + "differential cross section," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d^2\\sigma}{d\\cos\\theta_s~d\\phi}.\n", + "\\label{_auto5} \\tag{10}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Usually, the literature expresses differential cross sections as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "d\\sigma/d\\Omega=\\frac{d\\sigma}{d\\cos\\theta d\\phi}=\\frac{1}{2\\pi}\\frac{d\\sigma}{d\\cos\\theta},\n", + "\\label{_auto6} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the last equivalency is true when the scattering does not depend\n", + "on the azimuthal angle $\\phi$, as is the case for spherically\n", + "symmetric potentials.\n", + "\n", + "The differential solid angle $d\\Omega$ can be thought of as the area\n", + "subtended by a measurement, $dA_d$, divided by $r^2$, where $r$ is the\n", + "distance to the detector," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "dA_d=r^2 d\\Omega.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With this definition $d\\sigma/d\\Omega$ is independent of the distance\n", + "from which one places the detector, or the size of the detector (as\n", + "long as it is small).\n", + "\n", + "Differential scattering cross sections are calculated by assuming a\n", + "random distribution of impact parameters $b$. These represent the\n", + "distance in the $xy$ plane for particles moving in the $z$ direction\n", + "relative to the scattering center. An impact parameter $b=0$ refers to\n", + "being aimed directly at the target's center. The impact parameter\n", + "describes the transverse distance from the $z=0$ axis for the\n", + "trajectory when it is still far away from the scattering center and\n", + "has not yet passed it. The differential cross section can be expressed\n", + "in terms of the impact parameter," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "d\\sigma=2\\pi bdb,\n", + "\\label{_auto7} \\tag{12}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which is the area of a thin ring of radius $b$ and thickness $db$. In\n", + "classical physics, one can calculate the trajectory given the incoming\n", + "kinetic energy $E$ and the impact parameter if one knows the mass and\n", + "potential. From the trajectory, one then finds the scattering angle\n", + "$\\theta_s(b)$. The differential cross section is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{d\\sigma}{d\\Omega}=\\frac{1}{2\\pi}\\frac{d\\sigma}{d\\cos\\theta_s}=b\\frac{db}{d\\cos\\theta_s}=\\frac{b}{(d/db)\\cos\\theta_s(b)}.\n", + "\\label{_auto8} \\tag{13}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Typically, one would calculate $\\cos\\theta_s$ and $(d/db)\\cos\\theta_s$\n", + "as functions of $b$. This is sufficient to plot the differential cross\n", + "section as a function of $\\theta_s$.\n", + "\n", + "The total cross section is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\sigma_{\\rm tot}=\\int d\\Omega\\frac{d\\sigma}{d\\Omega}=2\\pi\\int d\\cos\\theta_s~\\frac{d\\sigma}{d\\Omega}. \n", + "\\label{_auto9} \\tag{14}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Even if the total cross section is infinite, e.g. Coulomb forces, one\n", + "can still have a finite differential cross section as we will see\n", + "later on.\n", + "\n", + "\n", + "An asteroid of mass $m$ and kinetic energy $E$ approaches a planet of\n", + "radius $R$ and mass $M$. What is the cross section for the asteroid to\n", + "impact the planet?\n", + "\n", + "### Solution\n", + "\n", + "Calculate the maximum impact parameter, $b_{\\rm max}$, for which the asteroid will hit the planet. The total cross section for impact is $\\sigma_{\\rm impact}=\\pi b_{\\rm max}^2$. The maximum cross-section can be found with the help of angular momentum conservation. The asteroid's incoming momentum is $p_0=\\sqrt{2mE}$ and the angular momentum is $L=p_0b$. If the asteroid just grazes the planet, it is moving with zero radial kinetic energy at impact. Combining energy and angular momentum conservation and having $p_f$ refer to the momentum of the asteroid at a distance $R$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\frac{p_f^2}{2m}-\\frac{GMm}{R}&=&E,\\\\\n", + "p_fR&=&p_0b_{\\rm max},\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "allows one to solve for $b_{\\rm max}$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "b_{\\rm max}&=&R\\frac{p_f}{p_0}\\\\\n", + "&=&R\\frac{\\sqrt{2m(E+GMm/R)}}{\\sqrt{2mE}}\\\\\n", + "\\sigma_{\\rm impact}&=&\\pi R^2\\frac{E+GMm/R}{E}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Rutherford Scattering\n", + "\n", + "This refers to the calculation of $d\\sigma/d\\Omega$ due to an inverse\n", + "square force, $F_{12}=\\pm\\alpha/r^2$ for repulsive/attractive\n", + "interaction. Rutherford compared the scattering of $\\alpha$ particles\n", + "($^4$He nuclei) off of a nucleus and found the scattering angle at\n", + "which the formula began to fail. This corresponded to the impact\n", + "parameter for which the trajectories would strike the nucleus. This\n", + "provided the first measure of the size of the atomic nucleus. At the\n", + "time, the distribution of the positive charge (the protons) was\n", + "considered to be just as spread out amongst the atomic volume as the\n", + "electrons. After Rutherford's experiment, it was clear that the radius\n", + "of the nucleus tended to be roughly 4 orders of magnitude smaller than\n", + "that of the atom, which is less than the size of a football relative\n", + "to Spartan Stadium.\n", + "\n", + "\n", + "\n", + "The incoming and outgoing angles of the trajectory are at\n", + "$\\pm\\theta'$. They are related to the scattering angle by\n", + "$2\\theta'=\\pi+\\theta_s$.\n", + "\n", + "In order to calculate differential cross section, we must find how the\n", + "impact parameter is related to the scattering angle. This requires\n", + "analysis of the trajectory. We consider our previous expression for\n", + "the trajectory where we derived the elliptic form for the trajectory,\n", + "Eq. ([9](#eq:Ctrajectory)). For that case we considered an attractive\n", + "force with the particle's energy being negative, i.e. it was\n", + "bound. However, the same form will work for positive energy, and\n", + "repulsive forces can be considered by simple flipping the sign of\n", + "$\\alpha$. For positive energies, the trajectories will be hyperbolas,\n", + "rather than ellipses, with the asymptotes of the trajectories\n", + "representing the directions of the incoming and outgoing\n", + "tracks. Rewriting Eq. ([9](#eq:Ctrajectory))," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\\label{eq:ruthtraj} \\tag{15}\n", + "r=\\frac{1}{\\frac{m\\alpha}{L^2}+A\\cos\\theta}.\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once $A$ is large enough, which will happen when the energy is\n", + "positive, the denominator will become negative for a range of\n", + "$\\theta$. This is because the scattered particle will never reach\n", + "certain angles. The asymptotic angles $\\theta'$ are those for which\n", + "the denominator goes to zero," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\cos\\theta'=-\\frac{m\\alpha}{AL^2}.\n", + "\\label{_auto10} \\tag{16}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The trajectory's point of closest approach is at $\\theta=0$ and the\n", + "two angles $\\theta'$, which have this value of $\\cos\\theta'$, are the\n", + "angles of the incoming and outgoing particles. From\n", + "Fig (**to come**), one can see that the scattering angle\n", + "$\\theta_s$ is given by," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:sthetover2} \\tag{17}\n", + "2\\theta'-\\pi&=&\\theta_s,~~~\\theta'=\\frac{\\pi}{2}+\\frac{\\theta_s}{2},\\\\\n", + "\\nonumber\n", + "\\sin(\\theta_s/2)&=&-\\cos\\theta'\\\\\n", + "\\nonumber\n", + "&=&\\frac{m\\alpha}{AL^2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have $\\theta_s$ in terms of $m,\\alpha,L$ and $A$, we wish\n", + "to re-express $L$ and $A$ in terms of the impact parameter $b$ and the\n", + "energy $E$. This will set us up to calculate the differential cross\n", + "section, which requires knowing $db/d\\theta_s$. It is easy to write\n", + "the angular momentum as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "L^2=p_0^2b^2=2mEb^2.\n", + "\\label{_auto11} \\tag{18}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finding $A$ is more complicated. To accomplish this we realize that\n", + "the point of closest approach occurs at $\\theta=0$, so from\n", + "Eq. ([15](#eq:ruthtraj))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:rminofA} \\tag{19}\n", + "\\frac{1}{r_{\\rm min}}&=&\\frac{m\\alpha}{L^2}+A,\\\\\n", + "\\nonumber\n", + "A&=&\\frac{1}{r_{\\rm min}}-\\frac{m\\alpha}{L^2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, $r_{\\rm min}$ can be found in terms of the energy because at the\n", + "point of closest approach the kinetic energy is due purely to the\n", + "motion perpendicular to $\\hat{r}$ and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "E=-\\frac{\\alpha}{r_{\\rm min}}+\\frac{L^2}{2mr_{\\rm min}^2}.\n", + "\\label{_auto12} \\tag{20}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One can solve the quadratic equation for $1/r_{\\rm min}$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\frac{1}{r_{\\rm min}}=\\frac{m\\alpha}{L^2}+\\sqrt{(m\\alpha/L^2)^2+2mE/L^2}.\n", + "\\label{_auto13} \\tag{21}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can plug the expression for $r_{\\rm min}$ into the expression for $A$, Eq. ([19](#eq:rminofA))," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "A=\\sqrt{(m\\alpha/L^2)^2+2mE/L^2}=\\sqrt{(\\alpha^2/(4E^2b^4)+1/b^2}\n", + "\\label{_auto14} \\tag{22}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we insert the expression for $A$ into that for the scattering angle, Eq. ([17](#eq:sthetover2))," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:scattangle} \\tag{23}\n", + "\\sin(\\theta_s/2)&=&\\frac{m\\alpha}{AL^2}\\\\\n", + "\\nonumber\n", + "&=&\\frac{a}{\\sqrt{a^2+b^2}}, ~~a\\equiv \\frac{\\alpha}{2E}\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The differential cross section can now be found by differentiating the\n", + "expression for $\\theta_s$ with $b$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:rutherford} \\tag{24}\n", + "\\frac{1}{2}\\cos(\\theta_s/2)d\\theta_s&=&\\frac{ab~db}{(a^2+b^2)^{3/2}}=\\frac{bdb}{a^2}\\sin^3(\\theta_s/2),\\\\\n", + "\\nonumber\n", + "d\\sigma&=&2\\pi bdb=\\frac{\\pi a^2}{\\sin^3(\\theta_s/2)}\\cos(\\theta_s/2)d\\theta_s\\\\\n", + "\\nonumber\n", + "&=&\\frac{\\pi a^2}{2\\sin^4(\\theta_s/2)}\\sin\\theta_s d\\theta_s\\\\\n", + "\\nonumber\n", + "\\frac{d\\sigma}{d\\cos\\theta_s}&=&\\frac{\\pi a^2}{2\\sin^4(\\theta_s/2)},\\\\\n", + "\\nonumber\n", + "\\frac{d\\sigma}{d\\Omega}&=&\\frac{a^2}{4\\sin^4(\\theta_s/2)}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $a= \\alpha/2E$. This the Rutherford formula for the differential\n", + "cross section. It diverges as $\\theta_s\\rightarrow 0$ because\n", + "scatterings with arbitrarily large impact parameters still scatter to\n", + "arbitrarily small scattering angles. The expression for\n", + "$d\\sigma/d\\Omega$ is the same whether the interaction is positive or\n", + "negative.\n", + "\n", + "\n", + "Consider a particle of mass $m$ and charge $z$ with kinetic energy $E$\n", + "(Let it be the center-of-mass energy) incident on a heavy nucleus of\n", + "mass $M$ and charge $Z$ and radius $R$. Find the angle at which the\n", + "Rutherford scattering formula breaks down.\n", + "\n", + "### Solution\n", + "\n", + "Let $\\alpha=Zze^2/(4\\pi\\epsilon_0)$. The scattering angle in Eq. ([23](#eq:scattangle)) is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\sin(\\theta_s/2)=\\frac{a}{\\sqrt{a^2+b^2}}, ~~a\\equiv \\frac{\\alpha}{2E}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The impact parameter $b$ for which the point of closest approach\n", + "equals $R$ can be found by using angular momentum conservation," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "p_0b&=&b\\sqrt{2mE}=Rp_f=R\\sqrt{2m(E-\\alpha/R)},\\\\\n", + "b&=&R\\frac{\\sqrt{2m(E-\\alpha/R)}}{\\sqrt{2mE}}\\\\\n", + "&=&R\\sqrt{1-\\frac{\\alpha}{ER}}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Putting these together" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\theta_s=2\\sin^{-1}\\left\\{\n", + "\\frac{a}{\\sqrt{a^2+R^2(1-\\alpha/(RE))}}\n", + "\\right\\},~~~a=\\frac{\\alpha}{2E}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It was from this departure of the experimentally measured\n", + "$d\\sigma/d\\Omega$ from the Rutherford formula that allowed Rutherford\n", + "to infer the radius of the gold nucleus, $R$.\n", + "\n", + "\n", + "\n", + "Just like electrodynamics, one can define \"fields\", which for a small\n", + "additional mass $m$ are the force per mass and the additional\n", + "potential energy per mass. The {\\it gravitational field} related to\n", + "the force has dimensions of force per mass, or acceleration, and can\n", + "be labeled $\\boldsymbol{g}(\\boldsymbol{r})$. The potential energy per mass has\n", + "dimensions of energy per mass. This is analogous to the\n", + "electromagnetic potential, which is the potential energy per charge,\n", + "and the electric field which is the force per charge.\n", + "\n", + "Because the field $\\boldsymbol{g}$ obeys the same inverse square law for a\n", + "point mass as the electric field does for a point charge, the\n", + "gravitational field also satisfies a version of Gauss's law," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\label{eq:GravGauss} \\tag{25}\n", + "\\oint d\\boldsymbol{A}\\cdot\\boldsymbol{g}=-4\\pi GM_{\\rm inside}.\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, $M_{\\rm inside}$ is the net mass inside a closed area.\n", + "\n", + "Gauss's law can be understood by considering a nozzle that sprays\n", + "paint in all directions uniformly from a point source. Let $B$ be the\n", + "number of gallons per minute of paint leaving the nozzle. If the\n", + "nozzle is at the center of a sphere of radius $r$, the paint per\n", + "square meter per minute that is deposited on some part of the sphere\n", + "is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "F(r)&=&\\frac{B}{4\\pi r^2}.\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, let $F$ also be assigned a direction, so that it becomes a vector\n", + "pointing along the direction of the flying paint. For any surface that\n", + "surrounds the nozzle, not necessarily a sphere, one can state that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\label{eq:paint} \\tag{26}\n", + "\\oint \\boldsymbol{dA}\\cdot\\boldsymbol{F}&=&B,\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "regardless of the shape of the surface. This follows because the rate\n", + "at which paint is deposited on the surface should equal the rate at\n", + "which it leaves the nozzle. The dot product ensures that only the\n", + "component of $\\boldsymbol{F}$ into the surface contributes to the deposition\n", + "of paint. Similarly, if $\\boldsymbol{F}$ is any radial inverse-square forces,\n", + "that falls as $B/(4\\pi r^2)$, then one can apply\n", + "Eq. ([26](#eq:paint)). For gravitational fields, $B/(4\\pi)$ is replaced\n", + "by $GM$, and one quickly \"derives\" Gauss's law for gravity,\n", + "Eq. ([25](#eq:GravGauss)).\n", + "\n", + "\n", + "Consider Earth to have its mass $M$ uniformly distributed in a sphere\n", + "of radius $R$. Find the magnitude of the gravitational acceleration as\n", + "a function of the radius $r$ in terms of the acceleration of gravity\n", + "at the surface $g(R)$. Assume $r\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F=-\\frac{GM\\delta m}{D^2}+2\\frac{GM\\delta m}{D^3}\\Delta D+\\cdots\n", + "\\label{_auto15} \\tag{27}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the $z$ direction points toward the large object, $\\Delta D$ can be\n", + "referred to as $z$. In the accelerating frame of an observer at the\n", + "center of the planet," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\delta m\\frac{d^2 z}{dt^2}=F-\\delta ma'+{\\rm other~forces~acting~on~} \\delta m,\n", + "\\label{_auto16} \\tag{28}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $a'$ is the acceleration of the observer. Because $\\delta ma'$\n", + "equals the gravitational force on $\\delta m$ if it were located at the\n", + "planet's center, one can write" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "m\\frac{d^2z}{dt^2}=2\\frac{GM\\delta m}{D^3}z+{\\rm other~forces~acting~on~}\\delta m.\n", + "\\label{_auto17} \\tag{29}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here the other forces could represent the forces acting on $\\delta m$\n", + "from the spherical planet such as the gravitational force or the\n", + "contact force with the surface. If $\\theta$ is the angle w.r.t. the\n", + "$z$ axis, the effective force acting on $\\delta m$ is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F_{\\rm eff}\\approx 2\\frac{GM\\delta m}{D^3}r\\cos\\theta\\hat{z}+{\\rm other~forces~acting~on~}\\delta m.\n", + "\\label{_auto18} \\tag{30}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This first force is the \"tidal\" force. It pulls objects outward from the center of the object. If the object were covered with water, it would distort the objects shape so that the shape would be elliptical, stretched out along the axis pointing toward the large mass $M$. The force is always along (either parallel or antiparallel to) the $\\hat{z}$ direction.\n", + "\n", + "\n", + "Consider the Earth to be a sphere of radius $R$ covered with water,\n", + "with the gravitational acceleration at the surface noted by $g$. Now\n", + "assume that a distant body provides an additional constant\n", + "gravitational acceleration $\\boldsymbol{a}$ pointed along the $z$ axis. Find\n", + "the distortion of the radius as a function of $\\theta$. Ignore\n", + "planetary rotation and assume $a< +
    + +$$ +\begin{equation} +U=\sum_{a +
    + +$$ +\begin{eqnarray} +\label{eq:radialeqofmotion} \tag{2} +\frac{d}{dt}r^2&=&\frac{d}{dt}(x^2+y^2)=2x\dot{x}+2y\dot{y}=2r\dot{r},\\ +\nonumber +\dot{r}&=&\frac{x}{r}\dot{x}+\frac{y}{r}\dot{y},\\ +\nonumber +\ddot{r}&=&\frac{x}{r}\ddot{x}+\frac{y}{r}\ddot{y} ++\frac{\dot{x}^2+\dot{y}^2}{r} +-\frac{\dot{r}^2}{r}. +\end{eqnarray} +$$ + +Recognizing that the numerator of the third term is the velocity squared, and that it can be written in polar coordinates, + + +
    + +$$ +\begin{equation} +v^2=\dot{x}^2+\dot{y}^2=\dot{r}^2+r^2\dot{\theta}^2, +\label{_auto2} \tag{3} +\end{equation} +$$ + +one can write $\ddot{r}$ as + + +
    + +$$ +\begin{eqnarray} +\label{eq:radialeqofmotion2} \tag{4} +\ddot{r}&=&\frac{F_x\cos\theta+F_y\sin\theta}{m}+\frac{\dot{r}^2+r^2\dot{\theta}^2}{r}-\frac{\dot{r}^2}{r}\\ +\nonumber +&=&\frac{F}{m}+\frac{r^2\dot{\theta}^2}{r}\\ +\nonumber +m\ddot{r}&=&F+\frac{L^2}{mr^3}. +\end{eqnarray} +$$ + +This derivation used the fact that the force was radial, +$F=F_r=F_x\cos\theta+F_y\sin\theta$, and that angular momentum is +$L=mrv_{\theta}=mr^2\dot{\theta}$. The term $L^2/mr^3=mv^2/r$ behaves +like an additional force. Sometimes this is referred to as a +centrifugal force, but it is not a force. Instead, it is the +consequence of considering the motion in a rotating (and therefore +accelerating) frame. + +Now, we switch to the particular case of an attractive inverse square +force, $F=-\alpha/r^2$, and show that the trajectory, $r(\theta)$, is +an ellipse. To do this we transform derivatives w.r.t. time to +derivatives w.r.t. $\theta$ using the chain rule combined with angular +momentum conservation, $\dot{\theta}=L/mr^2$. + + +
    + +$$ +\begin{eqnarray} +\label{eq:rtotheta} \tag{5} +\dot{r}&=&\frac{dr}{d\theta}\dot{\theta}=\frac{dr}{d\theta}\frac{L}{mr^2},\\ +\nonumber +\ddot{r}&=&\frac{d^2r}{d\theta^2}\dot{\theta}^2 ++\frac{dr}{d\theta}\left(\frac{d}{dr}\frac{L}{mr^2}\right)\dot{r}\\ +\nonumber +&=&\frac{d^2r}{d\theta^2}\left(\frac{L}{mr^2}\right)^2 +-2\frac{dr}{d\theta}\frac{L}{mr^3}\dot{r}\\ +\nonumber +&=&\frac{d^2r}{d\theta^2}\left(\frac{L}{mr^2}\right)^2 +-\frac{2}{r}\left(\frac{dr}{d\theta}\right)^2\left(\frac{L}{mr^2}\right)^2 +\end{eqnarray} +$$ + +Equating the two expressions for $\ddot{r}$ in Eq.s ([4](#eq:radialeqofmotion2)) and ([5](#eq:rtotheta)) eliminates all the derivatives w.r.t. time, and provides a differential equation with only derivatives w.r.t. $\theta$, + + +
    + +$$ +\begin{equation} +\label{eq:rdotdot} \tag{6} +\frac{d^2r}{d\theta^2}\left(\frac{L}{mr^2}\right)^2 +-\frac{2}{r}\left(\frac{dr}{d\theta}\right)^2\left(\frac{L}{mr^2}\right)^2 +=\frac{F}{m}+\frac{L^2}{m^2r^3}, +\end{equation} +$$ + +that when solved yields the trajectory, i.e. $r(\theta)$. Up to this +point the expressions work for any radial force, not just forces that +fall as $1/r^2$. + +The trick to simplifying this differential equation for the inverse +square problems is to make a substitution, $u\equiv 1/r$, and rewrite +the differential equation for $u(\theta)$. + +$$ +\begin{eqnarray} +r&=&1/u,\\ +\nonumber +\frac{dr}{d\theta}&=&-\frac{1}{u^2}\frac{du}{d\theta},\\ +\nonumber +\frac{d^2r}{d\theta^2}&=&\frac{2}{u^3}\left(\frac{du}{d\theta}\right)^2-\frac{1}{u^2}\frac{d^2u}{d\theta^2}. +\end{eqnarray} +$$ + +Plugging these expressions into Eq. ([6](#eq:rdotdot)) gives an +expression in terms of $u$, $du/d\theta$, and $d^2u/d\theta^2$. After +some tedious algebra, + + +
    + +$$ +\begin{equation} +\frac{d^2u}{d\theta^2}=-u-\frac{F m}{L^2u^2}. +\label{_auto3} \tag{7} +\end{equation} +$$ + +For the attractive inverse square law force, $F=-\alpha u^2$, + + +
    + +$$ +\begin{equation} +\frac{d^2u}{d\theta^2}=-u+\frac{m\alpha}{L^2}. +\label{_auto4} \tag{8} +\end{equation} +$$ + +The solution has two arbitrary constants, $A$ and $\theta_0$, + + +
    + +$$ +\begin{eqnarray} +\label{eq:Ctrajectory} \tag{9} +u&=&\frac{m\alpha}{L^2}+A\cos(\theta-\theta_0),\\ +\nonumber +r&=&\frac{1}{(m\alpha/L^2)+A\cos(\theta-\theta_0)}. +\end{eqnarray} +$$ + +The radius will be at a minimum when $\theta=\theta_0$ and at a +maximum when $\theta=\theta_0+\pi$. The constant $A$ is related to the +eccentricity of the orbit. When $A=0$ the radius is a constant +$r=L^2/(m\alpha)$, and the motion is circular. If one solved the +expression $mv^2/r=-\alpha/r^2$ for a circular orbit, using the +substitution $v=L/(mr)$, one would reproduce the expression +$r=L^2/(m\alpha)$. + +The form describing the elliptical trajectory in +Eq. ([9](#eq:Ctrajectory)) can be identified as an ellipse with one +focus being the center of the ellipse by considering the definition of +an ellipse as being the points such that the sum of the two distances +between the two foci are a constant. Making that distance $2D$, the +distance between the two foci as $2a$, and putting one focus at the +origin, + +$$ +\begin{eqnarray} +2D&=&r+\sqrt{(r\cos\theta-2a)^2+r^2\sin^2\theta},\\ +\nonumber +4D^2+r^2-4Dr&=&r^2+4a^2-4ar\cos\theta,\\ +\nonumber +r&=&\frac{D^2-a^2}{D+a\cos\theta}=\frac{1}{D/(D^2-a^2)-a\cos\theta/(D^2-a^2)}. +\end{eqnarray} +$$ + +By inspection, this is the same form as Eq. ([9](#eq:Ctrajectory)) with $D/(D^2-a^2)=m\alpha/L^2$ and $a/(D^2-a^2)=A$. + + +Let us remind ourselves about what an ellipse is before we proceed. + +%matplotlib inline + +import numpy as np +from matplotlib import pyplot as plt +from math import pi + +u=1. #x-position of the center +v=0.5 #y-position of the center +a=2. #radius on the x-axis +b=1.5 #radius on the y-axis + +t = np.linspace(0, 2*pi, 100) +plt.plot( u+a*np.cos(t) , v+b*np.sin(t) ) +plt.grid(color='lightgray',linestyle='--') +plt.show() + +## Effective or Centrifugal Potential + +The total energy of a particle is + +$$ +\begin{eqnarray} +E&=&U(r)+\frac{1}{2}mv_\theta^2+\frac{1}{2}m\dot{r}^2\\ +\nonumber +&=&U(r)+\frac{1}{2}mr^2\dot{\theta}^2+\frac{1}{2}m\dot{r}^2\\ +\nonumber +&=&U(r)+\frac{L^2}{2mr^2}+\frac{1}{2}m\dot{r}^2. +\end{eqnarray} +$$ + +The second term then contributes to the energy like an additional +repulsive potential. The term is sometimes referred to as the +"centrifugal" potential, even though it is actually the kinetic energy +of the angular motion. Combined with $U(r)$, it is sometimes referred +to as the "effective" potential, + +$$ +\begin{eqnarray} +U_{\rm eff}(r)&=&U(r)+\frac{L^2}{2mr^2}. +\end{eqnarray} +$$ + +Note that if one treats the effective potential like a real potential, one would expect to be able to generate an effective force, + +$$ +\begin{eqnarray} +F_{\rm eff}&=&-\frac{d}{dr}U(r) -\frac{d}{dr}\frac{L^2}{2mr^2}\\ +\nonumber +&=&F(r)+\frac{L^2}{mr^3}=F(r)+m\frac{v_\perp^2}{r}, +\end{eqnarray} +$$ + +which is indeed matches the form for $m\ddot{r}$ in Eq. ([4](#eq:radialeqofmotion2)), which included the **centrifugal** force. + +The following code plots this effective potential for a simple choice of parameters, with a standard gravitational potential $-\alpha/r$. Here we have chosen $L=m=\alpha=1$. + +# Common imports +import numpy as np +from math import * +import matplotlib.pyplot as plt + +Deltax = 0.01 +#set up arrays +xinitial = 0.3 +xfinal = 5.0 +alpha = 1.0 # spring constant +m = 1.0 # mass, you can change these +AngMom = 1.0 # The angular momentum +n = ceil((xfinal-xinitial)/Deltax) +x = np.zeros(n) +for i in range(n): + x[i] = xinitial+i*Deltax +V = np.zeros(n) +V = -alpha/x+0.5*AngMom*AngMom/(m*x*x) +# Plot potential +fig, ax = plt.subplots() +ax.set_xlabel('r[m]') +ax.set_ylabel('V[J]') +ax.plot(x, V) +fig.tight_layout() +plt.show() + +### Gravitational force example + +Using the above parameters, we can now study the evolution of the system using for example the velocity Verlet method. +This is done in the code here for an initial radius equal to the minimum of the potential well. We seen then that the radius is always the same and corresponds to a circle (the radius is always constant). + +# Common imports +import numpy as np +import pandas as pd +from math import * +import matplotlib.pyplot as plt +import os + +# Where to save the figures and data files +PROJECT_ROOT_DIR = "Results" +FIGURE_ID = "Results/FigureFiles" +DATA_ID = "DataFiles/" + +if not os.path.exists(PROJECT_ROOT_DIR): + os.mkdir(PROJECT_ROOT_DIR) + +if not os.path.exists(FIGURE_ID): + os.makedirs(FIGURE_ID) + +if not os.path.exists(DATA_ID): + os.makedirs(DATA_ID) + +def image_path(fig_id): + return os.path.join(FIGURE_ID, fig_id) + +def data_path(dat_id): + return os.path.join(DATA_ID, dat_id) + +def save_fig(fig_id): + plt.savefig(image_path(fig_id) + ".png", format='png') + + +# Simple Gravitational Force -alpha/r + +DeltaT = 0.01 +#set up arrays +tfinal = 100.0 +n = ceil(tfinal/DeltaT) +# set up arrays for t, v and r +t = np.zeros(n) +v = np.zeros(n) +r = np.zeros(n) +# Constants of the model, setting all variables to one for simplicity +alpha = 1.0 +AngMom = 1.0 # The angular momentum +m = 1.0 # scale mass to one +c1 = AngMom*AngMom/(m*m) +c2 = AngMom*AngMom/m +rmin = (AngMom*AngMom/m/alpha) +# Initial conditions +r0 = rmin +v0 = 0.0 +r[0] = r0 +v[0] = v0 +# Start integrating using the Velocity-Verlet method +for i in range(n-1): + # Set up acceleration + a = -alpha/(r[i]**2)+c1/(r[i]**3) + # update velocity, time and position using the Velocity-Verlet method + r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a + anew = -alpha/(r[i+1]**2)+c1/(r[i+1]**3) + v[i+1] = v[i] + 0.5*DeltaT*(a+anew) + t[i+1] = t[i] + DeltaT + # Plot position as function of time +fig, ax = plt.subplots(2,1) +ax[0].set_xlabel('time') +ax[0].set_ylabel('radius') +ax[0].plot(t,r) +ax[1].set_xlabel('time') +ax[1].set_ylabel('Velocity') +ax[1].plot(t,v) +save_fig("RadialGVV") +plt.show() + +Changing the value of the initial position to a value where the energy is positive, leads to an increasing radius with time, a so-called unbound orbit. Choosing on the other hand an initial radius that corresponds to a negative energy and different from the minimum value leads to a radius that oscillates back and forth between two values. + +### Harmonic Oscillator in two dimensions + +Consider a particle of mass $m$ in a 2-dimensional harmonic oscillator with potential + +$$ +U=\frac{1}{2}kr^2=\frac{1}{2}k(x^2+y^2). +$$ + +If the orbit has angular momentum $L$, we can find the radius and angular velocity of the circular orbit as well as the b) the angular frequency of small radial perturbations. + +We consider the effective potential. The radius of a circular orbit is at the minimum of the potential (where the effective force is zero). +The potential is plotted here with the parameters $k=m=0.1$ and $L=1.0$. + +# Common imports +import numpy as np +from math import * +import matplotlib.pyplot as plt + +Deltax = 0.01 +#set up arrays +xinitial = 1.0 +xfinal = 5.0 +k = 0.1 # spring constant +m = 0.1 # mass, you can change these +AngMom = 1.0 # The angular momentum +n = ceil((xfinal-xinitial)/Deltax) +x = np.zeros(n) +for i in range(n): + x[i] = xinitial+i*Deltax +V = np.zeros(n) +V = 0.5*k*x*x+0.5*AngMom*AngMom/(m*x*x) +# Plot potential +fig, ax = plt.subplots() +ax.set_xlabel('r[m]') +ax.set_ylabel('V[J]') +ax.plot(x, V) +fig.tight_layout() +plt.show() + +$$ +\begin{eqnarray*} +U_{\rm eff}&=&\frac{1}{2}kr^2+\frac{L^2}{2mr^2} +\end{eqnarray*} +$$ + +The effective potential looks like that of a harmonic oscillator for +large $r$, but for small $r$, the centrifugal potential repels the +particle from the origin. The combination of the two potentials has a +minimum for at some radius $r_{\rm min}$. + +$$ +\begin{eqnarray*} +0&=&kr_{\rm min}-\frac{L^2}{mr_{\rm min}^3},\\ +r_{\rm min}&=&\left(\frac{L^2}{mk}\right)^{1/4},\\ +\dot{\theta}&=&\frac{L}{mr_{\rm min}^2}=\sqrt{k/m}. +\end{eqnarray*} +$$ + +For particles at $r_{\rm min}$ with $\dot{r}=0$, the particle does not +accelerate and $r$ stays constant, i.e. a circular orbit. The radius +of the circular orbit can be adjusted by changing the angular momentum +$L$. + +For the above parameters this minimum is at $r_{\rm min}=1$. + + Now consider small vibrations about $r_{\rm min}$. The effective spring constant is the curvature of the effective potential. + +$$ +\begin{eqnarray*} +k_{\rm eff}&=&\left.\frac{d^2}{dr^2}U_{\rm eff}(r)\right|_{r=r_{\rm min}}=k+\frac{3L^2}{mr_{\rm min}^4}\\ +&=&4k,\\ +\omega&=&\sqrt{k_{\rm eff}/m}=2\sqrt{k/m}=2\dot{\theta}. +\end{eqnarray*} +$$ + +Here, the second step used the result of the last step from part +(a). Because the radius oscillates with twice the angular frequency, +the orbit has two places where $r$ reaches a minimum in one +cycle. This differs from the inverse-square force where there is one +minimum in an orbit. One can show that the orbit for the harmonic +oscillator is also elliptical, but in this case the center of the +potential is at the center of the ellipse, not at one of the foci. + +The solution is also simple to write down exactly in Cartesian coordinates. The $x$ and $y$ equations of motion separate, + +$$ +\begin{eqnarray*} +\ddot{x}&=&-kx,\\ +\ddot{y}&=&-ky. +\end{eqnarray*} +$$ + +So the general solution can be expressed as + +$$ +\begin{eqnarray*} +x&=&A\cos\omega_0 t+B\sin\omega_0 t,\\ +y&=&C\cos\omega_0 t+D\sin\omega_0 t. +\end{eqnarray*} +$$ + +The code here finds the solution for $x$ and $y$ using the code we developed in homework 4. + + +DeltaT = 0.01 +#set up arrays +tfinal = 10.0 +n = ceil(tfinal/DeltaT) +# set up arrays +t = np.zeros(n) +v = np.zeros((n,2)) +r = np.zeros((n,2)) +radius = np.zeros(n) +# Constants of the model +k = 0.1 # spring constant +m = 0.1 # mass, you can change these +omega02 = sqrt(k/m) # Frequency +AngMom = 1.0 # The angular momentum +rmin = (AngMom*AngMom/k/m)**0.25 +# Initial conditions as compact 2-dimensional arrays +#x0 =rmin*0.5; y0 = sqrt(rmin*rmin-x0*x0) +x0 = 1.0; y0= 1.0 +r0 = np.array([x0,y0]) +v0 = np.array([0.0,0.0]) +r[0] = r0 +v[0] = v0 +# Start integrating using the Velocity-Verlet method +for i in range(n-1): + # Set up the acceleration + a = -r[i]*omega02 + # update velocity, time and position using the Velocity-Verlet method + r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a + anew = -r[i+1]*omega02 + v[i+1] = v[i] + 0.5*DeltaT*(a+anew) + t[i+1] = t[i] + DeltaT +# Plot position as function of time +radius = np.sqrt(r[:,0]**2+r[:,1]**2) +fig, ax = plt.subplots(3,1) +ax[0].set_xlabel('time') +ax[0].set_ylabel('radius squared') +ax[0].plot(t,r[:,0]**2+r[:,1]**2) +ax[1].set_xlabel('time') +ax[1].set_ylabel('x position') +ax[1].plot(t,r[:,0]) +ax[2].set_xlabel('time') +ax[2].set_ylabel('y position') +ax[2].plot(t,r[:,1]) + +fig.tight_layout() +save_fig("2DimHOVV") +plt.show() + +With some work using double angle formulas, one can calculate + +$$ +\begin{eqnarray*} +r^2&=&x^2+y^2\\ +\nonumber +&=&(A^2+C^2)\cos^2(\omega_0t)+(B^2+D^2)\sin^2\omega_0t+(AB+CD)\cos(\omega_0t)\sin(\omega_0t)\\ +\nonumber +&=&\alpha+\beta\cos 2\omega_0 t+\gamma\sin 2\omega_0 t,\\ +\alpha&=&\frac{A^2+B^2+C^2+D^2}{2},~~\beta=\frac{A^2-B^2+C^2-D^2}{2},~~\gamma=AB+CD,\\ +r^2&=&\alpha+(\beta^2+\gamma^2)^{1/2}\cos(2\omega_0 t-\delta),~~~\delta=\arctan(\gamma/\beta), +\end{eqnarray*} +$$ + +and see that radius oscillates with frequency $2\omega_0$. The +factor of two comes because the oscillation $x=A\cos\omega_0t$ has two +maxima for $x^2$, one at $t=0$ and one a half period later. + +The following code shows first how we can solve this problem using the radial degrees of freedom only. + +DeltaT = 0.01 +#set up arrays +tfinal = 10.0 +n = ceil(tfinal/DeltaT) +# set up arrays for t, v and r +t = np.zeros(n) +v = np.zeros(n) +r = np.zeros(n) +E = np.zeros(n) +# Constants of the model +AngMom = 1.0 # The angular momentum +m = 0.1 +k = 0.1 +omega02 = k/m +c1 = AngMom*AngMom/(m*m) +c2 = AngMom*AngMom/m +rmin = (AngMom*AngMom/k/m)**0.25 +# Initial conditions +r0 = rmin +v0 = 0.0 +r[0] = r0 +v[0] = v0 +E[0] = 0.5*m*v0*v0+0.5*k*r0*r0+0.5*c2/(r0*r0) +# Start integrating using the Velocity-Verlet method +for i in range(n-1): + # Set up acceleration + a = -r[i]*omega02+c1/(r[i]**3) + # update velocity, time and position using the Velocity-Verlet method + r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a + anew = -r[i+1]*omega02+c1/(r[i+1]**3) + v[i+1] = v[i] + 0.5*DeltaT*(a+anew) + t[i+1] = t[i] + DeltaT + E[i+1] = 0.5*m*v[i+1]*v[i+1]+0.5*k*r[i+1]*r[i+1]+0.5*c2/(r[i+1]*r[i+1]) + # Plot position as function of time +fig, ax = plt.subplots(2,1) +ax[0].set_xlabel('time') +ax[0].set_ylabel('radius') +ax[0].plot(t,r) +ax[1].set_xlabel('time') +ax[1].set_ylabel('Energy') +ax[1].plot(t,E) +save_fig("RadialHOVV") +plt.show() + +## Stability of Orbits + +The effective force can be extracted from the effective potential, $U_{\rm eff}$. Beginning from the equations of motion, Eq. ([2](#eq:radialeqofmotion)), for $r$, + +$$ +\begin{eqnarray} +m\ddot{r}&=&F+\frac{L^2}{mr^3}\\ +\nonumber +&=&F_{\rm eff}\\ +\nonumber +&=&-\partial_rU_{\rm eff},\\ +\nonumber +F_{\rm eff}&=&-\partial_r\left[U(r)+(L^2/2mr^2)\right]. +\end{eqnarray} +$$ + +For a circular orbit, the radius must be fixed as a function of time, +so one must be at a maximum or a minimum of the effective +potential. However, if one is at a maximum of the effective potential +the radius will be unstable. For the attractive Coulomb force the +effective potential will be dominated by the $-\alpha/r$ term for +large $r$ because the centrifugal part falls off more quickly, $\sim +1/r^2$. At low $r$ the centrifugal piece wins and the effective +potential is repulsive. Thus, the potential must have a minimum +somewhere with negative potential. The circular orbits are then stable +to perturbation. + + +The effective potential is sketched for two cases, a $1/r$ attractive +potential and a $1/r^3$ attractive potential. The $1/r$ case has a +stable minimum, whereas the circular orbit in the $1/r^3$ case is +unstable. + + +If one considers a potential that falls as $1/r^3$, the situation is +reversed and the point where $\partial_rU$ disappears will be a local +maximum rather than a local minimum. **Fig to come here with code** + +The repulsive centrifugal piece dominates at large $r$ and the attractive +Coulomb piece wins out at small $r$. The circular orbit is then at a +maximum of the effective potential and the orbits are unstable. It is +the clear that for potentials that fall as $r^n$, that one must have +$n>-2$ for the orbits to be stable. + + +Consider a potential $U(r)=\beta r$. For a particle of mass $m$ with +angular momentum $L$, find the angular frequency of a circular +orbit. Then find the angular frequency for small radial perturbations. + + +For the circular orbit you search for the position $r_{\rm min}$ where the effective potential is minimized, + +$$ +\begin{eqnarray*} +\partial_r\left\{\beta r+\frac{L^2}{2mr^2}\right\}&=&0,\\ +\beta&=&\frac{L^2}{mr_{\rm min}^3},\\ +r_{\rm min}&=&\left(\frac{L^2}{\beta m}\right)^{1/3},\\ +\dot{\theta}&=&\frac{L}{mr_{\rm min}^2}=\frac{\beta^{2/3}}{(mL)^{1/3}} +\end{eqnarray*} +$$ + +Now, we can find the angular frequency of small perturbations about the circular orbit. To do this we find the effective spring constant for the effective potential, + +$$ +\begin{eqnarray*} +k_{\rm eff}&=&\partial_r^2 \left.U_{\rm eff}\right|_{r_{\rm min}}\\ +&=&\frac{3L^2}{mr_{\rm min}^4},\\ +\omega&=&\sqrt{\frac{k_{\rm eff}}{m}}\\ +&=&\frac{\beta^{2/3}}{(mL)^{1/3}}\sqrt{3}. +\end{eqnarray*} +$$ + +If the two frequencies, $\dot{\theta}$ and $\omega$, differ by an +integer factor, the orbit's trajectory will repeat itself each time +around. This is the case for the inverse-square force, +$\omega=\dot{\theta}$, and for the harmonic oscillator, +$\omega=2\dot{\theta}$. In this case, $\omega=\sqrt{3}\dot{\theta}$, +and the angles at which the maxima and minima occur change with each +orbit. + + +### Code example with gravitional force + +The code example here is meant to illustrate how we can make a plot of the final orbit. We solve the equations in polar coordinates (the example here uses the minimum of the potential as initial value) and then we transform back to cartesian coordinates and plot $x$ versus $y$. We see that we get a perfect circle when we place ourselves at the minimum of the potential energy, as expected. + + +# Simple Gravitational Force -alpha/r + +DeltaT = 0.01 +#set up arrays +tfinal = 8.0 +n = ceil(tfinal/DeltaT) +# set up arrays for t, v and r +t = np.zeros(n) +v = np.zeros(n) +r = np.zeros(n) +phi = np.zeros(n) +x = np.zeros(n) +y = np.zeros(n) +# Constants of the model, setting all variables to one for simplicity +alpha = 1.0 +AngMom = 1.0 # The angular momentum +m = 1.0 # scale mass to one +c1 = AngMom*AngMom/(m*m) +c2 = AngMom*AngMom/m +rmin = (AngMom*AngMom/m/alpha) +# Initial conditions, place yourself at the potential min +r0 = rmin +v0 = 0.0 # starts at rest +r[0] = r0 +v[0] = v0 +phi[0] = 0.0 +# Start integrating using the Velocity-Verlet method +for i in range(n-1): + # Set up acceleration + a = -alpha/(r[i]**2)+c1/(r[i]**3) + # update velocity, time and position using the Velocity-Verlet method + r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a + anew = -alpha/(r[i+1]**2)+c1/(r[i+1]**3) + v[i+1] = v[i] + 0.5*DeltaT*(a+anew) + t[i+1] = t[i] + DeltaT + phi[i+1] = t[i+1]*c2/(r0**2) +# Find cartesian coordinates for easy plot +x = r*np.cos(phi) +y = r*np.sin(phi) +fig, ax = plt.subplots(3,1) +ax[0].set_xlabel('time') +ax[0].set_ylabel('radius') +ax[0].plot(t,r) +ax[1].set_xlabel('time') +ax[1].set_ylabel('Angle $\cos{\phi}$') +ax[1].plot(t,np.cos(phi)) +ax[2].set_ylabel('y') +ax[2].set_xlabel('x') +ax[2].plot(x,y) + +save_fig("Phasespace") +plt.show() + +Try to change the initial value for $r$ and see what kind of orbits you get. +In order to test different energies, it can be useful to look at the plot of the effective potential discussed above. + +However, for orbits different from a circle the above code would need modifications in order to allow us to display say an ellipse. For the latter, it is much easier to run our code in cartesian coordinates, as done here. In this code we test also energy conservation and see that it is conserved to numerical precision. The code here is a simple extension of the code we developed for homework 4. + +# Common imports +import numpy as np +import pandas as pd +from math import * +import matplotlib.pyplot as plt + +DeltaT = 0.01 +#set up arrays +tfinal = 10.0 +n = ceil(tfinal/DeltaT) +# set up arrays +t = np.zeros(n) +v = np.zeros((n,2)) +r = np.zeros((n,2)) +E = np.zeros(n) +# Constants of the model +m = 1.0 # mass, you can change these +alpha = 1.0 +# Initial conditions as compact 2-dimensional arrays +x0 = 0.5; y0= 0. +r0 = np.array([x0,y0]) +v0 = np.array([0.0,1.0]) +r[0] = r0 +v[0] = v0 +rabs = sqrt(sum(r[0]*r[0])) +E[0] = 0.5*m*(v[0,0]**2+v[0,1]**2)-alpha/rabs +# Start integrating using the Velocity-Verlet method +for i in range(n-1): + # Set up the acceleration + rabs = sqrt(sum(r[i]*r[i])) + a = -alpha*r[i]/(rabs**3) + # update velocity, time and position using the Velocity-Verlet method + r[i+1] = r[i] + DeltaT*v[i]+0.5*(DeltaT**2)*a + rabs = sqrt(sum(r[i+1]*r[i+1])) + anew = -alpha*r[i+1]/(rabs**3) + v[i+1] = v[i] + 0.5*DeltaT*(a+anew) + E[i+1] = 0.5*m*(v[i+1,0]**2+v[i+1,1]**2)-alpha/rabs + t[i+1] = t[i] + DeltaT +# Plot position as function of time +fig, ax = plt.subplots(3,1) +ax[0].set_ylabel('y') +ax[0].set_xlabel('x') +ax[0].plot(r[:,0],r[:,1]) +ax[1].set_xlabel('time') +ax[1].set_ylabel('y position') +ax[1].plot(t,r[:,0]) +ax[2].set_xlabel('time') +ax[2].set_ylabel('y position') +ax[2].plot(t,r[:,1]) + +fig.tight_layout() +save_fig("2DimGravity") +plt.show() +print(E) + +## Scattering and Cross Sections + +Scattering experiments don't measure entire trajectories. For elastic +collisions, they measure the distribution of final scattering angles +at best. Most experiments use targets thin enough so that the number +of scatterings is typically zero or one. The cross section, $\sigma$, +describes the cross-sectional area for particles to scatter with an +individual target atom or nucleus. Cross section measurements form the +basis for MANY fields of physics. BThe cross section, and the +differential cross section, encapsulates everything measurable for a +collision where all that is measured is the final state, e.g. the +outgoing particle had momentum $\boldsymbol{p}_f$. y studying cross sections, +one can infer information about the potential interaction between the +two particles. Inferring, or constraining, the potential from the +cross section is a classic {\it inverse} problem. Collisions are +either elastic or inelastic. Elastic collisions are those for which +the two bodies are in the same internal state before and after the +collision. If the collision excites one of the participants into a +higher state, or transforms the particles into different species, or +creates additional particles, the collision is inelastic. Here, we +consider only elastic collisions. + +For Coulomb forces, the cross section is infinite because the range of +the Coulomb force is infinite, but for interactions such as the strong +interaction in nuclear or particle physics, there is no long-range +force and cross-sections are finite. Even for Coulomb forces, the part +of the cross section that corresponds to a specific scattering angle, +$d\sigma/d\Omega$, which is a function of the scattering angle +$\theta_s$ is still finite. + +If a particle travels through a thin target, the chance the particle +scatters is $P_{\rm scatt}=\sigma dN/dA$, where $dN/dA$ is the number +of scattering centers per area the particle encounters. If the density +of the target is $\rho$ particles per volume, and if the thickness of +the target is $t$, the areal density (number of target scatterers per +area) is $dN/dA=\rho t$. Because one wishes to quantify the collisions +independently of the target, experimentalists measure scattering +probabilities, then divide by the areal density to obtain +cross-sections, + +$$ +\begin{eqnarray} +\sigma=\frac{P_{\rm scatt}}{dN/dA}. +\end{eqnarray} +$$ + +Instead of merely stating that a particle collided, one can measure +the probability the particle scattered by a given angle. The +scattering angle $\theta_s$ is defined so that at zero the particle is +unscattered and at $\theta_s=\pi$ the particle is scattered directly +backward. Scattering angles are often described in the center-of-mass +frame, but that is a detail we will neglect for this first discussion, +where we will consider the scattering of particles moving classically +under the influence of fixed potentials $U(\boldsymbol{r})$. Because the +distribution of scattering angles can be measured, one expresses the +differential cross section, + + +
    + +$$ +\begin{equation} +\frac{d^2\sigma}{d\cos\theta_s~d\phi}. +\label{_auto5} \tag{10} +\end{equation} +$$ + +Usually, the literature expresses differential cross sections as + + +
    + +$$ +\begin{equation} +d\sigma/d\Omega=\frac{d\sigma}{d\cos\theta d\phi}=\frac{1}{2\pi}\frac{d\sigma}{d\cos\theta}, +\label{_auto6} \tag{11} +\end{equation} +$$ + +where the last equivalency is true when the scattering does not depend +on the azimuthal angle $\phi$, as is the case for spherically +symmetric potentials. + +The differential solid angle $d\Omega$ can be thought of as the area +subtended by a measurement, $dA_d$, divided by $r^2$, where $r$ is the +distance to the detector, + +$$ +\begin{eqnarray} +dA_d=r^2 d\Omega. +\end{eqnarray} +$$ + +With this definition $d\sigma/d\Omega$ is independent of the distance +from which one places the detector, or the size of the detector (as +long as it is small). + +Differential scattering cross sections are calculated by assuming a +random distribution of impact parameters $b$. These represent the +distance in the $xy$ plane for particles moving in the $z$ direction +relative to the scattering center. An impact parameter $b=0$ refers to +being aimed directly at the target's center. The impact parameter +describes the transverse distance from the $z=0$ axis for the +trajectory when it is still far away from the scattering center and +has not yet passed it. The differential cross section can be expressed +in terms of the impact parameter, + + +
    + +$$ +\begin{equation} +d\sigma=2\pi bdb, +\label{_auto7} \tag{12} +\end{equation} +$$ + +which is the area of a thin ring of radius $b$ and thickness $db$. In +classical physics, one can calculate the trajectory given the incoming +kinetic energy $E$ and the impact parameter if one knows the mass and +potential. From the trajectory, one then finds the scattering angle +$\theta_s(b)$. The differential cross section is then + + +
    + +$$ +\begin{equation} +\frac{d\sigma}{d\Omega}=\frac{1}{2\pi}\frac{d\sigma}{d\cos\theta_s}=b\frac{db}{d\cos\theta_s}=\frac{b}{(d/db)\cos\theta_s(b)}. +\label{_auto8} \tag{13} +\end{equation} +$$ + +Typically, one would calculate $\cos\theta_s$ and $(d/db)\cos\theta_s$ +as functions of $b$. This is sufficient to plot the differential cross +section as a function of $\theta_s$. + +The total cross section is + + +
    + +$$ +\begin{equation} +\sigma_{\rm tot}=\int d\Omega\frac{d\sigma}{d\Omega}=2\pi\int d\cos\theta_s~\frac{d\sigma}{d\Omega}. +\label{_auto9} \tag{14} +\end{equation} +$$ + +Even if the total cross section is infinite, e.g. Coulomb forces, one +can still have a finite differential cross section as we will see +later on. + + +An asteroid of mass $m$ and kinetic energy $E$ approaches a planet of +radius $R$ and mass $M$. What is the cross section for the asteroid to +impact the planet? + +### Solution + +Calculate the maximum impact parameter, $b_{\rm max}$, for which the asteroid will hit the planet. The total cross section for impact is $\sigma_{\rm impact}=\pi b_{\rm max}^2$. The maximum cross-section can be found with the help of angular momentum conservation. The asteroid's incoming momentum is $p_0=\sqrt{2mE}$ and the angular momentum is $L=p_0b$. If the asteroid just grazes the planet, it is moving with zero radial kinetic energy at impact. Combining energy and angular momentum conservation and having $p_f$ refer to the momentum of the asteroid at a distance $R$, + +$$ +\begin{eqnarray*} +\frac{p_f^2}{2m}-\frac{GMm}{R}&=&E,\\ +p_fR&=&p_0b_{\rm max}, +\end{eqnarray*} +$$ + +allows one to solve for $b_{\rm max}$, + +$$ +\begin{eqnarray*} +b_{\rm max}&=&R\frac{p_f}{p_0}\\ +&=&R\frac{\sqrt{2m(E+GMm/R)}}{\sqrt{2mE}}\\ +\sigma_{\rm impact}&=&\pi R^2\frac{E+GMm/R}{E}. +\end{eqnarray*} +$$ + +## Rutherford Scattering + +This refers to the calculation of $d\sigma/d\Omega$ due to an inverse +square force, $F_{12}=\pm\alpha/r^2$ for repulsive/attractive +interaction. Rutherford compared the scattering of $\alpha$ particles +($^4$He nuclei) off of a nucleus and found the scattering angle at +which the formula began to fail. This corresponded to the impact +parameter for which the trajectories would strike the nucleus. This +provided the first measure of the size of the atomic nucleus. At the +time, the distribution of the positive charge (the protons) was +considered to be just as spread out amongst the atomic volume as the +electrons. After Rutherford's experiment, it was clear that the radius +of the nucleus tended to be roughly 4 orders of magnitude smaller than +that of the atom, which is less than the size of a football relative +to Spartan Stadium. + + + +The incoming and outgoing angles of the trajectory are at +$\pm\theta'$. They are related to the scattering angle by +$2\theta'=\pi+\theta_s$. + +In order to calculate differential cross section, we must find how the +impact parameter is related to the scattering angle. This requires +analysis of the trajectory. We consider our previous expression for +the trajectory where we derived the elliptic form for the trajectory, +Eq. ([9](#eq:Ctrajectory)). For that case we considered an attractive +force with the particle's energy being negative, i.e. it was +bound. However, the same form will work for positive energy, and +repulsive forces can be considered by simple flipping the sign of +$\alpha$. For positive energies, the trajectories will be hyperbolas, +rather than ellipses, with the asymptotes of the trajectories +representing the directions of the incoming and outgoing +tracks. Rewriting Eq. ([9](#eq:Ctrajectory)), + + +
    + +$$ +\begin{equation}\label{eq:ruthtraj} \tag{15} +r=\frac{1}{\frac{m\alpha}{L^2}+A\cos\theta}. +\end{equation} +$$ + +Once $A$ is large enough, which will happen when the energy is +positive, the denominator will become negative for a range of +$\theta$. This is because the scattered particle will never reach +certain angles. The asymptotic angles $\theta'$ are those for which +the denominator goes to zero, + + +
    + +$$ +\begin{equation} +\cos\theta'=-\frac{m\alpha}{AL^2}. +\label{_auto10} \tag{16} +\end{equation} +$$ + +The trajectory's point of closest approach is at $\theta=0$ and the +two angles $\theta'$, which have this value of $\cos\theta'$, are the +angles of the incoming and outgoing particles. From +Fig (**to come**), one can see that the scattering angle +$\theta_s$ is given by, + + +
    + +$$ +\begin{eqnarray} +\label{eq:sthetover2} \tag{17} +2\theta'-\pi&=&\theta_s,~~~\theta'=\frac{\pi}{2}+\frac{\theta_s}{2},\\ +\nonumber +\sin(\theta_s/2)&=&-\cos\theta'\\ +\nonumber +&=&\frac{m\alpha}{AL^2}. +\end{eqnarray} +$$ + +Now that we have $\theta_s$ in terms of $m,\alpha,L$ and $A$, we wish +to re-express $L$ and $A$ in terms of the impact parameter $b$ and the +energy $E$. This will set us up to calculate the differential cross +section, which requires knowing $db/d\theta_s$. It is easy to write +the angular momentum as + + +
    + +$$ +\begin{equation} +L^2=p_0^2b^2=2mEb^2. +\label{_auto11} \tag{18} +\end{equation} +$$ + +Finding $A$ is more complicated. To accomplish this we realize that +the point of closest approach occurs at $\theta=0$, so from +Eq. ([15](#eq:ruthtraj)) + + +
    + +$$ +\begin{eqnarray} +\label{eq:rminofA} \tag{19} +\frac{1}{r_{\rm min}}&=&\frac{m\alpha}{L^2}+A,\\ +\nonumber +A&=&\frac{1}{r_{\rm min}}-\frac{m\alpha}{L^2}. +\end{eqnarray} +$$ + +Next, $r_{\rm min}$ can be found in terms of the energy because at the +point of closest approach the kinetic energy is due purely to the +motion perpendicular to $\hat{r}$ and + + +
    + +$$ +\begin{equation} +E=-\frac{\alpha}{r_{\rm min}}+\frac{L^2}{2mr_{\rm min}^2}. +\label{_auto12} \tag{20} +\end{equation} +$$ + +One can solve the quadratic equation for $1/r_{\rm min}$, + + +
    + +$$ +\begin{equation} +\frac{1}{r_{\rm min}}=\frac{m\alpha}{L^2}+\sqrt{(m\alpha/L^2)^2+2mE/L^2}. +\label{_auto13} \tag{21} +\end{equation} +$$ + +We can plug the expression for $r_{\rm min}$ into the expression for $A$, Eq. ([19](#eq:rminofA)), + + +
    + +$$ +\begin{equation} +A=\sqrt{(m\alpha/L^2)^2+2mE/L^2}=\sqrt{(\alpha^2/(4E^2b^4)+1/b^2} +\label{_auto14} \tag{22} +\end{equation} +$$ + +Finally, we insert the expression for $A$ into that for the scattering angle, Eq. ([17](#eq:sthetover2)), + + +
    + +$$ +\begin{eqnarray} +\label{eq:scattangle} \tag{23} +\sin(\theta_s/2)&=&\frac{m\alpha}{AL^2}\\ +\nonumber +&=&\frac{a}{\sqrt{a^2+b^2}}, ~~a\equiv \frac{\alpha}{2E} +\end{eqnarray} +$$ + +The differential cross section can now be found by differentiating the +expression for $\theta_s$ with $b$, + + +
    + +$$ +\begin{eqnarray} +\label{eq:rutherford} \tag{24} +\frac{1}{2}\cos(\theta_s/2)d\theta_s&=&\frac{ab~db}{(a^2+b^2)^{3/2}}=\frac{bdb}{a^2}\sin^3(\theta_s/2),\\ +\nonumber +d\sigma&=&2\pi bdb=\frac{\pi a^2}{\sin^3(\theta_s/2)}\cos(\theta_s/2)d\theta_s\\ +\nonumber +&=&\frac{\pi a^2}{2\sin^4(\theta_s/2)}\sin\theta_s d\theta_s\\ +\nonumber +\frac{d\sigma}{d\cos\theta_s}&=&\frac{\pi a^2}{2\sin^4(\theta_s/2)},\\ +\nonumber +\frac{d\sigma}{d\Omega}&=&\frac{a^2}{4\sin^4(\theta_s/2)}. +\end{eqnarray} +$$ + +where $a= \alpha/2E$. This the Rutherford formula for the differential +cross section. It diverges as $\theta_s\rightarrow 0$ because +scatterings with arbitrarily large impact parameters still scatter to +arbitrarily small scattering angles. The expression for +$d\sigma/d\Omega$ is the same whether the interaction is positive or +negative. + + +Consider a particle of mass $m$ and charge $z$ with kinetic energy $E$ +(Let it be the center-of-mass energy) incident on a heavy nucleus of +mass $M$ and charge $Z$ and radius $R$. Find the angle at which the +Rutherford scattering formula breaks down. + +### Solution + +Let $\alpha=Zze^2/(4\pi\epsilon_0)$. The scattering angle in Eq. ([23](#eq:scattangle)) is + +$$ +\sin(\theta_s/2)=\frac{a}{\sqrt{a^2+b^2}}, ~~a\equiv \frac{\alpha}{2E}. +$$ + +The impact parameter $b$ for which the point of closest approach +equals $R$ can be found by using angular momentum conservation, + +$$ +\begin{eqnarray*} +p_0b&=&b\sqrt{2mE}=Rp_f=R\sqrt{2m(E-\alpha/R)},\\ +b&=&R\frac{\sqrt{2m(E-\alpha/R)}}{\sqrt{2mE}}\\ +&=&R\sqrt{1-\frac{\alpha}{ER}}. +\end{eqnarray*} +$$ + +Putting these together + +$$ +\theta_s=2\sin^{-1}\left\{ +\frac{a}{\sqrt{a^2+R^2(1-\alpha/(RE))}} +\right\},~~~a=\frac{\alpha}{2E}. +$$ + +It was from this departure of the experimentally measured +$d\sigma/d\Omega$ from the Rutherford formula that allowed Rutherford +to infer the radius of the gold nucleus, $R$. + + + +Just like electrodynamics, one can define "fields", which for a small +additional mass $m$ are the force per mass and the additional +potential energy per mass. The {\it gravitational field} related to +the force has dimensions of force per mass, or acceleration, and can +be labeled $\boldsymbol{g}(\boldsymbol{r})$. The potential energy per mass has +dimensions of energy per mass. This is analogous to the +electromagnetic potential, which is the potential energy per charge, +and the electric field which is the force per charge. + +Because the field $\boldsymbol{g}$ obeys the same inverse square law for a +point mass as the electric field does for a point charge, the +gravitational field also satisfies a version of Gauss's law, + + +
    + +$$ +\begin{equation} +\label{eq:GravGauss} \tag{25} +\oint d\boldsymbol{A}\cdot\boldsymbol{g}=-4\pi GM_{\rm inside}. +\end{equation} +$$ + +Here, $M_{\rm inside}$ is the net mass inside a closed area. + +Gauss's law can be understood by considering a nozzle that sprays +paint in all directions uniformly from a point source. Let $B$ be the +number of gallons per minute of paint leaving the nozzle. If the +nozzle is at the center of a sphere of radius $r$, the paint per +square meter per minute that is deposited on some part of the sphere +is + +$$ +\begin{eqnarray} +F(r)&=&\frac{B}{4\pi r^2}. +\end{eqnarray} +$$ + +Now, let $F$ also be assigned a direction, so that it becomes a vector +pointing along the direction of the flying paint. For any surface that +surrounds the nozzle, not necessarily a sphere, one can state that + + +
    + +$$ +\begin{eqnarray} +\label{eq:paint} \tag{26} +\oint \boldsymbol{dA}\cdot\boldsymbol{F}&=&B, +\end{eqnarray} +$$ + +regardless of the shape of the surface. This follows because the rate +at which paint is deposited on the surface should equal the rate at +which it leaves the nozzle. The dot product ensures that only the +component of $\boldsymbol{F}$ into the surface contributes to the deposition +of paint. Similarly, if $\boldsymbol{F}$ is any radial inverse-square forces, +that falls as $B/(4\pi r^2)$, then one can apply +Eq. ([26](#eq:paint)). For gravitational fields, $B/(4\pi)$ is replaced +by $GM$, and one quickly "derives" Gauss's law for gravity, +Eq. ([25](#eq:GravGauss)). + + +Consider Earth to have its mass $M$ uniformly distributed in a sphere +of radius $R$. Find the magnitude of the gravitational acceleration as +a function of the radius $r$ in terms of the acceleration of gravity +at the surface $g(R)$. Assume $r +
    + +$$ +\begin{equation} +F=-\frac{GM\delta m}{D^2}+2\frac{GM\delta m}{D^3}\Delta D+\cdots +\label{_auto15} \tag{27} +\end{equation} +$$ + +If the $z$ direction points toward the large object, $\Delta D$ can be +referred to as $z$. In the accelerating frame of an observer at the +center of the planet, + + +
    + +$$ +\begin{equation} +\delta m\frac{d^2 z}{dt^2}=F-\delta ma'+{\rm other~forces~acting~on~} \delta m, +\label{_auto16} \tag{28} +\end{equation} +$$ + +where $a'$ is the acceleration of the observer. Because $\delta ma'$ +equals the gravitational force on $\delta m$ if it were located at the +planet's center, one can write + + +
    + +$$ +\begin{equation} +m\frac{d^2z}{dt^2}=2\frac{GM\delta m}{D^3}z+{\rm other~forces~acting~on~}\delta m. +\label{_auto17} \tag{29} +\end{equation} +$$ + +Here the other forces could represent the forces acting on $\delta m$ +from the spherical planet such as the gravitational force or the +contact force with the surface. If $\theta$ is the angle w.r.t. the +$z$ axis, the effective force acting on $\delta m$ is + + +
    + +$$ +\begin{equation} +F_{\rm eff}\approx 2\frac{GM\delta m}{D^3}r\cos\theta\hat{z}+{\rm other~forces~acting~on~}\delta m. +\label{_auto18} \tag{30} +\end{equation} +$$ + +This first force is the "tidal" force. It pulls objects outward from the center of the object. If the object were covered with water, it would distort the objects shape so that the shape would be elliptical, stretched out along the axis pointing toward the large mass $M$. The force is always along (either parallel or antiparallel to) the $\hat{z}$ direction. + + +Consider the Earth to be a sphere of radius $R$ covered with water, +with the gravitational acceleration at the surface noted by $g$. Now +assume that a distant body provides an additional constant +gravitational acceleration $\boldsymbol{a}$ pointed along the $z$ axis. Find +the distortion of the radius as a function of $\theta$. Ignore +planetary rotation and assume $a<F)0Cx(j@L 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

    ~4NBEs~ED|eO9 zW~Pnlh(2KziO%NR&94Kv)!DMLzc~a&qktX0E5Z63Rhuj{G>-cCoKZ_x^NUgubOc^V zDsIze+rU#9G$~ePS~@IXAojkODe?w|2FOl&@AQ!YdXoyQCoU*d*TqSJDBDGbQXT&) zrYSV>5CP;pLId2;?56R^T&Oo293h*B(Mo%FO73w)a%BA{ArxbNla3-~hE5LUWGk?r z??=|K&90pc%x-?m&+`{B#Xho{BDH*1Tvr)!ob2%x9WIA9P~*(}HkflSpDr(EycS?F z?ifxm2nQ|Ng#@P*dOQW%()^oC6*%)$vue-o?FK~dw?!~I3DMBDEYnaf9ifS#q8H2J znZ$t>BYf1*J!{LI^p3e7MMK^B;{@?PeJtV}4-Y-(Eq-$d3lmwmaDw*B+_iRfmiEOA z&wU|&4mW7Ugiq&g6A06;c~jdTo}M5jvZUBb>jjb&yCwRMRf?EjKMFR)XE zFW&Djh^3o3A%F6x`I0+}m5j34@-dtc>LiyoFx1e%p?Dv7OXy+P)|lPei-)FB}}Wftn43L@|&%Nw=cn!hh|D%SOi-B^T&|&;@?MCbAmf z@-1|7HnTed&fD}<`cv_~=>dgT3NwnH$7ZMvio3k)4v#PefGb1tL!DT)`_<~hL&UUZ ziqD8?G>?6}YkLX5md}Xha~3H*j5FZ@tww3~n&@L$tqSBO)cocWmPB;n_ZKco?Kn#e znZZ2(sQUax$;|lH9jFTo(vtje{uGcQ9UaneMMXvI#37)S8%{|{=~riGYW9;+-K>E% z1{N03ng1ZH&1Yl-2;1|w<)aPCW1wtkIG37aK+^;N{;rFU+9zOl z18wYp;fDi$UsOsnbF@%CDH$1RAYq&N5&v639-g37J^qg%f8_F)-e-cls~Ex%}`Yxl$0LwB!sN5zrE)@i*Kl*K?E!m_D)U+dZn6s zE;S{krE{R^LLeztmX4T&1fD%kRy|KOJ3ITc5|uA#dcR*aC9j}>?PE1KFyJ$=25f8a zczAf9MsLf*WzZ^EsvKUIU=B|>pfopGG&hm;EpIPy!v~t~M6vRTkZ0dZYL7 z97cp^Qrl=EOSyQ%M&zWwhfa3c7jY@A@%4+vb9mz^@3U{c;ruO6_8SepILgtfAPJ6> zi|dsoeOTLzyWV&6+=Hz0@)#ice@;<=tE{ZV6-hy^5px#_8ME^gSw;d4;-1 z$F7~+VVgVy4)8*)t!w8c9L;gn$kS8>Fl>RHknj2X1wY!4{FIO zPBTX~ypJLnWp3}a0dm;Dw8sCKQTqSf*+P_0o9$m^di>9QEl}DTTmQPnKuLD%WvT^^ zErw9q9|P1Fl%&t55Jg2W`5uZTDgHa`2VoHL+dFXZ0KZ?#eX)Q%>TaH3x_@U#xm(6z z?N+t^_a-0B@9RBRZ_1rSC{0p{38X^eDsDxk3RuN{{i4~3ij~TUXZX7n>v#p~ zTYjc*#;lr%m0aurs>YHGJOT64K9&-%B)A%)e2N2@dGU`d-gzqbj#TX=$DB-a)m&WE zFC{@wcu(AVPm)etPm*0L=*ztxijA20=J%oMr1mlD7z%!*Kzxof*~6DIhw>Z;QTSye z_J_x-sD=@{v^A7#-_t~CqvTD)OJw?ur9>s;t)7q2NxcuxKizPreK$g*^Z6-T))zmw zobmh**zPw_DP_6U)39+z>7Q%YT{7b%AAW?<=1FQYkEOK05OwlgmySfJ*3!~wZ&+)& z9{+IYedw^Xs_P_kF46yC!^P&AY>h|Un7UULf$eq1k@VbAIxNlg%#F6;)ouni|-9vlhhOX%D&BPebZ|XPmbF~G- z!ZL$H0^1ENH}4zEuQi^Qo^$h{iGF#GkzuPbvtOlSv7h%8&# zHH~!9-S3<+3{SRxu7+QEDNUK97EX?ooWW07$35tL7wEag()yZOZ)dl%g{i!B#YH(t#&wTN6Tzh`mEWQ)MJ zy<>wEdfeQtIGJ82&4D*ql7HciTaWKKH3$nfaP0VCLzvLdow-#H(Su!aS3#UW0C}hZqyPW_ literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_45_0.png b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_45_0.png new file mode 100644 index 0000000000000000000000000000000000000000..c69d5decffb3614e919f78404c4f02e252567b45 GIT binary patch literal 7932 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 UYGaMTO*Mo%=3rf8>6iF_06}Hi*Z=?k literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_47_0.png b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_47_0.png new file mode 100644 index 0000000000000000000000000000000000000000..41fbb898ddadca674be1e6d0dae1fd3dafbc4acb GIT binary patch literal 6206 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_62_0.png b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_62_0.png new file mode 100644 index 0000000000000000000000000000000000000000..eab36649efb526d3f6b109a8a870b2e51332cb8a GIT binary patch literal 22506 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 D6OUEe literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_74_0.png b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_74_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1a2535d84620088d1f01da797b7a59ac0a75b201 GIT binary patch literal 15863 zcmbWe1yq#L`!za*gyeuoNDcx@3P?z!Ln9zCG}0m6-JlFDASJ0NF{C2hAsqt3(2WR4 zci+SB|9$uWt=sFm7S0-Gc+Yvy`<&<5&))k)sHw;i-KDt;fk229pDc;?_k2)>iNt}6sWKz93sF)|x)34ST;CZpq~;b`gRY2so5 zu{UvZvU7B^dt=JzVd3KX#?gVFn~$51lhNAE%}IoZ=f6Mac671gNoI(SfIt`_3UFyn zuZ*o(PcPcl%G14_S38DPbzIYJv&k{#yc1!u&VL)<{&?U(mJybo{yZUF>YPXckLlr} z93h4};|D6j6cxt2+MY)J(gZHu#*^8D3o~s?URzxY?fQhlHSgoe%(Tq3+_CKp?|JVv ze;EXCCzV+&CD~s{G;b$1n-VE_+wdLR1ia(;zj$-^0R2v81-d|%qmHoh(&cV(3}%ty z*ri4o?!5MZSYy&kRio}7S!BO?^F}1#(kr{eF`745+S%E;5|!tx|EC%oL+q{?L@Xd= zl@jaDc9-8m-1Zv%T7ivwpocK{{&gEc1rO1<_ppzm zX14Frzr`-_r$sbxp5s3i8?$KM*SaB3I;obESn&S;zBzgh zziuC}x{(rTAhw>2x!^9>0wWu}?G%++Ki)4i_VCuW|B=f=HR@cSaW2q=+AJFXN0Z0N z>_gZ*h6BbRS-jeenJAT6G zF`CyBzNryH8qX>yXCUbMI=nNh+;S`S_d`E$ks1NSFwA|=#YxZ&DT zD-rt>JXz9pTZ&NxeIk<-ltJrRrgf%VkW!E$B6HEA7Sent8B)?>rRm=2J863IUClTR zb?s=h^b{Z6Tn)%bkDD&y##=9*YuU(V_>{ z{e+snpeh2P&+vCs06BE**^a7Hhj*U*C(dSt7D~wCA3}SuJF!?$btF>oEVpK~BmPo2 zkDb{?ylkNT9F^Injh+^!r=iH~+VqwHSnF!dBYNl=-D}hb&7-2w3D5r#nrrsgm#^_G-cG_#i3r|CsU54G6e81kj-apGwuA@4I0!Dv zc=jAA_K3EfQK2Q99=GSPeQYPe_pC6B7Q-6R zQ;jj);1nkTXRg+<{-cU*i&@zBdtMaU{Af8%cm2TYN8llavX#oh*}N0G6%pc_<_DN1 z1qJfxl7p^QvfGe=f6+liHE?ZiX8vA>@wJ+To=Mg5gn(T|o^kGzI}?cE7}YIta_F@n zc|{fv=9Kdb{b2PqG#=A9(sx`1v9)WY1JVv=Nf`^ClY0a&H4@V@3J+yt_WU+D$Iyf4 z+ihd8H#DW=a+Fv*rlC00X8p)9bkuJ&WDSF2J0Q&xD?T8q7sO7>k%07%A{6=G`|;R0 zWT{RG?jYz1&DcszUE-$8b>Rs?k{Caw_{%$ozTF06P9iHF0s(!jIp(t<4fVbwuQoPt zO)>;7lyg`a`6daOfs=#6<$MOF(Tzr1maai=9>Z{h?;9Ap6rl$9_04Z*jVi-mGHsRx z8I$$z;gQNl=rwT%xPsIAroip?&5i#5xQmU*!;qZ!;|*czFqo&0ZWbr3PsY3gSqzP* zrtc$0cHf6iK7wstQs;vOjN2SSx?I6vpIUZ;34-{HOOVBCV_Wo&7u@Bq5M}q`A8(&z zuYJ3uMU)(CM}tYK^k=gmy`>^h+Ztmk3knPS%X9ohUgS~;Pt0W*^I`@wzD}x9xoc(8 zNvXmvw>00Z{Ff~V2#k+}3U{R@6zq6d*QKbk zLz8T*QZur6ca+}KUq@Fzmo^xpiUK)HukpugS|q=nRbU6Bny?$(W*TtCUk5_&dFeVb zJekhEjjr{~Sq1z5Dx(ZOkA7if1pOS7ysv$uV{k=Y>>SKsNO4%jYIJ zW*bbfPq6RO@YjTHoLM22UFJ{)vUn@FdH#iO6(gSM$A8xuKJ+m#7rC5eOw#xpm%z2^ z$Zm2N*=mJ-+#g%gZF(!u<>6&cr)6jHL7cF9+jz?bXGEs+_Y)EdkOTP;?v2O}te-6u z!PosWo=aUQn+jwY)()nT#uy?vnm`KPM0^heALXNvv%Jm(!wvduyveHzr^lLmHD&=L z!{{im@y}V_Sd?&}#radTA?4VAgy5X4Y1$mstb7U2!hEehCg=a{YWQ`?U!}MTj87mH+ z^@Iht`XHz=ScRCrEyx;*k7X)cs+8MGwT1tgM||)jIcfY}3$3xcF|)I?_NpB=doUUy zK($mya(aJ((2eo+VPV$_lORR`=JmhQWc@$e4s5A25HaXqMu_IolUhZ4cH#t2!TGRAhI-gV0{!$22g)Yypc2XiuN!5#J{k3)}W!jNK^hnFqqhc8r> zlt%ZKyDkK{L3&k)1VOF(J1*1c!j$HVTrh4>*F|01>E5z#HMcd58OSxiHcN2-<-8f-Kp`t@`gBrZc;%rSzXVru zO?Qs??>m(yH-)u4rL#EiQ&NO-?A=5^B7Y#l;d)(iv026cjVH6@>o70Gc z(WTeZFoCuum64IzC}Pj!4o^ho5%)frn$VwYE6siR4`prIw}?YCRR^IWXXu$s9DU}v zp>v<&3zVGq-$4oQ3)H8|s3c$1>4^h67gdNA)bZEpu4`iI$Fvr(c&uN3CZy23P*lb? zVS83y#O_{VNLy-~TU?ry&}&&m_r_e`8|!POJ){F3<}!79Z!jxk@a-snw@T#k#XLN? zDm^?7&X02&%GdF3<_u+0UMNK3TfLGNiMl)Th$cljK(E+HajlXovv^Ls{leGQE6`EE zw@43?nv~eRL``iVz!n}2&z?n!ah`HX*QEQsMcGUT35{GFcafXpFL@afv)P`Y_s?T< z8)|AZz(SGbwx6vOD?5Bl>5Bf>!4%V#YFt_PBdfVsr2EF6JHMn)TK4(9l)=H3rL?sE zK?T@T2>KMn&+bOm-PexY! zkDX>(Au4KN{LXUi>Y?+O4q0pwvF5!u0Fzz>9ktB1tfTZE!`53!f@u&}*Nn?_{Saea4>==85}@R}{d|6lmm+lx(bs>&+tualKb~ zXSv2jMR4!cVlZ);HgW!U7gdV5=D?t84+NC@e%o07pWU}IZS^c;V2O6eT-lsQ zFP(EgXN^YNZ5a|@@3%_RdliMftKuHa7D?vG=8v!S?g5u&LwywS+MV}3+eC#5XY^Le zJmVCvHirKQ*w+pbzH^FO4%J>aVOPsRSw+c*)qDPCqWFjZS#GaYFW_v0TWhPx!q0|q z{8uRTs zH<}8U1WdY*y#DHb<;gpe)iGPEF(7HI4F1#*HdEKjX{R9z-<&=jE2`INT70s;7w>n_ z)??srqavkeN|fBJNQ%ZRE3ipK`Z1v0BN&P{-UWw?2)93$KK$z;?Cs%C-Rxs8G&Vpt z!xu<9U*p6V!Q1N3G!*?B@sjRxr%&|u8)*@*{H%I3xzp09HMtVr^}c)Ie);$3mYuNX z&|xulfX}M(UDt55LRK?bhb1DD1x65@jnRzLRD?RfrQcW}?7|+-{ni*Y-_VraH76HNW~pD9h)+YDzn?-vyt|3^9GzQTI3Qr#O>$*}ibfY{`$;2ozpdj*`o6(U zdP(QEap>%~{JG~Lwzq8w{k08|9Ey+!*c zpFgYlyHQ0}G2MCYmR^(oKO!6@D$-tlJ>q1SU*7J^f{LMR+@k>*T-U9Lc|TM)F2{n(F-s!2DdUfAe1c z>rIPRz?<6^y-Z>>4f>g0JPpiTyl%Z=Icb3D60H}R?`qv2tI_W&nr zOazIWj^&35pPJy?TcKNxG2r7!tmjEr(K9dyad01GpzF&yjDVvl?$6B6&rC?!v;wP4 zKN4}es5a%I(s3Gi8K~aiV;UT#4>^jp&GOjgR*tr!d4%8caDFuYioYxb5^A%rD@k*p zFVEv|(94xbYJ;cZ%)d;Clvt7m{Fc{W+Hsbwfy8`y8c8jkVtzGAIZ7E6SZ8I3FZKo1 z{NNXkzwtv>Bz@A$t;>a4``a`KD%^~(|01$Rp$j|ZYK&`UFD}N8y<`nlJ2~Ut<7WFx zNPd=>EzrkGvf0~TXz!KD4ko5H)zZ|~)wh$u#C_2aRBxiK(%CStnO!v$d3=g=1IN{W$lp1}-=CcH%Rn zf6ILYQpq~d!Kzq&vlXQfdc@d;-#z{2m_xF#e1KUb8yZvQn`*q#;1Y`^#*AEmi_Xt???X_)_H~22IHeA< zXr-L*z2~d;zlx;dg0!gR*g(54#icQ2MoxE)&O6{2!Rd(`9>TRJN3)lUTa6ifg0UB+ z+3i1y!=%CmPyi_HZ&?W)OdaRm?gun_z*710mryue)r;6;w6!wnLY?%Q=*>)9RC=GT z=KD^^QXay(WHMGSO_1P{*v2c4rRan*lKTu(RH}IuG2w`_i;piZPk(N8$c8!36TJl& zWf-BlbRl{Urzekp7`JW?^)}C$=EtIBpcve7$Y>ub&FJ}fRmpj_CF)mR&HBqEjq&if zR55wxhWK`m%pbkI+!?Fje1`oV>2z@E+)(buROk$yIq#;~_P3`bwsOj-A^8J4;v5PN zo@uPXDNc_WR)N>N37{XE4PXVpZ>GVH;-vALsCAPyYdP2$+ujyz09opFcF27APy|Yp zE;1&9;Hu%O;|-cS7UN=XlGez<^WGw+Rt|* zBFUG>hI8}!biYz@MkCj?7DQY4gD}w;l8CY9Q|^Xq>Jl_#!z)AU-a#x zY6}@2)^0xgHC@kscCL|bz2mZ5!C|FWXp%aC816{9(fU{CymzTlbCsbGuqockgJ#q` za$c}mc%*j6V0Cka5f&w5o`U>w$&GWW{&N!^)?a|eloH33Z_PeN~6>FG!X`19b|8rfnFtZ_^s)W$J+ zi5Uytj-F`!S?j^HS6)r@9dh-vEuy#5v-Mx7Ga}!4G@Wa&3sr=h&MvT(In!<62$7)F3Nb~fwJ4ztnk z>8(mW$bNjIi(jnc!y08}?liU*JcoBf>$`FR^=7Q~Gow#Ko`wtAQUthSN zPYf#~7}UpL2rflchN%b2?{YOdJ1b1r(+r+_mRn%`|act)14}ED`x)~Ut;IzPr zzQ&nYvcXP-<3w|>=VIQ%?9Ek=Hf>nz2gYj%C&a-`RS2V*!41y9j^!er=NiN;F>_r& z0dBJqO|jo+Yx(W^ef_gc#4{o#hJPg{Jy$#B*J^Yp2K-S*uSKUF{2sKz!&I|*v+|q0 za3E-jQ;E37KuDmW61{RrY8k2;Ys=}MY%N|keD(YNN2Kw7&t?WW--r;G!Q|)`xFC6wbb;E8-I5u0OMFUw`m*4sj$?d7ce1|mNtz|v20D{=UNyaS06b;JPbWbmEXb-^88qp+y0~+dcRNG)48XZ6Fi~r4}_c6jz1J4BaA0YWI)=xrzcVufp>7lvf4WH z$dlhm{0XHOVGYhH1HymGbMYunz?DvT=)vYvZrg1XX7CO>6cY&k#I@BuKOy@4)YAoR zFtUMH&c__&eqw+A^=oeWjkg0wpAfC(;zR9|#r3^$f3F-`d%Lww zRr{631R9BF{E68{;)!989IjBiS4y|&%*L0kzlKkrA% zrtj}JRVy}$EUk%Zd>u|we|OnJA`$M(Eid?5%@yAjUF-sUnRHv5sy(&$(l;&nnPwe2 z_EP{tKkX%dFrho#u{PMhHchF@%GbYb|Kx?^ldaE@K|D(v*RTgQM8XeF0nD`B{gh@5 zeLxMOm2$u3rK_;oY+J&`{31^g@%h%DjN#rz&1BGlCnNCm8&x z7y;_RwWujVMwsU!&4VS*9I6_t-NiIx7Z4VaonLnctOWP2)~fdZ#OBVp9&v6`kK+=L z|JWVK7pnLp#kHnN*Edx95&9nEU(DXqR5CdI!lb??hjNuMrsPi0iryM#`IGI*$)R`$e`^2l@J{l`F;}ZN`eEfw)=`-3Qz2 zO2KUKhxdgSQ;953$)OI0PqO$~^8l`JT(VVlSUHQ4JME$1?^cW?cJpeNePhotZ`kzK z^H{T@fHB6%K)g>vl3WwVH+QD6<+;I2gL%YQ&|H}Di8P^jxQ6%P71rg(m|+;6-^J2n zfW&8lb~b2<>S$Hy13V=`y-8PtZX56=>HpCuU?HdS$j#Uj9jaLT?A!y;QkwE05>zZ{ zE3-G^o)YzGnG`P#p4fAO{8E=hqbzmCB8`-PSjt=2wfqY46(vanKw1kK+_;c^s8q6F z_1aPN<<{&ixV}W+$$w8}?|C&|<#wABPp3CtL`TG}gr^J`??p#TgXjg zDWlh#dBom&ZL+r$Vue1IwnL0jOT=2K6=OpUs^}dSZsm!sU=d4mw%x6t8al#{?KOW_ z7O^{Sp;q#5szVzQT(>~wB1L)m!#Axh%aAD0+U!JiDeU*imYqnO zc-g-t4U#gG)-cVcN-sXw{RAw!toa52q>P%Y(w9QrSMq=E@8(Add-kTjil-Xr<^y=m z!4op%T9qG9<+PM$96J8Fs$G<+EDetw4 zZ2S9D?j-$w56CI)!Ss&G{6FUwjFe`6KaD60yS!DFX!y_TQFZ204-PSuNL$NlbJOMK zW{0xpCgn7Ig{)K*SCz6;JJJ%>!&j-RMhh=(tyoCF-VnI3z3u+{tW=ls&b;Ao^(m=Y zPtROia-J`+E{GVgL|7q?f-xMO-g8P5GQ8X}y!1a}N^Y#r1`G%wmUatAyPS1R?(;%J z3(sh2z~{FQ=62jU)cx;?pU-C6{2Ve;L^+p)^1@XCZJ&WT1DV154Y`3deL^k!7&_zW zgir-c)zfm$JEh9ai?#sb3Gisnt21_`9K9AkTF=#z*fo=m!Z*BJUOwh=xFuFvK_}=S zYKxhjk*1(ifM7{m>_X$W;WuFUy+$a_92^&Jgh|VZ$R{(tE6WPqnb)FQ`pLEG<{{dn z8nv3Bn+6&g4r8I&LUw%;q5Y9@m)CRZgTWuQOkvM!?L6+Ivy+uf9MsiVc+JlH{=-7B zAo+u|gV=&CP#+~Hq{NS%xtxTaP^6;K++v*4(S+_?nYYacr4YknXrq8I#lE_!4gj&A zL)`8wD<5qRcnS>AfpB zBGkIU0LmHzDCNh1WW@0gEG__u}>(2!-+koG*$JW0~??mzxf1mrT1-2YK}`G zM#F{n+~vvI;n4LrT8Jw>hUHa~wWi2`#2G@`SxLF|tx^~v9@O{n|C zzkfL8)V&3r>F-L9SMyT}X1+qi`AeEI6tMOew_`G~XRM?;xg?lr(e-RXAan}1UVv_; z2qrd`k3D9~3NcZHhuP-+?+?(Kze8a#N64HH$3+%OV#lIM8+A^)OIo8yDsgv+5DV5e z5%vg>zTb>ZZF1UqEj#dafbMaCRp|)y1~#G3A5HI3QffzaOKql(1lbsME;Ij^GGXR? zq*~s22P!I z9*S(B`l}-r(TxF}gux!jJhT?!1&tHbTNdt7*K9=)!kE{yJyf_h{0QcWEy4|fp7ES` z1{5L1m|(9YrjM4hSz!#cETcr2f9)NT#w#;wAkb0r zVrqm2(7!{<2BCZ%|8Hst3_*l?&av;4f!dRYV_vv z%dxtN?KE?^2ex~hPM8<0Bw-0yeq=iL|LVNMf+|1;G3jyC#s-ZQi5=E3e6ccV#lkR# zVPrTR5IMif#o;W*@4@PE>wF;##zF?jZZBiva*^`*nwlaPLCmC;TEab0dYIe5g(-obVpu()jVRs>XpUH^gw0 z?^X;hO2LIr%y#KG z;g2WA+`Dp!OspS}RyX@6m^Fl6BEP;tkn((`dU1Y?1W1Z_eZQ(J<3{kT;vnLZHIYV)}qpBVlQ2$p-QAq>A&=g{h10Juiq?Lm5XjgCzZfSHQ|~URq6G9x4cw zbwy9QYF@Uls9UjO{cj$qD|yEbdZKhc+@D$Bbhn=^x}NME&^9zw!hQwz=DdB2r@*`T zP_~|4yuFO|XBa=LL}YY_d}pT|uOM$E;2}(zLyw;rW722_m#;f_`7g23i{`6UIp3L zb)UwzG*RiIg$~}!}&r_i*YK1I9w7(6W1>a_fVKV?hmRGicw z<==?&N>lTT*3Wyinn{0R9RNpLV6%}^R|^ynkCWh{_T_~gMeL&zLpKqXnO|(|VqrDi zP9S$8queAvw;|&Qna8h0xcUAu_n9%bBV8CS4TnC#-};}5JT*6`{|&0y(<=Ajg@E7H z9&}1I0C{RYtLd=72m6rquQ zCNUs(UxBa3`=DLD&Fba&oWwod0xyFYXkZV!;P1&cQRh@ZS}}1TQ~0*{P)6=O?K0{v z=wBG0u`cN#6n^79t7o_?j_;%#GUQP3wW%^ORG@^m;LW0xI|rx;!fK;!tsk{)^i&Mg zCjrVHjAYG{R2aPsD|mAEAmMTUOH&mGvbVJg54&VfIRp5gBs2EQ6|f@)=st{BxfE0- zwY%HXzOlY}LJjU|e(LDkk-8}}(1#TC3?81n`SzttF5y1qVnD3eaRx0puj$Z?-1jg4 zDHN%h>A%<9!PukN?CC= zI-*cnIj$lBnSIBeA`vNukr88?F_zn6h&p$2+|;4ams&rBdt5Zug_VlSq&8Zf^lnT}{4A9M9 zP04zwKg~|f7zB0kyRj+CpY5WcnmrFlg;*x|OSv0*BDXq}qXoZj(Z@;svF8dF{9oNm zysoFsV9$F%*%4xS*YJU=^J~DVi0I>~0BhDqnt+XOZK9Ew(7%mHQ>G#B>NphMA2sb! za%TztJ%M-8nriYAF{wS<6D_f1Blk@h! zctwn^&UCw#rE0vdYXS^isY?O$(*VL5AY{#!KluoL7_X=;4t^(yzGDjQR*kW+vBcEi zUrtL-YWdxd%|}*@|B2Us(T&}f`1k&0XS-PSqI}ta{|jt~EXi1X6^5>r=u@WXksEMP zES3E4o7UvE$LQ~XRd}GZ`AlaSWkv)Qwy+ZeKsq%(v-`KQcKUuQo^6N?5UIw7hGnQ&$jLAl9gltYF(LvpptqIy7*8q# z_R3rD(&GiNP9>t)W|#%vzh&l+C+$z*;x-D7-a+pi4@TuX0sh=1=?SMab_Bp3m%iE* zjyt8G$Np$GCgc5>w|_`=@eseTKl}Z26&K|oW`WMb&UMYX8Qq@Hn>i%_(93pog&)U= z@?^E$3WBkvf#6EW_Clatbm`Z#d)r!3O!pbKvqrx}u8`+{sW3KWKRD0;T|cqYm(JAI zDW`(i?B<3}0IPtA2^ZrAW}FHAvHp`}N0YIpxD@UH*DJfyj70LF z0s~IzQw2jMHo!#uDRlq(uh<&K#~F5zA8XOmuRNHR;7}4B&C8%MJ<{WOQ~OrC%HQo@ zdvb5oK! zE0-?Gchjn`VgVXKrifOuu(*2+#mgs-NxNm4N$_`XoyKNpK|>r{n1&xPozH8zqJg0I zy@7Z(mtQd-?9^J`2Uk6JpHF7QDFg%hzMlMPI~|um^Pn~Ve)O_NejKv^_sH4>UuU#~ zZ>*qmtD{zc`CPW7FU^`V{c_5cZU|M*tx5yLx7#+I7ix03rb~Vb+L-z`160eN0KN;a zr8owffB9KCFPeSmHJ_EL7eW=3R9{qcFgfr+sLFM7eff0iEdRYJvjMf)yNN1hBES7> z&$yR?fLgi@*KGTFGPtC0W-k`Fr*t6?{>S36Mu1TRdZ9$*FDf&fKf!@pi`r#dIE-A} z31E~VwiAt`WJb)u6j@Sd;iNLj%6MO+`GKUjlMTB`ZeKxXr5eAf~Gg4XWehB zAw()1z~n|UsK?EUDFo2YFWyLYu5HKVsF1?G>%cuCU$i>voNx|m-IDMsW>x_V567c%BnrI)SpVcz5JmQXm@KP zT+%x+9A~5Hur9~RWQ3a+B2RM*hyEw@+kNO%%W(YSjUh*Vbj(3l9`FTD?91T8uyi$dFHfDrz7o z+Q&0}@>2j=7Aeo`M6yf&L<7-`opIMd9Qm^B&RzIJBRDMRK@de~3_88f(u((uGOcIX zgsi<%zN826)JY%!W&lcID`*EnN*w38*aZtfRHKOCQ6I}kR1!!bGFw=%W(!arSW3a# z!E`MesJa2%y#Qq$YrGRfBYArzwwt{PJwSh6eFO8_i>OOhkvRFQ2Ws|=uOSl?)AgII zohVyUU_A?E)2T9hKOLZeP<=HPfjS>;wc9iYbc)MO%-dVtF7H;{usd1X2L4v5*x%L8 zqu<9qXbK#3fqgwfbyL|wICa5@X|flsOy97o>7o79`D|z2?5OFZRJeIGZ&yQo{>NL= z?rUWUXMH77HG{AG-7|mCCJ9rj3@xPba4~}V_~80SWOhSM=D13c3tuO;ikUCv{Mp)l z2X8L{ASjA8A1V*-yShLgkSv9PTRNLh@!U^A;8LfP_Eb}_QyJtbcd>*Z9w<^tj#Mb$o(J0_zAs3uX323uE?j&sOM( zoqV(~2?$1nix@LCx>(3594KpIsNaBWQ#@Vl>K1`G+DZ2IijNgb>c~}VMBF7Yc^$wW#roCxJWMmsvXlJ2%?TF`{|sn=CJe?~ zHv9#O=ZyO5u-rihgv28|}EVh9}^ZLdFmhIQ{5MT^6YH{PwjtxDt0mr?L4R;JRXogauicvw)zT z;jSn`z?uhyr^{v&B~t0)&z~|Yacy)xbCSW=CteLB*@5qCl#d+PnEnPleD#ENP>~wA zo`LpjD3?B=qc_y~;>eD@$V%0MAH@i88d<6&)7!JN!drtGiy-V5(@8oD(&P&;O&sBF z>UieF0?HEL1gXUOi@ol0Qo!*&;b4nMn~YE%P&Qsl)q%DD(|gAoIySy;Y$d}i+M7NB z7$yKRs~FyVDe1!imJ4CfJly-ks*#!kH&GcuT8}v3n^L)oBw-0~**%+S`STs8>VrV} zkvvvOW+{)o4)O_;cybRlzH$%JN>NrUk$T(7fePu582DFUZK@6C*Oz{)BrKj+ zne9Y?zj^M%Nj|ci`ue%v?na)a{v!QkY$tZdY`N8pbE@;0+e5o1 z;b&oG#8!p4XQU?quTdT6&|wB_xfhWUEQMO^We~N%ZIvTSibM{}6 zjfs&v!3FB$Y+3rG(b)5-dK5~|#t!=#7=Tr-K0)?7hqF1GOkzBh1%3x%A($aM&D1mX zd09XXTDX^hyd#=S8q4rPLV`USbT6!5x_F2E$)3JZ&PdAeH36I>H!CcfdNQKFTjjFb z5AhW=$Ri@?xDp`!k4$MPZt6{f{lKAbc%|&Eh`h_pKb*t~nl6JO@wl)@z!L_N7K6Y~ zSAO8NQlB1CaCf~m*LY1hW^Fz<8R5tYL3T)l!E{j0Fzv1ohKRSM58+{Ss z?HMend|cE+e%?rhb!X0u53*Y7_oyR=&Al_ibToE8k$=E{4llj4jgyCYpgFb?gUR?5 z-mT(-;K`IvX;-k&z@;Fv*L>=xHaww%(7*+pFF<0qJpOhhDUL0PV3h6*4vfe1g*t+oWHg(yO15wYKj91@>VKRiT0aCnGM84dy2`M~Fb9F==tzz}4Lbb;Fw)d7At;*NjX=&e-#AEKb zwYYxQU&B|6o50LyZ%C{sA|bY0?e#D;d2l-}bBuup_H;#uOcjtEJS^`fpDA?ZC5k5> zJq!Y@h0;>HrW!b%FpDvfVuKBZl6`JdK;C6*jtk{D${4OALvGqter^ zcH_!qXp)$kP*Dosw5wT@TIcvg-vfIJ$0KoPNmPTX942j*a3M9uG9fb&Em!B}xSQ91 z6~cxWKb4x(tSWv1Yuc6PoA6KWb$z}s@wJxe1H%wL>BDg349?80zn5~sI+`Z}@7uO| zYmee1w%l9ZZ2hmx$lR9j@rs}^=l zlTXieyfEOOV zLd4kK_j#vq%Zj&S@ZErqS-Wxg^fB|6;8wkPSSr3h`v`t3YBCJ7B^L?YddR^*2NhIs14B5g(TBHPQT=e^5T8 z^uI9V$HUjYhsTC{(MQhix_2H%$Xha?kMs>t=S`^bS~hKrXA)Bqkl z-G+Qrmeuj~WxvlddIybEA{9A(ZQ2)P5VuadfV?<*1?|xsbMfRY9ieoNkPoc#Q+6bAN2I|MJ1%!lV?6eZnKu$f5`8UI+L^1 zLMpS%s$$#xW{4@;zR-6*-N{f&l9@_^|K!jrh%HWk$T6F`G_lnshXDO;^WeqV)%Q}t z{|Iyl<^SiyzW=9Vz}d*|H`~M*xig;A4&?FF!Lfa*P2V4^M(;60&+tj_z_Bb)=Le8* zbLH&Y1FUf~R|~~=rkvfW7xA3rI}g(kywuA^kELi!Uu}KHq>bXeG6hHDF6H4`3p4{9 z4BGiYN?5cBy#9hqouN-yb&%a9;4tyEAu!IJ$gCJ3uC#N^`15#*|LbgWJz~j0 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_76_0.png b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter6_76_0.png new file mode 100644 index 0000000000000000000000000000000000000000..cfbcb68f0f3c49209d93c3e0fd7450d18a694e60 GIT binary patch literal 29482 zcmb5W1z1#H`z}m(2r5#7(w)*VqJ*Fl!q6Qe-Q6GpQUcPcfWUyHba#VF3^jCj4IO9k zd*Ao}Kj-?sbI$j1U2_3@&#b-ois!kX`@YwNDJ#km;!)zEpr8=Szmk53f`Xb4UgS7f z;0Ug}aV7YL;q*dY4F~*qbu(Rdo;^X4uc=Ey7*O~Cl%$pKlWco1oGXTGcbPe6&xqOBF)aad+U56#<@0% zUF_GdIg^u3X~d;2)fq)XRpGy zR3A!0f`)-1h4$PZg+w}SkKl~UA1Bl*y>(tGw5Omo;ZjX1tjBU5{`|>)4op(i@LI1W zsJO(YGzmbUSqeSsvL3TPUC2`o9ft1=f)33 zHYzdJ0;{~5Vg!6KO6;A<3;A$ddPb&!bDGBrx~4c~3#}cWuMO zKO=m($dAcL7tpfjZxw)NSRGmf9W%KWWJgtpS!RdMpopV#>{j0>Kz|;k{Km@s1FoD~ zn3$4a%SI{2l5b1j3=5XXqb#u5IjMBVdNjs~P^)%EAEde6$;rR>Bd?Q(pZ?Q!$1A?Y zww_RYWJ8mfV8`!?JW>0Jr zQHpu8TCLA(LhVq=MH>n{v5@pQ# zmt`VpyOOCd9fTiv%@xk^rM@f^qc(>lC#ao|r!022%^H{^3#_(`UK>5u!IOhCr;9yJ zIM+IOqZH1>%o=+y4X;cSgvS7 z!_COt%~Y9(_qf*15i9MsUQ21t39F2JZZA0QFVcrb;|Rj@vF{l$hChtSZ8?P^J>jQz zsQH`G*w#Xi&amx+U}OXbI&;`lYDn`nvDLO<{4wbR5sR&=vgV?gN2hB0o2?@WG*$~a z?!_4~eGOp_rpz+;Xi1EF+XoESvn#q4P2`BjIQ71cR;nr^x|+&mPreGy@3+!(3oD6$Kgwu(2_RYGYqh8Qd5?Cj%qKUjJu5`nG2J+Q< ziZIg~I&uHaANkvH6=m^OO>}<1JnJ$GH=kOV zSK;YONl|9BBx^x|8GOr@-G)XF1{5EKhxOYv~+X4MzrIb@~h|7+sDJU%&)dT*@)g#cW>IMC91 zZ{aU(1OK)wq|SvXv%#7!;E|ze6u5oDbP3m!c!9%d!eDFeV%k4VO0yMT3V-CeL$$!8 zBk}rnl@DoruN$VXmQ9>$d|Es3`P4=YdCr)LLL9H&uq)YcF4%do&&=+v_~{LSRY0b& z+QGt7q^b-ZOy{^h`1BOsd>RRTqY!a?=0J!QWb{m!x^K2zw(01QBr4P5vFoLsE+q1@ zq^FXDZGweGyd;ZAx5kh;JC5aEPR2FFt`obXyZazP zw3k2V8z-;|de6seiyQp(ll!Y}lXzF>gg}BcP#Kx(%(kOm%k_CVJm`6t5vain)`5IDB|(R9wo@4kZ-UCzw#(QPfK{#7IQ~P#d)fRrzzjQ zGG1Q}1vx6=js)#HMKB{(F4iMuMJNb9;S-S=JD#c8{)HPWohYd^}3)13)G<6Sz3{1pSWsD(1YliL9ddXRu%wHfdZ{ z5cE?tW|?I%tu6XGB1Sf3scRe~l&AHgKQ!SJCjMvjh$I5N~}Lo`;N_yEfA=&xsH zaCUv4a(P=X_AW6Dv-q9zZDuCn+0<9FF6NNov)$AQ zj?I5yQ}f8^pZ0ROkfDqv))|VRi}KKIOd9kmG$%D=cnezE%7k3Mt>Nd;<y_})A#ajYRnz1#;~nk!?8&Q{cacE z^+&BJvS^dqr@}Heo0XxD=^RHs5EsD&Njy;8@o_LR-i>9`9b&>Sx&z<=0?(iRM)h9x zzKl{QbJGGLcbaQ(nNb7TPuuK}cJ~UJtB;znSCvE<^61v6J##HxWTt}r;@}pE#f&56 z5c|=~z>D{ZE%yLE%=vzDIfwVQ2_U~S{9KovqKnBNP6;I$@m))9-1|MeZ(#J|nH(p~ zb~J0msY5PDdi?b9klDtTQFj0umq_bhdc5~yy*=M7lY%#&kM$>KkS&!hfpsphBB&N` z(Bu_6R|FARzkrU!o-ZNraR~8_*Y8$sYaD<(v*Mngux~`2--mJ=NCf-UzyBx-o-jUTiaoc^()@`XiI zvk8!62A@7q^HYm=34xvcb!ul;OS?xqw3MmeQWQZRo%$OqXkjtC_-AV3sm5VD{17p_ z26r1+`cX@v|M;a49^M>Fe!%E2SBG1EFA?S0J{~^F8lqHZ`TI{=jwd6UsHr}lJC*1J-E6bXd%sZb9wf5Rz}KYI`rgnqkFCVy<%N2 z%$7&j6m*lqme_=SL&}^jOHOXT;NqOSJ#i6gfwU*TCXQ$!VO^mcj3>$olW&jpq7yk9`6u&wz?+_B6h*s%9M!fvK2cQ0Gk0-Dg2hzmEj+8>|3c&GgG8*H@7 zo^lGC6!Jb^70Nwd0|#wSvc`_R_-KFo6mL#7iY$IwQai}#%71& z6E{7vV`~qVlZ%e58>dke_~o?thW)aSa?-mzYFq__F5)BZ!NN=}OL)9$T<_Z`2D;@% zJYPx$sdLyvTP*cjNeH1enq*Fvu9*N#H&aK3f!2I%rZw&*#V5um&wE0hW^vrO`b5ne z2Y2TI#GVe{JfEJ$tA4qF?U>bIA$=+P3Bz$`K#k0lnTMV;C8EaOxIHKg2bUUdiyyS7 z44ta8dFFEL2tZzJo$F_-X%WrY4v=9z#n-j$Lq?O7ZIcsw|29a2YUc~}V@vUSw)5=x zFnQ?Gg^!)u*x8YFCSe2dfch9&BBl%XZ?tXHCc)n_6Lxc#0hg%d<>h2)qAr%Dg9NsJ z0XUx=?fv$dX?zV{dXkmvLWiIe5{dP=zmyb1*1kN-!qg=P0Pq{>SNFb2p>}yvnIBI* zc6OfLSg-suYm@z>GIivw9*Azrnj>Akn}UjJ^^oCiOUGEc+V`?}_)MMr0s<+cNj&`5 zCLi4qoy>H5i_{Rx9zPVN`ob(}20V9ScWJ1BBj;<(P5T6oTU14jdGnCC4P&@)@)n`~AhMP=cqDbRYA7KcRaW6pBYk zNB8UtDAoee(Q$C`o-pwE&p&_4^SrAOnFkXdE#R>x>U{6^+e*W8n@H4a`rlurtS?bgmeAqm$t6aogqzlxN6bZxpr(}C?`~o9P<>{mJtw9~| zM0qfHnp~14iM+-b8(dR$@ZK~gx*zt<-@G*4W<7*mDg<>)oVm93J_ZKPLCn(*xlcS| z{0Y&VNj%$2gWQpg>olm zP7PXTLsaLv<9sq@vE#_r0)}9!-sYF<75;++vWp5EmnDGTrEZe-0A zt2uxak;c4--`YQyZW3D!f^A}6qS2t!IQsbFob^7L&OtxY%ghcyGyG9vM%yb=Gp>g^ zfE{(F{XS7V;5o?`{EsNu*j4PMSnlZe3~@_G;EvJCHxK6d=1Jzani4#|u9Xs)w<`Nn zU2QOIc$! zj|J1tgHK$gCyF zu|GV)ByxvhD#Bje2GB7wr5?dR6R&0JtB6(@l5l&nt|GEz-+XeWbI0jk47&pxiyu|9 z!xps~lC}jRy^NP8^CqN7ZVeqgivcPz42Dp`*Q;|Py0l*%wYnc8(9+-XwT#+%hMlFd zl;?Z(euv1}(}yh`zH`hd=v(de|7rUtXuGy0u7wb$y~j8?VA=gW&_tywYda2`A+-YUrT)nDx9}OY>QbBiiXr$S>d9cDl3+Gwa)+lI)j7-l$4$B%oxOv~fo$Or?0{^p^J;W< zZ_cAv!$vJtw?UaQ2es!A@%al{qD6ulEx~b<6g9bjakpH~k23E_+b&jFDGCr~TDf`g z0MsQX@D2OF(!1oCW;_w}y2wDHuvbZ;(w{3nOCLG=SmxH%A*LRDKEBjM^R?BU_bJ^eiXim5FcbrAT6&ocikP>WB*0QK;rMq*dr$EH z=K=ngX!w8agT-n*g?|UL2QeX7TFna5DKg9cTSz^F9*eukYPH{Qy;{sM*oxus zD_4g`6HYi+z-E_s_m~(NEnHoz)-diOdVA93f2i=?L_9oAj0Z4FUjI;W;u!)0HD!7_ zF|kw$uagMNxwx^PUj>|b02T?uB{3msU%Es4(k|>ItpU1xyip)28H770=+_5j=jnXd zUVkda8@t_sBi#WvPR|8}#}$kWz=@z) z2=Up%00fA6;^3?31u>yPLoNMSV#c5!Q8d0+7Y_PU22v#mtzu>d7Jo7B)E;qu_^Dxr3COu zGJa24=03!mGgFU|&^&Pk6aj-I#YV5y7jR#t8u7ArZPEThf6hH9g-9ZTY`gG?? zo{yjirspq&5AV`H6ZXGMSSw}Vj!78OziBE7gcD~P0S5TSd(W)nlh>`$9}}nju}3FI z7YqCxy>I7t87Ff(KRK2*BtvYtepFSa(jr7dlyn9EY?Y&KON{lbWz4><9&Ckh_OE_s z?RB2qZt&cH#=TQ$D(guw?Cna@`{$c};^2aE(@`JEO?gFxNOIXsJx6L$2Tqhm<^FO4 zX&Oq9B`bx)3(a#Dl~;b!o4Y$GiA>7Jh+ikmNFMQB zxwgyup17jc%Ex%W_YjOz{mxo!wN${#_+YH+Xr(Z3-wyufAWQ%{Hq&c<<0aHR{LAsE zfna<^EKs2uJ1_5JdZxJw(uT*i(HU*Trx?nZ7D#J5X00D@kPlv}?y>rnnP(R*tP z=?vRcm#n4>34sqhdD3!Z!%XJ|by*N$R~svTR7!Y;yN^3>;=?U;qJ!5kws%?WZ%0_6 z#QMd#$%c$WGb7zTh6-9g`<69)UDzQKFX!+FZpR~I<-}p8D#O|jW)@p9dS6uVGj$LWQVLG zl}A_eHhRZBV%n1v3ohq3P1U;05;cl@H%E##n`iqjb5<2wr}`q_<7jmAAfDGrjNRBL z>xRR~Rx-~`OltBKU#aK3U(f;A3eW^Z5tU>*lfd*5e_F{I@$VA46umYyHdS!x_mz-w)}wB3fGlliRK#v&g*1cN4)`P6hF0 zdPPHEYkRM$fcAQa3|z61X>L}PP;_Mhj*NoX!gps|qqppZk0Cb>ukPA4fH+Sr@e$-^ z7188qt~oYG;y^1=iBarO&s)M_o@&xfPv{KnZB88KL#+rlg<2jL-$&y8F>1X!7{RyC zKSVwvUbNTr`v6^OZKnO+IDJROJrOkiaEeF~+3>cNAyTq~bY5Ip_M4##yVeDF&x*FD zh*-?{b^hkc2kGQyE{}_mj^PWpL^W+HV&UO=Q}YSSN@V)guIdp`yl5TkAF9Rz66x6; z|5k~uB65=d{iHWt}FSZ&(@@Pot#x=B9zg}bc@_ZVT8Ypz; z)dp?9eyu;PPR)EcTy2-q3y2Q!#>P?h^08`{BRg(tLr?8zkn;&$v=DnKObi@IlMRwGnB|C02phw=i99fgCF%i`wj(?H+I!{v*B?ujayp_?9`3b}cxW4!+ zM`sqlv*W9$-9KeM?)jLK0h#A;A3~%$@^|Iod6BxZL2E%yopjC^($c|P4j@Bl9?UWW zCb_76QUjCRy|~hWrsu*E^EXMMi1!N~1PbcL|HvrQ;aeUSez_~%UR&!FAQG=w!QYx$ zZvG|?lWeN>6jgoq{cKnxTI=SClkiu&X78k$eM4XGtr;Vqs{&plamOv{yNY%4aS+zN z``5>v$cA4fvD`%iW=5`UrPFiObcwH-x(*CVXtE2kyB*JOj>fV>Teu-2(OE4=a|yg) zl-I{afQWY_rZFFt-t_9hf4l(kX~H9YnblwI*S?48Lafes;Y!>?#$&%seQ#V*D}N%| zZ6WG3UPl<5>5W&bL$5<34GD>Hmo+le zM+=~w{pD5TepB?b?i&Rl0Uhk8P^?vMUpQSCsc~h-b_~z4W_?45GS1tx%o%un9jLLV zsX1(LcxH}EaL?Cy%bHTu^Q_%#{N%k*M*afgin7Ub@avJb>$MgyW0=mW*?z}mr<%@0 zD%7P)&sp;x$lG-~m!UXwjTTILjjp~2L%875!hoy7_v$;}{!CphYBNs|cDrn*b+vb* z`e6K*7TetLoMgcFy8*Dpe($~ZBN+n=2jVq7RmE<%J`WO>w|6T>f|4sYpR=RFgG{}Q zb_kK077V%WiyB)V6l3_x6A!yPZ_GoOIBiQB?%uFaR68 z*2MLYer9He!3ebs_vWN=E-PJ1!TO*%YvJC3V{+Tn%#9OYx;8i46nUNM$lFi5t4owU66pUJWPR7Goc&jYTFCSSxalAY5|s0Z*+ z9F0^LL9-0Y0Bs=WPW1qFX*c*G)aC$$xv^41>aw|~3x^g;FLjhT5S zWYTfzcfQH$JiRS`&?KNf+I3%my4ZRZFwFPG1Ea8o^#-cB(|Vlh`-DfVBOf9Qk<0)) ztVGGsXTCfOj`zU8#MoyJFFL(8i)=7Z?qA~`X7v2%R04RPTB}|LeF^s|KFo_$By$)c z@oJ{VYNY$zutCggwGUs+Y%~Cj?Z;-Tb<+~GC^Mp;5(4gx;h#N5BVpQ#$EjBDG1YaH zt^BQ^NLHv1p5~6WYwH2H;AoZWQ8}iGiXF9N`^G9)lQ(jG)ovjDUiU-QI1fiBUWDK< zn=*7I>@++nhNiueUsVoCb?does$Fk$WtO+r{ax_ks4~#=6N^*$mgmpUfpW0eRZAh> zT%YC&?@&-W1QGE~DDm1jiDt(2`C^~AHBn{G&Pj%)p@uxVfo8H0Y?}duC2wmfChlF< z>JGH)>mPKB^ntbJ8#yXFesiCx`yYIe*Aug&EnLmWjgu94#LL8yB*vB6Q}+_8Cg?)c z+>Ud8lt2oKjI%3`z~rHBy>Mm{8tMev|oxZl=+cG+4j}0POX$If-|Z15M>jyV`sfZ}@8x z*BE(OdE1sqoNnuv9^45p%ds)_!xu*zjB)wao6C)Xl*IB_X2{3ZZ22ogGFsW{C@4o2 zi=dwC2XIef>f9YvM=yfVfP(|q!RBC80oz}i{hbFqzr5-}VbUkd_f#?v$nN{6 zjq%5x_H11MWp7l8)Yx_Qbctg-p8l0To{IO|F4_NLx@PS1V9u$9be<7zRREK;TjBNT zjdU6b!y{ZgM`Ubq-k7biwgqiz}DBwXWWq@~sD`bThRdtXbow(`?+ze?-1~m_hN&c4u>C_fOawFPY_!tlXf{ln_|>X&@9kWMBiRZAk4R@@e)qSe zG}6I9`2(=7W|s7`B{@`->G%*xN!nN4$=j9GJ@%aSPr?XXv`M#!(obG>=mMTvgIL{R zWQHJmdGvDP3KwLG+x;(voAK9qWg=gdJmzHyhzRDZ&XcW0RkmWjIHe+5=T6lfk;f0J zUsexyr_^qI#K7E-4f)yv*4eMqiQ0a2P_E4IamU%nAk_q-eHvasJ$&6LUOR%0MX&Ky zrv!GjtIUuY@4ZzGRrq+j-fLN*lTlidg}B7G%Z4)i%o3vxUZCy*lYT%!b4@Qk>f^=^eEY4(d+Zv|2-;N34_8e!bPz-jROunpHU zdP{ZLmvYw8hD#&=iV6S}&Lh4__wS#`h@CwRK$10m^~7q`ov9c3Gx2@-d2698HSRiB z0t*YYaSnNa1#K+94aa}>xg;8xmf~orx~xLFXd+5a<}E-9(DckWW}#n6@JI%Mue{pY zddZa0W#oi3-jmM8)+Q00dX3iND*a$J z$vuo0A!q$##4#jqiug8S;tFm2RT9{OvOq@c647GOcsk`Wz}heBY2D!3vk^nlUt{bC zLbCV?gy7Sd6lqW{?V+avogL}DCq>C|LxAEi**y5=GJRJ*M>_qLd&cV~T%4Y);BG&k zgdGg8J)wQ=Jo8-oW9ph&Y2h!UH^nfJorR*)7V5MLXgFtUj1@>#zDYIsI9n5c2FkZ` zaJ2qnZ56tv1bZYPocgF_Atl|r%Hxkk2m35~X*kEq8H55ldcN@Lu-ZKqc^N&p@F$8y zxMXQ@%Jr~Nc5hYHMfsML~x?X5H!$^xBZ zLFj;6qdMvhG-@0T2(pUNh}QaU+1n>xr)G@^sw zw?C2$esK$F(!ad8`g8hgjypd)w}17Z3ZD?q6yW38!4eu(;j5{jyyO^~rI>^C8(pD( z5#pU4UR^g}q|CS2IjKRz!6Pt4Za)*GDWMqAZ2)CYT>QNSUib%Ep#jC07_*Xso{aXu zew2%ROjAPg2y}Bsdex&qE2I)_wEaqprUvC1TWTQyo?i41J=J}w5JU?uj zs`Vt__T2kRJrVe{Bbt3;=VJ_VA=>XePBtkD(rkAZHRE+WyoSI1DozjF6tvy{LR$|3 zYdGmEIqwhNhU(~yr%W874{cW;QQ^V|6@b?u3Z=?EBd-l7)Dq zBD>}0cs-YTD9|v9Q#Z~pjgdvqJgteU$i@kq51u$9rzXD`3?eJuNo>ZHQ5JS(Ww=HP zA;b&`HnU+Du@AeCnWaBkz0WDlEwxn(YHM`G-pkBifmyI7sFgHWdg9UT@0R^RL~Q8^ z9gL00C5kM13r};!gPX|in*k`FN@=vzQoAo{Rg$n1#3~HzzWkqGBa3;Htlqmf?VuE= zCim_B{iGuE0>-wt3NJNwjP34Xxu|$16!tp{MKIzWE=ZcKyT4V;IVhqEf8^Sie)kx? zuQVsD+xa~W<24)aaOMLg01Q%PDQuh0O&{+_xT+7Icz5?G6geLFOd)x7q;GuY`#+mp zP=Vy}du+?lytl_Iy#6)Shn*^ic+5sk`_-qQh=o|Po3$TUf~6l5{~@yaB!!~jc!Jtm zQsi)U@mt^f%_&cgGL#mI!Rlw+VQ#VoS>tOOaTJe+M%AqPJPpM72}AhU7y*Qn1@K=( zCr7;fC7M=3Vh;eW*^b;L!zE8y**?BzavyJm%gtR2raX@V6`11qud=D20LE)vA_BwC zuMD6HeGHv$TsdUp=s(hJi5DvE8xMDGltcX!)WGGQu*yVA`GAKlvGvmxM#2RfoE44sp5(7Oyh*{T$qaQ^;@ zo%4_lW#CQpQ%11uB+VG*P*F_PC`%y){YZI2&GC*F_IW(B4kBd2`E-9||e z@@haDN>z$#sIHN0{uCTX+Le~R;C*cNmDXa~h8>n&2ycawX|c>xD;oe^oHH0npRrZ7 z;7;hoXCfb2_FfU+UU1tl=W(?}ZsafLNsfw$)(!n8M^C;~{7u<3?GIbMqI^qj$)+(H zsD>-g)+EH<;g{rBrSo&@CAhl(Y}<6CiVk}f5sDGs<4IDmwRTfKU+bui2eQQ1h^%VO z+4*ffeUU*?d=x`%%V)ruL{H<406mmc`efByYw7(405l9RojO*SOY;s)CoO1!b`t3>Ioh>UDg6qAd#k(9?u$T3Kah4Xubm zZBT97l6OC_?GuJaZwM7RvL>I(8Ok8_-eebCJ|mU>_%QDNq_*Z-Rs46DHD{4IVAEG( zp8E)myrMCk{@eg}1qM@NE2Hbsw!vz$@iJlNfZtDs2L~x5`t^tpVpx8Ig`MB_kgQJj zQWH$@;@D3lT6betX82BAh0ODze?@x8j?C^Fq4>MWH?I>T&EkI2&fU2e8qFf<@tUUI zY03d3>;3y(a|E=757p-0Gz+vi!9?rM{yOvlw;~u9Ip;Dvb{MmW=%~p?&`|ebul#5w z(!Onw+7!6XLC*GEkxfgwC#C+PLu;-{%$mLE&S9Ut!3#X1reGDNhsxcTwLxOLX1T4J!jZq0&+4_yI_|SOQJeixDNQ z*wmgV($g+);I(2jg!;O5eXjoJ@7lZ~VL*GZRr-w3R~ueT!zdYu(OOhMtQ3<@_@2}qDNb|t zzBL_YJ)O3-GI|UW0w*pvZ4Zcq()MDaX8+)Qf-?&!zuWD$Q4^FDzgJFoNeLXlQnO_U|VnPVqb!jWvNSqWN-bbF5gs+;;ZgO%9TFbpgP|T~!z)p--Rwt;<(uFT0?< zMK47;Yupl;tK9znl%FfD=p#-w*9jQuH*auGHw{-oVJzyo-A=YBrh-uL@ru@nUwh>_ z1=eY!B_cpos`7LqyLk~Cd{*JHV;3&22?py`*H=7+CiP zdMghVs?pCx<*GPK^6ieD!EhzZge>;&D!V>_dkr?iyN%)QE%rhtbL5|^xn145(9_2C z(&1gZ7wcXugn1a=M&D3$6XIHC|8^beyAAaWh$gIh4A-IO1vB$`Pa|dCd)Duetud50 z7g=cH+kv?U3Ruqc3gItJTejUiB7|=7g1@cc4q`VLyeA>;)@DyMEXY@o=n4 zb!2MC1#`buv(LT{K`|!E*m;pZe#6lxPwq-kQji_e9zUobX1Swetj40Mn*GVHKF$SH zY4%ztXTAE8_X;153i(IUmCH-dq6?xJP}wq*;9~e<&!7xo>^_J|Mi;C{Or-`lN z<9DVX41*cTk@jHkPs)ecu1%IEr0~O@M7P-vx6NlCBdtw%=BDoz>l~ssg%_bwRlmnlr#GtOvm)bm%|}!&N7u3 z-lOGw03`^CNk5oKo9p(du8olONV;cDxMc` ztmWHOy4zCl{4`#GP}FO7LD@B7)C(an)xB7;q}={1J^E%^Mg(`8&4T=yPAIG#)UBPh zxcb$~Eh4g51X{E(?$REOr+>qpNQbR*tvQ|b-I`vtc)DIWg$~JOnu%w0XSR4gn&WTb zn7>7B?%XK8G!QzW+P0-|52>vHCeV*CF14}X-rn&%2a3;(9=KpG3;V9l9QX%PCI&BN zhge&?^8nH-B;wi3M!7Om$0ZZA57;F^j5#5E$FOhumMZdbqogXz{l#`5$Cz~Alh^?& zf@H-m3Yi%*pwak0D7FV$=DDn~uVg%U*th&O|LNMXH8+fzUT}bU{IU1FT#w`9+EeRX ztKFpPZi&lR(S+v4FV4O^&i)zf0z`h^>DNx(MQxUt0&k&vs$-GB-!FW0Kq!aFQ#N;s z+p?izy(Dy8+l}RPghW2^L4Lu^BNgTejsI)@?W_&N3NsO044iH9j<&4|WpCt{hYp{} z_c$cs3Jz6zLBpm&#NVG`tD^bXtl>Y>rUhL%p*rOr74KNJrdF%9<1C`@efV~bootQ3_Hp94n|)nv_==K2mwwU4q-_Jz119|j}={5xa*`x5ld=TG;U=M6Z-iK9zFy{v~$*Q6G& z$Jj*Wx4BfFhJl8@oMwO2lsb|~tYy#k`+6nP`NZ3Bp+MAYvWb#vE1Mg|IE!>2d3Ilz zv%$<`DDBg=*Ax-FLChepg`!VkBYf%@=~6u*@JVPt1ElQX&%I3*yN2s5gH6WqOFmb) zMH5Yk-e{!j^G=s4;s&gox+q?B$=}YpvMCS0#E7(}nY(V6>rutst|X zr^qu^+SiAq1$KMq%8cWnLle!mr>nM7Ukm;goz-8awW((57IB@q%@{1PbXgrZE<*zy z&A`gGoW?SEikH@Tzfodu2(O5UAL7!K7~g#&ckxyE_FUPAk>p}k;XD=$HQ;1^{G7%T zRz(6lc)B6{oHo%+jI-fpVb#Z_%6kKA(?m<3ZaN&&qdjNkCd~irEX;bp)tmP$YsZ`S z*5V16myl)A9QG=`NBNU64y1WeGv-J2)-CIk|RP z#7u60x!Empe=%Jk>f#a44A|t=u>7k0DyzEU88=C))jO`1n?oiLIypJ_cDaJI+_#Rb zl2RyFj`Rgv%6r3}xt(M@etjSt=IEAukG8er<34filexhXBOsGe=noO_k%v2y0&}T^ z4ywDG1^Q1t!Q#W9s{ROkW`3@#mkTqgilcn|5}&@3yS*RK?Ek)v!Imm20^OqynNpp4 zE*G5+9r2!X&1hj^;l7j8sveC0`8)O+=tm%Q=t{Jo;-MHWLS_^ml`XgnJPklKFPy$eF{_ma`?T_=-{*k@*_cOJ z+od#R8`l4Ms}SYN)>q)E6l#KotZO1;Z5W6_d0>ZIS!0M#9_6rl|A~Nxq8rqQ+M(kSanMER^mn6@ee0;uV{L-MbEgkFa-Cg$pN6ytIPn`& z4I&ZW8XR&ygJ2Ef7IAaMBTY#W+|-vIC0Pl87-?NqEKTGT0AxY(SWU`NK7pl*xvy^4a%jk(0jKZ z>bJ~u|4#hrA8!*Ke_Y(Qs%)E*x?oj?Vm`JD09k|Y#H6bgamH%jMz8dFuZxg+QB~Go zU;#V)&VIgi=Jq)%1~7`ePbJfsg%aUfdV+2m_VitIv1~ z(R&XM=5$^sWsvQ}AMWnnnPiBd&yE@^2j6>TJ2 zcd8Ia(9KMyXgXXV>sz`@4r&^2?|@rfHKpW8LPkxN{ZR=|cufrgrax*6vZXjZ7=?LfD7E+cKVG_5WEp2ny9j z^TsltIF~iV-H(F#jvNM^nk=*h*O^D}W&eT31OASl&fCH6E`6y`p zS_P^vsVx7>5U|8K=X%rWFuS!ok-|ft$)c=@R(dZQc39o`P&ydPp`H4+zfc#be$#S= z=Rgl?#(BOT-Tn>e5NS1`hJZ?Ht^&w&1#x953C5W9&&`pMJjY@W9|2n>Il(7las??ZiP!{;8A1D@IGCvPGE;c850TgD?$7%% zWdqF$Z3Wicu5ZMW1W`t?45zZ9%l35)+5Y1NsA|sv)|<{ww{PHrSR;pzsD3Fy*p;vFEqw0&pa>2Rj z(4OYn-C%mU!?e(d<_ARd($X2EF_a`Cf9zr) z#6WX9Q)esLhX|{VBiEi9Ho_E9$LpKCFtW2|Oh}aTVV$rkbYQvMHc4*y3{x-Il!ULT zrxEA8nNwKtkv2uMrym;Cd&Edbimn^LkNXTZl?{8_6yL{;fx19PiXn}X=fe@blD~QR zyxqT32wkZj?5mksECBo0R%rfZxYqqhye28lKvnZ#VnavXyRF3E4vokFfAOVbfcAW| zUhxpK48vde3y=HIpBTPaUs0jYD_~7KItAXcFqnEk1wFnyM|z!#@-DAt-*z~kq=EEz z|7P?%+qFUe(p%kgdMh=Tk`l86Ua1!Ed19C+>+dLRgy<3~T)2PmInftX>CZiRKI~(` zA)pBr)Z-E~!GQ3VG}_Qmj3qTiKb5gWZ_a39O(JhKX$6Nmj}p=tb079trF;}NwaVeZ z8!E+M7hVTK;lHNJQqfPfB4;yDyUonwDO- z80bE(GET#k=cZJ1$qT(AoCx7>bAddPnxZH1AkxHS2z!OOFEOt&FGEsGoVVD7FzMzm zh`Mt-&qtI0%m4h}Us`eJYX0Avg7@$1QncN6B1PICc3Jc2{z~F;3TjodUlG<_>x;7C z(LGKItHTPq-Dml-mV)C$n)D4;A+xNXM)4gzV6tU6;9lDOy!rqE*whm`58?hc2K2`* zYfxm(sZzV)K0#NfInNm}F{%tql=!U6-=!izX@TSV5a;)T!f4&&n(oTM`z?uTE~xu1 z^QZbTQ--BDCU<`7pvYoT-Jf)S2^u!FeaVxy`uLg&&LHNN!YD5qxqr0Ii`;!ZM;A8Y zT2k!7$8EkL8r`2M5oyMwd++Yi=OMq){$x-7fu2tJ4(!@@U77fQ?79E%mh%7C&achi zlw$mseY&LcZhT%sPIeJGd9YseL<2QEwtu;$-B&b!>NPerG{;Vj+X6YOD-E|yU!=Gm ze8ol?;P>TKp6W_6Cbyta_%d_9oBb^X2zNmHh7ll}`+xnY4BwxB{=GfWhx32b_0>^T z2JgCrNW(_DTi8g4G$_*2NDE4LcXxM7w-IMDUj-nU2L{w+ltKW>ZjB-Rf8yh=Cl^bm@*dIcb$m%>* zBWi!85wc1_s|9GU6iCWVR+I3r6es^6bWCWWx||o8e&%}fYcNjZW;9dD>*+o7;%iix z@IGP}s|!ZB2ags;LI=X(`^#2+i{DU03O*X2ZR_-&h)OJ-q#C<0h34}OTaDUCu+~pDuo7fCBQ1aFy)H%+QOxICn8?ca8Mbnqqu5!v!lDoPql4SI zVp-%SPp`KGtiyx)Emkj+?Pp??M>4{dU4dNu9y}Wk3P?ag4nB&&W$Cd!OS&;#a}xfM zz0tsqMBb`@ds47q2@l<8`ZB?0evlXG1^3WLJ!?gH?$Y^>(Uw$evQ4r^UdOwzkN4wJ zoqqQw|Jd!oGz)%}JlCD_O)m5!h%`jf+G|f5sY97^<)M!e;tJXcziK_(m@>D zTJ~-jPs&rP-fa0O#1AD&=}|@oW4($&e5Rd-ODxAl{}pz+T%)yUOQwh z%2)1{$O2`+Z!D3Gzf(p0TJ9caP@p!hyK{tJ*xL0);2VuD)tC4`=j@W(v(7ciE;K(< z=u`Q*tnL20zVWyzY~Q|jV0@)ByI4*;`xX|SNC&EL2zO)8c01x$wA@k&8TjYEpd*}KMRgJMA2NbF(8nIWzIG&fFn zoYdiDOF}SJ1j^EBaG8mF@wkfeb|c{|?`)#c^gTPwEzB1$$JrMH#QZlqCW+GqK(_Jd z!9UH9R(p;{bx#TQG*1q;3*xYd2RO7)TZ*11Uia?>f8%?d&c$trm2*W0l^z{s8CkK> zh@WN}OLoGu|Ajpd8e|kU??@FD$WbU&f7l#6re8iRA&Z0RC@Vd; zsvw+BRhCX*rx^7P8S59LO!St27p~3?Tb*;-^(23vB*)IpX4sIuP`lNkx@NPChsOfH z{$M*$r2-@OUZzQ1G)ZN~Xd5*989+~HeamdVK3BB zq{OR~k}#N`hFK^{d)-_r(j1>VaEFK(t zBMH6f3hoQVKwiO5&b;$M031K7~TgRjs2g%U*%PFb>_0n>`b!5vy0{BtL0wE5RX zPPMk^Z8%AUcHy4u-3p;s1x@5hWzM!o8z*(pS8sA5UY!HmSs1d#1PQJBP>J$XH@W;D za&*^Ie_bwdxyNP>Z@7B5lm--_1#;4aChnvR1!%w~ z?|f`ULU1Spgl*7|y^i1mAo{-bzLQD=%B`1sfsmZb=?=SOQcaA$?6OFU8 zFu|8x?~6wEm9F3KsxHlZ>D_hhe_)WWh{_P_+%6OlzPX;Rn|OANeb(}a+{07?zoQ#} z##->Mx`J|*{cPuZJZP|7zipIyAglIJA_1}2J)B5@k@IQI~*fn|7cX^Y4`Th|H`#ek?N4Xci$I=-58 zz2`Qslmu}TxislUs`pR zUoK3Ix(0S|I+vHfI3h2~&TsSIwjLs4pPf9^;RnlY5i%znPPuAM#XuXT0a8xpuW^^3xfO z{@8t{qN|yi6sEX#uXKr`_oIm%h?rIx85XTacG5%y#G5G#DG#)f9v&^Jh|EOt8x+{o z8FDd+B>ioAqYOX1J(8luq{#^M^b!&c$eYEPGjX<&$9LFMT`$ij(z%&a&w9~YtjKn@ zyM`+B1ccb;TuR~=!tfrQE;uL8x=AXtRblX@pwr+FHhJbU(q#y*pCb#Ol~M?xeP|gr z1UXm6Lq8~@(oHXY9Hz)8%R1e>8aNko%+SDwO#CrCosn@LzNB&xu{pX~4-$AwNfk0v z0fUjiiQ!uEs>X@%=BiF4$&lb%;@|eYN^T7)ERY{7k1uS({#)sy#(mC#I>ZRCZ_yq( z$jGs!O|n_;1Ua2xMlF~qq>pyG>HQ{Z56A``pM%)&!zM^PZGRg~Ly=dn?{)?FoUF-t zK74Q=^|6{?l9444(@`nzvs=th5O@-!gpRwFeS51uR?E(#$>{W{e7dXHC>sA}N1ZmX z_F$o!adB1SEP-v6pcbh@CTyFKL3fZ{C%m^>Mbqfi0lnVo zH`cB1Xo7610uKG?Dh=~$N=I=`0G5j@Y71q7(^9v^76H&Mt$T<=aSsX>jucZM}P#* z-`iG02cqExx1}*mWPZTz(El)1_N+6hlhj$z=-%Hz`c4}~bo+vWdW7i33Nmd)dwwkS z=CFsiZdey)D6(x%dWpraHD8K&d?%dMqrCMX*Qio?gWmZ*IZxU#;HCx+UnLn4NJb;u z?xaUFC`3a?EpKXZ{?^#;<>CatZjHCZ&RgKfRLnN7E{$J$BlxLqI2KTa9Rele4%YBz z1qn|oS{17!+pe|gC1#t!A15*xYRpD!f0rt#A-6PC6J$UZ{>oqPzk6|g8-s;k)D&pU zspVp7%!WFV_dCMgLlDX#gcdJmr@0xYm_<_ly(A}I3y-f%-~;@FWCYsjZyEPRjQJ0G z-`AOwhOSxX+=mjli}uiLB*SvHc6d7)7x z2VB5bG<`kiQWIB{#9T=B>T4|=%w%Fm6RB7PA#S%Awtfa53x}L1wS9IrKhg{FP^acqbE5FPHl_iek9f%n;<_+)R?a%hQ#U z_{Dds50(Bp@k@?J;F@11{S{8G0ix-Oo3F+yCceM5RhDbZY&mSXl*`gnwdaDfeYt zJFDyO75_Gw5Y&Q-x=7|cH&-i`BL?w?;}`;R;xNcAgLAWC3kB1_KgmIGjmBw_mdddG zykk=)NS+p|=x2XQ4i52*Hc(6(;lJ7`1QAd_Sf~O2=Qt%!(Y1gt3tj7*@7>tsWjagB zUtZoLNJ9@U4ww^_nD<)QI`gh|W)x+7%A?G;d7PRURGn*QB)wZ>edY>ikitB=tc3tCV$bPmo@$!l%NKuH4f3Zttt6 z%a}35>o@|elHHj`GeUTS?!Ym_8il1FI$Tk;vtpwE9vbzU?8l82DPci?C^maP3EI66 zb5P3CQ#yXE_;#J%QBP(UwzW!3`t@8&mA~=Ua<(xDYnb@uN$uBrNwy@UFyd?!LCD#z z&-w?AvZ(QTe~+$gNzw_SV9I}gpQ;#pkFHfwxpBJ2;pA5=3ZSMWzoAAV9fTj6^UWp7rM22cCKl)mG6_&uNx0i#0D)6XzMW{O7XbgDr z0%`P8$Jw&dtQn~=lwLKuPd99H_!=3ZjQbx`DFdp4FjN*y%J-Rn8N@DF6gM0&0>>QS zGr={WrC=1k5tz|4M8Y5Tk6DQ3kG=?fk-1t=q*L}^E5c?xuXG|yWd()^QuS7{M+@L*J^gMU5r7)Z-T>?an;yS_Vp`%K6bQ6B-B_2+gsk z>D&&i5y+Gjzw3sNTdZzo(1Ox{k63jd)z}?C=3; zI757Q-aQ1v_JIFoCy~a?dKH{x1X8aA-6wmd@?mBw5J)%4it@+PeobZTRF!fsE*PWl z+Cewxr9Xd0vJHh$$s;LJ1n?9(#8sSP&TmV&Nnm0)mJxY4l!O6?k?e=*mX{>eW)-{# z^h7EWL-F3onXamW+gSTO%4p3pzrpZQyP;y0)^c9b-4vOI%L&aiqke@Ztj`+CxrM>% zLL~<67KW&%Ob7!uwHg)bU7XWpo3g49v^2Ca#Wsgg(!TUQrM*0=GWJ(d!*x^wcV&4) zY#Kfdf1+F-j(_8|RYj`|p2&Uv5dd3AEpEJ^tRr=cu=f+8_PE=Dq+&D@2+bS%N3u$v zSVic~A1Z_17iC(|kY9{bBc7hDic1zA0fSl7f(}-nFH{0?$h%|Og z^bX(Ui|?t}o|FRd(sU#jFQ%V24SaQOUL3`O3%IOq9E@RFwmkZhr0N8p7XUfI$SkHu z{7B5JKG!{ry1;UR1#+lwitocTp}=qTGHQPj{wHfzlS!8LMiSXg&FEX|$`X}%OuOTL zf=A2&{g3TWj>Pqh4$Sur!hiHi#!YaC2WY#?2AN;aEC&}G^OJMUrAf95$D%Zk0|dah zD|*qgImT#gVn#Rr{jVj3Ls7g-BL^4AdoQ6dtwZx_)aSa+j_wS47iTu6{As#ur~5}y zWB3#4PXiTIsvIkDlG^Z{`)BDJ>-qL}wSRLDwH{e}9c=m}0{9hm9(`t>Y)&P6!pG6k zYS=_8gDM&WLo`ac7hx$I;FRP=eE93`IGoKn;0l#2%vl2+55h`RX7Dw_OG?~`Tw`npbkY{oKpt*^Gj_(;NRBMfI`x*!q0=96s2--5%-r-MIu{xljH&<9B7*-xEt+Ywxc+Pps4sg58D_~H6G+U1i|w?ZzfM4w(*TCPTJ01 zT1f6Nng&6_aKcdBwpR#K`69x^X7gtj2*pqy2tc#|Fdzt*i5dpA!Ul=om@b(ucBQXv zy{k0Z)d*>icMp{!@UC*j-Q$gr6o+IDK>{?R8_Af?R`(<~JQ8E2Fy(n?IFi90C_8~R zP!zO6^8K^`%;4&Pu0|6OOllsCP~eICmq#YanI%6Y{3pI4M-!7l1|MmnjDVQ z)Mr$w3bz^NxQCatVu{4)otZX=d&WAdB-u?yCu;6nAF?))dM%Jki=DQ5|L}7|ph9)e zGbo6uojsJmyX@T+SMK#RFW)LR(4F8!$g_T`E(~DKGY@Tiz#?6fH_0xi@_mH|V#7Yw z_tybgmNPp{Bmg%;qLhQv=)j{4fVFYo-TgXv75R=*0Y(7x-loESF|j{>CVp>01F;X(0H+VsVoBE6oRbfcm)ua0!e>w^1u%jNcc%Vo=PcjtMbEUJPb z!u^GE?7S|2P?aif^r9zv*O^$xbxlT-(sJ>ml(phFAI!K*SF0I3Tyty zk?l-*5mopwx`sf|(NfULF{Cz_{0$axZ){j^xl_}mziK;S{X*GTxS$=*E^HZZy(F*vm_!~G^IhS`&D=iKS|=Phs;mS1bD=Ai0$KPg*KreM zO?E{!TgUQO+dp8b3G`Q1Ke*<@kR}UB zWZj7gE$;APF!@zqGF~RJw^m?h^xaw>cE0G|Vq9s_tY)>1N)kH|w-iSJ#Uf+F-EAAY z3QF3`+Z%AT;(n4{{q{m+II`{uPoI_-k4Vvbc|&`AQo*uh1%AcZ&L}@OtIshT4uvnd zY()LM;i`R%E$3zCh0wXB9Q88_0h96!;uUEiGvk+%qPc%khz-ZALgzK)bS7%_tYk;s z@sx6=CX$uzKbuFD;@aUAo@hN@f3>Hq}vileG=f20xnmuIRh2Mb-yUm+RL__Gss= zw4wensXOkB(%YhuC{mjFyLiz9(60VclT|$21>>Ks(mxspzypyluU7f+`M7=n!!fH% zIDHM>G_E_i>#(RrAVvnS54GIsFmY-Nym`|s&8o>5CZ=#f+Y?!#5wR_Bh3^}wv6;{PBnE^S2f>PHkKP+MF|V7ygZnu_z`Pjg*KE1? z8YCl~1@Y^I#04JLwne{GZKlN#n!q*~r}8y^C=FGVK?=0OS$Md@R~@|O=lEQ_B}`x( z-rL0Uuhimj0AW$7&g^J4so|PO4gK?UR^SK&^UC1)Hv;a?wDGmP z(0Y=sIJXUpP5-SeelS)~Oq2{jNn%q^Z0-@eI@r4#FgakiO_N^jyYy==YoI7d5V#Vf zG-c4}{i;p9$ELwEvExw?6R*N#!Eaa_k@&lD@1tG9lB&os*XHAz++J!WcTo~%0Ki9$ zJ5(vVw?#rMJB&Nvcf+{YDk4VMTTkDva?1Zad_2Vvvhu=xAY&8WCPlotxbi7Kj-3z`plaX~3 zTSCnb0*;LOHY|SUjVvXH)x@7IZrE^~HZzYpXF&CKGkU0`DieBTrf2nqBy?@wuU37p zwT|h7bfb#pFL5|R+Z@1oNsMyxdqnkH=*l`_J)@sV1H35l;=%E1lhXD5w*Id2itxdM zX^oDtcEBC7y=5m5Cf~kO6$J8mY~xcMRokZ2rCWrEn0^RW)}NlTT$@}h_$*-xuv+S5b%XCjpz`ci$h@DS zmacVVO%mq|g$?&H>#^1f^RrzcpPzvf+Vp+t4LM8vpWcJ))|p94Sx`dPOoT_g+M#Ij zLOE*_n{@5S?hA#)$;Egq$>!(a8Ib5N3E2dh8`Ci?O%$@2vQd6xii>mWTdW7k()Y%R z-x(kOdP+7Z*-Y!j3Y=-cf+P?B$A(a~K1+jpZ>U~R-w0>%u2A*5*>X|se0WTD)18I1 z2oJ~uQL^OP@mUo$^EWC9r_b_l>}<-^y76F zpx%Cto~Cf}4Q)m>j<6a=)TZR-;Vppz)CuSBnLn-Ri<{!Bn2LBZ?9QKNeTmzE#27>V zg_-mn-LoQX#&|Aj;90CUEGQbOx(bt?Ms&j~3p1V|sczX-J#7A(Zg$AQU#1TAe&Wok zc=yHX6VG;;FsRSu8pq8vn_V2`k(1?#OTprcN?~^^QTpgw%a7jVRW*jYvk(*}sWY#K z_zlD;Edh$nZ2quAGg|%w?CWUc!o~?njjplko+}I$h0n{s0IhH(8RRS?3R!*cMFO?o zH+q_iKXGOe-Zb7wp2$zd?H5B%Sx=kLv<7{q7?PaWnO%tcP1} zDnDLf(<16H)_0l!`+b?}F2$HpE5XQd#>P>2l&_~I#eRHBhcni7gC<)kr3gb(Q4Wo| zxv4z4*%))XE3gy+-%$4zD_6^KIM{S^^KiM>ZgEsJrFC121IBGLG1wagF#VVRj zc3SpdN>I*$BHo2(+UV{Vi44R0sqtY%Zhv-u9P zqsgdIIu{CW6^QG`#wY`lW%!A-bOR*XS30aC)Y>W+ux&E3NX{nv9eiv=xchy>3>$_Q zeSo-alEuSF=0bP1Ftn$8npGZ1q2is;Xff$|gX3%u$j^=e=^ux|y_U3+Bzl#bHlU5j{46nhyERS&`qAN;Rl{yWIEuL29P@hRt|+M7oT1iq+89u zZK4mJ#uBM8Xz|^@Z-T{kGS_SZbg>6>I%II|r0lB3E|9iv&yt_30#3WVJ^?$C>3+8g zxrkZesz-wETl}m3%lkRl>Erx_`_-;>(U*7jqc{J^;?ckA6ixDtFcZx1F_&1b_hj^x zq$d70m`}~3LjrC~e2u>946%M8>nS$|uv=bNrJ-b%nfpT@BfCwK_DMy3Q-|=#yo8ej zLMT*tqyqx)uy~HL*Y?!8E59<>ipiI9W9tiFF z;|AB)IrQ=6Ja~EBj*oTIEU?Rm+f9i|1MqdzrRv2=#rVRzVo8R*V{?{z+yCsfi2&Vq zr^75>y)m5(ors+xjLSU-S;1_&*5uJP7n8QYqb=E)5_O|P6+1d|#_C$XZ34Fw#*V$W zzBjLXIPrD==?R%e*3R&GHxfW3Ex<{&qiyiWD=%gM9p9hpjcUj{F{cs?o(v?x4q7I1 zJ00(D7dATBk)ZxbEG6c~IaA6TySuCSr~Y(B+A-KH&7-o|Ypp7GzSE7gaz8`>*f_MA z(P6#V`^$&Vx#zG8-Z{qpm|KNntHs!WbmmxLL*SYU9iP<5%pl+muP=h_oxA1Jy>lKD z!=)5uXN8}cFuxKM385AVaeQb*a?fxNhEPc$#VTv@HxLhNF%EJAXQ1g?po}F&d0T%h?SegTsw=|jdRC8$*W2%;M{i0> za{Qm}R(PH}Jitwc=HWLxFOp?Lx2s!Hy~qs!rlbpC%=QMF593~+qN?cP!bxfYQQjO){7+q|DevvoC^H$xmH|1$OST{CpNXnCjwiCIvX9V(DQ)i3TGlDitQ}2hD7Guhh}is@IR_8U01u@J->= zp-oq4MmcB!38x~^%?+=*D<3mT(Uya|bzd(_MXloKdY|e11naBYLo;ZBhP3Igx!*QX z)u-s(hw5?S9xfDD_uDW4sy7}Y=x-eZ#)QKjxuG2wAn!M|s}et(%;eRo={ z)wtQ?3D$g?{H8Te02Y|1gqsXfw0HUyF6#M(XMsR#t&fTZxGsXw2A}Pd-w()Iw7OOi zIm{GnS^>32fxq{*{=3$MQ!L7E|9ANbr`w)USnAV-MEMC`zZm&%rn&YQ!C0xKzSO9G+^)JnI!ZyDBck=0Y>#eO(<$-sa>36fkS?3M4=G z`)g?B4D$TM(W<9;7l>Fs{Z!92Og}i|PLtzG5Big?4~3nTKxDG}#0naqq@s~m1JjH# z!<&rdJ?z4~E&7d9OYMH24B#GY6p7rfdy>N@*^^Zakmc|v&=pr~GDz6kT>KR_{O4Qlp-E52L% zYKk4}=FPq?60G77nGk1LXa+UkH_(x$S;sL`E5!i<^{{D(i-938OHW)Gk2%dT0Y4(s zco4XuR?o&^io-o3f2pp1t{@3@b(Dt!TUyuOl(m ze|=<6;g{*m<#!*tUn`|KM&W5T^{l_>I{17Df6480ek;g2X?!(XiaS@$y~Y z%D#h=oUn<)FCV0x(G=7mQK}YEC-Lnsx3|k7t(qO;srTs}@3+MIzQvd$@Ok?(JJOfb zxi4o~K{Z(0gNP#F_rFmzQd5)l>_}J>eV93d8AWrFplRupp#K`^vhPhzz(D)RiLgmB z>Z;|V>-XOtq|*Cd%m2?97z9Zsc;LOjn^lM^D-b=8u2-_}c|#y;uP8+`A-Nr@!ZxC8 z>cQ)=L6A-fBwN6N=F}UW;E9ANiiB_nLg*~7x;?B1H%viiL)`;j6f)%$DrJyy%1eaG zTJ9o{lkL@7|Hk-NmJ6jvgos?jjKUd`ON{}vq|(Z6etQ96O=Ato_gkRUAkH0 z_((8=AXKmoXy&u!SRhG6Q%5U7h*7$fgr>E;NmM&V@C$&ny<;8ozUs7wC=Iaq1PL_< z@5dZ6r25%Ku)RAfGu@2n2(He6+X}CNEoSd(X!*V-tk}fdG9c5W?-ER%A`~ya2mwXXlz1;y%2~$-ZC#6nJpSsFY!q zO|GN(A}zbxu`MFJ3d{vHT4UCFD(cjssJ>KC!_tI5NG<4$$5k>*ojE|d*--kv8N>)| zk$fb|`%31Zwj;w7fv{53P0bY$8j!6A*U|G6+7pysOG4u-m*BIcpb`ru8qyjF3CNV} z7R}5sQSOQ~)(R*?*dj0Hy@>HyJK@CKPK2hCWM&>c<$tn}kueDd^D0TlL)OT?a!i?I zID&Q-mheqeJh)=tJduzOb)J|~P;NKH*XTzl)GJ)`0i_UgjtMOP1iR>Gd<$j@Y1%)+ zr%FO3FR$hNnagk(|?;3gj|QRDqPb_W{IjlHAYZrqPqpu_=Q$v7pCQ8B^Rf-fM#x4Q19_7 z7R7K9QU<0>jFKFl$U;P|NDU?{;q{x9XfE3(Vs*-ASC+2}9sCstWamzO%qJbRn8erODtB#giYyH;; z(mkKoX%_`KCz0>$PfShF$TfWx)Z}U|wisTCcwm-HZU;gp5^&@`bWNB5N$7v0C@4X6 zLZXa|9;|sofP+k a>DCnxKDc;Y34YfSMoLUhv`ply-~R#S`z}xb literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter7.ipynb b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter7.ipynb new file mode 100644 index 000000000..9e76e2f6b --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter7.ipynb @@ -0,0 +1,1431 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Non-inertial Frames, Translation and Rotating Coordinate Systems\n", + "\n", + "\n", + "Let us quickly remind ourselves about the definition of a so-called **inertial frame of reference**.\n", + "An inertial frame of reference in classical physics (and in special\n", + "relativity as well) possesses the property that in this frame of reference a\n", + "body with zero net force acting upon it does not accelerate; that is,\n", + "such a body is at rest or moving at a constant velocity. If we recall the definition of Newton's first law, this is essentially its description.\n", + "\n", + "An\n", + "inertial frame of reference can be defined in analytical terms as a\n", + "frame of reference that describes time and space homogeneously,\n", + "isotropically, and in a time-independent manner.\n", + "\n", + "Conceptually, the\n", + "physics of a system in an inertial frame has no causes external to\n", + "the system. An inertial frame of reference may also be called an\n", + "inertial reference frame, inertial frame, Galilean reference frame, or\n", + "inertial space. \n", + "\n", + "All inertial frames are in a state of constant, rectilinear motion\n", + "with respect to one another; an accelerometer moving with any of them\n", + "would detect zero acceleration. Measurements in one inertial frame can\n", + "be converted to measurements in another by a simple transformation\n", + "(the Galilean transformation in Newtonian physics and the Lorentz\n", + "transformation in special relativity).\n", + "In general relativity, in any\n", + "region small enough for the curvature of spacetime and tidal forces\n", + "to be negligible, one can find a set of inertial frames that\n", + "approximately describe that region.\n", + "\n", + "In a non-inertial reference frame in classical physics and special\n", + "relativity, the physics of a system vary depending on the acceleration\n", + "of that frame with respect to an inertial frame, and the usual\n", + "physical forces must be supplemented by fictitious forces. In\n", + "contrast, systems in general relativity don't have external causes,\n", + "because of the principle of geodesic motion.\n", + "\n", + "In classical physics, for example, a ball dropped towards the ground\n", + "does not go exactly straight down because the Earth is rotating, which\n", + "means the frame of reference of an observer on Earth is not\n", + "inertial. The physics must account for the Coriolis effect—in this\n", + "case thought of as a force—to predict the horizontal motion. Another\n", + "example of such a fictitious force associated with rotating reference\n", + "frames is the centrifugal effect, or centrifugal force. We will here,\n", + "in addition to the abovementioned example of the Coriolis effect study\n", + "a classic case in classical mechanics, namely Focoault's pendulum.\n", + "\n", + "\n", + "## Galilean Transformations\n", + "\n", + "In many of the examples studied till now we have restricted our\n", + "attention to the motion of a particle (or a system of particles) as\n", + "seen from an inertial frame of reference. An inertial reference frame\n", + "moves at constant velocity with respect to other reference frames. We\n", + "can formalize this relationship as a coordinate transformation (known\n", + "as a Galilean transformation) between say two given frames, one\n", + "labeled $S_0$ and the other one labeled $S$. In our discussions here we will refer to the frame $S_0$ as the reference frame. \n", + "\n", + "We could consider for example an object in a car, where the car moves with a\n", + "constant velocity with respect to the system $S_0$. We then throw this\n", + "object up in the air and study it's motion with respect to the two chosen frames.\n", + "We denote the position of this object in the\n", + "car relative to the car's frame as $\\boldsymbol{r}_S(t)$. We have included an explicit \n", + "time dependence here. The position of the car relative to the\n", + "reference frame $S_0$ is $\\boldsymbol{R}(t)$ and the position of the object in\n", + "the car relative to $S_0$ is $\\boldsymbol{r}_{S_0}(t)$.\n", + "\n", + "The following relations between the positions\n", + "link the various variables that describe the object in the two frames" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{r}_{S_0}(t) = \\boldsymbol{r}_{S}(t) + \\boldsymbol{R}(t).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will stay with Newtonian mechanics, meaning that we do not consider\n", + "relatistic effects. This means also that the time we measure in $S_0$\n", + "is the same as the time we measure in $S$. This approximation is\n", + "reasonable as long as the two frames do not move very fast relative to\n", + "each other. \n", + "\n", + "We can then compute the time derivatives and obtain the corresponding velocities" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{r}}_{S_0}(t) = \\boldsymbol{v}_{S_0}=\\dot{\\boldsymbol{r}}_{S} + \\dot{\\boldsymbol{R}},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{v}_{S_0}=\\boldsymbol{v}_{S} + \\boldsymbol{u},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $\\boldsymbol{u}=\\dot{\\boldsymbol{R}}$. \n", + "\n", + "If our system $S$ moves at constant velocity, we have that the\n", + "accelerations in the two systems equal each other since\n", + "$\\ddot{\\boldsymbol{R}}=0$ and we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a}_{S_0}=\\boldsymbol{a}_{S}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above equations are examples of what we call a homogeneous\n", + "Galilean transformation. In an inertial frame, an object moves with\n", + "constant velocity (i.e., has zero acceleration) if there are no forces\n", + "acting on it. When we are not in an inertial frame, there will be\n", + "spurious (or fictitious) accelerations arising from the acceleration\n", + "of the reference frame. These effects can be seen in simple every-day\n", + "situations such as sitting in a vehicle that is accelerating or\n", + "rounding a corner. Or think of yourself sitting in a seat of an\n", + "aircraft that accelerates rapidly during takeoff. You feel a force\n", + "which pushes you back in the seat. Similarly, if you stand in a bus\n", + "which suddenly brakes (negative acceleration), you feel a force which\n", + "may make you fall forward unless you hold yourself. In these\n", + "situations, loose objects will appear to accelerate relative to the\n", + "observer or vehicle.\n", + "\n", + "\n", + "Our next step is thus to study an accelerating frame. Thereafter we\n", + "will study reference frames that are rotating. This will introduce\n", + "forces like the Coriolis force and the well-known centrifugal\n", + "force. We will use these to study again an object which falls towards\n", + "the Earth (the Earth rotates around its axis). This will lead to a\n", + "correction to the object's acceleration twoards the Earth.\n", + "\n", + "Finally, we bring together acceleration and rotation and end the\n", + "discussion here with a classic in classical mechanics, namely\n", + "Focault's pendulum.\n", + "\n", + "\n", + "## Accelerating Frames (No Rotation)\n", + "\n", + "We consider first the effect of uniformly accelerating reference\n", + "frames. We will hereafter label this frame with a subscript\n", + "$S$. Assume now that this reference systems accelerates with an\n", + "acceleration $\\boldsymbol{a}_{S_0}$ relative to an inertial reference frame,\n", + "which we will label with a subscript $S_0$. The accelerating frame\n", + "has a velocity $\\boldsymbol{v}_{S_0}$ with respect to the inertial frame.\n", + "\n", + "The figure here\n", + "\n", + "\n", + "\n", + "

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "shows the relation between the two\n", + "frames. The position of an object in frame $S$ relative to $S_0$ is\n", + "labeled as $\\boldsymbol{r}_{S_0}$. Seen from this inertial frame, an object in\n", + "the accelerating frame obeys Newton's second law" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "m\\frac{d^2\\boldsymbol{r}_{S_0}}{dt^2}=\\boldsymbol{F}.\n", + "\\label{_auto1} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here $\\boldsymbol{F}$ is the net force on an object in the accelerating frame\n", + "seen from the inertial frame.\n", + "\n", + "If we on the other hand wish to study the motion of this object (say a\n", + "ball in an accelerating car) relative to the accelerating frame, we\n", + "need to define its position relative to this frame. We label this\n", + "position as $\\boldsymbol{r}_{S}$.\n", + "\n", + "Using the definition of velocity as the time derivative of position\n", + "and the standard vector addition of velocities, we can define the\n", + "velocity relative to $S_0$ as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{r}}_{S_0}=\\dot{\\boldsymbol{r}}_{S}+\\boldsymbol{v}_{S_0}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The left hand side in the last equation defines the object's velocity\n", + "relative to the inertial frame. The right hand side says this is the\n", + "object's velocity relative to the accelerating frame plus the velocity\n", + "of the accelerating frame with respect to the inertial frame. If we\n", + "now take the second derivative of the above equation,\n", + "we have the corresponding accelerations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\ddot{\\boldsymbol{r}}_{S_0}=\\ddot{\\boldsymbol{r}}_{S}+\\boldsymbol{a}_{S_0}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Multiplying with the mass of a given object, we can rewrite Newton's\n", + "law in the accelerating frame as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\ddot{\\boldsymbol{r}}_{S}=\\boldsymbol{F}-\\boldsymbol{a}_{S_0}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that we have again Newton's second law except that we added a\n", + "correction which defines an effective acceleration compared to the\n", + "equation seen in the inertial frame. We can thus continue to use\n", + "Newton's law in the accelerating frame provided we correct the\n", + "equation of motion with what is often called a fictitious force. This\n", + "often also called an inertial force or an effective force.\n", + "\n", + "**Add example about pendulum in train car**\n", + "\n", + "## Rotating Frames\n", + "\n", + "\n", + "If you are on Earth's surface and if your reference frame is fixed\n", + "with the surface, this is an example of an accelerating frame, where\n", + "the acceleration, as we will show below, is $\\Omega^2 r$, where\n", + "$r\\equiv\\sqrt{x^2+y^2}$, and $\\Omega$ is the angular velocity\n", + "of Earth's rotation. The acceleration is inward toward the axis of\n", + "rotation, so the additional contribution to the apparent acceleration\n", + "of gravity is outward in the $x-y$ plane. In contrast the usual\n", + "acceleration $\\boldsymbol{g}$ is radially inward pointing toward the origin.\n", + "\n", + "We will now deal with motion in a rotating frame and relate this to an\n", + "inertial frame. The outcome of our derivations will be effective\n", + "forces (or inertial forces) like the abovementioned acceleration (from\n", + "the centrifugal force) and the Coriolis force term.\n", + "\n", + "For a reference frame that rotates with respect to an inertial frame,\n", + "**Euler's theorem** is central here. It states that the most general\n", + "displacement (motion) of a rigid body with a one point fixed (we\n", + "normally approximate a rigid body with a mass center) is a rotation\n", + "about some fixed axis. In different words, the most general motion of\n", + "any body relative to a fixed point $O$ is a rotation abotu some axis\n", + "through the same point $O$. This means that for a specific rotation\n", + "about a given point $O$ we only to specify the direction of the axis\n", + "about which the rotation occurs with the corresponding angle of\n", + "rotation. As we will see below, the direction of the angle of rotation\n", + "can be specified by a unit vector $\\boldsymbol{e}$ in the rotating frame and\n", + "the rate of rotation per unit time. The latter defines the angular\n", + "velocity $\\Omega$. We will define these quantities more rigorously below.\n", + "At the end of this section we will also prove Euler's theorem.\n", + "\n", + "What we will show here is that Newton's laws for an object in the rotating frame is given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\ddot{\\boldsymbol{r}}_{S}=\\boldsymbol{F}+m\\boldsymbol{r}\\times\\dot{\\boldsymbol{\\Omega}}+2m\\boldsymbol{v}_S\\times\\boldsymbol{\\Omega}+m\\left(\\boldsymbol{\\Omega}\\times\\boldsymbol{r}\\right)\\times\\boldsymbol{\\Omega}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first term to the right is the force we defined in the inertial\n", + "system, that is $m\\ddot{\\boldsymbol{r}}_{S_0}=\\boldsymbol{F}$. The second term is the\n", + "angular acceleration of the rotating reference frame, a quantity which\n", + "in many cases is set to zero since we assume that the angular velocity\n", + "is constant as function of time. The third terms is the Coriolis force, that\n", + "is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Coriolis}}=2m\\boldsymbol{v}_S\\times\\boldsymbol{\\Omega},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "while the last term is going to give us the standard centrifugal force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Centrifugal}}=m\\left(\\boldsymbol{\\Omega}\\times\\boldsymbol{r}\\right)\\times\\boldsymbol{\\Omega}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us derive these terms, following much of the same procedure as we\n", + "did for an accelerating reference frame. The figure here (to come)\n", + "shows the two reference systems $S$ and $S_0$.\n", + "\n", + "\n", + "We define a general vector $\\boldsymbol{A}$. It could represent the position,\n", + "a given force, the velocity and other quantities of interest for\n", + "studies of the equations of motion.\n", + "\n", + "We let this vector to be defined by three orthogonal (we assume motion\n", + "in three dimensions) unit vectors $\\boldsymbol{e}_i$, that is we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{A}=A_1\\boldsymbol{e}_1+A_2\\boldsymbol{e}_2+A_3\\boldsymbol{e}_3=\\sum_iA_i\\boldsymbol{e}_i.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These unit vectors are fixed in the rotating frame, that is their time\n", + "derivatives are zero. However, for an observer in the inertial frame\n", + "$S_0$, however these unit vectors are rotating and may thus have an\n", + "explicit time dependence.\n", + "\n", + "Since we want to find an expression for the equations of motion in the\n", + "inertial frame and the rotating frame, we need expressions for the\n", + "time derivative of a vector $\\boldsymbol{A}$ in these two frames. Since the\n", + "unit vectors are assumed to be fixed in $S$, we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{A}}_S=\\sum_i\\frac{dA_i}{dt}\\boldsymbol{e}_i=\\sum_i\\dot{dA_i}\\boldsymbol{e}_i.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the inertial frame $S_0$ we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{A}}_{S_0}=\\sum_i\\dot{dA_i}\\boldsymbol{e}_i+\\sum_i A_i\\left(\\dot{\\boldsymbol{e}}_i\\right)_{S_0}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will show below that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\left(\\dot{\\boldsymbol{e}}_i\\right)_{S_0}=\\Omega\\times\\boldsymbol{e}_i,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\Omega$ is the angular velocity (to be derived below). This\n", + "means we can write the derivative of an arbitrary vector $\\boldsymbol{A}$ in\n", + "the inertial frame $S_0$ as (the vector is defined in the rotating\n", + "frame)," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{A}}_{S_0}=\\sum_i\\dot{dA_i}\\boldsymbol{e}_i+\\sum_i A_i\\left(\\dot{\\boldsymbol{e}}_i\\right)_{S_0}=\\dot{\\boldsymbol{A}}_S+\\sum_i A_i(\\Omega\\times\\boldsymbol{e}_i)=\\dot{\\boldsymbol{A}}_S+\\boldsymbol{\\Omega}\\times\\boldsymbol{A}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a very useful relation which relates the derivative of any\n", + "vector $\\boldsymbol{A}$ measured in the inertial frame $S_0$ to the\n", + "correspoding derivative in a rotating frame $S$.\n", + "\n", + "If we now let $\\boldsymbol{A}$ be the position and the velocity vectors, we\n", + "can derive the equations of motion in the rotating frame in terms of\n", + "the same equations of motion in the inertial frame $S_0$.\n", + "\n", + "Let us start with the position $\\boldsymbol{r}$. \n", + "\n", + "We have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{r}}_{S_0}=\\dot{\\boldsymbol{r}}_S+\\boldsymbol{\\Omega}\\times\\boldsymbol{r}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we define the velocities in the two frames as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{v}_{S_0}=\\dot{\\boldsymbol{r}}_{S_0},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{v}_{S}=\\dot{\\boldsymbol{r}}_{S},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we have then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{r}}_{S_0}=\\boldsymbol{v}_{S_0}=\\boldsymbol{v}_{S}+\\boldsymbol{\\Omega}\\times\\boldsymbol{r}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to find the equations of motion, we need the acceleration and\n", + "thereby the time derivative of the last equation. The derivative of\n", + "the angular velocity $\\Omega$ will turn in handy in these derivations\n", + "(repeated applications of the chain rule again).\n", + "The latter derivative is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{\\Omega}}_{S_0}=\\dot{\\boldsymbol{\\Omega}}_S+\\boldsymbol{\\Omega}\\times\\boldsymbol{\\Omega},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which leads to (an expected result, why?)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\dot{\\boldsymbol{\\Omega}}_{S_0}=\\dot{\\boldsymbol{\\Omega}}_S,\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "since $\\boldsymbol{\\Omega}\\times\\boldsymbol{\\Omega}=0$. \n", + "\n", + "Let us now take the second derivative with respect to time.\n", + "\n", + "Using" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\left[\\frac{d^2\\boldsymbol{r}}{dt^2}\\right]_{S_0}=\\ddot{\\boldsymbol{r}}_{S_0}=\\left[\\frac{d}{dt}\\right]_{S_0}\\left[\\frac{d\\boldsymbol{r}}{dt}\\right]_{S_0},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\ddot{\\boldsymbol{r}}_{S_0}=\\left[\\frac{d}{dt}\\right]_{S_0}\\left[\\boldsymbol{v}_{S}+\\boldsymbol{\\Omega}\\times\\boldsymbol{r}\\right]=\\left[\\frac{d}{dt}\\right]_{S_0}\\boldsymbol{v}_{S_0},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\ddot{\\boldsymbol{r}}_{S_0}=\\left[\\frac{d\\boldsymbol{v}_S}{dt}\\right]_{S}+\\dot{\\boldsymbol{\\Omega}}\\times \\boldsymbol{r}+2\\boldsymbol{\\Omega}\\times\\boldsymbol{v}_S+\\boldsymbol{\\Omega}\\times(\\boldsymbol{\\Omega}\\times\\boldsymbol{r}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Defining the accelerations $\\boldsymbol{a}_{S_0}=\\ddot{\\boldsymbol{r}}_{S_0}=\\dot{\\boldsymbol{v}}_{S_0}$ and $\\boldsymbol{a}_{S}=\\dot{\\boldsymbol{v}}_{S}$, we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{a}_{S_0}=\\boldsymbol{a}_{S}+\\dot{\\boldsymbol{\\Omega}}\\times \\boldsymbol{r}+2\\boldsymbol{\\Omega}\\times\\boldsymbol{v}_S+\\boldsymbol{\\Omega}\\times(\\boldsymbol{\\Omega}\\times\\boldsymbol{r}).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we now use Newton's law in the inertial frame $\\boldsymbol{F}=m\\boldsymbol{a}_{S_0}$, we get the effective force in the rotating frame (multiplying by the mass $m$)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\boldsymbol{a}_{S}=\\boldsymbol{F}+m\\dot{\\boldsymbol{r}\\times\\boldsymbol{\\Omega}}+2m\\boldsymbol{v}_S\\times\\boldsymbol{\\Omega}+m(\\boldsymbol{\\Omega}\\times\\boldsymbol{r})\\times\\boldsymbol{\\Omega},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which is what we wanted to demostrate. We have the Coriolis force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Coriolis}}=2m\\boldsymbol{v}_S\\times\\boldsymbol{\\Omega},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "while the last term is the standard centrifugal force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Centrifugal}}=m\\left(\\boldsymbol{\\Omega}\\times\\boldsymbol{r}\\right)\\times\\boldsymbol{\\Omega}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In our discussions below we will assume that the angular acceleration of the rotating frame is zero and focus only on the Coriolis force and the centrifugal force.\n", + "\n", + "\n", + "\n", + "### Effective potential and Centrifugal force\n", + "\n", + "Suppose we can ignore the Coriolis force. If we focus only on the\n", + "centrifugal force we have an additional force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Centrifugal}}=m\\left(\\boldsymbol{\\Omega}\\times\\boldsymbol{r}\\right)\\times\\boldsymbol{\\Omega},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the term $\\boldsymbol{\\Omega}\\times\\boldsymbol{r}$ is the radial velocity.\n", + "\n", + "Consider now an object with position $\\boldsymbol{r}$ according to an observer in a frame\n", + "rotating about the $z$ axis with angular velocity\n", + "$\\boldsymbol{\\Omega}=\\Omega\\hat{z}$. To an observer in the inertial frame\n", + "the vector will change even if the vector appears\n", + "fixed to the rotating observer.\n", + "\n", + "\n", + "If $\\boldsymbol{\\Omega}$ is in the $z$ direction,\n", + "the centrifugal force becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\boldsymbol{F}_{\\mathrm{Centrifugal}}=m\\Omega^2(x\\hat{x}+y\\hat{y}).\n", + "\\label{_auto2} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The centrifugal force points outward in the $x-y$ plane, and its\n", + "magnitude is $m\\Omega^2r$, where\n", + "$r=\\sqrt{x^2+y^2}$.\n", + "\n", + "Continuing along these lines, \n", + "if we define a rotating frame which makes an angle $\\theta$ with the inertial frame and define the distance to an object in this frame from the origin as $\\boldsymbol{r}$, then the centrifugal force (which points outward) has as magnitude $\\Omega^2r\\sin{\\theta}$. Defining $\\rho=r\\sin{\\theta}$ and the unit vector $\\hat{\\boldsymbol{\\rho}}$ (see figure here)\n", + "\n", + "\n", + "\n", + "

    \n", + "\n", + "\n", + "\n", + "\n", + "we have the well-known expression for the centrifugal force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Centrifugal}}=m\\Omega^2\\rho\\hat{\\boldsymbol{\\rho}},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and with the velocity given by its magnitude $v=\\Omega\\rho$ we obtain the well-known expression for the centrifugal force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Centrifugal}}=m\\frac{v^2}{\\rho}{\\boldsymbol{\\rho}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we now go back again to our falling object discussed in the\n", + "beginning of these lectures, we need to modify for the fact that the Earth\n", + "is rotating with respect to the falling object.\n", + "\n", + "Seen from a rotating coordinate system we have now that the forces acting on the falling object are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\ddot{\\boldsymbol{r}}=\\boldsymbol{F}_{\\mathrm{gravity}}+\\boldsymbol{F}_{\\mathrm{Centrifugal}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we define the mass of Earth as $M$ and its radius as $R$ and assuming that the object is close to the Earth, the gravitational force takes then well-known expression" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{gravity}}=-\\frac{GMm}{R^2}\\hat{\\boldsymbol{r}}=m\\boldsymbol{g}_0.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inserting the expression for the centrifugal force, we can then define an effective force" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{eff}}=\\boldsymbol{F}_{\\mathrm{gravity}}+\\boldsymbol{F}_{\\mathrm{Centrifugal}}=m\\boldsymbol{g}_0-m\\Omega^2R\\sin{(\\theta)}\\hat{\\boldsymbol{\\rho}},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and with" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{g}_{\\mathrm{eff}}=\\boldsymbol{g}_0-\\Omega^2R\\sin{(\\theta)}\\hat{\\boldsymbol{\\rho}},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{eff}}=m\\boldsymbol{g}_{\\mathrm{eff}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the rotating coordinate system (not an inertial frame), motion is\n", + "thus determined by an apparent force and one can define effective\n", + "potentials. In addition to the normal gravitational potential energy,\n", + "there is a contribution to the effective potential," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\delta V_{\\rm eff}(r)=-\\frac{m}{2}\\Omega^2r^2=-\\frac{m}{2}r^2\\Omega^2\\sin^2\\theta,\n", + "\\label{_auto3} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\theta$ is the polar angle, measured from say the north\n", + "pole. If the true gravitational force can be considered as originating\n", + "from a point in Earth's center, the net effective potential for a mass\n", + "$m$ near Earth's surface could be (a distance $h$)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "V_{\\rm eff}=mgh-m\\frac{1}{2}\\Omega^2(R+h)^2\\sin^2\\theta.\n", + "\\label{_auto4} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As an example, let us ask ourselves how much wider is Earth at the\n", + "equator than the north-south distance between the poles assuming that\n", + "the gravitational field above the surface can be approximated by that\n", + "of a point mass at Earth's center.\n", + "\n", + "\n", + "The surface of the ocean must be at constant effective potential for a\n", + "sample mass $m$. This means that if $h$ now refers to the height of\n", + "the water" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m g[h(\\theta=\\pi/2)-h(\\theta=0)]=\\frac{m}{2}\\Omega^2(R+h)^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because $R>>h$, one can approximate $R+h\\rightarrow R$ on the right-hand side, thus" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "h(\\theta=\\pi)-h(\\theta=0)=\\frac{\\Omega^2R^2}{2g}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This come out a bit less than 11 km, or a difference of near 22 km for\n", + "the diameter of the Earth in the equatorial plane compared to a\n", + "diameter between the poles. In reality, the difference is\n", + "approximately 41 km. The discrepancy comes from the assumption that\n", + "the true gravitational force can be treated as if it came from a point\n", + "at Earth's center. This would be true if the distribution of mass was\n", + "radially symmetric. However, Earth's center is molten and the rotation\n", + "distorts the mass distribution. Remarkably this effect nearly doubles\n", + "the elliptic distortion of Earth's shape. Due to this distortion, the\n", + "top of Mount Everest is not the furthest point from the center of the\n", + "Earth. That belongs to the top of a volcano, Chimborazo, in Equador,\n", + "which is one degree in latitude below the Equator. Chimborazo is about\n", + "8500 ft lower than Everest when measured relative to sea level, but is\n", + "7700 feet further from the center of the Earth.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Coriolis Force and Falling Objects\n", + "\n", + "The Coriolis force is given by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{F}_{\\mathrm{Coriolis}}=2m\\boldsymbol{v}_S\\times\\boldsymbol{\\Omega},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It does not enter problems like the shape of the Earth\n", + "above because in that case the water was not moving relative to the\n", + "rotating frame. \n", + "\n", + "The Coriolis force is non-zero only if $\\boldsymbol{v}_S\\ne 0$ and is directed\n", + "perpendicular to both $\\boldsymbol{v}_S$ and $\\Omega$. Viewed along the\n", + "direction of $\\boldsymbol{v}_S$, the Coriolis force associated with\n", + "counter-clockwise rotational motion produces a deflection to the\n", + "right. For clockwise rotational motion, it produces a deflection to\n", + "the left.\n", + "\n", + "The Coriolis force associated with Earth’s rotational motion is\n", + "responsible for the circulating or cyclonic weather patterns\n", + "associated with hurricanes and cyclones, as illustrated in the figure\n", + "here. Basically, a pressure gradient gives rise to air currents that\n", + "tend to flow from high pressure to low pressure regions. But as the\n", + "air flows toward the low pressure region, the Coriolis force deflects\n", + "the air currents away from their straight line paths. Since the\n", + "projection of $\\Omega$ perpendicular to the local tangent plane\n", + "changes sign as one crosses the equator, the direction of the cyclonic\n", + "motion (either counter-clockwise or clockwise) is different in the\n", + "Northern and Southern hemispheres.\n", + "\n", + "\n", + "\n", + "

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "As an example, assume a ball is dropped from a height $h=500$m above Minneapolis. Due to the\n", + "Coriolis force, it is deflected by an amount $\\delta x$ and $\\delta\n", + "y$. We want to find the deflection due to the Coriolis force. Here we ignore the centrifugal terms.\n", + "\n", + "The equations of motion are:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\frac{dv_x}{dt}&=&-2(\\Omega_yv_z-\\Omega_zv_y),\\\\\n", + "\\frac{dv_y}{dt}&=&-2(\\Omega_zv_x-\\Omega_xv_z),\\\\\n", + "\\frac{dv_z}{dt}&=&-g-2(\\Omega_xv_y-\\Omega_yv_x),\\\\\n", + "\\Omega_z&=&\\Omega\\cos\\theta,~~~\\Omega_y=\\Omega\\sin\\theta,~~~\\Omega_x=0.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here the coordinate system is $\\hat{x}$ and points east, $\\hat{y}$ points\n", + "north and $\\hat{z}$ points upward.\n", + "\n", + "One can now ignore all the Coriolis terms on the right-hand sides\n", + "except for those with $v_z$. The other terms will all be doubly\n", + "small. One can also throw out terms with $\\Omega_x$. This gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\frac{dv_x}{dt}&\\approx& -2\\Omega v_z\\sin\\theta,\\\\\n", + "\\frac{dv_y}{dt}&\\approx& 0,\\\\\n", + "\\frac{dv_z}{dt}&\\approx& -g.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There will be no significant deflection in the $y$ direction, $\\delta\n", + "y=0$, but in the $x$ direction one can substitute $v_z=-gt$ above," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "v_x&\\approx&\\int_0^t dt'~2\\Omega gt'\\sin\\theta=\\Omega gt^2\\sin\\theta,\\\\\n", + "\\delta x&\\approx& \\int_0^t dt'~v_x(t')=\\frac{g\\Omega\\sin\\theta t^3}{3}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One can find the deflections by using $h=\\frac{1}{2}gt^2$, to find the\n", + "time, and using the all-knowing internet to see that the latitude of\n", + "Minneapolis is $44.6^\\circ$ or $\\theta=45.4^\\circ$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "t&=&\\sqrt{2h/g}=10.1~{\\rm s},\\\\\n", + "\\Omega&=&\\frac{2\\pi}{3600\\cdot 24~{\\rm s}}=7.27\\times 10^{-5}~{\\rm s}^{-1},\\\\\n", + "\\delta x&=&17.4~{\\rm cm}~~{\\rm(east)}.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Accelerating and Rotating Frames\n", + "\n", + "It is now simple to bring together the equations for an accelerating and rotating frame. Using our results we have the equations of motion for an object in an accelerating and rotating frame with respect to an inertial frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "m\\ddot{\\boldsymbol{r}}_{S}=\\boldsymbol{F}+m\\boldsymbol{r}\\times\\dot{\\boldsymbol{\\Omega}}+2m\\boldsymbol{v}_S\\times\\boldsymbol{\\Omega}+m\\left(\\boldsymbol{\\Omega}\\times\\boldsymbol{r}\\right)\\times\\boldsymbol{\\Omega}-\\boldsymbol{a}_{S_0},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the last term is the acceleration of the accelerating frame seen from the inertial frame.\n", + "\n", + "\n", + "## The Foucault Pendulum\n", + "\n", + "\n", + "\n", + "The [Foucault\n", + "Pendulum](https://en.wikipedia.org/wiki/Foucault_pendulum) is simply\n", + "a regular pendulum moving in both horizontal directions, and with the\n", + "Coriolis force included. It is explained at its simplest if we\n", + "consider a pendulum positioned at the North pole. Foucault's\n", + "experiment was actually the first laboratory demonstration that the\n", + "Earth is rotating. The experiment is rather simple and many physics\n", + "department worldwide have their own pendulum.\n", + "\n", + "In the original experiment done in Paris in 1851, Foucault used a\n", + "massive pendulum of 28kg and 67m long.\n", + "\n", + "If use an inertial frame with the North pole as its origin, the Earth\n", + "below the pendulum rotates with a period of 24h (actually 23h and\n", + "56min). Seen with respect to the surface of the Earth, the plane of\n", + "the pendulum moves in the opposite direction of the rotation of the Earth.\n", + "\n", + "If we were to perform the experiment in other places, the setup is slightly more complicated since the pendulum will then rotate with the Earth. The net effect is a slower rotation compared to North pole.\n", + "\n", + "\n", + "\n", + "\n", + "

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Let us look at the equations we need to solve." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "m\\ddot{\\boldsymbol{r}}&=&\\boldsymbol{T}+m\\boldsymbol{g}-2m\\boldsymbol{\\Omega}\\times\\boldsymbol{v},\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "as the centrifugal force term is absorbed into the definition of\n", + "$\\boldsymbol{g}$. The magnitude of the tension, $\\boldsymbol{T}$, is considered\n", + "constant because we consider only small oscillations. Then $T\\approx mg$, and the components, using $\\hat{x},\\hat{y}$ to correspond to east\n", + "and north respectively, are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "T_x=-mgx/L,~~~T_y=-mgy/L. \n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If $\\Omega$ is the rotation of the earth, and if $\\theta$ is the polar angle, $\\pi$-latitude," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\ddot{x}&=&-gx/L+2\\dot{y}\\Omega_z,\\\\\n", + "\\ddot{y}&=&-gy/L-2\\dot{x}\\Omega_z.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we have used the fact that the oscillations are sufficiently\n", + "small so we can ignore $v_z$. Using $\\Omega_0\\equiv\\sqrt{k/m}$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\ddot{x}-2\\Omega_z\\dot{y}+\\Omega_0^2x&=&0\\\\\n", + "\\ddot{y}+2\\Omega_z\\dot{x}+\\Omega_0^2y&=&0,\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\Omega_z=|\\boldsymbol{\\Omega}|\\cos\\theta$, with $\\theta$ being the\n", + "polar angle (zero at the north pole). The terms linear in time\n", + "derivatives are what make life difficult. This will be solved with a\n", + "trick. We will incorporate both differential equations into a single\n", + "complex equation where the first/second are the real/imaginary parts." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\eta\\equiv x+iy,\\\\\n", + "\\ddot{\\eta}+2i\\Omega_z\\dot{\\eta}+\\Omega_0^2\\eta&=&0. \n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we guess at a form for the solutions, $\\eta(t)=e^{-i\\alpha t}$,\n", + "which turns the differential equation into" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "-\\alpha^2+2\\Omega_z\\alpha+\\Omega_0^2&=&0,\\\\\n", + "\\alpha&=&\\Omega_z\\pm \\sqrt{\\Omega_z^2+\\Omega_0^2},\\\\\n", + "&\\approx&\\Omega_z\\pm \\Omega_0.\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The solution with two arbitrary constants is then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\eta&=&e^{-i\\Omega_zt}\\left[C_1e^{i\\Omega_0t}+C_2e^{-i\\Omega_0t}\\right].\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, $C_1$ and $C_2$ are complex, so they actually represent four\n", + "arbitrary numbers. These four numbers should be fixed by the four\n", + "initial conditions, i.e. $x(t=0), \\dot{x}(t=0), y(t=0)$ and\n", + "$\\dot{y}(t=0)$. With some lengthy algebra, one can rewrite the\n", + "expression as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{eqnarray*}\n", + "\\label{eq:precmess} \\tag{5}\n", + "\\eta&=&e^{-i\\Omega_zt}\\left[A\\cos(\\Omega_0t+\\phi_A)+iB\\cos(\\Omega_0t+\\phi_B)\\right].\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, the four coefficients are represented by the two real arbitrary\n", + "real amplitudes, $A$ and $B$, and two arbitrary phases, $\\phi_A$ and\n", + "$\\phi_B$. For an initial condition where $y=0$ at $t=0$, one can see\n", + "that $B=0$. This then gives" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray*}\n", + "\\eta(t)&=&Ae^{-i\\Omega_zt}\\cos(\\Omega_0t+\\gamma)\\\\\n", + "\\nonumber\n", + "&=&A\\cos\\Omega_zt\\cos(\\Omega_0t+\\gamma)+iA\\sin\\Omega_zt\\cos(\\Omega_0t+\\gamma).\n", + "\\end{eqnarray*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Translating into $x$ and $y$," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{eqnarray}\n", + "x&=&A\\cos\\Omega_zt\\cos(\\Omega_0t+\\gamma),\\\\\n", + "\\nonumber\n", + "y&=&A\\sin\\Omega_zt\\cos(\\Omega_0t+\\gamma).\n", + "\\end{eqnarray}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Assuming the pendulum's frequency is much higher than Earth's\n", + "rotational frequency, $\\Omega_0>>\\Omega_z$, one can see that the plane\n", + "of the pendulum simply precesses with angular velocity\n", + "$\\Omega_z$. This means that in this limit the pendulum oscillates only\n", + "in the $x$-direction with frequency many times before the phase\n", + "$\\Omega_zt$ becomes noticeable. Eventually, when $\\Omega_zt=\\pi/2$,\n", + "the motion is along the $y$-direction. If you were at the north pole,\n", + "the motion would switch from the $x$-direction to the $y$ direction\n", + "every 6 hours. Away from the north pole, $\\Omega_z\\ne|\\boldsymbol{\\Omega}|$\n", + "and the precession frequency is less. At the equator it does not\n", + "precess at all. If one were to repeat for the solutions where $A=0$\n", + "and $B\\ne 0$, one would look at motions\n", + "that started in the $y$-direction, then precessed toward the $-x$\n", + "direction. Linear combinations of the two sets of solutions give\n", + "pendulum motions that resemble ellipses rather than simple\n", + "back-and-forth motion.\n", + "\n", + "## Euler's Theorem from a Linear Algebra Perspective\n", + "\n", + "**this material will be added soon**" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter7.txt b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter7.txt new file mode 100644 index 000000000..eafe4172c --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/chapter7.txt @@ -0,0 +1,838 @@ +# Non-inertial Frames, Translation and Rotating Coordinate Systems + + +Let us quickly remind ourselves about the definition of a so-called **inertial frame of reference**. +An inertial frame of reference in classical physics (and in special +relativity as well) possesses the property that in this frame of reference a +body with zero net force acting upon it does not accelerate; that is, +such a body is at rest or moving at a constant velocity. If we recall the definition of Newton's first law, this is essentially its description. + +An +inertial frame of reference can be defined in analytical terms as a +frame of reference that describes time and space homogeneously, +isotropically, and in a time-independent manner. + +Conceptually, the +physics of a system in an inertial frame has no causes external to +the system. An inertial frame of reference may also be called an +inertial reference frame, inertial frame, Galilean reference frame, or +inertial space. + +All inertial frames are in a state of constant, rectilinear motion +with respect to one another; an accelerometer moving with any of them +would detect zero acceleration. Measurements in one inertial frame can +be converted to measurements in another by a simple transformation +(the Galilean transformation in Newtonian physics and the Lorentz +transformation in special relativity). +In general relativity, in any +region small enough for the curvature of spacetime and tidal forces +to be negligible, one can find a set of inertial frames that +approximately describe that region. + +In a non-inertial reference frame in classical physics and special +relativity, the physics of a system vary depending on the acceleration +of that frame with respect to an inertial frame, and the usual +physical forces must be supplemented by fictitious forces. In +contrast, systems in general relativity don't have external causes, +because of the principle of geodesic motion. + +In classical physics, for example, a ball dropped towards the ground +does not go exactly straight down because the Earth is rotating, which +means the frame of reference of an observer on Earth is not +inertial. The physics must account for the Coriolis effect—in this +case thought of as a force—to predict the horizontal motion. Another +example of such a fictitious force associated with rotating reference +frames is the centrifugal effect, or centrifugal force. We will here, +in addition to the abovementioned example of the Coriolis effect study +a classic case in classical mechanics, namely Focoault's pendulum. + + +## Galilean Transformations + +In many of the examples studied till now we have restricted our +attention to the motion of a particle (or a system of particles) as +seen from an inertial frame of reference. An inertial reference frame +moves at constant velocity with respect to other reference frames. We +can formalize this relationship as a coordinate transformation (known +as a Galilean transformation) between say two given frames, one +labeled $S_0$ and the other one labeled $S$. In our discussions here we will refer to the frame $S_0$ as the reference frame. + +We could consider for example an object in a car, where the car moves with a +constant velocity with respect to the system $S_0$. We then throw this +object up in the air and study it's motion with respect to the two chosen frames. +We denote the position of this object in the +car relative to the car's frame as $\boldsymbol{r}_S(t)$. We have included an explicit +time dependence here. The position of the car relative to the +reference frame $S_0$ is $\boldsymbol{R}(t)$ and the position of the object in +the car relative to $S_0$ is $\boldsymbol{r}_{S_0}(t)$. + +The following relations between the positions +link the various variables that describe the object in the two frames + +$$ +\boldsymbol{r}_{S_0}(t) = \boldsymbol{r}_{S}(t) + \boldsymbol{R}(t). +$$ + +We will stay with Newtonian mechanics, meaning that we do not consider +relatistic effects. This means also that the time we measure in $S_0$ +is the same as the time we measure in $S$. This approximation is +reasonable as long as the two frames do not move very fast relative to +each other. + +We can then compute the time derivatives and obtain the corresponding velocities + +$$ +\dot{\boldsymbol{r}}_{S_0}(t) = \boldsymbol{v}_{S_0}=\dot{\boldsymbol{r}}_{S} + \dot{\boldsymbol{R}}, +$$ + +or + +$$ +\boldsymbol{v}_{S_0}=\boldsymbol{v}_{S} + \boldsymbol{u}, +$$ + +with $\boldsymbol{u}=\dot{\boldsymbol{R}}$. + +If our system $S$ moves at constant velocity, we have that the +accelerations in the two systems equal each other since +$\ddot{\boldsymbol{R}}=0$ and we have + +$$ +\boldsymbol{a}_{S_0}=\boldsymbol{a}_{S}. +$$ + +The above equations are examples of what we call a homogeneous +Galilean transformation. In an inertial frame, an object moves with +constant velocity (i.e., has zero acceleration) if there are no forces +acting on it. When we are not in an inertial frame, there will be +spurious (or fictitious) accelerations arising from the acceleration +of the reference frame. These effects can be seen in simple every-day +situations such as sitting in a vehicle that is accelerating or +rounding a corner. Or think of yourself sitting in a seat of an +aircraft that accelerates rapidly during takeoff. You feel a force +which pushes you back in the seat. Similarly, if you stand in a bus +which suddenly brakes (negative acceleration), you feel a force which +may make you fall forward unless you hold yourself. In these +situations, loose objects will appear to accelerate relative to the +observer or vehicle. + + +Our next step is thus to study an accelerating frame. Thereafter we +will study reference frames that are rotating. This will introduce +forces like the Coriolis force and the well-known centrifugal +force. We will use these to study again an object which falls towards +the Earth (the Earth rotates around its axis). This will lead to a +correction to the object's acceleration twoards the Earth. + +Finally, we bring together acceleration and rotation and end the +discussion here with a classic in classical mechanics, namely +Focault's pendulum. + + +## Accelerating Frames (No Rotation) + +We consider first the effect of uniformly accelerating reference +frames. We will hereafter label this frame with a subscript +$S$. Assume now that this reference systems accelerates with an +acceleration $\boldsymbol{a}_{S_0}$ relative to an inertial reference frame, +which we will label with a subscript $S_0$. The accelerating frame +has a velocity $\boldsymbol{v}_{S_0}$ with respect to the inertial frame. + +The figure here + + + +

    + + + + + +shows the relation between the two +frames. The position of an object in frame $S$ relative to $S_0$ is +labeled as $\boldsymbol{r}_{S_0}$. Seen from this inertial frame, an object in +the accelerating frame obeys Newton's second law + + +
    + +$$ +\begin{equation} +m\frac{d^2\boldsymbol{r}_{S_0}}{dt^2}=\boldsymbol{F}. +\label{_auto1} \tag{1} +\end{equation} +$$ + +Here $\boldsymbol{F}$ is the net force on an object in the accelerating frame +seen from the inertial frame. + +If we on the other hand wish to study the motion of this object (say a +ball in an accelerating car) relative to the accelerating frame, we +need to define its position relative to this frame. We label this +position as $\boldsymbol{r}_{S}$. + +Using the definition of velocity as the time derivative of position +and the standard vector addition of velocities, we can define the +velocity relative to $S_0$ as + +$$ +\dot{\boldsymbol{r}}_{S_0}=\dot{\boldsymbol{r}}_{S}+\boldsymbol{v}_{S_0}. +$$ + +The left hand side in the last equation defines the object's velocity +relative to the inertial frame. The right hand side says this is the +object's velocity relative to the accelerating frame plus the velocity +of the accelerating frame with respect to the inertial frame. If we +now take the second derivative of the above equation, +we have the corresponding accelerations + +$$ +\ddot{\boldsymbol{r}}_{S_0}=\ddot{\boldsymbol{r}}_{S}+\boldsymbol{a}_{S_0}. +$$ + +Multiplying with the mass of a given object, we can rewrite Newton's +law in the accelerating frame as + +$$ +m\ddot{\boldsymbol{r}}_{S}=\boldsymbol{F}-\boldsymbol{a}_{S_0}. +$$ + +We see that we have again Newton's second law except that we added a +correction which defines an effective acceleration compared to the +equation seen in the inertial frame. We can thus continue to use +Newton's law in the accelerating frame provided we correct the +equation of motion with what is often called a fictitious force. This +often also called an inertial force or an effective force. + +**Add example about pendulum in train car** + +## Rotating Frames + + +If you are on Earth's surface and if your reference frame is fixed +with the surface, this is an example of an accelerating frame, where +the acceleration, as we will show below, is $\Omega^2 r$, where +$r\equiv\sqrt{x^2+y^2}$, and $\Omega$ is the angular velocity +of Earth's rotation. The acceleration is inward toward the axis of +rotation, so the additional contribution to the apparent acceleration +of gravity is outward in the $x-y$ plane. In contrast the usual +acceleration $\boldsymbol{g}$ is radially inward pointing toward the origin. + +We will now deal with motion in a rotating frame and relate this to an +inertial frame. The outcome of our derivations will be effective +forces (or inertial forces) like the abovementioned acceleration (from +the centrifugal force) and the Coriolis force term. + +For a reference frame that rotates with respect to an inertial frame, +**Euler's theorem** is central here. It states that the most general +displacement (motion) of a rigid body with a one point fixed (we +normally approximate a rigid body with a mass center) is a rotation +about some fixed axis. In different words, the most general motion of +any body relative to a fixed point $O$ is a rotation abotu some axis +through the same point $O$. This means that for a specific rotation +about a given point $O$ we only to specify the direction of the axis +about which the rotation occurs with the corresponding angle of +rotation. As we will see below, the direction of the angle of rotation +can be specified by a unit vector $\boldsymbol{e}$ in the rotating frame and +the rate of rotation per unit time. The latter defines the angular +velocity $\Omega$. We will define these quantities more rigorously below. +At the end of this section we will also prove Euler's theorem. + +What we will show here is that Newton's laws for an object in the rotating frame is given by + +$$ +m\ddot{\boldsymbol{r}}_{S}=\boldsymbol{F}+m\boldsymbol{r}\times\dot{\boldsymbol{\Omega}}+2m\boldsymbol{v}_S\times\boldsymbol{\Omega}+m\left(\boldsymbol{\Omega}\times\boldsymbol{r}\right)\times\boldsymbol{\Omega}. +$$ + +The first term to the right is the force we defined in the inertial +system, that is $m\ddot{\boldsymbol{r}}_{S_0}=\boldsymbol{F}$. The second term is the +angular acceleration of the rotating reference frame, a quantity which +in many cases is set to zero since we assume that the angular velocity +is constant as function of time. The third terms is the Coriolis force, that +is + +$$ +\boldsymbol{F}_{\mathrm{Coriolis}}=2m\boldsymbol{v}_S\times\boldsymbol{\Omega}, +$$ + +while the last term is going to give us the standard centrifugal force + +$$ +\boldsymbol{F}_{\mathrm{Centrifugal}}=m\left(\boldsymbol{\Omega}\times\boldsymbol{r}\right)\times\boldsymbol{\Omega}. +$$ + +Let us derive these terms, following much of the same procedure as we +did for an accelerating reference frame. The figure here (to come) +shows the two reference systems $S$ and $S_0$. + + +We define a general vector $\boldsymbol{A}$. It could represent the position, +a given force, the velocity and other quantities of interest for +studies of the equations of motion. + +We let this vector to be defined by three orthogonal (we assume motion +in three dimensions) unit vectors $\boldsymbol{e}_i$, that is we have + +$$ +\boldsymbol{A}=A_1\boldsymbol{e}_1+A_2\boldsymbol{e}_2+A_3\boldsymbol{e}_3=\sum_iA_i\boldsymbol{e}_i. +$$ + +These unit vectors are fixed in the rotating frame, that is their time +derivatives are zero. However, for an observer in the inertial frame +$S_0$, however these unit vectors are rotating and may thus have an +explicit time dependence. + +Since we want to find an expression for the equations of motion in the +inertial frame and the rotating frame, we need expressions for the +time derivative of a vector $\boldsymbol{A}$ in these two frames. Since the +unit vectors are assumed to be fixed in $S$, we have + +$$ +\dot{\boldsymbol{A}}_S=\sum_i\frac{dA_i}{dt}\boldsymbol{e}_i=\sum_i\dot{dA_i}\boldsymbol{e}_i. +$$ + +In the inertial frame $S_0$ we have + +$$ +\dot{\boldsymbol{A}}_{S_0}=\sum_i\dot{dA_i}\boldsymbol{e}_i+\sum_i A_i\left(\dot{\boldsymbol{e}}_i\right)_{S_0}. +$$ + +We will show below that + +$$ +\left(\dot{\boldsymbol{e}}_i\right)_{S_0}=\Omega\times\boldsymbol{e}_i, +$$ + +where $\Omega$ is the angular velocity (to be derived below). This +means we can write the derivative of an arbitrary vector $\boldsymbol{A}$ in +the inertial frame $S_0$ as (the vector is defined in the rotating +frame), + +$$ +\dot{\boldsymbol{A}}_{S_0}=\sum_i\dot{dA_i}\boldsymbol{e}_i+\sum_i A_i\left(\dot{\boldsymbol{e}}_i\right)_{S_0}=\dot{\boldsymbol{A}}_S+\sum_i A_i(\Omega\times\boldsymbol{e}_i)=\dot{\boldsymbol{A}}_S+\boldsymbol{\Omega}\times\boldsymbol{A}. +$$ + +This is a very useful relation which relates the derivative of any +vector $\boldsymbol{A}$ measured in the inertial frame $S_0$ to the +correspoding derivative in a rotating frame $S$. + +If we now let $\boldsymbol{A}$ be the position and the velocity vectors, we +can derive the equations of motion in the rotating frame in terms of +the same equations of motion in the inertial frame $S_0$. + +Let us start with the position $\boldsymbol{r}$. + +We have + +$$ +\dot{\boldsymbol{r}}_{S_0}=\dot{\boldsymbol{r}}_S+\boldsymbol{\Omega}\times\boldsymbol{r}. +$$ + +If we define the velocities in the two frames as + +$$ +\boldsymbol{v}_{S_0}=\dot{\boldsymbol{r}}_{S_0}, +$$ + +and + +$$ +\boldsymbol{v}_{S}=\dot{\boldsymbol{r}}_{S}, +$$ + +we have then + +$$ +\dot{\boldsymbol{r}}_{S_0}=\boldsymbol{v}_{S_0}=\boldsymbol{v}_{S}+\boldsymbol{\Omega}\times\boldsymbol{r}. +$$ + +In order to find the equations of motion, we need the acceleration and +thereby the time derivative of the last equation. The derivative of +the angular velocity $\Omega$ will turn in handy in these derivations +(repeated applications of the chain rule again). +The latter derivative is + +$$ +\dot{\boldsymbol{\Omega}}_{S_0}=\dot{\boldsymbol{\Omega}}_S+\boldsymbol{\Omega}\times\boldsymbol{\Omega}, +$$ + +which leads to (an expected result, why?) + +$$ +\dot{\boldsymbol{\Omega}}_{S_0}=\dot{\boldsymbol{\Omega}}_S, +$$ + +since $\boldsymbol{\Omega}\times\boldsymbol{\Omega}=0$. + +Let us now take the second derivative with respect to time. + +Using + +$$ +\left[\frac{d^2\boldsymbol{r}}{dt^2}\right]_{S_0}=\ddot{\boldsymbol{r}}_{S_0}=\left[\frac{d}{dt}\right]_{S_0}\left[\frac{d\boldsymbol{r}}{dt}\right]_{S_0}, +$$ + +we have + +$$ +\ddot{\boldsymbol{r}}_{S_0}=\left[\frac{d}{dt}\right]_{S_0}\left[\boldsymbol{v}_{S}+\boldsymbol{\Omega}\times\boldsymbol{r}\right]=\left[\frac{d}{dt}\right]_{S_0}\boldsymbol{v}_{S_0}, +$$ + +which gives + +$$ +\ddot{\boldsymbol{r}}_{S_0}=\left[\frac{d\boldsymbol{v}_S}{dt}\right]_{S}+\dot{\boldsymbol{\Omega}}\times \boldsymbol{r}+2\boldsymbol{\Omega}\times\boldsymbol{v}_S+\boldsymbol{\Omega}\times(\boldsymbol{\Omega}\times\boldsymbol{r}). +$$ + +Defining the accelerations $\boldsymbol{a}_{S_0}=\ddot{\boldsymbol{r}}_{S_0}=\dot{\boldsymbol{v}}_{S_0}$ and $\boldsymbol{a}_{S}=\dot{\boldsymbol{v}}_{S}$, we have + +$$ +\boldsymbol{a}_{S_0}=\boldsymbol{a}_{S}+\dot{\boldsymbol{\Omega}}\times \boldsymbol{r}+2\boldsymbol{\Omega}\times\boldsymbol{v}_S+\boldsymbol{\Omega}\times(\boldsymbol{\Omega}\times\boldsymbol{r}). +$$ + +If we now use Newton's law in the inertial frame $\boldsymbol{F}=m\boldsymbol{a}_{S_0}$, we get the effective force in the rotating frame (multiplying by the mass $m$) + +$$ +m\boldsymbol{a}_{S}=\boldsymbol{F}+m\dot{\boldsymbol{r}\times\boldsymbol{\Omega}}+2m\boldsymbol{v}_S\times\boldsymbol{\Omega}+m(\boldsymbol{\Omega}\times\boldsymbol{r})\times\boldsymbol{\Omega}, +$$ + +which is what we wanted to demostrate. We have the Coriolis force + +$$ +\boldsymbol{F}_{\mathrm{Coriolis}}=2m\boldsymbol{v}_S\times\boldsymbol{\Omega}, +$$ + +while the last term is the standard centrifugal force + +$$ +\boldsymbol{F}_{\mathrm{Centrifugal}}=m\left(\boldsymbol{\Omega}\times\boldsymbol{r}\right)\times\boldsymbol{\Omega}. +$$ + +In our discussions below we will assume that the angular acceleration of the rotating frame is zero and focus only on the Coriolis force and the centrifugal force. + + + +### Effective potential and Centrifugal force + +Suppose we can ignore the Coriolis force. If we focus only on the +centrifugal force we have an additional force + +$$ +\boldsymbol{F}_{\mathrm{Centrifugal}}=m\left(\boldsymbol{\Omega}\times\boldsymbol{r}\right)\times\boldsymbol{\Omega}, +$$ + +where the term $\boldsymbol{\Omega}\times\boldsymbol{r}$ is the radial velocity. + +Consider now an object with position $\boldsymbol{r}$ according to an observer in a frame +rotating about the $z$ axis with angular velocity +$\boldsymbol{\Omega}=\Omega\hat{z}$. To an observer in the inertial frame +the vector will change even if the vector appears +fixed to the rotating observer. + + +If $\boldsymbol{\Omega}$ is in the $z$ direction, +the centrifugal force becomes + + +
    + +$$ +\begin{equation} +\boldsymbol{F}_{\mathrm{Centrifugal}}=m\Omega^2(x\hat{x}+y\hat{y}). +\label{_auto2} \tag{2} +\end{equation} +$$ + +The centrifugal force points outward in the $x-y$ plane, and its +magnitude is $m\Omega^2r$, where +$r=\sqrt{x^2+y^2}$. + +Continuing along these lines, +if we define a rotating frame which makes an angle $\theta$ with the inertial frame and define the distance to an object in this frame from the origin as $\boldsymbol{r}$, then the centrifugal force (which points outward) has as magnitude $\Omega^2r\sin{\theta}$. Defining $\rho=r\sin{\theta}$ and the unit vector $\hat{\boldsymbol{\rho}}$ (see figure here) + + + +

    + + + + +we have the well-known expression for the centrifugal force + +$$ +\boldsymbol{F}_{\mathrm{Centrifugal}}=m\Omega^2\rho\hat{\boldsymbol{\rho}}, +$$ + +and with the velocity given by its magnitude $v=\Omega\rho$ we obtain the well-known expression for the centrifugal force + +$$ +\boldsymbol{F}_{\mathrm{Centrifugal}}=m\frac{v^2}{\rho}{\boldsymbol{\rho}}. +$$ + +If we now go back again to our falling object discussed in the +beginning of these lectures, we need to modify for the fact that the Earth +is rotating with respect to the falling object. + +Seen from a rotating coordinate system we have now that the forces acting on the falling object are + +$$ +m\ddot{\boldsymbol{r}}=\boldsymbol{F}_{\mathrm{gravity}}+\boldsymbol{F}_{\mathrm{Centrifugal}}. +$$ + +If we define the mass of Earth as $M$ and its radius as $R$ and assuming that the object is close to the Earth, the gravitational force takes then well-known expression + +$$ +\boldsymbol{F}_{\mathrm{gravity}}=-\frac{GMm}{R^2}\hat{\boldsymbol{r}}=m\boldsymbol{g}_0. +$$ + +Inserting the expression for the centrifugal force, we can then define an effective force + +$$ +\boldsymbol{F}_{\mathrm{eff}}=\boldsymbol{F}_{\mathrm{gravity}}+\boldsymbol{F}_{\mathrm{Centrifugal}}=m\boldsymbol{g}_0-m\Omega^2R\sin{(\theta)}\hat{\boldsymbol{\rho}}, +$$ + +and with + +$$ +\boldsymbol{g}_{\mathrm{eff}}=\boldsymbol{g}_0-\Omega^2R\sin{(\theta)}\hat{\boldsymbol{\rho}}, +$$ + +we have + +$$ +\boldsymbol{F}_{\mathrm{eff}}=m\boldsymbol{g}_{\mathrm{eff}}. +$$ + +In the rotating coordinate system (not an inertial frame), motion is +thus determined by an apparent force and one can define effective +potentials. In addition to the normal gravitational potential energy, +there is a contribution to the effective potential, + + +
    + +$$ +\begin{equation} +\delta V_{\rm eff}(r)=-\frac{m}{2}\Omega^2r^2=-\frac{m}{2}r^2\Omega^2\sin^2\theta, +\label{_auto3} \tag{3} +\end{equation} +$$ + +where $\theta$ is the polar angle, measured from say the north +pole. If the true gravitational force can be considered as originating +from a point in Earth's center, the net effective potential for a mass +$m$ near Earth's surface could be (a distance $h$) + + +
    + +$$ +\begin{equation} +V_{\rm eff}=mgh-m\frac{1}{2}\Omega^2(R+h)^2\sin^2\theta. +\label{_auto4} \tag{4} +\end{equation} +$$ + +As an example, let us ask ourselves how much wider is Earth at the +equator than the north-south distance between the poles assuming that +the gravitational field above the surface can be approximated by that +of a point mass at Earth's center. + + +The surface of the ocean must be at constant effective potential for a +sample mass $m$. This means that if $h$ now refers to the height of +the water + +$$ +m g[h(\theta=\pi/2)-h(\theta=0)]=\frac{m}{2}\Omega^2(R+h)^2. +$$ + +Because $R>>h$, one can approximate $R+h\rightarrow R$ on the right-hand side, thus + +$$ +h(\theta=\pi)-h(\theta=0)=\frac{\Omega^2R^2}{2g}. +$$ + +This come out a bit less than 11 km, or a difference of near 22 km for +the diameter of the Earth in the equatorial plane compared to a +diameter between the poles. In reality, the difference is +approximately 41 km. The discrepancy comes from the assumption that +the true gravitational force can be treated as if it came from a point +at Earth's center. This would be true if the distribution of mass was +radially symmetric. However, Earth's center is molten and the rotation +distorts the mass distribution. Remarkably this effect nearly doubles +the elliptic distortion of Earth's shape. Due to this distortion, the +top of Mount Everest is not the furthest point from the center of the +Earth. That belongs to the top of a volcano, Chimborazo, in Equador, +which is one degree in latitude below the Equator. Chimborazo is about +8500 ft lower than Everest when measured relative to sea level, but is +7700 feet further from the center of the Earth. + + + + + +## Coriolis Force and Falling Objects + +The Coriolis force is given by + +$$ +\boldsymbol{F}_{\mathrm{Coriolis}}=2m\boldsymbol{v}_S\times\boldsymbol{\Omega}, +$$ + +It does not enter problems like the shape of the Earth +above because in that case the water was not moving relative to the +rotating frame. + +The Coriolis force is non-zero only if $\boldsymbol{v}_S\ne 0$ and is directed +perpendicular to both $\boldsymbol{v}_S$ and $\Omega$. Viewed along the +direction of $\boldsymbol{v}_S$, the Coriolis force associated with +counter-clockwise rotational motion produces a deflection to the +right. For clockwise rotational motion, it produces a deflection to +the left. + +The Coriolis force associated with Earth’s rotational motion is +responsible for the circulating or cyclonic weather patterns +associated with hurricanes and cyclones, as illustrated in the figure +here. Basically, a pressure gradient gives rise to air currents that +tend to flow from high pressure to low pressure regions. But as the +air flows toward the low pressure region, the Coriolis force deflects +the air currents away from their straight line paths. Since the +projection of $\Omega$ perpendicular to the local tangent plane +changes sign as one crosses the equator, the direction of the cyclonic +motion (either counter-clockwise or clockwise) is different in the +Northern and Southern hemispheres. + + + +

    + + + + + + +As an example, assume a ball is dropped from a height $h=500$m above Minneapolis. Due to the +Coriolis force, it is deflected by an amount $\delta x$ and $\delta +y$. We want to find the deflection due to the Coriolis force. Here we ignore the centrifugal terms. + +The equations of motion are: + +$$ +\begin{eqnarray*} +\frac{dv_x}{dt}&=&-2(\Omega_yv_z-\Omega_zv_y),\\ +\frac{dv_y}{dt}&=&-2(\Omega_zv_x-\Omega_xv_z),\\ +\frac{dv_z}{dt}&=&-g-2(\Omega_xv_y-\Omega_yv_x),\\ +\Omega_z&=&\Omega\cos\theta,~~~\Omega_y=\Omega\sin\theta,~~~\Omega_x=0. +\end{eqnarray*} +$$ + +Here the coordinate system is $\hat{x}$ and points east, $\hat{y}$ points +north and $\hat{z}$ points upward. + +One can now ignore all the Coriolis terms on the right-hand sides +except for those with $v_z$. The other terms will all be doubly +small. One can also throw out terms with $\Omega_x$. This gives + +$$ +\begin{eqnarray*} +\frac{dv_x}{dt}&\approx& -2\Omega v_z\sin\theta,\\ +\frac{dv_y}{dt}&\approx& 0,\\ +\frac{dv_z}{dt}&\approx& -g. +\end{eqnarray*} +$$ + +There will be no significant deflection in the $y$ direction, $\delta +y=0$, but in the $x$ direction one can substitute $v_z=-gt$ above, + +$$ +\begin{eqnarray*} +v_x&\approx&\int_0^t dt'~2\Omega gt'\sin\theta=\Omega gt^2\sin\theta,\\ +\delta x&\approx& \int_0^t dt'~v_x(t')=\frac{g\Omega\sin\theta t^3}{3}. +\end{eqnarray*} +$$ + +One can find the deflections by using $h=\frac{1}{2}gt^2$, to find the +time, and using the all-knowing internet to see that the latitude of +Minneapolis is $44.6^\circ$ or $\theta=45.4^\circ$. + +$$ +\begin{eqnarray*} +t&=&\sqrt{2h/g}=10.1~{\rm s},\\ +\Omega&=&\frac{2\pi}{3600\cdot 24~{\rm s}}=7.27\times 10^{-5}~{\rm s}^{-1},\\ +\delta x&=&17.4~{\rm cm}~~{\rm(east)}. +\end{eqnarray*} +$$ + +## Accelerating and Rotating Frames + +It is now simple to bring together the equations for an accelerating and rotating frame. Using our results we have the equations of motion for an object in an accelerating and rotating frame with respect to an inertial frame + +$$ +m\ddot{\boldsymbol{r}}_{S}=\boldsymbol{F}+m\boldsymbol{r}\times\dot{\boldsymbol{\Omega}}+2m\boldsymbol{v}_S\times\boldsymbol{\Omega}+m\left(\boldsymbol{\Omega}\times\boldsymbol{r}\right)\times\boldsymbol{\Omega}-\boldsymbol{a}_{S_0}, +$$ + +where the last term is the acceleration of the accelerating frame seen from the inertial frame. + + +## The Foucault Pendulum + + + +The [Foucault +Pendulum](https://en.wikipedia.org/wiki/Foucault_pendulum) is simply +a regular pendulum moving in both horizontal directions, and with the +Coriolis force included. It is explained at its simplest if we +consider a pendulum positioned at the North pole. Foucault's +experiment was actually the first laboratory demonstration that the +Earth is rotating. The experiment is rather simple and many physics +department worldwide have their own pendulum. + +In the original experiment done in Paris in 1851, Foucault used a +massive pendulum of 28kg and 67m long. + +If use an inertial frame with the North pole as its origin, the Earth +below the pendulum rotates with a period of 24h (actually 23h and +56min). Seen with respect to the surface of the Earth, the plane of +the pendulum moves in the opposite direction of the rotation of the Earth. + +If we were to perform the experiment in other places, the setup is slightly more complicated since the pendulum will then rotate with the Earth. The net effect is a slower rotation compared to North pole. + + + + +

    + + + + + +Let us look at the equations we need to solve. + +$$ +\begin{eqnarray*} +m\ddot{\boldsymbol{r}}&=&\boldsymbol{T}+m\boldsymbol{g}-2m\boldsymbol{\Omega}\times\boldsymbol{v}, +\end{eqnarray*} +$$ + +as the centrifugal force term is absorbed into the definition of +$\boldsymbol{g}$. The magnitude of the tension, $\boldsymbol{T}$, is considered +constant because we consider only small oscillations. Then $T\approx mg$, and the components, using $\hat{x},\hat{y}$ to correspond to east +and north respectively, are + +$$ +\begin{eqnarray*} +T_x=-mgx/L,~~~T_y=-mgy/L. +\end{eqnarray*} +$$ + +If $\Omega$ is the rotation of the earth, and if $\theta$ is the polar angle, $\pi$-latitude, + +$$ +\begin{eqnarray*} +\ddot{x}&=&-gx/L+2\dot{y}\Omega_z,\\ +\ddot{y}&=&-gy/L-2\dot{x}\Omega_z. +\end{eqnarray*} +$$ + +Here we have used the fact that the oscillations are sufficiently +small so we can ignore $v_z$. Using $\Omega_0\equiv\sqrt{k/m}$, + +$$ +\begin{eqnarray*} +\ddot{x}-2\Omega_z\dot{y}+\Omega_0^2x&=&0\\ +\ddot{y}+2\Omega_z\dot{x}+\Omega_0^2y&=&0, +\end{eqnarray*} +$$ + +where $\Omega_z=|\boldsymbol{\Omega}|\cos\theta$, with $\theta$ being the +polar angle (zero at the north pole). The terms linear in time +derivatives are what make life difficult. This will be solved with a +trick. We will incorporate both differential equations into a single +complex equation where the first/second are the real/imaginary parts. + +$$ +\begin{eqnarray*} +\eta\equiv x+iy,\\ +\ddot{\eta}+2i\Omega_z\dot{\eta}+\Omega_0^2\eta&=&0. +\end{eqnarray*} +$$ + +Now, we guess at a form for the solutions, $\eta(t)=e^{-i\alpha t}$, +which turns the differential equation into + +$$ +\begin{eqnarray*} +-\alpha^2+2\Omega_z\alpha+\Omega_0^2&=&0,\\ +\alpha&=&\Omega_z\pm \sqrt{\Omega_z^2+\Omega_0^2},\\ +&\approx&\Omega_z\pm \Omega_0. +\end{eqnarray*} +$$ + +The solution with two arbitrary constants is then + +$$ +\begin{eqnarray*} +\eta&=&e^{-i\Omega_zt}\left[C_1e^{i\Omega_0t}+C_2e^{-i\Omega_0t}\right]. +\end{eqnarray*} +$$ + +Here, $C_1$ and $C_2$ are complex, so they actually represent four +arbitrary numbers. These four numbers should be fixed by the four +initial conditions, i.e. $x(t=0), \dot{x}(t=0), y(t=0)$ and +$\dot{y}(t=0)$. With some lengthy algebra, one can rewrite the +expression as + + +
    + +$$ +\begin{eqnarray*} +\label{eq:precmess} \tag{5} +\eta&=&e^{-i\Omega_zt}\left[A\cos(\Omega_0t+\phi_A)+iB\cos(\Omega_0t+\phi_B)\right]. +\end{eqnarray*} +$$ + +Here, the four coefficients are represented by the two real arbitrary +real amplitudes, $A$ and $B$, and two arbitrary phases, $\phi_A$ and +$\phi_B$. For an initial condition where $y=0$ at $t=0$, one can see +that $B=0$. This then gives + +$$ +\begin{eqnarray*} +\eta(t)&=&Ae^{-i\Omega_zt}\cos(\Omega_0t+\gamma)\\ +\nonumber +&=&A\cos\Omega_zt\cos(\Omega_0t+\gamma)+iA\sin\Omega_zt\cos(\Omega_0t+\gamma). +\end{eqnarray*} +$$ + +Translating into $x$ and $y$, + +$$ +\begin{eqnarray} +x&=&A\cos\Omega_zt\cos(\Omega_0t+\gamma),\\ +\nonumber +y&=&A\sin\Omega_zt\cos(\Omega_0t+\gamma). +\end{eqnarray} +$$ + +Assuming the pendulum's frequency is much higher than Earth's +rotational frequency, $\Omega_0>>\Omega_z$, one can see that the plane +of the pendulum simply precesses with angular velocity +$\Omega_z$. This means that in this limit the pendulum oscillates only +in the $x$-direction with frequency many times before the phase +$\Omega_zt$ becomes noticeable. Eventually, when $\Omega_zt=\pi/2$, +the motion is along the $y$-direction. If you were at the north pole, +the motion would switch from the $x$-direction to the $y$ direction +every 6 hours. Away from the north pole, $\Omega_z\ne|\boldsymbol{\Omega}|$ +and the precession frequency is less. At the equator it does not +precess at all. If one were to repeat for the solutions where $A=0$ +and $B\ne 0$, one would look at motions +that started in the $y$-direction, then precessed toward the $-x$ +direction. Linear combinations of the two sets of solutions give +pendulum motions that resemble ellipses rather than simple +back-and-forth motion. + +## Euler's Theorem from a Linear Algebra Perspective + +**this material will be added soon** \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks.ipynb b/doc/src/LectureNotes/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks.ipynb new file mode 100644 index 000000000..bf6d8fadc --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks.ipynb @@ -0,0 +1,138 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Content with notebooks\n", + "\n", + "You can also create content with Jupyter Notebooks. This means that you can include\n", + "code blocks and their outputs in your book.\n", + "\n", + "## Markdown + notebooks\n", + "\n", + "As it is markdown, you can embed images, HTML, etc into your posts!\n", + "\n", + "![](https://myst-parser.readthedocs.io/en/latest/_static/logo.png)\n", + "\n", + "You an also $add_{math}$ and\n", + "\n", + "$$\n", + "math^{blocks}\n", + "$$\n", + "\n", + "or\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\mbox{mean} la_{tex} \\\\ \\\\\n", + "math blocks\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "But make sure you \\$Escape \\$your \\$dollar signs \\$you want to keep!\n", + "\n", + "## MyST markdown\n", + "\n", + "MyST markdown works in Jupyter Notebooks as well. For more information about MyST markdown, check\n", + "out [the MyST guide in Jupyter Book](https://jupyterbook.org/content/myst.html),\n", + "or see [the MyST markdown documentation](https://myst-parser.readthedocs.io/en/latest/).\n", + "\n", + "## Code blocks and outputs\n", + "\n", + "Jupyter Book will also embed your code blocks and output in your book.\n", + "For example, here's some sample Matplotlib code:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib import rcParams, cycler\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "plt.ion()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks_2_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Fixing random state for reproducibility\n", + "np.random.seed(19680801)\n", + "\n", + "N = 10\n", + "data = [np.logspace(0, 1, 100) + np.random.randn(100) + ii for ii in range(N)]\n", + "data = np.array(data).T\n", + "cmap = plt.cm.coolwarm\n", + "rcParams['axes.prop_cycle'] = cycler(color=cmap(np.linspace(0, 1, N)))\n", + "\n", + "\n", + "from matplotlib.lines import Line2D\n", + "custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4),\n", + " Line2D([0], [0], color=cmap(.5), lw=4),\n", + " Line2D([0], [0], color=cmap(1.), lw=4)]\n", + "\n", + "fig, ax = plt.subplots(figsize=(10, 5))\n", + "lines = ax.plot(data)\n", + "ax.legend(custom_lines, ['Cold', 'Medium', 'Hot']);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There is a lot more that you can do with outputs (such as including interactive outputs)\n", + "with your book. For more information about this, see [the Jupyter Book documentation](https://jupyterbook.org)." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks.py b/doc/src/LectureNotes/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks.py new file mode 100644 index 000000000..e33d144c7 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks.py @@ -0,0 +1,65 @@ +# Content with notebooks + +You can also create content with Jupyter Notebooks. This means that you can include +code blocks and their outputs in your book. + +## Markdown + notebooks + +As it is markdown, you can embed images, HTML, etc into your posts! + +![](https://myst-parser.readthedocs.io/en/latest/_static/logo.png) + +You an also $add_{math}$ and + +$$ +math^{blocks} +$$ + +or + +$$ +\begin{aligned} +\mbox{mean} la_{tex} \\ \\ +math blocks +\end{aligned} +$$ + +But make sure you \$Escape \$your \$dollar signs \$you want to keep! + +## MyST markdown + +MyST markdown works in Jupyter Notebooks as well. For more information about MyST markdown, check +out [the MyST guide in Jupyter Book](https://jupyterbook.org/content/myst.html), +or see [the MyST markdown documentation](https://myst-parser.readthedocs.io/en/latest/). + +## Code blocks and outputs + +Jupyter Book will also embed your code blocks and output in your book. +For example, here's some sample Matplotlib code: + +from matplotlib import rcParams, cycler +import matplotlib.pyplot as plt +import numpy as np +plt.ion() + +# Fixing random state for reproducibility +np.random.seed(19680801) + +N = 10 +data = [np.logspace(0, 1, 100) + np.random.randn(100) + ii for ii in range(N)] +data = np.array(data).T +cmap = plt.cm.coolwarm +rcParams['axes.prop_cycle'] = cycler(color=cmap(np.linspace(0, 1, N))) + + +from matplotlib.lines import Line2D +custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4), + Line2D([0], [0], color=cmap(.5), lw=4), + Line2D([0], [0], color=cmap(1.), lw=4)] + +fig, ax = plt.subplots(figsize=(10, 5)) +lines = ax.plot(data) +ax.legend(custom_lines, ['Cold', 'Medium', 'Hot']); + +There is a lot more that you can do with outputs (such as including interactive outputs) +with your book. For more information about this, see [the Jupyter Book documentation](https://jupyterbook.org). \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks_2_0.png b/doc/src/LectureNotes/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks_2_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ab6666ca36cb8e33a28140d272fe0d5ec82ada68 GIT binary patch literal 113874 zcma&NWmp_r6D>T1V8J25onXP;o#0M_ySuv+AUFhf4Fr;)!QFzpyTjlN?l8AG=e*zd z*CRh9)fs;J0A2nUo9L!xkjGWCtc1Es_whpeg zR>oxRX3j2F4)*L!Y)otnWR|Y3j(p6_|NrMq4$c9@77Qi6&4qV zfx+g3Lqjy)Jit^U&#SmL64-yye{C=d6PJ*6+#sF#)DtKOUlc^gY*^e@lbLG^XXs4CiRsBaq_9x z2U{@uJJ&|@=~u?5=}eldi#b7`=d?bLqxnvJi>!FpM@RsaU#H&QY^l!9)x)FOa)M%% zAJP(HbJF%;ziiLV$;mlAJzZ(o`6ZFf{bg`>CH%L$eLtVB?Q|<|J}>ViQhW1AT~_4= z5sWpt9X8w_{I1eu*xucBdA{4NHtPNwVl!K=H3*2=Jo|%ti^!!lB zOo)}Ei#zbIWmkN$tPl_M1Qv8z0S$kxEP`?yo8(OGNPWsI7XD!!p@V>K=ab>c_!uc4 zuD&PvhGUxW^I6=P2_cs)89RGoABhi&-rWAdf${NTErWgw&&KM-D1TfSi8mrk>MI*- zYsLNf7cboT-ql`=7WjNc8oO2`H5`Q9}W(VgM;HQE*YibBK5te+WjX_%3qLXw^xw>a(b9qq1xx z3pe+TM6}kw0f+(E$&!gC-GaG8<=aEP^n2k9J|c-^AY$3t8ckm1!jhSs z>4NUL?P+c{i?DfXx>b|=|3RK~mS@2$kmnB#(6=^6G(@MxUD2PQH`O@PwR8G}P+pv< z_{_|qom2yV`P^#T1-7q49Hp97U!I?zvH2ALjT8KGk&|>Irj3P30Z()F$#$a$3ADrT zParq|nJP{C(7tq%fqrXL{Ag&nh4lj?Gq;FHO7_Mxe*&zZ6vqn9;Tz{zRvX&vW5ZFO zYWH7KssEgb_#u$MdA}(2{PAK8_Ozce&hctSqi+lq4egKh%m*As?Z1zA7hd;PF5N~f zc-y~zmlrfOWzbi&u#p79Bqb+LtgI-Ai^Eo1jKz{d@5TZ~mHf}KJF=>p?!cM6kd})y zUKeU0Hr6BQ%MA~ve?IO>3G=}@l)bDO_E7r+=p<4`lZZ08j~zz?d;frHeq11klD~zL zIzIP<8v(&8l2L zfN&Hpv-#cm&a%sxV8e>NwY7E0&!0w}U*P%#n3`8c7i(?qMjZURi-n)8xa<}s)YWkS zfL->z7%{c5Af0>o7ehMNPwqXRrz$-u?(PWyFv1$epP+3HxRv|RcK0r;=dRc`D@>JL zSsZ{KD@)7ucqtO2p2&AdyZT-`@9f*3+`%K6eE<$4hKdmhcz&z3nL96H_M`I;aC5t2 z753N}Oa=|7vxjL_o2zJQhIen|6%>5=@#6>jv+;|^IcKmLv%=rZY^BHJi4=|IM1oz% z+sPYAK0P^{6hCX+OmcV1fQv^^ruPkjEBW3uukFNeujUmO)A;Mk4kRiG4P5R|C7!Sz zM#qj>*BawVKJF^hCONKdID+!5v>zee!hOb7Ti)m|?v#$$yAHA>$e_O}DMz2>HjyYe zdwp({F(P^YMN5YN3?7}x6jIhs1)UnAdpx31oNtH=%LpPcoB8#5*?EX@I6ZN`<1|5z zX`{UPB$B4uZs8AH;Qz2LkeJ_HSuK%>Zg+QgYGFY}NeLZ5%H15FllSeRFM%Z=y%$^i z*S*bedhX$78s~*N=2?*%|GdSy(p~SzypL=? zaXvofTHzI@<*~|^->B66_vbQ2gX4x6uP%+%e7RmT;M-t2!tSu_`?i+=o0{lI(Vk^| zX6Uju^19$VTF{beu~-s*;@4v?GxKseFa4aCpFUTt|M#f*Iq}PwUjp~8Zlr}auSM$_ zix@vAvZYwKg6d$XNw%8Ye{f}Z<*^bs{+jK_)OEc@+yMyyMykDOeyr=J>@UbpxkpvUm477BttAx;dRKt=z+8iMm_TpR_Z3bmg# z4BXJKJwFS={FK=4RqT^JYOeJtnr~7bb`+NfTX-vWXEtm&pRq4c6WCg_=!9TI&zR0BjPHxyXMQpJOh#1};PYI0(}Ue_k-@I)JdPZ=s*T%D zUH0p((L~yvFt>?QMv?!v2zpy{fVAtJBz3}@yni#9y`55vL_=%TiqJ~MvGm|Rt6UefWwAA7lq39LuO8}_EMkOWO zH#4VS?=8<~?Vu2q4eVDa|SC)ML1=?DV zA%^h|o*1G$%IH#bl?%EVh?&W5R zHct>cGs7+S!RHhZc@Q z4|tuRt_`wfmOrJqHj8mZrh}OLL0PsR0{Ij_1gZj86*@TxcmT~_ev&PJLSe%ao7Y41 zAc&PmU)W_Vyqeg>t61IMBlZNbtxFBjy%KRK>wB0bU`Ssm%xR5w+=3}g!h;o*HXxl% zpex>fLX(11mKvX*@BfIaCjnFrxO%Rb2yq(Q;-e=>B~xlV=;_!!@2G&H-*dgdd~d|Vr{LynOykLLhmF%-enxVo7^gP8(b*8bU1j4Hv z>C}%m(LPLgC~OX^Ew^K>t*xcHjaY%1_DvDY0e3^X9xHCkK9E-5EyA^RVAYKQY}EC? z+wpzA$QAy%r4Fo9Qp9w7{#TE&b^=h;(#QJ(UQ?zVxm}Yu3e?~~6$Y?|qauw{7$>fv z^VH93hpyx2doHFqoWdLIPd>u}#Yr2l&kaF^K`9wQMR{+b;H$jDLdI4^N-TJ?WzDdn zVv-Gc(V?7MbtY^0H;#?Ewku7X&%3ia4l%htH!B{EV1f(bSeuI06t}}!g=v<5RxT+) zRrR5DscP4Z9m4FvVl}fn@dR_=@5bB~EF{oFlJ&6>TpN$kbs{l;Wawc$VZ3eN4`UbC zj^ThPU|WcwZ;S-Hq1dCUE1H*&=`&zTlt}L={{ev zw%W_|)ry`V%u_el)ZpbOgSQ6N37a;im&?Gh<0G`ek(coO|HnvEO? zb~UDFpmsIn=E@`;`f@?Do+-_BM!sxya#TGAo{%DiTh9+8G2Wjn0u}!Fv3YSv?Q97^ z)u5H3;S}1e!L!m{=ePv=PRL|8ru)+aap7oAZ{eYEs%LpUwniOx)R1VNIlDx6pv1gh zAifAb40B^@Rv0H`Oa@^<|G^`bZObNf{JMU3fX{>6Lg1Q^qnQ}*ok*kL>+4MZ6Wvg+ zvt3>q4Xj_>7rCX0igE5tFFAC>If;4_aPEO$pMN)O#q#%$jO?^MoWQOFRnF#DLi=@K z+p--&lau%7&pBdlApnTJZ)*jv1@xHPL+j1a)8)X5myU{QU)KbsE8Ehkm{-CoHL*rN zYNHts^mnPSrFUj1myh+%)8|H^u;?wLh4G;1^Y<)xeg-t=~-0lx|lHq+zP`tKFt&hNZV*DKz*_lDo_>!CW6ymVCY zDZ%qmH1Vo_@Sq@K^PjIU$AZ{AHc@f=1hDW=0hhR)ZT(ugaF*pJB+-Q@Xl`geGypFm z90T_IFYojX)SHm@DxV~_yRW^D1OGjpIoVw&CH;Qc`&*j0eCq8RvLcwk)ww84ly%yi z5IZyxjh zcN;6uJEn`$JJNLg61_EOyQYBsj}>F4<^g5UTCP3S=`Dl>$dqLWFqOE;6db5GS$D5* zPFU$Dau> zA5b{w(N}52)}oxwFn>`?4^+@KMfGb@*(-d!Adrd!C_g6TU01f`(Yil{&KkvR~(@xQ(z@vpS%6R16&(0NdT!) zTr35LAVu~FgQW`FzgMKd=@+q%yZgUyj$?pi4HQT4A_ROB z_j>amER5)Asdl2)@^26fx~<=Ztlc8SUI@i-QX=cvqjiF3Z+E5XB92#(yip!DcO+&j zdQY#7othGJ@BWHQw7~pfZbgxDvU+T&E&0NNp#}W_DsPNhZ!AWdfdmgwX?{&XrWp)D zQ0B^vIX^#-Ao=>wjxjMvVM$b$4QH(9vwAexc@v7UD=I^`uU8*`bdmbE*?zAK6$8z% zEDbIYe2o!Bz!N1GVXGCj>W?uOY2%dqc5|f;oARxMOH=sqLiFlvI2ALg+=MBJJ#bJi z>owxhswiYCZev)M((Q~FX}4zCxN3SyD!`oo zlQVwMCla^Wv`r9#(XaX17Hzvj8U*lePdNrygnKlQY6FpKO$>Xb$ux$K;5W%de}`FJ zJh6y3uhwEF~qG z1$M`8%M6~oRqBM(peMzCHhOaTr;N#;l(E-QJ&!c&48JA5cCVB2lRtg>kLHZdzbNAV z2_1Pd$wB6<#k7Y|n4C!;;wTBkKXx}p&jDOZ`QzIV3>15PrJB*wO8ehw#O>6R&KO3u zMni-%aZEU!37JxZn=a$QMyB?3*LSVTsa-QA~&C3l9G+eTuaWV1e z0z<(`-fBFf(fl*AyC64$Pxt-%Q%F0s>i-+f^W2RZP@bH{sAL#61e*75s<10}7onhG zi-e*bi4xpn=9WG9;l=k?q1`ovE;b_`IsDz=s!UD6wz8wB@e|ZmC()Kvd~A}o!LIAt z3;}ns8LJ!LFz~KDHhN077-TyZ8@-0d5NB6bl`Rm|3%Nd~xEj6~rfSRQV(N}K{Jy`! zC^7qt+P#DtNYxGskt}WH++S2vfKz_i+OWYJ91DF*XySiPb1e@LN6qL~TwKOKGbtbF z(OhPFZ0<$N>xywBdYs@sYpVrUjwP#3-jZ@pT+Ba_T0Ty)4A(K-2q}&TL&HZj0mC!H9y6JxlN<^{9Ez(ei ztYgl{h%PLiM}CIu4!GVV_;dck@tFx&u_e+e^%TC|0fwxh8hkotZ$mvlFJ?G5x<%0J z(5Js@aQ0b$KxcTdF}3O`H$Y+un|bp3uUw7L{c_sPWvO0VT(GS8 zrv*jt5dec+GO_Ot?s2sT2om&W7>E=$vhLsiZ|$8C*A!j2SE85NU^66Fm?1H_>;PTC z1(DZmBLx4l+%LhsSzM5{OBs5}DxkOpXdc#LWjSxi#@F~iaaS(=jM z79}yB3=u}1e;?N$>k@CZ*8EIvgXDvPA-l)OM;$b*&8>dkzJ_ElOIE@uOHzpK&fl zSjdBXH4jSZLUi~O-8W_QXc~MFx;EY~E-2R2^PjaO)d)Smau{w)N}(~JDe6!tq3KUy zUXA96{!UVl88Ln}s8hJTAT77wG5J~Cbk6%rv$ga{;%yxyA9AdKbR&V_i*n*XZRU(t zp6>GPYtRZ7EFIFxGEV!+II$-sjhLYac}Rx}8~*O)2l&~R@FZuzg6tQWk2u7x1)**&;!|b+s-})1rOKCiv2wqqm>#X@Y-v3SS*5=0KtidT6N9C@Skfnf? z;N%h6Z%nW=C;$p0B8C)fbe8SOk8P1JcJ;ve1%{2OZTZn_tp7YKK#BNJ!#A06ZaJEg zJM#~{Is1O%RR7P>f{QzDAdZBE51c$&TW~0esBSi^e>OZ|{t&ulP=h=myleOSmJrYc zKk}mr((a$_IfiVmsD47jEMiIE{UBP(HJ-%;U*AI7&IDjrNQZusrh=}d7~+F;?rb!& z28NvjdBbmbqw3%lt5MYj;@8$5hV-a zh0e{n_bTRD#cx%_kub1wt z%q-T+(~?}*Jo(SQ@Ylck=CyBusfZg~yR`4?#Yk9j%jckOAPK#<`}A}m#o)hjGhZV* zIclKTJI(P%J?rBN^Yd`0@Y8Wg?}{_T0Fxle|AM*{KOG5<=AxoGez=j!wY?2yZB*}U zi&#kj_0^jSC>yBiJ{xi5i_Zx@ioF(TE=*Jnm(kFO6n|l8Wb|w7SF~g4y9Gs_c$ya! zEJ+COE`!;Vm2K#AdgQkFPqys0WWU14ui7&-79o<4JIk^(WwLgO+NNtI`9j+r z$I?b5{)HN6vA@3l?*50xM7Im1)ZVnDY3=U9Ir)Z&dFN~P@4GzldCx zT7TCd%0=?ip?^?rM)h%``$~T5W;yK(jk9fdguh>1liaznUw_PIR`H*z4Y`59lUf4LCq?X68*L=6(t(*H{xeN;6}S9BX1MOxoSZ;bPoxF|TLe(h!C-yy5l_+z_i(}~S9P&sa5tn$DR35u8Wp`k!}zs?99<2IzA5KPIp*}O?o#aWa82?CEw8B1 z1mzm@I#gsZB*%ko9TwPVQu%H>o;Re}2#qD^y_#U55J-F5q44&d$V=CZMq(`UFn)q| zwX8YT_soi6a!RVFN<&Wo4(#$+?Z#QGCvszF7)%QJk6=E|0Y(^b_(*7 z+hA2Fw1(Hs@K-Jxo#a9@qYl;#dzIQ_s>yIWh7+Be9OcV9^i^eR%F^%9p#)>YvRnpt zF@;5)6HPh(8PWmakIA@kJ_^0*a{YWRTq}^{qTO_wGds^*<>K7ZB4ikr7C*d|GEI8( zcs37m#F)+z2)0cH&E#TM4J>+sMILC9x#cZ>)TUlNe0&CKJVs|78b=ta&t3lw0eT*q z)t0dSTm{R9Xw}IW}JU1&M2nLd)A(4Fl2M9pIur_^bJ!>qUo)b`yI{oVR;W zqV_j;4Ua^ga3}Vbseuj83O6(Kd)9y4AeQ;S6{H;bQgTupPS_V3(l^Pq zLO)E98+lz^5P63*V@IYeBg1j|^Im7N&8R;QTc48Q^{3BR_J(x!`b##txMz1QI)0{?8bB#sTe|< zN|m*+cs2;D$}FZzIqziK_f#p$6hf93k+|xEjMj(c74{;y)d_LG*Q25kGcr5X4M~qk zM!lZE;|~;=`PY=bhC%n#@Hd>w?o+iO6x*`wbp^J7< z{)&UhS#547z!(F-m329sW06BP|BeDWl}dEI0uzFf^mOPJ;=_lDH}gL&z!ww_lmxai z6d!l$uK}ReT9T#d_;VCGWE}L?sB{D~dTHGzBBlbbJ(Ra12kE={jcRzFCY+sMGzNQa zt~mO9npI6Z-RSaQ!>R%^YJccgdQ_PHwg^Zt!oPV*F>qt2xr?5uQ%@_>V`v{=q{r8P zwfUCMef4q5sp4$rq?^44)}hAH2K!_nbUVNpsj58I2|}uWe=&2?7cODxb4^?TOK$#j z9%d;HN2NDqfhknUoWG{$c!O50;_xF~*-nl-wYF=-9AxIiN87xw-K6i247nCOdvJw- zvX$CHINsmUr;^UxC_nZjYqC#rK^CtDk>c{5gtYN2HI& zXu{0%&_;q@jT0%Vrs{`7pXw1wYC7`%KlxvP;~$F2-;*C9f9c@`u5coTbRb3m5v8^Vm{YC#^! zNR+B+c3IYauVICW6Gs?u?0>(eF9jJTaZbq=9SyaJ(Pj7JV#A?wHGGfp=42u0yYmN% zaddZF;JZfEeE^0hoR$S+V;+Wnn+Mh3eAmNx#J#Ia%H7Z@@d_=5r z+Z&5aMr@24I~g@m-+QX9eh+(JS7uzvA<0%WmstlzeB#I z*WY5T&hu}*kgkg9LEy9X{xMNG8FA{@$`OFu=O1jPEQ=@1pu$oTh?;JTzc;P(N;i~Z zhjkM^9bk=x%F6OO?2RGQxNE+!pZiQLcc_=EX!mPtlEa5IH`wMrv6pwB0T3V*j`xK? z185GJp~Y%!qej6GgfA>Yq(g<6W|?d2qxvN0bN;=;&uT1-JYzpWpiywWiDknXxOnq|YU|Aeg(<3b~%8K&@6H5nJyc zl9ZL%yDARnB4<(^>nIs*@O2yu}|$rV$2$nq&}F*lYf#dUZ*@kk9gI z*Tw2n&)Y*Bk0%vpCaSV6hx*-!G39F}@Iq|s-w%`BOc{Rlrlg|*3RG0?iL+oEHGRO>;dyZd`3j8pKPl!|`W z*=dPnQ=P60{0HweiStYLVJ=GE8LdJlJbvZ@P7^Lk7LkUkob?l89@!zxc+v2EX(-5B zhjKPw;#}IsxI_8uxB}|}b@KX%?~7kT%>n+IZc(8Jx~FKIF3TXo+U+%0FBmcGu?hlSAG`JH)aVaUNufipV)fs^m!v85GB>6n0JZ@3N z57fTjp7c!MzZ6fN!7F>fCU*$rq2Bg*;=Uobe=BASyp9eI2q0`Pj>Iv}KiyZpzuGs^ z4gMoj*cgAk_Jjgis_3go^moCbm|XY>?L9u*X*ROD_;ngv9Wr-!u6@CrA-UFEOdWXO zwdE(KV3*{3_XgxF?8F3G`Hj8w9fjr_Dd1C+iy>fVlY!x`giTSG#t63k$j9h}k?NyoKv&*#J>@%9W#qtfdQRrm-|rTfPZY@=y1YbQeR=r!@p z#tRK5@j~nd{iMJ`3Z2+@9PUCN(8Z zf}Rl>gobMazNs=LsWJ_Zj0mney=We2(vuQ^J=1!Iu6*I|)a&+kl;~l934W;q2+A1A zrTsGUSJ6@D>UOQdqKLHm+!`hIeN+=PgU9KkWTU;55u<9R?9-Rx<+h=M|@iH*OGIhS;tIhq26H@T-0;%}A2j_@?+uU)+UfreLL2;<3+c zErMhmAvD;G?E+T#%ykv;@hPDx8VRR&k_KV;HKyA=YcfOqa`P|6SL&Ii)q-I?YRpgW z{Ftcdk1XEWRoe)x2ktv_Qxvu zUY5X>$8+e{W>P-#+;=556w8Y;Jsxe5K7*zN0ZA*1Fg?FbKwsisApU{=70Ba3je_ z+7LD#)Y@0;C&;({{psh-TRks)oZ(EslYDLZA@YnP~ui6bjjj7h=O-BW{!M_d8ev!PGvNW zIE--Zc2O{5s`?b7`Q!38Zq_{ceeD9$I68oNoC^tNjamhJKsirVvt6-ebh$H#|JhSa$N^~7JUmj#x1CwvuP#J;EZI{WgH;Fi0!8mzrRny6 z+fhAyVV@{fk9G{#^q>jK){)8NhXp~%ukyV0eQ@!k;`!f-><7d6F5SfP|42c|HJpRY zss`-Bay*|JSlynWUJBe{#K+El_phjHZwEoZ6yZUY5=)j!|xJ%wz%xB{r7+QUl-Ak4jG@Mpa}*qK;Q4c~*gB>IP9s zSlvrDqt74;Mj9i0X6<@x6yn30zamNme9n3FKM8J6opUDEkg8~<)XKB@c+<=o(L| zEfo=BZUp2D?PvoD-m&zHGIx%Oc0GwYGqcfap(AKEd4NW+x>J%nJILP+@EiDI+hl|d zSA!GXu3v!w`w5(+@fmoL{*-H~cbjU|$?LPd6gVS8U26N$Yc>!KN*}XEkJW%Iga`88&>PZ5T2or7} zfZpmQJbEDvSZf+3RxB6;mHaC#Ejd=onejs%xd6WA8!YVl9g)<9xRY;zl7%~g;{Z6L z>4f?+h#}V0*oLeG5ovc}pKyGGm-N6+Syl~^Mw2Tnr$i-=I=-}|5Rm^&p#gMbFd{E6 zod8WuJl{|$^Yo3svr7L2AkN7NidowC5^TgguFP>G?C0~q6hj1B!7uR-5XN#P6Abnx zH&=fT&+vlv@2}IV$rmg#t8u@(6p8`FVkS4c5j;>0%?;TMX!)aMjC^%bB_G{O}rW~K_ZhKhmWb>fvGB1Yi6vth1ZmjtQKHtQVR4ILc zC7U&QW=nio?yL1dna*?*c%<&m5U?V-vW_^AzzWy87y zz>FWnfpU>Mu;PWRBlcwD>0j?|H$9Cvz_ho29R;VeDt%vJSAsL`Ipmpt|HLyWmGTO( z%Bpr)N;1L(3((^Yq2`ErtXK`HF2&l1^dZ7y?(?24O4rf3RB1AT@K(Tz*Xu!of1CKv z7&s2?W$2K~yogYU=Xx|KLRc&+0{39pKWceOy4RsHZ}nKu1(S4pOP|TJVE2EN?VT4q zVY>jBN7MdN1-BY@WstTtSC=)hECu&c173EFVO39*Y3!^Z1_jqA*k4urUFE$ni$1{; z1>Tdj#Toy|wS-KKpG67$AIQ8?4MYHOVIgzcN2t*O-JSap)hwhZC0Vp@s)CxMl6V&A zbBTyC*8)0X>1_7oAXxonm*Jf{%T!+Wi8gndr-$Z&tdwAsv?0x^QTLE;(LsC*tkM;r z{gaLtPy4(G3vz9}qy~BA3NSxM53}!L+uGv0ApO}&=d^T3wyGY4am3lJ-b)u|+0Dt_ zTw9Z!11rMMw(*_#90rk%pg#vM%Z>JErE!Bf8*_PZQGx+#Gd7jw+XP}zF*IaiDwb%E zT(=&WM&leNNYJ#yN~po3T%T6{}{u5ka5r ziciNoOj^*)=EBHBPku$Pe2WG!(vMW2zt^_Z>h;)ty!7L2&LDtN!pw2K1oN?D5PYWd z^~8T^+Q-KS7nKM&F-&&s9pZVUW~RiWe~o4RG^|Rrg_2acM2^$5cP!Q*xR)Jc*+?Zb z5?qvYc}L-C3lD;8+}Gp~webifzIwX!7S3{ek;AuEavWl_Kum*7G`1Q2P> zvrSp~uainVz@HA6kll8{0^M^S=0I5wtPk2!YgTJmzvGD+N=cX%}&&WbMAUktZ%#7fq#HL)Q zxx8PScq3aiMoMQ!7Sf@uA3CuFm&0nUx1{zh2sAq|m5{^pPNT{8{Rf(O;ej05Rrgsqt#bEp1M#Z8Ew%Ilw=Xe_eJm>sGnR!#@i1w%o_jOv zQ-5KFKa7p{2S5RqHF_oQbrK#TH3Ia~R;aX*g`CX9LrG=B{Snk#^DD1b_A%QrJmt8AM=II}!; zSi;$-A$dNCn1}h6;aV%IN`06bd}T~8|3U}>zR|1Og*=yuv>p3L1!lTaP&4ua1{eSA zIX<2qZzly^P89v8#oU(%5Ji^H zhiZR)O(1Q23)&>!8Om}9YHiT5Gm~_S3|tS2?wh@5y5cjcO(@>%48-Nw?t74B!B=3_m7n(x^s2Cc?*M+#W~!Xyd)5zt_Y zP9P^u+;|Rg;b$caLmS2wo7IR^W;})Jg?>#Q8oI!P7sZ`*Pqs~WLP|Ub6QEwaB87&P z2=|^qZ`+Y}#q6@Dmv6;^9hd21nN;~7cHLy64ou6gHc#H`JMpbyIyfX8o%0I0L!R0^ zpv_mg^Um-r%}ZXgBWz+O((O$~h4$zHvB70`~*>cl*{10_un_nwCdzm&&#)yiFk93CwhezF)?RQY!QSj=I?;kt&9 zM9u)AYe%#}Ak2Te-vV8OMmToz6`S2BA)Gw3cM0q^Na^pY2WTtA5M!S2wI5+&3ybGj z3yc_wwUA(yU!M9Z?s!NoH{Pvx$lNpXH3VAr*Y8y)+xMsE&{LWeSH_?ci;r4ogKMDC z0^h8}H+{DKx~$wu9}+tGW&NeOu1}}QRS3#AdpYe{$*m34hWPWU zQ6xlnRIATN1Z-oay~g#?_##30x7%6#nWNn9lg+cfq*i#g4+rhogeYu~P6I=y`MwtJ zGnZj54)uD}n}i~s(MAS;#Z)ju7}tEFYc3;A+#cSsZr2rpV^Z9(&_2S*ibu+(EQQW2 znHkE)_21MpQyxTe;Ymn$f-s#Gj&i+b)sNz!q>$AB1UY+>2{)zh^)p*dN7_f#ed$KX z_ZW0^04ySfefOys;|Y0+M(#YJXnIoUst}gAZM6tLUbDp+9~SUUhHRL%m@EV#V4$L5 zaj_fGn2ol5qPIX$4C|MG)OuJ1d<7)y1&aWqUj0eojvQI<1SPhaMn2 zG#ZiqZZ~b;vRcn&?9?nROj%`-nUo;y!=AIiek(Bt|G~cDZTA}Y(Fv^U!Vt^t9w?X4oC=hYLoTxiK&*RM<&dOMVr57yNB)=&8UjIm#QFWomm zPzF^8co5<=hh_xaqep8--}95^`CRe+I=O}U$xe@cVHb;0#xFxBOIiB|11Ni_eCsFj zDGDxY-VaZ{$VvSj#1hR`Ae4&>Dc?j$fDD4hJ%5asjrzB)^=nFc)M~?${5;7X8?q(Z z<$K087>Qti+r(i$gzY0q74-hMeBkhzLyKaF*!6U?|FLebp0mxhseCIqOkLPkKK_BgSV8 zVDt0qbEsOb@y(%ovcI114+|G^fgVrFCD3dtc&Mkzs*Y7b{;+IF{S6%`yHv6G8xU;v zKOv@3;nsX{?vTfu(>VZC_(ZR|rQhU5Yrdr<=v5b-be`RC+Poh|1+;#o&rdBYmLI|G zH=5b${S_Xy1@)YUzlDa5=xI1=q6KW#aMpQTsA7@JJL}f57(xe*Z6&ek@C`kP-P4(k z7`}FjObMX~_Fm5uRnL)*@6x`PHpZYXDio$gDo!?X%Q)7a#>y$6CFO4;HXoJjO~2s1 z-EGG_k=K92n{FH&gstxDV0g$B(j&H7%v2cgRHvpr%?!Sn0z~HpzlD-7ydV)yQRzwVU^K zr6}NKmrSi8nK`7BvL3|Hgp>HMik4R<5?rO7T)VbBy8C zummsi{uu4vto*)ET4@WnNM3}Hu*ysz3h$?RL6dKWi?L82v--3YG2McSLtpo+$7Ge} zhzZ~*WsvrPu?1}nCu5zKl~P9{JT*#YLxxDT^S9|rHQHfcyTd>;J#ti zIJl&6D)V-sO(ZFeX+YW|QJ)K2NrksAze%$g`$Y-htO{%?K2|T4JU;~(g-}kfU3Jj; zxR;bAYDA6x*xEm{fg?tS)aiMee@gH>F$N@%AsI_?zEen(?N0pCyyj?_BKME!GH{&1 zBgf`W!!D!J4P3ij)xb7*>i#y$JV=2K`#=~q3WXDsWHpG3&k!Sr0|b!dJkmAQs3VDy zJ=s|8YkHp*EFBmDM)Vt3fV$Y-7jd&3E1YQ*57()iRrPZX{g9Jmgy963u*9ZQhBu=X z9cuA?EeHXzm+n({9fH$OL#dYcV-8dPH^fMt<V=JdF2R19c%dgD4cIqo-pnsA~#ng*ZlE97XhCnwCl7+ z^U7dWmc)U_Zfwp5A*8!}g0b@o?l<4;a=NP-xvb+hLQJgb_(u__RhIh9ew@ELtwZAllib z;1pwc#Ed0a=>lTL7ux^iS0kQ3bG1E`8kyvI#%PWCq7+WT=l7j$9eO%}?qJA*u+yp3nxWy9OT!P1c=t}K+qw1_;JKj9IfPs&a@7+j zG_LgmEwPlW`Wfx=R` zceXD)bcr%K?Qi(AB}=k{v!j*v0}=#S`M@V8iEP5`nnAsKVN6xO#iJrX1w=3;%;XMAs&5u zFiv~WftWudhg7D&`N?N6tX?7OF`!F7{-_e5nEGrGk#=4t1xLdf{zXpiz zXH^gMBUqC>tY&*IWdQg3!a5yCtBFV4%o2N&?f!Inmr4dF*1sWpPyyw+@IOV)5ORXO zfzxAvNIMEy?uOFz|E>d~{Nu$TJ`L{ijkiV^Jhp@qa} z>?(K>o5;ijRiT)$%iq=6WllRX|ID}7&6n*ei~6QZqWjFU`pX-Uo1KDFWno!T+zxLh zNx9$AP?ti#F>n#XltX&Q9arfvEk(iXG{%BJn56o(H4b1o8+bc`$VFj!$0G5(E}Ik; zp9x96_6xOPSMX~a=uY@HxV^`NxPvXL-jzMw@F*u2)2E3;-kEP3bvvI^4pWawjE3>y z_vbv@CF&+Cnq)%Ro#xwWr3B9bq@Yp(GdGny@U4qZiGZJ-*4U>j-r~GZ8iqf$wV>EM zSo*8b*JK}<3J0x+KUsef@q&&0KQx_Fe4Jgh#@pDoois_KHc4aKwryLDor!H*P14x5 z(TQzabLKnecdq7Q-m97YuKld%`LDef+4;4V1C_1Mluijo&v~3ij16yelgC-q)k{7b z@9Hs?nx=yz>^Xy&fBSpB+SI77uz|pU>g$yOt?ygjpkR3<-73!Jsko?C->57aU2~mhM1AAF>Ex$;^=b$}p|*lK#zhIhMQq{)O5$3D z)W-3erl<~4ImpxvOe6sI9f)t7rym~d!6jFi*MCPG;xt;sp~lzMul~o?%F&&3^B9}n z9@cVVWYOz@;_i#Zsu`LaWm1kmn7Yo&J~O~39n5|gK}B>+tdOG6oQDK#kwSimCpj4) zt|eb=tRLjTRoz)ILykq35V}uH<`NL@nBz^H~Yz?f8^dCf1|n|C}>ACpwvMeJqTPQE`%Pm`vqr z0`!skMmM}&LJ*On3%V|#G|f3BzHyIxXOS`Q>A@vS`+jLL%11@rbnjr_H~&-D4lx0@y8n0`P?Psu zppSBy%28S8k2)qdli>LXpB!3+?o2|)&Jjk(K-W#yI08th5?m{l@}5BvtwXKohxb>- z;aSlT_@xvIUM2__`W$J3xd0ZH4paz;`RvfuZ{dRQNpQ(zQlmA|^(w6Kri1P9jR=@9 z&M&Ru7=YgVcGB)nkUdlKt=iM`n^FO0inYQ;~ zN84zEWQ=Y>?SV~?zquW@tO2ER3W{t%k*wc~L03 zyn7vy8@QRjoMQB@1G)gie+`t~@%>Ck$;FU|P~F-JF;o`N-{aP_?qOKe!bR!bN@$$6 z8r3w%ptNTic3otLSiJ#Qk`#gi*bWr+wqJ9P?W;%8TFS{*mWvp5k;BxJ*FU6{yw;Xl z39=&G?#ZTIip3^=&L%3Y?^s*7XRiP%%xA^Jjz0wQsGAR<`;QEi$zY6I2`a3ZUUR2b z+oV&JRRH+0hE@cpbJ>Bs`?`chXK2QHKMFa2=S2Ln1C2EAO}MxyAwSem54gt4VhANm zYd=#D#g^Elmxh+=97mC!6?0OCRL*(uhcuUzmtqI24(Hl#g12u9N{r3w zlo%_FfQkkuLokUa^J$R47NxyCQEvCd*tqQ~D~j1w{ZwA7b}98A@Nas9KjLIpln)qb z;ULt6I4Axwus{oxT7hNK_sAby zO~1eUl#1UDZVvEz{9C%;ydlK#-4RjEb3uT7;^VM`3i7^ZY00GSazPaN>jxMuC6@Fj z4LrbH;~nsLNAoj{xXxmNTo9cQLs8B3#+XZUXZbvzhyV|^xiOTjD>%LgFK@bGCjR|t zLaXqTR>t#-GTAm-xv$#b-q0cuhHGaCtb9I=;Oj4Z=DX_|$*ns*49eFoGIcGvk-PsC(CWr26!d7}zq0Mp-x}0KVO96JCgxSRU0_ ze@{f^EB~h8x8u)uiBS?B;el`gk&6xi#U|pF_PhFB6RN9sZgGVXQQFN_xV7oH{&yZ7 z6;{|d^1ocnsLM_;x4gF|dT{{eFS85ZObzlwvVURI#l~>Vv8Fd;>z-}KXs(2<9d)*v z{zN8U8A@G}MT1hE3(t*7>jF{0V~b%}mfupq#gSUE$$ppVd_%j*9e`^T9$GhhKGP{X zkB=_Peh~2w?bcl|TyRPgM1!(sSa%%}UQ~OnsJVWZ8}(q3$^YMq3+vDtd2#g$bvk=| z=0~SexK|~xUjcoD9XspEj=tp=za2Gib=8cUBj$Ku-0purv0~cuWpBoTy2%<|`j_N! zaS1gP0*z#Uq#>0`F$ytdlQ($31L`;~smoc3?YJOoeaD=^1LKgc!s@->GIp%nyD+875zZWY)2T>I;Y6kkd zDy+r*$>=2_7L<)sb{ZB>%*r)8UIv-HKcN~Efem)v2zN)Ggzx~F(@g_%HP!jYlq>Xq zp8h8iQPs!7xtuGUz_6AXQz|{)N1mCo9 zyxL)(wdPiN{=dgAz@My3KczGBrKOxqvS2bMMWH#XGT;(poaenHFBs7231=JeJJlZG z68C*kiy2W<3yet8D(y3IZkpu9W@G6Ppt__JQ0e)&dp$>(?p=uj28ig7YJM4Us4$l7 zB#QAeMRq%7osxO#mY7yCL6OC?t~V{eY{e%)ACTpFCTLB9UveyQ`l)TdI4Q2~H?rmj z_PRUtlzv%@MVH^;=x)QRo6ec~FAUyt#=U*mb z{6t=F*PleM7(}MnV8lL`HldOKdg=RHZzUk`)J5T-IM0t*p-6=3w9XULhu@tNTqU$y zcu>fEp1(-zQMz4$@Wd&kPP_Az+WPSS7>f?$wIA@bg3lXxt$Z>B;zSq=QB1&Eo43DN z`CnoGX!k$JN51E3lkeND6_`6vg^f|on|Cs1bNA}mvsq~HTgd?W!9eF4DSN`Z! zk*7T%IB#*v$B_|oT2h*4Eu*&HMlscDgHS5j@60mDF4sLr3#NH5$Qd+N3{h+!85;ZiZ^zL+Ulxd?U>UVDNCWdin>3|SZ{tOTmQ3YHx- zZL=GgT|Q#CF}TfB7+NR29~JN&kwcw^fw@tX9khq5Vk+D%azgxwFWBA^uBsa$u8Sv) zi0T-Ywpnw!+!J5`&8xG1Y-!XoR^XF9oaJwnK*52=A5URVSH}C1!qhYzzQW`Yv+sjigp91{ zv~wUz>hr}fjK6#p#R6$~9|7wZ+vfFEt`LA)u^*hQmsUC*4}(gKKj`JX?pq3(etFno zt64Z0Zg-Dpy6*KP`vIrjiF!L+se{P2^*p|=3JjcY%7KN|Fljrkj*8X$Xb;6G8-#p{ z

    _GZ+>Zsb?Ddr0FWbC?v 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�Yj*L6@q!zHtQhf2VJA#IpnxL726}) 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 XS=vm#khK&Koh7f!Zla&@DaV*KeU} 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 w51GIk1e{L4ngE>qe-" + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/jupyter_execute/notebooks_2_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Fixing random state for reproducibility\n", + "np.random.seed(19680801)\n", + "\n", + "N = 10\n", + "data = [np.logspace(0, 1, 100) + np.random.randn(100) + ii for ii in range(N)]\n", + "data = np.array(data).T\n", + "cmap = plt.cm.coolwarm\n", + "rcParams['axes.prop_cycle'] = cycler(color=cmap(np.linspace(0, 1, N)))\n", + "\n", + "\n", + "from matplotlib.lines import Line2D\n", + "custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4),\n", + " Line2D([0], [0], color=cmap(.5), lw=4),\n", + " Line2D([0], [0], color=cmap(1.), lw=4)]\n", + "\n", + "fig, ax = plt.subplots(figsize=(10, 5))\n", + "lines = ax.plot(data)\n", + "ax.legend(custom_lines, ['Cold', 'Medium', 'Hot']);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There is a lot more that you can do with outputs (such as including interactive outputs)\n", + "with your book. For more information about this, see [the Jupyter Book documentation](https://jupyterbook.org)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/notebooks.py b/doc/src/LectureNotes/testbook/_build/jupyter_execute/notebooks.py new file mode 100644 index 000000000..945002c60 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/jupyter_execute/notebooks.py @@ -0,0 +1,65 @@ +# Content with notebooks + +You can also create content with Jupyter Notebooks. This means that you can include +code blocks and their outputs in your book. + +## Markdown + notebooks + +As it is markdown, you can embed images, HTML, etc into your posts! + +![](https://myst-parser.readthedocs.io/en/latest/_static/logo.png) + +You an also $add_{math}$ and + +$$ +math^{blocks} +$$ + +or + +$$ +\begin{aligned} +\mbox{mean} la_{tex} \\ \\ +math blocks +\end{aligned} +$$ + +But make sure you \$Escape \$your \$dollar signs \$you want to keep! + +## MyST markdown + +MyST markdown works in Jupyter Notebooks as well. For more information about MyST markdown, check +out [the MyST guide in Jupyter Book](https://jupyterbook.org/content/myst.html), +or see [the MyST markdown documentation](https://myst-parser.readthedocs.io/en/latest/). + +## Code blocks and outputs + +Jupyter Book will also embed your code blocks and output in your book. +For example, here's some sample Matplotlib code: + +from matplotlib import rcParams, cycler +import matplotlib.pyplot as plt +import numpy as np +plt.ion() + +# Fixing random state for reproducibility +np.random.seed(19680801) + +N = 10 +data = [np.logspace(0, 1, 100) + np.random.randn(100) + ii for ii in range(N)] +data = np.array(data).T +cmap = plt.cm.coolwarm +rcParams['axes.prop_cycle'] = cycler(color=cmap(np.linspace(0, 1, N))) + + +from matplotlib.lines import Line2D +custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4), + Line2D([0], [0], color=cmap(.5), lw=4), + Line2D([0], [0], color=cmap(1.), lw=4)] + +fig, ax = plt.subplots(figsize=(10, 5)) +lines = ax.plot(data) +ax.legend(custom_lines, ['Cold', 'Medium', 'Hot']); + +There is a lot more that you can do with outputs (such as including interactive outputs) +with your book. For more information about this, see [the Jupyter Book documentation](https://jupyterbook.org) \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/jupyter_execute/notebooks_2_0.png b/doc/src/LectureNotes/testbook/_build/jupyter_execute/notebooks_2_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ab6666ca36cb8e33a28140d272fe0d5ec82ada68 GIT binary patch literal 113874 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 z

    _GZ+>Zsb?Ddr0FWbC?v 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�Yj*L6@q!zHtQhf2VJA#IpnxL726}) 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 XS=vm#khK&Koh7f!Zla&@DaV*KeU} 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 w51GIk1e{L4ngE>qe- $(ARCHIVEPREFIX)docs-$(FMT).tar.gz + +bz2: tar + bzip2 -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar + +xz: tar + xz -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar + +clean: + rm -f *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla *.ps *.tar *.tar.gz *.tar.bz2 *.tar.xz $(ALLPDF) $(ALLDVI) $(ALLXDV) *.fls *.fdb_latexmk + +.PHONY: all all-pdf all-dvi all-ps clean zip tar gz bz2 xz +.PHONY: FORCE_MAKE \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/latex/_panels_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css b/doc/src/LectureNotes/testbook/_build/latex/_panels_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css new file mode 100644 index 000000000..fc14abc85 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/latex/_panels_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css @@ -0,0 +1 @@ +details.dropdown .summary-title{padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.dropdown:hover{cursor:pointer}details.dropdown .summary-content{cursor:default}details.dropdown summary{list-style:none;padding:1em}details.dropdown summary .octicon.no-title{vertical-align:middle}details.dropdown[open] summary .octicon.no-title{visibility:hidden}details.dropdown summary::-webkit-details-marker{display:none}details.dropdown summary:focus{outline:none}details.dropdown summary:hover .summary-up svg,details.dropdown summary:hover .summary-down svg{opacity:1}details.dropdown .summary-up svg,details.dropdown .summary-down svg{display:block;opacity:.6}details.dropdown .summary-up,details.dropdown .summary-down{pointer-events:none;position:absolute;right:1em;top:.75em}details.dropdown[open] .summary-down{visibility:hidden}details.dropdown:not([open]) .summary-up{visibility:hidden}details.dropdown.fade-in[open] summary~*{-moz-animation:panels-fade-in .5s ease-in-out;-webkit-animation:panels-fade-in .5s ease-in-out;animation:panels-fade-in .5s ease-in-out}details.dropdown.fade-in-slide-down[open] summary~*{-moz-animation:panels-fade-in .5s ease-in-out, panels-slide-down .5s ease-in-out;-webkit-animation:panels-fade-in .5s ease-in-out, panels-slide-down .5s ease-in-out;animation:panels-fade-in .5s ease-in-out, panels-slide-down .5s ease-in-out}@keyframes panels-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes panels-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.octicon{display:inline-block;fill:currentColor;vertical-align:text-top}.tabbed-content{box-shadow:0 -.0625rem var(--tabs-color-overline),0 .0625rem var(--tabs-color-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.tabbed-content>:first-child{margin-top:0 !important}.tabbed-content>:last-child{margin-bottom:0 !important}.tabbed-content>.tabbed-set{margin:0}.tabbed-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.tabbed-set>input{opacity:0;position:absolute}.tabbed-set>input:checked+label{border-color:var(--tabs-color-label-active);color:var(--tabs-color-label-active)}.tabbed-set>input:checked+label+.tabbed-content{display:block}.tabbed-set>input:focus+label{outline-style:auto}.tabbed-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.tabbed-set>label{border-bottom:.125rem solid transparent;color:var(--tabs-color-label-inactive);cursor:pointer;font-size:var(--tabs-size-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .tabbed-set>label:hover{color:var(--tabs-color-label-active)} diff --git a/doc/src/LectureNotes/testbook/_build/latex/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css b/doc/src/LectureNotes/testbook/_build/latex/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css new file mode 100644 index 000000000..adc616622 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/latex/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css @@ -0,0 +1,7 @@ +:root { +--tabs-color-label-active: hsla(231, 99%, 66%, 1); +--tabs-color-label-inactive: rgba(178, 206, 245, 0.62); +--tabs-color-overline: rgb(207, 236, 238); +--tabs-color-underline: rgb(207, 236, 238); +--tabs-size-label: 1rem; +} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/latex/chapter2_121_1.png b/doc/src/LectureNotes/testbook/_build/latex/chapter2_121_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1408e1b74a00034defa230b7e3eeaced51eba971 GIT binary patch literal 20430 zcmbrm1yo#Hw>1b6+=Dv_5G1&JkU)Y5cY?bFcL*9n2n2#V1P|`+?pnA6x5C|e*Zpq) z|9jo9$LJoNajTL`QRnP)_TFpFHRoI>R8d|E9fcSL4h|0e!+QxOI5_wc@FGD%06(!| zMKuI}J#!TMpn?Sccp({o1^f~zRU;<}j z;AC%Y=VWbRNaIVb+{wwFpM~Xrf6i>@V8#+l@jVm{juP&Jgs6&J z^8TW`)8u*6$gY-sPK3hnW~jKKZ@*QzSZbic^>fHfAR42(JdCL zKF`g4Xe>&v`8&RAvnQ5Ot%mJ6rEjxH@T-(2kmhaglMlVk@=<-p!Yv}r9MQ70k-W5`U-!8-b1d^v(7JD&-upDCMdbWaLZS-9g70LVdJg+X7R@S6AlA#3_io5kfk?bK zdSXaaPksc(VTpb9d-dNw62>g4FdOl(@!Tt_;dO;3mtZmlVi_i$xVtr7{SDKbAD@`G zJ}>b-*b_&k3XIS3_daj$`9b!y)w0Ur?&>pw{JKHKY^hdJGk+yGwuSuZ)S04ojqUUF z?ChZUc*2OD_KuD^X#Ji>jcp1G#y^KX)pV;9yg!?;o-H>S9I>;oSdH+#dxeLGCwS8P z3eL&N=_o|x?#u7r)RvZ(wFlMnjZbh^Ixt0kH#U+6w7peQ!hz`f-pB7@i6O0uc)84t zZWK2_Gcz*aD`sWQ&FRz%@fsF?%vzI=ohl^rwtd56q+?-mwVSW9A_ya3F`X(<#l^=z z8JA)CJR)@ICRkEd_LFDHEkOU_B+fjs8;ryVpGiwXTDrfq=TC7l`Bcki+V^sDF)lQ>=+laac*mp;?)8V9X7ctM>u1JwbZfg)8WxVV0 z=fgKNq#9heb)*VB!b=N*>`dfdUyu08+n4&}b#_XSdu&sI7wim*TH4xd39@kUvb6jH z0y}$qujuH^d%fSb3{Ou_b7w*#rag8rkh9o0{h67bg>W~ECK&Yp7&GYk?ZL({GLi!y zk?@Nw>$ZX{+Nc%sl$?j*mU=lo*S@kQGjaFhR)15b+sdU@JazyLxwti{XxZ^I&A-Us z!aG*(NOAY>g!%DpS|8QZiAVH*Oe9o>@mNHMZk!&WprAM)#>u>YkA%=M<9jbDB{eZM z^-e+}@YZoOT|aPaY;1CRy1u1GtBCsb>xk|1w7X5|ONcc6KE}H^-La{8sT$oe8`sgP zz4QTSdIKcG_i$m_#?|MHp?=@nX;$@7xCvt}<(9vDmWTtviZB2j{1-2V7N4w7B934; z5xmf|zOdy)ENE^pdYMVsSd+BB~SVWaj+_bKA3=861`INtD4?Ag+ z-f!e4kdVibke@itbe`e=bHqq>^gWq(HWyG9#~}HbhckuXqyM+Ak$O=Y=!Y+%C|C4`O0Z2$*$N^dC0#zlMfpG&Uxa3AmJc z-@3e|u+dOc3vT;FNke1OnT7uJn1wnUw_11uitgd%5|UQmd(mbvOYw)`h2iM?Z)j9g zq~H?h=s!{ok7RTPAsP{OIkQaJkd1me25V_^RPu_C5cxS(wq-9Bi;805tt|$G{dmWL zSuan3!=JcG7InuZ#A!ibH%==~qA)VBwYo7rIVqv6{NnTH&z;@f^4(NDvP;JNAskpm zO&GuE6En*#E%~h{E6{))weU)6^SU2d)`sj_eM?xr#$ ztjn;?u&lPl7X*R@9(L46<5A8_u8PS?^S|3?ZaVbuv=u104(<(de4*K3049Y)dtBlH zoJudnKd@b1PU-dROJ_JW>UKv^BnXOyzUKKwu-;+{c(ymR~g@RNNn zlL|52!}FXxse)ij*oLo^2Qv38#$?p&5~&&iLh#e{{fJ~zN|CSpNN}f0-2-hP=Cxp> z&uP-KeHWg(qNZkFER%NW`~g@)Gp~9(&$29t*}6X&es6p89_`Ximj0cUE5%fRhh?!n zqusHO9bo`h$wXvviP3jaBj~j`6%|%ox-YA&U2#QI3lC&kRz-oprsv0Yo6A1y?u>!A zz8~wW!T!krYZq>g5jerz-dK(`?8YX3)r=N-7~f(>~+%x3M3R zNIZ|IbmFAs=ZcZvaz-;b@GGdu>u2{qGu|NL)&9osDCSE_Nk^z;Ch*ke$EhQ2BHLYN z51tsBjZ!;m>nB!4H8n{W7w)R6Disx#tDDi6a2AQdUAW)7a0lC|4?kJ$mU|}qJEa5* z`u_aH@tov6S4br3jv%@Pw58h=BPssV)6w=<1`mdn*I~DNRp+hO-yYr;G6XnoHxy`XdTHCoe#v-r3(b?g&P27Ospp z<&=BHEErgOgoTfe!X2W-={kE`Qo>hKHC277G-bIa8|_;9E|Bm&`Ka<<%P_v!bP@94hOv{n1f?-}ya}!0?V1_$F6cK1k4!+Tt0#AK$#?Wx^6*Upz%fN}> z=rM?SMMWF?vlSq?N5{l)X@-z-5smLMMTXq)|H>S*biJ4ql#-mTz8n|mTwKJ?Ku}6< z;u`t+GXt75^}0arm(r-l7Br>K!?Kdo14>AqfjHOtg{rUO&Ni{=txw6-w}1AWa0x8O z!(x-(yzhCT{_)}C!(p@FS$tp8;JnlQs^fF*s?$U*xrXpWjHWHM`LQtXub;xuxFSLH zly^Ye!T#3RX>Xb&{<=~9_nfwnr&)}NqWXb*mdks(-zI06XdgzV5x)h>FaFY+IB#Mn z2chP4@3!$`e^%VXgI^|&`T3dErv{e;!{ugg9}+#oO;&SaWNa#GiNI1$zV@{;;gHO> zxjio8^7^K@ilN11%l$Ng2~zw{|7R~yUv%`zaQ-B-qV8oKp7`-`tkj-puH6LO;`su7 z9uhaQqTM$IcfTHZw@)Q$bJ6R6a3eCkbkI3RT2%nM9ELv%3clUnUMedpwxY5$zLl0n zv9PcJGmN!{V+@O~H1zDh?r;x3?QwM# zndehm?qV}bkKuA{FnfUb4bHHh;K&XyY4YMn+bIOnWuMhiFb*iHn%y7e81n3A8qR97&-DD( zijy)AjkCw$zJxcyBc0U-g~?5RlZG;@`>-e_>I=EwJ%Qowk`FRtFJDr*B5Of$E~}3h zK861wd_&vzdtqy8bhNdH!dF&70h5H=Ivs%5CcobzQP3tHzJpbp%=zCV8F}VAs~Sx{ ziN_i#F`H1~%Qdhm@jDwNIfFTR45_KjPY|?q_7SZ9q!yw-%N@+L6BVAz++g(``-L%o zNpNz?!P(NhS>^la<8!~K&*A&vwY$4}HS&0;km`M*sidrY?-Gmd9_=1YA#B%d`yv~c z>!69Wu%_PAtcvV@?-$6#>zzqw6W@_n2P1e4P!bjr_M2==i+KZFZU_qo3J$Sw3NCl? z@zR;}zQjff=AU1qUSAU>>g%7*HMp|O*Vw(Lr42@;@QPen`BZH^+x`?&aHR$mL?WY{ za{Bpmr2TVzH##BV(|S$noBJs-I;9S0{&?n{>20K89}g2~;x!@(p{eMdaa=fQzZG;< z?P=iXk&#t=&oEVv;U~wQD(ZY?V3s)W!H*gr#b<$dn((2%HhyQt#sLx@8p2aHHuk&u;Yo0~gUMaZAA zgE_?HsR?NnQkaO_y9LNpNdZGq$mkHpS$Sp!sXOHWc7A?nP7dwgzkk1mho^iO|B=wx*Vu=dR`b^SMTkE6MCdL6Ujy9Vs=6BnWVzPNiNI0Z1@}1z1m8oNKmNm;&RRvgzq-2@A;i% zYEssqtQ8LJ?&#>P>7u5xgzm#6x!`_;9*Aev`aoM`J%R%bZE?8EsE`?+2{#(H>X_V8bE-52V zBG3BoR^+IXv-ZXSM{9UZDy+BsF0RQJt9PI9h5GNH3Vxw)e`Z+IB1~0;7VR@zGGurWKt$XV^j zv?ia9Rd$0qX2oP4mRfGowUQ(*5nD8tv9#zx-9yGzHqGc3X(SGLKFfZcIp18SiTP$9 z2`}woOvbgY+oJd7Vh40$e7t=)MWDwyx#i)!1XNZAoWwf^2OF?LM9_zK$@kHF$$g7V zEcr4_$Mc}-k7kAG3?$}1iGkLJol`~($BvY@>owj1Zt7uruEHZ;G%;R(9DAlliZGuj z!f;Hk0xln-53ZQ9_+tQ(<84Wd$&fh5Rk8X%qgeC{KRU99HlE7ENz2I4v#^)}%0WU> za(roN_;s3BJ2+jp^Y@bz2jQ!gr{vyeAK|KP=DQ#6Z|m+(281qdFMS_fabCRWaehP9 z*-IquuaRPF>Rg{-+Ys<{OW>+j3A0>;%w}CdiX_1V!$j2sSHGV%n*5-FB%8~KcfCYn zKtKPozo1Z23iaH|BsU_1K|br@hFwB3V*{`C?~{8i&0n&aD~DbbqHz>*oKZ3gF1PjI9gyZ-ps_benbHb%yK;N>5BCiXHf;ZJMVTWMRM z`2C|(7nPSsH#avoQ)5SgO2F)trbSwqB^9Bhqw{^%I;Xli_Ul(9Zo4JH^=5Dl0?^t3 z-3Au}!p#!8f5T!lH_@E=eAnE()atdoaK80g>$UtP>)qM5ViP2myla2EPxpnarofqA zg4K$YRmFp!so#Dw2v__2*ysK0P3)X44Vzq}WUdQs0*8$q&EB`>78X<>%k7o4q*hr$ ze%w~Qdi83NkzM4t^M%(2qkcwK)>A;Fxw-KINcwkL+m42g?(5u~7Fcy5=*(1|>nNDW zhH^OxTnVPGk={CE-EF(_E(Bbq4S8R_Z?meINtE%w`le~RjF^B=jy#~A#iU=P&sfN? zhgr_?`lFeAy58f{c%xB#{MNsC=I+-w1(SwKva^cUr&}Y@v9a965Vw^th`mEYG}P3A zVC$7RY)He{0%K!p0612Lc$R;cmq!88ih+?)v&Bbx7A-dW^f6_ftFwNPA*jb!)$C#tqTQfT6!Q_9 znbjd?_IjF_`|zmvl*Y#51Kd$MfBPEFdo_sQs*A;Ebx%Cv-+&L8sf_DPU49$yeOHVN zUX=+7W6d&yo4hV3j(lZoV~mgrb+xbj9$5YI{(I_{m0d)}10U)x((-I1 zPN$TaV;W>SH5Sak_e=_N+h95aF%};`_+rh*+=571DX!&Y&q^=N_knLj@bo*xvj6dZ z`SBliHYeljC}ndp*-%_X){gyi&37arRs!xj?}b>%@?Q&Z4+_l~u?NV8ac1d$=F<7h z)jx)aXQtSN$Xd-g`eG+-j{t!oEkxbJqh8$}UdQ`<3I<>e6T{HZ|IY237Z3f&$;ypj z8FoGT3_C7Ay;bp6cE|Z(Ss;Z#V&;F_YI%QbA+X37eA0Ph*)}5T50>Tk` z;CZpXdfY>CdA=Hi#UWv=;Tu_Xd3JnV=OSEWy=5==+AML`{n%c}kx6pvQv_Yq%iPV$ z%y>e8cVV$-a8OqG@y;>g0Pq(73@rE?3aa5jGU4=a=x4-P5P5K?Tpa52lL#;%94y1V z1y0_@?~uz|*G`YLnmo8%7oFoEF1}=c0EMlGfS?HomNfOM)6d!D#<|1|?yHgH#`^tV z4X3O*LVr?qwB*G*fb(Yfqf#<54gi2HhJ?9UN?Dvn(sAx+WWHBjF~T>Kwe8>ByLpH? z9sR;=U53b1EnDg*7M18`39U)fK5Y8~hHJ>w(a!Vn{!+8aM!f8j`kBJ%?de^7UgF8$yMx-kZJ6uJLi3tqN(OURcEikYEksu14f1L+5&OT`?6jy|mFI9gGYN-#S7tqoboc0Mc&te~!xQxQT|19bKvxfh8szNvP}_$t4i5 zAN`G6dbgez6lA^xyF%qGCh>LbLMUMtO2N2;8p3JwrTO{DNkfu4I;15{7sO`6$y9uN z37`J#*V6@c6mbJ_U=&X#52M$Wo)Z=asv$U)o4QMZ1N3cw}+oH zE$}XjWmUx~FrL#Fd@Inl&?ID9<@)lQCJ3t?@o&5Mm1S{I$)=X6lij2`TC;Gg3`^7c zo;VO<;tjlfhW3^p4wicd28@8<0ZSJEALx_IBT;ptt(+dg%91@u$<|6+fY-&W86g^i zT9H;)xyb-4q1V#!3o#@%bh#Vzj?B!LsUExZH#avLRhD?_`rcfQn}Z31IDuGV&v*gj zZ|8GL!fi9xDMjJk8A9Rn-qDc*6#vFUiChxz-oeP{34lLbTW)prV}U$mNPO(>w&-(v zK$or2=*9*+9HZJFO6uRfD0m?qZ4o|auK+699AF2BmwhEn!H|}mJUHTW!7*rh8X4hx zvy;2NwRKyM1`ajxb;MH-B(_mSO+#&PO`Qp46XHP3Iqo9R|HPd%#u+Y`#O*F__Le|4pOkyi&4-12G_&QVSz*A>yr&-#f^26VqF+>A|r#!#>Vz5 zCgw9>#G^pwcsC`Vx;nQpp&(-N_;7D*YU;2#NHqONvjb>6IeBw^Y*A@cei6bqUjfa0 z^f!#fkdydzU4I{sP6Mn4YCIhlfXYZi^gNlYrvKEPg%uFxH8g0$AY;F21%37}kFzl; zRlsid2!kb-I9Fj7p(LIE?HkJZMB0PX_+GN?D~o85-t+$cH9T*9ika8m-kwkAI3E66 z7sxrLE5I_KF%oakJ9-C z1q>iLGgnzm&`wQFam|{@*Z*u*XV$4@Er6u_(CSkS>B7u+rzX$wH? z>+6H36cS1S!}_DP_Zz~mDLGCX8XEdWtJ0jIKZ*U7MchylPXnaLk(ZR?FU!u)$^pP{ zihFqp!U1M+Fph8kCx+}p!}`WXnL!6a^F>w3&yKqd){^JpMjIkUr)`abX+pGREw_cad3r@f^oa27cOlOUxFbl*Lkx%6u&hT> zv<3BH3;-FIhmdz+_@DP@*hn#YX!KnrgVp8bG0xA=&n_;W*#AeL+1}o^Pa}RqN0(k% ziR;(jFU`)*o^# b8$0IrV`dSlM9X)*W|~06c99C_ZJ)li!3N8uk|(2sTJDP0KXQ zt*kmsE95kXngQ_ygr5rMJvDCYnbu%*61ZCMz1({=@mKC8`*T%c&CSAZMY@vX<9YYb zzHoR{t^z#Anl$w6`SUWcQvNqkYBjAm25TILgha;1h6yN+$=F%wEK{IN)$=}AUGl!v z1xjPxZb6}Gr;tZS)d1Mec?AV8xw-L2ORQi*tFlhjAv%P)r1^#c;B1&01zq3+-_Zo1 zP$lj_xuXjCt+qDFVdE(Vs0`S7mc2ND?ka>IX7Y{kvIy+M|0_~!@*HgI8k{-85ktbR zHC?w52f^WsT)PYsl|<{$e|~CD-3SX;q{uAbBY3I*ZyzQ5>0uY;<$YyozIswI`#r}( zuP}Pfnp@9fhvp4FDi;@*^-QV3+z1*=AQp#cYp^;Xuz5Yqb5d`CaAc`n7G6rNx8h$4M1M*!!KQ(nw$GJX71!`$DUwrV{<;&W6bWp zKLK=EYq#+8k}nrQGTV8);cI7~RV1E6yXnTZ^%8;zXr}8=!~{r75J` zINGc%pI`r%cR5uXcoIFZshnJ08(I!`cVF`J&sn7v7c)nA4{ok@7!EG3Fc#A|uN@?_ zh@e(&DNe;G>V_5+w|~_Apzx7O=v`320~P-Jl*MIbnE}6Fv*xSVMui516W6$bCD)GL z4>}}QuK&I}%-N$kI5^~$l;qab#DSVk9?0VL^|I|0W$k z{qNt=(o)z--=m@jobj3OI0{x5rrPG^pCEA+Fs@!)J6NKRQjmADImk2Lx)+D7AY+0E6yQcR)}7H z>OlR}7e(_%vmD6y2Q|yk2Yyb@Uk%WDtMUP2t|3B<+0(J|El+Fp=^q*5MYUL}f6{zZ z;1UszKP+X$3d$Tl2PlH`#po*6qQ&Y@R#*7Bh3DYRW&+72q_~zb_UovVKUvPa;W(dC zQ+p=6RBn{KB@!D;&f*NhdWrSH?KvgWOB4tE%#Al^GsScB$p&hxM3y0!85oC8SDyH_ z!G-2O6&t$dqsL>?SOOdG@pVgn4mMLi+9^TCkpB8o&M*H9d{+gg#_TV{6R*z{3xz`X zukxEI-YS-oeM^}USgx!;$g z!=9-=DpN77exfhi+HTG(+A?Az15G0pUx>*HBbN|KPjG$>4T$HhY&3x$NYk6!9${1^ zGECMvz-}p3MkKpLUKdR!k@2t@Rp6nln_JUKKjW(<9znt6^F4@y6S5&Gr`%JSCmJ}T z_)M;L>KKTeQ=TDOHh2Z)vdcYHj^=>b6yYKpM+i)$5%u+^3M9-$#w=;MKd=KZB*J{T zyqq1m1TKRJ?Z*D@in@{}uC9hrih^^JPrNA8*ZlDsMWxFEHWGszD%(c+kQrWNE~?Hv zFb<%@mzfO2VjtYD1YpXat#(mQpovDtXJYR5wzN0to}Y_)ANY+$3@aAC5l>;7y8L`# z{mpN3mUBqg?-gya$YiDw&14{!c;eB~&2&xkMzr_4Ph{)Cvt_~tk?ij(g#jBxv1MZc?M11;zVI(%? zE2qj;Q1%Z4s89zm4zHGE!e)7V42qre2bE z`!+w3k4cw~*uAZF;qGy}7}XJ~KI-ke??IyS8qQtaKq(#_Rn+r5;DQ3KXmdDaKpazu zdX+{}0u?!ER@1zq0=8>YMF)m?#SbK~cO`zpE|f6r()wlojyY{YhW^*L8xt_6$4jtz z9JhuIYUURUNfo-wsSQ0Q+S@6OFtobUP0Z>W(l?VY8zXu!K>a=qyWOFe7*!zLNCF`I zxCxGcjBIeY)I`ef^c7quxgX%s_FWoSFd0o*hs^!|xSMMR#HQ?&dkhX9VpL@zew4z5 zU6Bim0LRLi(aC<_eFzd2b6@UimB|49lG_@3EVFJuEH-IrX}JN2Qn!SQ*-@RXW>IKRHWUSD7T6nPDm@Ed(Oq&G19J158CVf}Li{7dNVB*GhktX9X_ zgfGg*H2viqVzPnAkM#W`Bd!XVs_N=Js~sUQBxg2~YO>Vm4((yWACREXLQ0#+%>0i& zyf_au)9Jr_94(FoZy@Cy&^?Q%aVbQEmdNG%-?6e*Cq&?1ym(Q!8cb3PUO<*l=Kbss z8{uY>U8V&w0N8mfm@J*YM>)|mjm~%e;J{xl({Sl_M~QONbdmg; zAv<>+280&isOrpo7uGvCNX^1xcl8<>yOmQeV20QG?`ja3FAK{f3=Y`uW1m{M%^tWk zU;RY|w(eH4Gj$qrV1sc!*88>dU|?;>3kApYX3t=_PwMwzuRmA>eFeZQ$3fQwyN)`W0Mq? zuM0o}t!QT*`+jDTd7wCp$=7%9z=9gtcA9y>VaZ!0@&K zHwnn!u_@T_Lts6*9UCSlCN@gqbMx@ro|K9WBHfg8R8YF(kAX0%rv5Y_E@ekwA^b!+ zFN{fG4Vpg`TJ-MsrgB&AQ>(07>Lq<<~8t^%NttaC2X0HTz$zauVyohhJ!Y;NU z?O6NwNIpy^M{w{(wL{Ozg2ME5EHavqGjAOMZJb6h;R!`8)mX36>9Z$~8p4O}FPBFy zn=geTY^3Rde?b5Er~^~~qz+T$?kEz{ZQFFNruIhz{;iqW>-lP%wcF)K;h#U3wiXo9 zgoglQ0^r}O$itdQ?P2rndwF^Co|gAWY+65lxOgxQ+=ws?k7{cMXXUq9EvNtH6k{(( z{xIU=lPZ3+FN=m_X^52;tS&D8^!WH#Z(e|(KNu}(tW>K=@N&U%!DZftnwA!$;nDXV z;`=i#Z3L8g9Q(~v!&E&+KY=~5c(bl~Y!04uhtnQmj{T991=D6J zy=ro9J~)1`_6dgX5B|HlX3TA?e3~3L4BQU`qh<$~u~m~f4ImT(#n83$3umG?qQ}*0 z2=FGZg}zROJA)^M*%$y){MSB~nU!@7YH|rpO(L+>bv}3D0SJz9+AsDsKj&S7!NW^n zf?0qCxuqvt=Ru-E9+n})Ss3UVGEBXEuR=K{jhU);EZQGm%gFr4#8zoHN(f=O0SqwP z`UM~wtL>IC-U8o-$Wj2weW z?q5-i1O;BOVDXpc#!_14Usr&e@MX`5i<|od(DG$YJ4%2HdgoTVFb{m4z!}hrgBj~q z`R+ON;6}^x{652_Icgt@4@Wt}8A}?YfYB#n zCljzf?6CX33ty?xvO&wo6?3{Z%m+~-X?(j~C-Wzpd!A$R4Kj{pbZ_pe^IAC16GZ^i zMMdG?y?Y09>zF6jmf(uZno+LNNY9;z)Ikm+=4+0=cj%hxBc*7Y4 z@(D8(t2YA5&YT9Bl5Dj#@3r$;rNif9uQCOLPh44;-v$L` zB{ZoI$M?bVh2Y88vr14hrZ&eWp7PJY71R(gC!aQ^s_7!#3Mye`|!Cu z6|5MKH>f;%AKw6H1AP*40DUfo7(924LdPtDN3eVA=lNwc2d_|(q=k>>GW!F}PYx&9 z@YbAW5m6+h#QSN^r(=bG3i>$C$tM}<3KAccl{sj*`fz)J<-FUNA-8P&my+exBB=b4 z9;t->-6io!qo?&r4fa){AA)2g`TL#x;NLF5}>Tq8kxp zz2|icxP8qV6h!WS0S8rdLPB2xhnYr&DLUXv;c}V}m{pTRDpLkvlq)bkxB^1jVpmt!?iWOIMNs=f4<1Hc z2nyxsAI%#8!`3jr6|Err5w@U}`bFlThE?<%6gJ@E5A$zsJhFc&nV6XD0`Bai^tIHy z?jP>#yR3s>N(BW4(g$-@GB$ISA3*g%pY65m!VD_-K%iZJc>kV~S|Y83k%uQP01?w; z-x1Ippt6U1ub_~dnfat}s{iLJsovpXm*sF_pl@Q3@vjq9!IO&kBm<@>MdaZ)B3aPg zp?#NF&ig+cW$#|yKVwD*=LU-CzAZ&a$Lhl#gaS6)FTRzF|DCKvJ&LGq(6Cvduz^fW zbSyP_HhCB~+X@gMmtb20dgQ8&BSE&Zy4vHwh&@5@!otexbdH>yTwYr{Nq-XIDBR8~ z07mfumEZ(m1Hb?X7*vHXP7R*DH?(z@zT?8n+j^LAc>|8`3`g6ASHY*}FW)-tD zb&jv?8jlfN7e0sF!bU7Uh43)u0;8z`2BziZo!P5vw*F@v|1)K2#GTYstzD!xXj%bA z!s=Sw%wVOVL70$`0I;-SyCsQ*cbo@QrDievN@gAa-v2^rE{>dsRFf2NAEi~J{@-ZL zTe*33RT8i;xi~pTXJ`A&(!9IDQi8kM(|_y-Ytw7Vg&9Zh)vxGiac^&-rlux17C2ap`10B;MJNjR|f!lpJ^Y-(H&^;~Z?-rxg}P&#YvGX_@X z5XBrbpxFR|EC*~a;5*@3!+Dl^fu0W=Cp+6A9WEYTnccE5(D6k@MZpdaO%ZU#AtLGn zTN@mt5%iw`gSHZ&Zo0!sgd|B~V`2d!%^)b(N3qN^)6U?7pQwPm(~6hDXUbhV_GO0xf%5AE8rLHtjDO=L1RE+9Yu zf6<)(BRT3HvTU-M54urK9hH@pd(OS|Pq%LF>bQ>%|J!@Fc9K;Czhsp3geunvcdmnn_mU#09zN&RcIaC)4KlZ)-2 zUuc)3f4(*FQR*V=8*0WM++X6pqfve?*TjHZX}jy{G%=N%r5`fr*o#ruBRUQX3JIz3 zxxe|0M-4!RLw+hb@5ev}7X&rs0GL^Uug+XX4fyfkEr`q$xvRSP(Mj}tZ|9eLM@A^d z!eU}#U`a&+PBGm1rmFC-81KhtP2Bfij^0-elmyc-j^Z22~lcxl|OS_O&$~a1g)z3uYV^{ZebrAq3=kK3WJc>=s-3arVhF^6_R+J3PR+zbi zDnEhC3SU)K)q1Hh0nBuSx3skM)q$OF*zBLj=c99T{otbdfK=cNaQnm4=)U!(nv9Gu zz`FyG1x~8(gZs;uFX8Cu=vJ)sZ|Cy%UWk2to6SEDs0OhypZkg`ad0zn@%M6{RDr?& z#mTK6Wh3Nn1TK52JHxD5$OgzlrUS7|z@z$6L!Ot86zFX5QOxuKTs& zADhQ{e>l|LU=~G1O`0?8v5?3@M@2=YXJBZz=5`$70$h|NK<9TGEWR0_@hRd*3j|@Y9BtJ-|Fh>>HtYy zPlz8hmpS!s5?g=#%D@nq<8co^1UJiPF2gLYUH)X8{ob^+O9EW{lE)sCp8EzKKC{ky zU0pKR=0 z6REzJ4+3NU7VJCF_2yZ0YJriZ_IC0w@Kx1bZzg?^m4!K;(;n}(1TSWc2+=x5zH+5D zG{63P-Ml&S-#Bp?KdzhB)Eo=FrN&$bfJmV}(UQQ;;o|w!c*pR4poF@Ylw+q# zE*30xu;M;}ny0gKI~>sYv%r!xBJwEc3an&bF&u!%uYXns8o7=E^!=!<9X4i8&CPw0 z*)}ylKL8^06)0|@=QG-NOgVndevccJ6B}|x}B_n1g7(xl-IshXl@j=2@WvTz`>e407eqj^93K?fd;=b zk8prZMuhx2XsD>Zz$kp6PKE(y5Z0E5MNG_JtOaO(^HqT@8?vZIF+nxDsciEoY}wXCovE)NLPXg^gb=tJBu&*c>zH$)$K1bOxwBr)7uA} z@wvew5QGQaw13{0Ri<;Sh3rrAI7(46%H)0DPMqBq;g?Vz*Pl;@yt~@?gxVr(Q|oo@ z0C1wuSkLLnNsg*LK)x*bIl&JkK@k)PNsgwd%FpIZ)ORlRnHb)Njk7og=Hz5vTO29S zB*d!&+Vnl&&B{J~ldGx<($?^WNIZLkuW1;Fg>5H{?!P4$lz>v_b=+kT(uE3a2DyL8 z@}k7=IkcTBcQBtJcC?$^G^vNFr_)e_$OmsNv1(E??|#zv8Yqkx&O)#x1MZCSlt@L_ z&f1Four;=kXu~doH{Gp&Hv5dBKN^W1fS*A0LJ#YD>G%|dDlmGt${nNHyf$4V-6Aq( z!uN1$|4j?2HTHHeddcH;+G9ptT>{19RZsLs;LEsTnp&7yZs7NMW_>e=AKyNv=GDhH zd*E>S33XMV;~$CC^Aei<`*$FXOsuS=9O%R(SO{R!`J&48sr22+8xWDB20jfxA+l!c z3${7v3L|h__P#t`k5+(fl-qmKPar{&-+T(|P;8`7^=fr2eYaHpkidkaoKrnYWGmsz z@J6H5kK%q?O7M2S;x6s+)YnTV3dDNyY}|rPoyV%eiJtTl1z*-Vz8S+~6z|fYF{d4Z z7tyAj_X|KysUT#i`6^R~bGbj?uN6_>%p{Fb9f-k{6yw9HQT|YJW6U;u8Zic1+O)V!g_o)6TfV?Z;Eu$iA;A3uu08q=le0 zE$GebIW4FZr!P7bRG-hN^}R2zeGk|Odko7Wfk9?~r9~FVV&IS9=^%&KX0fpoF^-X^3AJTiymGq>*DoP?6!mpC&Eue$58%9-uFnI;` z_ce&}ADo;xMecVLyj9b%#N2dqmCO`Go!>pa!H4^4dN0hVu4pnGb6b>C_Aw}K$UXI{ z^~=-26ah$6tx@U1GG$;q<*PdRcjk1)TNh~$1If9U<;M11-`NT#`$k5#d>;=V<*ck2 z0m`CKD~y4irCh8G%WzP|Q~S}G!R%ArVbPN<=K?1)yZ+fiY0!6tl31VF^^0U|Ay_iY z=f@RjmM{PW66iz)K5l^bbbPKi9M;OQ3?(GJQW#v3jfcbs2ETmgV^1hLVz+kl1~=q2 zJ$)!(Gk~QGP@b+L_{7B0dU~k}sJLR!Xr~~ETrqhSx#sousm)Ox;yStC{ND|Xm2aM3 z{#oabA^ZYjcz$kbCg{(AvDx#>53$|dlCWl9A0J`R`Sp|PMC>a(Bwt?KJ%1^yfOjpm zw)#afB!4r@WOKWz;16k?JWaQ?1f-FjgQIV75Y{LK{0Sd*bOvF~y&V(}fFm{78P5ii z)PRS+*dSI`gFIJU=YX0rg<({mRaYR&W`{(P8I7je$Y7g{wP%?EE>o#2VDfqCj z0;Mn~c6aAX0mn_Ah`PoU!~=>O=hnBUl98WpJ~b7sT^m2$eQ!1jGM(G~IfSM*FdhLx zFV_Jxk5^=yUsVG44a3`kNwYjkNAg5I(|${QjtQ{7Ci9hH{Qx<|#TX5X7~5O*+S=MC z<9bw2zAK>+?=4Kwp*PDvf7_eBr;>0=Nu^n=97@kqaO4466EzxKn23mop79-)DM}x= zqq1E6<^}$qk7PE`S$ZAuDGR%UWl@f|yTHXBvv;O%S+A3e<71(6*bmBZ+s0$bl7r>j zrAyjBlvJHp;aB`qCsR;l%MWR<_Ebat*b0ucYHY~>E6RMjIn-gi>l-ZsNT$2HEs?aN zzkygC$}R%cClkEFk8aN(`N={Bf9lH5LXga}P)dMP6)?#nqx187g&u)e0dzp=;}H`l zD>(KSeid}P$8T=C?oW)RLX|PRH0ihV3(S4IDcH1j&DXRdkJlq$<@9`Ft*x;GbwE4n z3&R{m48%&#oq*Q}!O9)a&Hn^!20xhWAdbTn&AK`X9ZGzss)`4yNm}6~G5<9EdNZj*cKpeZR@g(;Wu64#yvX@z4?y&IrIh+`>b*W3l65; z4tT2=A`q#%0ZR8|J1e3bC=?M^djGmGDU{&>t-%T0fmDo)VeRc=K9>#4$5|Bjy+&!u zx$>XSwm<&kP4@u{TM2j_Kq&-sQ`9VZFoGPtQB<>JIFc#^L(njD4X_b3ABWqGj*Yd! z=yIS+K*x-54PSy5s#zLh=5*rZFOzN=BFV&i84&KX=&Vcw(2MDX(}|9fTPsl+ISSJm zu_?hEfsk@90`}MS-RX!>bxmdE_c}i?->wRbVB-V-Mu~T3X67~&nq$|R9}Vm~pn|8N zp&3lzK=cFtV$e`}7Yu|>7*7F&J(Rb=Qw$s$DypiWIiGD)t84K0uP0WB)yh2|UrR6K zUfcu}44*FLeR-Kh$wl_}#bVQISH&)xe(N2v?_+uGR_D7@3(gQ-y?IyYf_vYV(A`mo zIKl$BblBYh^>SuFin_THZ3vJ^rjFv)>0^Z-LsaE`?ry+%UtNCHn!fsBj{ zDC!u%XqDBwmqnl%ye`fG-dl?iV$?x&h{N*GEb(0g!lPQn$1hL{N$t^77hevt+#klg z-y>F0e@zhVmWq%4?&uGifAlz#v@{hjeay;l75^wDWO>*%Y&!j_77hiJ2K4lwTZVx<=&DELp$&{aWXM#UJ}Acm;KIxH zc+-jmDAe}S3Pieax3R(9&pHC&X$WMHQ}3a)y;BpLf(DsGD)eo({BBgJjfOyok70bD zdyxgzPoh~T;#UaCe`O?4BRb*H+?7hRm0Wn zPS!sFAr=9~SocIwm;vJ>c#;GN5(A*MR7y1oiL@XWF)|d;ikdwk7>CFrLS*MZn92^|8&E5iVl371NPqS<9 zJ@E7cRwoSN641uFzazU!@hc0{!=n_EEKbJg@ME0B$+9HdV*54Xb8(#~gZ*cuWm`9M zqyes^OO}&(f_^moG&i z*B&n3-LZ)o7`Ci$tpx}51y`I>t$5vWIy*Co{DVDmfa8>8$}b!gmcYW+2kLMjj2+J~ zuW~v6Qo4~V4tQ$VYBn{2UTr(~U6SX{h7@7YVX{K~CysT0=t&!uM|xn;PIR3X&Y38>fg}=FW>64166KZ; z6wW~y>hXrtx^+#G&|bSk@$a3RN(@$e%XfxG&;|q1aYR3Cx+HgZcZY*{gM?1IWVhTd zOLTZo_`Jyuo<8X%Qu8KAcrdH<_eTf}M$R-8eDZgE6-QD>nn5mQ`r#8Y*F}h`d3>_} z3$bT`A43SX1E@fA3t&@W9V5WsnTAVXKb+j^(wHa0Db_*xvROp7{kwU_)AlYr@~6!Z z9Rr6l`_IEBJZd?UDx5ou;PEaCdF_lMB55$YJaE;VMyK5c0ze9$@-bWcIjdwBl`i=3 z&hJ;6O>T~9Zw4Y@=V^OElv^pi=ppy~4ju#$m7FZArZyc&fSeh4m#twk z5Dv<;iaNWx;4=;};AjwjXJv`o%#@0{H|YUBJ_LhI$)%yGClRQdbV)P}2M%R6b4?!}eMiTNg2F;&pw8_A%f}Z; z)u?W%wX{W6!^z3XTM^g8B~_3arRi;)2;L+q&22-ci?j=}v)=)ubH^%7KKS1s$8 zZao*QJ{9@@qmgU>hB}SIvpH;gTym?}aartU+gwTrxwN9IOSePGFfqbuLPev|XvZzB z8cFCvrk&Hu5z@-YU7;kxR6|2kMr3KGM$+WA&v*A9*dOP7XTI~E_kBP2=XrcM@_6TM z#oY{{cNAG;2d2-(#l^Ez{=&bM*V@>`L-8lmF4NfUpnSNUbe6o11JC?YBs%eVLLUar zE{gWLVtdBi_gaK0xe01J)y%11@~kLBZ#(jmbH~NQn7D?%tc~@!u_;4aQ}^vD+YS zJSF?M+#3C5nYeK}K*!iv9C}XlUOL4DEHjF~U#FksR~Fbl)S9vH4(&U0pZun=SdD-x z_Q<%bFNPsBwu~E{R8+HO?9qx-H7LoE&R)VmrW@B81L-z;$3V_P&uE^=LyDav(%|W zEoVq-hEBS;BP`Y&H;f$7FwaqEFy?x;F?O7XO-EE{XkQkWmMY_TZqozCq=;?o#7|6@C_cGdSaL?1 zMA!pT30+-XVE)kqBJ_n;cwN$zOKaMbPb?_c4*CG5>{P%3>I5UC>Xx|%R6s~+dqGPzuzjj!3!gKG>DfzWB@jyZEDyi<&Hmdq#DMqPcW`QZmm+2xNPUHU5ip0YpMN}y%hW; zxG@o?kvc6CXJ=(KgOc*w2L_D9uSO}Rc5tBjNHV-HW(xbNV@#O!uET?DHDYL~wIvG7 z-IR0(8v?}aVW3Y)YMFBWd$u`^P}WK}dqAL_Te9B#UW-@;p@JB$sk~%pkU;ntxiCFI3c+BMhtBWJv`jKR(_eLX|LX%q$gq&qf1_z=*olKxBD>BDFadI4 zeYGVuCeDS-&nnQYp38b_*+RXr${K&Tbd?|016Vo+K3(~a8==WXf^FavcRX@}5W493 z!}DTpu1(luUC<0Ne2OHPK(u08Zj2 zznuE-#&q8VAcF*6`S$SeaO&C~sBH-b2Gp8Buu9L!P^ITa+J1lJUSM6~T+P#CIQ4u~ z3$CZ;y|5zq7KKuwM|!h4Up=+^rnHm9QeR)t*VpGNT$oj4PfXAW z1R=&&4l%Dus0seAI8>&YwEDO?Q9!$9zkD={xq6$&OGe9s zOO7;hOEk#q@Z7UU7p|anbW&^S(kYS5+N1hWPM+q0)euLp3aZ-@7iWh%d!w}U9HR6c zpqk;TNe;|UKPxLM=er~<%j;-u&o;;F2O3zg$L**>!P-Dxiaxc{df~{(h|1t`77oh5 z@n{NIyv{~T5CBYO=4?#dx7zb`hukc1K|>#MvcR(8P9a9$x@DpGTG#D-Pp*xJc6K?v zy}MR;UwJ0mZI6-*Bb(|#D}^F2eeuz^gv{K~qviJh!zhSv&MxUY*lsF*c$5z9Jv(MUVuQk`4znK1)v2v7q==UH9La87xa}_~| z=HPdD7b(26Y`Gv0|Lw3jub{dMeq49m@`Jy3Tgq$NAP6}v`b*T>@4gOi3fW$`W~*Xx z+t%TRwIO15!`AYyh3#GAn@8;pt!<1g%z1gv@|-<&^p35qr3eP|=jS{Y)<&2J=7;_W zauiXJIj8Cvh3ogQY+s13o71qbKA%T))7LJNolTxKS(SpA^Z^5_^@&u!=9>r7!UsA6 zKZ|Qw6jV$vJjNOoY(B}?h?K6kJs)o!mFoRK?TG1x7sqe5X&;ceFHd}bHgCUrARCQf z*%Fyy6T^|b;7{)OZZT%w=)AT5jhVGD{y_~1$;v?sJ=PHUT?lfh?uG*qf_xdK8HPU| z(2yaoFW(nJ5FgeWBINXb7AnLuewP)3P=s4J5YZ*3r=Kubn_t^F+^=tOLDYsE_mR7R zxA<0Rw0l)mn;GGMedmH733C1Tc?JZL-uvh9vN4=gakHhfm2Wa~oBHBSN8dkTawCjj zi>tOa*R)EklW)F!GE+Luqia=rz!_KARdBO*kJ~0bwo9;TMaijR;PI^4-Mj5m9hr7p z8%qwQTgT)AC*pmXTASmg3mxZ%ZHgrEA9q6J98d_IDVvpW+gcm!Vvp1bZE-%k5=}ddJiMwOn=3f@Ew->}t#4c+)oSEj zdSRiOhK`jt+hmVvZif%$5k8x*AF(7lp%)bu7cg7%nDPFt6|ibnZqo$q(6sd zu)sL1GfOj3hBdyty!;_(5GySZ~Cbtex7*sYdE z>NzWnynCeRvwSQ_to2wStaNh#pP=B$LlhZFNirewGAb#TuBfSn$G9zOZghEUM0V!t zV-!{=l|3>R7wstzpOxt?w$M;e@Za2=-O>xSooHqeUl|SSDX~dC$fJ{naUCM>fq7wL z#L_!5HB3J~Ig^o*5z1CrTs$o&xf(*nAQU(2v9)F`61_SXw^}%sYG;{HC3EhHLzt zH&@2l6}Faxw$hZI3rwb`#a?XQYbYuPNUVRC-uOZ$30v6Kk|?); zkKNKSG&B^kod}izW2!3X>$GL-`tnV2Gg^%xyQsTwl+5kZ&Z^~GKpRDrDn!b zu@AZ}^=lQIM+@Bj90yT834!lg?DMFpF_Mms4#G#l$ep8jz&VpGUBAkGb-HSEnrBHx zUq5!egyM+6rL{$zqWQ@aCluUeGh&6RF+9mit*q3m z3uJ6-a$n?)7P2}YscZijbDkZby;*K6x9kN`G!lj#FFc{^59ixQFwp9qF=XaG^ zL*PjHw)gb(OuA4pinPZo>28Fau^xR-CE4ahM$O^UIw_*9?dDd|)7y)gsAzq<>PvYf z#lju`9G&^?#;EQg>VSNRc3OX#NXaGJ=6z(I_+>~;ghtWXi7;h}7C57Pw?7_&gQhlQ zc`dhc)#NOjMvhK;p=nn}Nr|SkFI9NkWc#~EM>_iYvLJvj@ZSE|yol>v_-qjLVRk7K zHX$_0pe}H-LqlJUjkX1*OPFuKoMfPy4)Rz}75$Cy`|ss8br!xA;+rQ z*yMNS=w=Grd`(M8I6vp8W7?S&(lxDAgw6!^w6L&{9>y;+>rDycRGxyh)5^Q$?+&GP z8eWUof4gQaH`n$F1JLeGYonb|XO7yEfPiC9c`5e&>W-JNd~gwE1ZC<~6TwqT#7mpUvuXN=={ zh)WeX6bl+23mW6DjY$e&C_JbgnKRF=Z&GBV^*6_{P`2Drg^6lNOM5XnPp~MoehA}S zXjf7GFugGKeW+UN#r1m+0s`84^i#~|ZfjEU3$BgYYtOF?AMQ4?sO3g%6!p!Gij>bZ zBrOfNU`pO@FmDbq6Dnril=X6#5-OXDiUdk@cs52kC0kmP6~n|A2eL3*4!!*wb{r?g z=laVWOreVPRC##Jm)K2r8h`uz^4VF#2LtYFX4$%B0wovoQ~3qQPtY7!KR$Yujnzqv zNlm@z#G!}vxS6>sW5iavh`5+DORqv}q%H_8bt#vgS`W0fmFB^70sxt;KbgzN`nrWT zk9HV#v9mE+R8(v!RdPc?A7BidLZVzy=lobh{*?!8=snEL&dpm1eN#0vyGKlvp7M3s zX`tIJV(hZCbY*@0P2s^cvgQ_pAn}NoZfgnuk-YNt&!YZHaM_9YIo~zzY+5b z3T9SR=wegzc`w7!@962_D(;P5 z-?AlHcg2(Fb{8u@khy9RAQNR`JePi?Y_|QApkiU+*3$Cb*{uN=a>BH}(I)=tWMk7O zHh_}NjeX}uc^isos-`kB3yhkWP<#ULsB?L4q|M#J;ULAUekxcq@9Oc*H(%xoGGCld zNJ;s)Si{{AkLwi=ZQS^X>+Mz3pqreFw>$WF^kC0Z?K?*1AHKdV%F6Qj40RpFAh5L4 z-A1u$+S=Ol?Y|ktx~W@KEJT=BZ7kk>%o;oU@w7cxc(|E3Z3-pj3e0{h?bu#l`Xj<^ z)QII!UMQ2nyN4}L&KQV@ja!%4cIi48j*K+zrI0)pn{O-fgY% z68j5QCd67UmSQg7wer=vyP+$USa@K?R$ykE%bxLS5-IcPHkKHr*qIGMfv=eb1>;To zit(DF^P>ie#+hl=8)hcyXF`S z>sG!ap5It&Y_6R?q-JNASw3Jd%n;hu3&6LNNp~+b@}7x9*5+DKlP?)^i;iW0?AG>e z7Eeb7GFg31!5Co;Ne}{s^YHuQGta4zZfU{YhwT=*tcG5w%sCFE=Fn=~budPPZFX7R zx+J3EPlDW{l2f}y0k6=zhMdu1r$X`qXyo2mh6^F@dCoH&?wI4U+MPp7hKTzqT)g#| zaY>2Hv+@CrT+sVYw>F|UjDZm2Kk|ufx^nZz5o;eq;R1`;QG3yAd#U4;kJj8M4|KqW zi7`<-U`d)ePe)OW*p=Hndu2oKDd9!q+k(ERe0YrE;k)QIgkX4I=r3M$%{3YiHyR_W z6dV*c%9RI&vy*F6-@e@?Zi%=Nvjj#B;cLg16qS^A2zgfC8?ptS^w*r{pD9(`5!h;6 zZ^_sR#Kp2!;0r6?pGjdjxX$LQ?5Q``Rm~mV&dei(y|&Dr0W`bzXBHJnZLe(1+Z(AS zrsVr~?eEov$GJ~K#uIEPynj#0RdaIhLt13P;tXb<K{(e;G^njCKL)kXuquYp0TlV zFe1+M)sz1>t^BvkB`8HiVW3Hc>*Xxzr<#c(C0N}Ty6*S&tJqHBTF6BYWY~i066@;) zc6wbY>EB(}KysbLr;SK@2XSpiHuq)7d}2J_)!2^CgU4x(7nSiL0xUH|B-bLOBV4e0e zhT?*b)eu!LyIQSmTvgdeL`ATpNJSZQugh?g_)-*F^v`*bPNFpn3bjs7`*<}m;<;sD zsw_tT$fVkba<#W=L)&faq<+g}TWX=(n!TtZG4lFQku&h?$(}-dSTdb5Ct{0wY3-7Xjk6}R>lLK_^b(1hwKaf8Wf`fBk^T+zlKd! zL19GoP_stWY6reD7nK0`mp3*a&g2#+M3;Eme?@cb*?w%*;NYZywr^Vyqi9M(0;_N| zR^h6Z)ytlqtNP)fyV%~Eo+6;U7zj3uc;&{8c$7K<<>*Ck`wni)Nab5O_sHV2CNcay zd=v9`LZ|eWCY9OXOsJvNd&GI4cJ61=I0sYnMwO$Nvo60+mal;_1snDwOo|4Oy`B^P zBtk(_an}k9ckc0xeo%+sPbCTkAxtP!UMi4-(6# z$Ft~%$WKYj{5Vlop8X(>oCpuE9i6LDF~>U&b8$a1EMY~qm|3WfvO^_dEmDOD8O0}4 zIYM&uBbiYBCC~1LP=WKMcKT2uMCR~*USxde_wrzOo2tBkPnMct;sV@37tqQ4%2n!Y zk{8tf&nN0nP3PYoKGn+porn}y#8`8sTWBvXxQVW~j3G_~q#**=r%z6Mc04$+r)0ms zJX4SyWDUp+)@A$bBgqI{5XKW~#P@EZ$Bx0Ciz)Kgbk#f!T9Y&7AB$UZOOqkbQ+Y&? zSSq*W#~HkFg4QbSWyoQvFKzJj6|z4v)`h!F$~wu(FHdRgAei45^3wIckWfw?a#P=+Qh+FDz|#aK2N<`95yZG>nljU5eH-UkRKzw zzK2EU!yb#_snRzwVSRnC5lY2R+3Vje(JuS$HEmh2%XUucWnR7FXDigK*E2Kwa`4&z}NNOv~Hl#E;z8%3i_MpZmV8H*Nc z$oK3SU0PGScI~(Vy|{CM{Y+oCp`Rc>zhM?>)nIJP#)A4bcKk>$x=70?p%Xm3qOMTa z(Z>GW?Q6uP;x><%DpoV`pkbh1T|fp71jRnJ5OF4?`A{*Mpwo`~C3DmM8Z@t+x_kCv zxVTyqE(8=fFPKo$^T~sn*u1`ihkPoa2Poni)myP zION?xOY|2?=s%-^zX2dnO?I%`r%TU;8y8J+=(JQAhf=-#IgppdqkWb^9_7DT<5yr$ z`$%>-=(l-UZ8XehZr*2d{Bp0re!iM{^R&TEBE*wmE5a#ZF;HIMV9k=d6G5J~82jlv zjfLx0u26d{OZRNQ*D-0inp%7FOvOT{wutqp-_4iT=2w8=O+PcunS2S#uGDzzo;i>c zRO^D6yP(#L*@}cUdCY&{6jwh4l6h6Z`E?LKoJT|C8l5&Bs@8Phkwc1~RG7Yr0dm~& z(x49B2ZVnZ1Cn$SXLihTfpHt*H3@ZETADlwDTTa5mB*HQzjXt*xH_oG6FOQfo693X zra)G?xVgit=RBg9?(p>(c*7In6;IZXQ8Q&hVTr}NDkvzVOoPB}e9;u^3NmKTO9NkQ zv`EL$3gr<2g8UVvSp#BRyEtaWA>((pG^=@d+SF07D0LI@!W67(JswjaESH$@c^R|t|w`23QvF+b8JO(y=G5O zOPh%5B1Rf>e-xf-3$*YUXl;-L8k96+?6M8&u9}lf3T_G&A6CvZ{_*ym1?#>(7^(@GlKCK}|Sm|{T(PG)7HD4Fma|1hWP#)nom2kLEh;rpA`gOkfk_9KFawpY%_n|T;qz^HL5%P` z1kgB$;pgA`<&~we_cBOxYzk^>YH*ZVL2^t)B_Uv;sG3;VrI$HBKhMOyA3()pb-!Gl zlB;N{D>CoT;MOjhfH-<4=9HJB^gIQX3GrV)Ij@XG+5t~nu&n^A0|T*|KO_!v$ER3H z{e7I+Z!eyhf$X2F@n#$@72SD;1)GvvS~a( zhZ(a@u9S&mQ;HT*15xwSwJQh`XKKvNEvfHGf&iv>hsggY7v;ZPBYyX0{^L<647N#! zZr&-@*S0J6bO`c3@E0h}Fz+~=k#$$)^r7(H=oe*TIy*KgNIWH2w{?VjP{W7k#C`?S zI!Stahe5w71)-$y_9yx>MIz5Az+v9!a~}7eXYuJ&>Nr_hxG>#i3PP2ABoQK<`8$4c z|AC(}Ir7A7ih+=$YGNs&RT0Ot6R}p`F85+%0sz@sTdzf&JkRl&ei+Vl`x`GZe&bd) z(FVjbY8)S}Src&)&ZTQ*J5kU8Hzq{>a}nDdz|`>JxmWXe`~ryBTn7WvGcqm;4mc+2 zvJ*))ia1@>Dv<`QeX)XR;P1Kr`pr) zBX=Oe4clZ~ynrg7@PH;3;*vu-<}OqQ#oMro;|KFnc|BY4t zyAYwi7+=lZfI4RU)}!(pD@`7qukVrYdu+P?q=w4?fb2f;cTG%X=0>pf+cb&OOS+fK z1~M2MX+l)K>7>bpqVruSL_W=9Yg0gt1o70I2Z8+U3@h7YcJV+fD2@vYxgPy9V4|P? zEn9ppf52r{9CUjZa9FLhash?be>PhCR}8UNBekoe{-q9oo{aqwhns%IveF*%9RWsb1eU zBII=~u=-!@YAI~qDc>RshYxwyf>X}5P5@DE{aVmLK}5sjhw6HuOR(Wd-v)jM(##2> z!cW;CCKaNyr-vBcvX6`a)d4wb^amV1zU0$slgW>GN@V}YXm~@4dV|y*URTsKitDG% zBCA7!w^cZG5H`vb8(#H21K>k&`dM9nC@#WXB$5FTqoZsPqp_HUX6Kyie<_clcmLJR z|LY_DcZ2Q!`>6HBWzdpg?fp~u8^zbUtmDysh0^pAVPybg=UF0I_kI|eOUuhs+Sbz& z>Leo3Q(XE(9pA2MRwsUEMN(El?mWPcr3C-jX;6r!O48V2{U&^VWS|i~Gy}aHzny~u z>(cmt%s@eI0^0-pl7KoBGuyW>g?Rht1at>(nfinXX;%8Vx4$E&Au$;K((vyJqd4;y z+HLBO?)Sgw(fF~ey-oW(#-kkwo!S=0&2i^Y+n2kz@8-`Vwv0+efWZ2#>KIq+H7XN) zd`MAi#y(;P;&}$how&>5dswh->k7PeaN-&pL*c0VWLHlzd#t|%7dY5e=kn#aAj!>F z4NEI<&^tpWe^Rg?HL}Op)Q=iWOVFM!N|>9Ob$~Na=BlrvqVmq<`(Lz=jIVjU?i?b3 z7j}ZyA9dbB*l+_C+Mv@H=RIpgQ%o>=rGOAi?J{E=hj(Xd=BHG%yDPP*iSF~iuje{V%asRw<;zMBB%R*j;q! zv-17g7@Y|j-4xeTD4^yt*IKdG4=Bm*`EjcI$0l^`MjM??_oTFH8vb~}RE=t^` zXmO@L6K!E|{`%C2&ux`(N~0TZJ#@&H<&p$x@-gkYqc%a7bVsAhl2J1rVuw+W_fB(M zR>zawlLH5M4hC#18(=NEO6UtHe)NOgCrn%c^KAN&;DEfu(mK9r8X5$yIypJ1o8kg( zE1SSugJutT5u4P+h=_xX;?Anj%459!Vb99!*5>T9GX_3r%m78X1FZ#hlIx>+rj;JL0Pz{+~m@wM`)(E!s| zyPMooz*~ims}N`WCqdk)l?2<4MzlRedvG-ZjieHr@rxpDVZ0|^Cle~0PUgHiFBixV z!Umln$C-jMU%mQV^b8{_f?J2SgDgd!5}8owCV^UQ)aNJ7Rbo#ubt#9@OT?h=%=;2( z?J+z&Xo?Aojm?Dy3-PUW{Ob2=YP%2YkrSoUIc;sqlBkP(hcMAXFKnGO;5b6*1}1Vw zW@a0%crXW;TaWJQPKDHHG|Nm)PcLk)&6)z2L+x*H?u{KL>DZ#}FB*Nt#(Hcz;rdEc zpmoQ+YOCDlT7{Ab?i2>o1$`#%&CPL=>qFGf1TA8q-RB$6#&1b&jW8dSy5^ly)Gjvf z0I31>_{$Wlj+WWuTH#v-AU1$mo(?X0lf>FxEaU$=1y*#tfbBXs!Dv9Wi~Rufte}=YwGL*_L?K$+C~7T5n(I*S9Br6@=7T~f{OwOqdB>x=z-*R2B51A( z7CCH7sgZ%KirP<9 zZLL-9wu++z7$Fr24NnBHo714vVIRjO`GKdqJu6T(di4#pdmP%;AUe1b=sq77dz}7J zk1j0&t!J%YY(?y#`k1WDkJ0np368+%n?vORCncEg`fCK$3!ycn6YWs4DcV}DlT;UD ziUhL)(Zfs`3DaH55El&*+=^>?nV?f+Q+Wf_h=Y^L pWmrRAl!4l0IRy9nzt!F?asdV}G6RjzmjP@b3Ky_4Ip?qc_CMjh_;~;T literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/testbook/_build/latex/footnotehyper-sphinx.sty b/doc/src/LectureNotes/testbook/_build/latex/footnotehyper-sphinx.sty new file mode 100644 index 000000000..b6692cfb8 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/latex/footnotehyper-sphinx.sty @@ -0,0 +1,269 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{footnotehyper-sphinx}% + [2017/10/27 v1.7 hyperref aware footnote.sty for sphinx (JFB)] +%% +%% Package: footnotehyper-sphinx +%% Version: based on footnotehyper.sty 2017/03/07 v1.0 +%% as available at https://www.ctan.org/pkg/footnotehyper +%% License: the one applying to Sphinx +%% +%% Refer to the PDF documentation at https://www.ctan.org/pkg/footnotehyper for +%% the code comments. +%% +%% Differences: +%% 1. a partial tabulary compatibility layer added (enough for Sphinx mark-up), +%% 2. use of \spx@opt@BeforeFootnote from sphinx.sty, +%% 3. use of \sphinxunactivateextrasandspace from sphinx.sty, +%% 4. macro definition \sphinxfootnotemark, +%% 5. macro definition \sphinxlongtablepatch +%% 6. replaced an \undefined by \@undefined +\DeclareOption*{\PackageWarning{footnotehyper-sphinx}{Option `\CurrentOption' is unknown}}% +\ProcessOptions\relax +\newbox\FNH@notes +\newdimen\FNH@width +\let\FNH@colwidth\columnwidth +\newif\ifFNH@savingnotes +\AtBeginDocument {% + \let\FNH@latex@footnote \footnote + \let\FNH@latex@footnotetext\footnotetext + \let\FNH@H@@footnotetext \@footnotetext + \newenvironment{savenotes} + {\FNH@savenotes\ignorespaces}{\FNH@spewnotes\ignorespacesafterend}% + \let\spewnotes \FNH@spewnotes + \let\footnote \FNH@footnote + \let\footnotetext \FNH@footnotetext + \let\endfootnote \FNH@endfntext + \let\endfootnotetext\FNH@endfntext + \@ifpackageloaded{hyperref} + {\ifHy@hyperfootnotes + \let\FNH@H@@footnotetext\H@@footnotetext + \else + \let\FNH@hyper@fntext\FNH@nohyp@fntext + \fi}% + {\let\FNH@hyper@fntext\FNH@nohyp@fntext}% +}% +\def\FNH@hyper@fntext{\FNH@fntext\FNH@hyper@fntext@i}% +\def\FNH@nohyp@fntext{\FNH@fntext\FNH@nohyp@fntext@i}% +\def\FNH@fntext #1{% + \ifx\ifmeasuring@\@undefined + \expandafter\@secondoftwo\else\expandafter\@firstofone\fi +% these two lines modified for Sphinx (tabulary compatibility): + {\ifmeasuring@\expandafter\@gobbletwo\else\expandafter\@firstofone\fi}% + {\ifx\equation$\expandafter\@gobbletwo\fi #1}%$ +}% +\long\def\FNH@hyper@fntext@i#1{% + \global\setbox\FNH@notes\vbox + {\unvbox\FNH@notes + \FNH@startnote + \@makefntext + {\rule\z@\footnotesep\ignorespaces + \ifHy@nesting\expandafter\ltx@firstoftwo + \else\expandafter\ltx@secondoftwo + \fi + {\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}{#1}}% + {\Hy@raisedlink + {\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}% + {\relax}}% + \let\@currentHref\Hy@footnote@currentHref + \let\@currentlabelname\@empty + #1}% + \@finalstrut\strutbox + }% + \FNH@endnote + }% +}% +\long\def\FNH@nohyp@fntext@i#1{% + \global\setbox\FNH@notes\vbox + {\unvbox\FNH@notes + \FNH@startnote + \@makefntext{\rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}% + \FNH@endnote + }% +}% +\def\FNH@startnote{% + \hsize\FNH@colwidth + \interlinepenalty\interfootnotelinepenalty + \reset@font\footnotesize + \floatingpenalty\@MM + \@parboxrestore + \protected@edef\@currentlabel{\csname p@\@mpfn\endcsname\@thefnmark}% + \color@begingroup +}% +\def\FNH@endnote{\color@endgroup}% +\def\FNH@savenotes{% + \begingroup + \ifFNH@savingnotes\else + \FNH@savingnotestrue + \let\@footnotetext \FNH@hyper@fntext + \let\@mpfootnotetext \FNH@hyper@fntext + \let\H@@mpfootnotetext\FNH@nohyp@fntext + \FNH@width\columnwidth + \let\FNH@colwidth\FNH@width + \global\setbox\FNH@notes\box\voidb@x + \let\FNH@thempfn\thempfn + \let\FNH@mpfn\@mpfn + \ifx\@minipagerestore\relax\let\@minipagerestore\@empty\fi + \expandafter\def\expandafter\@minipagerestore\expandafter{% + \@minipagerestore + \let\thempfn\FNH@thempfn + \let\@mpfn\FNH@mpfn + }% + \fi +}% +\def\FNH@spewnotes {% + \endgroup + \ifFNH@savingnotes\else + \ifvoid\FNH@notes\else + \begingroup + \let\@makefntext\@empty + \let\@finalstrut\@gobble + \let\rule\@gobbletwo + \FNH@H@@footnotetext{\unvbox\FNH@notes}% + \endgroup + \fi + \fi +}% +\def\FNH@footnote@envname {footnote}% +\def\FNH@footnotetext@envname{footnotetext}% +\def\FNH@footnote{% +% this line added for Sphinx: + \spx@opt@BeforeFootnote + \ifx\@currenvir\FNH@footnote@envname + \expandafter\FNH@footnoteenv + \else + \expandafter\FNH@latex@footnote + \fi +}% +\def\FNH@footnoteenv{% +% this line added for Sphinx (footnotes in parsed literal blocks): + \catcode13=5 \sphinxunactivateextrasandspace + \@ifnextchar[% + \FNH@footnoteenv@i %] + {\stepcounter\@mpfn + \protected@xdef\@thefnmark{\thempfn}% + \@footnotemark + \def\FNH@endfntext@fntext{\@footnotetext}% + \FNH@startfntext}% +}% +\def\FNH@footnoteenv@i[#1]{% + \begingroup + \csname c@\@mpfn\endcsname #1\relax + \unrestored@protected@xdef\@thefnmark{\thempfn}% + \endgroup + \@footnotemark + \def\FNH@endfntext@fntext{\@footnotetext}% + \FNH@startfntext +}% +\def\FNH@footnotetext{% + \ifx\@currenvir\FNH@footnotetext@envname + \expandafter\FNH@footnotetextenv + \else + \expandafter\FNH@latex@footnotetext + \fi +}% +\def\FNH@footnotetextenv{% + \@ifnextchar[% + \FNH@footnotetextenv@i %] + {\protected@xdef\@thefnmark{\thempfn}% + \def\FNH@endfntext@fntext{\@footnotetext}% + \FNH@startfntext}% +}% +\def\FNH@footnotetextenv@i[#1]{% + \begingroup + \csname c@\@mpfn\endcsname #1\relax + \unrestored@protected@xdef\@thefnmark{\thempfn}% + \endgroup + \ifFNH@savingnotes + \def\FNH@endfntext@fntext{\FNH@nohyp@fntext}% + \else + \def\FNH@endfntext@fntext{\FNH@H@@footnotetext}% + \fi + \FNH@startfntext +}% +\def\FNH@startfntext{% + \setbox\z@\vbox\bgroup + \FNH@startnote + \FNH@prefntext + \rule\z@\footnotesep\ignorespaces +}% +\def\FNH@endfntext {% + \@finalstrut\strutbox + \FNH@postfntext + \FNH@endnote + \egroup + \begingroup + \let\@makefntext\@empty\let\@finalstrut\@gobble\let\rule\@gobbletwo + \FNH@endfntext@fntext {\unvbox\z@}% + \endgroup +}% +\AtBeginDocument{% + \let\FNH@@makefntext\@makefntext + \ifx\@makefntextFB\@undefined + \expandafter\@gobble\else\expandafter\@firstofone\fi + {\ifFBFrenchFootnotes \let\FNH@@makefntext\@makefntextFB \else + \let\FNH@@makefntext\@makefntextORI\fi}% + \expandafter\FNH@check@a\FNH@@makefntext{1.2!3?4,}% + \FNH@@@1.2!3?4,\FNH@@@\relax +}% +\long\def\FNH@check@a #11.2!3?4,#2\FNH@@@#3{% + \ifx\relax#3\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi + \FNH@bad@makefntext@alert + {\def\FNH@prefntext{#1}\def\FNH@postfntext{#2}\FNH@check@b}% +}% +\def\FNH@check@b #1\relax{% + \expandafter\expandafter\expandafter\FNH@check@c + \expandafter\meaning\expandafter\FNH@prefntext + \meaning\FNH@postfntext1.2!3?4,\FNH@check@c\relax +}% +\def\FNH@check@c #11.2!3?4,#2#3\relax{% + \ifx\FNH@check@c#2\expandafter\@gobble\fi\FNH@bad@makefntext@alert +}% +% slight reformulation for Sphinx +\def\FNH@bad@makefntext@alert{% + \PackageWarningNoLine{footnotehyper-sphinx}% + {Footnotes will be sub-optimal, sorry. This is due to the document class or^^J + some package modifying macro \string\@makefntext.^^J + You can try to report this incompatibility at^^J + https://github.com/sphinx-doc/sphinx with this info:}% + \typeout{\meaning\@makefntext}% + \let\FNH@prefntext\@empty\let\FNH@postfntext\@empty +}% +% this macro from original footnote.sty is not used anymore by Sphinx +% but for simplicity sake let's just keep it as is +\def\makesavenoteenv{\@ifnextchar[\FNH@msne@ii\FNH@msne@i}%] +\def\FNH@msne@i #1{% + \expandafter\let\csname FNH$#1\expandafter\endcsname %$ + \csname #1\endcsname + \expandafter\let\csname endFNH$#1\expandafter\endcsname %$ + \csname end#1\endcsname + \FNH@msne@ii[#1]{FNH$#1}%$ +}% +\def\FNH@msne@ii[#1]#2{% + \expandafter\edef\csname#1\endcsname{% + \noexpand\savenotes + \expandafter\noexpand\csname#2\endcsname + }% + \expandafter\edef\csname end#1\endcsname{% + \expandafter\noexpand\csname end#2\endcsname + \noexpand\expandafter + \noexpand\spewnotes + \noexpand\if@endpe\noexpand\@endpetrue\noexpand\fi + }% +}% +% end of footnotehyper 2017/02/16 v0.99 +% some extras for Sphinx : +% \sphinxfootnotemark: usable in section titles and silently removed from TOCs. +\def\sphinxfootnotemark [#1]% + {\ifx\thepage\relax\else\protect\spx@opt@BeforeFootnote + \protect\footnotemark[#1]\fi}% +\AtBeginDocument{% + % let hyperref less complain + \pdfstringdefDisableCommands{\def\sphinxfootnotemark [#1]{}}% + % to obtain hyperlinked footnotes in longtable environment we must replace + % hyperref's patch of longtable's patch of \@footnotetext by our own + \let\LT@p@ftntext\FNH@hyper@fntext + % this *requires* longtable to be used always wrapped in savenotes environment +}% +\endinput +%% +%% End of file `footnotehyper-sphinx.sty'. diff --git a/doc/src/LectureNotes/testbook/_build/latex/index.html b/doc/src/LectureNotes/testbook/_build/latex/index.html new file mode 100644 index 000000000..de49afb2f --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/latex/index.html @@ -0,0 +1,2 @@ + + diff --git a/doc/src/LectureNotes/testbook/_build/latex/latexmkjarc b/doc/src/LectureNotes/testbook/_build/latex/latexmkjarc new file mode 100644 index 000000000..6e36b195b --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/latex/latexmkjarc @@ -0,0 +1,22 @@ +$latex = 'pdflatex ' . $ENV{'LATEXOPTS'} . ' -kanji=utf8 %O %S'; +$dvipdf = 'dvipdfmx %O -o %D %S'; +$makeindex = 'internal mendex %S %B %D'; +sub mendex { + my ($source, $basename, $destination) = @_; + my $dictfile = $basename . ".dic"; + unlink($destination); + system("mendex", "-U", "-f", "-d", $dictfile, "-s", "python.ist", $source); + if ($? > 0) { + print("mendex exited with error code $? (ignored)\n"); + } + if (!-e $destination) { + # create an empty .ind file if nothing + open(FH, ">" . $destination); + close(FH); + } + return 0; +} +add_cus_dep( "glo", "gls", 0, "makeglo" ); +sub makeglo { + return system( "mendex -J -f -s gglo.ist -o '$_[0].gls' '$_[0].glo'" ); +} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/latex/latexmkrc b/doc/src/LectureNotes/testbook/_build/latex/latexmkrc new file mode 100644 index 000000000..bba17fa6b --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/latex/latexmkrc @@ -0,0 +1,9 @@ +$latex = 'latex ' . $ENV{'LATEXOPTS'} . ' %O %S'; +$pdflatex = 'pdflatex ' . $ENV{'LATEXOPTS'} . ' %O %S'; +$lualatex = 'lualatex ' . $ENV{'LATEXOPTS'} . ' %O %S'; +$xelatex = 'xelatex --no-pdf ' . $ENV{'LATEXOPTS'} . ' %O %S'; +$makeindex = 'makeindex -s python.ist %O -o %D %S'; +add_cus_dep( "glo", "gls", 0, "makeglo" ); +sub makeglo { + return system( "makeindex -s gglo.ist -o '$_[0].gls' '$_[0].glo'" ); +} \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/latex/make.bat b/doc/src/LectureNotes/testbook/_build/latex/make.bat new file mode 100644 index 000000000..94bda2139 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/latex/make.bat @@ -0,0 +1,31 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +pushd %~dp0 + +set PDFLATEX=latexmk -pdf -dvi- -ps- + +set "LATEXOPTS= " + +if "%1" == "" goto all-pdf + +if "%1" == "all-pdf" ( + :all-pdf + for %%i in (*.tex) do ( + %PDFLATEX% %LATEXMKOPTS% %%i + ) + goto end +) + +if "%1" == "all-pdf-ja" ( + goto all-pdf +) + +if "%1" == "clean" ( + del /q /s *.dvi *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla *.ps *.tar *.tar.gz *.tar.bz2 *.tar.xz *.fls *.fdb_latexmk + goto end +) + +:end +popd \ No newline at end of file diff --git a/doc/src/LectureNotes/testbook/_build/latex/python.aux b/doc/src/LectureNotes/testbook/_build/latex/python.aux new file mode 100644 index 000000000..8eeea7c4c --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/latex/python.aux @@ -0,0 +1,180 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} +\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined +\global\let\oldcontentsline\contentsline +\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} +\global\let\oldnewlabel\newlabel +\gdef\newlabel#1#2{\newlabelxx{#1}#2} +\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} +\AtEndDocument{\ifx\hyper@anchor\@undefined +\let\contentsline\oldcontentsline +\let\newlabel\oldnewlabel +\fi} +\fi} +\global\let\hyper@last\relax +\gdef\HyperFirstAtBeginDocument#1{#1} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\select@language{english} +\@writefile{toc}{\select@language{english}} +\@writefile{lof}{\select@language{english}} +\@writefile{lot}{\select@language{english}} +\newlabel{intro::doc}{{}{1}{}{section*.2}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {1}Teaching team, grading and other practicalities}{3}{chapter.1}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{intro:teaching-team-grading-and-other-practicalities}{{1}{3}{Teaching team, grading and other practicalities}{chapter.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.1}Grading and dates}{4}{section.1.1}} +\newlabel{intro:grading-and-dates}{{1.1}{4}{Grading and dates}{section.1.1}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {2}Possible textbooks and lecture notes}{5}{chapter.2}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{intro:possible-textbooks-and-lecture-notes}{{2}{5}{Possible textbooks and lecture notes}{chapter.2}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {3}Teaching schedule with links to material (This will be updated asap)}{7}{chapter.3}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{intro:teaching-schedule-with-links-to-material-this-will-be-updated-asap}{{3}{7}{Teaching schedule with links to material (This will be updated asap)}{chapter.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.1}Week 2, January 6\sphinxhyphen {}10, 2020}{7}{section.3.1}} +\newlabel{intro:week-2-january-6-10-2020}{{3.1}{7}{Week 2, January 6\sphinxhyphen {}10, 2020}{section.3.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.2}Week 3, January 13\sphinxhyphen {}17, 2020}{7}{section.3.2}} +\newlabel{intro:week-3-january-13-17-2020}{{3.2}{7}{Week 3, January 13\sphinxhyphen {}17, 2020}{section.3.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.3}Week 4, January 20\sphinxhyphen {}24, 2020}{8}{section.3.3}} +\newlabel{intro:week-4-january-20-24-2020}{{3.3}{8}{Week 4, January 20\sphinxhyphen {}24, 2020}{section.3.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.4}Week 5, January 27\sphinxhyphen {}31, 2020}{8}{section.3.4}} +\newlabel{intro:week-5-january-27-31-2020}{{3.4}{8}{Week 5, January 27\sphinxhyphen {}31, 2020}{section.3.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.5}Week 6, February 3\sphinxhyphen {}7, 2020}{8}{section.3.5}} +\newlabel{intro:week-6-february-3-7-2020}{{3.5}{8}{Week 6, February 3\sphinxhyphen {}7, 2020}{section.3.5}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.6}Week 7, February 10\sphinxhyphen {}14, 2020}{8}{section.3.6}} +\newlabel{intro:week-7-february-10-14-2020}{{3.6}{8}{Week 7, February 10\sphinxhyphen {}14, 2020}{section.3.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.7}Week 8, February 17\sphinxhyphen {}21, 2020}{8}{section.3.7}} +\newlabel{intro:week-8-february-17-21-2020}{{3.7}{8}{Week 8, February 17\sphinxhyphen {}21, 2020}{section.3.7}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.8}Week 9, February 24\sphinxhyphen {}28, 2020}{9}{section.3.8}} +\newlabel{intro:week-9-february-24-28-2020}{{3.8}{9}{Week 9, February 24\sphinxhyphen {}28, 2020}{section.3.8}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.9}Week 10, March 2\sphinxhyphen {}6, 2020, Spring break}{9}{section.3.9}} +\newlabel{intro:week-10-march-2-6-2020-spring-break}{{3.9}{9}{Week 10, March 2\sphinxhyphen {}6, 2020, Spring break}{section.3.9}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.10}Week 11, March 9\sphinxhyphen {}13, 2020}{9}{section.3.10}} +\newlabel{intro:week-11-march-9-13-2020}{{3.10}{9}{Week 11, March 9\sphinxhyphen {}13, 2020}{section.3.10}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.11}Week 12, March 16\sphinxhyphen {}20, 2020}{9}{section.3.11}} +\newlabel{intro:week-12-march-16-20-2020}{{3.11}{9}{Week 12, March 16\sphinxhyphen {}20, 2020}{section.3.11}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.12}Week 13, March 23\sphinxhyphen {}27, 2020}{10}{section.3.12}} +\newlabel{intro:week-13-march-23-27-2020}{{3.12}{10}{Week 13, March 23\sphinxhyphen {}27, 2020}{section.3.12}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.13}Week 14, March 30\sphinxhyphen {}April 3, 2020}{10}{section.3.13}} +\newlabel{intro:week-14-march-30-april-3-2020}{{3.13}{10}{Week 14, March 30\sphinxhyphen {}April 3, 2020}{section.3.13}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.14}Week 15, April 6\sphinxhyphen {}10, 2020}{10}{section.3.14}} +\newlabel{intro:week-15-april-6-10-2020}{{3.14}{10}{Week 15, April 6\sphinxhyphen {}10, 2020}{section.3.14}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.15}Week 16, April 13\sphinxhyphen {}17, 2020}{11}{section.3.15}} +\newlabel{intro:week-16-april-13-17-2020}{{3.15}{11}{Week 16, April 13\sphinxhyphen {}17, 2020}{section.3.15}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.16}Week 17, April 20\sphinxhyphen {}24, 2020}{11}{section.3.16}} +\newlabel{intro:week-17-april-20-24-2020}{{3.16}{11}{Week 17, April 20\sphinxhyphen {}24, 2020}{section.3.16}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.17}Week 18, April 27\sphinxhyphen {} May 1, 2020, Finals week}{11}{section.3.17}} +\newlabel{intro:week-18-april-27-may-1-2020-finals-week}{{3.17}{11}{Week 18, April 27\sphinxhyphen {} May 1, 2020, Finals week}{section.3.17}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {4}Learning outcomes}{13}{chapter.4}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{intro:learning-outcomes}{{4}{13}{Learning outcomes}{chapter.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.1}Space, Time, Motion, Reference Frames and Reminder on vectors and other mathematical quantities}{14}{section.4.1}} +\newlabel{chapter2:space-time-motion-reference-frames-and-reminder-on-vectors-and-other-mathematical-quantities}{{4.1}{14}{Space, Time, Motion, Reference Frames and Reminder on vectors and other mathematical quantities}{section.4.1}{}} +\newlabel{chapter2::doc}{{4.1}{14}{Space, Time, Motion, Reference Frames and Reminder on vectors and other mathematical quantities}{section.4.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}Dimension, units and labels}{14}{subsection.4.1.1}} +\newlabel{chapter2:dimension-units-and-labels}{{4.1.1}{14}{Dimension, units and labels}{subsection.4.1.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.2}Elements of Vector Algebra}{15}{subsection.4.1.2}} +\newlabel{chapter2:elements-of-vector-algebra}{{4.1.2}{15}{Elements of Vector Algebra}{subsection.4.1.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.3}Falling baseball in one dimension}{16}{subsection.4.1.3}} +\newlabel{chapter2:falling-baseball-in-one-dimension}{{4.1.3}{16}{Falling baseball in one dimension}{subsection.4.1.3}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.4}Our Python Encounter}{16}{subsection.4.1.4}} +\newlabel{chapter2:our-python-encounter}{{4.1.4}{16}{Our Python Encounter}{subsection.4.1.4}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.5}Average quantities}{19}{subsection.4.1.5}} +\newlabel{chapter2:average-quantities}{{4.1.5}{19}{Average quantities}{subsection.4.1.5}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.6}Compact equations}{19}{subsection.4.1.6}} +\newlabel{chapter2:compact-equations}{{4.1.6}{19}{Compact equations}{subsection.4.1.6}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.7}A differential equation}{19}{subsection.4.1.7}} +\newlabel{chapter2:a-differential-equation}{{4.1.7}{19}{A differential equation}{subsection.4.1.7}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.8}Integrating our equations}{20}{subsection.4.1.8}} +\newlabel{chapter2:integrating-our-equations}{{4.1.8}{20}{Integrating our equations}{subsection.4.1.8}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.9}Constant acceleration case, the velocity}{20}{subsection.4.1.9}} +\newlabel{chapter2:constant-acceleration-case-the-velocity}{{4.1.9}{20}{Constant acceleration case, the velocity}{subsection.4.1.9}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.10}Computing the averages}{21}{subsection.4.1.10}} +\newlabel{chapter2:computing-the-averages}{{4.1.10}{21}{Computing the averages}{subsection.4.1.10}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.11}Including Air Resistance in our model}{21}{subsection.4.1.11}} +\newlabel{chapter2:including-air-resistance-in-our-model}{{4.1.11}{21}{Including Air Resistance in our model}{subsection.4.1.11}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.12}Analytical solutions}{22}{subsection.4.1.12}} +\newlabel{chapter2:analytical-solutions}{{4.1.12}{22}{Analytical solutions}{subsection.4.1.12}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.13}Finding the final height}{22}{subsection.4.1.13}} +\newlabel{chapter2:finding-the-final-height}{{4.1.13}{22}{Finding the final height}{subsection.4.1.13}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.14}Our first attempt at solving differential equations}{23}{subsection.4.1.14}} +\newlabel{chapter2:our-first-attempt-at-solving-differential-equations}{{4.1.14}{23}{Our first attempt at solving differential equations}{subsection.4.1.14}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.15}Discretizing our equations}{23}{subsection.4.1.15}} +\newlabel{chapter2:discretizing-our-equations}{{4.1.15}{23}{Discretizing our equations}{subsection.4.1.15}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.16}Code for implementing Euler\IeC {\textquoteright }s method}{25}{subsection.4.1.16}} +\newlabel{chapter2:code-for-implementing-euler-s-method}{{4.1.16}{25}{Code for implementing Euler’s method}{subsection.4.1.16}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.17}Simple extension, the Euler\sphinxhyphen {}Cromer method}{27}{subsection.4.1.17}} +\newlabel{chapter2:simple-extension-the-euler-cromer-method}{{4.1.17}{27}{Simple extension, the Euler\sphinxhyphen {}Cromer method}{subsection.4.1.17}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.18}Python practicalities, Software and needed installations}{28}{subsection.4.1.18}} +\newlabel{chapter2:python-practicalities-software-and-needed-installations}{{4.1.18}{28}{Python practicalities, Software and needed installations}{subsection.4.1.18}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.19}Python installers}{28}{subsection.4.1.19}} +\newlabel{chapter2:python-installers}{{4.1.19}{28}{Python installers}{subsection.4.1.19}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.20}Useful Python libraries}{28}{subsection.4.1.20}} +\newlabel{chapter2:useful-python-libraries}{{4.1.20}{28}{Useful Python libraries}{subsection.4.1.20}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.21}Numpy examples and Important Matrix and vector handling packages}{29}{subsection.4.1.21}} +\newlabel{chapter2:numpy-examples-and-important-matrix-and-vector-handling-packages}{{4.1.21}{29}{Numpy examples and Important Matrix and vector handling packages}{subsection.4.1.21}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.22}Basic Matrix Features}{29}{subsection.4.1.22}} +\newlabel{chapter2:basic-matrix-features}{{4.1.22}{29}{Basic Matrix Features}{subsection.4.1.22}{}} +\@writefile{toc}{\contentsline {subsubsection}{Some famous Matrices}{30}{subsubsection*.3}} +\newlabel{chapter2:some-famous-matrices}{{4.1.22}{30}{Some famous Matrices}{subsubsection*.3}{}} +\@writefile{toc}{\contentsline {subsubsection}{More Basic Matrix Features}{30}{subsubsection*.4}} +\newlabel{chapter2:more-basic-matrix-features}{{4.1.22}{30}{More Basic Matrix Features}{subsubsection*.4}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.23}Numpy and arrays}{30}{subsection.4.1.23}} +\newlabel{chapter2:numpy-and-arrays}{{4.1.23}{30}{Numpy and arrays}{subsection.4.1.23}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.24}Matrices in Python}{32}{subsection.4.1.24}} +\newlabel{chapter2:matrices-in-python}{{4.1.24}{32}{Matrices in Python}{subsection.4.1.24}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.25}Meet the Pandas}{33}{subsection.4.1.25}} +\newlabel{chapter2:meet-the-pandas}{{4.1.25}{33}{Meet the Pandas}{subsection.4.1.25}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.2}Basic Steps of Scientific Investigations}{35}{section.4.2}} +\newlabel{chapter3:basic-steps-of-scientific-investigations}{{4.2}{35}{Basic Steps of Scientific Investigations}{section.4.2}{}} +\newlabel{chapter3::doc}{{4.2}{35}{Basic Steps of Scientific Investigations}{section.4.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}Identifying our System}{35}{subsection.4.2.1}} +\newlabel{chapter3:identifying-our-system}{{4.2.1}{35}{Identifying our System}{subsection.4.2.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}Defining a Model}{35}{subsection.4.2.2}} +\newlabel{chapter3:defining-a-model}{{4.2.2}{35}{Defining a Model}{subsection.4.2.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.3}Solving the Equations}{35}{subsection.4.2.3}} +\newlabel{chapter3:solving-the-equations}{{4.2.3}{35}{Solving the Equations}{subsection.4.2.3}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.4}Newton\IeC {\textquoteright }s Laws}{36}{subsection.4.2.4}} +\newlabel{chapter3:newton-s-laws}{{4.2.4}{36}{Newton’s Laws}{subsection.4.2.4}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.5}Setting up a model for forces acting on an object}{36}{subsection.4.2.5}} +\newlabel{chapter3:setting-up-a-model-for-forces-acting-on-an-object}{{4.2.5}{36}{Setting up a model for forces acting on an object}{subsection.4.2.5}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.6}Newton\IeC {\textquoteright }s Laws, the Second one first}{37}{subsection.4.2.6}} +\newlabel{chapter3:newton-s-laws-the-second-one-first}{{4.2.6}{37}{Newton’s Laws, the Second one first}{subsection.4.2.6}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.7}Then the First Law}{37}{subsection.4.2.7}} +\newlabel{chapter3:then-the-first-law}{{4.2.7}{37}{Then the First Law}{subsection.4.2.7}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.8}And finally the Third Law}{37}{subsection.4.2.8}} +\newlabel{chapter3:and-finally-the-third-law}{{4.2.8}{37}{And finally the Third Law}{subsection.4.2.8}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.9}Motion of a Single Object}{38}{subsection.4.2.9}} +\newlabel{chapter3:motion-of-a-single-object}{{4.2.9}{38}{Motion of a Single Object}{subsection.4.2.9}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.10}Air Resistance in One Dimension}{38}{subsection.4.2.10}} +\newlabel{chapter3:air-resistance-in-one-dimension}{{4.2.10}{38}{Air Resistance in One Dimension}{subsection.4.2.10}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.11}Resulting Acceleration}{38}{subsection.4.2.11}} +\newlabel{chapter3:resulting-acceleration}{{4.2.11}{38}{Resulting Acceleration}{subsection.4.2.11}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.12}Going Ballistic, Projectile Motion or a Softer Approach, Falling Raindrops}{40}{subsection.4.2.12}} +\newlabel{chapter3:going-ballistic-projectile-motion-or-a-softer-approach-falling-raindrops}{{4.2.12}{40}{Going Ballistic, Projectile Motion or a Softer Approach, Falling Raindrops}{subsection.4.2.12}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.13}Ways of solving these equations}{40}{subsection.4.2.13}} +\newlabel{chapter3:ways-of-solving-these-equations}{{4.2.13}{40}{Ways of solving these equations}{subsection.4.2.13}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.14}Solving as differential equations}{42}{subsection.4.2.14}} +\newlabel{chapter3:solving-as-differential-equations}{{4.2.14}{42}{Solving as differential equations}{subsection.4.2.14}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.15}Differential Equations, contn}{42}{subsection.4.2.15}} +\newlabel{chapter3:differential-equations-contn}{{4.2.15}{42}{Differential Equations, contn}{subsection.4.2.15}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.16}Splitting into two parts}{42}{subsection.4.2.16}} +\newlabel{chapter3:splitting-into-two-parts}{{4.2.16}{42}{Splitting into two parts}{subsection.4.2.16}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.17}More details}{43}{subsection.4.2.17}} +\newlabel{chapter3:more-details}{{4.2.17}{43}{More details}{subsection.4.2.17}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.18}Motion in a Magnetic Field}{45}{subsection.4.2.18}} +\newlabel{chapter3:motion-in-a-magnetic-field}{{4.2.18}{45}{Motion in a Magnetic Field}{subsection.4.2.18}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.19}Sliding Block tied to a Wall}{49}{subsection.4.2.19}} +\newlabel{chapter3:sliding-block-tied-to-a-wall}{{4.2.19}{49}{Sliding Block tied to a Wall}{subsection.4.2.19}{}} +\newlabel{eq:newton1}{{4.2.19}{49}{Sliding Block tied to a Wall}{subsection.4.2.19}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.20}The classical pendulum and scaling the equations}{51}{subsection.4.2.20}} +\newlabel{chapter3:the-classical-pendulum-and-scaling-the-equations}{{4.2.20}{51}{The classical pendulum and scaling the equations}{subsection.4.2.20}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.21}More on the Pendulum}{52}{subsection.4.2.21}} +\newlabel{chapter3:more-on-the-pendulum}{{4.2.21}{52}{More on the Pendulum}{subsection.4.2.21}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.22}More on the Pendulum}{52}{subsection.4.2.22}} +\newlabel{chapter3:id1}{{4.2.22}{52}{More on the Pendulum}{subsection.4.2.22}{}} diff --git a/doc/src/LectureNotes/testbook/_build/latex/python.fdb_latexmk b/doc/src/LectureNotes/testbook/_build/latex/python.fdb_latexmk new file mode 100644 index 000000000..1a48df1a6 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/latex/python.fdb_latexmk @@ -0,0 +1,196 @@ +# Fdb version 3 +["makeindex python.idx"] 0 "python.idx" "python.ind" "python" 0 + "python.idx" 1608153863 0 d41d8cd98f00b204e9800998ecf8427e "" + (generated) + "python.ind" +["pdflatex"] 1608153863 "python.tex" "python.pdf" "python" 1608153863 + "./chapter2_121_1.png" 1608153856 20430 cb62746fc09a41a6334c38cbae7c8844 "" + "./chapter2_25_1.png" 1608153856 10834 67bd2b76b59d066cbc2b898fec5c575e "" + "./python.out" 1608153866 5635 816deae87ba0a200c0a624a22dc05268 "" + "/usr/local/texlive/2015/texmf-dist/fonts/enc/dvips/base/8r.enc" 1165713224 4850 80dc9bab7f31fb78a000ccfed0e27cab "" + "/usr/local/texlive/2015/texmf-dist/fonts/map/fontname/texfonts.map" 1272929888 3287 e6b82fe08f5336d4d5ebc73fb1152e87 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrb8r.tfm" 1136768653 1292 3059476c50a24578715759f22652f3d0 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrb8t.tfm" 1136768653 1384 87406e4336af44af883a035f17f319d9 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrr8c.tfm" 1136768653 1268 8bd405dc5751cfed76cb6fb2db78cb50 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrr8r.tfm" 1136768653 1292 bd42be2f344128bff6d35d98474adfe3 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrr8t.tfm" 1136768653 1384 4632f5e54900a7dadbb83f555bc61e56 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrro8c.tfm" 1136768653 1344 dab2eee300fafcab19064bcc62d66daa "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrro8r.tfm" 1136768653 1544 4fb84cf2931ec523c2c6a08d939088ba "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrro8t.tfm" 1136768653 1596 04a657f277f0401ba37d66e716627ac4 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm" 1136768653 4484 b828043cbd581d289d955903c1339981 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm" 1136768653 6628 34c39492c0adc454c1c199922bba8363 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvbo8t.tfm" 1136768653 6880 fe6c7967f27585f6fa9876f3af14edd2 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvr8r.tfm" 1136768653 4712 9ef4d7d106579d4b136e1529e1a4533c "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvr8t.tfm" 1136768653 7040 b2bd27e2bfe6f6948cbc3239cae7444f "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmb8r.tfm" 1136768653 4524 6bce29db5bc272ba5f332261583fee9c "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmb8t.tfm" 1136768653 6880 f19b8995b61c334d78fc734065f6b4d4 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmr8c.tfm" 1136768653 1352 fa28a7e6d323c65ce7d13d5342ff6be2 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmr8r.tfm" 1136768653 4408 25b74d011a4c66b7f212c0cc3c90061b "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm" 1136768653 6672 e3ab9e37e925f3045c9005e6d1473d56 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmri8r.tfm" 1136768653 4640 532ca3305aad10cc01d769f3f91f1029 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmri8t.tfm" 1136768653 6944 94c55ad86e6ea2826f78ba2240d50df9 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm" 1136768653 3584 adb004a0c8e7c46ee66cad73671f37b4 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmbsy5.tfm" 1246382020 1120 1e8878807317373affa7f7bba4cf2f6a "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmbsy7.tfm" 1246382020 1120 7f9f170e8aa57527ad6c49feafd45d54 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm" 1246382020 1004 54797486969f23fa377b128694d548df "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmmib5.tfm" 1246382020 1496 c79f6914c6d39ffb3759967363d1be79 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmmib7.tfm" 1246382020 1508 6e807ff901c35a5f1fde0ca275533df8 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm" 1246382020 916 f87d7c45f9c908e672703b83b72241a3 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam5.tfm" 1246382020 924 9904cf1d39e9767e7a3622f2a125a565 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm" 1246382020 928 2dc8d444221b7a635bb58038579b861a "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm" 1246382020 908 2921f8a10601f252058503cc6570e581 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm5.tfm" 1246382020 940 75ac932a52f80982a9f8ea75d03a34cf "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm" 1246382020 940 228d6584342e91276bf566bcf9716b83 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmbsy10.tfm" 1136768653 1116 4e6ba9d7914baa6482fd69f67d126380 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmbx10.tfm" 1136768653 1328 c834bbb027764024c09d3d2bf908b5f0 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmbx5.tfm" 1136768653 1332 f817c21a1ba54560425663374f1b651a "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmbx7.tfm" 1136768653 1336 3125ccb448c1a09074e3aa4a9832f130 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmex10.tfm" 1136768653 992 662f679a0b3d2d53c1b94050fdaa3f50 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm" 1136768653 1524 4414a8315f39513458b80dfc63bff03a "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmib10.tfm" 1136768653 1524 554068197b70979a55370e6c6495f441 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr12.tfm" 1136768653 1288 655e228510b4c2a1abe905c368440826 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr17.tfm" 1136768653 1292 296a67155bdbfc32aa9c636f21e91433 "" + "/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm" 1136768653 1124 6c73e740cf17375f03eec0ee63599741 "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb" 1248133631 34811 78b52f49e893bcba91bd7581cdc144c0 "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb" 1248133631 30251 6afa5cb1d0204815a708a080681d4674 "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb" 1248133631 36299 5f9df58c2139e7edcf37c8fca4bd384d "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb" 1248133631 37912 77d683123f92148345f3fc36a38d9ab1 "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb" 1248133631 36281 c355509802a035cadc5f15869451dcee "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmmib10.pfb" 1248133631 36912 b448ef9ad9d7228ec3c6e71005136d55 "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb" 1248133631 35752 024fb6c41858982481f6968b5fc26508 "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmr5.pfb" 1248133631 31809 8670ca339bf94e56da1fc21c80635e2a "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb" 1248133631 32762 224316ccc9ad3ca0423a14971cfa7fc1 "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb" 1248133631 32569 5e5ddc8df908dea60932f3c484a54c0d "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy5.pfb" 1248133631 32915 7bf7720c61a5b3a7ff25b0964421c9b6 "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb" 1248133631 32716 08e384dc442464e7285e891af9f45947 "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/urw/courier/ucrb8a.pfb" 1136849748 50493 4ed1f7e9eba8f1f3e1ec25195460190d "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/urw/courier/ucrr8a.pfb" 1136849748 45758 19968a0990191524e34e1994d4a31cb6 "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/urw/courier/ucrro8a.pfb" 1136849748 44404 ea3d9c0311883914133975dd62a9185c "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/urw/helvetic/uhvb8a.pfb" 1136849748 35941 f27169cc74234d5bd5e4cca5abafaabb "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/urw/helvetic/uhvr8a.pfb" 1136849748 44648 23115b2a545ebfe2c526c3ca99db8b95 "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/urw/times/utmb8a.pfb" 1136849748 44729 811d6c62865936705a31c797a1d5dada "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/urw/times/utmr8a.pfb" 1136849748 46026 6dab18b61c907687b520c72847215a68 "" + "/usr/local/texlive/2015/texmf-dist/fonts/type1/urw/times/utmri8a.pfb" 1136849748 45458 a3faba884469519614ca56ba5f6b1de1 "" + "/usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/courier/pcrb8t.vf" 1136768653 2184 5d20c8b00cd914e50251116c274e2d0b "" + "/usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/courier/pcrr8c.vf" 1136768653 3552 6a7911d0b338a7c32cbfc3a9e985ccca "" + "/usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/courier/pcrr8t.vf" 1136768653 2184 8475af1b9cfa983db5f46f5ed4b8f9f7 "" + "/usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/courier/pcrro8c.vf" 1136768653 3560 a297982f0907d62e9886d9e2666bf30b "" + "/usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/courier/pcrro8t.vf" 1136768653 2280 d7cd083c724c9449e1d12731253966f7 "" + "/usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf" 1136768653 2340 0efed6a948c3c37d870e4e7ddb85c7c3 "" + "/usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/helvetic/phvr8t.vf" 1136768653 2344 44ff28c9ef2fc97180cd884f900fee71 "" + "/usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/times/ptmb8t.vf" 1136768653 2340 df9c920cc5688ebbf16a93f45ce7bdd3 "" + "/usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/times/ptmr8c.vf" 1136768653 3556 8a9a6dcbcd146ef985683f677f4758a6 "" + "/usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/times/ptmr8t.vf" 1136768653 2348 91706c542228501c410c266421fbe30c "" + "/usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/times/ptmri8t.vf" 1136768653 2328 6cd7df782b09b29cfc4d93e55b6b9a59 "" + "/usr/local/texlive/2015/texmf-dist/tex/context/base/supp-pdf.mkii" 1337017135 71627 94eb9990bed73c364d7f53f960cc8c5b "" + "/usr/local/texlive/2015/texmf-dist/tex/generic/babel-english/english.ldf" 1367878877 6963 2e0cb3d93aa64508bdb0db58ae900d97 "" + "/usr/local/texlive/2015/texmf-dist/tex/generic/babel/babel.def" 1411763270 49725 b40154b767b0073ee42b35911042b793 "" + "/usr/local/texlive/2015/texmf-dist/tex/generic/babel/babel.sty" 1411763270 13212 dc56c11a26f3ea97bcf005eeda274583 "" + "/usr/local/texlive/2015/texmf-dist/tex/generic/ifxetex/ifxetex.sty" 1284331290 1458 43ab4710dc82f3edeabecd0d099626b2 "" + "/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/etexcmds.sty" 1335995445 7612 c47308d923ec19888707b0f1792b326a "" + "/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/gettitlestring.sty" 1303254447 8237 52810bdb4db2270e717422560a104aea "" + "/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty" 1338332114 189108 8b3553a56c83ff61acecb36b75d817e2 "" + "/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty" 1338332114 70752 45fa392800e07da61fa13446ad46b34d "" + "/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifluatex.sty" 1303254447 7324 11d14f318d865f420e692d4e6c9c18c3 "" + "/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifpdf.sty" 1303254447 7140 ece2cc23d9f20e1f53975ac167f42d3e "" + "/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifvtex.sty" 1335995445 6797 68c89f65e01894df882dd523d3fc0a8f "" + "/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/infwarerr.sty" 1335995445 8253 3bdedc8409aa5d290a2339be6f09af03 "" + "/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty" 1335995445 14040 8de9f47fabc4ca3bd69b6d795e32751c "" + "/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ltxcmds.sty" 1335995445 18425 775b341047ce304520cc7c11ca41392e "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/amsfonts.sty" 1359763108 5949 3f3fd50a8cc94c3d4cbf4fc66cd3df1c "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/amssymb.sty" 1359763108 13829 94730e64147574077f8ecfea9bb69af4 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/umsa.fd" 1359763108 961 6518c6525a34feb5e8250ffa91731cff "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/umsb.fd" 1359763108 961 d02606146ba5601b5645f987c92e6193 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsbsy.sty" 1362954379 2412 2d98314dc5be38f455f8890deeb2d091 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsgen.sty" 1362954379 4357 ad30ad08920902fc9b38caf35a3b0496 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsmath.sty" 1362954379 79178 b2e326c351e876df0e5e23df2e02441b "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsopn.sty" 1362954379 4082 502152465aedb8f6a3c4b0b7c0fa8ae5 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amstext.sty" 1362954379 2637 846ebe982d3549c7ede7ce135456f54a "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/alltt.sty" 1428932888 3140 542beed88381d34d18b1f2c2d9b23c35 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty" 1428932888 4572 f29f75cfae3acaf4667f1979db655af9 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/inputenc.sty" 1428932888 5619 3f48adceb9004b3fefe24c2d2df7d98e "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/makeidx.sty" 1428932888 1940 d6de0410d9ab8e197c80422e5314e9da "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/omsenc.dfu" 1428932888 2005 572b09e94d01e22ed7d4000c92b6e220 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/ot1enc.dfu" 1428932888 2757 273e079c3d3a9830c5b4fa2a4ce69c51 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/report.cls" 1428932888 23767 74c5551841f58a4efbb8c5d892190037 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/size10.clo" 1428932888 9179 632e23fed01c842f2eaef1dd9953a446 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.def" 1428932888 9327 bf6addf718ff386725227c5b52941e7e "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.dfu" 1428932888 7617 8f111f916836ef9e09db7ecbcd4e01d6 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/textcomp.sty" 1428932888 16155 258f35a63ef332879c6629fd0fc875da "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1cmr.fd" 1428932888 2217 88eb40cf4b1efa71ba8daf8030a0113f "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def" 1428932888 7767 7f8f29a2f77fdabc077bc233a27c01d3 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.dfu" 1428932888 4920 919d74324d79f3b4140842b12ac97e85 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def" 1428932888 6484 2098550b79b15e713b69d9c8845f4437 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/capt-of/capt-of.sty" 1264379041 1311 063f8536a047a2d9cb1803321f793f37 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/carlisle/remreset.sty" 1137109962 1096 6a75275ca00e32428c6f059d2f618ea7 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/cmap/cmap.sty" 1215522782 2883 427a7f7cb58418a0394dbd85c80668f6 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/cmap/ot1.cmap" 1177721415 1207 4e0d96772f0d338847cbfb4eca683c81 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/cmap/t1.cmap" 1215522782 1938 beaa4a8467aa0074076e0e19f2992e29 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty" 1160175134 20521 e5d13d98d57bd53d4fed3aa61bd29c86 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty" 1274829816 45360 a0833d32f1b541964596b02870342d5a "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/float/float.sty" 1137110151 6749 16d2656a1984957e674b149555f1ea1d "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/fncychap/fncychap.sty" 1292029257 19488 fdd52eb173b3197d748e1ec25acb042f "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/framed/framed.sty" 1338588508 22449 7ec15c16d0d66790f28e90343c5434a3 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/geometry/geometry.sty" 1284422013 40502 e003406220954b0716679d7928aedd8a "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphics.sty" 1428932888 14285 20d80486c4ae98139889d8789596c967 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphicx.sty" 1428932888 8125 557ab9f1bfa80d369fb45a914aa8a3b4 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty" 1428932888 2594 d18d5e19aa8239cf867fa670c556d2e9 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/trig.sty" 1428932888 3439 44bd4a1da7f27787173f2e99116b0a7f "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hpdftex.def" 1352416072 51837 247bd8424b3835ef78c236dc1e0b4aef "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hyperref.sty" 1352416072 231792 5fc9dc7dd667e773a766ecc63bba7f4b "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/nameref.sty" 1351899753 12847 25b617d63258c4f72870c883493a3cf8 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/pd1enc.def" 1352416072 14005 155ac8fad2e5dd7c2cdd130fabd96633 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/puenc.def" 1352416072 122263 ec12fdd2044f1507e5ae92ee7a5bbfae "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg" 1254097189 802 7b8c8d72c24d795ed7720e4dfd29bff3 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg" 1279039959 678 4792914a8f45be57bb98413425e4c7af "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/graphics.cfg" 1278958963 3563 d35e897cae3b8c6848f6677b73370b54 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/hyperref.cfg" 1254097189 235 6031e5765137be07eed51a510b2b8fb7 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/mmap/oml.cmap" 1215649417 1866 c1c12138091b4a8edd4a24a940e6f792 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/mmap/oms.cmap" 1215649417 2370 3b1f71b14b974f07cef532db09ae9ee0 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/mmap/omx.cmap" 1215649417 3001 252c8ca42b06a22cb1a11c0e47790c6e "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/needspace/needspace.sty" 1364856750 852 0e34dbb72efc69fa07602405ad95585e "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/auxhook.sty" 1303254447 3834 707ef09f31d7d2ea47ba89974755dfe0 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty" 1303254447 12029 04d7fdf76e0464c23b5aa3a727952d7c "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/grfext.sty" 1335995445 7075 bd0c34fbf1ae8fd1debd2a554e41b2d5 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/hypcap.sty" 1335995445 3720 f909bdc3fac6af505c1f55366aa4d44c "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/kvoptions.sty" 1335995445 22417 c74ff4af6a1aa2b65d1924020edbbe11 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty" 1303254447 9581 1158efc648bc09d5064db5703c882159 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/parskip/parskip.sty" 1285887441 2763 02a40cc5a32805c41d919cfbdba7e99a "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/pdftex-def/pdftex.def" 1306616590 55368 3c8a0d99822330f2dfabc0dfb09ce897 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1pcr.fd" 1137110629 798 d5895e9edc628f2be019beb2c0ec66df "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1phv.fd" 1137110629 1488 9a55ac1cde6b4798a7f56844bb75a553 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1ptm.fd" 1137110629 774 61d7da1e9f9e74989b196d147e623736 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/times.sty" 1156702453 857 6c716f26c5eadfb81029fcd6ce2d45e6 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/ts1pcr.fd" 1137110629 643 92c451bb86386a4e36a174603ddb5a13 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/ts1ptm.fd" 1137110629 619 96f56dc5d1ef1fe1121f1cfeec70ee0c "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/tabulary/tabulary.sty" 1403566480 13791 8c83287d79183c3bf58fd70871e8a70b "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/titlesec/titlesec.sty" 1324083561 37083 54a2e11f0f208916a9976d9e4837d144 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/tools/array.sty" 1428932888 13285 001a28447062ce32b9b4a62965626fc4 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/tools/longtable.sty" 1428932888 12083 b47235b9e530708f74984b3dda65e60d "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/upquote/upquote.sty" 1334873510 1048 517e01cde97c1c0baf72e69d43aa5a2e "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/url/url.sty" 1388531844 12796 8edb7d69a20b857904dd0ea757c14ec9 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/varwidth/varwidth.sty" 1238697683 10894 d359a13923460b2a73d4312d613554c8 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/wrapfig/wrapfig.sty" 1137111090 26220 3701aebf80ccdef248c0c20dd062fea9 "" + "/usr/local/texlive/2015/texmf-dist/tex/latex/xcolor/xcolor.sty" 1169481954 55224 a43bab84e0ac5e6efcaf9a98bde73a94 "" + "/usr/local/texlive/2015/texmf-dist/web2c/texmf.cnf" 1428852030 31983 18aeec08f48baa3cf3508d538dd5f459 "" + "/usr/local/texlive/2015/texmf-var/fonts/map/pdftex/updmap/pdftex.map" 1432479641 1764542 91654ba72bdb667e84ea24f076ae16d8 "" + "/usr/local/texlive/2015/texmf-var/web2c/pdftex/pdflatex.fmt" 1432479681 3849859 39a7d258195bde2394e244961601fbc5 "" + "/usr/local/texlive/2015/texmf.cnf" 1432479636 577 0d611272082f3cdb8e80e09a3c69cf07 "" + "chapter2_121_1.png" 1608153856 20430 cb62746fc09a41a6334c38cbae7c8844 "" + "chapter2_25_1.png" 1608153856 10834 67bd2b76b59d066cbc2b898fec5c575e "" + "footnotehyper-sphinx.sty" 1594223451 8888 1bbd7bdeae8c8bed1d10d551bddb1cc9 "" + "python.aux" 1608153863 8 a94a2480d3289e625eea47cd1b285758 "" + "python.ind" 0 -1 0 "makeindex python.idx" + "python.tex" 1608153862 137813 81ac6d75184e907561989109613be168 "" + "sphinx.sty" 1594223451 82020 a38700b8aa22dfd94a8a5b905e69be73 "" + "sphinxhighlight.sty" 1608153862 8137 38a433148fcb7611515a989ff1750dd5 "" + "sphinxmanual.cls" 1594223451 4236 124cd90deb92742b5d3922bfc2cd70c0 "" + "sphinxmessages.sty" 1608153862 745 3f5fcd6cdd7964ed608767954a8ced6f "" + "sphinxmulticell.sty" 1594223451 14606 0b6edc2b1a83546ed92026d1f6a311b5 "" + (generated) + "python.out" + "python.aux" + "python.log" + "python.pdf" + "python.idx" + "python.toc" diff --git a/doc/src/LectureNotes/testbook/_build/latex/python.fls b/doc/src/LectureNotes/testbook/_build/latex/python.fls new file mode 100644 index 000000000..7f62aa7fa --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/latex/python.fls @@ -0,0 +1,327 @@ +PWD /Users/hjensen/Teaching/PHY321/doc/src/testbook/_build/latex +INPUT /usr/local/texlive/2015/texmf.cnf +INPUT /usr/local/texlive/2015/texmf-dist/web2c/texmf.cnf +INPUT /usr/local/texlive/2015/texmf-var/web2c/pdftex/pdflatex.fmt +INPUT python.tex +OUTPUT python.log +INPUT sphinxmanual.cls +INPUT sphinxmanual.cls +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/report.cls +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/report.cls +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/size10.clo +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/size10.clo +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/inputenc.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/inputenc.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.dfu +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.dfu +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/ot1enc.dfu +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/ot1enc.dfu +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/omsenc.dfu +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/omsenc.dfu +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cmap/cmap.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cmap/cmap.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.def +INPUT /usr/local/texlive/2015/texmf-dist/fonts/map/fontname/texfonts.map +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cmap/t1.cmap +OUTPUT python.pdf +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cmap/t1.cmap +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/babel/babel.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/babel/babel.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/babel-english/english.ldf +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/babel-english/english.ldf +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/babel-english/english.ldf +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/babel/babel.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/times.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/times.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fncychap/fncychap.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fncychap/fncychap.sty +INPUT sphinx.sty +INPUT sphinx.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ltxcmds.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ltxcmds.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphics.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphics.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/trig.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/graphics/trig.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/graphics.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/graphics.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/pdftex-def/pdftex.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/pdftex-def/pdftex.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/infwarerr.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/infwarerr.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/textcomp.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/textcomp.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.dfu +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.dfu +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/titlesec/titlesec.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/titlesec/titlesec.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tabulary/tabulary.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tabulary/tabulary.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tools/array.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tools/array.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tools/longtable.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/tools/longtable.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/varwidth/varwidth.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/varwidth/varwidth.sty +INPUT sphinxmulticell.sty +INPUT sphinxmulticell.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/makeidx.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/makeidx.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/framed/framed.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/framed/framed.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty +INPUT footnotehyper-sphinx.sty +INPUT footnotehyper-sphinx.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/float/float.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/float/float.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/wrapfig/wrapfig.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/wrapfig/wrapfig.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/parskip/parskip.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/parskip/parskip.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/alltt.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/alltt.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/upquote/upquote.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/upquote/upquote.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/capt-of/capt-of.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/capt-of/capt-of.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/needspace/needspace.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/needspace/needspace.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/carlisle/remreset.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/carlisle/remreset.sty +INPUT sphinxhighlight.sty +INPUT sphinxhighlight.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/kvoptions.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/kvoptions.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/etexcmds.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/etexcmds.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifluatex.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifluatex.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/geometry/geometry.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/geometry/geometry.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifpdf.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifpdf.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifvtex.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifvtex.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/ifxetex/ifxetex.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/ifxetex/ifxetex.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/auxhook.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/auxhook.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/pd1enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/pd1enc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/hyperref.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/hyperref.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/puenc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/puenc.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/url/url.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/url/url.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hpdftex.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hpdftex.def +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/hypcap.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/hypcap.sty +INPUT sphinxmessages.sty +INPUT sphinxmessages.sty +OUTPUT python.idx +INPUT python.aux +INPUT python.aux +OUTPUT python.aux +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1cmr.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1cmr.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1ptm.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1ptm.fd +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/context/base/supp-pdf.mkii +INPUT /usr/local/texlive/2015/texmf-dist/tex/context/base/supp-pdf.mkii +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/grfext.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/grfext.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/gettitlestring.sty +INPUT /usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/gettitlestring.sty +OUTPUT python.out +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1phv.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1phv.fd +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvr8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvbo8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvbo8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr17.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cmap/ot1.cmap +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/cmap/ot1.cmap +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmr12.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/mmap/oml.cmap +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/mmap/oml.cmap +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/mmap/oms.cmap +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/mmap/oms.cmap +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmex10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/mmap/omx.cmap +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/mmap/omx.cmap +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmex10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/umsa.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/umsa.fd +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/umsb.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/umsb.fd +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm +INPUT /usr/local/texlive/2015/texmf-var/fonts/map/pdftex/updmap/pdftex.map +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvr8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm +OUTPUT python.toc +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/times/ptmr8t.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmr8r.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam5.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm5.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmri8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/helvetic/phvr8t.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvr8r.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/times/ptmri8t.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmri8r.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/ts1ptm.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/ts1ptm.fd +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmr8c.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/times/ptmr8c.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/helvetic/phvr8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmbx10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmbx7.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmbx5.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmmib10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmmib7.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmmib5.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/cm/cmbsy10.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmbsy7.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmbsy5.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmb8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/times/ptmb8t.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmb8r.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1pcr.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1pcr.fd +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrr8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrr8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrb8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrro8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/ts1pcr.fd +INPUT /usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/ts1pcr.fd +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrr8c.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrro8c.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/courier/pcrr8t.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrr8r.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/courier/pcrb8t.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrb8r.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/courier/pcrro8t.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrro8r.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/courier/pcrr8c.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/times/ptmr8t.vf +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/times/ptmr8r.tfm +INPUT /usr/local/texlive/2015/texmf-dist/fonts/vf/adobe/courier/pcrro8c.vf +INPUT chapter2_25_1.png +INPUT ./chapter2_25_1.png +INPUT ./chapter2_25_1.png +INPUT /usr/local/texlive/2015/texmf-dist/fonts/tfm/adobe/courier/pcrr8t.tfm +INPUT chapter2_25_1.png +INPUT ./chapter2_25_1.png +INPUT chapter2_121_1.png +INPUT ./chapter2_121_1.png +INPUT ./chapter2_121_1.png +INPUT chapter2_121_1.png +INPUT ./chapter2_121_1.png +INPUT python.aux +INPUT ./python.out +INPUT ./python.out +INPUT /usr/local/texlive/2015/texmf-dist/fonts/enc/dvips/base/8r.enc +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmmib10.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmr5.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy5.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/urw/courier/ucrb8a.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/urw/courier/ucrr8a.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/urw/courier/ucrro8a.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/urw/helvetic/uhvb8a.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/urw/helvetic/uhvr8a.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/urw/times/utmb8a.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/urw/times/utmr8a.pfb +INPUT /usr/local/texlive/2015/texmf-dist/fonts/type1/urw/times/utmri8a.pfb diff --git a/doc/src/LectureNotes/testbook/_build/latex/python.idx b/doc/src/LectureNotes/testbook/_build/latex/python.idx new file mode 100644 index 000000000..e69de29bb diff --git a/doc/src/LectureNotes/testbook/_build/latex/python.ist b/doc/src/LectureNotes/testbook/_build/latex/python.ist new file mode 100644 index 000000000..70536a668 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/latex/python.ist @@ -0,0 +1,16 @@ +line_max 100 +headings_flag 1 +heading_prefix " \\bigletter " + +preamble "\\begin{sphinxtheindex} +\\let\\bigletter\\sphinxstyleindexlettergroup +\\let\\spxpagem \\sphinxstyleindexpagemain +\\let\\spxentry \\sphinxstyleindexentry +\\let\\spxextra \\sphinxstyleindexextra + +" + +postamble "\n\n\\end{sphinxtheindex}\n" + +symhead_positive "{\\sphinxsymbolsname}" +numhead_positive "{\\sphinxnumbersname}" diff --git a/doc/src/LectureNotes/testbook/_build/latex/python.log b/doc/src/LectureNotes/testbook/_build/latex/python.log new file mode 100644 index 000000000..c621da567 --- /dev/null +++ b/doc/src/LectureNotes/testbook/_build/latex/python.log @@ -0,0 +1,18694 @@ +This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015) (preloaded format=pdflatex 2015.5.24) 16 DEC 2020 22:24 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**python.tex +(./python.tex +LaTeX2e <2015/01/01> +Babel <3.9l> and hyphenation patterns for 79 languages loaded. +(./sphinxmanual.cls +Document Class: sphinxmanual 2019/12/01 v2.3.0 Document class (Sphinx manual) +(/usr/local/texlive/2015/texmf-dist/tex/latex/base/report.cls +Document Class: report 2014/09/29 v1.4h Standard LaTeX document class +(/usr/local/texlive/2015/texmf-dist/tex/latex/base/size10.clo +File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option) +) +\c@part=\count79 +\c@chapter=\count80 +\c@section=\count81 +\c@subsection=\count82 +\c@subsubsection=\count83 +\c@paragraph=\count84 +\c@subparagraph=\count85 +\c@figure=\count86 +\c@table=\count87 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\bibindent=\dimen102 +) +LaTeX Info: Redefining \and on input line 35. +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2015/03/17 v1.2c Input encoding file +\inpenc@prehook=\toks14 +\inpenc@posthook=\toks15 + +(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def +File: utf8.def 2014/09/29 v1.1m UTF-8 support for inputenc +Now handling font encoding OML ... +... no UTF-8 mapping file for font encoding OML +Now handling font encoding T1 ... +... processing UTF-8 mapping file for font encoding T1 + +(/usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.dfu +File: t1enc.dfu 2014/09/29 v1.1m UTF-8 support for inputenc + defining Unicode char U+00A1 (decimal 161) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00AB (decimal 171) + defining Unicode char U+00BB (decimal 187) + defining Unicode char U+00BF (decimal 191) + defining Unicode char U+00C0 (decimal 192) + defining Unicode char U+00C1 (decimal 193) + defining Unicode char U+00C2 (decimal 194) + defining Unicode char U+00C3 (decimal 195) + defining Unicode char U+00C4 (decimal 196) + defining Unicode char U+00C5 (decimal 197) + defining Unicode char U+00C6 (decimal 198) + defining Unicode char U+00C7 (decimal 199) + defining Unicode char U+00C8 (decimal 200) + defining Unicode char U+00C9 (decimal 201) + defining Unicode char U+00CA (decimal 202) + defining Unicode char U+00CB (decimal 203) + defining Unicode char U+00CC (decimal 204) + defining Unicode char U+00CD (decimal 205) + defining Unicode char U+00CE (decimal 206) + defining Unicode char U+00CF (decimal 207) + defining Unicode char U+00D0 (decimal 208) + defining Unicode char U+00D1 (decimal 209) + defining Unicode char U+00D2 (decimal 210) + defining Unicode char U+00D3 (decimal 211) + defining Unicode char U+00D4 (decimal 212) + defining Unicode char U+00D5 (decimal 213) + defining Unicode char U+00D6 (decimal 214) + defining Unicode char U+00D8 (decimal 216) + defining Unicode char U+00D9 (decimal 217) + defining Unicode char U+00DA (decimal 218) + defining Unicode char U+00DB (decimal 219) + defining Unicode char U+00DC (decimal 220) + defining Unicode char U+00DD (decimal 221) + defining Unicode char U+00DE (decimal 222) + defining Unicode char U+00DF (decimal 223) + defining Unicode char U+00E0 (decimal 224) + defining Unicode char U+00E1 (decimal 225) + defining Unicode char U+00E2 (decimal 226) + defining Unicode char U+00E3 (decimal 227) + defining Unicode char U+00E4 (decimal 228) + defining Unicode char U+00E5 (decimal 229) + defining Unicode char U+00E6 (decimal 230) + defining Unicode char U+00E7 (decimal 231) + defining Unicode char U+00E8 (decimal 232) + defining Unicode char U+00E9 (decimal 233) + defining Unicode char U+00EA (decimal 234) + defining Unicode char U+00EB (decimal 235) + defining Unicode char U+00EC (decimal 236) + defining Unicode char U+00ED (decimal 237) + defining Unicode char U+00EE (decimal 238) + defining Unicode char U+00EF (decimal 239) + defining Unicode char U+00F0 (decimal 240) + defining Unicode char U+00F1 (decimal 241) + defining Unicode char U+00F2 (decimal 242) + defining Unicode char U+00F3 (decimal 243) + defining Unicode char U+00F4 (decimal 244) + defining Unicode char U+00F5 (decimal 245) + defining Unicode char U+00F6 (decimal 246) + defining Unicode char U+00F8 (decimal 248) + defining Unicode char U+00F9 (decimal 249) + defining Unicode char U+00FA (decimal 250) + defining Unicode char U+00FB (decimal 251) + defining Unicode char U+00FC (decimal 252) + defining Unicode char U+00FD (decimal 253) + defining Unicode char U+00FE (decimal 254) + defining Unicode char U+00FF (decimal 255) + defining Unicode char U+0102 (decimal 258) + defining Unicode char U+0103 (decimal 259) + defining Unicode char U+0104 (decimal 260) + defining Unicode char U+0105 (decimal 261) + defining Unicode char U+0106 (decimal 262) + defining Unicode char U+0107 (decimal 263) + defining Unicode char U+010C (decimal 268) + defining Unicode char U+010D (decimal 269) + defining Unicode char U+010E (decimal 270) + defining Unicode char U+010F (decimal 271) + defining Unicode char U+0110 (decimal 272) + defining Unicode char U+0111 (decimal 273) + defining Unicode char U+0118 (decimal 280) + defining Unicode char U+0119 (decimal 281) + defining Unicode char U+011A (decimal 282) + defining Unicode char U+011B (decimal 283) + defining Unicode char U+011E (decimal 286) + defining Unicode char U+011F (decimal 287) + defining Unicode char U+0130 (decimal 304) + defining Unicode char U+0131 (decimal 305) + defining Unicode char U+0132 (decimal 306) + defining Unicode char U+0133 (decimal 307) + defining Unicode char U+0139 (decimal 313) + defining Unicode char U+013A (decimal 314) + defining Unicode char U+013D (decimal 317) + defining Unicode char U+013E (decimal 318) + defining Unicode char U+0141 (decimal 321) + defining Unicode char U+0142 (decimal 322) + defining Unicode char U+0143 (decimal 323) + defining Unicode char U+0144 (decimal 324) + defining Unicode char U+0147 (decimal 327) + defining Unicode char U+0148 (decimal 328) + defining Unicode char U+014A (decimal 330) + defining Unicode char U+014B (decimal 331) + defining Unicode char U+0150 (decimal 336) + defining Unicode char U+0151 (decimal 337) + defining Unicode char U+0152 (decimal 338) + defining Unicode char U+0153 (decimal 339) + defining Unicode char U+0154 (decimal 340) + defining Unicode char U+0155 (decimal 341) + defining Unicode char U+0158 (decimal 344) + defining Unicode char U+0159 (decimal 345) + defining Unicode char U+015A (decimal 346) + defining Unicode char U+015B (decimal 347) + defining Unicode char U+015E (decimal 350) + defining Unicode char U+015F (decimal 351) + defining Unicode char U+0160 (decimal 352) + defining Unicode char U+0161 (decimal 353) + defining Unicode char U+0162 (decimal 354) + defining Unicode char U+0163 (decimal 355) + defining Unicode char U+0164 (decimal 356) + defining Unicode char U+0165 (decimal 357) + defining Unicode char U+016E (decimal 366) + defining Unicode char U+016F (decimal 367) + defining Unicode char U+0170 (decimal 368) + defining Unicode char U+0171 (decimal 369) + defining Unicode char U+0178 (decimal 376) + defining Unicode char U+0179 (decimal 377) + defining Unicode char U+017A (decimal 378) + defining Unicode char U+017B (decimal 379) + defining Unicode char U+017C (decimal 380) + defining Unicode char U+017D (decimal 381) + defining Unicode char U+017E (decimal 382) + defining Unicode char U+200C (decimal 8204) + defining Unicode char U+2013 (decimal 8211) + defining Unicode char U+2014 (decimal 8212) + defining Unicode char U+2018 (decimal 8216) + defining Unicode char U+2019 (decimal 8217) + defining Unicode char U+201A (decimal 8218) + defining Unicode char U+201C (decimal 8220) + defining Unicode char U+201D (decimal 8221) + defining Unicode char U+201E (decimal 8222) + defining Unicode char U+2030 (decimal 8240) + defining Unicode char U+2031 (decimal 8241) + defining Unicode char U+2039 (decimal 8249) + defining Unicode char U+203A (decimal 8250) + defining Unicode char U+2423 (decimal 9251) +) +Now handling font encoding OT1 ... +... processing UTF-8 mapping file for font encoding OT1 + +(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ot1enc.dfu +File: ot1enc.dfu 2014/09/29 v1.1m UTF-8 support for inputenc + defining Unicode char U+00A1 (decimal 161) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00B8 (decimal 184) + defining Unicode char U+00BF (decimal 191) + defining Unicode char U+00C5 (decimal 197) + defining Unicode char U+00C6 (decimal 198) + defining Unicode char U+00D8 (decimal 216) + defining Unicode char U+00DF (decimal 223) + defining Unicode char U+00E6 (decimal 230) + defining Unicode char U+00EC (decimal 236) + defining Unicode char U+00ED (decimal 237) + defining Unicode char U+00EE (decimal 238) + defining Unicode char U+00EF (decimal 239) + defining Unicode char U+00F8 (decimal 248) + defining Unicode char U+0131 (decimal 305) + defining Unicode char U+0141 (decimal 321) + defining Unicode char U+0142 (decimal 322) + defining Unicode char U+0152 (decimal 338) + defining Unicode char U+0153 (decimal 339) + defining Unicode char U+2013 (decimal 8211) + defining Unicode char U+2014 (decimal 8212) + defining Unicode char U+2018 (decimal 8216) + defining Unicode char U+2019 (decimal 8217) + defining Unicode char U+201C (decimal 8220) + defining Unicode char U+201D (decimal 8221) +) +Now handling font encoding OMS ... +... processing UTF-8 mapping file for font encoding OMS + +(/usr/local/texlive/2015/texmf-dist/tex/latex/base/omsenc.dfu +File: omsenc.dfu 2014/09/29 v1.1m UTF-8 support for inputenc + defining Unicode char U+00A7 (decimal 167) + defining Unicode char U+00B6 (decimal 182) + defining Unicode char U+00B7 (decimal 183) + defining Unicode char U+2020 (decimal 8224) + defining Unicode char U+2021 (decimal 8225) + defining Unicode char U+2022 (decimal 8226) +) +Now handling font encoding OMX ... +... no UTF-8 mapping file for font encoding OMX +Now handling font encoding U ... +... no UTF-8 mapping file for font encoding U + defining Unicode char U+00A9 (decimal 169) + defining Unicode char U+00AA (decimal 170) + defining Unicode char U+00AE (decimal 174) + defining Unicode char U+00BA (decimal 186) + defining Unicode char U+02C6 (decimal 710) + defining Unicode char U+02DC (decimal 732) + defining Unicode char U+200C (decimal 8204) + defining Unicode char U+2026 (decimal 8230) + defining Unicode char U+2122 (decimal 8482) + defining Unicode char U+2423 (decimal 9251) +)) + defining Unicode char U+00A0 (decimal 160) + defining Unicode char U+2500 (decimal 9472) + defining Unicode char U+2502 (decimal 9474) + defining Unicode char U+2514 (decimal 9492) + defining Unicode char U+251C (decimal 9500) + defining Unicode char U+2572 (decimal 9586) + +(/usr/local/texlive/2015/texmf-dist/tex/latex/cmap/cmap.sty +Package: cmap 2008/03/06 v1.0h CMap support: searchable PDF +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2005/09/27 v1.99g Standard LaTeX package + +(/usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.def +File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 48. +)<>) +(/usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2013/01/14 v2.14 AMS math features +\@mathmargin=\skip43 + +For additional information on amsmath, use the `?' option. +(/usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2000/06/29 v2.01 + +(/usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 +\@emptytoks=\toks16 +\ex@=\dimen103 +)) +(/usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d +\pmbraise@=\dimen104 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 1999/12/14 v2.01 operator names +) +\inf@bad=\count88 +LaTeX Info: Redefining \frac on input line 210. +\uproot@=\count89 +\leftroot@=\count90 +LaTeX Info: Redefining \overline on input line 306. +\classnum@=\count91 +\DOTSCASE@=\count92 +LaTeX Info: Redefining \ldots on input line 378. +LaTeX Info: Redefining \dots on input line 381. +LaTeX Info: Redefining \cdots on input line 466. +\Mathstrutbox@=\box26 +\strutbox@=\box27 +\big@size=\dimen105 +LaTeX Font Info: Redeclaring font encoding OML on input line 566. +LaTeX Font Info: Redeclaring font encoding OMS on input line 567. +\macc@depth=\count93 +\c@MaxMatrixCols=\count94 +\dotsspace@=\muskip10 +\c@parentequation=\count95 +\dspbrk@lvl=\count96 +\tag@help=\toks17 +\row@=\count97 +\column@=\count98 +\maxfields@=\count99 +\andhelp@=\toks18 +\eqnshift@=\dimen106 +\alignsep@=\dimen107 +\tagshift@=\dimen108 +\tagwidth@=\dimen109 +\totwidth@=\dimen110 +\lineht@=\dimen111 +\@envbody=\toks19 +\multlinegap=\skip44 +\multlinetaggap=\skip45 +\mathdisplay@stack=\toks20 +LaTeX Info: Redefining \[ on input line 2665. +LaTeX Info: Redefining \] on input line 2666. +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols + +(/usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\symAMSa=\mathgroup4 +\symAMSb=\mathgroup5 +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +)) +(/usr/local/texlive/2015/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2014/09/25 3.9l The Babel package + +(/usr/local/texlive/2015/texmf-dist/tex/generic/babel-english/english.ldf +Language: english 2012/08/20 v3.3p English support from the babel system + +(/usr/local/texlive/2015/texmf-dist/tex/generic/babel/babel.def +File: babel.def 2014/09/25 3.9l Babel common definitions +\babel@savecnt=\count100 +\U@D=\dimen112 +) +\l@canadian = a dialect from \language\l@american +\l@australian = a dialect from \language\l@british +\l@newzealand = a dialect from \language\l@british +)) +(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/times.sty +Package: times 2005/04/12 PSNFSS-v9.2a (SPQR) +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/fncychap/fncychap.sty +Package: fncychap 2007/07/30 v1.34 LaTeX package (Revised chapters) +\RW=\skip46 +\mylen=\skip47 +\myhi=\skip48 +\px=\skip49 +\py=\skip50 +\pyy=\skip51 +\pxx=\skip52 +\c@AlphaCnt=\count101 +\c@AlphaDecCnt=\count102 +) +(./sphinx.sty +Package: sphinx 2019/09/02 v2.3.0 LaTeX package (Sphinx markup) + +(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ltxcmds.sty +Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO) +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2014/10/28 v1.15 key=value parser (DPC) +\KV@toks@=\toks21 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2014/10/28 v1.0p Standard LaTeX Graphics (DPC,SPQR) + +(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 1999/03/16 v1.09 sin cos tan (DPC) +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/graphics.cfg +File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live +) +Package graphics Info: Driver file: pdftex.def on input line 94. + +(/usr/local/texlive/2015/texmf-dist/tex/latex/pdftex-def/pdftex.def +File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX + +(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/infwarerr.sty +Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO) +) +\Gread@gobject=\count103 +)) +\Gin@req@height=\dimen113 +\Gin@req@width=\dimen114 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty +\fancy@headwidth=\skip53 +\f@ncyO@elh=\skip54 +\f@ncyO@erh=\skip55 +\f@ncyO@olh=\skip56 +\f@ncyO@orh=\skip57 +\f@ncyO@elf=\skip58 +\f@ncyO@erf=\skip59 +\f@ncyO@olf=\skip60 +\f@ncyO@orf=\skip61 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/base/textcomp.sty +Package: textcomp 2005/09/27 v1.99g Standard LaTeX package +Package textcomp Info: Sub-encoding information: +(textcomp) 5 = only ISO-Adobe without \textcurrency +(textcomp) 4 = 5 + \texteuro +(textcomp) 3 = 4 + \textohm +(textcomp) 2 = 3 + \textestimated + \textcurrency +(textcomp) 1 = TS1 - \textcircled - \t +(textcomp) 0 = TS1 (full) +(textcomp) Font families with sub-encoding setting implement +(textcomp) only a restricted character set as indicated. +(textcomp) Family '?' is the default used for unknown fonts. +(textcomp) See the documentation for details. +Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 79. + +(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def +File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file +Now handling font encoding TS1 ... +... processing UTF-8 mapping file for font encoding TS1 + +(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.dfu +File: ts1enc.dfu 2014/09/29 v1.1m UTF-8 support for inputenc + defining Unicode char U+00A2 (decimal 162) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00A4 (decimal 164) + defining Unicode char U+00A5 (decimal 165) + defining Unicode char U+00A6 (decimal 166) + defining Unicode char U+00A7 (decimal 167) + defining Unicode char U+00A8 (decimal 168) + defining Unicode char U+00A9 (decimal 169) + defining Unicode char U+00AA (decimal 170) + defining Unicode char U+00AC (decimal 172) + defining Unicode char U+00AE (decimal 174) + defining Unicode char U+00AF (decimal 175) + defining Unicode char U+00B0 (decimal 176) + defining Unicode char U+00B1 (decimal 177) + defining Unicode char U+00B2 (decimal 178) + defining Unicode char U+00B3 (decimal 179) + defining Unicode char U+00B4 (decimal 180) + defining Unicode char U+00B5 (decimal 181) + defining Unicode char U+00B6 (decimal 182) + defining Unicode char U+00B7 (decimal 183) + defining Unicode char U+00B9 (decimal 185) + defining Unicode char U+00BA (decimal 186) + defining Unicode char U+00BC (decimal 188) + defining Unicode char U+00BD (decimal 189) + defining Unicode char U+00BE (decimal 190) + defining Unicode char U+00D7 (decimal 215) + defining Unicode char U+00F7 (decimal 247) + defining Unicode char U+0192 (decimal 402) + defining Unicode char U+02C7 (decimal 711) + defining Unicode char U+02D8 (decimal 728) + defining Unicode char U+02DD (decimal 733) + defining Unicode char U+0E3F (decimal 3647) + defining Unicode char U+2016 (decimal 8214) + defining Unicode char U+2020 (decimal 8224) + defining Unicode char U+2021 (decimal 8225) + defining Unicode char U+2022 (decimal 8226) + defining Unicode char U+2030 (decimal 8240) + defining Unicode char U+2031 (decimal 8241) + defining Unicode char U+203B (decimal 8251) + defining Unicode char U+203D (decimal 8253) + defining Unicode char U+2044 (decimal 8260) + defining Unicode char U+204E (decimal 8270) + defining Unicode char U+2052 (decimal 8274) + defining Unicode char U+20A1 (decimal 8353) + defining Unicode char U+20A4 (decimal 8356) + defining Unicode char U+20A6 (decimal 8358) + defining Unicode char U+20A9 (decimal 8361) + defining Unicode char U+20AB (decimal 8363) + defining Unicode char U+20AC (decimal 8364) + defining Unicode char U+20B1 (decimal 8369) + defining Unicode char U+2103 (decimal 8451) + defining Unicode char U+2116 (decimal 8470) + defining Unicode char U+2117 (decimal 8471) + defining Unicode char U+211E (decimal 8478) + defining Unicode char U+2120 (decimal 8480) + defining Unicode char U+2122 (decimal 8482) + defining Unicode char U+2126 (decimal 8486) + defining Unicode char U+2127 (decimal 8487) + defining Unicode char U+212E (decimal 8494) + defining Unicode char U+2190 (decimal 8592) + defining Unicode char U+2191 (decimal 8593) + defining Unicode char U+2192 (decimal 8594) + defining Unicode char U+2193 (decimal 8595) + defining Unicode char U+2329 (decimal 9001) + defining Unicode char U+232A (decimal 9002) + defining Unicode char U+2422 (decimal 9250) + defining Unicode char U+25E6 (decimal 9702) + defining Unicode char U+25EF (decimal 9711) + defining Unicode char U+266A (decimal 9834) +)) +LaTeX Info: Redefining \oldstylenums on input line 334. +Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 349. +Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 350. +Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 351. +Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 352. +Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 353. +Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 354. +Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 355. +Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 356. +Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 357. +Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 358. +Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 359. +Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 360. +Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 361. +Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 362. +Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 363. +Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 364. +Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 365. +Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 366. +Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 367. +Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 368. +Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 369. +Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 370. +Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 371. +Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 372. + +Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 373. +Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 374. +Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 375. +Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 376. +Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 377. +Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 378. +Package textcomp Info: Setting lmr sub-encoding to TS1/0 on input line 379. +Package textcomp Info: Setting lmdh sub-encoding to TS1/0 on input line 380. +Package textcomp Info: Setting lmss sub-encoding to TS1/0 on input line 381. +Package textcomp Info: Setting lmssq sub-encoding to TS1/0 on input line 382. +Package textcomp Info: Setting lmvtt sub-encoding to TS1/0 on input line 383. +Package textcomp Info: Setting lmtt sub-encoding to TS1/0 on input line 384. +Package textcomp Info: Setting qhv sub-encoding to TS1/0 on input line 385. +Package textcomp Info: Setting qag sub-encoding to TS1/0 on input line 386. +Package textcomp Info: Setting qbk sub-encoding to TS1/0 on input line 387. +Package textcomp Info: Setting qcr sub-encoding to TS1/0 on input line 388. +Package textcomp Info: Setting qcs sub-encoding to TS1/0 on input line 389. +Package textcomp Info: Setting qpl sub-encoding to TS1/0 on input line 390. +Package textcomp Info: Setting qtm sub-encoding to TS1/0 on input line 391. +Package textcomp Info: Setting qzc sub-encoding to TS1/0 on input line 392. +Package textcomp Info: Setting qhvc sub-encoding to TS1/0 on input line 393. +Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 394. +Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 395. +Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 396. +Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 397. +Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 398. +Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 399. +Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 400. +Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 401. +Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 402. +Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 403. +Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 404. +Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 405. +Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 406. +Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 407. +Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 408. +Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 409. +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/titlesec/titlesec.sty +Package: titlesec 2011/12/15 v2.10.0 Sectioning titles +\ttl@box=\box28 +\beforetitleunit=\skip62 +\aftertitleunit=\skip63 +\ttl@plus=\dimen115 +\ttl@minus=\dimen116 +\ttl@toksa=\toks22 +\titlewidth=\dimen117 +\titlewidthlast=\dimen118 +\titlewidthfirst=\dimen119 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/tabulary/tabulary.sty +Package: tabulary 2014/06/11 v0.10 tabulary package (DPC) + +(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/array.sty +Package: array 2014/10/28 v2.4c Tabular extension package (FMi) +\col@sep=\dimen120 +\extrarowheight=\dimen121 +\NC@list=\toks23 +\extratabsurround=\skip64 +\backup@length=\skip65 +) +\TY@count=\count104 +\TY@linewidth=\dimen122 +\tymin=\dimen123 +\tymax=\dimen124 +\TY@tablewidth=\dimen125 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/longtable.sty +Package: longtable 2014/10/28 v4.11 Multi-page Table package (DPC) +\LTleft=\skip66 +\LTright=\skip67 +\LTpre=\skip68 +\LTpost=\skip69 +\LTchunksize=\count105 +\LTcapwidth=\dimen126 +\LT@head=\box29 +\LT@firsthead=\box30 +\LT@foot=\box31 +\LT@lastfoot=\box32 +\LT@cols=\count106 +\LT@rows=\count107 +\c@LT@tables=\count108 +\c@LT@chunks=\count109 +\LT@p@ftn=\toks24 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/varwidth/varwidth.sty +Package: varwidth 2009/03/30 ver 0.92; Variable-width minipages +\@vwid@box=\box33 +\sift@deathcycles=\count110 +\@vwid@loff=\dimen127 +\@vwid@roff=\dimen128 +) +(./sphinxmulticell.sty +Package: sphinxmulticell 2017/02/23 v1.6 better span rows and columns of a tabl +e (Sphinx team) +\sphinx@TY@tablewidth=\dimen129 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/base/makeidx.sty +Package: makeidx 2014/09/29 v1.0m Standard LaTeX package +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/framed/framed.sty +Package: framed 2011/10/22 v 0.96: framed or shaded text with page breaks +\OuterFrameSep=\skip70 +\fb@frw=\dimen130 +\fb@frh=\dimen131 +\FrameRule=\dimen132 +\FrameSep=\dimen133 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2007/01/21 v2.11 LaTeX color extensions (UK) + +(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg +File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive +) +Package xcolor Info: Driver file: pdftex.def on input line 225. +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1337. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1341. +Package xcolor Info: Model `RGB' extended on input line 1353. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1355. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1356. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1357. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1358. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1359. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1360. +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty +Package: fancyvrb 2008/02/07 + +Style option: `fancyvrb' v2.7a, with DG/SPQR fixes, and firstline=lastline fix +<2008/02/07> (tvz) +\FV@CodeLineNo=\count111 +\FV@InFile=\read1 +\FV@TabBox=\box34 +\c@FancyVerbLine=\count112 +\FV@StepNumber=\count113 +\FV@OutFile=\write3 +) (./footnotehyper-sphinx.sty +Package: footnotehyper-sphinx 2017/10/27 v1.7 hyperref aware footnote.sty for s +phinx (JFB) +\FNH@notes=\box35 +\FNH@width=\dimen134 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/float/float.sty +Package: float 2001/11/08 v1.3d Float enhancements (AL) +\c@float@type=\count114 +\float@exts=\toks25 +\float@box=\box36 +\@float@everytoks=\toks26 +\@floatcapt=\box37 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/wrapfig/wrapfig.sty +\wrapoverhang=\dimen135 +\WF@size=\dimen136 +\c@WF@wrappedlines=\count115 +\WF@box=\box38 +\WF@everypar=\toks27 +Package: wrapfig 2003/01/31 v 3.6 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/parskip/parskip.sty +Package: parskip 2001/04/09 non-zero parskip adjustments +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/base/alltt.sty +Package: alltt 1997/06/16 v2.0g defines alltt environment +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/upquote/upquote.sty +Package: upquote 2012/04/19 v1.3 upright-quote and grave-accent glyphs in verba +tim +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/capt-of/capt-of.sty +Package: capt-of 2009/12/29 v0.2 standard captions outside of floats +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/needspace/needspace.sty +Package: needspace 2010/09/12 v1.3d reserve vertical space +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/carlisle/remreset.sty) +(./sphinxhighlight.sty +Package: sphinxhighlight 2016/05/29 stylesheet for highlighting with pygments +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/kvoptions.sty +Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO) + +(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty +Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO) + +(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/etexcmds.sty +Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO) + +(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifluatex.sty +Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO) +Package ifluatex Info: LuaTeX not detected. +) +Package etexcmds Info: Could not find \expanded. +(etexcmds) That can mean that you are not using pdfTeX 1.50 or +(etexcmds) that some package has redefined \expanded. +(etexcmds) In the latter case, load this package earlier. +))) +\sphinxverbatimsep=\dimen137 +\sphinxverbatimborder=\dimen138 +\sphinxshadowsep=\dimen139 +\sphinxshadowsize=\dimen140 +\sphinxshadowrule=\dimen141 +\spx@notice@border=\dimen142 +\spx@image@maxheight=\dimen143 +\spx@image@box=\dimen144 +\c@literalblock=\count116 +\sphinxcontinuationbox=\box39 +\sphinxvisiblespacebox=\box40 +\sphinxVerbatim@TitleBox=\box41 +\sphinxVerbatim@ContentsBox=\box42 +\py@argswidth=\skip71 +\lineblockindentation=\skip72 +\DUlineblockindent=\skip73 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/geometry/geometry.sty +Package: geometry 2010/09/12 v5.6 Page Geometry + +(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifpdf.sty +Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO) +Package ifpdf Info: pdfTeX in PDF mode is detected. +) +(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ifvtex.sty +Package: ifvtex 2010/03/01 v1.5 Detect VTeX and its facilities (HO) +Package ifvtex Info: VTeX not detected. +) +(/usr/local/texlive/2015/texmf-dist/tex/generic/ifxetex/ifxetex.sty +Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional +) +\Gm@cnth=\count117 +\Gm@cntv=\count118 +\c@Gm@tempcnt=\count119 +\Gm@bindingoffset=\dimen145 +\Gm@wd@mp=\dimen146 +\Gm@odd@mp=\dimen147 +\Gm@even@mp=\dimen148 +\Gm@layoutwidth=\dimen149 +\Gm@layoutheight=\dimen150 +\Gm@layouthoffset=\dimen151 +\Gm@layoutvoffset=\dimen152 +\Gm@dimlist=\toks28 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hyperref.sty +Package: hyperref 2012/11/06 v6.83m Hypertext links for LaTeX + +(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty +Package: hobsub-hyperref 2012/05/28 v1.13 Bundle oberdiek, subset hyperref (HO) + + +(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty +Package: hobsub-generic 2012/05/28 v1.13 Bundle oberdiek, subset generic (HO) +Package: hobsub 2012/05/28 v1.13 Construct package bundles (HO) +Package hobsub Info: Skipping package `infwarerr' (already loaded). +Package hobsub Info: Skipping package `ltxcmds' (already loaded). +Package hobsub Info: Skipping package `ifluatex' (already loaded). +Package hobsub Info: Skipping package `ifvtex' (already loaded). +Package: intcalc 2007/09/27 v1.1 Expandable calculations with integers (HO) +Package hobsub Info: Skipping package `ifpdf' (already loaded). +Package hobsub Info: Skipping package `etexcmds' (already loaded). +Package hobsub Info: Skipping package `kvsetkeys' (already loaded). +Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO) +Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO +) +Package pdftexcmds Info: LuaTeX not detected. +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +Package pdftexcmds Info: \pdfdraftmode found. +Package: pdfescape 2011/11/25 v1.13 Implements pdfTeX's escape features (HO) +Package: bigintcalc 2012/04/08 v1.3 Expandable calculations on big integers (HO +) +Package: bitset 2011/01/30 v1.1 Handle bit-vector datatype (HO) +Package: uniquecounter 2011/01/30 v1.2 Provide unlimited unique counter (HO) +) +Package hobsub Info: Skipping package `hobsub' (already loaded). +Package: letltxmacro 2010/09/02 v1.4 Let assignment for LaTeX macros (HO) +Package: hopatch 2012/05/28 v1.2 Wrapper for package hooks (HO) +Package: xcolor-patch 2011/01/30 xcolor patch +Package: atveryend 2011/06/30 v1.8 Hooks at the very end of document (HO) +Package atveryend Info: \enddocument detected (standard20110627). +Package: atbegshi 2011/10/05 v1.16 At begin shipout hook (HO) +Package: refcount 2011/10/16 v3.4 Data extraction from label references (HO) +Package: hycolor 2011/01/30 v1.7 Color options for hyperref/bookmark (HO) +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/auxhook.sty +Package: auxhook 2011/03/04 v1.3 Hooks for auxiliary files (HO) +) +\@linkdim=\dimen153 +\Hy@linkcounter=\count120 +\Hy@pagecounter=\count121 + +(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/pd1enc.def +File: pd1enc.def 2012/11/06 v6.83m Hyperref: PDFDocEncoding definition (HO) +Now handling font encoding PD1 ... +... no UTF-8 mapping file for font encoding PD1 +) +\Hy@SavedSpaceFactor=\count122 + +(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/hyperref.cfg +File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive +) +Package hyperref Info: Option `unicode' set `true' on input line 4319. + +(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/puenc.def +File: puenc.def 2012/11/06 v6.83m Hyperref: PDF Unicode definition (HO) +Now handling font encoding PU ... +... no UTF-8 mapping file for font encoding PU +) +Package hyperref Info: Option `colorlinks' set `true' on input line 4319. +Package hyperref Info: Option `breaklinks' set `true' on input line 4319. +Package hyperref Info: Hyper figures OFF on input line 4443. +Package hyperref Info: Link nesting OFF on input line 4448. +Package hyperref Info: Hyper index ON on input line 4451. +Package hyperref Info: Plain pages OFF on input line 4458. +Package hyperref Info: Backreferencing OFF on input line 4463. +Package hyperref Info: Implicit mode ON; LaTeX internals redefined. +Package hyperref Info: Bookmarks ON on input line 4688. +\c@Hy@tempcnt=\count123 + +(/usr/local/texlive/2015/texmf-dist/tex/latex/url/url.sty +\Urlmuskip=\muskip11 +Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. +) +LaTeX Info: Redefining \url on input line 5041. +\XeTeXLinkMargin=\dimen154 +\Fld@menulength=\count124 +\Field@Width=\dimen155 +\Fld@charsize=\dimen156 +Package hyperref Info: Hyper figures OFF on input line 6295. +Package hyperref Info: Link nesting OFF on input line 6300. +Package hyperref Info: Hyper index ON on input line 6303. +Package hyperref Info: backreferencing OFF on input line 6310. +Package hyperref Info: Link coloring ON on input line 6313. +Package hyperref Info: Link coloring with OCG OFF on input line 6320. +Package hyperref Info: PDF/A mode OFF on input line 6325. +LaTeX Info: Redefining \ref on input line 6365. +LaTeX Info: Redefining \pageref on input line 6369. +\Hy@abspage=\count125 +\c@Item=\count126 +\c@Hfootnote=\count127 +) + +Package hyperref Message: Driver (autodetected): hpdftex. + +(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hpdftex.def +File: hpdftex.def 2012/11/06 v6.83m Hyperref driver for pdfTeX +\Fld@listcount=\count128 +\c@bookmark@seq@number=\count129 + +(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty +Package: rerunfilecheck 2011/04/15 v1.7 Rerun checks for auxiliary files (HO) +Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 +82. +) +\Hy@SectionHShift=\skip74 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/hypcap.sty +Package: hypcap 2011/02/16 v1.11 Adjusting the anchors of captions (HO) +) +(./sphinxmessages.sty +Package: sphinxmessages 2019/01/04 v2.0 Localized LaTeX macros (Sphinx team) +) +\@indexfile=\write4 +\openout4 = `python.idx'. + + +Writing index file python.idx +(./python.aux) +\openout1 = `python.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 83. +LaTeX Font Info: Try loading font information for TS1+cmr on input line 83. + (/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1cmr.fd +File: ts1cmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Try loading font information for T1+ptm on input line 83. + +(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1ptm.fd +File: t1ptm.fd 2001/06/04 font definitions for T1/ptm. +) +(/usr/local/texlive/2015/texmf-dist/tex/context/base/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count130 +\scratchdimen=\dimen157 +\scratchbox=\box43 +\nofMPsegments=\count131 +\nofMParguments=\count132 +\everyMPshowfont=\toks29 +\MPscratchCnt=\count133 +\MPscratchDim=\dimen158 +\MPnumerator=\count134 +\makeMPintoPDFobject=\count135 +\everyMPtoPDFconversion=\toks30 +) (/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty +Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf + +(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/grfext.sty +Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO) +) +Package grfext Info: Graphics extension search list: +(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE +G,.JBIG2,.JB2,.eps] +(grfext) \AppendGraphicsExtensions on input line 452. + +(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +*geometry* driver: auto-detecting +*geometry* detected driver: pdftex +*geometry* verbose mode - [ preamble ] result: +* driver: pdftex +* paper: letterpaper +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: twoside +* h-part:(L,W,R)=(72.26999pt, 469.75502pt, 72.26999pt) +* v-part:(T,H,B)=(72.26999pt, 650.43001pt, 72.26999pt) +* \paperwidth=614.295pt +* \paperheight=794.96999pt +* \textwidth=469.75502pt +* \textheight=650.43001pt +* \oddsidemargin=0.0pt +* \evensidemargin=0.0pt +* \topmargin=-37.0pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=10.0pt +* \footskip=30.0pt +* \marginparwidth=36.135pt +* \marginparsep=11.0pt +* \columnsep=10.0pt +* \skip\footins=9.0pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidetrue +* \@mparswitchtrue +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +\AtBeginShipoutBox=\box44 +Package hyperref Info: Link coloring ON on input line 83. +(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/nameref.sty +Package: nameref 2012/10/27 v2.43 Cross-referencing by name of section + +(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/gettitlestring.sty +Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO) +) +\c@section@level=\count136 +) +LaTeX Info: Redefining \ref on input line 83. +LaTeX Info: Redefining \pageref on input line 83. +LaTeX Info: Redefining \nameref on input line 83. +\@outlinefile=\write5 +\openout5 = `python.out'. + +Package hyperref Info: Option `pageanchor' set `false' on input line 86. +LaTeX Font Info: Try loading font information for T1+phv on input line 86. + +(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1phv.fd +File: t1phv.fd 2001/06/04 scalable font definitions for T1/phv. +) +LaTeX Font Info: Font shape `T1/phv/bx/n' in size <10> not available +(Font) Font shape `T1/phv/b/n' tried instead on input line 86. +LaTeX Font Info: Font shape `T1/phv/bx/n' in size <24.88> not available +(Font) Font shape `T1/phv/b/n' tried instead on input line 86. +LaTeX Font Info: Font shape `T1/phv/bx/it' in size <10> not available +(Font) Font shape `T1/phv/b/it' tried instead on input line 86. +LaTeX Font Info: Font shape `T1/phv/b/it' in size <10> not available +(Font) Font shape `T1/phv/b/sl' tried instead on input line 86. +LaTeX Font Info: Font shape `T1/phv/bx/it' in size <17.28> not available +(Font) Font shape `T1/phv/b/it' tried instead on input line 86. +LaTeX Font Info: Font shape `T1/phv/b/it' in size <17.28> not available +(Font) Font shape `T1/phv/b/sl' tried instead on input line 86. +LaTeX Font Info: Font shape `T1/phv/bx/n' in size <17.28> not available +(Font) Font shape `T1/phv/b/n' tried instead on input line 86. +<><><><> +LaTeX Font Info: Try loading font information for U+msa on input line 86. + +(/usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Try loading font information for U+msb on input line 86. + +(/usr/local/texlive/2015/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) +LaTeX Font Info: Font shape `T1/phv/bx/n' in size <12> not available +(Font) Font shape `T1/phv/b/n' tried instead on input line 86. + [1 + +{/usr/local/texlive/2015/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] [2 + + +] +LaTeX Font Info: Font shape `T1/phv/bx/n' in size <14.4> not available +(Font) Font shape `T1/phv/b/n' tried instead on input line 88. +\tf@toc=\write6 +\openout6 = `python.toc'. + + [1 + +] [2 + +] [1] +[2 + +] +Chapter 1. + +Underfull \hbox (badness 10000) in paragraph at lines 150--150 +[]\T1/ptm/m/it/10 Morten Hjorth-Jensen + [] + + +Overfull \hbox (17.084pt too wide) in paragraph at lines 150--150 +[]\T1/ptm/m/n/10 hjensen@msu.edu| + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 150--150 +[]\T1/ptm/m/n/10 Of-fice: + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 150--150 +\T1/ptm/m/n/10 NSCL/FRIB + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 150--150 +[]\T1/ptm/m/n/10 5179087290/5172491375/+47- + [] + + +Overfull \hbox (6.0pt too wide) in paragraph at lines 246--246 +[]| + [] + + +Overfull \hbox (6.0pt too wide) in paragraph at lines 246--246 +[]| + [] + +[3] [4] +Chapter 2. +LaTeX Font Info: Try loading font information for TS1+ptm on input line 358. + +(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/ts1ptm.fd +File: ts1ptm.fd 2001/06/04 font definitions for TS1/ptm. +) +Underfull \hbox (badness 10000) in paragraph at lines 363--364 +[]\T1/ptm/m/n/10 AMS: An-ders Malthe-Srenssen, El-e-men-tary Me-chan-ics us-in +g Python (Springer 2015), + [] + + +Overfull \hbox (48.76974pt too wide) in paragraph at lines 363--364 +\T1/ptm/m/n/10 https://www.springer.com/gp/book/9783319195957 and https://githu +b.com/mhjensen/Physics321/tree/master/doc/Literature + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 366--367 +[]\T1/ptm/m/it/10 Lecture notes\T1/ptm/m/n/10 : Posted lec-ture notes are in th +e doc/pub folder here or at + [] + +[5 + +] [6 + +] +Chapter 3. + +Underfull \hbox (badness 10000) in paragraph at lines 385--386 +[]\T1/ptm/m/n/10 Friday: Forces and New-ton's laws of mo-tion. JRT chap-ter 1.4 + and lec-ture notes + [] + +[7] [8] +Underfull \hbox (badness 10000) in paragraph at lines 532--533 +[]\T1/ptm/m/n/10 Monday: Grav-ity and cen-tral force prob-lems, cen-ter of mass + co-or-di- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 532--533 +\T1/ptm/m/n/10 nates. Lec-ture notes and Tay-lor chap-ter 8. PDF file for notes + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 538--539 +[]\T1/ptm/m/n/10 Friday: Grav-ity and cen-tral force prob-lems, cen-trifu-gal b +ar-ri-ers. PDF file for notes + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 538--539 +\T1/ptm/m/n/10 https://github.com/mhjensen/Physics321/blob/master/doc/HandWritt +enNotes/NotesMarch13.pdf and video + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 546--547 +[]\T1/ptm/m/n/10 Monday: Grav-ity and cen-tral force prob-lems, el-lip-ti-cal o +r-bits and Ke- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 546--547 +\T1/ptm/m/n/10 pler's laws, 7th home-work, due March 23. PDF file for notes + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 546--547 +\T1/ptm/m/n/10 https://github.com/mhjensen/Physics321/blob/master/doc/HandWritt +enNotes/NotesMarch16.pdf and video + [] + + +Underfull \hbox (badness 8075) in paragraph at lines 552--553 +[]\T1/ptm/m/n/10 Friday: El-lip-ti-cal or-bits, ex-am-ples and two-body scat-te +r-ing prob-lems. PDF file for notes + [] + +[9] +Underfull \hbox (badness 10000) in paragraph at lines 560--561 +[]\T1/ptm/m/n/10 Monday: Cen-tral force prob-lems, sum-mary and dis-cus-sion of + two-body scat- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 560--561 +\T1/ptm/m/n/10 ter-ing prob-lems. 8th home-work, due March 30. PDF file for not +es + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 560--561 +\T1/ptm/m/n/10 https://github.com/mhjensen/Physics321/blob/master/doc/HandWritt +enNotes/NotesMarch23.pdf and video + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 566--567 +[]\T1/ptm/m/n/10 Friday: Two-body scat-ter-ing (Tay-lor chap-ter 14). PDF file +for notes + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 566--567 +\T1/ptm/m/n/10 https://github.com/mhjensen/Physics321/blob/master/doc/HandWritt +enNotes/NotesMarch27.pdf and video + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 588--589 +[]\T1/ptm/m/n/10 Monday: Ro-tat-ing non-inertial frames, Cori-o-lis force and F +ou-calt's pen-du-lum (Tay-lor sec- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 588--589 +\T1/ptm/m/n/10 tions 9.7-9.9). Sec-ond midterm avail-able, due Fry-day April 17 +. PDF file for notes + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 588--589 +\T1/ptm/m/n/10 https://github.com/mhjensen/Physics321/blob/master/doc/HandWritt +enNotes/NotesApril6.pdf and video + [] + +[10] +Underfull \hbox (badness 10000) in paragraph at lines 602--603 +[]\T1/ptm/m/n/10 Monday: Lan-grangian for-mal-ism, dis-cus-sion of ex-am-ples. +Tay-lor chap-ters 6 and + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 602--603 +\T1/ptm/m/n/10 7. 10th home-work and ex-tra as-sign-ments, due April 24. PDF fi +le for notes + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 602--603 +\T1/ptm/m/n/10 https://github.com/mhjensen/Physics321/blob/master/doc/HandWritt +enNotes/NotesApril13.pdf and video + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 608--609 +[]\T1/ptm/m/n/10 Friday: La-grangian For-mal-ism, con-ser-va-tion laws and ex-a +m-ples, from the clas-si-cal pen- + [] + + +Underfull \hbox (badness 6825) in paragraph at lines 608--609 +\T1/ptm/m/n/10 du-lum to Fou-cault's pen-du-lum. Tay-lor chap-ter 7 and lec-tur +e notes. PDF file for notes + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 608--609 +\T1/ptm/m/n/10 https://github.com/mhjensen/Physics321/blob/master/doc/HandWritt +enNotes/NotesApril17.pdf and video + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 616--617 +[]\T1/ptm/m/n/10 Monday: La-grangian for-mal-ism, con-ser-va-tion laws. Ex-am-p +les. PDF file for notes + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 616--617 +\T1/ptm/m/n/10 https://github.com/mhjensen/Physics321/blob/master/doc/HandWritt +enNotes/NotesApril20.pdf and video + [] + +[11] [12 + +] +Chapter 4. +[13] [14] +LaTeX Font Info: Font shape `T1/ptm/bx/n' in size <10> not available +(Font) Font shape `T1/ptm/b/n' tried instead on input line 821. + [15] +LaTeX Font Info: Try loading font information for T1+pcr on input line 903. + (/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1pcr.fd +File: t1pcr.fd 2001/06/04 font definitions for T1/pcr. +) +LaTeX Font Info: Font shape `T1/pcr/bx/n' in size <9> not available +(Font) Font shape `T1/pcr/b/n' tried instead on input line 904. +LaTeX Font Info: Font shape `T1/pcr/m/it' in size <9> not available +(Font) Font shape `T1/pcr/m/sl' tried instead on input line 906. +LaTeX Font Info: Try loading font information for TS1+pcr on input line 933. + + +(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/ts1pcr.fd +File: ts1pcr.fd 2001/06/04 font definitions for TS1/pcr. +) +LaTeX Font Info: Font shape `TS1/pcr/m/it' in size <9> not available +(Font) Font shape `TS1/pcr/m/sl' tried instead on input line 936. + [16] [17] + +File: chapter2_25_1.png Graphic file (type png) + +Package pdftex.def Info: chapter2_25_1.png used on input line 1011. +(pdftex.def) Requested size: 469.76932pt x 455.59856pt. + +[18 <./chapter2_25_1.png>] [19] [20] [21] [22] [23] [24] [25] + +File: chapter2_121_1.png Graphic file (type png) + + +Package pdftex.def Info: chapter2_121_1.png used on input line 1571. +(pdftex.def) Requested size: 432.6152pt x 284.06053pt. + [26] [27 <./chapter2_121_1.png>] [28] [29] [30] +[31] [32] [33] [34] [35] [36] [37] + +! LaTeX Error: Bad math environment delimiter. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2400 \end{split} + +? s +OK, entering \scrollmode... + +! Package amsmath Error: \tag not allowed here. + +See the amsmath package documentation for explanation. +Type H for immediate help. + ... + +l.2400 \end{split} + +\tag cannot be used at this point. If you don't understand why +you should consult the documentation. +But don't worry: just continue, and I'll forget what happened. + +! You can't use `\eqno' in math mode. +\endmathdisplay@a ...\df@tag \@empty \else \veqno + \alt@tag \df@tag \fi \ifx ... +l.2400 \end{split} + +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! Missing \endgroup inserted. + + \endgroup +l.2400 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing } inserted. + + } +l.2400 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + + +! LaTeX Error: \begin{split} on input line 2400 ended by \end{equation}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2400 \end{split} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + +! Missing $ inserted. + + $ +l.2400 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing } inserted. + + } +l.2400 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing \cr inserted. + + \cr +l.2400 \end{split} + +I'm guessing that you meant to end an alignment here. + +! Missing { inserted. + + { +l.2400 \end{split} + +I've put in what seems to be necessary to fix +the current column of the current alignment. +Try to go on, since this might almost work. + +! Missing $ inserted. + + $ +l.2400 \end{split} + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Missing } inserted. + + } +l.2400 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing { inserted. + + { +l.2400 \end{split} + +I've put in what seems to be necessary to fix +the current column of the current alignment. +Try to go on, since this might almost work. + +! Missing } inserted. + + } +l.2400 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + + +! LaTeX Error: \begin{equation*} on input line 2394 ended by \end{split}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2400 \end{split} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + +! Missing $ inserted. + + $ +l.2400 \end{split} + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Misplaced alignment tab character &. +\math@cr@@@ ->\ifst@rred \nonumber \fi & + \relax \make@display@tag \ifst@rred ... +l.2400 \end{split} + +I can't figure out why you would want to use a tab mark +here. If you just want an ampersand, the remedy is +simple: Just type `I\&' now. But if some right brace +up above has ended a previous alignment prematurely, +you're probably due for more error messages, and you +might try typing `S' now just to see what is salvageable. + +! Misplaced \cr. +\math@cr@@@ ...fi \global \advance \row@ \@ne \cr + +l.2400 \end{split} + +I can't figure out why you would want to use a tab mark +or \cr or \span just now. If something like a right brace +up above has ended a previous alignment prematurely, +you're probably due for more error messages, and you +might try typing `S' now just to see what is salvageable. + +! Extra }, or forgotten $. +\gmeasure@ ...savetaglength@ \crcr #1\math@cr@@@ } + }\restorecounters@ \if@fle... +l.2400 \end{split} + +I've deleted a group-closing symbol because it seems to be +spurious, as in `$x}$'. But perhaps the } is legitimate and +you forgot something else, as in `\hbox{$x}'. In such cases +the way to recover is to insert both the forgotten and the +deleted material, e.g., by typing `I$}'. + +! Extra }, or forgotten $. +\gmeasure@ ...avetaglength@ \crcr #1\math@cr@@@ }} + \restorecounters@ \if@fleq... +l.2400 \end{split} + +I've deleted a group-closing symbol because it seems to be +spurious, as in `$x}$'. But perhaps the } is legitimate and +you forgot something else, as in `\hbox{$x}'. In such cases +the way to recover is to insert both the forgotten and the +deleted material, e.g., by typing `I$}'. + +! Missing $ inserted. + + $ +l.2400 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing } inserted. + + } +l.2400 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing $ inserted. + + $ +l.2400 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Display math should end with $$. + + \endgroup +l.2400 \end{split} + +The `$' that I just saw supposedly matches a previous `$$'. +So I shall assume that you typed `$$' both times. + + +! Package amsmath Error: \begin{split} won't work here. + +See the amsmath package documentation for explanation. +Type H for immediate help. + ... + +l.2400 \end{split} + +\Did you forget a preceding \begin{equation}? +If not, perhaps the `aligned' environment is what you want. + +! Missing number, treated as zero. + + \relax +l.2401 \end{equation*} + +A number should have been here; I inserted `0'. +(If you can't figure out why I needed to see a number, +look up `weird error' in the index to The TeXbook.) + +! Illegal unit of measure (pt inserted). + + \relax +l.2401 \end{equation*} + +Dimensions can be in units of em, ex, in, pt, pc, +cm, mm, dd, cc, nd, nc, bp, or sp; but yours is a new one! +I'll assume that you meant to say pt, for printer's points. +To recover gracefully from this error, it's best to +delete the erroneous units; e.g., type `2' to delete +two letters. (See Chapter 27 of The TeXbook.) + +! Too many }'s. +\endmathdisplay@a ...@ \totwidth@ \egroup \egroup + +l.2401 \end{equation*} + +You've closed more groups than you opened. +Such booboos are generally harmless, so keep going. + + +! LaTeX Error: \begin{document} ended by \end{equation*}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2401 \end{equation*} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + +! Missing $ inserted. + + $ +l.2401 \end{equation*} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Display math should end with $$. + + \endgroup +l.2401 \end{equation*} + +The `$' that I just saw supposedly matches a previous `$$'. +So I shall assume that you typed `$$' both times. + +! Extra \endgroup. + \endgroup + +l.2401 \end{equation*} + +Things are pretty mixed up, but I think the worst is over. + + +! LaTeX Error: Bad math environment delimiter. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2417 \end{split} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + + +! Package amsmath Error: \tag not allowed here. + +See the amsmath package documentation for explanation. +Type H for immediate help. + ... + +l.2417 \end{split} + +\tag cannot be used at this point. If you don't understand why +you should consult the documentation. +But don't worry: just continue, and I'll forget what happened. + +! You can't use `\eqno' in math mode. +\endmathdisplay@a ...\df@tag \@empty \else \veqno + \alt@tag \df@tag \fi \ifx ... +l.2417 \end{split} + +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! Missing \endgroup inserted. + + \endgroup +l.2417 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing } inserted. + + } +l.2417 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + + +! LaTeX Error: \begin{split} on input line 2417 ended by \end{equation}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2417 \end{split} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + +! Missing $ inserted. + + $ +l.2417 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing } inserted. + + } +l.2417 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing \cr inserted. + + \cr +l.2417 \end{split} + +I'm guessing that you meant to end an alignment here. + +! Missing { inserted. + + { +l.2417 \end{split} + +I've put in what seems to be necessary to fix +the current column of the current alignment. +Try to go on, since this might almost work. + +! Missing $ inserted. + + $ +l.2417 \end{split} + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Missing } inserted. + + } +l.2417 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing { inserted. + + { +l.2417 \end{split} + +I've put in what seems to be necessary to fix +the current column of the current alignment. +Try to go on, since this might almost work. + +! Missing } inserted. + + } +l.2417 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + + +! LaTeX Error: \begin{equation*} on input line 2411 ended by \end{split}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2417 \end{split} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + +! Missing $ inserted. + + $ +l.2417 \end{split} + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Misplaced alignment tab character &. +\math@cr@@@ ->\ifst@rred \nonumber \fi & + \relax \make@display@tag \ifst@rred ... +l.2417 \end{split} + +I can't figure out why you would want to use a tab mark +here. If you just want an ampersand, the remedy is +simple: Just type `I\&' now. But if some right brace +up above has ended a previous alignment prematurely, +you're probably due for more error messages, and you +might try typing `S' now just to see what is salvageable. + +! Misplaced \cr. +\math@cr@@@ ...fi \global \advance \row@ \@ne \cr + +l.2417 \end{split} + +I can't figure out why you would want to use a tab mark +or \cr or \span just now. If something like a right brace +up above has ended a previous alignment prematurely, +you're probably due for more error messages, and you +might try typing `S' now just to see what is salvageable. + +! Extra }, or forgotten $. +\gmeasure@ ...savetaglength@ \crcr #1\math@cr@@@ } + }\restorecounters@ \if@fle... +l.2417 \end{split} + +I've deleted a group-closing symbol because it seems to be +spurious, as in `$x}$'. But perhaps the } is legitimate and +you forgot something else, as in `\hbox{$x}'. In such cases +the way to recover is to insert both the forgotten and the +deleted material, e.g., by typing `I$}'. + +! Extra }, or forgotten $. +\gmeasure@ ...avetaglength@ \crcr #1\math@cr@@@ }} + \restorecounters@ \if@fleq... +l.2417 \end{split} + +I've deleted a group-closing symbol because it seems to be +spurious, as in `$x}$'. But perhaps the } is legitimate and +you forgot something else, as in `\hbox{$x}'. In such cases +the way to recover is to insert both the forgotten and the +deleted material, e.g., by typing `I$}'. + +! Missing $ inserted. + + $ +l.2417 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing } inserted. + + } +l.2417 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing $ inserted. + + $ +l.2417 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Display math should end with $$. + + \endgroup +l.2417 \end{split} + +The `$' that I just saw supposedly matches a previous `$$'. +So I shall assume that you typed `$$' both times. + + +! Package amsmath Error: \begin{split} won't work here. + +See the amsmath package documentation for explanation. +Type H for immediate help. + ... + +l.2417 \end{split} + +\Did you forget a preceding \begin{equation}? +If not, perhaps the `aligned' environment is what you want. + +! Missing number, treated as zero. + + \relax +l.2418 \end{equation*} + +A number should have been here; I inserted `0'. +(If you can't figure out why I needed to see a number, +look up `weird error' in the index to The TeXbook.) + +! Illegal unit of measure (pt inserted). + + \relax +l.2418 \end{equation*} + +Dimensions can be in units of em, ex, in, pt, pc, +cm, mm, dd, cc, nd, nc, bp, or sp; but yours is a new one! +I'll assume that you meant to say pt, for printer's points. +To recover gracefully from this error, it's best to +delete the erroneous units; e.g., type `2' to delete +two letters. (See Chapter 27 of The TeXbook.) + +! Too many }'s. +\endmathdisplay@a ...@ \totwidth@ \egroup \egroup + +l.2418 \end{equation*} + +You've closed more groups than you opened. +Such booboos are generally harmless, so keep going. + + +! LaTeX Error: \begin{document} ended by \end{equation*}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2418 \end{equation*} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + +! Missing $ inserted. + + $ +l.2418 \end{equation*} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Display math should end with $$. + + \endgroup +l.2418 \end{equation*} + +The `$' that I just saw supposedly matches a previous `$$'. +So I shall assume that you typed `$$' both times. + +! Extra \endgroup. + \endgroup + +l.2418 \end{equation*} + +Things are pretty mixed up, but I think the worst is over. + + +! LaTeX Error: Bad math environment delimiter. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2436 \end{split} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + + +! Package amsmath Error: \tag not allowed here. + +See the amsmath package documentation for explanation. +Type H for immediate help. + ... + +l.2436 \end{split} + +\tag cannot be used at this point. If you don't understand why +you should consult the documentation. +But don't worry: just continue, and I'll forget what happened. + +! You can't use `\eqno' in math mode. +\endmathdisplay@a ...\df@tag \@empty \else \veqno + \alt@tag \df@tag \fi \ifx ... +l.2436 \end{split} + +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! Missing \endgroup inserted. + + \endgroup +l.2436 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing } inserted. + + } +l.2436 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + + +! LaTeX Error: \begin{split} on input line 2436 ended by \end{equation}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2436 \end{split} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + +! Missing $ inserted. + + $ +l.2436 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing } inserted. + + } +l.2436 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing \cr inserted. + + \cr +l.2436 \end{split} + +I'm guessing that you meant to end an alignment here. + +! Missing { inserted. + + { +l.2436 \end{split} + +I've put in what seems to be necessary to fix +the current column of the current alignment. +Try to go on, since this might almost work. + +! Missing $ inserted. + + $ +l.2436 \end{split} + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Missing } inserted. + + } +l.2436 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing { inserted. + + { +l.2436 \end{split} + +I've put in what seems to be necessary to fix +the current column of the current alignment. +Try to go on, since this might almost work. + +! Missing } inserted. + + } +l.2436 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + + +! LaTeX Error: \begin{equation*} on input line 2430 ended by \end{split}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2436 \end{split} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + +! Missing $ inserted. + + $ +l.2436 \end{split} + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Misplaced alignment tab character &. +\math@cr@@@ ->\ifst@rred \nonumber \fi & + \relax \make@display@tag \ifst@rred ... +l.2436 \end{split} + +I can't figure out why you would want to use a tab mark +here. If you just want an ampersand, the remedy is +simple: Just type `I\&' now. But if some right brace +up above has ended a previous alignment prematurely, +you're probably due for more error messages, and you +might try typing `S' now just to see what is salvageable. + +! Misplaced \cr. +\math@cr@@@ ...fi \global \advance \row@ \@ne \cr + +l.2436 \end{split} + +I can't figure out why you would want to use a tab mark +or \cr or \span just now. If something like a right brace +up above has ended a previous alignment prematurely, +you're probably due for more error messages, and you +might try typing `S' now just to see what is salvageable. + +! Extra }, or forgotten $. +\gmeasure@ ...savetaglength@ \crcr #1\math@cr@@@ } + }\restorecounters@ \if@fle... +l.2436 \end{split} + +I've deleted a group-closing symbol because it seems to be +spurious, as in `$x}$'. But perhaps the } is legitimate and +you forgot something else, as in `\hbox{$x}'. In such cases +the way to recover is to insert both the forgotten and the +deleted material, e.g., by typing `I$}'. + +! Extra }, or forgotten $. +\gmeasure@ ...avetaglength@ \crcr #1\math@cr@@@ }} + \restorecounters@ \if@fleq... +l.2436 \end{split} + +I've deleted a group-closing symbol because it seems to be +spurious, as in `$x}$'. But perhaps the } is legitimate and +you forgot something else, as in `\hbox{$x}'. In such cases +the way to recover is to insert both the forgotten and the +deleted material, e.g., by typing `I$}'. + +! Missing $ inserted. + + $ +l.2436 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing } inserted. + + } +l.2436 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing $ inserted. + + $ +l.2436 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Display math should end with $$. + + \endgroup +l.2436 \end{split} + +The `$' that I just saw supposedly matches a previous `$$'. +So I shall assume that you typed `$$' both times. + + +! Package amsmath Error: \begin{split} won't work here. + +See the amsmath package documentation for explanation. +Type H for immediate help. + ... + +l.2436 \end{split} + +\Did you forget a preceding \begin{equation}? +If not, perhaps the `aligned' environment is what you want. + +! Missing number, treated as zero. + + \relax +l.2437 \end{equation*} + +A number should have been here; I inserted `0'. +(If you can't figure out why I needed to see a number, +look up `weird error' in the index to The TeXbook.) + +! Illegal unit of measure (pt inserted). + + \relax +l.2437 \end{equation*} + +Dimensions can be in units of em, ex, in, pt, pc, +cm, mm, dd, cc, nd, nc, bp, or sp; but yours is a new one! +I'll assume that you meant to say pt, for printer's points. +To recover gracefully from this error, it's best to +delete the erroneous units; e.g., type `2' to delete +two letters. (See Chapter 27 of The TeXbook.) + +! Too many }'s. +\endmathdisplay@a ...@ \totwidth@ \egroup \egroup + +l.2437 \end{equation*} + +You've closed more groups than you opened. +Such booboos are generally harmless, so keep going. + + +! LaTeX Error: \begin{document} ended by \end{equation*}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2437 \end{equation*} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + +! Missing $ inserted. + + $ +l.2437 \end{equation*} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Display math should end with $$. + + \endgroup +l.2437 \end{equation*} + +The `$' that I just saw supposedly matches a previous `$$'. +So I shall assume that you typed `$$' both times. + +! Extra \endgroup. + \endgroup + +l.2437 \end{equation*} + +Things are pretty mixed up, but I think the worst is over. + + +! LaTeX Error: Bad math environment delimiter. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2452 \end{split} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + + +! Package amsmath Error: \tag not allowed here. + +See the amsmath package documentation for explanation. +Type H for immediate help. + ... + +l.2452 \end{split} + +\tag cannot be used at this point. If you don't understand why +you should consult the documentation. +But don't worry: just continue, and I'll forget what happened. + +! You can't use `\eqno' in math mode. +\endmathdisplay@a ...\df@tag \@empty \else \veqno + \alt@tag \df@tag \fi \ifx ... +l.2452 \end{split} + +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! Missing \endgroup inserted. + + \endgroup +l.2452 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing } inserted. + + } +l.2452 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + + +! LaTeX Error: \begin{split} on input line 2452 ended by \end{equation}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2452 \end{split} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + +! Missing $ inserted. + + $ +l.2452 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing } inserted. + + } +l.2452 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing \cr inserted. + + \cr +l.2452 \end{split} + +I'm guessing that you meant to end an alignment here. + +! Missing { inserted. + + { +l.2452 \end{split} + +I've put in what seems to be necessary to fix +the current column of the current alignment. +Try to go on, since this might almost work. + +! Missing $ inserted. + + $ +l.2452 \end{split} + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Missing } inserted. + + } +l.2452 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing { inserted. + + { +l.2452 \end{split} + +I've put in what seems to be necessary to fix +the current column of the current alignment. +Try to go on, since this might almost work. + +! Missing } inserted. + + } +l.2452 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + + +! LaTeX Error: \begin{equation*} on input line 2446 ended by \end{split}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2452 \end{split} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + +! Missing $ inserted. + + $ +l.2452 \end{split} + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Misplaced alignment tab character &. +\math@cr@@@ ->\ifst@rred \nonumber \fi & + \relax \make@display@tag \ifst@rred ... +l.2452 \end{split} + +I can't figure out why you would want to use a tab mark +here. If you just want an ampersand, the remedy is +simple: Just type `I\&' now. But if some right brace +up above has ended a previous alignment prematurely, +you're probably due for more error messages, and you +might try typing `S' now just to see what is salvageable. + +! Misplaced \cr. +\math@cr@@@ ...fi \global \advance \row@ \@ne \cr + +l.2452 \end{split} + +I can't figure out why you would want to use a tab mark +or \cr or \span just now. If something like a right brace +up above has ended a previous alignment prematurely, +you're probably due for more error messages, and you +might try typing `S' now just to see what is salvageable. + +! Extra }, or forgotten $. +\gmeasure@ ...savetaglength@ \crcr #1\math@cr@@@ } + }\restorecounters@ \if@fle... +l.2452 \end{split} + +I've deleted a group-closing symbol because it seems to be +spurious, as in `$x}$'. But perhaps the } is legitimate and +you forgot something else, as in `\hbox{$x}'. In such cases +the way to recover is to insert both the forgotten and the +deleted material, e.g., by typing `I$}'. + +! Extra }, or forgotten $. +\gmeasure@ ...avetaglength@ \crcr #1\math@cr@@@ }} + \restorecounters@ \if@fleq... +l.2452 \end{split} + +I've deleted a group-closing symbol because it seems to be +spurious, as in `$x}$'. But perhaps the } is legitimate and +you forgot something else, as in `\hbox{$x}'. In such cases +the way to recover is to insert both the forgotten and the +deleted material, e.g., by typing `I$}'. + +! Missing $ inserted. + + $ +l.2452 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing } inserted. + + } +l.2452 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing $ inserted. + + $ +l.2452 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Display math should end with $$. + + \endgroup +l.2452 \end{split} + +The `$' that I just saw supposedly matches a previous `$$'. +So I shall assume that you typed `$$' both times. + + +! Package amsmath Error: \begin{split} won't work here. + +See the amsmath package documentation for explanation. +Type H for immediate help. + ... + +l.2452 \end{split} + +\Did you forget a preceding \begin{equation}? +If not, perhaps the `aligned' environment is what you want. + +! Missing number, treated as zero. + + \relax +l.2453 \end{equation*} + +A number should have been here; I inserted `0'. +(If you can't figure out why I needed to see a number, +look up `weird error' in the index to The TeXbook.) + +! Illegal unit of measure (pt inserted). + + \relax +l.2453 \end{equation*} + +Dimensions can be in units of em, ex, in, pt, pc, +cm, mm, dd, cc, nd, nc, bp, or sp; but yours is a new one! +I'll assume that you meant to say pt, for printer's points. +To recover gracefully from this error, it's best to +delete the erroneous units; e.g., type `2' to delete +two letters. (See Chapter 27 of The TeXbook.) + +! Too many }'s. +\endmathdisplay@a ...@ \totwidth@ \egroup \egroup + +l.2453 \end{equation*} + +You've closed more groups than you opened. +Such booboos are generally harmless, so keep going. + + +! LaTeX Error: \begin{document} ended by \end{equation*}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H for immediate help. + ... + +l.2453 \end{equation*} + +Your command was ignored. +Type I to replace it with another command, +or to continue without it. + +! Missing $ inserted. + + $ +l.2453 \end{equation*} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Display math should end with $$. + + \endgroup +l.2453 \end{equation*} + +The `$' that I just saw supposedly matches a previous `$$'. +So I shall assume that you typed `$$' both times. + +[38] +! Extra \endgroup. + \endgroup + +l.2453 \end{equation*} + +Things are pretty mixed up, but I think the worst is over. + +! Missing \endgroup inserted. + + \endgroup +l.2460 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing } inserted. + + } +l.2460 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! You can't use `\halign' in math mode. +\H@eqnarray ...let \\\@eqncr $$\everycr {}\halign + to\displaywidth \bgroup \h... +l.2460 \end{split} + +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! Missing number, treated as zero. + + \bgroup +l.2460 \end{split} + +A number should have been here; I inserted `0'. +(If you can't figure out why I needed to see a number, +look up `weird error' in the index to The TeXbook.) + +! Illegal unit of measure (pt inserted). + + \bgroup +l.2460 \end{split} + +Dimensions can be in units of em, ex, in, pt, pc, +cm, mm, dd, cc, nd, nc, bp, or sp; but yours is a new one! +I'll assume that you meant to say pt, for printer's points. +To recover gracefully from this error, it's best to +delete the erroneous units; e.g., type `2' to delete +two letters. (See Chapter 27 of The TeXbook.) + +! Missing } inserted. + + } +l.2460 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing $ inserted. + + $ +l.2460 \end{split} + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! You can't use `macro parameter character #' in math mode. +\H@eqnarray ...$\displaystyle \tabskip \z@skip {## + }$\@eqnsel &\global \@eqcn... +l.2460 \end{split} + +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! Missing { inserted. + + { +l.2460 \end{split} + +I've put in what seems to be necessary to fix +the current column of the current alignment. +Try to go on, since this might almost work. + +! Missing { inserted. + + { +l.2460 \end{split} + +I've put in what seems to be necessary to fix +the current column of the current alignment. +Try to go on, since this might almost work. + +! Missing $ inserted. + + $ +l.2460 \end{split} + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Missing } inserted. + + } +l.2460 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! Missing } inserted. + + } +l.2460 \end{split} + +I've inserted something that you may have forgotten. +(See the above.) +With luck, this will get me unwedged. But if you +really didn't forget anything, try typing `2' now; then +my insertion and my current dilemma will both disappear. + +! You can't use `macro parameter character #' in restricted horizontal mode. +\H@eqnarray ...\hskip \tw@ \arraycolsep \hfil ${## + }$\hfil &\global \@eqcnt \... +l.2460 \end{split} + +Sorry, but I'm not programmed to handle this case; +I'll just pretend that you didn't ask for it. +If you're in the wrong mode, you might be able to +return to the right one by typing `I}' or `I$' or `I\par'. + +! Missing { inserted. + + { +l.2460 \end{split} + +I've put in what seems to be necessary to fix +the current column of the current alignment. +Try to go on, since this might almost work. + +! Extra alignment tab has been changed to \cr. +