2009年4月26日日曜日

HUNT症候群続

さらに悪化するような事があれば入院の必要もあるが、軽症なのでとりあえず投薬治療で対処できるとの事。まあ良かった。ごっつい薬をもらってきた。

2009年4月24日金曜日

Hunt 症候群

Hunt症候群だそうで・・・。眠気と疲労倦怠感の方が何の進捗もないというのにややこしい病気を抱え込みたくないのだが、治すまでにけっこうな手間がかかるらしい。

2009年4月23日木曜日

何かいろいろ麻痺している

外耳炎っぽいのは耳の腫れ、リンパの腫れ、痛みともだいぶ収まったのだが、ひどい頭痛と眩暈が続いている。ただでさえろくな生活ができないというのに、全く人間的な生活ができなくなってしまった。

んでもって、昨日から、舌の左側が痺れた感じで感覚が弱く、喉の所で食べ物が留まってごっくんとできないとか、麻痺みたいな変な症状が。今日は左の目蓋の感覚が鈍くて顔を洗う時に変な違和感を感じたのだが、その後ずっと、瞬きの時に右の目蓋ばかり動くとか左目をぎゅっと閉じれないとかなんとも奇妙。あと、口と歯の間にたまったご飯粒なんかを水を口に含んで洗って飲み込む動作なんかも、いつもは造作もないのに、水を口に含んだまま複雑な動作をしようとすると左の口端から水が漏れちゃって服を汚してしまってみっともないことになる。そんなこんなで食事にすごく労力と時間がかかる。

炎症が神経まで行っちゃったのかなあ。外耳炎でこんな事になるのだろうか。

2009年4月21日火曜日

リンパの腫れ

もう三日ほど首筋のあごの付け根というか耳の下の辺りにしこりがあって腫れて痛い。何事かと思って調べてみたらリンパ節が腫れているみたい。耳もちょっと熱を持っていて一箇所チクチクして痒い所があるし外耳炎みたいな感じなのかなあ。それとも普通に風邪か。熱は(いつもの7.2度くらいの変な微熱を除いて)ないけれど。わりと咳が出て喉も痛い。それと昨日からはひどい偏頭痛。

2009年4月12日日曜日

ケーリー・ハミルトンの定理続

先日の記事の補足。

ちゅーわけで、行列Aは自分自身の固有値なんです、なにせA=Aだから、という話に見えなくもない。固有多項式を消滅させる事を言うのには、何らかの意味で固有値なのだと主張するのが文句なしに一番自然な方法だよね、というお話でした。

ねむいー

自転車で最寄り駅のショッピングセンターみたいな所まで行って1~2時間ほど歩き回るってのが以前は2~3日に一回くらいは取りやめていたのだが、主治医の助言もあって、ルーチンワークとして定着してきた。でも、毎日倦怠感や筋肉痛が積み重なっていく感じでひどい事になっている。でも、歩いたり自転車に乗ったりって事自体はちょっと息が上がり易いだけでそんなに負担じゃないんだよなあ。階段を数階分上がると脛から腿から酷い事になるけれど。むしろ身体を動かしている間は倦怠感を忘れられてかなりの気分転換になる。ただ、それで疲れが吹き飛ばせるわけでもなく帰ってからどっと疲れたり。後、何故か食事が凄い負担になって、何故か食事の後に凄く疲れる。

それと、一昨年の前半くらいまでは、歩いている間には眠気がわりと吹き飛ばせて頭がすっきりして、それでどうにか騙し騙し人生を回してこれたというのがあって、そもそも以前から割りと積極的に歩く事はしてきたのだが、近年、次第次第に歩いている間にも軽い眠気を感じるようになってきて、それが最近ではかなり強くなってきている。自転車をこいでいても目蓋が重くなるとか、本当に困ってしまう。

睡眠時間は、リズムに狂いがあるとは言え8時間くらいと十分にあるんだけど、やっぱり何処かまともに寝れていないんだろうなあ。高校の頃にいつのまにか、"眠くない時がない"というめちゃめちゃな状況が定着してしまってからこっち、コーヒーを飲もうともお茶を飲もうとも覚醒感とは本当に無縁の状態が続いている。思春期の頃は誰も彼もが授業中に居眠りしていたし、一貫校だから中学と高校の境辺りの大きなイベントというものがなかった事もあって、本当に、"気が付いてみたらいつのまにか"、という感じで、時期がはっきりしないんだよなあ。

2009年4月9日木曜日

ケーリー・ハミルトンの定理

ブラケット記法ってテンソル積を明示すると煩雑になるし省略すると混乱を生じ易くなるしで、テンソル積が絡むとおよそ良い所がない。で、テンソル積を明示 する事で劇的に見通しが良くなる例としてケーリー・ハミルトンの定理の証明を一つ。要点は、シュミットクラス作用素と、ヒルベルト空間とその双対空間との テンソル積空間のベクトルとの対応関係が、見た目で処理できるという事。物理のかけらもない線形代数のトピックでブラケット記法の良い所探しをするとか、 ニッチ市場にも程があるが。

以下テンソル積をxと書く。

n次元(実でも複素でも)縦数ベクトル空間をLとする。Lの上の線形写像の全体をMとする。Mはnxn行列の全体と見る事もできる。Mの任意の要素Aが、行列と見た時定義される自身の固有多項式を消滅させる事を示す。

まず、自明な式

AI=IA

に着目する。Mの要素に左からAをかける写像をL_A, 左からAをかける写像をR_Aとする。すると上式は

L_A(I)=R_A(I)

と書ける。

Mの要素を対応関係|φ><ψ|~|φ>x<ψ|及び線形性を手がかりにしてM'=LxL^*のベクトルに対応させる。特にLの数ベクトル空間としての標準基底を|i>とすればI=∑|i><i|には∑|i>x<i|が対応する。

L_A, R_AはLの上ではスーパーオペレーションだが、M'の上では線形写像だ。Mの上での作用として|φ><ψ|を(A|φ>)<ψ|や|φ>(<ψ|A)に写す事から、M'の上ではこれらはAxI及びIxAだ。すなわち、自明な式AI=IAからいつのまにか非自明な式

(AxI-IxA)∑|i>x<i|=0,

が導かれた。(AxI-IxA)を行列成分の行列、∑|i>x<i|を横ベクトル成分の縦ベクトルと見なそう。(AxI-IxA)の余因子行列の転置を両辺にかけると、

diag(det(AxI-IxA))∑|i>x<i|=diag(φ(A))∑|i>x<i|=0,

を得る。ここでφはAの固有多項式。この結果はφ(A)の全ての行が横零ベクトルである事を示すから、φ(A)=Oが導かれた。

2009年4月7日火曜日

ねむいー

自転車に乗っていたり歩いたりしていても眠気を感じるのだが、最近それがやばいほど強烈になってきた。個別の症状以上に、この、少しずつ人生が削り取られていくような感覚には本当にまいってしまう。

2009年4月3日金曜日

体調

最近は滅茶苦茶強い筋肉痛という事はなくって、肉体的疲労についてはやっぱりCFSの事を意識しすぎていたのかなあ、などとも思っていたのだが、昨日今日と足に筋肉痛がずっとある。そして腕と足の倦怠感が凄い。

それと頓服で出されていたドグマチールがなくなってから、二日間入眠に苦労したが、一昨日、昨日と夜すんなりと寝付けた。ただ起きるのは変わらずに13時過ぎ。やっぱドグマチール関係ないのかなあ。今までも、大体冬~春にかけては不眠が解消されて起きる時間は変わらずに過眠傾向になる事が多かったし。

で、起きた後も強烈な眠気で何も手に付かない。うとうとしちゃうわけでも居眠りしちゃうわけでもないんだけど、やっぱり眠気としか言いようがないんだよなあ。

せめて年末年始に数ヶ月間経験した(その時の処方はリボトリールとドグマチール)、日に数時間活動的な時間帯が得られるという状況がもう一度訪れれば(思えばそれで一念発起して「身も蓋もない」開発とこのブログを始めたんだっけ)、もう少し人間らしい生活ができるんだけど・・・。このブログも体調の事ばかりで随分とつまらなくなってしまった。

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];
}