2009年3月31日火曜日

ねむいー

目覚めが最近ない程すっきりしていて、あれ?ラッキーって思ったのだが、その後しばらくしてから強烈な眠気。それでもって腕から足からだるいし足はちょっと筋肉痛があるし、食事しただけで息が上がるし。

目がしょぼしょぼして、目蓋が重くて、目の奥から額からつーんとして、目蓋も鼻の頭も痙攣して、ひたすらに辛い。

ちなみに、睡眠時間は、夜12時前に寝たのに寝付けたのが朝5時。で8時くらいに目が覚めた後二度寝を繰り返して正午まで寝ていた。体感的には不眠と過眠の両方の記憶があるのだが、ちゃんと計算してみると睡眠時間自体は実は標準的という何年も付き合ってきたパターン。

2009年3月30日月曜日

ヘロンの公式の一般化

ヘロンの公式の任意のn次元で通用する一般化は、計量行列の行列式の平方根(ここまでで二次元ならば平行四辺形の面積、三次元ならば平行六面体の体積になる)をとって1/n!すれば良い。

で、何で計量行列の行列式の平方根を取るのかと言えば、一つの説明はベクトルn個を適当な正規直交基底で表示した成分を並べて作った行列の行列式の絶対値がこれらが成す単位格子の体積を与えるから。

で、さらにその理由の簡単な説明を考えたのだが、一番簡単なのは、完全反対称関数の自由度がたった1しかない事に訴える事。

まず、

V=V(x_1,x_2,...x_n)

という風に単位格子の体積をn個のベクトルの関数として書く。これは、大体線形なのだが、微妙に線形じゃない。しかし、

V'=V'(x_1,x_2,...,x_n), |V'|=V

なる各引数について線形な関数を作る事ができる。このようなV'はV'と-V'の二種類ある(この辺り、ちゃんと証明しようとするとめちゃめちゃ面倒なんだろうなあ)。

V'は各ベクトルについて線形なだけでなく、完全反対称だ。n個のベクトルの完全反対称な関数というものを任意に考えると、実は自由度は1しかない。つまり、

V'(x_1,x_2,...,x_n)=A_{i_1,...,i_n}(x_1)_{i_1}...(x_n)_{i_n}

と書いた時、係数A_{i_1,...,i_n}は完全反対称テンソルε_{i_1,...,i_n}に比例する。正規直交基底を引数に取った時、1または-1にならなければならない事から、比例係数は1または-1であると分かる。これは、V'がX_{ij]=(x_i)_{j}を成分とする行列Xの行列式またはその逆符号を取った物である事を意味する。

睡眠

頓服で出されていたドグマチールを駄目元で毎日飲んでいたら、その間は毎日夜寝つけていたのだが(だだ、起きるのは昼過ぎになってしまって、年末年始の数ヶ月に経験した、朝6時~8時に活動的な時間帯が生じる、という状況にはならなかった)もらっていた10錠がなくなったら、昨晩いきなり朝5時まで寝付けないというようになってしまった。今の医師も睡眠のリズムの改善はリボトリールのお陰だったのだろう、と言っているのだけど、もう何が何だか良く分からん。寝付けるにせよ寝付けないにせよ、起きている間の強烈な眠気も相変わらずだし。

2009年3月25日水曜日

体調

じっとしていると直ぐに目蓋が重くなって、目の奥や額がつーんとして、めちゃめちゃ辛い。目を閉じると目蓋や鼻の頭の痙攣も酷い。強烈な眠気としか言いようがないのだけど、うとうとしてしまうという感じではなく、ただひたすらに辛い。横になって枕に額を押し付けたり机に突っ伏したりと、ぐるぐる繰り返して、部屋の中にいると何も手につかない。高校の頃から徐々に、本とか文書という物を集中して読めなくなって、学業の上では、人と全然違う所で奇妙な苦労を強いられた。最近はもう、コンピュータに向かうのも一苦労、本どころか漫画を読むのも一苦労という感じ。

部屋の中では何にも手につかないし、座椅子やベッドでゆっくりしようとしても腕から足から強烈な倦怠感があって、それを吹き飛ばすために何かしら活動したくてたまらなくなって、ゆっくり休むという事ができない。そんなこんなで部屋にいても気が滅入るばかり。疲れやすいというのもこの強烈な眠気とともに主訴の一つである状況ではあるのだけど、別に動けないという程では全くない(運動会の次の日のような感じ)ので、最近ではほとんど毎日外出してショッピングモールを2時間ほど歩いて、それが最大の気分転換となっている。それでゾンビのようになって帰宅するのだけど。

休んでいる間に頻尿とか過敏性腸症候群とかが治まったのと、現在の薬の処方のせいか(やっぱりドグマチールが効くみたい?)不眠が解消されたのもあって、自分の状態が整理されてきた。その結果として最近になってようやく、すごく眼に疲れや神経症状が来てそれが一番困っている点だと認識できるようになってきた。

高校の頃から、授業に全く集中できずに寝てばかりいるようになったのだが、あれも、成長期の頃のうとうとする眠気と違い、目蓋が重くて眼の奥や額がつーんとして集中できず、机に突っ伏して額を腕に押し付けて集中力をかき集めては少しだけ授業を聞いて、また集中できなくなって突っ伏して、というのを繰り返していた。何だか眠気というのとも違うとは感じつつ、やはり言語化するならば眠気としか言いようがなく、睡眠のリズムの乱れもあって、睡眠不足による眠気として無理に納得していたが、どうもその認識は間違っていたのではないかと思う。

大学の頃からは決まって年に二回程、PCのディスプレイを見ると吐き気がする程に眼がおかしくなるという事を経験するようになった。そういう場合にはPCを利用する活動を最低限に制限しても2週間くらい経たないと回復しなかった。それに、普通の人と全く逆に、子供の頃には乗り物に酔わなかったのが、高校の頃から次第に電車やバス、車に弱くなっていった。最近は電車もバスも使っていないので偶に使う時もちょっと苦手程度だが、一昨年なんかはバスに乗っている間はずっと目を閉じていないと強烈な吐き気に苦しむ羽目になった。

次回の診察では、眠気と疲れ、という風に簡単に済ませてしまわずに、眼の症状、という観点から少し相談してみよう。まあ神経症状がこういう形で現れているという話ならば、眼科で検査・治療を受けてめでたしめでたしとなるという風にはいかないのだろうけれど。

2009年3月13日金曜日

イベントの多重登録

以前、デリゲートの等価性は、呼び出し先のメソッドが同じかどうかで判断される事を書いた。

ところが、
Button1.Click+=new EventHandler(foo);
Button1.Click+=new EventHandler(foo);
すると、ボタン一回のクリックに対してfooが二回呼び出される。等価なメソッドの多重登録が許されているという事。ちょっと吃驚した。面白い仕様だ。

でも、デリゲートの等価性の帰結として、この二つのイベントハンドラを削除する時、右辺で生成したデリゲートへのインスタンスへの参照を保持しておく必要はない。
Button1.Click-=new EventHandler(foo);
Button1.Click-=new EventHandler(foo);
でOK。このために、

Button1.Click+=foo;
Button1.Click-=foo;
でfooが(右辺でEventHandlerの別々のインスタンスが暗黙に生成されるにも関わらず)削除されるんだね。

昼夜逆転

やっぱ、昼夜逆転しちゃったなあ。外出した事もあって、あまりに眠いしだるいしで、9時には寝たのだが、夜12時過ぎたくらいに目が覚めて、それから何時間もちっとも寝付けない。でも、起き出して見ると、強烈に眠くて、結局もう一度寝て、朝方に寝付けて正午まで寝ているという、投薬治療を開始するまで何年もずっと付き合ってきたパターン。

結局今日も、昼から起き出してもめちゃくちゃ眠いし、足から腕から運動会の次の日のようなだるさ。軽い筋肉痛というか張りというか・・・

以前は、夜のどうせ眠れないし少しだけ集中し易いしという時間帯を使って、アクティブな活動をほんの少しでもやっていけたのだけど、最後の方では、電気ストーブを火傷しそうなくらい顔に近付けて、ようやく集中力が確保できるという状況で、事実上は1年半前には完全に破綻していた。それから半年良く無理が通ったものだと思う。

2009年3月11日水曜日

CFSじゃない、病名も付かない、だそうで・・・。まあポジティブに、ポジティブに。

これまでの経緯
  • CFS(慢性疲労症候群)の専門医であるH医師の診察を受ける。身体表現性障害だろう、と言われ、T医師を紹介される。
  • T医師からは厳密には身体表現性障害ではない、と言われ現在の主治医の下での経過観察を続けるように言われる
  • 現在の主治医が匙を投げるそぶりを見せだす
  • H医師にもう一度かかる(今日)。病名は付け難いのだろうが、いずれにせよ精神科・心療内科での治療が適切で、特に認知療法で効果が出る可能性が高い、似たケースで数ヶ月で劇的に治癒したケースをたくさん見ていると言われ、改めてT医師を薦められた。
こちらとしても、病名を付ける事よりも治療の方針をしっかり立てたい、という希望をはっきりと伝えた上での受診だったので、T医師にお世話になれば何とかなりそう、というのは良いニュース。ただ、このまま病名宙ぶらりんというのはやっぱり外聞がなあ。

いくつかの論文を見たところ、H医師は、いくらCFSが除外診断とは言え、他にあてはまるものがない場合の落ち着きどころとしてCFSとの診断をポンポン出した上で標準的な投薬治療を機械的に行う類のCFSの専門医とは異なり、自身の経験を豊富に持っていて、それに基づいて診断・治療法の提案を明確に行える医師であるようだ。自分としても、病名を付けてもらう事よりも治療法についてのアドバイスをして欲しい、という趣旨での受診だったので、この医師の診察を受けたのは正解であったと思う。

多分私のようなケースは、機械的に診断基準を適用するならば(主治医からは精神疾患にあたらないと断言されているし)CFSに確かに該当してしまうケースなのだろうが、それでもH医師の経験から、CFSではなく、かつ、心療内科での認知療法による治療が有効なケースという判断になったという事だろう。そういう、私のような状況を多く見ているという経験の豊富さを感じる事ができたので、今の主治医の診察と比べて格段の安心感を感じる事ができた。

他のCFSの専門医にCFSと診断されるまでドクターショッピングを繰り返すならばどこかでCFSと診断された可能性が高いと思うが、そうしたら無闇に経過を長期化させる事になってしまったかもしれない。治療という観点からは今日の診察で最良の方向性が示されたのだと思う。ただ、やっぱり病名が付きそうにないのが精神的に辛い・・・。

海外みたいに、CFSという疾病概念を、思い切って病態として拡張してしまってくれれば良いのに・・・。でもまあ、そうすると、精神衰弱とか自律神経失調とか濫用される病名をまた一つ増やす事になって医学的には好ましくないんだろうなあ。CFS自体は、海外では遺伝子のオンオフの異常という事で確定診断の仕方も含めて決着が付きつつあるらしいし。


それにしても、診察を受けて帰ってきたら肉体的疲労と精神的疲労がすごい。本当に、運動会の直後状態。いつもは運動会の次の日状態と万年徹夜明け状態で、それが少なくとも高校の頃から徐々に悪化していって、もう立ち行かなくなった。これで誰にも助けてもらえないのなら、神様を恨むよ。

2009年3月10日火曜日

昼夜逆転

昼頃まで起きられず、夜になるまで強烈に眠いのに、夜になって布団に入っても何故か3~4時くらいまで眠れないっていう感じになってきた。昼夜逆転のリズムが完全に戻り始めている。

これは医者にかかるまで年々ひどくなって、大学時代なんかは朝の5~6時くらいにならないと眠れなかったからなあ。

睡眠のリズムが改善したのがリボトリールを処方された直後だったので、前回また睡眠リズムが戻りだしたと相談したら医者はリボトリールを増やす処方にしたのだけど、やっぱりドグマチールの効果だったんじゃないかと思う(ドグマチールをエビリファイに変えてからリズムがまた狂いだした)。次回にはそう相談しよう。

2009年3月4日水曜日

アッカーマン関数続

インデックスを一つの構造体で管理するようにしてすっきりした。

struct index2D
{
public int m, n;
public override int GetHashCode()
{
return m ^ n;
}
}
static Dictionary<index2D, int> Ack = new Dictionary<index2D, int>();
static int Ackermann(index2D mn)
{
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
watch.Start();
Stack<index2D> arg = new Stack<index2D>();
arg.Clear();
arg.Push(mn);
while (arg.Count > 0) {
index2D index = arg.Peek();
index2D index_;
if (Ack.ContainsKey(index)) {
arg.Pop();
continue;
} else {
int value;
if (index.m == 0) {
value = checked(arg.Peek().n + 1);
} else if (index.n == 0) {
index_.m = index.m - 1;
index_.n = 1;
if (Ack.ContainsKey(index_)) {
value = Ack[index_];
} else {
arg.Push(index_);
continue;
}
} else {
index_.m = index.m;
index_.n = index.n - 1;
int n_;
if (Ack.ContainsKey(index_)) {
n_ = Ack[index_];
} else {
arg.Push(index_);
continue;
}
index_.m = index.m - 1;
index_.n = n_;
if (Ack.ContainsKey(index_)) {
value = Ack[index_];
} else {
arg.Push(index_);
continue;
}
}
Ack[index] = value;
continue;
}
}
watch.Stop();
Console.WriteLine(watch.Elapsed.ToString() + " elapsed.");
return Ack[mn];
}

いてー

今日も朝から疲労倦怠感、風邪気味の倦怠感、風邪気味の症状、微熱、どれも強かったのだけど、数日休んでばかりだったからか肉体的な疲労はそんなに強くなかった。それで午後から出かけて、いつも通り死にそうになって帰ってきた。でもその時点でも肉体的疲労は強くなくて、「脳の疲労」とでも言うべき一連の症状が強くなっただけだったのだが、夕食と風呂で負荷がかかった後、足がめちゃくちゃ筋肉痛。まじで痛え。

アッカーマン関数

2chのC#初心者スレに投稿したアッカーマン関数を計算するC#メソッド。
あからさまに宿題くさかったが、ジェネリッククラスのスタックを使って再帰をヒープで行う方法が提案されるなど、興味深かったので。

方針は、ハッシュを使って計算済みの値を保存し再利用する事で無駄な再帰を減らす事と、上記のヒープを使っての自前再帰。計算済みの値を再利用するので表作成にも有効。うちの環境(メモリ1GB)では
m=0でn=int.MaxValue-1まで
m=1でn=10000000くらいまで
m=2でn=5000000くらいまで
m=3でn=20まで
m=4でn=1まで
計算できた。

static Dictionary<int, Dictionary<int, int>> Ack = new Dictionary<int, Dictionary<int, int>>();

static int Ackermann(int m, int n)
{
Stack<int> argM = new Stack<int>();
Stack<int> argN = new Stack<int>();
argM.Push(m);
argN.Push(n);
while (argM.Count>0) {
if (!Ack.ContainsKey(argM.Peek())) Ack[argM.Peek()] = new Dictionary<int, int>();
if (Ack[argM.Peek()].ContainsKey(argN.Peek())) {
argM.Pop();
argN.Pop();
continue;
} else {
int value;
if (argM.Peek() == 0) {
value = checked(argN.Peek() + 1);
} else if (argN.Peek() == 0) {
if (Ack.ContainsKey(argM.Peek() - 1) && Ack[argM.Peek() - 1].ContainsKey(1)) {
value = Ack[argM.Peek() - 1][1];
} else {
argM.Push(argM.Peek() - 1);
argN.Push(1);
continue;
}
} else {
int n_;
if (Ack.ContainsKey(argM.Peek()) && Ack[argM.Peek()].ContainsKey(argN.Peek() - 1)) {
n_ = Ack[argM.Peek()][argN.Peek() - 1];
} else {
argM.Push(argM.Peek());
argN.Push(argN.Peek() - 1);
continue;
}
if (Ack.ContainsKey(argM.Peek() - 1) && Ack[argM.Peek() - 1].ContainsKey(n_)) {
value = Ack[argM.Peek() - 1][ n_];
} else {
argM.Push(argM.Peek() - 1);
argN.Push(n_);
continue;
}
}
Ack[argM.Pop()][argN.Pop()] = value;
continue;
}
}
return Ack[m][n];
}

2009年3月3日火曜日

体調

今日も、疲労的な倦怠感に加えて軽い吐き気を伴う風邪気味っぽい倦怠感があって、目が覚めてもずっと横になっていた。その後、起きて体温を測ったら37.4度。吐き気があるから食欲もなくてカップラーメンを買ってきた。

2009年3月2日月曜日

微熱

また37.5度。おい、37.5度で定着すんなよ。

でも今日は昨日程には辛くはない。ていうか久しぶりに快晴だったので外出してきた所。まあ、負荷がかかった分死にそうになって倦怠感も疲労も強いが、風邪気味特有の倦怠感ってのはない。

あと、すげー眩しいという神経症状は相変わらず。

食後とは言え、37.6度・・・。なんか珍しく胸を張って微熱と言える微熱になった。だから何だという話だが。

微熱

昨日は、朝方からいきなり37.5度で、億劫という意味の倦怠感に、風邪気味の、わずかな吐き気と熱っぽくて頭がぼーっとする、という意味の倦怠感が加わり、あまりにも体調が悪くて一日中寝ていた。そうやって全く体を動かしていないのに、夜少しすっきりしてきたら筋肉痛がめちゃくちゃ強くなって、しかも熱は全然引いていない。結局夜までずっと横になっていて、夜も早めに寝た(でも不眠気味で入眠に苦労した)。

別に肉体的疲労で立ち上がれないとかそういうのじゃないけど、一日寝ているというような事は今まで一度もなかったのでショック。

今日もこの時間帯に既に37.0度。午後にはもっとあがるんだろうなあ。既に少し気分も悪いし。

来週の診察で病名宙ぶらりん状態に決着が付けば良いんだけど・・・