{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Modelling the recovery process using probability" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recall code from last time for $I_{n+1} = (1 + c) I_n = \\lambda * I_n$:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "run_infection (generic function with 3 methods)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function run_infection(I_0, λ, T=20) # T=20 is default value\n", "\n", " I = zeros(T)\n", " I[1] = I_0\n", "\n", " for n in 1:T-1\n", " I[n+1] = λ * I[n] \n", " end\n", "\n", " return I\n", "end" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "run_infection(1.0, 0.1);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Adding new data to extend a vector" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1-element Array{Float64,1}:\n", " 1.0" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v = [1.0]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2-element Array{Float64,1}:\n", " 1.0\n", " 7.0" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "push!(v, 7.0) # ! means: function `push!` modifies its first argument" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "length(v)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "ename": "BoundsError", "evalue": "BoundsError: attempt to access 2-element Array{Float64,1} at index [3]", "output_type": "error", "traceback": [ "BoundsError: attempt to access 2-element Array{Float64,1} at index [3]", "", "Stacktrace:", " [1] getindex(::Array{Float64,1}, ::Int64) at ./array.jl:787", " [2] top-level scope at In[14]:2" ] } ], "source": [ "a = 1\n", "\n", "v[3]" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2-element Array{Float64,1}:\n", " 1.0\n", " 7.0" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3-element Array{Float64,1}:\n", " 1.0\n", " 7.0\n", " 10.0" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[v; 10]" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2-element Array{Float64,1}:\n", " 1.0\n", " 7.0" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3-element Array{Float64,1}:\n", " 1.0\n", " 7.0\n", " 10.0" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v2 = [v; 10]" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3-element Array{Float64,1}:\n", " 1.0\n", " 7.0\n", " 10.0" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v2 = copy(v)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "run_infection (generic function with 3 methods)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function run_infection(I_0, λ, T=20) # T=20 is default value\n", "\n", " Is = [I_0]\n", " \n", " I = I_0 # current value of I\n", "\n", " for n in 1:T-1\n", " I_next = λ * I\n", " \n", " push!(Is, I_next)\n", " end\n", "\n", " return Is\n", "end" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "20-element Array{Float64,1}:\n", " 1.0\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1\n", " 1.1" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "run_infection(1.0, 1.1)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "run_infection (generic function with 3 methods)" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function run_infection(I_0, λ, T=20) # T=20 is default value\n", "\n", " Is = [I_0]\n", " I = I_0 # current value of I\n", "\n", " for n in 1:T-1\n", " I_next = λ * I\n", " \n", " push!(Is, I_next)\n", " \n", " I = I_next\n", " end\n", " \n", " return Is\n", "end" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "20-element Array{Float64,1}:\n", " 1.0\n", " 1.1\n", " 1.2100000000000002\n", " 1.3310000000000004\n", " 1.4641000000000006\n", " 1.6105100000000008\n", " 1.771561000000001\n", " 1.9487171000000014\n", " 2.1435888100000016\n", " 2.357947691000002\n", " 2.5937424601000023\n", " 2.853116706110003\n", " 3.1384283767210035\n", " 3.4522712143931042\n", " 3.797498335832415\n", " 4.177248169415656\n", " 4.594972986357222\n", " 5.054470284992944\n", " 5.559917313492239\n", " 6.115909044841463" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "run_infection(1.0, 1.1)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3-element Array{Float64,1}:\n", " 1.0\n", " 7.0\n", " 10.0" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4-element Array{Float64,1}:\n", " 8.0\n", " 1.0\n", " 7.0\n", " 10.0" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pushfirst!(v, 8) # deque - double-ended queue" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Randomness" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.6254465754499758" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = rand()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9251027927183173" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = rand()" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "using Random" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "Random.seed!(3);" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.8116984049958615" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = rand()" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9884323655013432" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = rand()" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "Random.seed!(3); # mechanism to get repeatable sequences of random numbers" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.8116984049958615" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = rand()" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9884323655013432" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = rand()" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "10-element Array{Float64,1}:\n", " 0.8076220876500786\n", " 0.9700908450487538\n", " 0.14006111319509862\n", " 0.5094438024440222\n", " 0.05869740597593154\n", " 0.004257960600515309\n", " 0.9746379934512355\n", " 0.5572251384524507\n", " 0.4644219211852372\n", " 0.2875090558291695" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rand(10)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "using Plots" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "r = rand(50);" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0\n", "\n", "\n", "10\n", "\n", "\n", "20\n", "\n", "\n", "30\n", "\n", "\n", "40\n", "\n", "\n", "50\n", "\n", "\n", "0.2\n", "\n", "\n", "0.4\n", "\n", "\n", "0.6\n", "\n", "\n", "0.8\n", "\n", "\n", "1.0\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "y1\n", "\n", "\n" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scatter(r)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "one(0.5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0.2\n", "\n", "\n", "0.4\n", "\n", "\n", "0.6\n", "\n", "\n", "0.8\n", "\n", "\n", "1.0\n", "\n", "\n", "0.0\n", "\n", "\n", "0.2\n", "\n", "\n", "0.4\n", "\n", "\n", "0.6\n", "\n", "\n", "0.8\n", "\n", "\n", "1.0\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "y1\n", "\n", "\n" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scatter(r, 0.5 .* one.(r), ylim=(0, 1))" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "application/vnd.webio.node+json": { "children": [ { "children": [ { "children": [ { "children": [ { "children": [ { "children": [ "n" ], "instanceArgs": { "namespace": "html", "tag": "label" }, "nodeType": "DOM", "props": { "className": "interact ", "style": { "padding": "5px 10px 0px 10px" } }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row-left" }, "type": "node" }, { "children": [ { "children": [], "instanceArgs": { "namespace": "html", "tag": "input" }, "nodeType": "DOM", "props": { "attributes": { "data-bind": "numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}", "orient": "horizontal", "type": "range" }, "className": "slider slider is-fullwidth", "max": 100, "min": 1, "step": 1, "style": {} }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row-center" }, "type": "node" }, { "children": [ { "children": [], "instanceArgs": { "namespace": "html", "tag": "p" }, "nodeType": "DOM", "props": { "attributes": { "data-bind": "text: formatted_val" } }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row-right" }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row interact-widget" }, "type": "node" } ], "instanceArgs": { "handlers": { "changes": [ "(function (val){return (val!=this.model[\"changes\"]()) ? (this.valueFromJulia[\"changes\"]=true, this.model[\"changes\"](val)) : undefined})" ], "index": [ "(function (val){return (val!=this.model[\"index\"]()) ? (this.valueFromJulia[\"index\"]=true, this.model[\"index\"](val)) : undefined})" ] }, "id": "2580909790707749940", "imports": { "data": [ { "name": "knockout", "type": "js", "url": "/assetserver/800fa077652c804a9c5f68b6c1e29c6c61f85df7-knockout.js" }, { "name": "knockout_punches", "type": "js", "url": "/assetserver/81e3f253b58efa296c3c65b00e2bf7b25de6cca9-knockout_punches.js" }, { "name": null, "type": "js", "url": "/assetserver/5d2042c6908ffff0b7c8d26135740476bcf00827-all.js" }, { "name": null, "type": "css", "url": "/assetserver/87ad319ae61de5d44f67c268a0a8f65862fca478-style.css" }, { "name": null, "type": "css", "url": "/assetserver/a062b31556f81f574879e47f48c7fae2687f3c82-bulma_confined.min.css" } ], "type": "async_block" }, "mount_callbacks": [ "function () {\n var handler = (function (ko, koPunches) {\n ko.punches.enableAll();\n ko.bindingHandlers.numericValue = {\n init: function(element, valueAccessor, allBindings, data, context) {\n var stringified = ko.observable(ko.unwrap(valueAccessor()));\n stringified.subscribe(function(value) {\n var val = parseFloat(value);\n if (!isNaN(val)) {\n valueAccessor()(val);\n }\n });\n valueAccessor().subscribe(function(value) {\n var str = JSON.stringify(value);\n if ((str == \"0\") && ([\"-0\", \"-0.\"].indexOf(stringified()) >= 0))\n return;\n if ([\"null\", \"\"].indexOf(str) >= 0)\n return;\n stringified(str);\n });\n ko.applyBindingsToNode(\n element,\n {\n value: stringified,\n valueUpdate: allBindings.get('valueUpdate'),\n },\n context,\n );\n }\n };\n var json_data = {\"formatted_vals\":[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\",\"20\",\"21\",\"22\",\"23\",\"24\",\"25\",\"26\",\"27\",\"28\",\"29\",\"30\",\"31\",\"32\",\"33\",\"34\",\"35\",\"36\",\"37\",\"38\",\"39\",\"40\",\"41\",\"42\",\"43\",\"44\",\"45\",\"46\",\"47\",\"48\",\"49\",\"50\",\"51\",\"52\",\"53\",\"54\",\"55\",\"56\",\"57\",\"58\",\"59\",\"60\",\"61\",\"62\",\"63\",\"64\",\"65\",\"66\",\"67\",\"68\",\"69\",\"70\",\"71\",\"72\",\"73\",\"74\",\"75\",\"76\",\"77\",\"78\",\"79\",\"80\",\"81\",\"82\",\"83\",\"84\",\"85\",\"86\",\"87\",\"88\",\"89\",\"90\",\"91\",\"92\",\"93\",\"94\",\"95\",\"96\",\"97\",\"98\",\"99\",\"100\"],\"changes\":WebIO.getval({\"name\":\"changes\",\"scope\":\"2580909790707749940\",\"id\":\"ob_10\",\"type\":\"observable\"}),\"index\":WebIO.getval({\"name\":\"index\",\"scope\":\"2580909790707749940\",\"id\":\"ob_09\",\"type\":\"observable\"})};\n var self = this;\n function AppViewModel() {\n for (var key in json_data) {\n var el = json_data[key];\n this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n }\n \n [this[\"formatted_val\"]=ko.computed( function(){\n return this.formatted_vals()[parseInt(this.index())-(1)];\n }\n,this)]\n [this[\"changes\"].subscribe((function (val){!(this.valueFromJulia[\"changes\"]) ? (WebIO.setval({\"name\":\"changes\",\"scope\":\"2580909790707749940\",\"id\":\"ob_10\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"changes\"]=false}),self),this[\"index\"].subscribe((function (val){!(this.valueFromJulia[\"index\"]) ? (WebIO.setval({\"name\":\"index\",\"scope\":\"2580909790707749940\",\"id\":\"ob_09\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"index\"]=false}),self)]\n \n }\n self.model = new AppViewModel();\n self.valueFromJulia = {};\n for (var key in json_data) {\n self.valueFromJulia[key] = false;\n }\n ko.applyBindings(self.model, self.dom);\n}\n);\n (WebIO.importBlock({\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"/assetserver/800fa077652c804a9c5f68b6c1e29c6c61f85df7-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"/assetserver/81e3f253b58efa296c3c65b00e2bf7b25de6cca9-knockout_punches.js\"}],\"type\":\"async_block\"})).then((imports) => handler.apply(this, imports));\n}\n" ], "observables": { "changes": { "id": "ob_10", "sync": false, "value": 0 }, "index": { "id": "ob_09", "sync": true, "value": 50 } }, "systemjs_options": null }, "nodeType": "Scope", "props": {}, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "field interact-widget" }, "type": "node" }, { "children": [ { "children": [], "instanceArgs": { "id": "ob_16", "name": "obs-node" }, "nodeType": "ObservableNode", "props": {}, "type": "node" } ], "instanceArgs": { "handlers": {}, "id": "17050130591139244532", "imports": { "data": [], "type": "async_block" }, "mount_callbacks": [], "observables": { "obs-node": { "id": "ob_16", "sync": false, "value": { "children": [ { "children": [], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "setInnerHtml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n0.0\n\n\n0.2\n\n\n0.4\n\n\n0.6\n\n\n0.8\n\n\n1.0\n\n\n0.0\n\n\n0.2\n\n\n0.4\n\n\n0.6\n\n\n0.8\n\n\n1.0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ny1\n\n\n" }, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": { "className": "interact-flex-row interact-widget" }, "type": "node" } } }, "systemjs_options": null }, "nodeType": "Scope", "props": {}, "type": "node" } ], "instanceArgs": { "namespace": "html", "tag": "div" }, "nodeType": "DOM", "props": {}, "type": "node" }, "text/html": [ "\n", " \n", "\n" ], "text/plain": [ "Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Scope(Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[\"n\"], Dict{Symbol,Any}(:className => \"interact \",:style => Dict{Any,Any}(:padding => \"5px 10px 0px 10px\")))], Dict{Symbol,Any}(:className => \"interact-flex-row-left\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(:max => 100,:min => 1,:attributes => Dict{Any,Any}(:type => \"range\",Symbol(\"data-bind\") => \"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\",\"orient\" => \"horizontal\"),:step => 1,:className => \"slider slider is-fullwidth\",:style => Dict{Any,Any}()))], Dict{Symbol,Any}(:className => \"interact-flex-row-center\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(:attributes => Dict(\"data-bind\" => \"text: formatted_val\")))], Dict{Symbol,Any}(:className => \"interact-flex-row-right\"))], Dict{Symbol,Any}(:className => \"interact-flex-row interact-widget\")), Dict{String,Tuple{Observables.AbstractObservable,Union{Nothing, Bool}}}(\"changes\" => (Observable{Int64} with 1 listeners. Value:\n", "0, nothing),\"index\" => (Observable{Int64} with 2 listeners. Value:\n", "50, nothing)), Set(String[]), nothing, Asset[Asset(\"js\", \"knockout\", \"/Users/dpsanders/.julia/packages/Knockout/IP1uR/src/../assets/knockout.js\"), Asset(\"js\", \"knockout_punches\", \"/Users/dpsanders/.julia/packages/Knockout/IP1uR/src/../assets/knockout_punches.js\"), Asset(\"js\", nothing, \"/Users/dpsanders/.julia/packages/InteractBase/9mFwe/src/../assets/all.js\"), Asset(\"css\", nothing, \"/Users/dpsanders/.julia/packages/InteractBase/9mFwe/src/../assets/style.css\"), Asset(\"css\", nothing, \"/Users/dpsanders/.julia/packages/Interact/cdOnS/src/../assets/bulma_confined.min.css\")], Dict{Any,Any}(\"changes\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")],\"index\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\")]), WebIO.ConnectionPool(Channel{Any}(sz_max:32,sz_curr:0), Set(AbstractConnection[]), Base.GenericCondition{Base.AlwaysLockedST}(Base.InvasiveLinkedList{Task}(Task (runnable) @0x00000001342ec6d0, Task (runnable) @0x00000001342ec6d0), Base.AlwaysLockedST(1))), WebIO.JSString[WebIO.JSString(\"function () {\\n var handler = (function (ko, koPunches) {\\n ko.punches.enableAll();\\n ko.bindingHandlers.numericValue = {\\n init: function(element, valueAccessor, allBindings, data, context) {\\n var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n stringified.subscribe(function(value) {\\n var val = parseFloat(value);\\n if (!isNaN(val)) {\\n valueAccessor()(val);\\n }\\n });\\n valueAccessor().subscribe(function(value) {\\n var str = JSON.stringify(value);\\n if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n return;\\n if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n return;\\n stringified(str);\\n });\\n ko.applyBindingsToNode(\\n element,\\n {\\n value: stringified,\\n valueUpdate: allBindings.get('valueUpdate'),\\n },\\n context,\\n );\\n }\\n };\\n var json_data = {\\\"formatted_vals\\\":[\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"10\\\",\\\"11\\\",\\\"12\\\",\\\"13\\\",\\\"14\\\",\\\"15\\\",\\\"16\\\",\\\"17\\\",\\\"18\\\",\\\"19\\\",\\\"20\\\",\\\"21\\\",\\\"22\\\",\\\"23\\\",\\\"24\\\",\\\"25\\\",\\\"26\\\",\\\"27\\\",\\\"28\\\",\\\"29\\\",\\\"30\\\",\\\"31\\\",\\\"32\\\",\\\"33\\\",\\\"34\\\",\\\"35\\\",\\\"36\\\",\\\"37\\\",\\\"38\\\",\\\"39\\\",\\\"40\\\",\\\"41\\\",\\\"42\\\",\\\"43\\\",\\\"44\\\",\\\"45\\\",\\\"46\\\",\\\"47\\\",\\\"48\\\",\\\"49\\\",\\\"50\\\",\\\"51\\\",\\\"52\\\",\\\"53\\\",\\\"54\\\",\\\"55\\\",\\\"56\\\",\\\"57\\\",\\\"58\\\",\\\"59\\\",\\\"60\\\",\\\"61\\\",\\\"62\\\",\\\"63\\\",\\\"64\\\",\\\"65\\\",\\\"66\\\",\\\"67\\\",\\\"68\\\",\\\"69\\\",\\\"70\\\",\\\"71\\\",\\\"72\\\",\\\"73\\\",\\\"74\\\",\\\"75\\\",\\\"76\\\",\\\"77\\\",\\\"78\\\",\\\"79\\\",\\\"80\\\",\\\"81\\\",\\\"82\\\",\\\"83\\\",\\\"84\\\",\\\"85\\\",\\\"86\\\",\\\"87\\\",\\\"88\\\",\\\"89\\\",\\\"90\\\",\\\"91\\\",\\\"92\\\",\\\"93\\\",\\\"94\\\",\\\"95\\\",\\\"96\\\",\\\"97\\\",\\\"98\\\",\\\"99\\\",\\\"100\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"2580909790707749940\\\",\\\"id\\\":\\\"ob_10\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"2580909790707749940\\\",\\\"id\\\":\\\"ob_09\\\",\\\"type\\\":\\\"observable\\\"})};\\n var self = this;\\n function AppViewModel() {\\n for (var key in json_data) {\\n var el = json_data[key];\\n this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n }\\n \\n [this[\\\"formatted_val\\\"]=ko.computed( function(){\\n return this.formatted_vals()[parseInt(this.index())-(1)];\\n }\\n,this)]\\n [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"2580909790707749940\\\",\\\"id\\\":\\\"ob_10\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"2580909790707749940\\\",\\\"id\\\":\\\"ob_09\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n \\n }\\n self.model = new AppViewModel();\\n self.valueFromJulia = {};\\n for (var key in json_data) {\\n self.valueFromJulia[key] = false;\\n }\\n ko.applyBindings(self.model, self.dom);\\n}\\n);\\n (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/800fa077652c804a9c5f68b6c1e29c6c61f85df7-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/81e3f253b58efa296c3c65b00e2bf7b25de6cca9-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\")])], Dict{Symbol,Any}(:className => \"field interact-widget\")), Observable{Any} with 0 listeners. Value:\n", "Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Plot{Plots.GRBackend() n=1}], Dict{Symbol,Any}(:className => \"interact-flex-row interact-widget\"))], Dict{Symbol,Any}())" ] }, "execution_count": 52, "metadata": { "application/vnd.webio.node+json": { "kernelId": "892ce113-1b6c-4df8-899f-be085cea6efe" } }, "output_type": "execute_result" } ], "source": [ "using Interact\n", "\n", "num_points = 100\n", "r = rand(num_points)\n", "\n", "@manipulate for n in 1:num_points\n", " scatter(r[1:n], 0.5 .* one.(r[1:n]), ylim=(0, 1), xlim=(0, 1))\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Event with probability $p$" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "false" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = 0.25\n", "r = rand()\n", "\n", "if r < p\n", " true\n", "else\n", " false\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"Bernoulli trial\"" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "bernoulli (generic function with 1 method)" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function bernoulli(p)\n", "\n", " r = rand()\n", "\n", " if r < p\n", " return true\n", " else\n", " return false\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "false" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r < p ? true : false # ternary operator" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "false" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r < p" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "bernoulli (generic function with 1 method)" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function bernoulli(p)\n", "\n", " r = rand()\n", "\n", " return r < p\n", "end" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [], "source": [ "p = 0.25\n", "trials = [bernoulli(p) for i in 1:100];\n" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0\n", "\n", "\n", "25\n", "\n", "\n", "50\n", "\n", "\n", "75\n", "\n", "\n", "100\n", "\n", "\n", "0.00\n", "\n", "\n", "0.25\n", "\n", "\n", "0.50\n", "\n", "\n", "0.75\n", "\n", "\n", "1.00\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "y1\n", "\n", "\n" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scatter(trials)" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "25" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "count(trials)" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "29" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trials = [bernoulli(p) for i in 1:100];\n", "count(trials)" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "30" ] }, "execution_count": 99, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trials = [bernoulli(p) for i in 1:100];\n", "count(trials)" ] }, { "cell_type": "code", "execution_count": 106, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "bernoulli_experiment (generic function with 2 methods)" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function bernoulli_experiment(p, N=100)\n", " trials = [bernoulli(p) for i in 1:N];\n", " return count(trials)\n", "end" ] }, { "cell_type": "code", "execution_count": 103, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "100" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "count(trials .== false) + count(trials)" ] }, { "cell_type": "code", "execution_count": 104, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "70" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "count(.!(trials)) # ! is not" ] }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "29" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bernoulli_experiment(0.25)" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "33" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bernoulli_experiment(0.25)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A function which has different **outcomes** in different runs is called a **random variable**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Monte Carlo simulation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run the same random process a lot of times and look at the results" ] }, { "cell_type": "code", "execution_count": 113, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "100-element Array{Int64,1}:\n", " 3\n", " 5\n", " 7\n", " 6\n", " 4\n", " 3\n", " 4\n", " 4\n", " 6\n", " 5\n", " 7\n", " 1\n", " 3\n", " ⋮\n", " 7\n", " 7\n", " 8\n", " 5\n", " 5\n", " 4\n", " 2\n", " 5\n", " 6\n", " 4\n", " 4\n", " 4" ] }, "execution_count": 113, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = 0.25\n", "N = 20 # num of trials\n", "num_expts = 100 \n", "\n", "results = [bernoulli_experiment(p, N) for i in 1:num_expts]" ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0\n", "\n", "\n", "250\n", "\n", "\n", "500\n", "\n", "\n", "750\n", "\n", "\n", "1000\n", "\n", "\n", "0.0\n", "\n", "\n", "2.5\n", "\n", "\n", "5.0\n", "\n", "\n", "7.5\n", "\n", "\n", "10.0\n", "\n", "\n", "12.5\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "y1\n", "\n", "\n" ] }, "execution_count": 115, "metadata": {}, "output_type": "execute_result" } ], "source": [ "num_expts = 1000\n", "results = [bernoulli_experiment(p, N) for i in 1:num_expts]\n", "scatter(results)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$X$ = number of heads\n", "\n", "**Probability distribution** of a random variable $X$\n", "\n", "$\\text{Prob}(X = x)$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Probability that $X = x$ = proportion of time that the result was $x$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Counting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Need to count how many of the trials come out as 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Need data structure where we store the counts:\n", "- `Dict` (dictionary)\n", "- `Vector`" ] }, { "cell_type": "code", "execution_count": 118, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1000-element Array{Int64,1}:\n", " 7\n", " 6\n", " 3\n", " 3\n", " 6\n", " 8\n", " 5\n", " 4\n", " 1\n", " 4\n", " 6\n", " 7\n", " 9\n", " ⋮\n", " 7\n", " 7\n", " 3\n", " 3\n", " 5\n", " 9\n", " 4\n", " 6\n", " 3\n", " 7\n", " 7\n", " 0" ] }, "execution_count": 118, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results" ] }, { "cell_type": "code", "execution_count": 119, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "14" ] }, "execution_count": 119, "metadata": {}, "output_type": "execute_result" } ], "source": [ "maximum(results) # not `max`: max(1, 2, 3)" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "minimum(results)" ] }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "15" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" } ], "source": [ "l = maximum(results) + 1 # +1 is to store 0" ] }, { "cell_type": "code", "execution_count": 123, "metadata": {}, "outputs": [], "source": [ "counts = zeros(l);" ] }, { "cell_type": "code", "execution_count": 124, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "score = 7\n", "score = 6\n", "score = 3\n", "score = 3\n", "score = 6\n", "score = 8\n", "score = 5\n", "score = 4\n", "score = 1\n", "score = 4\n" ] } ], "source": [ "for score in results[1:10] # for i in 1:length(results)\n", " @show score\n", "end" ] }, { "cell_type": "code", "execution_count": 125, "metadata": {}, "outputs": [], "source": [ "for score in results\n", " counts[score + 1] += 1 # increment by 1\n", "end" ] }, { "cell_type": "code", "execution_count": 126, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "15-element Array{Float64,1}:\n", " 4.0\n", " 15.0\n", " 81.0\n", " 150.0\n", " 172.0\n", " 210.0\n", " 164.0\n", " 112.0\n", " 53.0\n", " 26.0\n", " 9.0\n", " 1.0\n", " 2.0\n", " 0.0\n", " 1.0" ] }, "execution_count": 126, "metadata": {}, "output_type": "execute_result" } ], "source": [ "counts" ] }, { "cell_type": "code", "execution_count": 128, "metadata": {}, "outputs": [], "source": [ "counts = zeros(Int, maximum(results) + 1)\n", "\n", "for score in results\n", " counts[score + 1] += 1 # increment by 1\n", "end" ] }, { "cell_type": "code", "execution_count": 129, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "15-element Array{Int64,1}:\n", " 4\n", " 15\n", " 81\n", " 150\n", " 172\n", " 210\n", " 164\n", " 112\n", " 53\n", " 26\n", " 9\n", " 1\n", " 2\n", " 0\n", " 1" ] }, "execution_count": 129, "metadata": {}, "output_type": "execute_result" } ], "source": [ "counts" ] }, { "cell_type": "code", "execution_count": 136, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m registry at `~/.julia/registries/General`\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[?25l " ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m git-repo `https://github.com/JuliaRegistries/General.git`\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [> ] 0.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 0.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 0.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 0.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 0.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 0.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 0.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 0.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 0.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 1.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 1.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 1.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 1.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 1.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 1.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 1.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 1.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 1.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 2.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 2.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 2.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 2.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=> ] 2.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 2.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 2.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 2.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 2.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 3.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 3.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 3.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 3.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 3.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 3.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 3.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 3.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 3.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 4.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 4.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 4.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 4.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 4.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 4.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 4.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 4.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 4.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==> ] 5.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 5.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 5.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 5.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 5.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 5.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 5.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 5.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 5.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 6.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 6.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 6.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 6.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 6.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 6.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 6.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 6.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 6.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 7.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 7.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 7.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 7.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===> ] 7.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 7.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 7.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 7.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 7.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 8.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 8.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 8.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 8.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 8.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 8.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 8.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 8.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 8.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 9.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 9.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 9.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 9.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 9.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 9.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 9.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 9.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 9.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [====> ] 10.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 10.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 10.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 10.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 10.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 10.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 10.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 10.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 10.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 10.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 11.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 11.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 11.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 11.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 11.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 11.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 11.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 11.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 11.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 12.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 12.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 12.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 12.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=====> ] 12.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 12.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 12.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 12.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 12.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 13.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 13.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 13.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] " ] }, { "name": "stdout", "output_type": "stream", "text": [ "13.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 13.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 13.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 13.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 13.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 13.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 14.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 14.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 14.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 14.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 14.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 14.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 14.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 14.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [======> ] 14.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 15.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 15.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 15.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 15.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 15.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 15.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 15.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 15.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 15.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 16.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 16.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 16.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 16.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 16.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 16.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 16.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 16.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 16.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 17.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 17.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 17.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 17.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======> ] 17.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 17.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 17.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 17.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 17.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 18.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 18.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 18.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 18.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 18.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 18.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 18.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 18.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 18.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 19.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 19.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 19.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 19.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 19.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 19.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 19.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 19.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [========> ] 19.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 20.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 20.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 20.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 20.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 20.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 20.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 20.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 20.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 20.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 21.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 21.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 21.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 21.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 21.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 21.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 21.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 21.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 21.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 22.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 22.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 22.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 22.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=========> ] 22.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 22.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 22.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 22.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 22.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 23.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 23.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 23.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 23.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 23.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 23.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 23.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 23.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 23.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 24.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 24.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 24.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 24.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 24.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 24.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 24.7 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 24.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 24.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [==========> ] 25.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 25.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 25.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 25.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 25.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 25.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 25.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 25.8 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 25.9 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 26.0 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 26.1 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 26.2 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 26.3 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 26.4 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 26.5 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========> ] 26.6 %\r", " \u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [===========" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[2K\u001b[?25h[1mFetching:\u001b[22m\u001b[39m [========================================>] 99.9 %> ] 48.1 % [=========================> ] 61.5 % %> ] 80.9 %======================================> ] 94.3 %\u001b[36m\u001b[1mFetching:\u001b[22m\u001b[39m [=======================================> ] 96.7 %" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n", "\u001b[32m\u001b[1m Installed\u001b[22m\u001b[39m OpenBLAS_jll ─ v0.3.9+1\n", "\u001b[32m\u001b[1m Installed\u001b[22m\u001b[39m libass_jll ─── v0.14.0+1\n", "\u001b[32m\u001b[1m Installed\u001b[22m\u001b[39m XSLT_jll ───── v1.1.33+1\n", "\u001b[32m\u001b[1m Installed\u001b[22m\u001b[39m Arpack_jll ─── v3.5.0+3\n", "######################################################################### 100.0%##O=# # \n", "######################################################################### 100.0%##O=# # \n", "######################################################################### 100.0%##O=# # \n", "######################################################################### 100.0%##O=# # \n", "\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m `~/.julia/environments/v1.4/Project.toml`\n", " \u001b[90m [b964fa9f]\u001b[39m\u001b[92m + LaTeXStrings v1.1.0\u001b[39m\n", "\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m `~/.julia/environments/v1.4/Manifest.toml`\n", " \u001b[90m [68821587]\u001b[39m\u001b[93m ↑ Arpack_jll v3.5.0+2 ⇒ v3.5.0+3\u001b[39m\n", " \u001b[90m [4536629a]\u001b[39m\u001b[93m ↑ OpenBLAS_jll v0.3.9+0 ⇒ v0.3.9+1\u001b[39m\n", " \u001b[90m [aed1982a]\u001b[39m\u001b[93m ↑ XSLT_jll v1.1.33+0 ⇒ v1.1.33+1\u001b[39m\n", " \u001b[90m [0ac62f75]\u001b[39m\u001b[93m ↑ libass_jll v0.14.0+0 ⇒ v0.14.0+1\u001b[39m\n" ] } ], "source": [ "]add LaTeXStrings" ] }, { "cell_type": "code", "execution_count": 141, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0.0\n", "\n", "\n", "2.5\n", "\n", "\n", "5.0\n", "\n", "\n", "7.5\n", "\n", "\n", "10.0\n", "\n", "\n", "12.5\n", "\n", "\n", "0\n", "\n", "\n", "50\n", "\n", "\n", "100\n", "\n", "\n", "150\n", "\n", "\n", "200\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "y1\n", "\n", "\n" ] }, "execution_count": 141, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using LaTeXStrings\n", "\n", "plot(0:maximum(results), counts, m=:o)\n", "ylabel!(L\"frequency of having $n$ heads\")\n", "xlabel!(L\"n\")" ] }, { "cell_type": "code", "execution_count": 142, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "count_them (generic function with 1 method)" ] }, "execution_count": 142, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function count_them(results)\n", "\n", " counts = zeros(Int, maximum(results) + 1)\n", "\n", " for score in results\n", " counts[score + 1] += 1 # increment by 1\n", " end\n", " \n", " return counts\n", "end" ] }, { "cell_type": "code", "execution_count": 143, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "run_experiments (generic function with 2 methods)" ] }, "execution_count": 143, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function run_experiments(p, N, num_expts=1000)\n", " results = [bernoulli_experiment(p, N) for i in 1:num_expts]\n", "end" ] }, { "cell_type": "code", "execution_count": 146, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0.0\n", "\n", "\n", "2.5\n", "\n", "\n", "5.0\n", "\n", "\n", "7.5\n", "\n", "\n", "10.0\n", "\n", "\n", "0\n", "\n", "\n", "500\n", "\n", "\n", "1000\n", "\n", "\n", "1500\n", "\n", "\n", "2000\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "y1\n", "\n", "\n" ] }, "execution_count": 146, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = count_them(run_experiments(0.25, 20, 10000))\n", "plot(0:length(data)-1, data, m=:o)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Probability distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Probability = relative frequency\n", "\n", "Divide by the number of experiments:" ] }, { "cell_type": "code", "execution_count": 149, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0\n", "\n", "\n", "5\n", "\n", "\n", "10\n", "\n", "\n", "15\n", "\n", "\n", "0.00\n", "\n", "\n", "0.05\n", "\n", "\n", "0.10\n", "\n", "\n", "0.15\n", "\n", "\n", "0.20\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "y1\n", "\n", "\n" ] }, "execution_count": 149, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = count_them(run_experiments(0.25, 20, 10^5))\n", "\n", "plot(0:length(data)-1, data ./ sum(data), m=:o)" ] }, { "cell_type": "code", "execution_count": 150, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.022058 seconds (100.00 k allocations: 11.444 MiB)\n" ] }, { "data": { "text/plain": [ "17-element Array{Int64,1}:\n", " 301\n", " 2144\n", " 6744\n", " 13534\n", " 18964\n", " 20304\n", " 16759\n", " 11255\n", " 5977\n", " 2614\n", " 1013\n", " 294\n", " 80\n", " 13\n", " 3\n", " 0\n", " 1" ] }, "execution_count": 150, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@time data = count_them(run_experiments(0.25, 20, 10^5))\n" ] }, { "cell_type": "code", "execution_count": 151, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.243592 seconds (1.00 M allocations: 114.441 MiB, 7.54% gc time)\n" ] }, { "data": { "text/plain": [ "16-element Array{Int64,1}:\n", " 3149\n", " 21130\n", " 67020\n", " 134452\n", " 189680\n", " 201840\n", " 168248\n", " 112460\n", " 60809\n", " 27260\n", " 10008\n", " 3027\n", " 720\n", " 170\n", " 26\n", " 1" ] }, "execution_count": 151, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@time data = count_them(run_experiments(0.25, 20, 10^6))" ] }, { "cell_type": "code", "execution_count": 152, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2.596961 seconds (10.00 M allocations: 1.118 GiB, 14.38% gc time)\n" ] }, { "data": { "text/plain": [ "17-element Array{Int64,1}:\n", " 31698\n", " 211771\n", " 669302\n", " 1339528\n", " 1896565\n", " 2022336\n", " 1686423\n", " 1124561\n", " 608698\n", " 271036\n", " 98697\n", " 30129\n", " 7440\n", " 1530\n", " 253\n", " 31\n", " 2" ] }, "execution_count": 152, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@time data = count_them(run_experiments(0.25, 20, 10^7))" ] }, { "cell_type": "code", "execution_count": 153, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "15-element Array{Float64,1}:\n", " 0.00329\n", " 0.02179\n", " 0.06524\n", " 0.13388\n", " 0.19079\n", " 0.20136\n", " 0.16894\n", " 0.11272\n", " 0.06134\n", " 0.0273\n", " 0.00957\n", " 0.00301\n", " 0.0006\n", " 0.00015\n", " 2.0e-5" ] }, "execution_count": 153, "metadata": {}, "output_type": "execute_result" } ], "source": [ "num_expts = 10^5\n", "data = count_them(run_experiments(0.25, 20, num_expts))\n", "\n", "probs = data ./ num_expts" ] }, { "cell_type": "code", "execution_count": 154, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9999999999999999" ] }, "execution_count": 154, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum(probs)" ] }, { "cell_type": "code", "execution_count": 155, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3//4" ] }, "execution_count": 155, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = 3 // 4" ] }, { "cell_type": "code", "execution_count": 156, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Rational{Int64}" ] }, "execution_count": 156, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typeof(x)" ] }, { "cell_type": "code", "execution_count": 157, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3//2" ] }, "execution_count": 157, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x + x" ] }, { "cell_type": "code", "execution_count": 158, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "15-element Array{Rational{Int64},1}:\n", " 329//100000\n", " 2179//100000\n", " 1631//25000\n", " 3347//25000\n", " 19079//100000\n", " 2517//12500\n", " 8447//50000\n", " 1409//12500\n", " 3067//50000\n", " 273//10000\n", " 957//100000\n", " 301//100000\n", " 3//5000\n", " 3//20000\n", " 1//50000" ] }, "execution_count": 158, "metadata": {}, "output_type": "execute_result" } ], "source": [ "probs = data .// num_expts" ] }, { "cell_type": "code", "execution_count": 159, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1//1" ] }, "execution_count": 159, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum(probs)" ] }, { "cell_type": "code", "execution_count": 160, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "15-element Array{Int64,1}:\n", " 329\n", " 2179\n", " 6524\n", " 13388\n", " 19079\n", " 20136\n", " 16894\n", " 11272\n", " 6134\n", " 2730\n", " 957\n", " 301\n", " 60\n", " 15\n", " 2" ] }, "execution_count": 160, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data" ] }, { "cell_type": "code", "execution_count": 161, "metadata": {}, "outputs": [ { "ename": "UndefVarError", "evalue": "UndefVarError: mean not defined", "output_type": "error", "traceback": [ "UndefVarError: mean not defined", "", "Stacktrace:", " [1] top-level scope at In[161]:1" ] } ], "source": [ "mean(data)" ] }, { "cell_type": "code", "execution_count": 162, "metadata": {}, "outputs": [], "source": [ "using Statistics" ] }, { "cell_type": "code", "execution_count": 167, "metadata": {}, "outputs": [], "source": [ "results = run_experiments(0.25, 20, 10^5);" ] }, { "cell_type": "code", "execution_count": 168, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5.00301" ] }, "execution_count": 168, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mean(results) # N=20 trials, p=0.25 " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Expected mean value = N * p" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "@webio": { "lastCommId": "46decd4d465b444885a7ef15cfda84a6", "lastKernelId": "892ce113-1b6c-4df8-899f-be085cea6efe" }, "kernelspec": { "display_name": "Julia 1.4.0", "language": "julia", "name": "julia-1.4" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.4.0" } }, "nbformat": 4, "nbformat_minor": 4 }