こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Windowsでも使える行列演算ライブラリについて

プログラミングで行列演算ライブラリを使いたいのですが、開発環境が特殊でMATLABのs-functionというのを使っているため、Windows環境の行列演算ライブラリを探しております。

開発環境が特殊なためCygwinとかも使えません。今のところCLAPACK、CPPLAPACK、BOOSTを使っていますが他に使えそうなライブラリはないでしょうか?使えそうなライブラリはいつもlinuxなんです。 TwT

またlinuxなどのUNIX系OSでコンパイルされた拡張子.aのライブラリファイルはWindowsではやはり使えないんでしょうか?

よろしくお願いします.

投稿日時 - 2009-11-18 15:43:37

QNo.5457785

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

こんにちは.

なかなか他の回答がつきませんね…

SuperLUは何とか Windows で利用しようという向きもあるようですよ.
Octave という数値計算ソフトウェアのアドオンである Octave Forge というプロジェクトで扱いがあるようです.
世の中のオープンソースのライブラリが Windows で単純に使えないのは,
ほとんどが自動的なソースコードのコンパイル機能の問題です (make というコマンドです).
Visual C++ にも「一応は」 nmake というものがありますが,
UNIX 系 OS の make と微妙に違った文法で覚えるのがいちいち面倒です.
フリーウェアで研究する UNIX 利用者が Windows を相手にしたくない理由の一つです.

さて,何とか Windows で UNIX の make を使いたい場合は Cygwin です.
ただし,ここで作った .a ファイルは一寸した工夫をすると Cygwin の外で利用できます.
Cygwin のバイナリは UNIX 環境を Windows に作るための cygwin1.dll というファイルに依存しています.
これが Cygwin がないと利用できない,と言われる原因です.
折角 Windows を使うわけですから,余計な外部依存は無い方が良いです.
この開発方針を採用する MinGW というプロジェクトがあり,
これは Windows 上で単体で利用可能なバイナリを作ってくれます.
この MinGW は Cygwin と同時にインストールできます.

Cygwin で gcc に -mno-cygwin オプションをつけると MinGW が利用されます.
こうしてできた .a ファイルの実体は Visual C++ の スタティックライブラリである .lib ファイルとほとんど同じですから,
その利用法も比較的簡単です.
さらに,ここに MinGW の dllwrap というコマンドを使い DLL を作ります.
このときについでにシンボル名の抽出を行いモジュール定義ファイル(.def)を作っておきます.
この .dll ファイルと .def ファイルを Visual C++ の lib コマンドで処理すると,
Visual C++ から利用可能なインポートライブラリ(.lib)を作ることができます.
後はこの .dll 本体と インポートライブラリ (.lib),
ライブラリのヘッダファイル等を Visual C++ のプロジェクトに登録するだけです.

Linux のシステムコールなど余程特殊な機能を使っていない限り,
大抵のライブラリは上記の方法で利用可能になるものと思われます.
ただし,非常に手間がかかりますが…

投稿日時 - 2009-11-29 18:35:45

ANo.1

行列演算ライブラリなら,それこそ MATLAB のライブラリを叩けば良いでしょう.
何故わざわざ他のライブラリを利用しようとするのでしょうか.
特に CLAPACK を利用するというのが意味不明です.
MATLAB の行列演算部分は LAPACK ですし,
BLAS は最近のバージョンで Windows なら intel の MKL 由来でしょうか.
C-MEX から利用できますよね(参考 URL).

さて,
> またlinuxなどのUNIX系OSでコンパイルされた拡張子.aのライブラリファイルはWindowsではやはり使えないんでしょうか?

についてですが,それは「無理」です.
ただし, cygwin でコンパイルしたライブラリファイルを,
cygwin の 外で使う方法はあります.
DLL を作って cygwin 環境無しに Visual C++ から使うこともできますよ (64bit だと分かりませんが).

…ところで,「使えそうなライブラリはいつもlinuxなんです」とのことですが,
暇と根気さえあれば何とかなってしまうように思うのですが.
企業秘密に抵触するとかでなければ,一寸した興味があるので,
どんなライブラリを使おうとしたのかについてお聞きかせください.

参考URL:http://www.mathworks.com/access/helpdesk_archive_ja_JP/r13/help/toolbox/matlab/matlab_external/ch03cr15.html

投稿日時 - 2009-11-19 14:21:32

補足

>>行列演算ライブラリなら,それこそ MATLAB のライブラリを叩けば良いでしょう.
>>何故わざわざ他のライブラリを利用しようとするのでしょうか.
>という部分ですが、MATLABのライブラリはm-fileで書かれてますよね?
>s-functionだとMATLABの関数よりもCで書かれた関数の方がどうしても処理が早いので使ってないんです。

という部分は僕の勘違いでした。LAPACKをMATLABで呼び出すことができるなんて初めて知りました!ありがとうございます!

投稿日時 - 2009-11-21 03:03:02

お礼

丁寧な解答ありがとうございます。

>行列演算ライブラリなら,それこそ MATLAB のライブラリを叩けば良いでしょう.
>何故わざわざ他のライブラリを利用しようとするのでしょうか.
という部分ですが、MATLABのライブラリはm-fileで書かれてますよね?
s-functionだとMATLABの関数よりもCで書かれた関数の方がどうしても処理が早いので使ってないんです。


>ただし, cygwin でコンパイルしたライブラリファイルを,
>cygwin の 外で使う方法はあります.
>DLL を作って cygwin 環境無しに Visual C++ から使うこともできますよ
これははじめて知りました!すばらしい情報ありがとうございます!

最後にlinuxのライブラリですが、僕はスパース行列を演算できるライブラリなどを探しているんですが、KLUとかsuperLU,Pardisoなどです。これらのライブラリはすべてlinuxで使うか、matlab内でm-fileとして呼び出す
ということがデフォルトでできるようになっています。
ただどうしても、行列演算の処理が早いプログラムを組みたい。
しかし、環境はwindowsのMATLABのS-funから呼び出さなければならない。
なので、windowsで使えそうなライブラリを探していました!

投稿日時 - 2009-11-21 03:02:02

あなたにオススメの質問