├── .gitignore ├── LICENSE ├── Lorenz 1 Attractors.ipynb ├── Lorenz 2 Three Dimensions.ipynb ├── Lorenz 3 FFT.ipynb ├── Lorenz 4 Wavelets.ipynb ├── README.md ├── Statistical Mechanics 1 Quantum Dice.ipynb ├── Statistical Mechanics 2 Probability Distributions.ipynb ├── Statistical Mechanics 3 Six Degrees of Separation.ipynb ├── Statistical Mechanics 4 Random Walks.ipynb ├── Statistical Mechanics 5 Brownian Diffusion and Langevin Equation.ipynb ├── Statistical Mechanics 6 MSD to Diffusion Coefficient.ipynb ├── brownian.py └── lorenz_rhs.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | local_settings.py 56 | 57 | # Flask stuff: 58 | instance/ 59 | .webassets-cache 60 | 61 | # Scrapy stuff: 62 | .scrapy 63 | 64 | # Sphinx documentation 65 | docs/_build/ 66 | 67 | # PyBuilder 68 | target/ 69 | 70 | # Jupyter Notebook 71 | .ipynb_checkpoints 72 | 73 | # pyenv 74 | .python-version 75 | 76 | # celery beat schedule file 77 | celerybeat-schedule 78 | 79 | # SageMath parsed files 80 | *.sage.py 81 | 82 | # dotenv 83 | .env 84 | 85 | # virtualenv 86 | .venv 87 | venv/ 88 | ENV/ 89 | 90 | # Spyder project settings 91 | .spyderproject 92 | .spyproject 93 | 94 | # Rope project settings 95 | .ropeproject 96 | 97 | # mkdocs documentation 98 | /site 99 | 100 | # mypy 101 | .mypy_cache/ 102 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Chaz Reid 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # statistical-mechanics 2 | 3 | Lorenz attractors, statistical mechanics, nonlinear dynamical systems, computational physics. 4 | -------------------------------------------------------------------------------- /Statistical Mechanics 1 Quantum Dice.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Quantum Dice\n", 8 | "\n", 9 | "You are given several unusual 3-sided dice which, when rolled, show either 1, 2, or 3 spots.\n", 10 | "\n", 11 | "There are three games played iwth these dice: *Distinguishable*, *Bosons*, and *Fermioons*. In each of htese games, the player rolls one die at a time, starting over if requird by the rules, until a legal combination occurs. In *Distinguishable*, all rolls are legal. In *Bosons*, a roll is legal only if the new number is larger or equal to the preceding number. In *Fermions*, a roll is legal only if hte new number is strictly larger than the preceding number.\n", 12 | "\n", 13 | "See figure for table of possibilities after rolling two dice.\n", 14 | "\n", 15 | "Our dice rules ar ethe same ones that govern quantum statistics of identical particles." 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": {}, 22 | "outputs": [], 23 | "source": [ 24 | "import numpy as np\n", 25 | "import matplotlib.pyplot as plt\n", 26 | "import seaborn as sns\n", 27 | "import pandas as pd" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 2, 33 | "metadata": {}, 34 | "outputs": [], 35 | "source": [ 36 | "from numpy.random import randint\n", 37 | "from numpy.random import seed" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": 3, 43 | "metadata": {}, 44 | "outputs": [ 45 | { 46 | "name": "stdout", 47 | "output_type": "stream", 48 | "text": [ 49 | "Should see 3 True values:\n", 50 | "True\n", 51 | "True\n", 52 | "True\n" 53 | ] 54 | } 55 | ], 56 | "source": [ 57 | "# Define classification functions\n", 58 | "\n", 59 | "def roll_is_dist(roll):\n", 60 | " \"\"\"Return a boolean: can this roll outcome be classified as 'distinguishable'\n", 61 | " \"\"\"\n", 62 | " return True\n", 63 | "\n", 64 | "def roll_is_ferm(roll):\n", 65 | " \"\"\"Return a boolean: can this roll outcome be classified as 'fermi'\n", 66 | " \"\"\"\n", 67 | " ndice = len(roll)\n", 68 | " is_fermi = True\n", 69 | " # Ensure that roll j+1 >= roll j\n", 70 | " for j in range(len(roll)-1):\n", 71 | " if(roll[j+1] <= roll[j]):\n", 72 | " is_fermi = False\n", 73 | " break\n", 74 | " return is_fermi\n", 75 | "\n", 76 | "def roll_is_bos(roll):\n", 77 | " \"\"\"Return a boolean: can this roll outcome be classified as 'boson'\n", 78 | " \"\"\"\n", 79 | " ndice = len(roll)\n", 80 | " is_bos = True\n", 81 | " # Ensure that roll j+1 > roll j\n", 82 | " for j in range(len(roll)-1):\n", 83 | " if(roll[j+1] < roll[j]):\n", 84 | " is_bos = False\n", 85 | " break\n", 86 | " return is_bos\n", 87 | "\n", 88 | "print(\"Should see 3 True values:\")\n", 89 | "print(roll_is_dist(np.array([3,2,1])))\n", 90 | "print(roll_is_bos(np.array([1,1,2])))\n", 91 | "print(roll_is_ferm(np.array([1,2,3])))" 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": 4, 97 | "metadata": {}, 98 | "outputs": [], 99 | "source": [ 100 | "# Define roll functions\n", 101 | "\n", 102 | "def quantum_rolls(n, ndice, rolltype):\n", 103 | " \"\"\"Roll ndice dice n times the game rolltype\n", 104 | " \"\"\"\n", 105 | " if(rolltype is 'dist' or rolltype is 'distinguishable'):\n", 106 | " return dist_rolls(n, ndice)\n", 107 | " elif(rolltype is 'ferm' or rolltype is 'fermion'):\n", 108 | " return ferm_rolls(n, ndice)\n", 109 | " elif(rolltype is 'bos' or rolltype is 'boson'):\n", 110 | " return bos_rolls(n, ndice)\n", 111 | " else:\n", 112 | " raise Exception(\"Roll type not recognized: %s\"%(rolltype))\n", 113 | " \n", 114 | "def dist_rolls(n, ndice):\n", 115 | " \"\"\"Roll ndice dice n times for the game 'distinguishable'\n", 116 | " \"\"\"\n", 117 | " return randint(1, 3+1, size=(n,ndice))\n", 118 | "\n", 119 | "def ferm_rolls(n, ndice):\n", 120 | " \"\"\"Roll ndice dice n times for the game 'fermi'\n", 121 | " \"\"\"\n", 122 | " if(ndice>3):\n", 123 | " raise Exception(\"Error: max 3 dice, you specified %d\"%(ndice))\n", 124 | " rolls = []\n", 125 | " for i in range(n):\n", 126 | " # Keep rolling until we get a 'fermi' roll\n", 127 | " roll = randint(1, 3+1, size=(ndice,))\n", 128 | " while(roll_is_ferm(roll) is False):\n", 129 | " roll = randint(1, 3+1, size=(ndice,))\n", 130 | " # Add it to list of rolls results\n", 131 | " rolls.append(roll)\n", 132 | " rolls = np.array(rolls)\n", 133 | " return rolls\n", 134 | "\n", 135 | "def bos_rolls(n, ndice):\n", 136 | " \"\"\"Roll ndice dice n times for the game 'boson'\n", 137 | " \"\"\"\n", 138 | " rolls = []\n", 139 | " for i in range(n):\n", 140 | " # Keep rolling until we get a 'boson' roll\n", 141 | " roll = randint(1, 3+1, size=(ndice,))\n", 142 | " while(roll_is_bos(roll) is False):\n", 143 | " roll = randint(1, 3+1, size=(ndice,))\n", 144 | " # Add it to the list of rolls results\n", 145 | " rolls.append(roll)\n", 146 | " rolls = np.array(rolls)\n", 147 | " return rolls" 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "execution_count": 5, 153 | "metadata": { 154 | "scrolled": true 155 | }, 156 | "outputs": [ 157 | { 158 | "data": { 159 | "text/plain": [ 160 | "array([[2, 2, 3],\n", 161 | " [1, 2, 1],\n", 162 | " [3, 3, 1],\n", 163 | " [1, 2, 1],\n", 164 | " [3, 2, 1]])" 165 | ] 166 | }, 167 | "execution_count": 5, 168 | "metadata": {}, 169 | "output_type": "execute_result" 170 | } 171 | ], 172 | "source": [ 173 | "quantum_rolls(5, 3, 'dist')" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": 6, 179 | "metadata": {}, 180 | "outputs": [ 181 | { 182 | "data": { 183 | "text/plain": [ 184 | "array([[2, 2, 2],\n", 185 | " [1, 2, 2],\n", 186 | " [1, 1, 3],\n", 187 | " [1, 1, 2],\n", 188 | " [3, 3, 3]])" 189 | ] 190 | }, 191 | "execution_count": 6, 192 | "metadata": {}, 193 | "output_type": "execute_result" 194 | } 195 | ], 196 | "source": [ 197 | "quantum_rolls(5, 3, 'bos')" 198 | ] 199 | }, 200 | { 201 | "cell_type": "code", 202 | "execution_count": 7, 203 | "metadata": {}, 204 | "outputs": [ 205 | { 206 | "data": { 207 | "text/plain": [ 208 | "array([[2, 3],\n", 209 | " [1, 3],\n", 210 | " [1, 2],\n", 211 | " [2, 3],\n", 212 | " [1, 2]])" 213 | ] 214 | }, 215 | "execution_count": 7, 216 | "metadata": {}, 217 | "output_type": "execute_result" 218 | } 219 | ], 220 | "source": [ 221 | "quantum_rolls(5, 2, 'ferm')" 222 | ] 223 | }, 224 | { 225 | "cell_type": "code", 226 | "execution_count": 33, 227 | "metadata": {}, 228 | "outputs": [], 229 | "source": [ 230 | "# Define score functions\n", 231 | "\n", 232 | "def get_outcomes():\n", 233 | " return np.array([[2,3,4],[3,4,5],[4,5,6]])\n", 234 | "\n", 235 | "def roll_dice(n):\n", 236 | " return randint(1,3+1,size=(n,3))\n", 237 | "\n", 238 | "def dist_score_outcomes(roll1,roll2):\n", 239 | " return get_outcomes()[roll1-1][roll2-1]\n", 240 | "\n", 241 | "def bos_score_outcomes(roll1,roll2):\n", 242 | " if(roll1 <= roll2):\n", 243 | " return get_outcomes()[roll1-1][roll2-1]\n", 244 | " else:\n", 245 | " return 0\n", 246 | "\n", 247 | "def ferm_score_outcomes(roll1,roll2):\n", 248 | " if(roll1 < roll2):\n", 249 | " return get_outcomes()[roll1-1][roll2-1]\n", 250 | " else:\n", 251 | " return 0\n", 252 | "\n", 253 | "def score_rolls(rolls, rolltype):\n", 254 | " if(rolltype is 'dist' or rolltype is 'distinguishable'):\n", 255 | " score_outcomes = dist_score_outcomes\n", 256 | " elif(rolltype is 'bos' or rolltype is 'boson'):\n", 257 | " score_outcomes = bos_score_outcomes\n", 258 | " elif(rolltype is 'ferm' or rolltype is 'fermion'):\n", 259 | " score_outcomes = ferm_score_outcomes\n", 260 | " else:\n", 261 | " raise Exception(\"Roll type not recognized: %s\"%(rolltype))\n", 262 | " \n", 263 | " total_score = np.zeros(len(rolls),)\n", 264 | " for i in range(len(rolls)):\n", 265 | " roll = rolls[i,:]\n", 266 | " for j in range(len(roll)-1):\n", 267 | " total_score[i] += score_outcomes(roll[j], roll[j+1])\n", 268 | "\n", 269 | " return total_score" 270 | ] 271 | }, 272 | { 273 | "cell_type": "code", 274 | "execution_count": 34, 275 | "metadata": {}, 276 | "outputs": [ 277 | { 278 | "name": "stdout", 279 | "output_type": "stream", 280 | "text": [ 281 | "[ 11. 10. 5. 10. 12.]\n" 282 | ] 283 | } 284 | ], 285 | "source": [ 286 | "t = 'dist'\n", 287 | "r = quantum_rolls(5, 3, t)\n", 288 | "print(score_rolls(r, t))" 289 | ] 290 | }, 291 | { 292 | "cell_type": "code", 293 | "execution_count": 35, 294 | "metadata": {}, 295 | "outputs": [ 296 | { 297 | "name": "stdout", 298 | "output_type": "stream", 299 | "text": [ 300 | "[ 8. 6. 5. 6. 10.]\n" 301 | ] 302 | } 303 | ], 304 | "source": [ 305 | "t = 'bos'\n", 306 | "r = quantum_rolls(5, 3, t)\n", 307 | "print(score_rolls(r, t))" 308 | ] 309 | }, 310 | { 311 | "cell_type": "code", 312 | "execution_count": 36, 313 | "metadata": {}, 314 | "outputs": [ 315 | { 316 | "name": "stdout", 317 | "output_type": "stream", 318 | "text": [ 319 | "[ 8. 8. 8. 8. 8.]\n" 320 | ] 321 | } 322 | ], 323 | "source": [ 324 | "t = 'ferm'\n", 325 | "r = quantum_rolls(5, 3, t)\n", 326 | "print(score_rolls(r, t))" 327 | ] 328 | }, 329 | { 330 | "cell_type": "code", 331 | "execution_count": 37, 332 | "metadata": {}, 333 | "outputs": [ 334 | { 335 | "name": "stdout", 336 | "output_type": "stream", 337 | "text": [ 338 | "[ 3. 4. 5. 4. 5.]\n" 339 | ] 340 | } 341 | ], 342 | "source": [ 343 | "t = 'dist'\n", 344 | "r = quantum_rolls(5, 2, t)\n", 345 | "print(score_rolls(r, t))" 346 | ] 347 | }, 348 | { 349 | "cell_type": "markdown", 350 | "metadata": {}, 351 | "source": [ 352 | "## Part A\n", 353 | "\n", 354 | "Presuming fair dice (each of the faces has a 1/3 chance of appearing)...\n", 355 | "\n", 356 | "For a legal turn rolling two dice in Bosons, what is probability $\\rho(4)$ of rolling a 4?\n", 357 | "\n", 358 | "For a legal turn rolling two dice in Fermion, what is probability $\\rho(4)$ of rolling a 4?" 359 | ] 360 | }, 361 | { 362 | "cell_type": "code", 363 | "execution_count": 38, 364 | "metadata": {}, 365 | "outputs": [ 366 | { 367 | "name": "stdout", 368 | "output_type": "stream", 369 | "text": [ 370 | "Rho(4) for Boson: 2 / 6 = 0.3333\n", 371 | "Rho(4) for Fermion: 1 / 3 = 0.3333\n" 372 | ] 373 | } 374 | ], 375 | "source": [ 376 | "# Analytical calculation:\n", 377 | "\n", 378 | "o = get_outcomes()\n", 379 | "\n", 380 | "bos_n4 = 2\n", 381 | "ferm_n4 = 1\n", 382 | "\n", 383 | "bos_sum = 0\n", 384 | "ferm_sum = 0\n", 385 | "for i in range(o.shape[0]):\n", 386 | " for j in range(o.shape[1]):\n", 387 | " if(i <= j):\n", 388 | " bos_sum += 1\n", 389 | " if(i < j):\n", 390 | " ferm_sum += 1\n", 391 | "\n", 392 | "print(\"Rho(4) for Boson: %d / %d = %0.4f\"%(bos_n4, bos_sum, bos_n4/bos_sum))\n", 393 | "print(\"Rho(4) for Fermion: %d / %d = %0.4f\"%(ferm_n4, ferm_sum, ferm_n4/ferm_sum))" 394 | ] 395 | }, 396 | { 397 | "cell_type": "code", 398 | "execution_count": 39, 399 | "metadata": {}, 400 | "outputs": [ 401 | { 402 | "name": "stdout", 403 | "output_type": "stream", 404 | "text": [ 405 | "Rho(4) for Boson: 3409 / 10000 = 0.3409\n", 406 | "Rho(4) for Boson: 3403 / 10000 = 0.3403\n" 407 | ] 408 | } 409 | ], 410 | "source": [ 411 | "# Computational verification:\n", 412 | "\n", 413 | "total = 10000\n", 414 | "\n", 415 | "rf = quantum_rolls(total, 2, 'ferm')\n", 416 | "rb = quantum_rolls(total, 2, 'bos')\n", 417 | "\n", 418 | "def is_four(roll):\n", 419 | " if(roll[0]+roll[1]==4):\n", 420 | " return True\n", 421 | " return False\n", 422 | "\n", 423 | "bos_n4_comp = np.sum(np.apply_along_axis(arr=rb, func1d=is_four, axis=1))\n", 424 | "print(\"Rho(4) for Boson: %d / %d = %0.4f\"%(bos_n4_comp, total, bos_n4_comp/total))\n", 425 | "\n", 426 | "ferm_n4_comp = np.sum(np.apply_along_axis(arr=rf, func1d=is_four, axis=1))\n", 427 | "print(\"Rho(4) for Boson: %d / %d = %0.4f\"%(ferm_n4_comp, total, ferm_n4_comp/total))" 428 | ] 429 | }, 430 | { 431 | "cell_type": "markdown", 432 | "metadata": {}, 433 | "source": [ 434 | "## Part B\n", 435 | "\n", 436 | "For a legal turn rolling 3 different 3-sided dice in Fermions, what is probability $\\rho(6)$ of rolling a 6?\n", 437 | "\n", 438 | "(The answer is trivial: the only 3-dice outcome for \"Fermions\" is a 6.)" 439 | ] 440 | }, 441 | { 442 | "cell_type": "markdown", 443 | "metadata": {}, 444 | "source": [ 445 | "## Part C\n", 446 | "\n", 447 | "In a turn of three rolls, what is the factor by which the probability of getting triples in \"Bosons\" is enhanced over that in \"Distinguishable\"?" 448 | ] 449 | }, 450 | { 451 | "cell_type": "code", 452 | "execution_count": 54, 453 | "metadata": {}, 454 | "outputs": [], 455 | "source": [ 456 | "def count_identical(rolll):\n", 457 | " identical = 0\n", 458 | " for i in range(len(rolll)):\n", 459 | " if(len(np.unique(rolll[i][:]))==1):\n", 460 | " identical += 1\n", 461 | " return identical" 462 | ] 463 | }, 464 | { 465 | "cell_type": "code", 466 | "execution_count": 55, 467 | "metadata": {}, 468 | "outputs": [ 469 | { 470 | "name": "stdout", 471 | "output_type": "stream", 472 | "text": [ 473 | "Rho(triples) for Dist: 1161 / 10000 = 0.1161\n", 474 | "Rho(triples) for Boson: 3014 / 10000 = 0.3014\n" 475 | ] 476 | } 477 | ], 478 | "source": [ 479 | "n = 10000\n", 480 | "\n", 481 | "t = 'dist'\n", 482 | "r = quantum_rolls(n, 3, t)\n", 483 | "dist_nt_comp = count_identical(r)\n", 484 | "print(\"Rho(triples) for Dist: %d / %d = %0.4f\"%(dist_nt_comp, n, dist_nt_comp/n))\n", 485 | "\n", 486 | "t = 'bos'\n", 487 | "r = quantum_rolls(n, 3, t)\n", 488 | "bos_nt_comp = count_identical(r)\n", 489 | "print(\"Rho(triples) for Boson: %d / %d = %0.4f\"%(bos_nt_comp, n, bos_nt_comp/n))" 490 | ] 491 | }, 492 | { 493 | "cell_type": "markdown", 494 | "metadata": {}, 495 | "source": [ 496 | "In a turn of M rolls, what is the enhancement factor for generating an M-tuple (all rolls having same number of dots showing)?" 497 | ] 498 | }, 499 | { 500 | "cell_type": "code", 501 | "execution_count": 76, 502 | "metadata": {}, 503 | "outputs": [ 504 | { 505 | "name": "stdout", 506 | "output_type": "stream", 507 | "text": [ 508 | "Number of dice = 2\n", 509 | "Rho(triples) for Dist: 3309 / 10000 = 0.3309\n", 510 | "Rho(triples) for Boson: 4926 / 10000 = 0.4926\n", 511 | "\n", 512 | "Number of dice = 3\n", 513 | "Rho(triples) for Dist: 1127 / 10000 = 0.1127\n", 514 | "Rho(triples) for Boson: 2932 / 10000 = 0.2932\n", 515 | "\n", 516 | "Number of dice = 4\n", 517 | "Rho(triples) for Dist: 367 / 10000 = 0.0367\n", 518 | "Rho(triples) for Boson: 1963 / 10000 = 0.1963\n", 519 | "\n", 520 | "Number of dice = 5\n", 521 | "Rho(triples) for Dist: 132 / 10000 = 0.0132\n", 522 | "Rho(triples) for Boson: 1412 / 10000 = 0.1412\n", 523 | "\n", 524 | "Number of dice = 6\n", 525 | "Rho(triples) for Dist: 31 / 10000 = 0.0031\n", 526 | "Rho(triples) for Boson: 1103 / 10000 = 0.1103\n", 527 | "\n", 528 | "Number of dice = 7\n", 529 | "Rho(triples) for Dist: 12 / 10000 = 0.0012\n", 530 | "Rho(triples) for Boson: 835 / 10000 = 0.0835\n", 531 | "\n" 532 | ] 533 | } 534 | ], 535 | "source": [ 536 | "xx = []\n", 537 | "dist_yy = []\n", 538 | "bos_yy = []\n", 539 | "for m in range(2,8):\n", 540 | " n = 10000\n", 541 | " \n", 542 | " xx.append(m)\n", 543 | " print(\"Number of dice = %d\"%(m))\n", 544 | "\n", 545 | " t = 'dist'\n", 546 | " r = quantum_rolls(n, m, t)\n", 547 | " dist_nt_comp = count_identical(r)\n", 548 | " ratio = dist_nt_comp/n\n", 549 | " print(\"Rho(triples) for Dist: %d / %d = %0.4f\"%(dist_nt_comp, n, ratio))\n", 550 | " dist_yy.append(ratio)\n", 551 | " \n", 552 | " t = 'bos'\n", 553 | " r = quantum_rolls(n, m, t)\n", 554 | " bos_nt_comp = count_identical(r)\n", 555 | " ratio = bos_nt_comp/n\n", 556 | " print(\"Rho(triples) for Boson: %d / %d = %0.4f\"%(bos_nt_comp, n, ratio))\n", 557 | " bos_yy.append(ratio)\n", 558 | " \n", 559 | " print()\n", 560 | "\n", 561 | "xx = np.array(xx)\n", 562 | "dist_yy = np.array(dist_yy)\n", 563 | "bos_yy = np.array(bos_yy)" 564 | ] 565 | }, 566 | { 567 | "cell_type": "code", 568 | "execution_count": 77, 569 | "metadata": {}, 570 | "outputs": [ 571 | { 572 | "data": { 573 | "image/png": "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\niYnh6NGjiiwVpwSVSsW4hwN4898xrNmVRLCPKw4muFahtdaKJwJH0dKtBd8lbGBD0lZiryUwrkU4\nTlaOSscTQtSQP6dUbNiw4bb3x44di0qluuuUi40bN6JSqfjtt9+Ij49n+vTpZGdnlx/Pz8/H0dHw\n54gx1t43B+bcP+mb6fpr/3Lzi1m3KxF7Gwv6tGls0n2v6s+uomK7wsK5UaNGDB8+nMDAQHx9fTl/\n/jxlZWX4+/vfsQOgOannbMPw7j6si0pmXVQyEx4NUjpSlbVxb0kzRy9WJawj7toZ5h9axBOBo2jr\nHqx0NCFEDYiMjLzvNqtXry7/ety4cbz99tt8+OGHxMTE0LlzZ/bu3XvPXV6FEKZvy75zFBWXEf6w\nr0lsDleTDH43SkpKGDBgAM7Ozuh0Oq5evcpnn31GmzZtaiKfIvqHNOFgXAbRpzJ4qGVDWjQz3c1F\nnKwceKn1s+y99Bubk7fzr1Mr6NoohFH+Q7HWWikdTwhhBEuWLGHSpEnMnDnzrsfvd6rd9OnTeeut\nt1i0aBE+Pj4MGDCgOmIKIWqhtKw89p5Ip5GbLT3b3jmdq64zWDjPnz+fjz/+uLxQPn78OO++++4d\nt/7MiUZ9a23neSuOsGLnGeZO6GTSC36rVCp6NXmI5i6+LItdw2+XD5OUc46ng8bg7dRU6XhCiGrW\nsmVLgAeeZve/60GvWrXqgc4lhDAN6yKT0ethdF8/NGp5NuqvDBbOBQUFt40ut23b9q4PC5ob70aO\n9Ovgya9HLrLtwAVG9PRROtIDa2jXgFc7TmT7uV+ISN3DomNfMLBpXwY2C0WjNt1/GAghbvfnFtvb\ntm3j22+/VTiNEMJUnDp3jdPnswlq5kIrHzel49RKBv8p4eTkRERERPnriIgInJ2djRqqtgjr6Y2b\noxU/H7zApaw8peNUC61ay3C/QUxp9zxOlo78lBLBomNfkFlwVeloQohqVlRUxOXLl5WOIYQwAWU6\nHesik1EBo2WzkwoZLJzfffddvvrqKzp37kznzp358ssvmTt3bk1kU5y1pZYnH25OmU7P8h1n0JnY\n2s734u/iy6xO0+jYoC0pN1J57/AnHEg/ZHLrVwshKpadnU3fvn3p3r07oaGh9O3bl9DQUKVjCSFq\noX0nLnPpaj7dWzfCs7690nFqLYNTNZo1a8b69espKChAp9Nhb1+3vplt/erRsbk7R85ksed4On3a\n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\n", 574 | "text/plain": [ 575 | "" 576 | ] 577 | }, 578 | "metadata": {}, 579 | "output_type": "display_data" 580 | } 581 | ], 582 | "source": [ 583 | "fig = plt.figure(figsize=(12,4))\n", 584 | "ax1, ax2 = [fig.add_subplot(1,2,i+1) for i in range(2)]\n", 585 | "\n", 586 | "ax1.plot(xx, dist_yy)\n", 587 | "ax1.plot(xx, bos_yy)\n", 588 | "ax1.set_xlabel(\"Number of dice M\")\n", 589 | "ax1.set_ylabel(\"Percentage of Triplets\")\n", 590 | "\n", 591 | "ax2.plot(xx, bos_yy/dist_yy)\n", 592 | "ax2.set_xlabel(\"Number of dice M\")\n", 593 | "ax2.set_ylabel(\"Ratio: Triplets in Bosons/Triplets in Distinguishable\")\n", 594 | "\n", 595 | "plt.show()" 596 | ] 597 | }, 598 | { 599 | "cell_type": "code", 600 | "execution_count": null, 601 | "metadata": {}, 602 | "outputs": [], 603 | "source": [] 604 | }, 605 | { 606 | "cell_type": "code", 607 | "execution_count": null, 608 | "metadata": {}, 609 | "outputs": [], 610 | "source": [] 611 | } 612 | ], 613 | "metadata": { 614 | "kernelspec": { 615 | "display_name": "Python 3", 616 | "language": "python", 617 | "name": "python3" 618 | }, 619 | "language_info": { 620 | "codemirror_mode": { 621 | "name": "ipython", 622 | "version": 3 623 | }, 624 | "file_extension": ".py", 625 | "mimetype": "text/x-python", 626 | "name": "python", 627 | "nbconvert_exporter": "python", 628 | "pygments_lexer": "ipython3", 629 | "version": "3.6.3" 630 | } 631 | }, 632 | "nbformat": 4, 633 | "nbformat_minor": 2 634 | } 635 | -------------------------------------------------------------------------------- /Statistical Mechanics 2 Probability Distributions.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Probability Distributions\n", 8 | "\n", 9 | "Three most common probaiblity distributions are:\n", 10 | "* Uniform\n", 11 | "* Exponential\n", 12 | "* Gaussian\n", 13 | "\n", 14 | "For uniform distribution:\n", 15 | "\n", 16 | "$$\n", 17 | "\\rho_{uniform}(x) = \\dfrac{1}{b-a} \\quad \\mbox{ for } a \\leq x < b\n", 18 | "$$\n", 19 | "\n", 20 | "For exponential distribution:\n", 21 | "\n", 22 | "$$\n", 23 | "\\rho_{exponential}(t) = \\dfrac{ e^{-\\frac{t}{\\tau}} }{ \\tau } \\mbox{ for } t \\geq 0\n", 24 | "$$\n", 25 | "\n", 26 | "For Gaussian distribution:\n", 27 | "\n", 28 | "$$\n", 29 | "\\rho_{Gaussian}(v) = \\dfrac{1}{\\sqrt{2 \\pi \\sigma}} e^{-\\frac{v^2}{2\\sigma^2}}\n", 30 | "$$\n", 31 | "\n", 32 | "where $\\rho$ denotes the probability density function (PDF)." 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 50, 38 | "metadata": {}, 39 | "outputs": [], 40 | "source": [ 41 | "import numpy as np\n", 42 | "import matplotlib.pyplot as plt" 43 | ] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "metadata": {}, 48 | "source": [ 49 | "## Part A: Likelihoods\n", 50 | "\n", 51 | "What is the probability that a random number uniform on $[0,1)$ will happen to lie between x = 0.7 and x = 0.75?\n", 52 | "\n", 53 | "**Answer:**\n", 54 | "\n", 55 | "$$\n", 56 | "P(0.7 \\leq 0.75) = \\dfrac{ \\int_{0.7}^{0.75} \\rho(x) dx }{ \\int_{0}^{1} \\rho(x) dx } = \\dfrac{ 0.75-0.7 }{ 1 - 0 } = 0.05\n", 57 | "$$" 58 | ] 59 | }, 60 | { 61 | "cell_type": "code", 62 | "execution_count": 56, 63 | "metadata": {}, 64 | "outputs": [ 65 | { 66 | "name": "stdout", 67 | "output_type": "stream", 68 | "text": [ 69 | "Percentage = 493 / 10000 = 0.0493\n" 70 | ] 71 | } 72 | ], 73 | "source": [ 74 | "n = 10000\n", 75 | "sim = np.random.rand(n,)\n", 76 | "inside = len(sim[(sim>0.7)&(sim<0.75)])\n", 77 | "print(\"Percentage = %d / %d = %0.4f\"%(inside, n, inside/n))" 78 | ] 79 | }, 80 | { 81 | "cell_type": "markdown", 82 | "metadata": {}, 83 | "source": [ 84 | "What is probability that waiting time for radioactive decay of nucleus is more than twice the exponential decay time $\\tau$?\n", 85 | "\n", 86 | "**Answer:**\n", 87 | "\n", 88 | "$$\n", 89 | "P(t > 2 \\tau) = \n", 90 | "\\dfrac{ \\int_{2 \\tau}^{\\infty} \\exp(-t/\\tau) / \\tau dt }{ \\int_{0}^{\\infty} \\exp(-t/\\tau) / \\tau dt }\n", 91 | "$$" 92 | ] 93 | }, 94 | { 95 | "cell_type": "markdown", 96 | "metadata": {}, 97 | "source": [ 98 | "Denominator evaluates to:\n", 99 | "\n", 100 | "$$\n", 101 | "\\int_{0}^{\\infty} \\exp(-t/\\tau) / \\tau dt = 0 + e^0 = 1\n", 102 | "$$\n", 103 | "\n", 104 | "Numerator evaluates to:\n", 105 | "\n", 106 | "$$\n", 107 | "\\int_{2 \\tau}^{\\infty} \\exp(-t / \\tau) / \\tau dt \n", 108 | "= \\left[ -e^{-t/\\tau} \\right]_{2\\tau}^{\\infty} = 0 + e^{-2}\n", 109 | "$$\n", 110 | "\n", 111 | "for an overall probability of:\n", 112 | "\n", 113 | "$$\n", 114 | "P(t > 2 \\tau) = \\dfrac{1}{e^{2}} \\sim 0.135\n", 115 | "$$" 116 | ] 117 | }, 118 | { 119 | "cell_type": "code", 120 | "execution_count": 57, 121 | "metadata": {}, 122 | "outputs": [ 123 | { 124 | "name": "stdout", 125 | "output_type": "stream", 126 | "text": [ 127 | "0.135335283237\n" 128 | ] 129 | } 130 | ], 131 | "source": [ 132 | "print(1.0/np.exp(2))" 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": 58, 138 | "metadata": {}, 139 | "outputs": [ 140 | { 141 | "name": "stdout", 142 | "output_type": "stream", 143 | "text": [ 144 | "Percentage = 1332 / 10000 = 0.1332\n" 145 | ] 146 | } 147 | ], 148 | "source": [ 149 | "tau = 1\n", 150 | "n = 10000\n", 151 | "sim = np.random.exponential(scale=tau, size=(n,))\n", 152 | "inside = len(sim[sim>2*tau])\n", 153 | "print(\"Percentage = %d / %d = %0.4f\"%(inside, n, inside/n))" 154 | ] 155 | }, 156 | { 157 | "cell_type": "markdown", 158 | "metadata": {}, 159 | "source": [ 160 | "What is probability that your score on an exam with a Gaussian distribution is greater than $2 \\sigma$ above the mean?\n", 161 | "\n", 162 | "Note:\n", 163 | "\n", 164 | "$$\n", 165 | "\\int_{2}^{\\infty} \\frac{1}{\\sqrt{2 \\pi}} \\exp(-v^2/2) dv = \\dfrac{1 - \\mbox{erf}(\\sqrt{2}) }{ 2 } \\sim 0.023\n", 166 | "$$" 167 | ] 168 | }, 169 | { 170 | "cell_type": "markdown", 171 | "metadata": {}, 172 | "source": [ 173 | "**Answer:**\n", 174 | "\n", 175 | "The probability of a score greater than $2 \\sigma$ above the mean is given by:\n", 176 | "\n", 177 | "$$\n", 178 | "P(x > 2 \\sigma) = \\dfrac{ \\int_{2 \\sigma}^{\\infty} \\rho_{Gaussian}(x) dx }{ \\int_{-\\infty}^{\\infty} \\rho_{Gaussian}(x) dx }\n", 179 | "$$" 180 | ] 181 | }, 182 | { 183 | "cell_type": "markdown", 184 | "metadata": {}, 185 | "source": [ 186 | "The expression in the denominator is equal to 1.\n", 187 | "\n", 188 | "The expression in the numerator is equal to:\n", 189 | "\n", 190 | "$$\n", 191 | "\\dfrac{1}{ \\sqrt{2 \\pi \\sigma^2}} \\int_{2 \\sigma}^{\\infty} \\exp \\left( -\\dfrac{p^2}{2\\sigma^2} \\right) dp = \n", 192 | "\\dfrac{1}{ \\sqrt{2 \\pi \\sigma^2}} \\left[ \\int_{-\\infty}^{\\infty} \\exp \\left( -\\dfrac{p^2}{2\\sigma^2} \\right) dp \n", 193 | "- \\int_{-\\infty}^{2 \\sigma} \\exp \\left( -\\dfrac{p^2}{2\\sigma^2} \\right) dp \\right] \\\\\n", 194 | "= \\dfrac{1}{ \\sqrt{2 \\pi \\sigma^2}} \\left[ \\int_{0}^{\\infty} \\exp \\left( -\\dfrac{p^2}{2\\sigma^2} \\right) dp \n", 195 | "- \\int_{0}^{2\\sigma} \\exp \\left( -\\dfrac{p^2}{2\\sigma^2} \\right) dp \\right]\n", 196 | "$$\n", 197 | "\n", 198 | "Now the first term becomes:\n", 199 | "\n", 200 | "$$\n", 201 | "\\dfrac{1}{ \\sqrt{2 \\pi \\sigma^2}} \\int_{0}^{\\infty} \\exp \\left( -\\dfrac{p^2}{2\\sigma^2} \\right) dp = \\frac{1}{2}\n", 202 | "$$\n", 203 | "\n", 204 | "and the second integral can be evaluated:\n", 205 | "\n", 206 | "$$\n", 207 | "\\int_{-\\infty}^{2 \\sigma} \\dfrac{1}{2 \\pi \\sigma^2} \\exp \\left( -\\dfrac{p^2}{2\\sigma^2} \\right) dp = \\dfrac{1}{\\sqrt{\\pi}} \\int_{0}^{\\sqrt{2}} \\exp( -t^2 ) dt \\\\\n", 208 | "= \\dfrac{\\mbox{erf}(\\sqrt{2})}{2}\n", 209 | "$$\n", 210 | "\n", 211 | "Together, these make the overall integral evaluate to:\n", 212 | "\n", 213 | "$$\n", 214 | "\\dfrac{1}{ \\sqrt{2 \\pi \\sigma^2}} \\int_{2 \\sigma}^{\\infty} \\exp \\left( -\\dfrac{p^2}{2\\sigma^2} \\right) dp = \\dfrac{1 - \\mbox{erf}(\\sqrt{2})}{2}\n", 215 | "$$" 216 | ] 217 | }, 218 | { 219 | "cell_type": "code", 220 | "execution_count": 59, 221 | "metadata": {}, 222 | "outputs": [ 223 | { 224 | "name": "stdout", 225 | "output_type": "stream", 226 | "text": [ 227 | "0.0227501319482\n" 228 | ] 229 | } 230 | ], 231 | "source": [ 232 | "from scipy.special import erf\n", 233 | "print((1-erf(np.sqrt(2)))/2)" 234 | ] 235 | }, 236 | { 237 | "cell_type": "code", 238 | "execution_count": 60, 239 | "metadata": {}, 240 | "outputs": [ 241 | { 242 | "name": "stdout", 243 | "output_type": "stream", 244 | "text": [ 245 | "Percentage = 238 / 10000 = 0.0238\n" 246 | ] 247 | } 248 | ], 249 | "source": [ 250 | "n = 10000\n", 251 | "mu = 0\n", 252 | "sigma = 3\n", 253 | "sim = sigma*np.random.randn(n,) + mu\n", 254 | "inside = len(sim[sim>2*sigma])\n", 255 | "print(\"Percentage = %d / %d = %0.4f\"%(inside, n, inside/n))" 256 | ] 257 | }, 258 | { 259 | "cell_type": "markdown", 260 | "metadata": {}, 261 | "source": [ 262 | "## Part B: Normalization, Mean, and Standard Deviation\n", 263 | "\n", 264 | "Show that these probability distributions are normalized: $\\int \\rho(x) dx = 1$.\n", 265 | "\n", 266 | "What is the mean $x_0$ of each distribution?\n", 267 | "\n", 268 | "What is the standard deviation $\\sigma$, where $\\sigma^2 = \\int \\left(x-x_0\\right)^2 \\rho(x) dx$?" 269 | ] 270 | }, 271 | { 272 | "cell_type": "markdown", 273 | "metadata": {}, 274 | "source": [ 275 | "### Uniform Distribution\n", 276 | "\n", 277 | "Mean of uniform distribution is $\\dfrac{b+a}{2}$, and the variance is $V = \\dfrac{(b-a)^2}{12}$, making the standard deviation $\\sigma = \\dfrac{b - a}{2 \\sqrt{3}}$." 278 | ] 279 | }, 280 | { 281 | "cell_type": "markdown", 282 | "metadata": {}, 283 | "source": [ 284 | "### Exponential Distribution\n", 285 | "\n", 286 | "The mean of the exponential distribution is $\\tau$, and the standard deviation $\\sigma = \\tau$ too.\n", 287 | "\n", 288 | "The variance is $\\tau^2$." 289 | ] 290 | }, 291 | { 292 | "cell_type": "markdown", 293 | "metadata": {}, 294 | "source": [ 295 | "### Gaussian Distribution\n", 296 | "\n", 297 | "Mean of Gaussian distribution is $\\mu$, standard deviation is $\\sigma$." 298 | ] 299 | }, 300 | { 301 | "cell_type": "markdown", 302 | "metadata": {}, 303 | "source": [ 304 | "## Sum of Uniform Random Variables" 305 | ] 306 | }, 307 | { 308 | "cell_type": "code", 309 | "execution_count": 105, 310 | "metadata": {}, 311 | "outputs": [], 312 | "source": [ 313 | "import seaborn as sns" 314 | ] 315 | }, 316 | { 317 | "cell_type": "code", 318 | "execution_count": 106, 319 | "metadata": { 320 | "scrolled": true 321 | }, 322 | "outputs": [], 323 | "source": [ 324 | "x1 = np.random.rand(10000,)\n", 325 | "x2 = np.random.rand(10000,)" 326 | ] 327 | }, 328 | { 329 | "cell_type": "code", 330 | "execution_count": 113, 331 | "metadata": {}, 332 | "outputs": [ 333 | { 334 | "data": { 335 | "image/png": "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\nfb6cnOyo26XJXdkDSDQTec9PFeYVmJxknleJmYXzxDqzpkeAvV6vgsFg5HY4HJbb7T7ntmAwOGZg\nAcQX8wokD+YVsI9pAfb7/ers7JQk9fT0KC8vL7Jt0aJF6u7u1sjIiE6ePKljx46N2Q4gvphXIHkw\nr4B90gzDMKI9IBwOq6GhQUePHpVhGGpublZnZ6d8Pp+Ki4u1Y8cOtbe3yzAMrV27VsuXL49XdgBf\nw7wCyYN5BexjWoABAACAVMKFMAAAAOAoFGAAAAA4CgUYAAAAjmJrAU6ky0CaZdm+fbsqKipUUVGh\n3/72t5ZmmUieLx+zZs0aPfvss7bneeONN1RZWamKigo1NDTI6qXlZnlaW1tVVlam8vJyvfbaa5Zm\n+dKhQ4dUW1t71v179uxReXm5qqqqtGPHjrhksUIizetE8sRzZpnXyeWxY16l1J7ZRJvXiTDL3NTU\npLKyMtXW1qq2tlYnT560KenZkvG9NF7m7du3q7S0NPI6//3vf7ch3VinTp3S3XffrZqaGl1//fV6\n/fXXx2yP6XU2bPTKK68Y9957r2EYhnHw4EHjlltuiWw7fvy4cc011xgjIyPG4OBg5Gs7svzzn/80\nrrvuOiMUChnhcNioqqoyDh8+bFkWszxfeuSRR4yKigrj97//vaVZzPKcPHnSKC0tNT7//HPDMAzj\niSeeiHxtR57//ve/xrJly4yRkRHjxIkTxg9+8ANLsxjGmZ/5mmuuMSoqKsbcPzo6avzoRz8yTpw4\nYYyMjBhlZWVGf3+/5XmskEjzapYn3jPLvMaex455NYzUn9lEm9eJMJuj6upqy9+rsUjG99J4mQ3D\nMOrr64333nvPhlTj27lzp9HU1GQYhmEMDAwYy5Yti2yL9XW29QhwIl0GMlqW888/X0899ZRcLpfS\n0tIUCoU0ffp0y7KY5ZGkl19+WWlpaZHHWC1anoMHDyovL08PPvigampqNGfOHM2ePdu2PBkZGZo3\nb56Gh4c1PDystLQ0S7NIks/n0+bNm8+6/9ixY/L5fJoxY4Y8Ho8uv/xy7d+/3/I8VkikeTXLE++Z\nZV5jz2PHvEqpP7OJNq8TES1zOBxWX1+fNmzYoOrqau3cudOumGdJxvfSeJkl6f3339cTTzyhVatW\n6fHHH49zsnO76qqr9Ktf/UqSZBiGXC5XZFusr7PppZCtZMVlIK3IMm3aNM2ePVuGYeihhx7SJZdc\n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\n19NsagAAAABJRU5ErkJggg==\n", 336 | "text/plain": [ 337 | "" 338 | ] 339 | }, 340 | "metadata": {}, 341 | "output_type": "display_data" 342 | } 343 | ], 344 | "source": [ 345 | "x = x1 + x2\n", 346 | "\n", 347 | "fig = plt.figure(figsize=(12,4))\n", 348 | "ax1, ax2, ax3 = [fig.add_subplot(1,3,i+1) for i in range(3)]\n", 349 | "\n", 350 | "ax1.hist(x1, normed=True, bins=25)\n", 351 | "ax2.hist(x2, normed=True, bins=25)\n", 352 | "ax3.hist(x, normed=True, bins=25)\n", 353 | "\n", 354 | "ax1.set_xlabel(r'$x_1$')\n", 355 | "ax2.set_xlabel(r'$x_2$')\n", 356 | "ax3.set_xlabel(r'$x_1 + x_2$')\n", 357 | "\n", 358 | "plt.show()" 359 | ] 360 | }, 361 | { 362 | "cell_type": "code", 363 | "execution_count": 135, 364 | "metadata": {}, 365 | "outputs": [], 366 | "source": [ 367 | "def draw_uniform_sums(nx):\n", 368 | "\n", 369 | " tot = 10000\n", 370 | "\n", 371 | " xs = []\n", 372 | " xsum = np.zeros(tot,)\n", 373 | " for x in range(nx):\n", 374 | " x = np.random.rand(tot,)\n", 375 | " xsum += x\n", 376 | " xs.append(x)\n", 377 | "\n", 378 | " fig = plt.figure(figsize=(14,2))\n", 379 | " axes = [fig.add_subplot(1,nx,i+1) for i in range(nx)]\n", 380 | "\n", 381 | " for i, (ax, x) in enumerate(zip(axes,xs)):\n", 382 | " ax.hist(x, normed=True, bins=25)\n", 383 | " ax.set_xlabel(r'$x_%d$'%(i+1))\n", 384 | "\n", 385 | " fig2 = plt.figure(figsize=(4,4))\n", 386 | " ax2 = fig2.add_subplot(1,1,1)\n", 387 | " ax2.hist(xsum, normed=True, bins=25)\n", 388 | " ax2.set_xlabel(r'$\\Sigma x_i$')\n", 389 | " \n", 390 | " plt.show()" 391 | ] 392 | }, 393 | { 394 | "cell_type": "code", 395 | "execution_count": 136, 396 | "metadata": {}, 397 | "outputs": [ 398 | { 399 | "data": { 400 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzUAAACaCAYAAACQTmZKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAGAFJREFUeJzt3X9slfX9/vGrPaeF9pwDtLEgOg9D\nti4C60ohmdlC3fghDmsYxZaiImwgTKOJCggSpg1pSvVjNQEpG6KQdEFbNeFLZ9gyBqEGtgnVwkr4\nkRBlc8v4JYyeU+ixnPv7h+lxReld7H3Ofd6H5+Ovnvs+7bnOac/V+/W+T0/TLMuyBAAAAACGSnc7\nAAAAAAD0B0MNAAAAAKMx1AAAAAAwGkMNAAAAAKMx1AAAAAAwmtftAN3OnGnv0/VycrJ1/nxHnNP0\nHzmdY0JGKfVy5uUFEpDGeX3tEin1vmduMiGjRE6n0SdfSLXvl9vI6SwTcl5Pxmv1iXFnarxej9sR\n+oSczjEho0ROE5nyWJiQ04SMEjmdZkrOeDPlcSCns8jpHCcyGjfUAAAAAMD/YqgBAAAAYDSGGgAA\nAABGS5o3CjDJL2t22V6nqXZGApIAQOqw69Y3VkxKUBIAQLe+HPcmQz8z1AAAACBh7A6SWRjGN8FQ\nAwAAAEmcMYW5GGoAALgOHPQBQPJhqAEA2OLlIgBgpvuW/L9e96fKQgxDDW4IrKzi69woRY8v8T1P\nLQcPHtRLL72k+vr6Htt37dql9evXy+v1atasWSovL9fly5e1bNkynTt3Tj6fTy+88IJyc3NdSo7e\n3CjP0778Ab6dVHksnMBQAwAAjPPaa69p+/btysrK6rH9888/15o1a/TOO+8oKytLc+bM0aRJk9TU\n1KT8/Hw98cQTeu+991RXV6dVq1a5lB5uc2Kg4Az1l5Jh8ZihBr1y4klvx4kf9ETkNAUvE0ocU97m\nEkhFwWBQ69at0zPPPNNj+4kTJxQMBjV48GBJ0vjx47V//361tLRo4cKFkqTi4mLV1dUlPHNvUqVP\n+H0Mt/RpqEmm07upckoyVcoLuF7J1Cd2UuWXc6rcj1Rhyv86S/ac06ZN06effvqV7aFQSIFAIHbZ\n5/MpFAr12O7z+dTe3m57Gzk52fJ6PX3Kk5cXsL9SP/X3udxUO6PfORNxP03I0M3tLE7cfiLuQ19u\no785bIeaVDy9m4hTZHbDF3AjSsU+AZBc/H6/wuFw7HI4HFYgEOixPRwOa9CgQbZf6/z5jj7dZl5e\nQGfO2A9JyaC/OZPhfvblGCtRC8NuPx5O3H4ijlntcl7Pc+haw4/tUJNqp3eBZJYMr0mNp0T0yfWs\nrCaCUytgvX2dZFlEifdqX7KsJibiazj5da7FqZ8bt1eqrzZq1CidPHlSFy5cUHZ2tg4cOKAFCxbo\n3//+t/bs2aOCggI1Nzdr/Pjxjt1mMh1kxxtnfpGsbIeaRJzelZw7EEmmX0j9lai/jXD7/ibilGSi\nvn68Dzyd+mXi1vc8EX3S15XVRHFiFc2Ug4h4r1gmYkXUidtIlpXTZFqpTkTnNDU1qaOjQ7Nnz9aK\nFSu0YMECWZalWbNmadiwYZozZ46WL1+uOXPmKCMjQ7W1tXHPhNSWKn8SkSq+8RsFOHl6V3LuQMSJ\nXwRun0rsK7ucfX09tNv31+57loiMTnz9VHv5QSIHH6f7BHCTKUNoKvjWt76lxsZGSdJ9990X2z5p\n0iRNmtTzgDIrK0tr165NaL7/lQw/F8lyVjcRkuHxxpcSsVD/jYcaN07voicnnrA3UsEhedEn5kvE\ny28ScZDCgRAAmOm6hxpO7+JGxVslO48+AQAATujTUGPS6V0AyY0+AQDcCDjzm1j8803AIbyUDwAA\nJBKD05cYar4GPyAAnJLqb9MNAEAyYKhB0uMMCJAaWDACAMQLQw0gDrYAAABMxlADAC5ioAYAoP8Y\nagAASEEMzABuJOluBwAAAACA/mCoAQAAAGA0hhoAAAAARmOoAQAAAGA0hhoAAAAARmOoAQAAAGA0\nhhoAAAAARuP/1AAAAKNEo1FVVlbq2LFjyszMVFVVlUaMGCFJOnLkiKqrq2PXbW1t1fr161VQUKBp\n06YpPz9fkjRlyhTNmzfPlfwAnMdQAwAAjLJz505FIhE1NDSotbVVNTU12rBhgyTpjjvuUH19vSRp\nx44dGjp0qIqLi7Vv3z6VlJTo17/+tZvRAcSJ7VDDaggAJ9AlAJzS0tKiiRMnSpIKCwvV1tb2let0\ndHRo3bp1+t3vfidJamtr0+HDh/XQQw8pNzdXq1at0tChQxOaG0D82A41rIYAcAJdAsApoVBIfr8/\ndtnj8airq0te75eHNe+8847uuece5ebmSpJuv/12jR07Vj/60Y+0fft2VVVVae3atb3eTk5Otrxe\nT3zuBIAe8vIC/fp826GG1RAATqBLADjF7/crHA7HLkej0R4DjSQ1NTX1GFruvPNOZWVlSZKmTp1q\nO9BI0vnzHQ4lBmDnzJn2Pl3vWsOP7VDDagiQevq7GvJN0CVAanKjT4qKirR7925Nnz5dra2tsZeo\ndmtvb1ckEtHw4cNj21atWqW7775b06dP11/+8heNGTMm0bEBxJHtUMNqCJB6+rIa4vSBCl0CpCY3\n+mTq1Knau3evKioqZFmWqqurtXnzZgWDQU2ePFkff/yxbr311h6fs2TJEq1cuVJvvvmmsrKyVFVV\n5WgmAO6yHWpYDQHgBLoEgFPS09O1evXqHttGjRoV+7igoEB1dXU99t92222xv90DkHpshxpWQwA4\ngS4BAADxkmZZluV2CKnvfxz0y5pdcU4CpLam2hmuvFwkUfraJRJ9AvQXffIFugTon752iXTtPkl3\nMhAAAAAAJBpDDQAAAACjMdQAAAAAMBpDDQAAAACjMdQAAAAAMBpDDQAAAACjMdQAAAAAMBpDDQAA\nAACjMdQAAAAAMBpDDQAAAACjMdQAAAAAMBpDDQAAAACjMdQAAAAAMBpDDQAAAACjed0OAAAAcD2i\n0agqKyt17NgxZWZmqqqqSiNGjIjtr6qq0ocffiifzydJqqur0+eff66lS5fq8uXLGjp0qNasWaOs\nrCy37gIAh3GmBgAAGGXnzp2KRCJqaGjQkiVLVFNT02P/4cOHtWnTJtXX16u+vl6BQEB1dXUqKSnR\n1q1bNXr0aDU0NLiUHkA82J6pYTUEgBPoEgBOaWlp0cSJEyVJhYWFamtri+2LRqM6efKknnvuOZ09\ne1b333+/7r//frW0tGjx4sWSpOLiYr388suaP3++G/EBxIHtUPO/qyGtra2qqanRhg0bYvu7V0Ny\nc3Nj26qqqlRSUqLS0lJt3LhRDQ0NFAdwg6NLADglFArJ7/fHLns8HnV1dcnr9aqjo0MPPfSQfvGL\nX+jKlSt6+OGHNXbsWIVCIQUCAUmSz+dTe3u77e3k5GTL6/XE7X4A+FJeXqBfn2871CRqNYTiABKn\nv8XxTdAlQGpyo0/8fr/C4XDscjQaldf7xSFNVlaWHn744dhZ3TvvvFNHjx6Nfc7AgQMVDoc1aNAg\n29s5f74jPncAwFecOWO/0CBdu3Nsh5pErYZQHEDi9KU4nD5QoUuA1ORGnxQVFWn37t2aPn26Wltb\nlZ+fH9v3ySef6Mknn9S2bdsUjUb14YcfaubMmSoqKtKePXtUWlqq5uZmjR8/3tFMANxlO9QkajUE\nQGqjSwA4ZerUqdq7d68qKipkWZaqq6u1efNmBYNBTZ48WTNmzFB5ebkyMjI0Y8YMffe739Wjjz6q\n5cuXq7GxUTk5OaqtrXX7bgBwkO1Qw2oIACfQJQCckp6ertWrV/fYNmrUqNjHCxcu1MKFC3vsv+mm\nm/T6668nJB+AxLMdalgNAeAEugQAAMRLmmVZltshpL7/cdAva3bFOQmQ2ppqZ7jyGvhE6WuXSPQJ\n0F/0yRfoEqB/+tol0rX7hH++CQAAAMBoDDUAAAAAjMZQAwAAAMBoDDUAAAAAjMZQAwAAAMBoDDUA\nAAAAjMZQAwAAAMBoDDUAAAAAjMZQAwAAAMBoDDUAAAAAjMZQAwAAAMBoDDUAAAAAjMZQAwAAAMBo\nDDUAAAAAjOZ1OwAAAMD1iEajqqys1LFjx5SZmamqqiqNGDEitn/Lli167733JEl33XWXHn/8cVmW\npeLiYn3729+WJBUWFmrJkiVuxAcQB7ZDDcUBwAl0CQCn7Ny5U5FIRA0NDWptbVVNTY02bNggSfrn\nP/+p7du36+2331Z6errmzJmjKVOmKCsrS2PGjNFvfvMbl9MDiAfboYbiAOAEugSAU1paWjRx4kRJ\nXyx2tLW1xfbdfPPN2rRpkzwejySpq6tLAwYM0OHDh3Xq1CnNnTtXAwcO1LPPPqvbb7/dlfwAnGc7\n1FAcAJxAlwBwSigUkt/vj132eDzq6uqS1+tVRkaGcnNzZVmWXnzxRY0ePVojR47U2bNntWjRIv3s\nZz/TgQMHtGzZMr377ru93k5OTra8Xk+87w4ASXl5gX59vu1QQ3EAqae/xfFN0CVAanKjT/x+v8Lh\ncOxyNBqV1/vlIU1nZ6dWrlwpn8+n559/XpI0duzY2MLJhAkTdPr0aVmWpbS0tGvezvnzHXG6BwCu\nduZMe5+ud63OsR1qKA4g9fSlOJw+UKFLgNTkRp8UFRVp9+7dmj59ulpbW5Wfnx/bZ1mWHnvsMf3w\nhz/UokWLYttfffVVDRkyRI888oiOHj2q4cOH99olAMxiO9RQHACcQJcAcMrUqVO1d+9eVVRUyLIs\nVVdXa/PmzQoGg4pGo/rggw8UiUT0/vvvS5KefvppLVq0SMuWLdOePXvk8Xi0Zs0al+8FACfZDjUU\nBwAn0CUAnJKenq7Vq1f32DZq1KjYx3//+9+/9vM2btwY11wA3GM71FAcAJxAlwAAgHhJdzsAAAAA\nAPQHQw0AAAAAozHUAAAAADAaQw0AAAAAozHUAAAAADAaQw0AAAAAozHUAAAAADAaQw0AAAAAozHU\nAAAAADAaQw0AAAAAozHUAAAAADAaQw0AAAAAozHUAAAAADAaQw0AAAAAozHUAAAAADCa1+4K0WhU\nlZWVOnbsmDIzM1VVVaURI0bE9jc2Nuqtt96S1+vVo48+qp/+9Kf67LPPtHTpUl2+fFlDhw7VmjVr\nlJWVFdc7AiC50SUAnEKfALia7ZmanTt3KhKJqKGhQUuWLFFNTU1s35kzZ1RfX6+33npLr7/+ul5+\n+WVFIhHV1dWppKREW7du1ejRo9XQ0BDXOwEg+dElAJxCnwC4mu1Q09LSookTJ0qSCgsL1dbWFtt3\n6NAhjRs3TpmZmQoEAgoGgzp69GiPzykuLta+ffviFB+AKegSAE6hTwBczfblZ6FQSH6/P3bZ4/Go\nq6tLXq9XoVBIgUAgts/n8ykUCvXY7vP51N7ebhskLy9gex1Jaqqd0afrAbi2vj7fnJRsXSLRJ4AT\n6BO6BHBCf7vE9kyN3+9XOByOXY5Go/J6vV+7LxwOKxAI9NgeDoc1aNCgfoUEYD66BIBT6BMAV7Md\naoqKitTc3CxJam1tVX5+fmxfQUGBWlpa1NnZqfb2dp04cUL5+fkqKirSnj17JEnNzc0aP358nOID\nMAVdAsAp9AmAq6VZlmX1doXudxg5fvy4LMtSdXW1mpubFQwGNXnyZDU2NqqhoUGWZWnx4sWaNm2a\nzp49q+XLlyscDisnJ0e1tbXKzs5O1H0CkIToEgBOoU8AXM12qAEAAACAZMY/3wQAAABgNIYaAAAA\nAEZjqAEAAABgtKQdaqLRqJ577jnNnj1bc+fO1cmTJ3vsb2xsVGlpqcrLy7V79+6kzLhlyxaVlZWp\nrKxMr776qisZJfuc3ddZuHCh3nzzTRcSfpmht5x79uxReXm5ysrKVFlZKbf+HMwu5xtvvKHS0lLN\nmjVLf/rTn1zJ2O3gwYOaO3fuV7bv2rVLs2bN0uzZs9XY2OhCssQxoUsk+sRpJvSJSV0i0ScSfZLI\njN3XoUucyXlD9ImVpP74xz9ay5cvtyzLsj766CPrV7/6VWzf6dOnrZKSEquzs9O6ePFi7ONkyviP\nf/zDmjlzptXV1WVFo1Fr9uzZ1pEjRxKe0S5nt9raWqusrMzaunVrouPF9Jazvb3duvfee61z585Z\nlmVZGzdujH2cTDn/+9//WnfddZfV2dlpXbhwwfrJT37iSkbL+uIxKikpscrKynpsj0Qi1pQpU6wL\nFy5YnZ2dVmlpqXXmzBmXUsafCV1il5M+uX4m9IkpXWJZ9Ek3+iQxGbvRJc7kvFH6JGnP1LS0tGji\nxImSpMLCQrW1tcX2HTp0SOPGjVNmZqYCgYCCwaCOHj2aVBlvvvlmbdq0SR6PR2lpaerq6tKAAQMS\nntEupyT94Q9/UFpaWuw6bukt50cffaT8/Hy98MILeuCBB3TTTTcpNzc36XJmZWXplltu0aVLl3Tp\n0iWlpaW5klGSgsGg1q1b95XtJ06cUDAY1ODBg5WZmanx48dr//79LiRMDBO6xC4nfXL9TOgTU7pE\nok+60SeJySjRJU7mvFH6xOtkSCeFQiH5/f7YZY/Ho66uLnm9XoVCIQUCgdg+n8+nUCiUVBkzMjKU\nm5sry7L04osvavTo0Ro5cmTCM9rlPH78uH7/+99r7dq1Wr9+vSv5uvWW8/z58/rb3/6mbdu2KTs7\nWw8++KAKCwtdeUx7yylJw4cP17333qsrV65o8eLFCc/Xbdq0afr000+/sj1Znj+JYkKXSPSJ00zo\nE1O6RKJPutEniclIlzibU7ox+iRphxq/369wOBy7HI1GY9+Yq/eFw+EeD0IyZJSkzs5OrVy5Uj6f\nT88//3zC83XrLee2bdt06tQpzZs3T//617+UkZGhW2+9VcXFxUmVc8iQIfr+97+vvLw8SdKECRN0\n5MgRV4qjt5zNzc06ffq0/vznP0uSFixYoKKiIhUUFCQ857Uky/MnUUzokq/LQp/EL2ey9InpXSIl\n13MoEegT59Alict5o/RJ0r78rKioSM3NzZKk1tZW5efnx/YVFBSopaVFnZ2dam9v14kTJ3rsT4aM\nlmXpscce0/e+9z2tXr1aHo8n4fm69ZbzmWee0dtvv636+nrNnDlT8+fPd6U07HKOGTNGx48f12ef\nfaauri4dPHhQ3/nOd5Iu5+DBgzVw4EBlZmZqwIABCgQCunjxois5r2XUqFE6efKkLly4oEgkogMH\nDmjcuHFux4obE7rELid94mzOZOkT07tEok/ok/hkpEuczXmj9EnSnqmZOnWq9u7dq4qKClmWperq\nam3evFnBYFCTJ0/W3Llz9cADD8iyLD311FOuvB60t4zRaFQffPCBIpGI3n//fUnS008/7UrZ2z2W\nycIu55IlS7Rw4UJJ0j333OPaLwu7nPv27VN5ebnS09NVVFSkH//4x67kvFpTU5M6Ojo0e/ZsrVix\nQgsWLJBlWZo1a5aGDRvmdry4MaFL7HLSJ9fPhD4xtUsk+oQ+iW9GusT5nDdCn6RZlkvvPQcAAAAA\nDkjal58BAAAAQF8w1AAAAAAwGkMNAAAAAKMx1AAAAAAwGkMNAAAAAKMx1AAAAAAwGkMNAAAAAKMx\n1KBfnn32Wa1bt06S9Mknn2jatGk6fPiwSktLU/q/SgNw3tf1yf79+1VeXq6Kigq98cYbLicEYIKv\n65JDhw6poqJCFRUVeuWVV1xOiHjgn2+iX06dOqXS0lK99tprWrp0qVavXq0f/OAHCofDevLJJ7Vl\nyxa3IwIwxNf1yW233aacnBxlZmZq7ty52rhxo7KystyOCiCJXevYJCMjQ5I0b948rV+/Xn6/3+Wk\ncJLX7QAw27Bhw/Tzn/9cDz74oNauXasJEyZIkoYMGeJyMgCmuVafdPN4PEpP5wUGAHrXW5dcuXJF\nQ4cO1cCBA11MiHjgtwP65dy5c2publZ2drZuueUWt+MAMFhvfbJ3714Fg0ENGDDApXQATHGtLmlq\natL06dM1aNAgeb2s66cahhp8YxcvXtQjjzyiJ554Qo8//rj+7//+z+1IAAzVW5/85z//0W9/+1st\nX77cxYQATNBbl9x3333asWOHTp8+rWPHjrmYEvHAUINv5NKlS1q8eLHmzJmju+++W2VlZfr444/1\n17/+1e1oAAzTW59EIhGtWLFClZWV8vl8bkcFkMTsukSS0tPT5fP5OOubgnijAMTF/PnzdeTIEd1x\nxx1auXKl8vPz3Y4EwEDvvvuuXnnlFY0cOVKS9NJLL2nYsGEupwJgmh07dmjr1q2KRqOaMGGCnnrq\nKbcjwWEMNQAAAACMxsvPAAAAABiNoQYAAACA0RhqAAAAABiNoQYAAACA0RhqAAAAABiNoQYAAACA\n0RhqAAAAABiNoQYAAACA0f4/WgonwRXbPJsAAAAASUVORK5CYII=\n", 401 | "text/plain": [ 402 | "" 403 | ] 404 | }, 405 | "metadata": {}, 406 | "output_type": "display_data" 407 | }, 408 | { 409 | "data": { 410 | "image/png": "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\nQ88884xtWVq3bi3p73V45ZVX9Nprr/mOObE2/vJIoV+fFi1aaP78+dq2bZuWLVvmu72ha+PIzsFN\np2T7yxIREaH09HRFRESoTZs2io6OdvQXy9x0urplWZo0aZIiIyPl8XgUExOjX375xfbHPXPmjNLT\n0xUfH6/nnnvOd7tTa3OnPE6tz5IlS7R161a9+eabqqyslNTwtXGkHNx0Sra/LKdOnVJKSopqamp0\n48YN7d+/X3369LEtSyA9evRQWVmZLl++rOrqav34448aOHCgI1nKy8s1ZswYVVRUyLIs7d27V337\n9rX1Mc+fP68pU6Zo7ty5GjduXK1jTqyNvzyhXp+ioiLfS5eIiAiFhYWpWbO///Nu6No48rIiNjZW\nu3fvVnJysu+U7DVr1vhOyU5LS1Nqaqosy9Ls2bPVsmVLx7LEx8crMTFR4eHhio+PV8+ePW3Lcidb\ntmxRZWWlkpKStGDBAr344ouyLEtjx45V586dHcsye/Zspaeny+Px6Omnn1ZMTIytj71y5UpduXJF\ny5cv1/LlyyVJ48eP17Vr1xxZm0B5Qrk+I0aMUGZmpiZMmKCbN2/qjTfe0LZt24J63nD6NAAjToIC\nYEQ5ADCiHAAYUQ4AjCgHAEaUAwAjJl6hjtjYWF2/fl2RkZG+29555x09+uijDqZCqHGeA+rYuXOn\ncnJytGHDBnXq1MnpOHAILytQR0xMjKZPn64ZM2bU+gWdzMxM329onjp1SiNHjtThw4clSe+//76q\nq6sdyQt7sHPAHS1evFhnzpzxFcLZs2eVkJCgDz/8UHPmzFF2drYGDRrkcErYhZ0DjK5du6bvvvtO\nsbGxvts6d+6sF154QRMmTFBmZqavGLxer2bNmuVUVNiEcoBRdna2+vXrp+eff95324ULF1RcXKxW\nrVrp4Ycf9t1++vRpPfLII07EhI34tAJ1FBUV6eDBg9q0aZPvtitXrmjatGmaNWuWLly4oKVLl2rl\nypWSpOPHj/NJRhNEOaCO/Px8Xb9+XcnJyZKk69ev67ffflN2drZGjBihmzdvau3atdqzZ4+io6N1\n/PhxRUdHO5wa9xpvSCJo8+bNU1ZWVq3L7aHxoxwAGPGGJAAjygGAEeUAwIhyAGBEOQAwohwAGFEO\nAIwoBwBGlAMAo/8BADDg4Kg3juAAAAAASUVORK5CYII=\n", 411 | "text/plain": [ 412 | "" 413 | ] 414 | }, 415 | "metadata": {}, 416 | "output_type": "display_data" 417 | } 418 | ], 419 | "source": [ 420 | "draw_uniform_sums(3)" 421 | ] 422 | }, 423 | { 424 | "cell_type": "code", 425 | "execution_count": 137, 426 | "metadata": {}, 427 | "outputs": [ 428 | { 429 | "data": { 430 | "image/png": "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\n", 431 | "text/plain": [ 432 | "" 433 | ] 434 | }, 435 | "metadata": {}, 436 | "output_type": "display_data" 437 | }, 438 | { 439 | "data": { 440 | "image/png": "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\n", 441 | "text/plain": [ 442 | "" 443 | ] 444 | }, 445 | "metadata": {}, 446 | "output_type": "display_data" 447 | } 448 | ], 449 | "source": [ 450 | "draw_uniform_sums(6)" 451 | ] 452 | }, 453 | { 454 | "cell_type": "code", 455 | "execution_count": 138, 456 | "metadata": {}, 457 | "outputs": [ 458 | { 459 | "data": { 460 | "image/png": "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\nDUcZPbzl8emnn2L48OEajy76eMvDZDLBbDYjPj4eAwcORE1NjcYjjXzesrBarbj77rsBAAMHDsSJ\nEye0HGbU8Ldf9c9//hODBg3SaHTRx1seO3bswOjRo7Fr1y4kJyfj8OHDGo9UOTY1HjQ1NWHmzJnI\ny8vDfffdh4ceeggnTpzAP/7xD62HFnV8ZdHS0oLnnnsOixcvRmJiotZDjQr+8gCA2NhYJCYm8siZ\nCnzlceLECezYsQPTp09HVVUVPvjgA62HG/F85eFwOAAAkiShoqICXbt21Xi0kc1XFpmZmTh+/DgA\n4Pjx4+jevbvGo418/varampq3E4pp/DylYckSejSpQsAICkpCXa7XePRKhcjSZKk9SD0ZurUqaiq\nqkLv3r2xYMECZGRkaD2kqPThhx/i9ddfx6233goAeO2115CWlqbxqKLXrl27sGXLFrhcLgwcOBBP\nPfWU1kOif5s6dSo2btyo9TCi2r59+7BixQrExcUhJycH06ZN03pIUe3ll1/GsWPH0LNnT7z00kta\nDyfqbdy4ESkpKfjZz36m9VCi3rfffounnnoKra2t6Ny5M9544w35b2ZFx6aGiIiIiIh0jaefERER\nERGRrrGpISIiIiIiXWNTQ0REREREusamhoiIiIiIdI1NDRERERER6RqbGiIiIiIi0jU2NURERERE\npGtsaoiIiIiISNf+P38xTkxAuFvyAAAAAElFTkSuQmCC\n", 461 | "text/plain": [ 462 | "" 463 | ] 464 | }, 465 | "metadata": {}, 466 | "output_type": "display_data" 467 | }, 468 | { 469 | "data": { 470 | "image/png": "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\nnwXIg44AAAAASUVORK5CYII=\n", 471 | "text/plain": [ 472 | "" 473 | ] 474 | }, 475 | "metadata": {}, 476 | "output_type": "display_data" 477 | } 478 | ], 479 | "source": [ 480 | "draw_uniform_sums(8)" 481 | ] 482 | }, 483 | { 484 | "cell_type": "code", 485 | "execution_count": null, 486 | "metadata": {}, 487 | "outputs": [], 488 | "source": [] 489 | } 490 | ], 491 | "metadata": { 492 | "kernelspec": { 493 | "display_name": "Python 3", 494 | "language": "python", 495 | "name": "python3" 496 | }, 497 | "language_info": { 498 | "codemirror_mode": { 499 | "name": "ipython", 500 | "version": 3 501 | }, 502 | "file_extension": ".py", 503 | "mimetype": "text/x-python", 504 | "name": "python", 505 | "nbconvert_exporter": "python", 506 | "pygments_lexer": "ipython3", 507 | "version": "3.6.3" 508 | } 509 | }, 510 | "nbformat": 4, 511 | "nbformat_minor": 2 512 | } 513 | -------------------------------------------------------------------------------- /brownian.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | def brownian(delta, dt, N, d): 4 | """Returns a d-dimensional Brownian walk 5 | with length scale delta 6 | and random step size drawn from 7 | zero-mean normal distribution 8 | with standard deviation delta^2*dt. 9 | 10 | N steps in d dimensional space. 11 | 12 | Parameters: 13 | 14 | delta : length scale of diffusion step 15 | dt : time scale of diffusion step 16 | N : number of diffusion steps 17 | d : dimensionality of Brownian walk 18 | """ 19 | mean = 0.0 20 | stdev = np.sqrt(delta*delta*dt) 21 | 22 | # Get N-1 random steps 23 | r = np.random.normal(loc=mean, scale=stdev, size=(N-1,d)) 24 | 25 | # Make sure the first location is 0,0 26 | r2 = np.zeros((N, d)) 27 | r2[1:N,:] = r[0:(N-1),:] 28 | 29 | return r2.cumsum(axis=0) 30 | -------------------------------------------------------------------------------- /lorenz_rhs.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from scipy.integrate import odeint 3 | 4 | def get_lorenz_solution(in_0, tmax, nt, args_tuple): 5 | t = np.linspace(0, tmax, nt) 6 | soln = odeint(lorenz, in_0, t, args=args_tuple).T 7 | return t, soln 8 | 9 | def lorenz(in_, t, sigma, b, r): 10 | """Evaluates the RHS of the 3 11 | Lorenz attractor differential equations. 12 | 13 | in_ : initial vector of [x_0, y_0, z_0] 14 | t : time vector (not used, but present for odeint() call) 15 | sigma : numerical parameter 1 16 | b : numerical parameter 2 17 | r : numerical parameter 3 18 | """ 19 | x = in_[0] 20 | y = in_[1] 21 | z = in_[2] 22 | return [sigma*(y-x), 23 | r*x - y - x*z, 24 | x*y - b*z] 25 | 26 | --------------------------------------------------------------------------------