!!!独り言日記 !!熱くなれ(2009/01/29) 閣下がカバーしたCDを買ってきました。かっこいい!!ずっと聞いてます。 Macにプライベート環境を移行していろいろインストールしてたのですが、Macはアプリケーションフォルダにドラッグする、という動作でインストーラとしているのが多いですね。 う〜ん、どう実装するのだろう、また調べねば。 Windows環境と行き来することが多いので「Boot Camp」入れようかどうか迷い中...。 マルチコアで動作するんだろうか。 !!誤差による揺れの原因(2009/01/24) 先日書いた「誤差」の問題ですが、実験しているのは結果の角度(物体の姿勢)が大きく異動してしまう、というもの。 いろいろ情報をあさった結果、オイラー角表現(3x3行列での姿勢表現含む)は微少な誤差が軸反転するほどの誤動作を引き起こすことがあるとのこと。 特異値が出るというか、なんかジンバルロックと似たような現象ですね。 ですが、「特異姿勢」とはちょっとニュアンスが違うのかもしれません。 3x3の回転行列(9パラメータ)を3つのパラメータで表現して、それを補正して正しい値を推定する、というのもありました。結局は反復が必要ですねぇ。 解決はいずれにせよ1パスでは無理っぽいので、今までどおりノイズで揺らす、で通すかなぁ。 後、もしかしたら精度・速度としてもなかなか使えるかもしれないアルゴリズムを考えつきまして、実験したところ動作良好です。 何よりも線形代数を使う必要がないという特徴があります。 今までは論文をベースに既存技術+独自補正処理を使っての確認をしていたのですが、全部置き換えることでもうちょっと安定するかもしれません。 !!平成20年分の確定申告(2009/01/21) e-taxの案内がきてたので忘れないようにメモ。 2009/02/16〜2009/03/16にて所得税の申告、 2009/01〜2009/03/31にて消 費 税 及 び 地 方 消 費 税の申告、となっています。 手持ちのICカードリーダ・ライタがWindowsでしか動作しないので、Mac版を買ってこないといけませんねぇ。 一応、申告はMacでも可能、というのがあったので今年はMac上でやってみようかと。 年一回の住基カードが唯一活躍する(^_^;;イベントがそろそろ開始です。 !!誤差による揺れの収束手段(2009/01/21) このところ格闘している問題で、ちょっとした数値(In)のズレで結果(Out)が大きく変わってしまう、というのがありました。推定系でノイズが入ると弱くなる、といったものです。 逆転の発想で「わざとノイズを加えたら正しい値も出てくるに違いない、それをゲットすればイカしたことになりそう」と思って試してみました。割と理想どおりの推定ができたかもしれません。 この手段はなかなか使えそう。ということで「モンテカルロなんとか」と勝手に名づけてみようかと。 気分的に大きめのハードルの1つを超えました。 まだたくさんのハードルがあるのですが、小さなことからコツコツと、です(<この単語、好きだったりします)。 まだ内容については公にはできないのですがいずれ披露できればと思ってます。 !!MacでのCLAPACKのビルド方法(2009/01/20) [[数学]]にて、CLAPACKのMacでのビルド方法を記載しました。 LINUXのmakefile設定をパクってきてやってみたのですが「ar」コマンドでつまずきました。 Macではファイルサイズが大きなライブラリでは「でかいよ!!(fat file)」ということでおこられてしまいましたので libtool -static -o xxx.a file1.o file2.o file3.o ranlib xxx.a のようにして静的ライブラリはビルドする必要があるみたいです。 ただし、小規模なライブラリは「ar」のみでビルドできますね。 これでMacでもCLAPACKが使えるようになりました。 ただし、「BLAS」はリファレンスのライブラリのようで「ATLAS」というのと入れ替えると場合によっては行列計算では10倍速くらいになるみたいです。 他の方のサイトを拝見すると「数学ライブラリは自作すべきでない」ってのがよくありますね。 実際、自分で構築してみたとしても速度がCLAPACKに追いつかないらしい・・・・。私個人ではとてもじゃないけど把握できないので、使い倒す所存です(笑)。 !!Macへシフト中(2009/01/20) 作業中ばかりですが、、、プログラムで重いことをやっていると、どうも壊れかけのノートPCではCPUがいきなりBusyになったりしてます。そろそろやばそうなので、壊れる前にバックアップをとりつつMacに環境を移行中。 CLAPACKのMacビルドは、、ちょっと面倒そうですね。でも、先人でインストール方法を書かれている方もいらっしゃいますのでそれを参考に。 論文の実装は牛歩前進中ですが、精度がどうも保てないのでもうちと踏み込んだ研究がいりそう。 まだ整備がされていない(と思っている)分野は面白いのですが、ネット情報がある範囲を超えると参考にならないという未踏の地なので「はやまったか」という焦りが^_^;;。片っ端から関連するものを試してみたのですが、、、安定しない、、、。全体のめぼしはなんとなくついているのですが、推定の計算はノイズに弱いというのがわかったかもしれません(近似はするのですがちょっとしたことで発散してしまう)。 一カ所がクリアできればずいぶん進むのですが、、、新しい理論が考えられないかな、もっと深く追いかけてみることにしよう。 !!CLAPACK関連は別途まとめ中(2009/01/12) CLAPACK関連の覚書は、自身の勉強もかねて「[[数学]]」というページにまとめるようにしています。 今の実装で使っているので内容を移しているだけではありますが・・・。 もう少し余裕ができてから、情報追加していきます(今は集中してるので息抜き以外ちと余力が)。 しかし、論文実装はまだまだ先が長いです。1つ問題が解決したら次は別のが、、、という感じ。う〜ん、いまいち地に足が着かないというか安定しないなぁ。 少しこの日記やメールなど応答が遅くなりますがご了承くださいませ。 三連休はずっと論文理解+プログラムで戯れてました。 後、自宅のノートPC(Windows)の音源がついにぶっ壊れました。 ということで、音がならない、ニコニコが見れない(T_T)。 去年末に買ったMacノートに環境を移行しようと思って、USBメモリを買ってきたのですが、2GBで680円でした。安い・・・。 でも、音楽ソフト(SONAR)が移行できないのはつらいなぁ。やっぱり、Windows環境が手元にあるほうがよいか、でも今は散財するわけにはいかないのでしばらくは音がならないWinノートでしのごう。 !!擬似逆行列(2009/01/03) あけましておめでとうございます。 元旦も相変わらずプログラムで年越しでした。まだ去年から頭を悩ましている論文の問題解決ができてません。 でも、ちゃんと息抜きはしております(地元の連れと夕飯したり散歩したり)。 さて、数値演算ライブラリであるCLAPACKを使った例で何か手ごろなのはないかなということで「擬似逆行列」を考えてみます。CLAPACKでは擬似逆行列処理の関数はありませんので。 正則な行列(逆行列を持つもの)は dgetrf_ dgetri_ 関数を使うことで求まります。これは簡単なので後で。 擬似逆行列は、行列の乗算・特異値分解・転置が含まれます。 !擬似逆行列とは? Wikipediaみたほうがはやいですが。 http://ja.wikipedia.org/wiki/%E6%93%AC%E4%BC%BC%E9%80%86%E8%A1%8C%E5%88%97 Aを行列とすると、 {{math A^+ A A^+ = A\\A A^+ A = A}} となるときの{{math A^+}}を擬似逆行列とよんでいます。 逆行列を持たない行列の場合に擬似として使用する行列です。 また、Aの擬似逆行列のさらに擬似逆行列を求めると、Aに戻ります。 {{math (A^+)^+=A}} これらの条件を「本当にこのCLAPACKを使った擬似逆行列計算は正しいのか」のチェックサムとして使うことにしましょう。 !擬似逆行列の求め方 行列A(縦m、横nのm x n行列)が与えられたときの 特異値分解を、以下のように計算します。 {{math A = U S V^T}} 行列 U は、m x n の正規直交行列、 行列 S は、n x n の対角行列(対角要素がn個の特異値をあらわす)、 行列 V は、n x n の正規直交行列、となります。 また、{{math V^T}}については、Tの表記にて転置を表します(縦の列と横の行を入れ替えた構成)。 特異値分解は、中身はよく分からないけど(QR法とかで求めることができる)うにゃうにゃしたら直交行列とその他に分解できる、分解して出来た行列Sの対角線上に特異値が入っている、というもの。 特異値分解の中身は私よく知りません。で、ブラックボックスで使うことにします(CLAPACKバンザイ!!)。 行列Sは、 {{math S = \begin{bmatrix} a1&0&0&0\\ 0&a2&0&0\\ 0&0&a3&0\\ 0&0&0&a4\\ \end{bmatrix} }} のようになり、ここのa1、a2、a3、a4が特異値になります。 もちろん、UとSとVの転置の各行列を掛け合わせると元の行列Aが復元できる、というのは分かりますね。これもチェックサムとして使用しましょう。 では、擬似逆行列{{math A^+}}を求めるには、特異値分解で求めたU、S、Vの行列より {{math A^+ = V S^{-1} U^T}} の計算で求まります。 これをCLAPACKにて実装していくことにします。 ということで次回へ。