From 05e18af169c5a32fa44c16d62bee37035513b756 Mon Sep 17 00:00:00 2001 From: Mitchell Welch <mwelch8@Mitchells-MBP-3.gateway> Date: Thu, 11 Jun 2020 20:16:18 +1000 Subject: [PATCH] Adding another notebook --- Lorenz_2.ipynb | 170 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 Lorenz_2.ipynb diff --git a/Lorenz_2.ipynb b/Lorenz_2.ipynb new file mode 100644 index 0000000..d828e58 --- /dev/null +++ b/Lorenz_2.ipynb @@ -0,0 +1,170 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Lorenz Differential Equations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we start, we import some preliminary libraries. We will also import (below) the accompanying `lorenz.py` file, which contains the actual solver and plotting routine." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "from ipywidgets import interactive, fixed" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We explore the Lorenz system of differential equations:\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\dot{x} & = \\sigma(y-x) \\\\\n", + "\\dot{y} & = \\rho x - y - xz \\\\\n", + "\\dot{z} & = -\\beta z + xy\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "Let's change (\\\\(\\sigma\\\\), \\\\(\\beta\\\\), \\\\(\\rho\\\\)) with ipywidgets and examine the trajectories." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from lorenz import solve_lorenz\n", + "w=interactive(solve_lorenz,sigma=(0.0,50.0),rho=(0.0,50.0))\n", + "w" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the default set of parameters, we see the trajectories swirling around two points, called attractors. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The object returned by `interactive` is a `Widget` object and it has attributes that contain the current result and arguments:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "t, x_t = w.result" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "w.kwargs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After interacting with the system, we can take the result and perform further computations. In this case, we compute the average positions in \\\\(x\\\\), \\\\(y\\\\) and \\\\(z\\\\)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "xyz_avg = x_t.mean(axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "xyz_avg.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Creating histograms of the average positions (across different trajectories) show that, on average, the trajectories swirl about the attractors." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.hist(xyz_avg[:,0])\n", + "plt.title('Average $x(t)$');" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.hist(xyz_avg[:,1])\n", + "plt.title('Average $y(t)$');" + ] + } + ], + "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.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} -- GitLab