Graviness Blog

算数・数学・科学・電脳・雑記・アホの順の密度で記事が構成されます。
<< October 2020 | 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 >> ブログランキング・にほんブログ村へ
 
RECOMMEND
ビッグバン宇宙論 (上)
ビッグバン宇宙論 (上) (JUGEMレビュー »)
サイモン・シン, 青木 薫
RECENT COMMENT
  • パスワード自動生成 (Automated Password Generator)
    優乃 (07/29)
  • パスワード自動生成 (Automated Password Generator)
    Okono (07/29)
  • パスワード自動生成 (Automated Password Generator)
    優乃 (07/21)
  • 「物理定数」改め「自然定数」の続き
    式神自然数 (07/03)
  • パスワード自動生成 (Automated Password Generator)
    KK (07/02)
  • パスワード自動生成 (Automated Password Generator)
    優乃 (06/29)
  • パスワード自動生成 (Automated Password Generator)
    KK (06/29)
  • パスワード自動生成 (Automated Password Generator)
    KK (06/29)
  • パスワード自動生成 (Automated Password Generator)
    優乃 (06/22)
  • パスワード自動生成 (Automated Password Generator)
    Okono (06/22)
RECENT TRACKBACK
MOBILE
qrcode
PROFILE
無料ブログ作成サービス JUGEM
 
微分方程式 f'(x) = f(x+1) を解く話

表題の「微分方程式 」は超超基礎的な「微分方程式 」の一箇所だけを変えた方程式です。もちろん の解は、 です。表題の式もこのノリで解いてみましょう。 と表記すると表題の式は

と表記でき、ここで とおくと合成関数の微分より なので

んっ?!?!?!?!?!

「微分方程式 」の解と同じになってしまいました。もちろん、これは正しい式ではありません。実際代入してみると となり両辺は等しくありません。

※上記操作のどこが間違っているのかは依然として分かっていません。どなたか、どこが間違っているのか教えてください!

さて、 は簡単には解けないことが分かりました。表題の式は超超基本的な微分方程式をだけずらしていることがポイントですが、少しずらした値とそのときの傾きが等しいことを考えると、実はに変えた微分方程式の解について下式が成り立つことが分かります。

実際、左辺 = 、右辺 = となり両辺は等しく成り立ちます。これをヒントにx軸でスケーリングするなど、+1に関連する定周期の周期関数を考えればうまくいくかと思えば、、、これもうまくいきません。

私は「ただ+1だけずれているだけで、値とそのときの微分の値が等しい関数なので、ネイピア数を底とする指数関数が関連しているだろう」と推測し、 の形式で表題の式が成り立つを求めるアプローチとしました。

前置きが非常に長くなりました。以降で表題の式を一般化した次の微分方程式の解を導出します。

JUGEMテーマ:学問・学校

続きを読む >>
数学/算数 | 10:44 | comments(0) | - | - | - |
Webブラウザ互換性向上をサポートするpolyfill.io

https://polyfill.io/は、あるWebブラウザが未実装の規格関数の実装を提供する。

Web作成者側で、あるWebブラウザが未サポートの関数があるために互換性が損なわれるのであれば、例えば、Internet ExplorerはArray.fromメソッドが未サポートなので、この場合、次のようにHTMLに記述するだけで良い。

<script crossorigin="anonymous" src="https://polyfill.io/v3/polyfill.min.js?features=Array.from"></script>

polyfill.min.jsにArray.fromに実装が記述されているため、Internet Explorerであっても互換性が保たれる。

ここでは、Array.fromを未サポートのInternet Explorerのケースを示した。では、その他のサポート済ブラウザではpolyfill.min.jsはどうなるかというと、内容は空である。サポート済ブラウザを使うユーザに対して品質に影響はない。

Ref. Create a pollyfill bundle@https://polyfill.io/

JUGEMテーマ:インターネット

Web制作 | 23:48 | comments(0) | - | - | - |
cygwin+gitでWinMergeを使う

cygwin + gitで差分をWinMergeで確認できるようにするには.gitconfigファイルに次を追加する。

[diff]
	tool = windiff
[difftool "windiff"]
	cmd = ¥"C:/Program Files/WinMerge/WinMergeU.exe¥" -r -u -x -e -wl -wr -dl "Local" -dr "Remote" ¥"`cygpath -am ¥"$LOCAL¥"`¥" ¥"`cygpath -am ¥"$REMOTE¥"`¥"
[alias]
	wd = difftool --no-symlinks --no-prompt --dir-diff --tool=windiff

あとはcygwin上でgit wdと打つとWinMergeが起動し、変更前が左側ペイン、変更後が右側ペインに表示される。

JUGEMテーマ:コンピュータ

続きを読む >>
数式でみるドル・コスト平均法

ドル・コスト平均法は投資手法の一つです。毎月一定額の株(株券)を購入するため、単に定額購入法とも言います。

iDeCoつみたてNISAの運用においても定番の手法ですので、用語を知らないだけで実践はしているといった方も多いと思います。

本記事では、ドル・コスト平均法における総投資額や損益を数式で示し、その数式から分かる意味を示します。

JUGEMテーマ:経済全般

続きを読む >>
数学/算数 | 16:23 | comments(0) | - | - | - |
a_(n+2)=f(n) a_(n+1)+g(n) a_(n) の一般項

初項をとし、およびを既知の値とする漸化式 の一般項を導出?します。

導出する一般項の表示は連分数の積を含んでおり、全く実用的でないことを最初に断っておきます。結論の式は本記事の中段あたりの枠内に示します。後段には、念の為の証明を示します。

一般項の導出前に実際の展開式がどうなるか見ておきます。

上式をじ〜っと見てたら規則性が。。。ありません。多分。。。いや、ないのでしょう。。。さて、導出を始めます。

続きを読む >>
確率密度関数f(x)=2xに従う確率変数の和と平均の確率密度関数の導出
興味のある分野等で統計学を活用してみると分かりますが、バシッと合うパターンが記載されていることは稀で、すぐに応用するための知識が必要になります。大学講義でも使用されるような書籍は濃過ぎだし、実用的か?というと非効率です。「プログラミングのための確率統計」は応用し始めた人には丁度良いです。“プログラミングのための”となっていますが、プログラムは登場しません。“プログラミングのための”が同著の実用性の高さと知るべきに応える密度の濃さに一役買っています。また、感覚的にでも数式レベルで分からないと気持ちが悪いという人も必見です。本記事でも活用させて頂きました。

本記事では「中心極限定理の具体例 | 高校物理の備忘録」にある“具体例1”:が従う相対度数分布グラフの厳密な曲線、即ちが従う確率密度関数を導出します。確率変数の変数変換合成積(畳み込み)などを使用します。

JUGEMテーマ:学問・学校

続きを読む >>
母比率の推定に必要なサンプルサイズの関係式を導出する

統計学で成り立つ関係式や論法は、深く理解せずに引用すると間違った使い方をすることがままあります。

視聴率や当たり外れの確率などを調査するための適切なサンプルサイズを知りたくて調べ始めたのですが、なぜそういう関係式が成り立つのか私には説明がしっくりきませんでした。

本記事では、母比率の推定に必要なサンプルサイズの関係式を、私なりの導出方法を示します。具体的には、二項分布から始めずに一般的な分布から始めて導出します。「中心極限定理、平均値の区間推定」の知識を必要とします。

JUGEMテーマ:学問・学校

続きを読む >>
点の重なりを考慮した最適な点のサイズの導出

データを散布図等で表示するとき、データ数が多くて画面が点で塗り潰れてしまう経験はないでしょうか。

下図は10000個のデータを散布図で表示した例です。下図(左)は中央の帯の部分が点で塗り潰れています。描画領域を大きくするか、下図(右)のように点のサイズを小さく調節することで塗り潰れがなくなり、精確なデータ分析、そして美しく表示できます。

しかし、固定的なデータ数を扱う場合は問題となりませんが、データ数が変わるようなシチュエーションの場合はその都度調節する必要があり面倒です。

本記事では、データ数に応じて最適な点のサイズを自動計算する式とその導出を示します。結論を示すと、x個の点を描画するときの個々の点のサイズs(x)は次式で得られます。

s(x) = S1 * S / (S1 * x + S)

S1: 点を1個描画するときの(x=1のときの)、1個の点による描画面積。
S: 総描画面積の上限。e.g. 画面の半分程度が埋まるのであればその面積。

例えば、S1=36px、S=3600pxの場合、s(x) = 3600 / (x + 100) となります。100点描画するとき個々の点のサイズはs(100)=18pxで描画され、同様にして1000点描画するときs(1000)=3.3px、10000点描画するときs(10000)=0.4pxとなります。

Pythonプログラムの例を示します。データ数len(data)に応じて点の描画サイズsを自動計算しています。

import numpy as np
import matplotlib
import matplotlib.pyplot as plt

data = np.random.normal(size=1000) # normal dist.

S_1, S_m = 36, 3600
s = S_1 * S_m / (S_1 * len(data) + S_m) # see

plt.title(f"count={len(data)}")
plt.ylim((-4.0, 4.0))
plt.scatter(x=np.arange(len(data)), y=data, s=s)
plt.savefig(f"sample.{len(data)}.png")
plt.close()

以降で結論に至るまでの導出を示します。

JUGEMテーマ:コンピュータ

続きを読む >>
Smirnov-Grubbs検定を用いる外れ値除去のPython実装

スミルノフ−グラブス検定を用いる外れ値除去のPython(NumPy/SciPy使用)の実装です。

 

下記smirnov_grubbs関数にサンプルデータと有意水準α(両側100α%)を入力すると、外れ値を除去したサンプルデータと、抽出した外れ値データを出力します。

 

サンプルデータのうち平均値からの偏差が最も大きいデータを、有意水準(両側)でスミルノフ−グラブス検定し、帰無仮説を棄却した場合に当該データを外れ値とします。当該データを除いたサンプルデータに対し、外れ値がなくなるまでこの操作を繰り返します。

 

ref. スミルノフ−グラブス検定@wikipedia

 

# coding: utf-8
#
# smirnov_grubbs(data, alpha)
#   Generate outlier-removed data with Smirnov-Grubbs.
#
#   Parameters:
#     data: array_like
#       Numeric data values.
#     alpha: float
#       Significance level. (two-sided)
#
#   Returns:
#     outlier-removed-data
#     outlier-data
#
#   e.g.
#     data = [1, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 1000]
#     alpha = 0.01
#     smirnov_grubbs(data, alpha)
#     ==> ([100, 101, 102, 103, 104, 105, 106, 107, 108, 109], [1000, 1])

import numpy as np
import scipy.stats as stats

def smirnov_grubbs(data, alpha):
    x, o = list(data), []
    while True:
        n = len(x)
        t = stats.t.isf(q=(alpha / n) / 2, df=n - 2)
        tau = (n - 1) * t / np.sqrt(n * (n - 2) + n * t * t)
        i_min, i_max = np.argmin(x), np.argmax(x)
        myu, std = np.mean(x), np.std(x, ddof=1)
        i_far = i_max if np.abs(x[i_max] - myu) > np.abs(x[i_min] - myu) else i_min
        tau_far = np.abs((x[i_far] - myu) / std)
        if tau_far < tau: break
        o.append(x.pop(i_far))
    return (np.array(x), np.array(o))

 

JUGEMテーマ:コンピュータ

続きを読む >>
Brunner-Munzel検定のPython実装

Brunner-Munzel検定のPython(NumPy/SciPy使用)の実装です。

 

下記bmtest関数に2群のデータを入力すると、検定統計量W、p値(両側)、自由度、および帰無仮説で示される確率の推定値を出力します。

片側検定にする場合(どちらにずれているかが重要な場合)、出力されたp値を0.5倍して、Wの値が正負で判断します。

注意: 少しもかぶりもしない2群を入力すると、分散が0となって、検定統計量Wや自由度の計算中に Runtimewarning; divide by zero が出ます。

 

ref. Brunner-Munzel検定@奥村 晴彦さん

 

# coding: utf-8
#
# bmtest(x1, x2)
#   Calculate Brunner-Munzel-test scores.
#
#   Parameters:
#     x1, x2: array_like
#       Numeric data values from sample 1, 2.
#
#   Returns:
#     w:
#       Calculated test statistic.
#     p_value:
#       Two-tailed p-value of test.
#     dof:
#       Degree of freedom.
#     p:
#       "P(x1 < x2) + 0.5 P(x1 = x2)" estimates.
#
#   References:
#     * https://oku.edu.mie-u.ac.jp/~okumura/stat/brunner-munzel.html

import numpy as np
import scipy.stats as stats

def bmtest(x1, x2):
    n1, n2 = len(x1), len(x2)
    R = stats.rankdata(list(x1) + list(x2))
    R1, R2 = R[:n1], R[n1:]
    r1_mean, r2_mean = np.mean(R1), np.mean(R2)
    Ri1, Ri2 = stats.rankdata(x1), stats.rankdata(x2)
    var1 = np.var([r - ri for r, ri in zip(R1, Ri1)], ddof=1)
    var2 = np.var([r - ri for r, ri in zip(R2, Ri2)], ddof=1)
    w = ((n1 * n2) * (r2_mean - r1_mean)) / ((n1 + n2) * np.sqrt(n1 * var1 + n2 * var2))
    dof = (n1 * var1 + n2 * var2) ** 2 / ((n1 * var1) ** 2 / (n1 - 1) + (n2 * var2) ** 2 / (n2 - 1))
    c = stats.t.cdf(abs(w), dof) if not np.isinf(w) else 0.0
    p_value = min(c, 1.0 - c) * 2.0
    p = (r2_mean - r1_mean) / (n1 + n2) + 0.5
    return (w, p_value, dof, p)

 

JUGEMテーマ:コンピュータ

続きを読む >>

(C) 2020 ブログ JUGEM Some Rights Reserved.