WindowsのMinGWでlapackを使う
Windowsでlapackは使える???
数値計算の世界で欠かせない存在であるFortranとBLAS、lapack。
これらはLinuxやMacOSなら結構簡単に導入ができます。
しかしながら、WindowsにおいてはCygwinやWSLを使った方法が主となっており、コマンドプロンプトなどでは使えない状況です。
そこで今回は、MinGWを用いてgfortranやgccを導入したマシンにおいて、lapackを使えるように設定します。
参考にしたサイト
LAPACK for Windows
こちらのサイトにすべて設定の方法が載っております。今回はこちらを参考にして実際の画面をもとに説明していきます。
Windowsへのインストール方法
lapack.tar.gzからファイルをダウンロードします.
CMAKEの .msi のインストーラーをダウンロードします.
CMAKEをインストールする. この際PATHを通しておくと楽./
管理者としてコマンドプロンプトを開き, ダウンロードしてきた lapack-3.~ のフォルダに移動します.
build, build_space という二つの新しいフォルダを作成します.
C:¥Users~> mkdir build build_space
cmake-guiを開きます. 次のコマンドを打ってください.
C:¥Users~> cmake-gui
Browse Source... というボタンを押して, lapack-3.~ のフォルダを選択する.
Browse Build... というボタンを押して, 先程作成した build_space をさがして選択してください.
Configure を押してください.
次のようなウインドウが出てくるので, MinGW Makefiles を選択して, Specify native compilers を選び, Next を押してください.
次のようなウインドウが出てくるので, 画像に書いてある通りにコンパイラの名前を入力して, Finish を押してください.
図のようにチェックを入れてください. CMAKE_INSTALL_PREFIX の Value を押して, 先程作成した build を探して選んでください.
再び Configure を押してください.
画面が白くなったら, Generate を押してください.
開いていたコマンドプロンプトで build_space に移動し, 次のコマンドを入力してください.
C:¥Users~> mingw32-make
終了したら, 同じ場所で次のようにコマンドを入力してください.
C:¥Users~> mingw32-make install
build に新しく lib, bin ができたら成功です.
MinGWの中(gfortranとかがあるところ)にある lib, bin に, 先程出来上がった build の中身をコピーしてください.
サンプルコード
lapack.tar.gzからファイルをダウンロードします.
CMAKEの .msi のインストーラーをダウンロードします.
CMAKEをインストールする. この際PATHを通しておくと楽./
管理者としてコマンドプロンプトを開き, ダウンロードしてきた lapack-3.~ のフォルダに移動します.
build, build_space という二つの新しいフォルダを作成します.
C:¥Users~> mkdir build build_space
cmake-guiを開きます. 次のコマンドを打ってください.
C:¥Users~> cmake-gui
Browse Source... というボタンを押して, lapack-3.~ のフォルダを選択する.
Browse Build... というボタンを押して, 先程作成した build_space をさがして選択してください.
Configure を押してください.
次のようなウインドウが出てくるので, MinGW Makefiles を選択して, Specify native compilers を選び, Next を押してください.
次のようなウインドウが出てくるので, 画像に書いてある通りにコンパイラの名前を入力して, Finish を押してください.
図のようにチェックを入れてください. CMAKE_INSTALL_PREFIX の Value を押して, 先程作成した build を探して選んでください.
再び Configure を押してください.
画面が白くなったら, Generate を押してください.
開いていたコマンドプロンプトで build_space に移動し, 次のコマンドを入力してください.
C:¥Users~> mingw32-make
終了したら, 同じ場所で次のようにコマンドを入力してください.
C:¥Users~> mingw32-make install
build に新しく lib, bin ができたら成功です.
MinGWの中(gfortranとかがあるところ)にある lib, bin に, 先程出来上がった build の中身をコピーしてください.
最後にサンプルコードを用意いたしました。
逆行列を求めて行列積を行うプログラムです。
確認のためにコピペして試してみてください。
gfortran test_lapack.f90 -lm -lblas -llapack
program inverse
implicit none
integer, parameter :: N=2
double precision A(N,N), A_inv(N,N), C(N,N), work(N)
integer :: lda=N, ipiv(N), info, lwork=N
print *,"A="
call random_number(A) ! ランダムで2x2行列を生成
call print_matrix(A,N) !行列の表示のためのサブルーチン
print *,"A_inv"
A_inv = A !行列を保存するために, A_invにAを代入しておいた
call dgetrf(N, N, A_inv, lda, ipiv, info)
call dgetri(N, A_inv, lda, ipiv, work, lwork, info)
call print_matrix(A_inv,N)
print *,"C"
call dgemm('N', 'N', N, N, N, 1.d0, A, N, A_inv, N, 0.d0, C, N)
call print_matrix(C,N)
end program inverse
!:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
!::: 行列表示のためのサブルーチン
!::: 引数はprint_matrix(_表示したい正方行列の配列_, _正方行列の行数_)
subroutine print_matrix(X,N)
integer i, j, N
double precision X(N,N)
do i=1,n
do j=1,n
write(*,fmt='(f15.8)',advance='no') X(i,j)
end do
write(*,*)
end do
print *, "==============================="
end subroutine
Author And Source
この問題について(WindowsのMinGWでlapackを使う), 我々は、より多くの情報をここで見つけました https://qiita.com/ryoi084/items/56ec137a58f2323bc689著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .