学習環境
- Surface 3 (4G LTE)、Surface 3 タイプ カバー、Surface ペン(端末)
- Windows 10 Pro (OS)
- Nebo(Windows アプリ)
- iPad Pro + Apple Pencil
- MyScript Nebo(iPad アプリ)
- 参考書籍
数学読本〈6〉線形写像・1次変換/数論へのプレリュード/集合論へのプレリュード/εとδ/落ち穂拾い など(松坂 和夫(著)、岩波書店)の第26章(エピローグ - 落ち穂拾い、など)、26.4(確率分布と平均)、確率変数の平均または期待値、問7.を取り組んでみる。
コード(Emacs)
Python 3
#!/usr/bin/env python3 from sympy import pprint, symbols, combinatorial, Rational import random print('7') nC = combinatorial.numbers.nC pprint(sum([n * 1000 * nC(3, n) * Rational(1, 2) ** n * Rational(1, 2) ** (3 - n) for n in range(4)])) n = 10 coin = [0, 1] for i in range(5): n = 10 ** i for _ in range(5): t = 0 for _ in range(n): c = [random.choice(coin) for _ in range(3)] l = len(list(filter(lambda x: x == 0, c))) t += {0: 0, 1: 1000, 2: 2000, 3: 3000}[l] print(f'試行回数 {n}回、{t / n}')
入出力結果(Terminal, Jupyter(IPython))
$ ./sample9.py 7 1500 試行回数 1回、2000.0 試行回数 1回、0.0 試行回数 1回、1000.0 試行回数 1回、2000.0 試行回数 1回、2000.0 試行回数 10回、1900.0 試行回数 10回、1400.0 試行回数 10回、1300.0 試行回数 10回、1100.0 試行回数 10回、1800.0 試行回数 100回、1560.0 試行回数 100回、1660.0 試行回数 100回、1580.0 試行回数 100回、1610.0 試行回数 100回、1610.0 試行回数 1000回、1487.0 試行回数 1000回、1529.0 試行回数 1000回、1545.0 試行回数 1000回、1511.0 試行回数 1000回、1507.0 試行回数 10000回、1487.1 試行回数 10000回、1508.6 試行回数 10000回、1479.8 試行回数 10000回、1496.1 試行回数 10000回、1512.3 $
HTML5
<div id="graph0"></div> <pre id="output0"></pre> <label for="r0">r = </label> <input id="r0" type="number" min="0" value="1"> <label for="dx">dx = </label> <input id="dx" type="number" min="0" step="0.001" value="1"> <br> <label for="x1">x1 = </label> <input id="x1" type="number" value="1"> <label for="x2">x2 = </label> <input id="x2" type="number" value="1000"> <br> <label for="y1">y1 = </label> <input id="y1" type="number" value="0"> <label for="y2">y2 = </label> <input id="y2" type="number" value="3000"> <button id="draw0">draw</button> <button id="clear0">clear</button> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.2.6/d3.min.js" integrity="sha256-5idA201uSwHAROtCops7codXJ0vja+6wbBrZdQ6ETQc=" crossorigin="anonymous"></script> <script src="sample9.js"></script>
JavaScript
let div0 = document.querySelector('#graph0'), pre0 = document.querySelector('#output0'), width = 600, height = 600, padding = 50, btn0 = document.querySelector('#draw0'), btn1 = document.querySelector('#clear0'), input_r = document.querySelector('#r0'), input_dx = document.querySelector('#dx'), input_x1 = document.querySelector('#x1'), input_x2 = document.querySelector('#x2'), input_y1 = document.querySelector('#y1'), input_y2 = document.querySelector('#y2'), inputs = [input_r, input_dx, input_x1, input_x2, input_y1, input_y2], p = (x) => pre0.textContent += x + '\n'; let f = (x) => { let t = 0; for (let i = 0; i < x; i += 1) { let a = []; for (let i = 0; i < 3; i += 1) { a.push(Math.random() <= 0.5 ? 0 : 1); } t += [0, 1000, 2000, 3000][a.filter((n) => n === 0).length]; } return t / x; }; let draw = () => { pre0.textContent = ''; let r = parseFloat(input_r.value), dx = parseFloat(input_dx.value), x1 = parseFloat(input_x1.value), x2 = parseFloat(input_x2.value), y1 = parseFloat(input_y1.value), y2 = parseFloat(input_y2.value); if (r === 0 || dx === 0 || x1 > x2 || y1 > y2) { return; } let points = [], lines = [[x1, 1500, x2, 1500, 'red']], fns = [[f, 'green']]; fns .forEach((o) => { let [f, color] = o; for (let x = x1; x <= x2; x += dx) { let y = f(x); points.push([x, y, color]); } }); let xscale = d3.scaleLinear() .domain([x1, x2]) .range([padding, width - padding]); let yscale = d3.scaleLinear() .domain([y1, y2]) .range([height - padding, padding]); let xaxis = d3.axisBottom().scale(xscale); let yaxis = d3.axisLeft().scale(yscale); div0.innerHTML = ''; let svg = d3.select('#graph0') .append('svg') .attr('width', width) .attr('height', height); svg.selectAll('line') .data([[x1, 0, x2, 0], [0, y1, 0, y2]].concat(lines)) .enter() .append('line') .attr('x1', (d) => xscale(d[0])) .attr('y1', (d) => yscale(d[1])) .attr('x2', (d) => xscale(d[2])) .attr('y2', (d) => yscale(d[3])) .attr('stroke', (d) => d[4] || 'black'); svg.selectAll('circle') .data(points) .enter() .append('circle') .attr('cx', (d) => xscale(d[0])) .attr('cy', (d) => yscale(d[1])) .attr('r', r) .attr('fill', (d) => d[2] || 'green'); svg.append('g') .attr('transform', `translate(0, ${height - padding})`) .call(xaxis); svg.append('g') .attr('transform', `translate(${padding}, 0)`) .call(yaxis); [fns].forEach((fs) => p(fs.join('\n'))); }; inputs.forEach((input) => input.onchange = draw); btn0.onclick = draw; btn1.onclick = () => pre0.textContent = ''; draw();
0 コメント:
コメントを投稿