LAPACK / Xcode

線形計算のための数値解析ライブラリLAPACKがXcodeで標準で使える、ということを知って試してみました。

環境 : Xcode ver 6.1 / MacOSX 10.9.5

lapack1
コマンドラインツールとして作成します。

#import <Foundation/Foundation.h>
#import <Accelerate/Accelerate.h>

#define SIZE 2

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        int   m  = SIZE; // 行
        int   n  = SIZE; // 列
        int   lda  = SIZE;
        double A[SIZE*SIZE];
        
        int   info ;
        int   ipiv[SIZE];
        int   lwork = SIZE;
        double work[SIZE];
 
        A[0] = 1; A[2] = 2;
        A[1] = 3; A[3] = 4;
        
        // LU分解
        dgetrf_( &m, &n, A, &lda, ipiv, &info);
        // 逆行列
        dgetri_( &n, A, &lda, ipiv, work, &lwork, &info);
        
        printf("%+lf %+lf\n", A[0], A[2]);
        printf("%+lf %+lf\n", A[1], A[3]);
        printf("--------------\n");
        
        // LU分解
        dgetrf_( &m, &n, A, &lda, ipiv, &info);
        // 逆行列
        dgetri_( &n, A, &lda, ipiv, work, &lwork, &info);
        
        printf("%+lf %+lf\n", A[0], A[2]);
        printf("%+lf %+lf\n", A[1], A[3]);      
    }
    return 0;
}

lapack2
Accelerateフレームワークをインボートするだけで使えます。

プログラムは、逆行列を求めるものです。さらに逆行列を求めて元の行列を表示しています。

こんなに簡単に利用できるとは、ちょっと驚きました。
Macでは最近iPhone開発以外、あまり使っていませんでしたが、このような用途でも使いたくなりました。Swiftも試したいし・・

参考 :
http://auewe.hatenablog.com/entry/2013/11/25/024149

About

Categories: 未分類 タグ: