CygwinでCtrl+C

C:\cygwin\bin\bash.exe をショートカットとして作成
作業フォルダを"C:\cygwin\home\%UserName%" などに変更
C:\cygwin\home\%UserName%\.bashrc の最後に
「export PATH=/bin:$PATH」
ついでに
「PS1="[\u@\h:\w]\$ "」とか
「PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$"」
も追加


.bashrcを使わず
C:\cygwin\bin\bash.exe --login
でも良いのだが、遅い様な気がするので。

Realtek HD オーディオマネージャ の設定

Realtek HD オーディオマネージャ で
「前面ヘッドフォンデバイスを挿し込むと、背面出力デバイスが消音になります」が機能しない問題の対応メモ

右側にあるフロントパネルの緑色の丸で右クリック=>「コネクタを再接続しています」=>「ヘッドフォン」
とする

http://bbs.kakaku.com/bbs/05855010801/SortID=6722336/
で同じ様な問題が採り上げられていた。

STLのset

今日はC++STLのsetを使ってみた。

set::eraseがvoidなのが理解出来ない。なぜiteratorを返さないのか。まとめて複数の要素を削除したいときとか、不便じゃないのか。逆にinsertの方はboolで良いと思う。map::eraseも同じ。

さらに、setクラスにはメンバ関数として、isSubsetOf(set)があっても良いのではないか。集合の包含関係は順序(厳密弱順序と言うらしい)にはならないのでoperator<は今のままで良いと思うが、operator+, operator-, operator* もあって良いと思う。

#include <set>
template <typename Key, typename Compare1, typename Allocator1, typename Compare2, typename Allocator2>
bool isSubset(const std::set<Key, Compare1, Allocator1>& A, const std::set<Key, Compare2, Allocator2>& B){
	for(typename std::set<Key, Compare1, Allocator1>::const_iterator i=A.begin(); i != A.end(); ++i){
		if(B.find(*i) == B.end()){
			return false;
		}
	}
	return true;
}
template <typename Key, typename Compare, typename Allocator1, typename Allocator2>
bool isSubset(const std::set<Key, Compare, Allocator1>& A, const std::set<Key, Compare, Allocator2>& B){
	typename std::set<Key, Compare, Allocator1>::const_iterator i = A.begin();
	typename std::set<Key, Compare, Allocator2>::const_iterator j = B.begin();
	
	while(i != A.end()){
		if(j == B.end() || Compare()(*i, *j)){
			return false;
		}
		else if(*i == *j){
			++i;
			++j;
		}
		else{
			++j;
		}
	}
	return true;
}

みたいな感じ。

あと、binary_searchに渡すiteratorってForwardIteratorで良くて、RandomAccessIteratorである必要は無いみたいで、実際setに対しても出来るみたいだが、なぜだろう。beginとendの中間点が計算出来ないとbinary_search出来ないように思うんだけれど、ForwardIteratorじゃ、そこまでひたすらインクリメントしないといけないのでは?(たしかにSGIのコードを見るとそうなっている、、、binary_searchなのに計算量が log n でないらしい)

NHK受信契約

NHKの人によると、ワンセグを見なくても、携帯電話を持っているだけで受信契約が必要だという。テレビを見られないように設定しようが、改造しようが何しようが、見ようと思えば見られる状態だとして、契約が必要だという。

どう考えても納得できないので放送法32条を確認すると
「放送の受信を目的としない受信設備、、、のみを設置した者については、この限りでない。」
と書いてある。
つまりNHKはテレビを見ない携帯電話も、「テレビを見るため」ということらしい。

NHKの人たちは、「動画サイトで違法にアップロードされたテレビ番組を見るためにパソコンを持っている」とか「自分の子供の喉を掻っ切って殺すために包丁を持っている」といわれて納得出来るのだろうか?こういうことだって、やるはずなくても、やろうと思えば出来ることだと思う。

違法だから出来ないというなら、放送法に反することが出来ないのも同じだし、携帯電話の場合はテレビの機能が無いものを選べるというなら、包丁だって、カットされた野菜を使うとか、対策はあるように思う。いくらなんでもテレビを見ない携帯電話から受信料を取ろうとするのは無理があるのではないだろうか。

Fedora9でFirefoxクラッシュ

Firefox
run-mozilla.sh: line 131
で落ちる様になった。

アイコンをダブルクリックして起動すると、
前回正常に終了しなかったから、、、
みたいなダイアログが一瞬表示されてすぐ落ちる。

調べてみたところ、よくわからないのだけれど
flockSCIM との相性が良くないとか何とかで
SCIMの設定で、「全てのアプリケーションで同一の入力メソッドを使用」にチェックを入れてはいけなかったらしい。

任意の相関係数 r のサンプルデータを作る方法の続き

改めて考え直すと、この問題はもっと簡単に解けた。

観測値の偏差からなるN次元のベクトルXは、
すべて1のベクトルと直行していれば平均が0という条件を満たすのだから、
ランダムにN次元ベクトルを作って1と内積をとって1方向成分を求めてそれを引いてxにする。
もう一度ランダムにN次元ベクトルを作って1及びxと内積をとって、引いて、xに直行するベクトルnにして、y=sqrt(1-r^2)n + rx
として、最後に平均、分散の調整をする、とすれば良かった。

任意の相関係数 r のサンプルデータを作る方法

だいぶ前、教えてgooで、相関係数rのサンプルデータを作る方法について質問があって、それを読んで考えたこと。


母集団(A, B)が相関係数rを持つようにするなら、分散の等しい(1とする)独立な確立分布に従う確立変数X,Yを持ってきて、
A = X
B = rX + sqrt(1-r^2)Y
とでもすれば良い。
Aの分散は1、Bの分散も(X,Yが独立なので)1。
X,Yは正規分布でも何でも良いので、適当にいくつかデータを作り出せば、だいたいとして、観測値の相関係数がrになるはず。
分散や平均は相関係数に影響しないので、適宜A,Bそれぞれに定数をかけたり足したりすれば、分散、平均、相関係数が自由に出来ることになる。


が、もし、観測値の相関係数をぴったりrにしたかったらどうしたら良いだろうか、というのを考えた。
上の方法だと十分な標本数をとらないと相関係数がrにならないと思われるので、演習問題用に標本数10くらいで相関係数をほぼrにするにはどうしたら良いのかということ。
で、以下がその時考えた方法。


標本数をN(4以上)とし、観測値から作られる2つのN次元ベクトルx、yを以下のように作る。観測値そのものをベクトルにするのではなく、平均値からの差をベクトルにする。
# Nが3以下(といっても2だと相関係数が無意味なので3のみ)の場合は手を動かせば良いので考えない。
N=N1+N2 (いずれも2以上)に分割し、
N1次元ベクトルx1、y1
N2次元ベクトルx2、y2
に分けて作ることを考える。
x1、x2および、
x1、x2にそれぞれ直行するベクトルn1、n2を任意に作成する。
y1 = sqrt(1-r^2)n1 + rx1
y2 = sqrt(1-r^2)n2 + rx2
とする。
ただし、ここでx1、x2、y1、y2どれかについて、含まれる値の平均が0になってしまった場合はやり直す。
xを含まれる値の平均が0になるようにx1とx2とをそれぞれ定数倍してくっつける。yについても同様にする。
このままx,yを観測値にしてしまうとと平均値が常に0になってしまうが、
観測値の平均や分散を任意の値にするのは、ここまで進んだ段階からは、1つ目の方法と同様に可能なのでそのようにする。


上のように複雑にした理由もメモをしておくと、相関係数rということは、平均値からの差のN次ベクトルの組(x,y)のcosがrになるということだけれど、平均値からの差のベクトルということはxの各値の平均は0ということになって、それが難しいな、と思ったため。


そもそも日記を書かないとと思ったのは、これを忘れないようにメモしておきたかったからだ、ということで、デジタルデータ化。