Friday, November 07, 2008

Laboratory::Programming - SVDPACKCをVC++でコンパイル

うちの研究室の先生のお手伝いとして,
ベクトル空間モデルを実装しそうな勢いなのです.

いやまぁ以前私も一時手を出しかけて出さなかったんですけどね,実装には.
ベクトル空間モデルやるからには,LSIまで手を出したかったのですが,
特異値分解のところで躓いてあきらめたのでした.

そのときも,SVDPACKCを使えばよいというのはわかっていたのですが,
なにぶんうまくコンパイルできない,落ちる,入出力フォーマット意味不.
とグダグダだったので,あきらめちゃったのですが.

今回ちょっとリトライしてみることにしました.
ただ,先生の用件としては,
私が書こうしているプログラムはANSI Cで書けという.
C++かPerlで書かせてくださいよーと嘆願したんですが,
俺があとあといじるかもしれへんからC!といわれました.
しかもWindowsでコンパイルできないと行けなく,
Cygwinとかも使わない方なので,VC++でコンパイルできるのが望ましいわけで.
しかし私としてはLinuxででもコンパイルしたいので,
そこらへん気を使って書いていかないといけません.

ベクトル空間モデルの実装自体は簡単なのでいいんですが,
LSIですよねー.
やっぱSVDPACKCか?と思って情報を集めていたら.

www.koguchi.be - SVDPACKC

こちらを参考に,SVDPACKCのlas2.cを修正してみました.
結構修正しないといけませんねー.
で,VC++ express 2008でコンパイルしたわけですが,
リンカでこけてしまいます.
プロジェクトに追加したのはlas2.c, las2.h.
_timerが見つからないよーとリンカにおこられます.
_timerってなんやねん!と思ってたんですが,
timersun.cも必要なのですね.ここに定義してあります,timer()が.
プロトタイプ宣言はlas2.cにあるんですよね,気持ち悪.
で,timersun.cなんですが,こいつはVC++ではコンパイルできませんでした.
仕方ないので,timerのプロトタイプ宣言のところを,
0.0を返す関数定義に変えてやりました.
まぁ時間なんて計測する必要は,私には無いので.
特異値分解ができればそれでおっけぃですから.

てなわけで,コンパイル完了,バイナリが出来上がりました.
コンソールアプリの.

実際動かしてみて,特異値分解ができているくさいです.
さてさて,あとはこの出力されたファイルの中身がどうなっているのか,
入力するファイルの形式とかはどうなのか.
はっきり調べて,先生に頼まれるであろう実験用プログラムの開発をしていかないとですね.
ちなみに先生専用というわけでもなく,
ゆくゆくは私も使うことになりそうなので,ちょっと気合入れて書いていたりします.
というか,絶対Perlラッパー書いてやろうとか思ってます.

No comments: