edo1z blog

プログラミングなどに関するブログです

数学

C++ 拡張ユークリッドの互除法

ユークリッドの互除法は2つの自然数の最大公約数を求める際に利用します。 a % b == r の場合、a, bの最大公約数は、b, rの最大公約数と等しいです。 b % r == r2、r % r2 == r3と繰り返すことで、最終的に余りが0になったときの割ってる方の数が最大公約数…

C++ 累乗の速いやつ

blog.logicky.com 上記でPythonでやっていますが、C++でもやってみます。どうも速いやつは「繰り返し二乗(自乗)法」という名前らしい。 #define _GLIBCXX_DEBUG #include <bits/stdc++.h> using namespace std; using LL = long long; // xのn乗 LL powpow(LL x, LL n) { </bits/stdc++.h>…

Python3 - 対数

Pythonで対数を出すには、math.logを使います。import mathで使えるようになります。 import math print(math.log(2, 10)) 0.30102999566398114 これは、10を何乗したら2になるか?です。log102です。 試しに、10を0.30102999566398114乗してみます。 print(…

Python3 - xのn乗のグラフ(matplotlibのsubplotとアニメーション)

GIFアニメーション matplotlibのアニメーション作成は2つ種類があって、ArtistAnimationとFuncAnimationとがある。 参考:matplotlib でアニメーションを作る ArtistAnimation は、あらかじめ全てのグラフを配列の形で用意しておき、それを1枚ずつ流すという…

Python3 - 素因数分解

素因数分解 正の整数 n を素因数分解するための最も単純な方法は、2 から順に √n までの素数で割っていく方法である(Trial division(英語版))。しかし、n が大きくなると、この方法では困難である。 結果 [3, 79, 519507173] 参考:Python Finding Prime…

Python3 - 素数

エラトステネスの篩 エラトステネスの篩 結果 [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197,…

ベルマン方程式

ベルマン方程式は、動的計画法(動的な最適化問題)の最適性の必要条件を表す方程式らしい。必要条件は、再帰を使って部分を解くことで全体が解ける状態にあることと、メモ化を使うことです。最適化問題とは、集合内のすべての数値を、ある関数にいれたとき…

Python3 - 動的計画法(フィボナッチ数列)

動的計画法は、分割統治法とメモ化を合わせた方法のことらしい。分割統治法は、問題を細分化して、細かい部分を順に解いていくことで全体を解明するようなことの総称らしい。 分割統治法は、コード的には下記のようになり、再帰することになる。 function co…

確率の記号

条件付き確率 P(B|A)≡PA(B) Aが与えられたときのBの確率 P(A,B)≡P(A∩B) AとBの同時確率

期待値

確率論において、期待値(expected value)は、確率変数の実現値を, 確率の重みで平均した値である。 サイコロの期待値 p = 1 / 6 ev = 1 * p + 2 * p + 3 * p + 4 * p + 5 * p + 6 * p print(ev) 3.5

greedyアルゴリズム(貪欲法)

greedyアルゴリズムは、全部をN回試して、報酬の平均が最も高いやつを選択するというアルゴリズムです。 当たりか外れがでる機械が4個あって、どれが一番当たり率が高いか分からないのでgreedyアルゴリズムでやってみる想定にします。機械はa~dまであってそ…

Python - 勾配法

勾配は、すべての変数に対する偏微分をベクトルにしたものです。勾配法は、勾配を使って関数が最小になるパラメタを探す方法のことです。偏微分はある点における、各パラメタに対する微分ですので、傾きです。傾きが分かるとパラメタをどう動かすとマイナス…

python - 損失関数

ディープラーニングで使う損失関数の、二乗和誤差と交差エントロピー誤差。 二乗和誤差 二乗和誤差は、差の二乗を全部足して2で割る。 def nijowagosa(y, t): return 0.5 * np.sum((y - t)**2) y = np.array([0.2, 0.03, 0.8]) t = np.array([0, 0, 1]) prin…

Python - 偏微分・勾配

偏微分 偏微分は、変数が2つ以上あるときに1つ以外を固定にして、固定じゃない1つに対して微分をすることだそうです。Pythonでやると簡単にできます。 下記の式で、x0が3、x1が4のときの偏微分 [mathjax] $$f(x_0, x_1)=x_02+x_12$$ コード import numpy as …

Python - Matplotlibで3次元グラフを書く

下記の式をグラフ化してみる。 [mathjax] $$f(x_0, x_1)=x_02+x_12$$ コード import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D def func(x0, x1): return x0**2 + x1**2 x0 = np.arange(-3, 3, 0.25) x1 = np.a…

Python - 数値微分

微分はある瞬間の変化量です。公式は下記です。超絶的に0に近い、というかもはや0という謎の極小値でもって計算することで瞬間変化量を出します。解析的にやるといろんな公式が編み出されているので真の微分が出せますが、コンピュータで公式通りにやろう…

ソフトマックス関数

合計が1になるように、うまく数字を調整してくれる関数らしい。確率を確認するのに便利。 [mathjax] $$y_k = \frac{\exp(a_k)}{\displaystyle \sum_{i=1}^n \exp(a_i)}$$ aがn個あるときの、k番目のyを取得する。分母は全てのaの指数関数の和。分子はk番目…

Python - 行列の掛け算

Numpyを使います。np.dot(A, B)で簡単にできます。 例えば、A([1, 2, 3], [4, 5, 6])と、B([7], [8], [9])を掛けます。 import numpy as np A = np.array([[1, 2, 3], [4, 5, 6]]) B = np.array([[7], [8], [9]]) print(np.dot(A, B)) 下記が出力されます。 …

シグモイド関数

ディープラーニングでシグモイド関数というのを使いまっす。シグモイド関数は、何か入力されたら0~1の数値を返します。入力された数値が0未満だったら0を返して、そうでなければ1を返すような関数をステップ関数といいまして、これよりも緩やかに0~…

協調フィルタリング(ピアソン相関)

from operator import itemgetter from math import sqrt data = { 'A': {'あ': 10, 'い': 5, 'う': 3, 'え': 4, 'お': 9, 'か': 6}, 'B': {'あ': 3, 'い': 3, 'う': 3, 'え': 4, 'お': 3, 'か': 4}, 'C': {'あ': 2, 'い': 10, 'う': 4, 'え': 2, 'お': 4}, …

標準偏差・相関係数

[mathjax] 算術平均 合計を個数で割るやつ $$\bar{x} = \frac{\displaystyle \sum_{i=1}^n x_i}{n}$$ 偏差 データの値から算術平均を引いたやつ $$x_i - \bar{x}$$ 分散 偏差の2乗の合計をデータ数で割ったもの $$s2 = \frac{\displaystyle \sum_{i=1}^n (x_…

計算式をブラウザに表示する

参考:数式をブラウザーだけで書く簡単な方法 TeXというルールに基づいて作成して、URLエンコードして、googleのURLにくっつけると画像がでてくるらしい。 ピタゴラスの定理は、c2 = a2 + b2と書くっぽい。 URLエンコードをやってくれるサイトが、URL Decode…

コールセンターの必要席数試算(アーランCと稼働率の関係)

コールセンターの必要席数を試算するときに、アーランを使う場合と使わない場合があると思います。 アーランを使う場合と使わない場合とで必要席数が大きく異なる場合、アーランを使わない場合に利用されている稼働率という指標を適当に設定しているケースが…

JavaScriptでアーランCによりコールセンターの必要席数を計算する

アーランC式は下記になります。 アーランC式はこのページのように、別の計算方法もありまして、別の方法だと待ち時間をインプットするようですが、上記の式は待ち時間のインプット不要バージョンです。アーランC式がなぜこのような式になるのかは全然分かり…

ミクロ経済学

『この世で一番おもしろいミクロ経済学』を読んだ。超分かり易かった。ただ広く浅くで超概要しかわからない。 サンクコスト(sunk cost) サンクコストは埋没費用ともよばれ、すでに投資済みのコストのことをいいます。あるいはすでにやってしまったことをい…

HTML5 - Canvas 円同士の衝突アニメーション

See the Pen Collision animation between circles by edo1z (@edo1z) on CodePen.

線分と線分の交差判定

線分と線分の交差判定をしたい。線分abと線分cdの交差判定をすることにしよう。交差判定には直線の方程式を使う。直線は、y=ax+bといった形になる。この直線よりも上に線分の一方の点があり、もう一方の点がこの直線よりも下にあればそれは、この直線と線分…

点が長方形の内側にあるかチェックする

点が長方形の内側にあるか否かをチェックするには、外積を使えばよい。 ある長方形(10,10),(30,10),(30,30),(10,30)と、ある点(20,20)があるとしよう。このある点がある長方形の内側にあるのか外側にあるのかを判定したい。このような長方形であれば、外積を…

ベクトルの外積

ベクトルの外積は便利だ。ベクトルAとベクトルBの外積を求めたときに値がマイナスであれば、ベクトルBはベクトルAの右側にいるということが分かる。 試してみよう。 ベクトルA(6,6)、ベクトルB(6,0)としよう。 外積は下記の式になる。 Ax * By - Bx * Ay よ…

cosθの値をグラフにしてみる

0度〜360度のcosθの値をグラフに出してみよう。HTML canvasを使おう。 See the Pen cosθ by edo1z (@edo1z) on CodePen. 一番上が1を表している。真ん中が0で、一番下が-1である。一番左が0を表していて縦の目盛線は、45ずつに引いている つまり、0度はcos…