岡竜之介のブログ

岡竜之介のブログです。

ロリポップレンタルサーバーで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を契約することにしました。




以上!!

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

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


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


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


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


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


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


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



はい。



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



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



いますね。



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


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


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


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




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 匠の技煤竹耳かき 梵天付き


こういうのです。


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

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


でもね!!


いいですか!!!


絶対に!!!


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



それをしてしまうと



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


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


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


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


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



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



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



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



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



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


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


たまに痛みがします。


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



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


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


…まあいいや。



とにかく。


病院に行かなくては。


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


ということで。



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


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


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



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


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


そこで症状を話す。


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

「どっちの耳ですか?」


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

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



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


すごいね。


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


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

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



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


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




病院。


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

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

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

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

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

「…?」

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

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

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

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


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


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


続いて薬局。

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


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


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


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



もらった点耳薬。


every 12 hours for 7 days


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


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

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


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


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



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


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

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

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

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

Muir Woods, Muir Beach and Point Bonita Lighthouse


サンフランシスコからゴールデンゲートブリッジを渡って北側に行ってきました。


ゴールデンゲートブリッジというのはサンフランシスコの北の端にあって


そこから橋を渡った向こうにも陸地が広がっているわけですね。


ということで行ってきたので報告します。


Muir Woods

日本語だと「ミュアーウッズ」と書かれてます。

Red Wood の森が有名で、森の中をハイキングできるようになってます。

駐車場はあるものの、公式サイトによると休日はすぐいっぱいになるということなので、7時半に家を出て向かうことに。

車を使えば、サンフランシスコから30分くらいです。そんなに遠くない。


写真を撮っているのは知らない人です。



ここを、歩く。




道中は、こんな感じ。レッドウッドが生い茂ってますね。


選ぶハイキングコースにも寄りますが、どのコースも数kmあるのでそこそこしんどいです。軽装で行くべき。



一応目的地に着いて振り返ると、景色はこんな感じでした。



f:id:agajo:20161206140153j:plain


美しい。


ちなみに、この目的地、普通に道路が走ってます。


f:id:agajo:20161206140836j:plain
森が開けてる所を、道路が走ってる感じ。FFXVみたいですね。



f:id:agajo:20161206141251j:plain
橋。渡るとギシギシいいます。

f:id:agajo:20161206141257j:plain
木の洞に入り込む。

f:id:agajo:20161206141302j:plain
陽の光がいい感じですね。

f:id:agajo:20161206141305j:plain
せせらぎにかかる橋。

Muir Beach

Muir Woods から車で10分程度走ると、Muir Beachという海岸にでます。




ここは Muir Beach Overlook という場所。いかにもOverlookって感じがしますね。

270°海が見えて、風もよく感じられてとても気持ち良い場所でした。


f:id:agajo:20161206142249j:plain

f:id:agajo:20161206142253j:plain



ビーチ自体に出ることも出来ます。車で3分くらいかけて崖を降ります。



ビーチ。


まわりの景色。アメリカでは、都市からちょこっと離れた瞬間、ドーーンと何もない空間が広がる。この感覚は日本とはかなり違いますね。


Salsalito

お昼ごはんはSalsalito(ソーサリト)という地区でとりました。

サンフランシスコからゴールデンゲートブリッジを渡ってすぐの場所です。

クソお金持ちが住んでいる街らしいです。そうなのか…。


タコス。

タコス」というのはTacoの複数形です。Maracaに対してのマラカスみたいな事ですね。以前別の記事で言いましたねこれ。この記事しか読まない人もいるので、複数回言ってもいいのです。


Point Bonita Lighthouse

本当は Nike Missile Site という場所にも寄りたかったのですが、この日は閉まっていたのでキャンセル。

Point Bonita Lighthouseという、昔使われていた灯台へ向かいます。


ここはゴールデンゲート海峡の入り口です。座礁事故の多いゴールデンゲート海峡では、この灯台は重要な役割を果たしたことでしょう。



この山の向こうに灯台があります。数分歩けばすぐ着きます。近くに駐車場もあります。





灯台へ向かう途中では、山の内側を通り抜けます。すげ〜。



トンネルを抜けるとこんな感じ。すげ〜。





向こうにヤバイ吊橋が見えますね。


公式サイトにも「高所恐怖症の方は渡るのをお控えください」と書いてありました。

実際、渡るとギシギシいうし、結構揺れるし、なかなかスリリングでした。まあ、別に、そんなでもないけど。


ということで、吊橋を渡って灯台に到着!!!



いや〜、良い。

道中含めてとても良い。



ということで!!

ゴールデンゲートブリッジの北側にも、遊べるところはあるよという話でした!


f:id:agajo:20161206144100j:plain

Lyon Street Steps and Moraga Steps

サンフランシスコには丘や坂がガンガンあって

いろんな景観を形成してます。

agajo.hatenablog.com


ツイン・ピークスもそうだし、ケーブルカーはこうした丘を超えるためのものですね。
agajo.hatenablog.com
agajo.hatenablog.com



車が通れるような道路がとても作れない場合には、人が通れる階段だけ作って、車は迂回するようになってます。


ロンバードストリートみたいな例外もありますけど。
agajo.hatenablog.com



そして、その階段そのものに何かしらの装飾が施されていて、それ自体観光地になってる場所になってるようなケースがあるんですね。


それが Lyon Street Steps と Moraga Steps です!

Lyon Street Steps


Lyon Street Steps は、Lyon Street の途中にあります。

基本的には車が走れる Street なんですが、途中の部分が一箇所階段になってるんですね。


それがこちら。





う〜ん。写真テク!!


結構急の階段になっていて、ここを往復してトレーニングしているランナーが何人かいました。


これだけ急だとかなりキツイだろうな…

Moraga Steps

Moraga Steps も、Moraga Street の一部が階段になってるものです。

ただ、Lyon の方と違うのは、Moraga Stepsは階段の上にさらに丘の頂上部があり、その部分はMoraga Streetが一度完全に切れている点ですね。


Moraga Stepsは、その階段の垂直面にあるタイルの絵で有名です。


おお〜〜〜キレイですね〜〜!!


そしてこの階段を登りきって後ろを振り向くと…




良い景色ですね〜〜


見えている海は太平洋です。この遥か彼方に日本があるわけですね〜。



北側です。ゴールデンゲートパークとゴールデンゲートブリッジが写っています。

この丘は Grand View Park という名前がついています。そのまんまですね。

先日アップロードした僕のPPAPのロケ地の一つです。ここでルームメイトに撮影してもらいました。ありがとうごさいました。



ちなみにこの日はサンクスギビングの日だったのですが、人の混み具合はこの程度でした。


穴場なのかもしれませんね。

標準誤差の計算方法

統計の質問です。例えば、培養条件をAまたはBの2パターン設定し、各条件で培養している微生物が3サンプルずつある(e.g.各条件で3本のフラスコ、合計6本のフラスコで培養)とします。各サンプルにおける微生物の濃度を3回ずつ測定し、条件AとBそれぞれにおける濃度の平均値を比較する際、標準誤差はどう求めれば良いでしょうか?すなわち、測定値が2条件×3サンプル×3回測定=18個あり、サンプル毎の平均値や標準誤差などが求められる場合、条件毎の標準誤差を求める方法を教えてください。


僕のask.fmに来てた質問です。


これの解答を考えていたらそこそこ時間がかかってしまったので、


せっかくなので記事にまとめてみます。

標準誤差


Wikipediaによると

標準誤差(ひょうじゅんごさ)は、母集団からある数の標本を選ぶとき、選ぶ組み合わせに依って統計量がどの程度ばらつくかを、全ての組み合わせについての標準偏差で表したものをいう。

統計量を指定せずに単に「標準誤差」と言った場合、標本平均の標準誤差(standard error of the mean、SEM)のことを普通は指す。

なるほど?


例えば、母集団が{1,2,3}で、ここから標本を2つ選ぶ場合、標本のパターンは{1,2}{1,3}{2,3}で、各パターンの標本平均はそれぞれ1.5, 2, 2.5。
標本平均の平均値は2なので、標準偏差{\sqrt{\frac{(1.5-2)^2+(2-2)^2+(2.5-2)^2}{3}}=\frac{\sqrt{6}}{6}}で、約0.41。これが標準誤差です。


「標準誤差」は、母集団分布と、取る標本数から決定されるんですね。

でも多くの場合、母集団分布なんてわからないので、これを推定するわけです。

普段何気なく「標準誤差」なんて呼んでる数値は、あくまで「標準誤差の推定値」もしくは「標準誤差を点推定した値」なんですね。

今回の問題の標準誤差

では始めの問題に戻って考えてみましょう。

条件はAとBの2パターンあるということですが、それぞれの条件についての標準誤差を求めればいいので、パターンの数は一つだけ考えればOKです。

サンプル数と測定回数は一般化して、こんな感じにしてみます。

同じ条件に基づいてサンプルをn本作り、それぞれm回ずつ測定した。この時の測定値の標準誤差を推定せよ。

考え方1 サンプルの違いは無視する

単純に、同じ条件に基づいてnm回測定した、と考えてみます。N=mnとします。N個の測定値が手元にあるわけですね。


ここでいくつか記号を定義します。

{w_1,w_2,...,w_N}:N個の測定値。具体的な値ではなく、確率変数とします。それぞれが平均と分散を持ちます。あと、全部独立とします。

{V}:分散。

{SD}標準偏差。分散の平方根です。

{\displaystyle
V(w_1)=V(w_2)=...=V(w_N)
}
みたいに関数として表記することにします。ちなみに、測定値は全て同じ確率分布に従うので、この式は正しいです。

{\displaystyle
V(w) = V(w_1)
}

としておきます。


さて、求める標準誤差はどう表されるでしょうか?


標準誤差は、標本平均が従う確率分布の標準偏差です。

ということは、{SD\left(\cfrac{w_1+w_2+...+w_N}{N}\right)}が、求めたい標準誤差です。

計算すると
{\displaystyle
SD\left(\cfrac{w_1+w_2+...+w_N}{N}\right)\\
=\sqrt{V\left(\cfrac{w_1+w_2+...+w_N}{N}\right)}\\
=\sqrt{\cfrac{1}{N^2} V(w_1+w_2+...+w_N)}\\
=\sqrt{\cfrac{1}{N^2} (V(w_1)+V(w_2)+...+V(w_N))}\\
=\sqrt{\cfrac{1}{N^2} NV(w)}\\
=\sqrt{\cfrac{V(w)}{N}}\\
=\cfrac{SD(w)}{\sqrt{N}}
}

となります。

SD(w)には、標本標準偏差を推定値として代入しておけば良いでしょう。

考え方2 サンプルの違いを考慮する

サンプルの違いをきちんと考慮するとどうなるでしょうか。

ここで、また記号を定義します。

{u_{kl}}:k個目のサンプルから得られた、l個目の測定値。これも具体的な値じゃなくて確率変数とします。

同じサンプルから測定値を得る時は、同じ確率分布に従うものとします。サンプルの時間変化は考慮しないってことですね。


{V(u_k) = V(u_{k1}) = V(u_{k2}) = ... = V(u_{km})}とします。


{\displaystyle SD\left(\frac{1}{nm}\sum_{k=1}^n \sum_{l=1}^m u_{kl}\right)} が求めたい標準誤差です。

SD()の中身は一見わかりにくいですが、測定値の平均をとってるだけです。

計算すると


{\displaystyle
SD\left(\frac{1}{nm}\sum_{k=1}^n \sum_{l=1}^m u_{kl}\right)\\
\displaystyle =\sqrt{V \left(\frac{1}{nm}\sum_{k=1}^n \sum_{l=1}^m u_{kl}\right)}\\
\displaystyle =\sqrt{\frac{1}{n^2m^2}V \left(\sum_{k=1}^n \sum_{l=1}^m u_{kl}\right)}\\
\displaystyle =\sqrt{\frac{1}{n^2m^2} \sum_{k=1}^n \sum_{l=1}^m V(u_{kl})}\\
\displaystyle =\sqrt{\frac{1}{n^2m^2} \sum_{k=1}^n m V(u_{k})}\\
\displaystyle =\sqrt{\frac{1}{n^2m} \sum_{k=1}^n V(u_{k})}\\
\displaystyle =\frac{1}{n\sqrt{m}}\sqrt{ \sum_{k=1}^n (SD(u_{k}))^2}\\
}


はい。これが標準誤差です。


あとは、SDに標本標準偏差でも推定値として突っ込んで、計算すれば良いでしょう。


ちなみに質問文に「サンプル毎の標準誤差が求められる」とあるので、それをsdkとして使うとすると

サンプル毎の標準誤差
{
\displaystyle = sd_k\\
\displaystyle = SD\left(\frac{u_{k1}+u_{k2}+...+u_{km}}{m}\right)\\
\displaystyle = \sqrt{\frac{1}{m^2}V\left(u_{k1}+u_{k2}+...+u_{km}\right)}\\
\displaystyle = \sqrt{\frac{1}{m}V\left(u_k\right)}\\
}

なので、求める標準誤差は

{\displaystyle
SD\left(\frac{1}{nm}\sum_{k=1}^n \sum_{l=1}^m u_{kl}\right)\\
\displaystyle =\sqrt{\frac{1}{n^2m} \sum_{k=1}^n V(u_{k})}\\
\displaystyle =\sqrt{\frac{1}{n^2} \sum_{k=1}^n \frac{1}{m}V(u_{k})}\\
\displaystyle =\frac{1}{n}\sqrt{ \sum_{k=1}^n sd_k^2}\\
}

となります。これを使うこともできますね。

で、どっちを使えばいいの?


はい。サンプルの違いを無視するバージョンと考慮するバージョンを考えましたが


結局どっちを使えば良いのか。これを考えます。


当然どちらも同じ値を指してるんですが、


推定結果に違いが出てくるんですね。


理想としては、求められる標準誤差の推定値が、小さい方がいいです。


ではここで、具体的に得られた測定値を

{x_{11},x_{12},...,x_{1m},x_{21},...,x_{nm}}とします。

これらは確率変数じゃないです。具体的な値です。


まずは、サンプルの違いを考慮したパターンの
{ \displaystyle \frac{1}{n\sqrt{m}}\sqrt{ \sum_{k=1}^n (SD(u_{k}))^2}\\
}

を使うため、SD(uk)を推定しましょう。

標本標準偏差、つまり、不偏分散の平方根を使います。「バー」は平均としますね。

{\displaystyle
SD(u_k) \gets \sqrt{\frac{1}{m-1}\sum_{l=1}^{m}(x_{kl}-\bar{x_k})^2}
}

引き算している平均は、サンプル毎の平均です。

代入して

{ \displaystyle \frac{1}{n\sqrt{m}}\sqrt{ \sum_{k=1}^n (SD(u_{k}))^2}\\
\displaystyle = \frac{1}{n\sqrt{m}}\sqrt{ \sum_{k=1}^n \cfrac{1}{m-1}\sum_{l=1}^m (x_{kl} - \bar{x_k})^2}\\
\displaystyle = \frac{1}{n\sqrt{m(m-1)}}\sqrt{ \sum_{k=1}^n \sum_{l=1}^m (x_{kl} - \bar{x_k})^2}\\
}


次に、サンプルの違いを考慮しないパターンで同じ事をしましょう。

SD(w)には、{\displaystyle \sqrt{\cfrac{1}{nm-1}\sum_{k=1}^{n}\sum_{l=1}^{m}(x_{kl}-\bar{x})^2}} を推定値として代入します。

引き算している平均値が、サンプル毎の平均ではなく全体の平均になっていることに注意してください。

{\displaystyle
\cfrac{SD(w)}{\sqrt{N}}\\
\displaystyle =\frac{1}{\sqrt{nm(nm-1)}} \sqrt{\sum_{k=1}^{n}\sum_{l=1}^{m}(x_{kl}-\bar{x})^2}
}


ということで、今、2つの推定値が得られました。


{
\displaystyle  \frac{1}{n\sqrt{m(m-1)}}\sqrt{ \sum_{k=1}^n \sum_{l=1}^m (x_{kl} - \bar{x_k})^2}\\
\displaystyle \frac{1}{\sqrt{nm(nm-1)}} \sqrt{\sum_{k=1}^{n}\sum_{l=1}^{m}(x_{kl}-\bar{x})^2}\\
}

上はサンプルによる違いを考慮していて、下はそれを考慮していません。


実は、このルートの中は、上の式の方が小さくなることが言えます。

「2次のモーメントは、引き算に平均値を使った時に最小になる」という性質から

{\displaystyle
\sum_{l=1}^{m}(x_{kl}-\bar{x_k})^2 \leq \sum_{l=1}^{m}(x_{kl}-\bar{x})^2
}

が言えるからです。

詳しくはこちらの動画を御覧ください。


平均は2次のモーメントを最小化する


さて。では、サンプル数を考慮した方がより小さい標準誤差が得られるのか。


これがそうはいかなくてですね。


でかいルートの前の係数部分。ここの大小が逆なんですね。



結局、どっちがいいかわからない!!!


両方計算してみて、小さい方を使えばいいんじゃ…ないかな…。


ちなみに、
・サンプル毎の測定回数が多い時
・サンプル毎の平均値がバラついている時

は、サンプルの違いを考慮した方が良いですね。

まとめ

2つ計算して小さい方を使ってください。(?)

ちなみに

母分散(母標準偏差)を推定する際に、不偏分散ではなく普通の分散(n-1ではなくnで割る奴)を使うと、係数部分はまったく同じになるので、いつでも「サンプルの違いを考慮すべき」ということになります。

でもそれじゃ正しくないよなあ…?