2022-08-26 14:45:24 -04:00

15 lines
112 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"hash": "05e6cb38cb6caf6b026021fdc4afc264",
"result": {
"markdown": "# Euler's method\n\n\n\nThis section uses these add-on packages:\n\n``` {.julia .cell-code}\nusing CalculusWithJulia\nusing Plots\nusing SymPy\nusing Roots\n```\n\n\n\n\n---\n\n\nThe following section takes up the task of numerically approximating solutions to differential equations. `Julia` has a huge set of state-of-the-art tools for this task starting with the [DifferentialEquations](https://github.com/SciML/DifferentialEquations.jl) package. We don't use that package in this section, focusing on simpler methods and implementations for pedagogical purposes, but any further exploration should utilize the tools provided therein. A brief introduction to the package follows in an upcoming [section](./differential_equations.html).\n\n\n---\n\nConsider the differential equation:\n\n\n\n$$\ny'(x) = y(x) \\cdot x, \\quad y(1)=1,\n$$\n\n\nwhich can be solved with `SymPy`:\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\n@syms x, y, u()\nD = Differential(x)\nx0, y0 = 1, 1\nF(y,x) = y*x\n\ndsolve(D(u)(x) - F(u(x), x))\n```\n\n::: {.cell-output .cell-output-display execution_count=5}\n```{=html}\n<span class=\"math-left-align\" style=\"padding-left: 4px; width:0; float:left;\"> \n\\[\nu{\\left(x \\right)} = C_{1} e^{\\frac{x^{2}}{2}}\n\\]\n</span>\n```\n:::\n:::\n\n\nWith the given initial condition, the solution becomes:\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nout = dsolve(D(u)(x) - F(u(x),x), u(x), ics=Dict(u(x0) => y0))\n```\n\n::: {.cell-output .cell-output-display execution_count=6}\n```{=html}\n<span class=\"math-left-align\" style=\"padding-left: 4px; width:0; float:left;\"> \n\\[\nu{\\left(x \\right)} = \\frac{e^{\\frac{x^{2}}{2}}}{e^{\\frac{1}{2}}}\n\\]\n</span>\n```\n:::\n:::\n\n\nPlotting this solution over the slope field\n\n::: {.cell execution_count=6}\n``` {.julia .cell-code}\np = plot(legend=false)\nvectorfieldplot!((x,y) -> [1, F(x,y)], xlims=(0, 2.5), ylims=(0, 10))\nplot!(rhs(out), linewidth=5)\n```\n\n::: {.cell-output .cell-output-display execution_count=7}\n![](euler_files/figure-html/cell-7-output-1.svg){}\n:::\n:::\n\n\nwe see that the vectors that are drawn seem to be tangent to the graph of the solution. This is no coincidence, the tangent lines to integral curves are in the direction of the slope field.\n\n\nWhat if the graph of the solution were not there, could we use this fact to *approximately* reconstruct the solution?\n\n\nThat is, if we stitched together pieces of the slope field, would we get a curve that was close to the actual answer?\n\n::: {.cell cache='true' hold='true' execution_count=7}\n\n::: {.cell-output .cell-output-display execution_count=8}\n```{=html}\n<div class=\"d-flex justify-content-center\"> <figure> <img src=\"data:image/gif;base64,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\" class=\"card-img-top\" alt=\"A Figure\">\n <figcaption><div class=\"markdown\"><p>Illustration of a function stitching together slope field lines to approximate the answer to an initial-value problem. The other function drawn is the actual solution.</p>\n</div> </figcaption>\n </figure>\n</div>\n```\n:::\n:::\n\n\nThe illustration suggests the answer is yes, let's see. The solution is drawn over $x$ values $1$ to $2$. Let's try piecing together $5$ pieces between $1$ and $2$ and see what we have.\n\n\nThe slope-field vectors are *scaled* versions of the vector `[1, F(y,x)]`. The `1` is the part in the direction of the $x$ axis, so here we would like that to be $0.2$ (which is $(2-1)/5$. So our vectors would be `0.2 * [1, F(y,x)]`. To allow for generality, we use `h` in place of the specific value $0.2$.\n\n\nThen our first pieces would be the line connecting $(x_0,y_0)$ to\n\n\n\n$$\n\\langle x_0, y_0 \\rangle + h \\cdot \\langle 1, F(y_0, x_0) \\rangle.\n$$\n\n\nThe above uses vector notation to add the piece scaled by $h$ to the starting point. Rather than continue with that notation, we will use subscripts. Let $x_1$, $y_1$ be the postion of the tip of the vector. Then we have:\n\n\n\n$$\nx_1 = x_0 + h, \\quad y_1 = y_0 + h F(y_0, x_0).\n$$\n\n\nWith this notation, it is easy to see what comes next:\n\n\n\n$$\nx_2 = x_1 + h, \\quad y_2 = y_1 + h F(y_1, x_1).\n$$\n\n\nWe just shifted the indices forward by $1$. But graphically what is this? It takes the tip of the first part of our \"stitched\" together solution, finds the slope filed there (`[1, F(y,x)]`) and then uses this direction to stitch together one more piece.\n\n\nClearly, we can repeat. The $n$th piece will end at:\n\n\n\n$$\nx_{n+1} = x_n + h, \\quad y_{n+1} = y_n + h F(y_n, x_n).\n$$\n\n\nFor our example, we can do some numerics. We want $h=0.2$ and $5$ pieces, so values of $y$ at $x_0=1, x_1=1.2, x_2=1.4, x_3=1.6, x_4=1.8,$ and $x_5=2$.\n\n\nBelow we do this in a loop. We have to be a bit careful, as in `Julia` the vector of zeros we create to store our answers begins indexing at $1$, and not $0$.\n\n``` {.julia .cell-code}\nn=5\nh = (2-1)/n\nxs = zeros(n+1)\nys = zeros(n+1)\nxs[1] = x0 # index is off by 1\nys[1] = y0\nfor i in 1:n\n xs[i + 1] = xs[i] + h\n ys[i + 1] = ys[i] + h * F(ys[i], xs[i])\nend\n```\n\n\nSo how did we do? Let's look graphically:\n\n::: {.cell execution_count=9}\n``` {.julia .cell-code}\nplot(exp(-1/2)*exp(x^2/2), x0, 2)\nplot!(xs, ys)\n```\n\n::: {.cell-output .cell-output-display execution_count=10}\n![](euler_files/figure-html/cell-10-output-1.svg){}\n:::\n:::\n\n\nNot bad. We wouldn't expect this to be exact - due to the concavity of the solution, each step is an underestimate. However, we see it is an okay approximation and would likely be better with a smaller $h$. A topic we pursue in just a bit.\n\n\nRather than type in the above command each time, we wrap it all up in a function. The inputs are $n$, $a=x_0$, $b=x_n$, $y_0$, and, most importantly, $F$. The output is massaged into a function through a call to `linterp`, rather than two vectors. The `linterp` function we define below just finds a function that linearly interpolates between the points and is `NaN` outside of the range of the $x$ values:\n\n::: {.cell execution_count=10}\n``` {.julia .cell-code}\nfunction linterp(xs, ys)\n function(x)\n ((x < xs[1]) || (x > xs[end])) && return NaN\n for i in 1:(length(xs) - 1)\n if xs[i] <= x < xs[i+1]\n l = (x-xs[i]) / (xs[i+1] - xs[i])\n return (1-l) * ys[i] + l * ys[i+1]\n end\n end\n ys[end]\n end\nend\n```\n\n::: {.cell-output .cell-output-display execution_count=11}\n```\nlinterp (generic function with 1 method)\n```\n:::\n:::\n\n\nWith that, here is our function to find an approximate solution to $y'=F(y,x)$ with initial condition:\n\n::: {.cell execution_count=11}\n``` {.julia .cell-code}\nfunction euler(F, x0, xn, y0, n)\n h = (xn - x0)/n\n xs = zeros(n+1)\n ys = zeros(n+1)\n xs[1] = x0\n ys[1] = y0\n for i in 1:n\n xs[i + 1] = xs[i] + h\n ys[i + 1] = ys[i] + h * F(ys[i], xs[i])\n end\n linterp(xs, ys)\nend\n```\n\n::: {.cell-output .cell-output-display execution_count=12}\n```\neuler (generic function with 1 method)\n```\n:::\n:::\n\n\nWith `euler`, it becomes easy to explore different values.\n\n\nFor example, we thought the solution would look better with a smaller $h$ (or larger $n$). Instead of $n=5$, let's try $n=50$:\n\n::: {.cell execution_count=12}\n``` {.julia .cell-code}\nu₁₂ = euler(F, 1, 2, 1, 50)\nplot(exp(-1/2)*exp(x^2/2), x0, 2)\nplot!(u₁₂, x0, 2)\n```\n\n::: {.cell-output .cell-output-display execution_count=13}\n![](euler_files/figure-html/cell-13-output-1.svg){}\n:::\n:::\n\n\nIt is more work for the computer, but not for us, and clearly a much better approximation to the actual answer is found.\n\n\n## The Euler method\n\n![Figure from first publication of Euler's method. From [Gander and Wanner](http://www.unige.ch/~gander/Preprints/Ritz.pdf). ](../ODEs/figures/euler.png)\n\n\n\nThe name of our function reflects the [mathematician](https://en.wikipedia.org/wiki/Leonhard_Euler) associated with the iteration:\n\n\n\n$$\nx_{n+1} = x_n + h, \\quad y_{n+1} = y_n + h \\cdot F(y_n, x_n),\n$$\n\n\nto approximate a solution to the first-order, ordinary differential equation with initial values: $y'(x) = F(y,x)$.\n\n\n[The Euler method](https://en.wikipedia.org/wiki/Euler_method) uses linearization. Each \"step\" is just an approximation of the function value $y(x_{n+1})$ with the value from the tangent line tangent to the point $(x_n, y_n)$.\n\n\nEach step introduces an error. The error in one step is known as the *local truncation error* and can be shown to be about equal to $1/2 \\cdot h^2 \\cdot f''(x_{n})$ assuming $y$ has $3$ or more derivatives.\n\n\nThe total error, or more commonly, *global truncation error*, is the error between the actual answer and the approximate answer at the end of the process. It reflects an accumulation of these local errors. This error is *bounded* by a constant times $h$. Since it gets smaller as $h$ gets smaller in direct proportion, the Euler method is called *first order*.\n\n\nOther, somewhat more complicated, methods have global truncation errors that involve higher powers of $h$ - that is for the same size $h$, the error is smaller. In analogy is the fact that Riemann sums have error that depends on $h$, whereas other methods of approximating the integral have smaller errors. For example, Simpson's rule had error related to $h^4$. So, the Euler method may not be employed if there is concern about total resources (time, computer, ...), it is important for theoretical purposes in a manner similar to the role of the Riemann integral.\n\n\nIn the examples, we will see that for many problems the simple Euler method is satisfactory, but not always so. The task of numerically solving differential equations is not a one-size-fits-all one. In the following, a few different modifications are presented to the basic Euler method, but this just scratches the surface of the topic.\n\n\n#### Examples\n\n\n##### Example\n\n\nConsider the initial value problem $y'(x) = x + y(x)$ with initial condition $y(0)=1$. This problem can be solved exactly. Here we approximate over $[0,2]$ using Euler's method.\n\n::: {.cell execution_count=14}\n``` {.julia .cell-code}\n𝑭(y,x) = x + y\n𝒙0, 𝒙n, 𝒚0 = 0, 2, 1\n𝒇 = euler(𝑭, 𝒙0, 𝒙n, 𝒚0, 25)\n𝒇(𝒙n)\n```\n\n::: {.cell-output .cell-output-display execution_count=15}\n```\n10.696950392438628\n```\n:::\n:::\n\n\nWe graphically compare our approximate answer with the exact one:\n\n::: {.cell execution_count=15}\n``` {.julia .cell-code}\nplot(𝒇, 𝒙0, 𝒙n)\n𝒐ut = dsolve(D(u)(x) - 𝑭(u(x),x), u(x), ics = Dict(u(𝒙0) => 𝒚0))\nplot(rhs(𝒐ut), 𝒙0, 𝒙n)\nplot!(𝒇, 𝒙0, 𝒙n)\n```\n\n::: {.cell-output .cell-output-display execution_count=16}\n![](euler_files/figure-html/cell-16-output-1.svg){}\n:::\n:::\n\n\nFrom the graph it appears our value for `f(xn)` will underestimate the actual value of the solution slightly.\n\n\n##### Example\n\n\nThe equation $y'(x) = \\sin(x \\cdot y)$ is not separable, so need not have an easy solution. The default method will fail. Looking at the available methods with `sympy.classify_ode(𝐞qn, u(x))` shows a power series method which can return a power series *approximation* (a Taylor polynomial). Let's look at comparing an approximate answer given by the Euler method to that one returned by `SymPy`.\n\n\nFirst, the `SymPy` solution:\n\n::: {.cell execution_count=16}\n``` {.julia .cell-code}\n𝐅(y,x) = sin(x*y)\n𝐞qn = D(u)(x) - 𝐅(u(x), x)\n𝐨ut = dsolve(𝐞qn, hint=\"1st_power_series\")\n```\n\n::: {.cell-output .cell-output-display execution_count=17}\n```{=html}\n<span class=\"math-left-align\" style=\"padding-left: 4px; width:0; float:left;\"> \n\\[\nu{\\left(x \\right)} = C_{1} + \\frac{C_{1} x^{2}}{2} + \\frac{C_{1} x^{4} \\cdot \\left(3 - C_{1}^{2}\\right)}{24} + O\\left(x^{6}\\right)\n\\]\n</span>\n```\n:::\n:::\n\n\nIf we assume $y(0) = 1$, we can continue:\n\n::: {.cell execution_count=17}\n``` {.julia .cell-code}\n𝐨ut1 = dsolve(𝐞qn, u(x), ics=Dict(u(0) => 1), hint=\"1st_power_series\")\n```\n\n::: {.cell-output .cell-output-display execution_count=18}\n```{=html}\n<span class=\"math-left-align\" style=\"padding-left: 4px; width:0; float:left;\"> \n\\[\nu{\\left(x \\right)} = 1 + \\frac{x^{2}}{2} + \\frac{x^{4}}{12} + O\\left(x^{6}\\right)\n\\]\n</span>\n```\n:::\n:::\n\n\nThe approximate value given by the Euler method is\n\n::: {.cell execution_count=18}\n``` {.julia .cell-code}\n𝐱0, 𝐱n, 𝐲0 = 0, 2, 1\n\nplot(legend=false)\nvectorfieldplot!((x,y) -> [1, 𝐅(y,x)], xlims=(𝐱0, 𝐱n), ylims=(0,5))\nplot!(rhs(𝐨ut1).removeO(), linewidth=5)\n\n𝐮 = euler(𝐅, 𝐱0, 𝐱n, 𝐲0, 10)\nplot!(𝐮, linewidth=5)\n```\n\n::: {.cell-output .cell-output-display execution_count=19}\n![](euler_files/figure-html/cell-19-output-1.svg){}\n:::\n:::\n\n\nWe see that the answer found from using a polynomial series matches that of Euler's method for a bit, but as time evolves, the approximate solution given by Euler's method more closely tracks the slope field.\n\n\n##### Example\n\n\nThe [Brachistochrone problem](http://www.unige.ch/~gander/Preprints/Ritz.pdf) was posed by Johann Bernoulli in 1696. It asked for the curve between two points for which an object will fall faster along that curve than any other. For an example, a bead sliding on a wire will take a certain amount of time to get from point $A$ to point $B$, the time depending on the shape of the wire. Which shape will take the least amount of time?\n\n![ A child's bead game. What shape wire will produce the shortest time for a bed to slide from a top to the bottom?\n\n](../ODEs/figures/bead-game.jpg)\n\n\n\nRestrict our attention to the $x$-$y$ plane, and consider a path, between the point $(0,A)$ and $(B,0)$. Let $y(x)$ be the distance from $A$, so $y(0)=0$ and at the end $y$ will be $A$.\n\n\n[Galileo](http://www-history.mcs.st-and.ac.uk/HistTopics/Brachistochrone.html) knew the straight line was not the curve, but incorrectly thought the answer was a part of a circle.\n\n![As early as 1638, Galileo showed that an object falling along `AC` and then `CB` will fall faster than one traveling along `AB`, where `C` is on the arc of a circle. From the [History of Math Archive](http://www-history.mcs.st-and.ac.uk/HistTopics/Brachistochrone.html). ](../ODEs/figures/galileo.gif)\n\n\n\nThis simulation also suggests that a curved path is better than the shorter straight one:\n\n::: {.cell cache='true' hold='true' execution_count=21}\n\n::: {.cell-output .cell-output-display execution_count=22}\n```{=html}\n<div class=\"d-flex justify-content-center\"> <figure> <img src=\"data:image/gif;base64,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GaJXunPlUurcybOnz59Agwr9+a8oP36kQsyU2UBfv6FQo0qdSrWq1ZNF//XjR0OpqjUY+Pi7Sras2bNo027MWtQfHxIYaLjyN1at3bt48+od+a+iP3509woeTLiw3rqGEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTbu27du4c+vezbu379/AgwsfTry48ePIkytfzry58+fQo0ufTr269evYs2vfzr279+/gw4v/H0++vPnz6NOrX8++vfv38OPLn0+/vv37+PPr38+/v///AAYo4IAEFmjggQgmqOCCDDbo4IMQRijhhBRWaOGFGGao4YYcdujhhyCGKOKIJJZo4okopqjiiiy26OKLMMYo44w01mjjjTjmqOOOPPbo449ABinkkEQWaeSRSCap5JJMNunkk1BGKeWUVFZp5ZVYZqnlllx26eWXYIYp5phklmnmmWimqeaabLbp5ptwxinnnHTWaeedeOap55589unnn4AGKuighBZq6KGIJqrooow26uijkEZ6IVt9SSqSP5QWZSlIJZiCKaWbcvSPP6B8gIItoIa6llaKXHBDM5iq/7pqVvfcMUET0mgqK0aZdrNFAGlEhNiuFGVaKbEZGYusqMcu6+yz0EYr7bTUVmvttdhmq+223Hbr7bfghivuuOSWa+659HFDiisQYVtGA0aEgIEd61grAAnH5HsMBpZUyw8Hfeh7TB8r8EMtPw0InC8G1faDgcJ9nLBPtWEYIbARAnQRwFPS0tOVEWs0QEYAW0xA7VazwAFHMUdxfPJRBqMr88w012zzzTjnrPPOPPfs889ABy300EQXbfTRSCc9WabXhqIstb9MMQUuTEtLlz+v7CDGMKlGO6o/90RSgxrZZDUtpfQIEoMg9zT7LKV0ZaOGtU/TzZa2uiqt99589//t99+ABy744IQXbvjhiCeu+OKMN+7445CjWXW1xroNLSWyVDO51/PsMgomt7xj9mfCkCKMklmNo4smmuwyj8uaMbNCBifQzgzsQ2aKjSyUpNIZBzKUIjwdGUxsZOUxbwYHCcI3TwIpyedet2b+FBJ886XIoAc/uAvZ9Wb+WHIC9tmXQc+wz+qTAR3YI6DFDAe7koEMZMjQAPQUdS/rUfoUQscf8DiKtbZyD39sJXIITKACF8jABjrwgRC00acsJ60ovGBz/rGHMOyBHq28wAx0uZt/uHGEBGQgAUfgBvrAU5RugAAQ39NPPzpAAADYkAAdME9bjEGBVoiQP3LIgA3+h3gAUpSHLaLQgDFGx58z1HCIACAAH6L3nUzlAQT2WCF+/PGIA0ARAAewgu/IQ6ko8CAw/eGGBL64AGsckVL3CFD1EkAAARAgAYzQIguZGKBnnOEIZ3gGFafVD7AZMIKITKQiF8nIRjrykZCMpCQnSclKWvKSmMykJjfJyU568pOgDKUoR0nKUprylKhMpSpXycpWPooelvgD/q4lAgmkIAUh4EAurLWNBFiBDcC0Agc4SK1CpACYyAzBLNAYrTMcE5lsSIEl4jgtY0KTDSF4xSCdtQ4MQNMKCSggtfzhCgmEAJcHMEFEKIisQtrDFYV4xT7mgS26bKUf9YpOQAAAIfkEBWQAAQAsQwALAMkBmwEACP8AAwRgJ65gPHnQjKzqtQpWr0Vn4AmcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybLlxXr15MmLJ85TAFU4ca4xcs6lz59AgwodSrSo0aNIO/5bynTpvps5VVkJk7Sq1atYs2rdynVlU6b9sqTIuQaDNX7/Jvbryrat27dw48oN8PXfvi8NQoQgMYufv7mAAwseTLjwxqb+9uWyts/fX8OQI0ueTFlo2sqYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTbu27du4c+vezbu379/AgwsfTry48ePIkytfzry58+fQo0ufTr269evYs2vfzr279+/gw4v/H0++vPnz6NOrX8++vfv38OPLn0+/vv37+PPr38+/v///AAYo4IAEFmjggQgmqOCCDDbo4IMQRijhhBRWaOGFGGao4YYcdujhhyCGKOKIJJZo4okopqjiiiy26OKLMMYo44w01mjjjTjmqOOOPPbo449ABinkkEQWaeSRSCap5JJMNunkk1BGKeWUVFZp5ZVYZqnlllx26eWXYIYp5phklmnmmWimqeaabLbp5ptwxinnnHTWaeedeOap55589unnn4AGKuighBZq6KGIJqrooow26uijkEYq6aSUVmrppZhmqummnHbq6aeghirqqKSWauqpqKaq6qqsturqq7DG/yrrrLTWauutuOaq66689urrr8AGK+ywxBZr7LHIJqvsssw26+yz0EYr7bTUVmvttdhmq+223Hbr7bfghivuuOSWa+656Kar7rrstnteU+4S1c689LYTL1AlgFLXvT79A8oHKNjSD7z8srRUP4pscAMvSxXcElP+3HOHBU1Ic5nDKn11TxoQcEEXxikh5k9aXEAAcsh1NXwyyiqv7PLLMMcs88w012zzzTjnrPPOPPfs889ABy300EQXbfTRSCet9NJM88cPM/Q8ZvQ9Z+TVwAnMrFW0DCkc43UfGHBTtDEGeG22EXBIHXQuIZj99RH8EM1MBm4fs0YW/GgddD8c9P/htgQV5BKA2j73kwsGRvTRRwNfsLIB0f30ow8cSHwxyz5PFe1YP/x0rnfToIcu+uikl2766ainrvrqrLfu+uuwxy777LTXbvvtuHfGVNIpXzz0KykXHUkSQiBiz8i7C83UL2rEoEYwBAP9FT2RDJFEJPb4/jPEI/fzihg1EN279oTrPL7R++au/vrst+/++/DHL//89NfPVvJH9160/kWjoks08/hK0aKhi1VQQhOwIMY4WiY9sIxjGbLQhCRQIb6UzWN//MNg9DTIQPu5xRePmIU9kGaNFWRABiTIQF+MdgIZlOKFdJDANuI2tBZk4IU4lIEdaBg0f5CCBDiEYQ//iOYPX3AgiKWQwQlsoAVHBOB4P+MHCegQxAUkIwChEIgLghDFYnCABDKQQQMs4Zd1lI9n/ugcKeDgCXjQkBFK6IEdoBhFzwnEHis4gAAEcIAMPMNodjgAAAYJAAGswGgcEAAhB2kAo3WgAIsEAAI0QcQjKJKQBcjAO6ZBNF8k4JIFSEAh7lG0ftCiAwlIQAYYcY8zAg0e8ODGPVqZtMi50oO4zKUud8nLXvryl8AMpjCHScxiGvOYyEymMpfJzGY685nQjKY0c4O8Dg4NBN1oir32NwcQGIMp7dCe9PwBCArUYinhtGbPmCIKCojiH+ms4FJaQQFAwEOd62yKMUDwtoSByXMp/ujGCwRyS/N9xR/rQNpXtjnNhjr0oRCNqEQnStGKWvSiGM2oRjfK0Y569KMgDalIR0rSkpr0pChNqUpXytKWuvSlMI0p++BBikLQImmWwEAIUhCCE1DDaC9YABuGyoYUrMAxQ6OHElJA1KFi4IpD84cSrNBUNoSAFgXV2RmY2tQEmIEeUU1GA5qaghPw4AFFEAUpgeYPSyQgBTz1adzyEFV/tMMSf6BFK5F6NL6uJyAAACH5BAVkAAEALEsACwAxAqIBAAj/AAPUq4fPWr517batgAWrF8M+ltYFmEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGOCdMcOXbhz5bTpxKCqZ881Oij2k0m0qNGjSJMqXcq0qdOnMv9JnfrPXq4QPn8agcq1q9evYMOKHUs2KVWq/HhmDUHKX9m3cOPKnUu3rt2KZ6eSWmBlzZoQSO4KHky4sOHDh/P+C8AsixEklhBLnky5suXLMf3dc4u5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr3869u/fv4MOL/x9Pvrz58+jTq1/Pvr379/Djy59Pv779+/jz69/Pv7///wAGKOCABBZo4IEIJqjgggw26OCDEEYo4YQUVmjhhRhmqOGGHHbo4YcghijiiCSWaOKJKKao4oostujiizDGKOOMNNZo44045qjjjjz26OOPQAYp5JBEFmnkkUgmqeSSTDbp5JNQRinllFRWaeWVWGap5ZZcdunll2CGKeaYZJZp5plopqnmmmy26eabcMYp55x01mnnnXjmqeeefPbp55+ABirooIQWauihiCaq6KKMNuroo5BGKumklFZq6aWYZqrpppx26umnoIYq6qiklmrqqaimquqqrLbq6quwxv8q66y01mrrrbjmquuuvPbq66/ABivssMQWa+yxyCar7LLMNuvss9BGK+201FZr7bXYZqvtttx26+234IYr7rjklmvuueimq+667Lbr7rvwxivvvPTWa++9+Oar77789uvvvwAHLPDABBds8MEIJ6zwwgw37PDDEEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJKKes8sost+zyyzDHLPPMNNds880456zzzjz37PPPQAct9NBEF230kFQd7ZU/iikNFRfd5OW0U9JUAcEbmyU99VJSNdPEBXf0w/RiWytFFS83bKDI2GWbdRYrJZRgSgBkt12UYv6A8oHdSCn/9g9nfB/VdOCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+eacd+7556CHLvropJdueuf8MEPP6RbdE0YDITSwAjOsT7QCCcfk3gcGq59uSwO5B2+EHqf340oIwee+Rhb8nF4M8skbcUbzpfvTTwZ9JI9BBcLcc/osGBjRRx8NhDEJ6/30kw8cSHxRzD6Ao88PP0PVbv/9+Oev//789+///wAMoAAHiDit1c5vB0Sg6VgwBTy8IhtnMd0/7vELRIgBBkMQQySCcbqz9CMYkVADDmogBkQEgB51+5zfFhOJicBACKJb4T/akcLQKZCGBgSd1qSCw6kksIdSqd0q/26xC2dgYx77qCHpogEMWcDiFJqABCU20UGpwIMq+xhHNaoIxCDeBh1ZWAEc6jcwHkrNNl8gAx0I4ADqFayLtxmEARxABzgwAR5uJJgPbzOOLBgAAACgAx28eLo1JACQGqDb6fzhFjj8EQAFAEEAyFg9ahiAAAUAwAv0cT9SCIAABzjAPijJOlKcgRT0w18/+LEOUhLwlbCMpSxnScta2vKWuMylLnfJy1768pfADKYwh0nMYhrzmMhMpjKXycxmOvOZ0IymNKdJzWpa85rYzKY2t8nNbnrzm+AMpzjHSc5ymvOc6EynOtfJzna6853wjKc850nPetrznvvKIesGd6W6IrRCgaTrRh5AoAE3dGNsSrShVGrxBAbwQBRsk+BUujEHDYAgD92Q6FTG1ooiMOAJl4ifDhFYB+L4wg6nxJcMiVMGDKQgBSE4wTb0RUjiWAIDbMgpG1KgAzOwjgZW0GlODTCReyTUcycQak4xkA2Riu4AKVBqApwaulbQAqc6DUEZ+EFVz0nFH4/AQAhSkIAs2KOrofOHPVxBiqaiNa2MfKt0AgIAOw==\" class=\"card-img-top\" alt=\"A Figure\">\n <figcaption><div class=\"markdown\"><p>The race is on. An illustration of beads falling along a path, as can be seen, some paths are faster than others. The fastest path would follow a cycloid. See <a href=\"https://pdfs.semanticscholar.org/66c1/4d8da6f2f5f2b93faf4deb77aafc7febb43a.pdf\">Bensky and Moelter</a> for details on simulating a bead on a wire.</p>\n</div> </figcaption>\n </figure>\n</div>\n```\n:::\n:::\n\n\nNow, the natural question is which path is best? The solution can be [reduced](http://mathworld.wolfram.com/BrachistochroneProblem.html) to solving this equation for a positive $c$:\n\n\n\n$$\n1 + (y'(x))^2 = \\frac{c}{y}, \\quad c > 0.\n$$\n\n\nReexpressing, this becomes:\n\n\n\n$$\n\\frac{dy}{dx} = \\sqrt{\\frac{C-y}{y}}.\n$$\n\n\nThis is a separable equation and can be solved, but even `SymPy` has trouble with this integral. However, the result has been known to be a piece of a cycloid since the insightful Jacob Bernoulli used an analogy from light bending to approach the problem. The answer is best described parametrically through:\n\n\n\n$$\nx(u) = c\\cdot u - \\frac{c}{2}\\sin(2u), \\quad y(u) = \\frac{c}{2}( 1- \\cos(2u)), \\quad 0 \\leq u \\leq U.\n$$\n\n\nThe values of $U$ and $c$ must satisfy $(x(U), y(U)) = (B, A)$.\n\n\nRather than pursue this, we will solve it numerically for a fixed value of $C$ over a fixed interval to see the shape.\n\n\nThe equation can be written in terms of $y'=F(y,x)$, where\n\n\n\n$$\nF(y,x) = \\sqrt{\\frac{c-y}{y}}.\n$$\n\n\nBut as $y_0 = 0$, we immediately would have a problem with the first step, as there would be division by $0$.\n\n\nThis says that for the optimal solution, the bead picks up speed by first sliding straight down before heading off towards $B$. That's great for the physics, but runs roughshod over our Euler method, as the first step has an infinity.\n\n\nFor this, we can try the *backwards Euler* method which uses the slope at $(x_{n+1}, y_{n+1})$, rather than $(x_n, y_n)$. The update step becomes:\n\n\n\n$$\ny_{n+1} = y_n + h \\cdot F(y_{n+1}, x_{n+1}).\n$$\n\n\nSeems innocuous, but the value we are trying to find, $y_{n+1}$, is now on both sides of the equation, so is only *implicitly* defined. In this code, we use the `find_zero` function from the `Roots` package. The caveat is, this function needs a good initial guess, and the one we use below need not be widely applicable.\n\n::: {.cell execution_count=22}\n``` {.julia .cell-code}\nfunction back_euler(F, x0, xn, y0, n)\n h = (xn - x0)/n\n xs = zeros(n+1)\n ys = zeros(n+1)\n xs[1] = x0\n ys[1] = y0\n for i in 1:n\n xs[i + 1] = xs[i] + h\n ## solve y[i+1] = y[i] + h * F(y[i+1], x[i+1])\n ys[i + 1] = find_zero(y -> ys[i] + h * F(y, xs[i + 1]) - y, ys[i]+h)\n end\n linterp(xs, ys)\nend\n```\n\n::: {.cell-output .cell-output-display execution_count=23}\n```\nback_euler (generic function with 1 method)\n```\n:::\n:::\n\n\nWe then have with $C=1$ over the interval $[0,1.2]$ the following:\n\n::: {.cell execution_count=23}\n``` {.julia .cell-code}\n𝐹(y, x; C=1) = sqrt(C/y - 1)\n𝑥0, 𝑥n, 𝑦0 = 0, 1.2, 0\ncyc = back_euler(𝐹, 𝑥0, 𝑥n, 𝑦0, 50)\nplot(x -> 1 - cyc(x), 𝑥0, 𝑥n)\n```\n\n::: {.cell-output .cell-output-display execution_count=24}\n![](euler_files/figure-html/cell-24-output-1.svg){}\n:::\n:::\n\n\nRemember, $y$ is the displacement from the top, so it is non-negative. Above we flipped the graph to make it look more like expectation. In general, the trajectory may actually dip below the ending point and come back up. The above won't see this, for as written $dy/dx \\geq 0$, which need not be the case, as the defining equation is in terms of $(dy/dx)^2$, so the derivative could have any sign.\n\n\n##### Example: stiff equations\n\n\nThe Euler method is *convergent*, in that as $h$ goes to $0$, the approximate solution will converge to the actual answer. However, this does not say that for a fixed size $h$, the approximate value will be good. For example, consider the differential equation $y'(x) = -5y$. This has solution $y(x)=y_0 e^{-5x}$. However, if we try the Euler method to get an answer over $[0,2]$ with $h=0.5$ we don't see this:\n\n::: {.cell execution_count=24}\n``` {.julia .cell-code}\n(y,x) = -5y\n𝓍0, 𝓍n, 𝓎0 = 0, 2, 1\n𝓊 = euler(, 𝓍0, 𝓍n, 𝓎0, 4) # n =4 => h = 2/4\nvectorfieldplot((x,y) -> [1, (y,x)], xlims=(0, 2), ylims=(-5, 5))\nplot!(x -> y0 * exp(-5x), 0, 2, linewidth=5)\nplot!(𝓊, 0, 2, linewidth=5)\n```\n\n::: {.cell-output .cell-output-display execution_count=25}\n![](euler_files/figure-html/cell-25-output-1.svg){}\n:::\n:::\n\n\nWhat we see is that the value of $h$ is too big to capture the decay scale of the solution. A smaller $h$, can do much better:\n\n::: {.cell execution_count=25}\n``` {.julia .cell-code}\n𝓊₁ = euler(, 𝓍0, 𝓍n, 𝓎0, 50) # n=50 => h = 2/50\nplot(x -> y0 * exp(-5x), 0, 2)\nplot!(𝓊₁, 0, 2)\n```\n\n::: {.cell-output .cell-output-display execution_count=26}\n![](euler_files/figure-html/cell-26-output-1.svg){}\n:::\n:::\n\n\nThis is an example of a [stiff equation](https://en.wikipedia.org/wiki/Stiff_equation). Such equations cause explicit methods like the Euler one problems, as small $h$s are needed to good results.\n\n\nThe implicit, backward Euler method does not have this issue, as we can see here:\n\n::: {.cell execution_count=26}\n``` {.julia .cell-code}\n𝓊₂ = back_euler(, 𝓍0, 𝓍n, 𝓎0, 4) # n =4 => h = 2/4\nvectorfieldplot((x,y) -> [1, (y,x)], xlims=(0, 2), ylims=(-1, 1))\nplot!(x -> y0 * exp(-5x), 0, 2, linewidth=5)\nplot!(𝓊₂, 0, 2, linewidth=5)\n```\n\n::: {.cell-output .cell-output-display execution_count=27}\n![](euler_files/figure-html/cell-27-output-1.svg){}\n:::\n:::\n\n\n##### Example: The pendulum\n\n\nThe differential equation describing the simple pendulum is\n\n\n\n$$\n\\theta''(t) = - \\frac{g}{l}\\sin(\\theta(t)).\n$$\n\n\nThe typical approach to solving for $\\theta(t)$ is to use the small-angle approximation that $\\sin(x) \\approx x$, and then the differential equation simplifies to: $\\theta''(t) = -g/l \\cdot \\theta(t)$, which is easily solved.\n\n\nHere we try to get an answer numerically. However, the problem, as stated, is not a first order equation due to the $\\theta''(t)$ term. If we let $u(t) = \\theta(t)$ and $v(t) = \\theta'(t)$, then we get *two* coupled first order equations:\n\n\n\n$$\nv'(t) = -g/l \\cdot \\sin(u(t)), \\quad u'(t) = v(t).\n$$\n\n\nWe can try the Euler method here. A simple approach might be this iteration scheme:\n\n\n\n$$\n\\begin{align*}\nx_{n+1} &= x_n + h,\\\\\nu_{n+1} &= u_n + h v_n,\\\\\nv_{n+1} &= v_n - h \\cdot g/l \\cdot \\sin(u_n).\n\\end{align*}\n$$\n\n\nHere we need *two* initial conditions: one for the initial value $u(t_0)$ and the initial value of $u'(t_0)$. We have seen if we start at an angle $a$ and release the bob from rest, so $u'(0)=0$ we get a sinusoidal answer to the linearized model. What happens here? We let $a=1$, $L=5$ and $g=9.8$:\n\n\nWe write a function to solve this starting from $(x_0, y_0)$ and ending at $x_n$:\n\n::: {.cell execution_count=27}\n``` {.julia .cell-code}\nfunction euler2(x0, xn, y0, yp0, n; g=9.8, l = 5)\n xs, us, vs = zeros(n+1), zeros(n+1), zeros(n+1)\n xs[1], us[1], vs[1] = x0, y0, yp0\n h = (xn - x0)/n\n for i = 1:n\n xs[i+1] = xs[i] + h\n\tus[i+1] = us[i] + h * vs[i]\n\tvs[i+1] = vs[i] + h * (-g / l) * sin(us[i])\n\tend\n\tlinterp(xs, us)\nend\n```\n\n::: {.cell-output .cell-output-display execution_count=28}\n```\neuler2 (generic function with 1 method)\n```\n:::\n:::\n\n\nLet's take $a = \\pi/4$ as the initial angle, then the approximate solution should be $\\pi/4\\cos(\\sqrt{g/l}x)$ with period $T = 2\\pi\\sqrt{l/g}$. We try first to plot then over 4 periods:\n\n::: {.cell execution_count=28}\n``` {.julia .cell-code}\n𝗅, 𝗀 = 5, 9.8\n𝖳 = 2pi * sqrt(𝗅/𝗀)\n𝗑0, 𝗑n, 𝗒0, 𝗒p0 = 0, 4𝖳, pi/4, 0\nplot(euler2(𝗑0, 𝗑n, 𝗒0, 𝗒p0, 20), 0, 4𝖳)\n```\n\n::: {.cell-output .cell-output-display execution_count=29}\n![](euler_files/figure-html/cell-29-output-1.svg){}\n:::\n:::\n\n\nSomething looks terribly amiss. The issue is the step size, $h$, is too large to capture the oscillations. There are basically only $5$ steps to capture a full up and down motion. Instead, we try to get $20$ steps per period so $n$ must be not $20$, but $4 \\cdot 20 \\cdot T \\approx 360$. To this graph, we add the approximate one:\n\n::: {.cell execution_count=29}\n``` {.julia .cell-code}\nplot(euler2(𝗑0, 𝗑n, 𝗒0, 𝗒p0, 360), 0, 4𝖳)\nplot!(x -> pi/4*cos(sqrt(𝗀/𝗅)*x), 0, 4𝖳)\n```\n\n::: {.cell-output .cell-output-display execution_count=30}\n![](euler_files/figure-html/cell-30-output-1.svg){}\n:::\n:::\n\n\nEven now, we still see that something seems amiss, though the issue is not as dramatic as before. The oscillatory nature of the pendulum is seen, but in the Euler solution, the amplitude grows, which would necessarily mean energy is being put into the system. A familiar instance of a pendulum would be a child on a swing. Without pumping the legs - putting energy in the system - the height of the swing's arc will not grow. Though we now have oscillatory motion, this growth indicates the solution is still not quite right. The issue is likely due to each step mildly overcorrecting and resulting in an overall growth. One of the questions pursues this a bit further.\n\n\n## Questions\n\n\n##### Question\n\n\nUse Euler's method with $n=5$ to approximate $u(1)$ where\n\n\n\n$$\nu'(x) = x - u(x), \\quad u(0) = 1\n$$\n\n::: {.cell hold='true' execution_count=30}\n\n::: {.cell-output .cell-output-display execution_count=31}\n```{=html}\n<form class=\"mx-2 my-3 mw-100\" name='WeaveQuestion' data-id='17727112650891708507' data-controltype=''>\n <div class='form-group '>\n <div class='controls'>\n <div class=\"form\" id=\"controls_17727112650891708507\">\n <div style=\"padding-top: 5px\">\n </br>\n<div class=\"input-group\">\n <input id=\"17727112650891708507\" type=\"number\" class=\"form-control\" placeholder=\"Numeric answer\">\n</div>\n\n \n </div>\n </div>\n <div id='17727112650891708507_message' style=\"padding-bottom: 15px\"></div>\n </div>\n </div>\n</form>\n\n<script text='text/javascript'>\ndocument.getElementById(\"17727112650891708507\").addEventListener(\"change\", function() {\n var correct = (Math.abs(this.value - 0.6553599999999999) <= 0.001);\n var msgBox = document.getElementById('17727112650891708507_message');\n if(correct) {\n msgBox.innerHTML = \"<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>\";\n var explanation = document.getElementById(\"explanation_17727112650891708507\")\n if (explanation != null) {\n explanation.style.display = \"none\";\n }\n } else {\n msgBox.innerHTML = \"<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>\";\n var explanation = document.getElementById(\"explanation_17727112650891708507\")\n if (explanation != null) {\n explanation.style.display = \"block\";\n }\n }\n\n});\n\n</script>\n```\n:::\n:::\n\n\n##### Question\n\n\nConsider the equation\n\n\n\n$$\ny' = x \\cdot \\sin(y), \\quad y(0) = 1.\n$$\n\n\nUse Euler's method with $n=50$ to find the value of $y(5)$.\n\n::: {.cell hold='true' execution_count=31}\n\n::: {.cell-output .cell-output-display execution_count=32}\n```{=html}\n<form class=\"mx-2 my-3 mw-100\" name='WeaveQuestion' data-id='8198279257811830213' data-controltype=''>\n <div class='form-group '>\n <div class='controls'>\n <div class=\"form\" id=\"controls_8198279257811830213\">\n <div style=\"padding-top: 5px\">\n </br>\n<div class=\"input-group\">\n <input id=\"8198279257811830213\" type=\"number\" class=\"form-control\" placeholder=\"Numeric answer\">\n</div>\n\n \n </div>\n </div>\n <div id='8198279257811830213_message' style=\"padding-bottom: 15px\"></div>\n </div>\n </div>\n</form>\n\n<script text='text/javascript'>\ndocument.getElementById(\"8198279257811830213\").addEventListener(\"change\", function() {\n var correct = (Math.abs(this.value - NaN) <= 0.001);\n var msgBox = document.getElementById('8198279257811830213_message');\n if(correct) {\n msgBox.innerHTML = \"<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>\";\n var explanation = document.getElementById(\"explanation_8198279257811830213\")\n if (explanation != null) {\n explanation.style.display = \"none\";\n }\n } else {\n msgBox.innerHTML = \"<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>\";\n var explanation = document.getElementById(\"explanation_8198279257811830213\")\n if (explanation != null) {\n explanation.style.display = \"block\";\n }\n }\n\n});\n\n</script>\n```\n:::\n:::\n\n\n##### Question\n\n\nConsider the ordinary differential equation\n\n\n\n$$\n\\frac{dy}{dx} = 1 - 2\\frac{y}{x}, \\quad y(1) = 0.\n$$\n\n\nUse Euler's method to solve for $y(2)$ when $n=50$.\n\n::: {.cell hold='true' execution_count=32}\n\n::: {.cell-output .cell-output-display execution_count=33}\n```{=html}\n<form class=\"mx-2 my-3 mw-100\" name='WeaveQuestion' data-id='14016398996503576158' data-controltype=''>\n <div class='form-group '>\n <div class='controls'>\n <div class=\"form\" id=\"controls_14016398996503576158\">\n <div style=\"padding-top: 5px\">\n </br>\n<div class=\"input-group\">\n <input id=\"14016398996503576158\" type=\"number\" class=\"form-control\" placeholder=\"Numeric answer\">\n</div>\n\n \n </div>\n </div>\n <div id='14016398996503576158_message' style=\"padding-bottom: 15px\"></div>\n </div>\n </div>\n</form>\n\n<script text='text/javascript'>\ndocument.getElementById(\"14016398996503576158\").addEventListener(\"change\", function() {\n var correct = (Math.abs(this.value - 0.5858585858585857) <= 0.001);\n var msgBox = document.getElementById('14016398996503576158_message');\n if(correct) {\n msgBox.innerHTML = \"<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>\";\n var explanation = document.getElementById(\"explanation_14016398996503576158\")\n if (explanation != null) {\n explanation.style.display = \"none\";\n }\n } else {\n msgBox.innerHTML = \"<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>\";\n var explanation = document.getElementById(\"explanation_14016398996503576158\")\n if (explanation != null) {\n explanation.style.display = \"block\";\n }\n }\n\n});\n\n</script>\n```\n:::\n:::\n\n\n##### Question\n\n\nConsider the ordinary differential equation\n\n\n\n$$\n\\frac{dy}{dx} = \\frac{y \\cdot \\log(y)}{x}, \\quad y(2) = e.\n$$\n\n\nUse Euler's method to solve for $y(3)$ when $n=25$.\n\n::: {.cell hold='true' execution_count=33}\n\n::: {.cell-output .cell-output-display execution_count=34}\n```{=html}\n<form class=\"mx-2 my-3 mw-100\" name='WeaveQuestion' data-id='13285205488835137877' data-controltype=''>\n <div class='form-group '>\n <div class='controls'>\n <div class=\"form\" id=\"controls_13285205488835137877\">\n <div style=\"padding-top: 5px\">\n </br>\n<div class=\"input-group\">\n <input id=\"13285205488835137877\" type=\"number\" class=\"form-control\" placeholder=\"Numeric answer\">\n</div>\n\n \n </div>\n </div>\n <div id='13285205488835137877_message' style=\"padding-bottom: 15px\"></div>\n </div>\n </div>\n</form>\n\n<script text='text/javascript'>\ndocument.getElementById(\"13285205488835137877\").addEventListener(\"change\", function() {\n var correct = (Math.abs(this.value - 4.455188733723553) <= 0.001);\n var msgBox = document.getElementById('13285205488835137877_message');\n if(correct) {\n msgBox.innerHTML = \"<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>\";\n var explanation = document.getElementById(\"explanation_13285205488835137877\")\n if (explanation != null) {\n explanation.style.display = \"none\";\n }\n } else {\n msgBox.innerHTML = \"<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>\";\n var explanation = document.getElementById(\"explanation_13285205488835137877\")\n if (explanation != null) {\n explanation.style.display = \"block\";\n }\n }\n\n});\n\n</script>\n```\n:::\n:::\n\n\n##### Question\n\n\nConsider the first-order non-linear ODE\n\n\n\n$$\ny' = y \\cdot (1-2x), \\quad y(0) = 1.\n$$\n\n\nUse Euler's method with $n=50$ to approximate the solution $y$ over $[0,2]$.\n\n\nWhat is the value at $x=1/2$?\n\n::: {.cell hold='true' execution_count=34}\n\n::: {.cell-output .cell-output-display execution_count=35}\n```{=html}\n<form class=\"mx-2 my-3 mw-100\" name='WeaveQuestion' data-id='3989917854840247018' data-controltype=''>\n <div class='form-group '>\n <div class='controls'>\n <div class=\"form\" id=\"controls_3989917854840247018\">\n <div style=\"padding-top: 5px\">\n </br>\n<div class=\"input-group\">\n <input id=\"3989917854840247018\" type=\"number\" class=\"form-control\" placeholder=\"Numeric answer\">\n</div>\n\n \n </div>\n </div>\n <div id='3989917854840247018_message' style=\"padding-bottom: 15px\"></div>\n </div>\n </div>\n</form>\n\n<script text='text/javascript'>\ndocument.getElementById(\"3989917854840247018\").addEventListener(\"change\", function() {\n var correct = (Math.abs(this.value - 1.3046474273110373) <= 0.001);\n var msgBox = document.getElementById('3989917854840247018_message');\n if(correct) {\n msgBox.innerHTML = \"<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>\";\n var explanation = document.getElementById(\"explanation_3989917854840247018\")\n if (explanation != null) {\n explanation.style.display = \"none\";\n }\n } else {\n msgBox.innerHTML = \"<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>\";\n var explanation = document.getElementById(\"explanation_3989917854840247018\")\n if (explanation != null) {\n explanation.style.display = \"block\";\n }\n }\n\n});\n\n</script>\n```\n:::\n:::\n\n\nWhat is the value at $x=3/2$?\n\n::: {.cell hold='true' execution_count=35}\n\n::: {.cell-output .cell-output-display execution_count=36}\n```{=html}\n<form class=\"mx-2 my-3 mw-100\" name='WeaveQuestion' data-id='2982702382563367627' data-controltype=''>\n <div class='form-group '>\n <div class='controls'>\n <div class=\"form\" id=\"controls_2982702382563367627\">\n <div style=\"padding-top: 5px\">\n </br>\n<div class=\"input-group\">\n <input id=\"2982702382563367627\" type=\"number\" class=\"form-control\" placeholder=\"Numeric answer\">\n</div>\n\n \n </div>\n </div>\n <div id='2982702382563367627_message' style=\"padding-bottom: 15px\"></div>\n </div>\n </div>\n</form>\n\n<script text='text/javascript'>\ndocument.getElementById(\"2982702382563367627\").addEventListener(\"change\", function() {\n var correct = (Math.abs(this.value - 0.4870497621097424) <= 0.001);\n var msgBox = document.getElementById('2982702382563367627_message');\n if(correct) {\n msgBox.innerHTML = \"<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>\";\n var explanation = document.getElementById(\"explanation_2982702382563367627\")\n if (explanation != null) {\n explanation.style.display = \"none\";\n }\n } else {\n msgBox.innerHTML = \"<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>\";\n var explanation = document.getElementById(\"explanation_2982702382563367627\")\n if (explanation != null) {\n explanation.style.display = \"block\";\n }\n }\n\n});\n\n</script>\n```\n:::\n:::\n\n\n##### Question: The pendulum revisited.\n\n\nThe issue with the pendulum's solution growing in amplitude can be addressed using a modification to the Euler method attributed to [Cromer](http://astro.physics.ncsu.edu/urca/course_files/Lesson14/index.html). The fix is to replace the term `sin(us[i])` in the line `vs[i+1] = vs[i] + h * (-g / l) * sin(us[i])` of the `euler2` function with `sin(us[i+1])`, which uses the updated angular velocity in the $2$nd step in place of the value before the step.\n\n\nModify the `euler2` function to implement the Euler-Cromer method. What do you see?\n\n::: {.cell hold='true' execution_count=36}\n\n::: {.cell-output .cell-output-display execution_count=37}\n```{=html}\n<form class=\"mx-2 my-3 mw-100\" name='WeaveQuestion' data-id='18370443227900318577' data-controltype=''>\n <div class='form-group '>\n <div class='controls'>\n <div class=\"form\" id=\"controls_18370443227900318577\">\n <div style=\"padding-top: 5px\">\n <div class=\"form-check\">\n <label class=\"form-check-label\" for=\"radio_18370443227900318577_1\">\n <input class=\"form-check-input\" type=\"radio\" name=\"radio_18370443227900318577\"\n id=\"radio_18370443227900318577_1\" value=\"1\">\n </input>\n <span class=\"label-body px-1\">\n The same as before - the amplitude grows\n </span>\n </label>\n</div>\n<div class=\"form-check\">\n <label class=\"form-check-label\" for=\"radio_18370443227900318577_2\">\n <input class=\"form-check-input\" type=\"radio\" name=\"radio_18370443227900318577\"\n id=\"radio_18370443227900318577_2\" value=\"2\">\n </input>\n <span class=\"label-body px-1\">\n The solution is identical to that of the approximation found by linearization of the sine term\n </span>\n </label>\n</div>\n<div class=\"form-check\">\n <label class=\"form-check-label\" for=\"radio_18370443227900318577_3\">\n <input class=\"form-check-input\" type=\"radio\" name=\"radio_18370443227900318577\"\n id=\"radio_18370443227900318577_3\" value=\"3\">\n </input>\n <span class=\"label-body px-1\">\n The solution has a constant amplitude, but its period is slightly <em>shorter</em> than that of the approximate solution found by linearization\n </span>\n </label>\n</div>\n<div class=\"form-check\">\n <label class=\"form-check-label\" for=\"radio_18370443227900318577_4\">\n <input class=\"form-check-input\" type=\"radio\" name=\"radio_18370443227900318577\"\n id=\"radio_18370443227900318577_4\" value=\"4\">\n </input>\n <span class=\"label-body px-1\">\n The solution has a constant amplitude, but its period is slightly <em>longer</em> than that of the approximate solution found by linearization\n </span>\n </label>\n</div>\n\n \n </div>\n </div>\n <div id='18370443227900318577_message' style=\"padding-bottom: 15px\"></div>\n </div>\n </div>\n</form>\n\n<script text='text/javascript'>\ndocument.querySelectorAll('input[name=\"radio_18370443227900318577\"]').forEach(function(rb) {\nrb.addEventListener(\"change\", function() {\n var correct = rb.value == 4;\n var msgBox = document.getElementById('18370443227900318577_message');\n if(correct) {\n msgBox.innerHTML = \"<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>\";\n var explanation = document.getElementById(\"explanation_18370443227900318577\")\n if (explanation != null) {\n explanation.style.display = \"none\";\n }\n } else {\n msgBox.innerHTML = \"<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>\";\n var explanation = document.getElementById(\"explanation_18370443227900318577\")\n if (explanation != null) {\n explanation.style.display = \"block\";\n }\n }\n\n})});\n\n</script>\n```\n:::\n:::\n\n\n",
"supporting": [
"euler_files"
],
"filters": [],
"includes": {
"include-in-header": [
"<script src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js\" integrity=\"sha512-c3Nl8+7g4LMSTdrm621y7kf9v3SDPnhxLNhcjFJbKECVnmZHTdo+IRO05sNLTH/D3vA6u1X32ehoLC7WFVdheg==\" crossorigin=\"anonymous\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js\" integrity=\"sha512-bLT0Qm9VnAYZDflyKcBaQ2gg0hSYNQrJ8RilYldYQ1FxQYoCLtUjuuRuZo+fjqhx/qtq/1itJ0C2ejDxltZVFg==\" crossorigin=\"anonymous\"></script>\n<script type=\"application/javascript\">define('jquery', [],function() {return window.jQuery;})</script>\n"
]
}
}
}