CPPLAPACKの導入法
CPPLAPACKの導入法
CPPLapackは BLAS および LAPACK の C++ クラスラッパーです.
CPPlapack自体はヘッダーのみで構成されていて,CPPlapackが内部でlapackやatlasライブラリを呼び出すことによってユーザが簡単にC++でlapackやatlasライブラリを使用できるようにしたものです.
http://cpplapack.sourceforge.net/doc/main_page/Japanese.html
このURLが参考となるかもしれません.
~Linux編~
1.ライブラリのインストール
Synaptic(Ubuntuなら)パッケージ・マネージャでlapackを検索して適切なものをインストールしてください.(下記はVine Linux 4.2の一例)
また,コマンドからインストールする方法は,
としてroot権限になります(この作業は各Linuxとも共通です).Ubuntuの場合は
としなければならないかもしれません.(ローカルユーザの場合)
rootユーザになってから
Ubuntuやdebianなどの環境なら
でインストールをしてください.最新のUbuntu8.10では,パッケージ名がliblapack3gfという名前に変わっているので注意してください.
また,Fedoraなどでは
でインストールができます.また,OS等によりパッケージ名は変わるので適宜検索等を行い調べて適切なものをインストールしてください.
ここで,CPPLapackのプロジェクトページよりヘッダーのダウンロードをしましょう.
http://sourceforge.net/projects/cpplapack/
よりcpplapack-2005_03_25.tar.gzをダウンロードします.
このようにコマンドで直接ダウンロードしてもかまいません.
そこで,できたcpplapackを解凍します.
そして,
として解凍したフォルダに入りましょう.
すると中には
とあると思いますので,ここでrootユーザとなって/usr/local/以下にインストールしましょう.
このようにして/usr/local/includeの中にcpplapackのヘッダーをコピーしてください.このディレクトリにコピーすることによりコンパイラはヘッダーファイルを見つけることが可能となります.
また,rpmコマンドが使える環境(Fedora, Vine(Ubuntuもインストールしているなら))ならcpplapackのプロジェクトページよりcpplapackのrpmパッケージをダウンロードしてインストールした方がより簡単に済みます.
rootになってからrpmコマンドでインストールします.(すでにrootユーザの場合suコマンドは不要)
この場合cpplapackが/usr/include下に自動的にインストールされるので標準ライブラリを使う時と同様に扱え便利です.(コンパイル時にディレクトリを指定する特殊な操作が不要ということ)
2.サンプルプログラムの実行
では,準備ができたらサンプルを作成してコンパイルを行ってみましょう.
ホームディレクトリにtest.cというファイルを用意し
1 2 3 4 5 6 7 8 9 10 11 | #include <cpplapack.h> int main() { CPPL::dgematrix A(2,3); A(0,0)=1; A(0,1)=7; A(0,2)=5; A(1,0)=3; A(1,1)=4; A(1,2)=6; std::cout << A << std::endl; return 0; } |
と入力してください.コンパイルの方法は
とすると,ホームディレクトリにtestが作成され
とこのような結果となればインストールは成功です.
ここでCPPL::i()は逆行列を求める関数ですが,この関数を用いる場合はコンパイル時にライブラリをリンクする必要があります.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <cpplapack.h> int main() { CPPL::dgematrix A(2,2); A(0,0)=1; A(0,1)=7; A(1,0)=3; A(1,1)=4; std::cout << A << std::endl; CPPL::dgematrix B = CPPL::i(A); std::cout << B << std::endl; return 0; } |
このようなAの逆行列を求める場合は
としてコンパイルする必要があります.(-llapackで/usr/libディレクトリに存在するliblapack.*** (***は環境により異なる)というライブラリをリンクするという意味です.)
3.基本的な使用例
cpplapackで主に使うクラス,変数はdgematrix(一般行列),drovector(行ベクトル),dcovector(列ベクトル)でしょう.これらは四則演算等の演算子がそのまま使えます.(演算子オーバーロードされている)
http://cpplapack.sourceforge.net/doc/html/index.html
このページに詳しく書かれているので,どのようなメンバ関数があるのかは自身で調べてください.
サンプルとして行,列ベクトルのそれぞれの掛け算と逆行列,逆行列,転置を載せておきます.参考にしてください.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <iostream> #include <cpplapack.h> int main() { CPPL::dgematrix A,iA,tA;//一般行列 CPPL::drovector R(2);//行ベクトル CPPL::dcovector C(2);//列ベクトル double S; R(0) = 3; R(1) = 4; C(0) = 5; C(1) = 6; A = C*R;//列x行 S = R*C;//行x列 iA = CPPL::i(A);//逆行列 tA = CPPL::t(A);//転置 std::cout <<”R n” << R << std::endl; std::cout <<”C n”<< C << std::endl; std::cout <<”A n”<< A << std::endl; std::cout <<”S n”<< S << std::endl; std::cout <<”iA n”<< iA << std::endl; std::cout <<”tA n”<< tA << std::endl; return 0; } |
実行例
4.分割コンパイル方法
(複数のソースコードファイルに分けたプログラムのビルド方法)
プログラムを書いていくとコードが非常に長くなり,ある特定の機能を持つモジュールを特定のファイルに分割してコンパイルしたい場合があります.そのようなときに役立つのがMakefileです.書き方はいろいろありますが,一例を載せておきます.
このような書き方でsample.cppをmain関数の存在するメインファイルとして,cpplapack_plus.h,cpplapack_plus.cppが新たに作ったモジュールとしてファイルを分割してコンパイルすることが可能です.
コンパイルするときはmakeとすれば,
このようにコンパイル可能です.
また,新たにファイル(例えばadd.cpp と add.hというファイルを追加するとする)を作成しMakefileへと追加する場合はMakefileの内容を
のように変更すれば,追加することができます.(赤色の部分が変更点)
~Windows編~
まず,CPPLAPACKのヘッダーをダウンロードしてください.
http://sourceforge.net/project/showfiles.php?group_id=78519&package_id=87720&release_id=315440
よりcpplapack-2005_03_25.tar.gzをダウンロードして解凍してください.
適当な解凍ソフトで解凍したのち,その得られたcpplapack-2005_03_25とうフォルダをC:に置いてください.
次にライブラリの準備をします.
ライブラリを
http://www.netlib.org/clapack/index.html
のサイトからCLAPACK-3.1.1-VisualStudio.zip
をダウンロードして,解凍したフォルダCLAPACK-3.1.1-VisualStudio
を同様にC:直下に置いてください.
C:直下に図のようにおけたらVisualStudioを起動しましょう.
VisualStudioを起動したら
メニューのツールよりオプションを選択してください.
オプションを開いたら,左のメニューの「プロジェクトおよびソリューション」の中の「VC++ ディレクトリ」を選び,ディレクトリを表示するプロジェクトのコンボボックスの中の「インクルードファイル」を選択します.
そしてを押して新しい行を追加し,その右側のを押し先ほどC:直下に置いたcpplapack-2005_03_25の中のincludeファイルを選択します.
(C:cpplapack-2005_03_25includeこのディレクトリを追加します.)
同様に,コンボボックスを「ライブラリ ファイル」に変更して同じようにを押して新しい行を追加し,
その右側のを押し,CLAPACK-3.1.1-VisualStudioの中のLIBの中のWin32を選択します.(64bitOSならx64を選択)
(C:CLAPACK-3.1.1-VisualStudioLIBWin32このディレクトリを追加)
以上で設定は完了です.
おつかれさまでした.準備ができたらサンプルコードを書いてインストールができたかを見ましょう.
新たにVisualStudioを起動したら,プロジェクトを作成してください.
「Win32コンソール アプリケーション」を選び,プロジェクトを作成してください.作成できたらまずプロジェクトのプロパティを開き,ライブラリをマルチスレッド又はマルチスレッド デバッグに変更してください.
変更できたらソースにこのようにタイプしてください.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
// cpplapack_test.cpp : コンソールアプリケーションのエントリポイントを定義します。 //プリコンパイル済みヘッダーファイルを使用する(/Yu)場合はインクルード #include “stdafx.h” #include <cpplapack.h> //ライブラリリンク #ifdef WIN32 #ifdef _DEBUG #pragma comment(lib,”f77blaswrapd.lib”) #pragma comment(lib,”libf2cd.lib”) #pragma comment(lib,”BLASd_nowrap.lib”) #pragma comment(lib,”clapackd_nowrap.lib”) #else #pragma comment(lib,”f77blaswrap.lib”) #pragma comment(lib,”libf2c.lib”) #pragma comment(lib,”BLAS_nowrap.lib”) #pragma comment(lib,”clapack_nowrap.lib”) #endif #endif int main() { CPPL::dgematrix A(2,2); A(0,0)=1; A(0,1)=7; A(1,0)=3; A(1,1)=4; std::cout << A << std::endl; CPPL::dgematrix B = CPPL::i(A); std::cout << B << std::endl; return 0; } |
このようにタイプして,正常にコンパイルが通り,
このような結果となればOKです.お疲れ様でした.
補足説明:
8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//ライブラリリンク #ifdef WIN32 #ifdef _DEBUG #pragma comment(lib,”f77blaswrapd.lib”) #pragma comment(lib,”libf2cd.lib”) #pragma comment(lib,”BLASd_nowrap.lib”) #pragma comment(lib,”clapackd_nowrap.lib”) #else #pragma comment(lib,”f77blaswrap.lib”) #pragma comment(lib,”libf2c.lib”) #pragma comment(lib,”BLAS_nowrap.lib”) #pragma comment(lib,”clapack_nowrap.lib”) #endif #endif |
これは,ソースコードでどのライブラリをリンクするかを指定しています.Linuxでのg++オプションの”-llapack –lblas –lf2c”に相当するものです.このこのように
#ifdef WIN32
#endif
で括っておけばソースコードをLinux環境のg++でコンパイルしても無視されるため,他環境への移行も簡単になります.また,
#ifdef _DEBUG
ではビルドの設定を指定しています.Debugモードでビルドする場合はVisualStudioで自動的に
#define _DEBUG
とマクロが定義されるために_DEBUGが有効になりビルドモードに応じて適切なライブラリがリンクされます.
~Linux編おまけ~
Lapackなどのライブラリをパッケージ・マネージャでインストールすることができない環境での構築法を書いておきます.以下かなり操作が煩雑になります.
CLAPACKとATLASというライブラリをソースコードからコンパイルしてライブラリを作成します.
まず,
http://sourceforge.net/project/showfiles.php?group_id=23725
からStable版のatlasライブラリをダウンロードします.
09/3/4時点ではatlas3.8.3.tar.gzが最新版のようです.
atlas3.8.3.tar.gzをダウンロードしたら,解凍します.
するとATLASというフォルダができるので,そのディレクトリに入ってATLASライブラリをコンパイルします.そこで
として,ATLASディレクトリの中に新たなMyObjというディレクトリを作成します.そしてMyObjディレクトリの中に入り下記のコマンドを打ちます.
エラーが出ずにconfigureが終わればそのまま
と打ち,コンパイルが完了するのを待ちます.コンパイルが完了するとMyObj以下のlib/フォルダにlibatlas.a libf77blas.a libptcblas.a libtstatlas.a libcblas.a liblapack.a libptf77blas.aというライブラリができているのを確認してください.
そして,このライブラリはいったんこのままにしておき,次にlapackの準備をします.
http://www.netlib.org/clapack/index.html
よりclapack.tgzをダウンロードします.
ここで先ほど作成したATRASのライブラリをこのCLAPACKフォルダにコピーします.
となり,コピーできたら次にCLAPACKのmake.inc.exampleを編集します.
make.inc.exampleの中の
を
と書き換えます.そしてmake.inc.exampleをmake.incとリネームします.
と打ち,コンパイルが正常に完了するのを待ちます.コンパイルが完了するとディレクトリの中が
となり,新しくlapack_LINUX.a,libcblaswr.aができているのを確認してください.
次に,順に下記のコマンドを打ち
と打っていきます.するとディレクトリは
のようになっていればOKです.ここで新たにliblapack.aとlibblas.aがあればOKです.また,libf2c.aはF2CLIBS/フォルダの中にあります.
それも必要なら~/libに入れておきましょう.
このliblapack.aとlibblas.aの二つのライブラリをホームディレクトリにlibフォルダを作成してその中に入れておきます.
ライブラリのコンパイルが完了しました.このライブラリを実際に使用するには,先のサンプルをコンパイルするときに
としてコンパイルしてください.お疲れ様でした.
参考にしたURL
http://www.eml.hiroshima-u.ac.jp/member/staff/tamaki/LTI-Lib/index.php?LAPACK%2BATLAS
資料作成のために研究室のscuderia(Xeon Ubuntu 2.6.22-15-generic x86_64)マシンとmondeo(Pentium4 Fedora 2.6.25.9-40.fc8 i686)でライブラリコンパイルして作成し,テストプログラムの動作を確認した.(mondeoではCPPL::t 転値が使用できなかった)
じゃろうが 2009-08-27 (thu)
大変参考になりました。
ありがとうございます!
たにちゅー 2009-08-27 (thu)
そういっていただけると何よりです!
がんばって下さい!
たにちゅー 2009-12-17 (thu)
上記の方法でやるとwindowsでコンパイルエラーが起きるようになっている・・.
■[C++]Visual Studioでcpplapack-2005_03_25を使うとC2440エラーになる
http://d.hatena.ne.jp/babydaemons/20090728/1248775645
http://sourceforge.net/projects/cpplapack/forums/forum/267868/topic/1374927
VC7コンパイラのバグだそうですが,
そんなのありかよって感じッスネ
たにちゅー 2009-12-17 (thu)
1>c:\cpplapack-2005_03_25\include\dgematrix-\dgematrix-misc.hpp(163) : error C2061: 構文エラー : 識別子 ‘A’
1>c:\cpplapack-2005_03_25\include\dgematrix-\dgematrix-misc.hpp(165) : error C2440: ‘=’ : ‘double **(__cdecl *)(void)’ から ‘double **’ に変換できません。
1> この変換が可能なコンテキストはありません。
このようなエラーが出ることがありますが,
これはVC7のバグだそうで,
エラーの時に指摘されるファイル群について
“*-misc.hpp”の中にあるswap関数で
double** A_darray(A.Darray);
==> double** A_darray=A.Darray;
のような修正をすればOKだそうです.
vectorについて同じような,ファイルが後数個ありますが
それらも同様に宣言部の()を= に切替える事で対応します.
上記サイトより.
おでゅる 2010-12-14 (tue)
はじめまして,たにちゅーさん.
こちらのサイトとても参考になります.ありがとうございます.
しかし,小姓未だにコンパイルエラーが出てうまく実装することができておりません.
もしよろしければ,少しご教示戴けますでしょうか?
小姓の環境は下記の通りです.
win-xp上で,VC++2008,Cygwin + g++ この2 つの環境で行っています.その中で以下のエラーがそれぞれ出ます.
また,ソースはたにちゅーさんもリンクされていたページの固有値問題のままです.
VC++2008:CPPL::t(A),CPPL::i(A)といった基本的な演算はできるのですが,A.dgeev(wr, wi ,vrr, vri)といった計算を行わせようとすると,
error LNK2019: 未解決の外部シンボル __imp___CrtDbgReportW が関数 “public: double & __thiscall std::vector<double,class std::allocator >::operator[](unsigned int)” (??A?$vector@NV?$allocator@N@std@@@std@@QAEAANI@Z) で参照されました。
: fatal error LNK1120: 外部参照 1 が未解決です。
とこのような,エラーが出てコンパイルが通りません.
なお,マルチスレッドの部分並びに,追加の依存ファイルにCLAPACK関連ライブラリは既に記述しています.
Cygwin + g++:CPPL::t(A)はできるのですが,CPPL::i(A)は
(.text$_ZN4CPPL9dgematrixC1ERKSO_[CPPL::dgematrix::dgematrix(CPPL::dgematrix const&)]+0xd5): undefined reference to ‘_dcopy_’
となってしまい,コンパイルが通りません.
また,A.dgeev(wr, wi ,vrr, vri)も同様のエラーがでるのですが,A.dgeev(wr, wi)とした場合は一応動作しました(但し,2 th eigen valeの値があちらの結果とは違っていました)ので,vectorで定義されているものが,何か悪さをしているのかもしれません.
もしよろしければ,ご教示くださいませ.
じゅんこ 2011-02-12 (sta)
細かい事で申し訳ないのですが,2点ほど。
VC++で使う際ライブラリリンクの部分をこのサイトから
コピーすると,”"の部分が全角になっているためエラーが
でるので注意してください。
もう一点は,すでに指摘されているとおり 同じくVC++で使用する際,cpplapack.hのある部分を書き換えなければなりませんが
double** A_darray(A.Darray);
==> double** A_darray=A.Darray;
もう一箇所,書き直さなければならないケースがありました。
ビルドした際,エラー箇所が出ると思います。
これと同様にして書き直すとエラーが出なくなりました。
bmLcDmAMqZ 2024-02-25 (sun)
Лучше несколько раз повторить, чем не делать совсем http://cy41275.tw1.ru/#oaKQZxe7Sbn&utm_medium=mWxqQ9aCPxm 000*** tanichu.com
BagssjpMum 2024-02-28 (wed)
ミュウミュウコピー、トリーバーチコピー、バレンシアガコピー、ディオールコピー、ブルガリコピー、ブラダコピー、 ドルチェ&ガッバーナコピー、オメガコピー、フランク ミュラーコピー、gagaコピー。ルイヴィトン 時計 コピールイヴィトン 靴 コピールイヴィトン アクセサリー コピールイヴィトン 小物入れ コピールイヴィトン コインケース当店の全ての商品は、全部一番安い値段で販売いたします!ご来店を期待しております!スーパーコピーブランド弊社は安心と信頼のスーパーコピーブランド (N級品)専門店です!全国送料無料!日本一流品質のスーパーコピー時計、ブランド財布コピー、ブランドバッグコピー新作最新入荷!ロレックススーパーコピー }}}}}}
https://www.bagssjp.com/product/detail-6620.html
RobertJatly 2024-04-01 (mon)
https://gruzchikov19.ru/
Williammaymn 2024-04-01 (mon)
https://gruzchikinesti.ru/
Alberttow 2024-04-02 (tue)
https://gruzchikibol.ru/
Roccoiceme 2024-04-02 (tue)
https://gruzchikivagon.ru/
Scottfluit 2024-04-02 (tue)
https://gruzchikistudent.ru/
Frankthush 2024-04-02 (tue)
https://gruzchikikorob.ru/
Frankthush 2024-04-02 (tue)
https://gruzchikjob.ru/
ElmerHot 2024-04-03 (wed)
https://gruzchikivrn.ru
Jaredrem 2024-04-04 (thu)
https://gruzchikivrn.ru/
Richarddus 2024-04-06 (sta)
демонтаж москва
https://demontagmoskva.ru/
Willienab 2024-04-06 (sta)
https://diplom-sdan.ru/
Willienab 2024-04-07 (sun)
https://diplomnash.ru/
Anthonyhauff 2024-04-07 (sun)
https://kursovaya-student.ru/
Anthonyhauff 2024-04-07 (sun)
https://breaking-bad-serial.online/
Robertnon 2024-04-08 (mon)
https://kursovaya-pishu.ru/
Williamhar 2024-04-08 (mon)
https://kvartiruise.ru/
Dennisupdax 2024-04-08 (mon)
https://kvartiruless.ru/
Waltercem 2024-04-08 (mon)
https://kupikvartiruor.ru/
Robertererb 2024-04-09 (tue)
https://kvartiruyze.ru/
WilliamTag 2024-04-09 (tue)
https://kvartirulyspb.ru/
ColbyBut 2024-04-09 (tue)
отели в сочи с бассейном
ColbyBut 2024-04-09 (tue)
отели в сочи
JesseSal 2024-04-10 (wed)
https://kvartiruerspb.ru/
Derekamups 2024-04-10 (wed)
https://zhkstroyspb.ru/
RonnieTuper 2024-04-10 (wed)
https://zhkstroykaspb.ru/
Ralphral 2024-04-10 (wed)
https://kvartiruekb.ru/
EdwinSmear 2024-04-11 (thu)
https://zhknoviydom.ru/
RafaelHen 2024-04-12 (fri)
https://noviydomstroika.ru/
Jesustal 2024-04-12 (fri)
https://reshaitzadachi.ru/
CurtisMum 2024-04-14 (sun)
https://t.me/s/SecureIyContactingClAbot
CurtisMum 2024-04-14 (sun)
https://t.me/SecureIyContactingClAbot
DavidPorne 2024-04-15 (mon)
http://womangu.ru
Williamkam 2024-04-15 (mon)
Услуга по сносу старых домов и вывозу мусора в Москве и Московской области. Мы предоставляем услуги по сносу старых зданий и удалению мусора на территории Москвы и Подмосковья. Услуга разобрать дом в московской области выполняется опытными специалистами в течение 24 часов после оформления заказа. Перед началом работ наш эксперт бесплатно приезжает на объект для оценки объёма работ и консультации. Чтобы получить дополнительную информацию и рассчитать стоимость услуг, свяжитесь с нами по телефону или оставьте заявку на сайте компании.
Williamkam 2024-04-15 (mon)
Услуга по сносу старых домов и вывозу мусора в Москве и Московской области. Мы предоставляем услуги по сносу старых зданий и удалению мусора на территории Москвы и Подмосковья. Услуга снести дом выполняется опытными специалистами в течение 24 часов после оформления заказа. Перед началом работ наш эксперт бесплатно приезжает на объект для оценки объёма работ и консультации. Чтобы получить дополнительную информацию и рассчитать стоимость услуг, свяжитесь с нами по телефону или оставьте заявку на сайте компании.
RussellQuire 2024-04-15 (mon)
Услуга по сносу старых зданий и утилизации отходов в Москве и Московской области. Мы предоставляем услуги по сносу старых сооружений и удалению мусора на территории Москвы и Московской области. Услуга http://demontazh-doma-msk8.ru выполняется квалифицированными специалистами в течение 24 часов после оформления заказа. Перед началом работ наш эксперт бесплатно посещает объект для определения объёма работ и предоставления консультаций. Чтобы получить дополнительную информацию и рассчитать стоимость услуг, свяжитесь с нами по телефону или оставьте заявку на сайте компании.
RussellQuire 2024-04-16 (tue)
Услуга по сносу старых зданий и утилизации отходов в Москве и Московской области. Мы предоставляем услуги по сносу старых сооружений и удалению мусора на территории Москвы и Московской области. Услуга снести дом цена выполняется квалифицированными специалистами в течение 24 часов после оформления заказа. Перед началом работ наш эксперт бесплатно посещает объект для определения объёма работ и предоставления консультаций. Чтобы получить дополнительную информацию и рассчитать стоимость услуг, свяжитесь с нами по телефону или оставьте заявку на сайте компании.
Michaelambuh 2024-04-16 (tue)
https://kursovuyupishem.ru/
ManuelCes 2024-04-17 (wed)
Каталог салонов эпиляции https://findepil.ru/ Москвы и Московской области. Химки, Люберцы, Красногорск, Зеленоград и т.д. Все виды эпиляции - электроэпиляция, депиляция воском, шугаринг, лазерная эпиляция. Можно выбрать салон по цене, для примера выбраны стандартные процедуры эпиляции - руки воск, ноги шугаринг. Каталог постоянно пополняется.
Brentdug 2024-04-17 (wed)
The calculator on a smartphone is very constrained in functions. As an architect, I often require a scientific online calculator, such as this https://calculator-online.info/. It is effective for various tasks like financial calculations, percentage calculations, solving complex equations, finding square and cube roots, and more
DanielElasy 2024-04-17 (wed)
Журнал для женщин http://womangu.ru/ - актуальные новости о звездах и шоу-бизнесе, модные тенденции, статьи об отношениях, красоте и здоровье, рецепты и каталог диет на женском портале.
LarrySaili 2024-04-17 (wed)
https://praktikaotchet.ru/
ThomasEssem 2024-04-17 (wed)
https://praktikaucheba.ru/