岡竜之介のブログ

岡竜之介のブログです。

「完全数」って何が面白いの???→完全数みたいな概念を量産する

完全数とは

完全数とは「約数のうち自身を除いたものの和が自身に等しい」ような数のことです。

例えば6は、約数が1,2,3,6なので、このうち6以外を足すと1+2+3=6で、6自身に等しくなります。

だから6は完全数です。

完全数はなかなかに珍しく、1から100万までの中に

6, 28, 496, 8128

の4つしかありませんし、現在までに51個しか見つかっていません。


「偶数の完全数は無数に存在するか?」「奇数の完全数は存在するか?」という問題は未解決で、しばしば話題に上がります。


……それはいいんですが……。。。。。。

完全数」って何が面白いの???


完全数」って何が面白いの???

「自身以外の約数の和が自身に等しい」という性質ってなんか、すごく人工感があるというか…それに注目する意味がわからないというか…


「自身を除く約数の和」の「自身を除く」っていうのも、ご都合主義感あるし…


「珍しい」は注目する理由として一理あるけど、「珍しい性質」なんて無限に作れそうというか…


…のようなツイートをした所…。


偶数の完全数メルセンヌ素数と一対一対応するそうです。

奇数の完全数は未発見なので、これが「ない」ということになれば、完全数メルセンヌ素数は一対一対応します。

メルセンヌ素数は便利な素数判定法があって、コンピューターサイエンス上も重要な応用があったりして有意義ですよね。

となればそれと一対一に対応する(と思われる)完全数も有意義と言えそうです。


…タイトルの疑問、解決してんじゃねぇか!!


…ということですいません。煽りタイトル付けました。


本題はここからです。




「自身以外の約数の和が自身に等しい」みたいな『珍しい性質』を無限に作れるかどうか考えるのは楽しそう😀!


こういう「珍しい性質」を大量に作れるのであれば、完全数」なんてone of themであり、大して重要な性質ではない!(メルセンヌ素数と一対一に対応する?ちょっと忘れましたね……)

完全数の定義を言い換えて一般化する


「約数のうち自身を除いたものの和が自身に等しい」


「約数の和が、自分自身の2倍に等しい」と言い換えられます。


となると、


「約数の和が、自分自身のn倍に等しい」と一般化できそうですね????


実は既にそういうものは考えられておりまして


「倍積完全数」というようです。


ja.wikipedia.org



通常の「完全数」は「2倍完全数」のことですね。


それらの性質をWikpediaから引用すると…

k倍完全数が無数に存在するかどうかは分かっていないが、3倍完全数は6個、4倍完全数は36個、5倍完全数は65個、6倍完全数は245個がそれぞれ発見されており、これより多くは存在しないと言われている。


例えば3倍完全数は100万までの範囲には3つあり、現在までに全部で120, 672, 523776, 459818240, 1476304896, 51001180160の6個が発見されていますが、この6個しかないかどうかはまだわかっていないようです。


なんだ、「完全数」なんて「2倍完全数」とか「3倍完全数」とか「300倍完全数」とかいくらでも考えられる中の、単に「2」の場合に過ぎないじゃないか!

倍積完全数の定義を言い換えて一般化する

さらに広げてみましょう。

倍積完全数の定義

「約数の和が、自分自身のn倍に等しい」

は、

「約数の和と自分自身が n:1 の比になる」

と言い換えることができます。

ということは

「約数の和と自分自身が a:b の比になる(a,bは互いに素な正の整数) 」


と一般化できそうですね?


通常の完全数は(a,b) = (2,1) の場合です。100万までに4つあります。

3倍完全数は(a,b) = (3,1) の場合です。100万までに3つあります。


ここまでを踏まえて、こんな問題を考えることができそうです。

今回考える問題

1から100万までの数を「a:b = 約数の和 : その数自身」という比によってグループ分けする。
もっと多くのグループメンバーを持つ比(a:b)は何か。


これが、完全数の 2:1 が一番多くて、あとはみんなグループメンバーがそれより少なくなるようにバラバラになるなら、完全数は確かに注目に値すると言えそうです。

でも、そこそこメンバーを獲得するグループが多数出てくるようなら、完全数なんてそれらのグループの一つに過ぎないわけですね??


ということで。

調べてみました。1から100万までの数を「約数の和 : その数自身」という比によってグループ分けしてみました。

そのTOP10を発表したいと思います!

グループメンバーの多かった「比」ランキング!TOP10!

同率一位

(8 : 3), [84, 270, 1488, 1638, 24384]
(12 : 5), [30, 140, 2480, 6200, 40640]
(16 : 5), [420, 7440, 8190, 18600, 121920]
(32 : 11), [924, 2970, 16368, 18018, 268224]
(48 : 17), [1428, 4590, 25296, 27846, 414528]
(48 : 19), [570, 2660, 47120, 117800, 772160]
(52 : 15), [1260, 22320, 27000, 55800, 365760]
(56 : 15), [16380, 290160, 351000, 669600, 725400]
(64 : 23), [1932, 6210, 34224, 37674, 560832]
(80 : 29), [2436, 7830, 43152, 47502, 707136]
(112 : 41), [3444, 11070, 61008, 67158, 999744]
(144 : 55), [330, 1540, 27280, 68200, 447040]
(160 : 57), [1596, 5130, 28272, 31122, 463296]
(168 : 65), [390, 1820, 32240, 80600, 528320]
(216 : 85), [510, 2380, 42160, 105400, 690880]
(288 : 115), [690, 3220, 57040, 142600, 934720]
(304 : 111), [3108, 9990, 55056, 60606, 902208]

以上17グループ、グループメンバー数5で同率一位!


いや同率一位多いな!

しかも完全数の(2:1)は1位じゃないのかよ!


ということで。同率一位だけでTOP10は超えました。


どうやら完全数の(2:1)というのは特別メンバーの多いグループというわけでもなさそうです。

もちろん、特別メンバーの少ないグループというわけでもない(このランキングの下位には、メンバーになる数字が1つしかないグループが並ぶ)


つまり完全数というのは、今回考えたグループ分けの a:b = 2:1 のグループに注目したに過ぎない!

なんだ!やっぱり全然大した性質じゃないじゃないか!


…いや、メルセンヌ素数と一対一に対応するのは十分注目に値する性質な感じがします。タイトルでふざけてすいませんでした。

感想


ところで、グループメンバー数が多くなる「比」に全然脈絡がないように見えるのですが、何か法則が隠れているんですかね??


(8 : 3)
(12 : 5)
(16 : 5)
(32 : 11)
(48 : 17)
(48 : 19)
(52 : 15)


100万までで切っているので、もっと大きな数までやると違う並びになる可能性も大いにあるので、現状のこの並びには意味がないのですが、

とはいえ、何か「約数の和 : その数自身」という比として現れやすい比があるのかな?と。

どうでしょう。

不定方程式を解こう!

ベズーアプリアイコン

不定方程式って何?

不定方程式の話します!想定読者数学レベルは中学レベルです。

突然ですが、こちらの方程式を考えてみましょう。


10x + 13y  = 161

この方程式は「不定方程式」と呼ばれるものの一種です。

普通、文字が2つ入った方程式は式も2つないと答えが決まりませんが

この問題は式が一つしかありませんので、答えが定まらないという意味で不定方程式と言います。


実際、この問題は答えが無限にあります。


\displaystyle
y = -\frac{10}{13}x+\frac{161}{13}

と変形できますので、xにどんな数を入れても、それに合わせたyが決まります。

答えを整数に限る

それではあまりにも何でもアリなので

答えを整数に限ることにします。

すると、たちまち手間のかかる問題に変貌します。

実はそれでも答えは無限にあるのですが、


10x + 13y  = 161

を満たす整数xとy、すぐに見つかりますか…?

一つ見つけるだけでも案外大変なんですね。

なのでこの記事では、答えを一つ見つけることを目標にします!

解けない場合もある



10x + 12y  = 161


例えばこちらの方程式。

さっきとちょっと変わっただけですが、これに当てはまる整数x,yは存在しません。

10x+12yとして作れる数はすべて偶数なので、161は作れないんですね。

xとyは負の数でもいいことに注意してください。それでも161は作れません。

このように、解けない問題もあるんです。

なのでこの記事では、解ける問題に限って話を進めることにします。

解き方


10x + 13y  = 161

ここで一つお聞きしたいのですが

この問題、実はもう解けたという方、案外いらっしゃるのでは…?

こんなふうに考えると良さそうです。

      • 考えここから

10xの1の位は0。

161の1の位は1なので、13yの1の位を1にするしかない。

y=7とすると、13×7 = 91で1の位を1にできる。

この時点で式は

10x + 91 = 161

なので、x=7となる。

だから、答えの一つはx=7, y=7

(ああなんだ、10+13=23を7倍すればよかったのか)

      • 考えここまで

ということで、xとyの係数のどちらかが10だと、1のくらいに注目すれば解けそうです。


あまりに注目する

でも、係数に10がいてくれなかったら、今の方法は使えませんね。


12x + 17y  = 18

これだったらどうでしょう?

xやyは負の数でもいいことに気をつけてください。

1の位に注目してもあまり意味がなさそうです。

実は、先程やった「1の位に注目する」というのは

「10で割ったあまりに注目する」というのと同じことです。

例えば163÷10のあまりは3で、1の位の「3」が取り出せますよね。

今回も同様に「あまり」に注目してみます。

12と17のうち小さい方「12」で割ったあまりに注目します。

18を12で割ったあまりは6です。

「12x」を12で割ったあまりは必ず0なので、このあまり6は「17y」の方で作るしかないです!

ここで、17についても12で割ったあまりを考えます。

17÷12 = 1 あまり 5

なので、17 = 12×1 + 5 と書けて、

17y = 12y + 5y となります。

このうち「12y」の部分は12で割ったあまりに影響を与えませんので、

この5yで「12で割ったあまりが6になる数」を作ればいいわけです!

yに自然数を1から順に代入しながら12で割ったあまりを確認していくと…

5×1 = 5 → 5

5×2 = 10 → 10

5×3 = 15 → 3

5×4 = 20 → 8

5×5 = 25 → 1

5 × 6 = 30 → 6 見つかった!

ということで、y=6とした時に、17yを12で割ったあまりが6になります。これでy=6を確定させて良いとわかります。


この時点でもとの式はこうなってます


12x + 17 \times 6  = 18

あとはxを求めましょう。

17×6と18は12で割ったあまり同じなので、その差は12の倍数になっています。

なのでxは整数になるはずです!


18 - 17×6 = 18 - 102 = -84 = -(12×7)

ということでx=7とわかり、求める答えの一つは


x = -7, y = 6

と見つかります!

アプリ作りました

と、いうことで、こんな感じの問題をガンガン解けるアプリを作りました。

スクリーンショット

「ベズー計算トレーニング」です!

この形の整数不定方程式を「ベズーの等式」と言いまして、そこから名前を取っています。

Android:
play.google.com


iOS:

Bézout's Calculation Training

Bézout's Calculation Training

  • Ryuta Okada
  • Education
  • Free
apps.apple.com

6問解くまでのタイムアタックです!

慣れるまで結構難しいと思いますが、この記事で解説した考え方を使えばそこそこ速くなるはず!

実況プレイ

ちなみに私がやると、うまくいくとこんな感じで2分切れます

www.youtube.com


速い人がやった場合、既に1分を切ったという報告も受けています。すご…

合同式がわかる人向けの解説


12x + 17y  = 18

について、mod 12の合同式を考えると


0x + 5  y  \equiv 6 \\
5  y  \equiv 6

となります。

あとはyに自然数を順に入れていって、5yが6と合同になるyを探します。

yが見つかれば、xは自動的に決まります。

もっと詳しく知りたい方は…

こちらの記事をご紹介します。詳しいし、わかりやすいです。

mathtrain.jp

通分して足したら約分が発生する「分数の足し算」を量産する

はじめに

こちらのブログ記事に触発されまして、僕も考えてみることにしました。

今の僕の生活スタイルにおいては、小学生の方に分数の足し算を教える機会がままありますので、気になったのです。

分数の足し算で「約分」が発生する条件 - tsujimotterのノートブック

分数の足し算で「約分」が発生する条件(2) - tsujimotterのノートブック

目標設定

この記事の目標は

「足し算した結果、約分が発生するような分数の足し算問題を量産する」

ということにします。

例えばこういうものですね。

\displaystyle{ \frac{1}{10} + \frac{7}{6} = \frac{3}{30} + \frac{35}{30} = \frac{38}{30} = \frac{19}{15}}

2つの既約分数を、分母を最小公倍数に揃えることで通分し、分子を足した結果、最後に約分が発生するようなものです。

必要条件を調べていく

まず、求める「問題」を

 \displaystyle{\frac{a}{b} + \frac{c}{d} }

とします。 a,b,c,dは全て正の整数で、abは互いに素、cdは互いに素とします。

以下、abが互いに素であることを a \perp bと表すことにします。

bdの最大公約数をgとして、

b = gB

 d = gD

とします。

必然的に B \perp D, \, \, a \perp B, \, \, c \perp D, \, \,  a \perp g, \,\,c \perp gです。

bdの最小公倍数はgBDとなります。

すると、先ほどの問題を通分して足し算した結果は次のようになります。


 \displaystyle{\frac{a}{b} + \frac{c}{d}   = \frac{a}{gB} + \frac{c}{gD} = \frac{aD+Bc}{gBD} }


ここで、  \displaystyle {\frac{aD+Bc}{gBD} }素数 pで約分できると仮定します。

まず、分母gBDについて、

もし Bがpで割り切れるなら、約分できるためには aDがpで割り切れなければなりませんが、 B \perp D, \, \, a \perp Bと矛盾します。よってBpで割り切れない。

Dについても同様にpで割り切れない。

よってgpの倍数です。

 a \perp bつまり a \perp gBより、apで割り切れない。

同様にcpで割り切れない。



次に、分子 aD+Bcについて、

約分できるということはこれがpの倍数なので、

 aD+Bc \equiv 0 \pmod{p}

手順

ということで、以上の議論から、次のようにすれば、条件を満たす問題が量産できそうです。



1.
素数pを決めて


2.
pの倍数でない a,D,B,c
 B \perp D, \, \, a \perp B, \, \, c \perp D
 aD+Bc \equiv 0 \pmod{p}を満たすように決めて


3.
pの倍数g a \perp g, \,\,c \perp gを満たすように決めて


4.
  \frac{a}{gB} + \frac{c}{gD} を出題する



はい。


ただ、難しそうなのが2.ですね。

pの倍数でない a,D,B,c
 B \perp D, \, \, a \perp B, \, \, c \perp Dを満たすように

ここまでなら大したことはないです。例えば、別々の素数を割り当てて4つ全部互いに素にすればいいです。実際の条件はもっと弱いですが。

 aD+Bc \equiv 0 \pmod{p}

これが問題ですね。

改良

ということで、ここからは、これを満たす a,D,B,cの決め方を見ていきます。



以下、合同式はすべて \pmod{p}とします。


 aD+Bc \equiv 0を変形して

 aD \equiv -Bc



 D \perp pなので、DD^{-1} \equiv 1を満たす D^{-1}が存在します。

それを両辺にかけて


 a \equiv -D^{-1}Bc


 D^{-1}の計算は、「拡張ユークリッド互除法」を使って計算することができます。できるようです。

モジュラ逆数 - Wikipedia


ということで、 D,B,cを決めれば、apで割った余りが決まります。



あとはそれに、 a \perp Bを満たすまでapずつ増やしていけば、欲しい組み合わせが見つかります。

手順(改)


ということで、改めて手順をまとめるとこうです。



1.
素数pを決めて


2_1.
pの倍数でない D,B,c
 B \perp D, \, \, c \perp Dを満たすように決めて


2_2.
 a \equiv -D^{-1}Bc \pmod{p} a \perp Bを満たすaを決めて


3.
pの倍数g a \perp g, \,\,c \perp gを満たすように決めて


4.
  \frac{a}{gB} + \frac{c}{gD} を出題する


ということになります。

感想考察など


単にいくつかの素数を選んだら一つの「問題」がポンと出るようにできるともっと嬉しいですが、できるのか…?


なお、この手順で「約分が発生する分数の足し算」が全て生成可能かどうか(十分条件かどうか)はちゃんと検証しておりません。

全て生成可能な気はしています。多分必要十分条件になっているはず…。

必要条件ではあるはずだ(条件に当てはまらないものは生成されない)。




また、これが必要十分条件になっているとして、先程の

分数の足し算で「約分」が発生する条件(2) - tsujimotterのノートブック

に書かれている必要十分条件とどんな関係にあるのかは、僕のp進数についての理解が浅いためよくわかりませんでした。

僕の用いたa,c,B,Dあたりと、リンク先の記事にあるk,lあたりになにか関係がありそう。


ソースコードに落とし込んで実際に量産してみる


せっかくなので、今回の手法を使って「通分して足したら約分が発生する分数の足し算」を量産してみました。

https://dartpad.dev/bf5a7225bf5995e69cfe500a1af6968b


僕が最近普段使っているDartという聞き慣れない言語を使ってしまいましたが、何をやっているかは見て取れると思います。

コメントもつけていますし、変数名はこの記事と揃えてあります。

リンク先は実行環境とセットなので、コードを書き換えて色々実験することも可能です。

ただし、記事内の手法で生成可能な全てのパターンは網羅していませんのでご注意ください。

B,D,c素数しか入れてないし、aは最初に見つかった奴しか使ってないし、g=pに限定してます。

ロリポップレンタルサーバーでDjango??

もはやテーマがとっちらかっていて何を書いたらいいんだかわからなくなっているこのブログですが

まあ、いいや。

なんか混乱したのでその内容と、その解決の過程を備忘録として書き留めておこうと思います。

経緯

Webアプリを作ろうと思って、PythonのWebフレームワークである所のDjangoチュートリアルをやったはいいものの、

契約してるレンタルサーバー「ロリポップ」(スタンダードプラン)でDjangoが動かせるのかという問題にぶつかったので、

そもそも動くのか、俺は一体何をわかっていないのか、その辺の解決を試みます。

Djangoについては、ローカルでチュートリアルを一通りやりました。

Djangoのバージョンは1.11。「いってんいちいち」ではなく「いってんじゅういち」と読むほうが誤解がないです。1.9よりも新しい。

結論

読者の時間が無駄にならないように結論を先取りして書いておきますと

結局いろいろ調べたり試行錯誤した結果、レンタルサーバーでDjangoを動かすのはやめてVPSを契約することにしました。

レンタルサーバーでもCGI経由で動かすことはできるみたいだけど、そこまでするメリットがよくわからなかった。




ここから先は、僕の思考の時系列順に書いてます。


僕の経験値

5年前の2012年、PHPのWebフレームワークである所のCakePHPを使ってWebアプリを作ったことがあります。

解決したい疑問

CakePHPは普通に動かせたのにDjangoで困ってるのは何が違うからなの
CGIって何
ロリポップに「Pythonが使える」と書いてあるけど、どういう意味で「使える」の
・結局ロリポップDjangoは動くの



じゃあ一個ずつやっていきましょう

CakePHPは普通に動かせたのにDjangoで困ってるのは何が違うからなの

ロリポップPHP動かすのってめちゃくちゃ簡単なんですよ。

例えば、ロリポップFTPとかを使ってサーバー上に次のような hoge.php というファイルを上げる。

<?php
echo "Hellooooo Wooorrrrld";

で、上げたファイルのアドレスをそのままブラウザに打ち込んでアクセスすると、このPHPの実行結果が出力されます。

ファイルのパーミッションは644。全員Readができて、Writeは所有者だけ。eXecuteは誰も出来ない設定。

でも実行されてます。なんでだ。実行権限は誰にもないんじゃないのか。


まあとにかく。

PHPはファイルを上げるだけで実行できるんですよ。


対して、Pythonはどうか。


hoge.pyをアップします。

print("Goodafternoon world")

そしてこのファイルのアドレスをブラウザに打ち込んで直接アクセスすると…

500 Internal Server Error
※CGI もしくは SSI が正しく動作していません。


怒られました。

軽くググッた感じ、SSIの方は今日の記事とはあんまり関係なさそう。

CGIについてはあとで話題にしましょう。

ロリポップPHPについて

で、また調べを進めた所

僕のアカウントでのPHPの設定は「バージョン 7.1(モジュール版)」でした。

このモジュール版という所が多分、今日重要になってきそう。多分。


そこで、これを「バージョン 7.1(CGI版)」に変更してみました。



そして、先ほどのhoge.phpにアクセスして見た所…


…問題なく実行されますね。


(phpinfoを使って、Server APIの項目が Apache 2.0 Handler から CGI/FastCGI に変わったことを確認しました)


いや、その、仮説としてね


PHPはモジュール版だから実行できたのであって、pythonCGIを通して(?)実行する必要があって、だからPHPCGI版に変えたらさっきみたいに簡単に実行できなくなるんじゃないかって


思ったんですけどね。どうもそうじゃない。



CGIって何


ということで、やたらめったら出現する「CGI」というキーワードを調べてみます。

イメージ、なんかこう、15年くらい前にアクセスカウンターとか掲示板とかそういう周辺で見た言葉、っていうイメージ。


CGIとは、Common Gateway Interface の略。Wikipediaによると

ウェブサーバ上でユーザプログラムを動作させるための仕組み。

だそうです。

「…はぁ。え、CGIはそういうものの一種ってこと?それともそういうもの全般をCGIと総称するの???」などと思いましたが

前者でよさそうです。CGIはそういうものの一種。

ロリポップでは、.cgiファイルをアップロードしてブラウザでアクセスすれば実行されるっぽい。


んでまあ軽くググッた感じ、
Perlで書くことが多い
・拡張子は.cgi
・一行目には、使用したプログラミング言語へのパスを書く

最後の奴がわかりにくいですが、ロリポップのマニュアルにちゃんとパスが書いてありました。


ということで、とりあえず何もしないプログラム fuga.cgi を書いて、実行してみよう。

#!/usr/bin/perl

(パーミッションは700、ロリポップ推奨)

500 Internal Server Error
※CGI もしくは SSI が正しく動作していません。

なんでだよ!!


ということでいろいろ試行錯誤したり調べたりしながら、ようやく「動作するコード」に辿り着きました。

#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "fugafugafugafugaaaa";

これで、最終的にブラウザに「fugafugafugafugaaaa」が返ってきました。この2行目がないとサーバーエラーになる。

CGIの動き

つまりこういうことらしい。

基本的には.cgiファイルに好きな言語のコードを書くんですが、そのプログラミング言語さんに渡す前後にCGIさんを経由するので

CGIさん用の指示が必要になる。

全体の流れとしては、まず往路

.cgiファイル → CGI → プログラミング言語

この過程では、CGIさんは.cgiファイルの一行目に書いてある宛先(プログラミング言語のパス)を確認し、二行目以降を渡す。

今回の場合はPerlさんがそれを受け取って、実行。出力は次のようになる。

Content-type: text/plain

fugafugafugafugaaaa

次は復路

プログラミング言語 → CGI → ブラウザ

ここでCGIが一行目を見て「あ、これはただのテキストなのね。音声とか画像ではないのね。」と確認し、適切な形でブラウザに返す。

さっきエラーになった時は、この「これはテキストですよ」という一行目がなかったんですね。これを「ヘッダ」というらしいです。


なるほど。

よし!

ここまでわかればpythonも動かせるはずだ!

#!/usr/local/bin/python3.4

print("Content-type: text/plain\n")

for i in range(10):
	print(i)


これはちゃんと動いた!!!!(パーミッションで実行権限を付け忘れてエラー出て小一時間悩んだけど。)

ロリポップに「Pythonが使える」と書いてあるけど、どういう意味で「使える」の


とりあえず、CGI経由で動かせることはわかりましたね。


てもこれで、どうやってDjangoをインストールしたり動かしたりするのかはまだまだわかりません。


ここでSSHという機能を有効にしていろいろ試してみましょう。


SSHは、Secure Shell の略で、めちゃくちゃ簡単に言えば、コマンドプロンプトやターミナルからサーバーにアクセスする方法のことです。


コマンド入力でいろんなことができます。


ロリポップの管理画面からSSH設定を有効にして、

ssh -l ユーザー名 -p ポート番号 ホスト名

で接続成功。


"vim" やら "python" やら普通に使えるので、.pyファイルを作ってコマンドから実行とか簡単にできました。

なるほど、こういう意味でも、サーバー上でpythonを「使える」わけだ。



さて、こちらの参考文献によると

noppiki.hateblo.jp

curl や pip が無くて困ってる様子なんですが

今確認した所によると、既に入ってるようです。

pipが使えれば、python関係の好きなモジュールがインストールできるはずで、Djangoのインストールも瞬殺では??


ということでやってみよう。

python -m pip install Django

…。


だめ。Permission Error.


そうか〜〜〜



chmodも試したけど、弾かれました。まあそりゃそうだ。これで変えれたら意味がない。sudo は command not found. なるほど。



どうも調べると、こういう時は、--user というオプションを使えばいいっぽい?

やってみましょう。

python -m pip install Django --user


……うまくいきました!!


案外、SSHでこの調子でやっていけば、ロリポップDjangoちゃんと動くのでは?

結局ロリポップDjangoは動くの

では、ここからはこのマニュアルにそってやっていきましょう。

Django をデプロイする | Django documentation | Django


WSGI という仕組みを使って、サーバー上でDjangoを動かすことになりそうです。


CGI ではなく WSGI を使う」という理解でよさそう。多分。


ロリポップサーバーはApacheというソフトで動いているので、Apache上でWSGIを使うには mod_wsgi というモジュールを使うことになりそう。


新出単語が多くてアレですが、まあ、そういうことみたいです。


……



さて。そうして2時間くらい経ちましたけれども


ロリポップApacheに mod_wsgi をインストールして有効化する方法が全然わかりませんね。


Apacheまわりの設定が全部書いてある httpd.conf というファイルをいじる必要がありそうなんですが


ロリポップだろうとさくらレンタルサーバーだろうと、httpd.conf はいじるどころか中身見ることもできないみたいです。


あれ?じゃあデプロイできなくね????どうすんの?????無理なの???



……


どうも、下記のページたちによると

さくらのレンタルサーバでpyenvとDjangoを動かす « chibiegg日誌
さくらサーバのスタンダードでPython3.5 + Django1.9を動かす | しましまくろっく
qiita.com


結局、CGI経由で入れるしかないみたいです。WSGIではなく。


CGI経由だと、アクセス(リクエスト)がある度にpythonを起動して処理して、ってやるから反応が遅くなるみたいですね。

(WSGIのデーモンモードならpythonを起動しっぱなしにできる)


まあ、安いレンタルサーバーですから、それは仕方ないのでしょう。



ということで、長いことかかりましたが、

CGI経由でDjangoを動かす


やっていきましょう。



Djangoのプロジェクトの中から、「最初にこれを起動しさえすればいい」みたいな.pyファイルを見つけて、そいつをcgi経由で実行すれば済む話

…なら、簡単にいく気がするんだけど、そもそもDjangoってリクエストを受けた後どういう仕組みで動くんでしょうね。


URLディスパッチャがURLに合わせたビューを呼ぶ、ってのはわかってるんだけど


今話題にしてるのは、もっと前段階の話だよね。


もうちょっと悪あがき

いや、待って待って

Djangoってのは、WSGIを使って実装するように設計されているわけで、


CGIを経由してDjangoを動かすというのは

まあ言ってみれば邪道なわけですよ。

CGIで動かすと、パフォーマンスも下がるらしいし。

なんとかCGIを使わずに普通にWSGIで動かす方法はないものか。


ということで、httpd.conf の代わりに .htaccess をいじることでなんとかならないか調べてみました。

.htaccesshttpd.conf よりも下位にある設定ファイルで、.htaccess なら、レンタルサーバーでもいじることができる!


…ということで調べてみたんですが



.htaccess に書ける範囲の内容では、mod_wsgi を有効化することはできないみたいですね。


httpd.conf に LoadModule という行を書いてやる必要がある。



はい。ということで。ダメです。CGIを経由するしかなさそう。


レンタルサーバーや〜めた!VPSにしよう!!


はい。


突然ですが、完全に僕の知識不足であれだったんですが

いろいろ調べているうちに、そもそもレンタルサーバーではなく、VPSというサービスを使うと、httpd.conf をいじれることがわかりました。


VPSというのは、Virtual Private Server の略で、レンタルサーバーよりも自分で触れる範囲が広い(自分で触らなければならない、とも言える)


もらえる権限が大きい代わりに責任も伴うわけですね。


そもそもApacheのインストールから自分でやるみたいです。



そうか。


おとなしくこれ使えば、邪道な方法を取らずともDjangoアプリを作れるわけか。


しかも値段も安いとこを使えばレンタルサーバーと大して変わらないみたい。



ということで。


レンタルサーバーでDjangoを動かすのはやめて、VPSを契約することにしました。



追記(2018-04-25)

ちなみに、こうしてVPSを契約してDjangoを動かして作ったサービスがこちらです!

岡竜之介の大喜利道場

よかったら遊びに来て下さい!!


それから、この記事を書いた時には知らなかったのですが

Firebase や Heroku といったサービス上でDjangoを動かす手がありますね。

サーバーの管理をそこそこ自分でやらなきゃいけないVPSと違って、手軽でいいかもしれません。

一方で、その分カスタマイズ性が低く、かゆいところに手が届かないといったことは起こるかもしれませんね。

参考までに!

以上!!

どうして西野カナ「トリセツ」をカラオケで歌うのは難しいのか

こんにちは。岡竜之介です。


糞ミーハーの皆様におかれましては、毎日のように一人カラオケ西野カナ「トリセツ」を入れては歌っていることと存じます。


一言で言うと女性が彼氏に「こうして欲しい」ってのを、取扱説明書風のフォーマットにしていろいろ言ってる歌です。


でももう正直話題としての旬は去りまして、


「面倒くさい女の歌」だの言う言説も聞き飽きましたし


「いや、これくらい男も頑張ろう」と男が言っても


「いや今更トリセツかよ」とそもそも論でぶちのめす今日このごろでございます。



はい。



まあ、もうちょっとしたら、逆に、古いだの新しいだの言う範疇から外れて、単なる有名曲の一つとして数えられるようになるでしょう。



今「レミオロメンの粉雪のサビの歌い方」という記事を書いて「今更?」という人はいませんね。



いますね。



ということで、今日は「トリセツ」です。


歌詞の内容については一切触れません。


「カラオケでトリセツ歌いたいけど、周りの人からどう思われるかが不安で入れるのが難しい」とかいう話ではありません。


あくまでメロディーに関する技術的な話です。




YouTube埋め込んでおくので「どんな歌だっけ?」ってなってる人は一回聞いてください。


1番で十分です。



西野カナ 『トリセツ』MV(Short Ver.)

Aメロが難しい

はい。

これ、聞いてる分には何が難しいのか全然ピンとこないと思います。


ところが。


いざカラオケで歌おうと思って入れてみるとですね、


なんかAメロがうまく歌えないんですよ。


リズムがとれないのか音程がとれないのか、とにかく、なんかうまくハマらないんです。


「あれ?」ってなるんですよ。



普通、何度か聞いて覚えた歌って、カラオケで歌えるじゃないですか。上手い下手は別にしてね。


画面に歌詞出るし。メロディーは知ってるし。


でも何故かこの歌はうまく歌えなくて、「あれ?」ってなるんです。




体験してみたい人は、この記事を最後まで読む前に、一回カラオケで入れてみてください。


練習してから行かないでくださいね。「曲は知ってるけど、一回も歌ったことはない」くらいの状態で行くのが望ましいです。



なんで「あれ?」ってなっちゃうんでしょうね?


答えを言ってしまうと


「単調な部分が長い」せいで「前にはみ出す部分」の「自由度が大きすぎる」からです。


一つずつ説明しますね。

単調な部分が長い


短調」じゃないですよ。「単調」です。

このたびはこんなわたしをえらんでくれてどうもありがとう

ごしようのまえにこのとりあつかいせつめいしょをよくよんで

いってんものにつきへんぴんこうかんはうけつけませんごりょうしょうください


はい。この色で示したところが、「単調な部分」です。長いですね〜〜〜〜〜



この「単調な部分」では、「音の高さ」と「リズム」がずっと一定です。


同じ高さの音を、同じタイミングで、発し続けるわけです。単調でしょ?



そして。


同じ高さの音を同じタイミングで発し続けるということはですね


仮に一文字分先走ったり遅れたりしても、元と同じように歌えてしまうということです。


ズレの数が二文字や三文字でも、単調な部分が続く限りは、元と同じように歌えます。



前にはみ出す部分がある


これが一番説明しづらいんですけど


例えば、「いち、に、さん、し」みたいにカウントでリズムをとったとして


「いち」よりも前に来る部分が、「前にはみ出す部分」です。


読者の中にはこれだけで伝わってる方もいるでしょうが、大半の方は「?」だと思うので、例をあげますね。


星野源「SUN」

星野源の「SUN」のサビには、「前にはみ出す部分」があります。


「いち、に、さん、し」とカウントをとりながらサビの最初を聞いてみるとですね

きみこえを きかせて

の「きみ」は、「いち」より前にあることがわかります。


」の所で、「いち」と重なるんです。


「いち、に、さん、きみ…」と始まるわけです。



星野源「恋」


これに対し、星野源の「恋」のサビは、「前にはみ出す部分」はありません。

ねのなかにあるもの

の最初の「」で、「いち」と重なります。


「いち、に、さん、し、ねのなかーに…」

と始まるわけですね。


back number 「高嶺の花子さん」

back number の「高嶺の花子さん」のサビも、「前にはみ出す部分」があります。

あいたんだ いますぐ その かどから

の「あいた」が、カウント「いち」より前にありますね。

その次の「」でカウント「いち」に重なります。


「いち、に、さあいたんだ…」


と始まります。前にはみ出してる量が多いので、「さん」の「ん」を言えないほどに、早めに歌い始めることになります。


back number 「青い春」


ちなみに back number「青い春」のサビは

おどりながら はばたくためのステージで

の「おどりな」が前にはみ出してます。長いですね。


「いち、に、おどりながら…」


と始まるわけですね。


「さん、し」のカウントがまるまる「おど、りな」で置き換えられてます。


ちなみにこの曲のカウント1は、「おどりな」を延ばした「あ」のタイミングにあります。やらしいですね。


和田光司「butterfly」

んだいな ゆめのあとの

「む」だけ前にはみ出してます。「げ」でカウント「いち」と重なりますね。


「いち、に、さん、しーんだーいなー」


という感じ。「いち、にい、さん、しい」の「しい」の「い」の分だけ、前にはみ出した「む」で置き換わってます。






とまあこんな風にですね、「前にはみ出す部分」というのは、結構融通が効きます



歌詞が長い場合は、多めに前にはみ出させて、早めに歌い始めればいいわけです。



西野カナ「トリセツ」


では「トリセツ」のAメロはどうでしょうか?


もうお気づきかと思いますが、色分けを「前にはみ出してる部分」カウント『いち』の部分」という色分けをしてます。


「単調な部分」も足すと、こんな感じになります。

このたはこんなわたしをえらんでくれてどうもありがとう

ごしよのまえにこのとりあつかいせつめいしょをよくよんで

いってんのにつきへんぴんこうかんはうけつけませんごりょうしょうください

ちなみにこの歌では、カウント1の部分単調な部分の一部です。


結構、前にはみ出してますね。3文字〜4文字というのは、結構はみ出してる方です。



つまりこの歌は、前にはみ出す部分の直後に長い単調な部分が来るという構造をしているわけです!




この歌のAメロはこの構造のラッシュです。この3フレーズだけではありません。


1番でもまだまだ出てくるし、2番に入ってもまだまだ続きます。



そして、


前にはみ出す部分が持つ「文字数の融通が効く」という性質と


長い単調な部分が持つ「一文字分先走ったり遅れたりしても、元と同じように歌えてしまう」という性質が


組み合わさった時


凶悪な「歌いにくさ」が生まれるんですよ!


前にはみ出す部分の自由度が大きすぎる


例えばここ。

このたはこんなわたしをえらんでくれてどうもありがとう

このた」が前にはみ出す部分です。「」でカウント1がくる。



ところがこれ。



次のように歌っても、それっぽく歌い始めることができてしまうんですよ。

このびはこんなわたしをえらん…

この」だけを前にはみ出させて、「」にカウント1が来てます。



前にはみ出す部分はこのくらいズラしても全然平気です。融通が効くので。


そして、その後の「単調な部分」のせいで、ズレていることに気づかないんです!





普通は、前にはみ出している部分が終わってメロディー本体に入ったら、すぐメロディーがおかしいことに気付くわけですよ。



さらに言えば、「直後のメロディーを自然に歌うために、どのくらい前にはみ出させればいいか」は、頭の中で自然にわかります。



別にわざわざ計算しなくても、自然にわかるんですよ。



でも「トリセツ」はそうならない。



「単調な部分」が長いせいで、前にはみ出させる文字数が間違ってても、自然に歌えてしまう。




これが「トリセツ」の歌いにくさの正体です。



「序盤の音程をとるのが難しい」と言っている人がいますが、実はその正体は



「歌詞とメロディーを正しい位置関係に当てはめる」のが難しいんです。



試しに歌詞を全部「ラララ」とか「トゥルル」とかで歌ってみてください。



たちまちこの「あれ?」という感覚は消えます。「ラララ」は文字数を後からいくらでも調整できるからです。







前にはみ出させる文字数を間違えると、一体何が起こるでしょう?

このびはこんなわたしをえらんでくれ…


そうです。「あれ?」ってなるんです。



「どうもありがとう」が近づいてきたあたりで、「あれ?おかしい。」と気付くんです。



本来「このた」の3文字を前にはみ出させなきゃいけないのに、「この」しか前にはみ出させていないから、文字が多すぎて、メロディーに入らないんですね。



その事が、「どうもありがとう」が近づいてきてようやく発覚するわけです。



ちなみに逆のパターンもあり得ます。

このたびはんなわたしをえらん…


前にはみ出させすぎです。


「どうもありがとう」が近づくにつれてメロディーが余り、やはり「あれ?」ってなります。






他の部分も見てみましょう。

ごしよのまえにこのとりあつかいせつめいしょをよくよんで


カウント1が「ごしよ」を延ばした「う」のタイミングにあります。やらしいですね。


これの間違いパターンは次のようなものが考えられます。

ようのまえにこのとりあつか…

出遅れたパターンです。もっと早めに歌い始めて、前にはみ出させないと、文字が多すぎて爆死します。

ごしようまえにこのとりあつか…

出が早すぎます。「ごしよう」を一単語としてまとめてしまうと、こうなります。「ごしよ」だけを前にはみ出させ、「う」でメロディー本体に突入しましょう。音としては「う」というか完全に「お」ですけどね。


ごしようのえにこのとりあつ…

さらに出が早すぎます。



ちなみにこの部分は「とりあつかい」の最後の「い」がグンッと上がるので、そこも注意してくださいね。





いや〜難しいですね!!


ここまでで次のように思った方もいるかもしれません。



「要するに3文字はみ出させればいいんでしょ?」


これがこうは行かないんですね。


次を見てみましょう。


いってんのにつきへんぴんこうかんはうけつけませんごりょうしょうください


4文字ですね。4文字の所もあるんですよ。


ちなみにこれの間違いパターンはこちらです。

いっんものにつきへんぴんこうかんはうけつけませんごりょうしょうください

出遅れパターンですね。



じゃあどうやったらうまいこと歌えるの?


一つ考えられる方法はこれです。




「歌詞を見て、メロディーと歌詞が最後までうまく合致するように、何文字を前にはみ出させればいいか毎回計算する。」



まあ、無理、ですね。これは。



となると結局。




どれだけ前にはみ出すかを丸暗記するしかありません。



前にはみ出す部分が全部同じ文字数、とかならいいんですけど、実際はバラバラなんですよね。



だから覚えるしかありません。



これを丸暗記していない人がカラオケでトリセツを入れて、うまく歌詞とメロディーを合わせられずに「あれ?」ってなっちゃうんです。



それが嫌なら何回も聞いて覚えろ!ということです



これを丸暗記するためには、歌詞のどの文字が「カウント1」にあたるのかを覚えていくと良いでしょう。



その文字より前の部分は、前にはみ出しているわけです。



具体的にはこんな感じです。

このたはこんなわたしをえらんでくれ…

ごしよのまえにこのとりあつか…

いってんのにつきへんぴん…

きゅうにきげんになる…

こたえなくせにほっとくと…

ていききにほめると…

ちいさなんかにもきづいて…


多いですね〜〜〜〜〜




中でもこいつなんか特に難しいですよ。

きゅうにきげんになる…


「ふ」は前にはみ出させたくなる。カウント1のアクセントの位置に置きにくいですからね。「ふ」。



そんでこれが2番もありますからね。やばいですね。でも覚えてください。全員です。全員覚えてください。



ちなみに一番多く前にはみ出しているのは2番の頭の「いがいとい」です。5文字。


簡単に覚えるには?

前にはみ出す文字数(というより音数)は3か4か5と決まっているので、これらに分類して覚えても良いかもしれませんね。

3音はみ出し

このたはこんな
ごしよのまえに
きゅうにきげんに
ていききにほめると

4音はみ出し

いってんのにつき
こたえなくせに
ちいさなんかにも
ちょっとしプレゼント

5音はみ出し

いがいといりん

他にも

・「ただしくやさしく」の所が、その後の同じ部分とメロディが違うので間違えやすい
・Bメロで急に歌詞がゆっくりになるからタイミングを合わせにくい
・サビの「こんなわたしだけど」の「た」が予想外に上がる
・サビの「大切にしてね」の裏声



など、難しい部分がちょくちょく出てきます。



が、頑張って歌いましょう。



それでは、これからもどうぞよろしくね。

のぺーっと分布した超関数

ディラックデルタ関数

ディラックデルタ関数ってあるじゃないですか。

はい。まあもちろん知らない人が大半です。なのでちょこっと説明します。


デルタ関数の定義

定義はこちら。


{\displaystyle
\int_{-\infty}^{\infty} f(x) \delta (x) dx = f(0)
}


これを満たす {\delta (x)}デルタ関数といいます。


ちなみに関数ではありません(!)。


関数に似てるけど、関数としては性質がふざけてるので、「超関数」という分類になってます。

これに {f(x) = 1} を代入すると


{\displaystyle \int _{-\infty}^{\infty} \delta (x)dx = 1}


がわかります。マイナス無限大から無限大まで積分すると1になるなんて、確率分布(確率密度関数)みたいですね。


確率密度関数列の極限としてのデルタ関数

実はデルタ関数は他の確率密度関数から類推してやると理解しやすいです。

2つ紹介します。

正規分布の分散→0にしたもの

{\displaystyle
a_n (x) = \frac{1}{\sqrt{2 \pi  \left(\frac{1}{n}\right)^2  } } \exp \left( - \frac{x^2}{2  \left(\frac{1}{n}\right)^2  } \right)
}

分散が {\left(\frac{1}{n}\right)^2} となってます。

こいつの {n} を大きくしていくと…

f:id:agajo:20170317201037g:plain


あ、1つめの関数がどの位置にあるかとか、nが大きくなる時の変化の幅とかは適当です。

要するにどういう動きをするのかってことだけわかれば良いので。以下同様。

一様分布の幅を→0にしたもの

{\displaystyle
\begin{eqnarray}
b_n(x) = \left\{ \begin{array}{ll} 
  n/2 & (-1/n \leqq x \leqq 1/n) \\
  0 & (otherwise) 
\end{array}\right.
\end{eqnarray}
}

一様分布の範囲の幅が {2/n} になってます。

この {n} を大きくしていくと…

f:id:agajo:20170317202755g:plain


という感じ。

どちらの場合も、面積=1 をキープしたまま、y軸にピッタリと張り付いていく様子がわかりますね。


関数列の収束について

{a_n(x)}{b_n(x)}{f(x)=0} に各点収束します。でも一様収束はしません。

各点収束とか一様収束については解説すると長くなるのでここでは割愛するので、知らない人は流し読みしてください。


ちなみに、一様収束する場合は、積分範囲が有限の場合、積分してから極限とるのと極限とってから積分するのとで、結果が同じになるらしいです。


今回は、先に積分すると1だし(nに関わらず面積1だから)、先に極限とると0になる(f(x)=0になるから)ということで、積分してから極限とるか極限とってから積分するかで値が違いますね。


一様収束してないし、積分範囲が有限でもないですからね。

確率密度関数としてのデルタ関数


例えばですね、これを「x軸上で、ある粒子がどの位置にあるか、という確率を表す」と解釈することが出来るわけですよ。


そしてデルタ関数の場合、「100%絶対に {x=0} の地点にある」と断言できるわけです。


普通、x軸という連続な範囲において、ある厳密な一点に粒子がある確率は0%です。ほんのちょっとでもズレてたらアウトなので、そういうことになるんです。


{0 \leqq x \leqq 1} の範囲にある確率」みたいに範囲で考えて初めて、意味のある確率が出てくるわけです。


なのに、デルタ関数の場合は、厳密に {x=0} の地点にあると断言できるので、気持ち悪いわけですね。


このあたりからも、デルタ関数が普通の関数ではなくて超関数であることがわかります。

積分布関数


積分布関数というのは、確率密度関数をマイナス∞からxまで積分してきた値を示したものです。


「あるx以下の範囲に粒子がある確率」を表します。なので、xが {-\infty \to \infty} と変化するとき、累積分布関数は 0→1 と変化します。


ちなみにデルタ関数確率密度関数と考えた時の累積分布関数はこうなります。


f:id:agajo:20170317203059p:plain


{x=0} でピョンと飛び上がります。{x \lt 0}の時はその範囲に粒子はないし、{0 \lt x} の時は100%その範囲に粒子があるわけです。


厳密に {x=0} の上でどうなってるかは知りません。多分どうでもいいです。

のぺーっとした超関数を考えよう!

ここまでデルタ関数を紹介してきました。

これに対して、のぺーっとした超関数はないのか、というのが今回の疑問。やっと本題ですよ!!

やっとって言っても、texで式書いたりgif動画作るのに時間がかかったのは僕の話であって、読んでると一瞬かもしれないですけどね!!

はい。

「のぺーっとした関数」でググっても、ツイッターで聞いてみても、全然それっぽい話がヒットしなかったので、調べるのは諦めて自分で考えることにしたのが事の発端です。

まず名前を付けよう!

デルタ関数にならって、イプシロン関数と呼びましょう。

{\displaystyle
\epsilon (x)
}

ってわけです。

イプシロン関数」で検索しても既存のものはなかったので、良いでしょう。

確率密度関数列の極限としてのイプシロン関数

まずはデルタ関数の時と同様に、確率密度関数の極限を使ってイメージを掴もう!

正規分布の分散→∞にしたもの

{\displaystyle
c_n (x) = \frac{1}{\sqrt{2 \pi  n^2  } } \exp \left( - \frac{x^2}{2  n^2  } \right)
}

分散が {n^2} となってます。

こいつの {n} を大きくしていくと…

f:id:agajo:20170317204548g:plain


こう。

一様分布の幅を→∞にしたもの

{\displaystyle
\begin{eqnarray}
d_n(x) = \left\{ \begin{array}{ll} 
  1/2n & (-n \leqq x \leqq n) \\
  0 & (otherwise) 
\end{array}\right.
\end{eqnarray}
}

一様分布の範囲の幅が {2n} になってます。

この {n} を大きくしていくと…


f:id:agajo:20170317204941g:plain


どちらも面積=1をキープしたまま、x軸にのぺーっと張り付いていく様子が見て取れます。


関数列の収束について

このイプシロン関数を考えている時に不安だったのが、

これ、完全に {f(x)=0} に一致してしまって、イプシロン関数なんてものを考えることはできないんじゃないか?

ということです。

0.999999.....が1と等しいみたいな。1と別個に0.99999.....という数字を考えることはできないわけです。


実際、この {c_n(x)} とか {d_n(x)} は、{f(x)=0} に一様収束します。

各点収束もするし、一様収束もするんです。

一様収束は、各点収束よりも割りとガッツリ収束していくので、極限とったら完全に同じものになるんじゃないか。

…と思ってたんですけど。

これ、nをどれだけ大きくしても積分はずっと1なんですよ。一方、{f(x)=0}積分したら0です。

これは、はっきり違いますね。全然一致してないです。

先に極限とって積分するのと、積分してから極限とるのとで、値が違うわけですね。

積分と極限の順序を入れ替えてもいいのは「一様収束」「積分範囲が有限」という2つの条件がありましたが、

今回は、一様収束はしても、積分範囲が無限だから、積分と極限は順序を入れ替えたら値が変わりうるわけですね。


なるほど。


ということで。

どういう関数(超関数)のことを考えているか、大体伝わったと思います。


こいつの性質を調べよう!!!

確率密度関数としてのイプシロン関数

デルタ関数
「x軸上で、ある粒子が100%絶対に {x=0} に存在する。」
という確率を表していました。

それに対して。

イプシロン関数は
「x軸上で、ある粒子が存在する確率が、x軸上のありとあらゆる点で同様に確からしい」

と解釈するのが自然でしょう!!!!

…いや、「!」マークまで付けて強調しましたが、それが自然だと感じているのが僕だけだったらごめんなさい。

積分布関数

イプシロン関数を確率密度関数と考えるなら、その累積分布関数を考えるのは自然な流れです。これは自然な流れです。

で、累積分布関数を考えてみるんですが…



これが、よくわからないんですよ!!



積分布関数である以上、マイナス∞の極限で0、プラス∞の極限で1になります。これはイプシロン関数の性質「積分すると1」と合致します。

そして、その (-∞,0) と (∞,1) の2点を「水平な直線」で結んだものが、累積分布関数になると思われます。


…うん。いや、飛躍してますかね。どうですかね。

イプシロン関数の値自体はずっと(ほぼ?)0なので、その積分である累積分布関数は傾き(ほぼ?)0の線なわけです。つまり(ほぼ?)直線です。

「(ほぼ?)」といってるのは、厳密に0なのかどうなのか僕がよくわかってないからです。


いやだって厳密に0だったら積分が1にならないじゃない!でも有限の値とってかつx軸全体で同様に確からしかったら、積分が発散しちゃうのでやっぱり厳密に0だよなあ…。




まあいい。


とにかく、水平な直線ということで納得しましょう。

積分布関数のグラフ


次の問題は、この累積分布関数のグラフを書こうとすると発生します。

x=0の時の累積分布関数の値がわからないので、水平な直線をどの辺に書いたらいいのかわからないんです!

f:id:agajo:20170317230026g:plain

「いや、普通に {y=1/2} じゃないの?」と思った方もいるかもしれません。

でも、それって正しくないと思うんですよ。

{x=0}{y=1/2} という考え方は、{x=0} が「真ん中」だからっていう感覚から来てると思うんですけど

「真ん中」って何? という話なわけです。

粒子の存在確率はx軸上全体で同様に確からしいわけだから、{x=0} を「真ん中」とかいう「特別」な扱いをする必然性はどこにもないわけです。

宇宙に中心はない、みたいな話ですね。

イプシロン関数を定義しよう

とまあ、感覚的な話が続いてしまいましが

数学の記事を書いてるのに感覚的な話に終始していてはいけません。

積分布関数がどこを通るかわからないのは、きっとイプシロン関数をちゃんと数式で定義していないからなのでしょう。

ということで、定義を試みます。



デルタ関数


{\displaystyle
\int_{-\infty}^{\infty} f(x) \delta (x) dx = f(0)
}


みたいに、他の関数と掛け算して積分した時にどうなればいいか、っていう観点で定義できそうかな?


{\displaystyle
\int_{-\infty}^{\infty} f(x) \epsilon (x) dx = ???
}


どうなればいいんでしょうね。


また感覚的でアレですが、この積分は「{f(x)} の平均値」を表していると考えられます。


それも普通の平均ではなく、(-∞,∞)という範囲における平均です。


(-∞,∞)という範囲において、イプシロン関数は「同様に確からしいという確率」を表すわけですから、それと{f(x)}を掛け算して積分したら、f(x)の平均値がでるんです。


「値×確率」を全部足すって奴です。説明が超雑ですが、ここで確率論の説明してると長くなるのでこの程度にします。



さて。



まず、{f(x)=1} の時は、この積分は1になってなきゃいけません。


{\displaystyle
\int_{-\infty}^{\infty}  \epsilon (x) dx = 1
}


というわけです。イプシロン関数に要求している性質です。まあそれはいい。


{f(x)}が定数の時は、その定数がそのまま積分値になりますね。まあそれもいい。



{f(x) = x } の場合はどうでしょう?


{\displaystyle
\int_{-\infty}^{\infty} x \epsilon (x) dx = ???
}


この積分は、x軸上で粒子が発見される位置の「期待値」を表します。「値×確率」を全部足すっていう奴です。


この積分はどうなるでしょうか?


{x=0} の左半分と右半分で相殺するから、積分結果は0…?



…。



はい、違いますね。

その考え方は、{x=0} を「真ん中」と捉えている場合の考え方です。


{x=3} を「真ん中」としてその左右が相殺すれば、積分値は3になるわけです。


結局、この積分が「わからない」んですよね。宇宙に中心はないわけです。



ということで、

{\displaystyle
\int_{-\infty}^{\infty} x \epsilon (x) dx = ???
}

の「???」の部分、ひいては



{\displaystyle
\int_{-\infty}^{\infty} f(x) \epsilon (x) dx = ???
}

の「???」の部分が埋められないので、これうまく定義できないですね。


いや、方法はあるのかもしれないけど、今の僕ではうまく扱えません。

そして、実際、うまく扱う方法がなくて何の役にも立たないから、この関数は検索してもヒットしなかったのかもしれません。

そんな気がします。






……





………



いや、まだだ!!!!!!!


デルタ関数だって、{x=0} を特別な点として扱っていたじゃないか!!

イプシロン関数でも、{x=0} を特別な点として扱ってみたらどうだ?


主観的に中心を決めてしまえば良いわけですよ。


だって、あなたがこの宇宙にある何かを感じる時、どうしたってそれはあなた一人が感じているわけで


他の人とまったく同じ感じ方をしていることはありえないわけで

相対性理論だって観測者によって時間の感じ方とか質量とかが変わるって言ってるわけで

まあ要するに




宇宙の中心はある!!




それはお前自身だ!!




いや、むしろ、この文を書いている俺からしたら、宇宙の中心はお前ですらない




宇宙の中心は、常にこの俺だ!!!






というわけでですね。


まったく飛躍のない極めて論理的な推論によって、{x=0} を特別扱いすることが根拠付けされました。

今度こそイプシロン関数を定義する


{\displaystyle
\int_{-\infty}^{\infty} f(x) \epsilon (x) dx = \lim_{t \to \infty} \frac{1}{2t} \int_{-t}^{t} f(x) dx
}


はい。いきなりでアレですが、これでしょうね。


右辺の積分範囲がポイントです。

プラス側とマイナス側に、{x=0} を「真ん中」として、同じ速度で積分範囲が大きくなるようになっています。


そして、その積分範囲の幅で積分値を割ることで、{f(x)}{(-t,t)} の範囲での平均値を出します。


最後に、その {t}{\infty} にふっ飛ばすわけです。

積分が1か確認する

{f(x)=1} を代入します。

{\displaystyle
\begin{align}
\int_{-\infty}^{\infty} \epsilon (x) dx &= \lim_{t \to \infty} \frac{1}{2t} \int_{-t}^{t} dx \\
&= 1
\end{align}
}

完璧ですね。

f(x)にいろいろ入れてみる

f(x)にいろいろ関数をいれてみて、

それらの関数の「x=0を『真ん中』とした平均値」を求めてみましょう。

定数

{\displaystyle
\begin{align}
\int_{-\infty}^{\infty} a \epsilon (x) dx &= \lim_{t \to \infty} \frac{1}{2t} \int_{-t}^{t} a dx \\
&= a
\end{align}
}


定数がそのままでてきました。実はこれデルタ関数と同じ性質です。

ずっと同じ値なんだから、その平均もその値になるに決まってますね。


1次式

{\displaystyle
\begin{align}
\int_{-\infty}^{\infty} (ax+b) \epsilon (x) dx &= \lim_{t \to \infty} \frac{1}{2t} \int_{-t}^{t} (ax+b) dx \\
&= b
\end{align}
}

あれ、一次式の部分消えましたね!?


これは、上で述べた


{x=0} の左半分と右半分で相殺するから、積分結果は0」


が起こってるわけです。

2次式

{\displaystyle
\begin{align}
\int_{-\infty}^{\infty} (ax^2 + bx + c) \epsilon (x) dx &= \lim_{t \to \infty} \frac{1}{2t} \int_{-t}^{t} (ax^2+bx+c) dx \\
&= \infty
\end{align}
}

これ計算すると、無限大に発散します。

aが正なら正、負なら負の無限大に発散します。


多項式

計算しませんが、奇数次の項しかなければ0だし、2次以上の偶数次の項があれば正か負の∞に発散しますね。


結局、二次以上の項は絶対値がどこまでも大きくなるので、プラスとマイナスで相殺しない限り、その平均値は無限大になっちゃうわけですね。

指数関数

{\displaystyle
\begin{align}
\int_{-\infty}^{\infty} e^x \epsilon (x) dx &= \lim_{t \to \infty} \frac{1}{2t} \int_{-t}^{t} e^x dx \\
&= \infty
\end{align}
}

これも発散します。二次式の時と話は同じです。

三角関数

{\displaystyle
\begin{align}
\int_{-\infty}^{\infty} \cos (x) \epsilon (x) dx &= \lim_{t \to \infty} \frac{1}{2t} \int_{-t}^{t} \cos (x) dx \\
&= 0
\end{align}
}

はさみうちの原理とかでアレすると、これ0になります。

三角関数はず〜っと {y=0} の上下で揺れてるだけなので、それを全範囲で平均とると0になるわけですね。

積分布関数を確認する

ヘヴィサイドの階段関数 - Wikipediaに書いてあるのと同じようにやってみます。

まず「指示関数」とかいうものを持ってきます。

{\displaystyle
\begin{eqnarray}
\chi_A(x) = \left\{ \begin{array}{ll} 
  1 & (x \in A) \\
  0 & (x \notin A) 
\end{array}\right.
\end{eqnarray}
}

これです。範囲内にあれば1、なければ0。

これを使って、累積分布関数、つまり「マイナス無限大からxまでの積分」を


{\displaystyle
\int_{-\infty}^x \epsilon (t) dt = \int_{-\infty}^{\infty} \chi_{(-\infty,x]} (t) \epsilon (t) dt
}


と定義します。

xより大きい所では、指示関数が0になってくれるので、結局右辺と左辺は同じ値になるはずですね。

ただし、あくまでも「マイナス無限大から『ある有限の値xまでの積分』」を定義しただけです。この点、覚えておいてください。



ところでこいつは、イプシロン関数の定義より


{\displaystyle
\begin{align}
\int_{-\infty}^x \epsilon (t) dt &= \int_{-\infty}^{\infty} \chi_{(-\infty,x]} (t) \epsilon (t) dt \\
&=\lim_{t \to \infty} \frac{1}{2t} \int_{- t}^{t} \chi_{(-\infty,x]} (s) ds \\
&=\lim_{t \to \infty} \frac{1}{2t} \left[ g(s) \right]_{-t}^{t} \\
&=\lim_{t \to \infty} \frac{1}{2t} (t+定数) \ \ (∵tが十分大きい時だけを考える) \\
&=\frac{1}{2}
\end{align}
}

いきなりg(s)とかいうのが出てきましたが、指示関数 {\chi_{(-\infty,x]} (s)} の不定積分(原始関数)です。
x以上の所では定数cで、xより小さい所では傾き1の直線(s-x+定数c)です。
xの関数ではなくてsの関数の話をしているので気をつけてください。この部分ではxは定数です。



ということで、やっと答えが出ましたが、累積分布関数はなんと {\frac{1}{2}} です!!


まあ、上でも「水平な直線」と言ってたので、わかってたっちゃわかってたんですが、xに依存しないんですね!!


どっか適当なx軸上の点を持ってきて、「その点より左にある確率」を考えると、いつだって1/2だということです。持ってきた点が宇宙の真ん中になるわけですよ多分。おもしろっ。


x→無限大にしても1にならないけど?

積分布関数はx→無限大とした場合1にならなければいけません。

でもこの 1/2 とかいう累積分布関数は、x→無限大にしてもずっと 1/2 ですね。

ここで思い出してほしいのが、上の定義はあくまで、マイナス無限大から『ある有限の値xまでの積分』」を定義しただけだったということです。

x→無限大とか、x→マイナス無限大の時については何も言ってないわけですよ。

有限の時しか成り立たないですよ、と断って話をしていたので、「無限にしたら矛盾するけど?」とか言われても「知らん。」というわけです。


じゅう無限の時はどうするのって話なんですけど、


x→無限大の時は1、x→マイナス無限大の時は0、って、定義すればいいんじゃないかな!それで完璧に条件を満たしますよ!!


極限とるタイミングをかなり気をつけて扱わなきゃいけない関数の完成ですね。これも超関数なのかな?

{\displaystyle
\begin{eqnarray}
E (x) = \left\{ \begin{array}{ll} 
  1/2 & (- \infty \lt x \lt \infty) \\
  0 & (x = - \infty)  \\
  1 & (x= \infty )
\end{array}\right.
\end{eqnarray}
}



粒子の位置を表す関数として解釈する

デルタ関数が「x=0に粒子がある」という確率を表していたので、イプシロン関数についても改めて解釈してみましょう。


…といっても、イプシロン関数から読み取れることは、「x軸全体のどこかにある」という情報だけです。「どこにある確率が高い」とかそういうことは何も言えません。


というのはまあ、そうなんですが


ここで、次の値を計算してみます。


{\displaystyle
\int_{-\infty}^{\infty} x \epsilon (x) dx
}


この計算は、「粒子が存在する位置の期待値」を表します。

「値×確率」を全部足してるわけです。何回言ったっけこれ。


ただこれ、xって単なる一次式なので、上で計算したように、答え0なんですよね。


平均値としては、x=0になるんです。


宇宙の中心はあなたというわけですよ。つまりね。そういうこと。


ただ、決して「x=0に存在する確率が高い」とは言ってないことに注意してくださいね。

そうなってくると、「平均はx=0」の意味って何なんでしょうね。何か言えるんですかね。

xが正とxが負の部分で、どちらも確率が1/2なので、まあ、観測を何度も何度もやったら、平均はx=0に収束していくっていうことですかね。


ところがこれすごいのが、x=0の地点にいるあなたがやってもそうなるんですけど、

x=10の地点にいる高橋君が同じことをやってもそうなるんですよ。高橋くんにとってもやっぱり、自分を中心に粒子が発見されるわけです。


x=2億の地点にいるロドリゲスにとっても同じです。ロドリゲス中心に粒子が発見される。


わけわかんないですけど、そういうことなんですよ多分。

あなたにとって世界の中心はあなただけれども、高橋君にとっては世界の中心は高橋君なんです。あなたと高橋君は違う地点に立っているにも関わらず、です。

まあ、そういう前提を置いたんだから、この結果は当然なんですけどね。多分。


原点以外のところへずらす

ここから「EMANの物理学」のデルタ関数の記事を参考にしてます。
ネットで物理とか数学とか調べたことのある人はきっと知っている有名サイトです。
いや、まあ、ここまでも参考にしてたけど。


つーことで。

ε(x-a)について考えると


{\displaystyle
\int_{-\infty}^{\infty} f(x) \epsilon (x-a) dx = \int_{-\infty}^{\infty} f(x'+a) \epsilon (x') dx'
}

x'=x-a です。

まあ、そうですね、x=aを「真ん中」とした時の f(x) の平均値がでます。上の高橋君とかロドリゲスとかの話の根拠ですね。


偶関数に似た性質

がんがん省略しますが、

定義式

{\displaystyle
\int_{-\infty}^{\infty} f(x) \epsilon (x) dx = \lim_{t \to \infty} \frac{1}{2t} \int_{-t}^{t} f(x) dx
}

の右辺について


{\displaystyle
\int_{-t}^{t} f(-x) dx=\int_{-t}^{t} f(x) dx
}


が言えるのと、左辺について


{\displaystyle
\int_{-\infty}^{\infty} f(-x) \epsilon (x) dx = \int_{-\infty}^{\infty} f(x) \epsilon (-x) dx 
}


が言えるのとかを使って、引き算したりすると


{\displaystyle
\epsilon (x) = \epsilon(-x)
}


が言えます。ほえ〜。


「偶関数『に似た』」と言っている意味合いについては元サイトを御覧ください。

変数のスケールを変える

{\displaystyle
\epsilon (ax)
}

について考えよう。

つってもまあ、普通に、横方向に 1/|a| 倍されるイメージで良くて

{\displaystyle
\int_{-\infty}^{\infty}\epsilon (ax)dx = \frac{1}{\mid{a}\mid}\int_{-\infty}^{\infty}\epsilon (x)dx
}

です。|a|が1より大きいなら、面積が横方向に縮んでるわけです。普通の関数のイメージと変わらないですね。


これ、デルタ関数でも話は同じなんですが、元サイト


{\displaystyle
\delta (ax)dx = \frac{1}{\mid{a}\mid}\delta (x)dx
}

これは変だ。横から押し潰された結果としてなぜか高さが縮むことを表しているように思える。普通の {f(x)=x^2} などのグラフと比べてしまうと逆のことが起きているイメージなのだが、こう考えないと辻褄が合わないので受け入れるしかない。

という記述があります(閲覧日2017-03-18)が、これ、積分記号を省略してるからですね。

積分記号を省略せずに解釈すれば、あくまでも横に縮むイメージのままで大丈夫です。


微分してみる


イプシロン関数の微分は、直感的に0でしょうよ!!


数式でちゃんと言えないか試してみよう。


…。



はい。



これ0じゃないですね。


こんな感じになりました。元サイトと同じ議論です。


{\displaystyle
\begin{align}
\int_{-\infty}^{\infty} f(x) \epsilon ' (x) dx &= \left[ f(x) \epsilon (x) \right]_{- \infty}^{\infty} - \int_{-\infty}^{\infty} f'(x) \epsilon (x) dx \\
&= - \int_{-\infty}^{\infty} f'(x) \epsilon (x) dx
\end{align}
}


はい。


ε'(x)をf(x)にかけて積分すると、なぜか、f(x)を微分した関数の、全体で平均とった奴の、符号を反転させたものがでてきました。


多分これが、ε'(x)の本質ですね。


δ'(x)と同じで、奇関数的な性質も持っているのでしょう。


……。

{\displaystyle
 \left[ f(x) \epsilon (x) \right]_{- \infty}^{\infty}
}


を0とした所だけ、ちょっと議論が怪しいか…??


…ちょっとどころじゃないな。


f(x)が発散するとき、イプシロン関数かけても0になる保証はどこにもないじゃないか。


微分に関してはもっと考える必要があるな。

まとめ


ということで、ディラックデルタ関数の逆バージョンみたいなものを定義することができましたね。


なんでこれ全然言及されてないんでしょうね?????


使い道がないのか…?




いやでも、量子力学で、粒子の運動量が確定してる時の位置の確率分布は、まさにこのイプシロン分布になるでしょう。


運動量と位置のどちらかがデルタ関数の時、もう一方はこのイプシロン関数になるわけですよ。なるよねえ?




あくまで俺の検索が糞なのか…??


おわり

おわりです。

「EMANの物理学」のデルタ関数の記事ではもっといろいろやってますが、いったん、またの機会にします。

f(x)やε(x)に複素数とかデルタ関数とかイプシロン関数とか突っ込んだりするとまだいろいろ調べられますね。多分ね。定義のやり直しもいるかも?


あとは、デルタ関数の応用先を調べて、同じ所でイプシロン関数も応用が効くかどうか調べると面白そう。


ε(δ(x)) と δ(ε(x)) の性質を調べるくらいは、今日帰ったらやってみようかな。



はい。



それにしても。

頭の中でバーっと考えるのにかかった時間を1とすると、

この記事を書くのに40くらいの時間がかかってます。バランス糞ですね。

アウトプットって大変だ。

サンフランシスコで耳かきをしてたら鼓膜を突き破ったので病院に行ってきた


今日の話は、タイトルの通りです。


3日前ですかね。夜中に、ベッドの上で横になって耳かきをしてたんです。


右耳です。右耳。右手で耳かきを持って、右耳に突っ込むわけです。


知ってます?耳かき。


匠の技 最高級天然煤竹(すすたけ)耳かき 梵天付き G-2155

匠の技 最高級天然煤竹(すすたけ)耳かき 梵天付き G-2155

  • 発売日: 2012/11/13
  • メディア: ヘルスケア&ケア用品


こういうのです。


一部の日本人は、これで耳の中を掃除するのが大好きなんですね。

耳の中って直接触れられない場所なので、たまにこれで掻いてやると非常に気持ち良いわけです。


でもね!!


いいですか!!!


絶対に!!!


ベッドで横になって耳かきなんてしてはいけません!!!!!!!



それをしてしまうと



ちょこっと頭の位置を調整しようとした瞬間に


ベッドの壁面に耳かきの逆の先端が押され


「ザクッ!!!!!」といきます。


耳かきが鼓膜を貫通するわけですね。


耳かきが鼓膜を貫通したわけです。



「うわやっちまった!!」って思いましたね。その瞬間。



完全に、何かを貫通した感触がありましたからね。



耳元でも「ザクッ!」っていう音がしましたからね。



慌てて抜いたときには時既に遅しです。



それ以来、耳だれが止まりません。


ずっと「耳に水が入っているような感覚」がします。


たまに痛みがします。


たまに「シューーー」っていう音がして、鼓膜の穴を空気が通過していることがわかります。



というか思ったんだけど、今僕の鼓膜の内と外には気圧差がないわけですよね?


なのに「耳に水が入ってる感覚」がするってことは、逆に普段は多少気圧差が設定されているということ?


…まあいいや。



とにかく。


病院に行かなくては。


そのためには保険が必要だ。医療費を全額自分で払ったら大変なことになる。


ということで。



クレジットカード付帯の「海外旅行保険サービス」に電話しました。


「何かあった時には日本領事館か、このクレカの保険に電話をかける」と、そう誓って日本を出国しました。


本当にかける日が来ないことを祈ってたんですけどね。



クレカの保険会社は日本の会社なので、日本語で対応してくれました。


しかも現地オフィスに電話をしたので、国際電話代もかからず。僕の電話の契約だと国際電話をかけられないので良かったです。


そこで症状を話す。


「耳かきで鼓膜を破ってしまいまして…」

「どっちの耳ですか?」


「では、病院を手配しましたら明朝メールと電話でご連絡いたします。」

「よろしくお願いします」



病院の予約手配から、支払いから何から何まで全部やってくれるらしいです。


すごいね。


あ、ちなみに、自分がそのクレカの保険の対象者であることを証明する必要はありました。


具体的には、そのクレジットカードを使って、その旅行の交通費か何かを支払ったこと。

カードのアカウントのスクショと飛行機予約確認画面のスクショを添付して送ったら、それでOKでした。



そして今日、行ってきましたよ。


なんでも予約はいっぱいだったそうで、緊急外来で対応してくれるそうです。いいのかそれ。




病院。


行ってきましたよ雨の中。ずっと言ってるけど、なんでカリフォルニアなのに雨ふるんだよ。

受付→待合室→看護師による診察→待合室→医師による診察→処方箋受け取って終了という流れ。

以下、会話は英語でなされました。

「今日はどうされたんですか?」

「耳掃除をしていて、耳かきを押し込んでしまって…。」

「…?」

「あ〜、耳かきというのはこういうのです。(画像を見せる)」

「そうなんですね。わかりました。薬のアレルギーはありますか?」

「いいえ。(機械を見て)あ、これ摂氏なんですね。アメリカでも摂氏使うんですか?」

「ええ。医療業界では使います。それ以外では使わないですね。」


とまあそんな感じでした。皆さん優しかったです。"Could you speak slowly, please?" を言いまくりました。


保険の「キャッシュレス」という仕組みを利用したので、病院ではお金を払わず。保険会社が全部払ってくれてます。すげ〜。


続いて薬局。

研修中の方が対応してくれたのですが、イマイチな英語を話す日本人がよくわからない保険を使わせろと言ってきているわけで、大変そうでしたね。


まあでも、大した問題もなく完了。


病院→処方箋→薬局→薬 の流れは日本とまったく同じでしたね。


病院と薬局が別れてるのってなんか理由があるんでしたよね。そこが組んじゃうとあくどい事ができちゃうからだっけ。忘れたけど。



もらった点耳薬。


every 12 hours for 7 days


です。一日2回、一週間ですね。


薬局で支払った額は$100(¥10000)を超えてました。保険なしで一旦全額支払ったわけです。

日本に戻ってから、領収書を送ったりすることで保険会社が払ってくれるはず。すげ〜。


これでとりあえず耳だれが止まってくれると、あとは放置でいいから楽でいいな。


耳だれが出る限り、ちょくちょく拭かなきゃいけないからクソめんどいんだよな。



てか思ったけど、結局、僕の負担額0なんですよね。これ普通に日本で保険適用して治療受けるより安いですね。なんたって0ですからね。


意味わかんないですね。クレジットカード会社はなんのメリットがあってこれやってるんだ…?

だって保険料払ってるわけでもないんだぜ…?

年会費があるわけでもないし。

普段使ってるクレジットカードにたまたま付いてただけなんだぜ…?