2010-11-29 12 views
5

iPhoneプラットフォームで以下のような行列を解く方法のコードサンプルがありますか?実際には、実際の行列ははるかに大きくなります(約100変数)。それは単純な線形代数であるため、コードが複雑であるとは思えません。数学ライブラリパッケージとLAPACKについても聞いたことがありますが、実装されている例は見つかりません。objCの複数の線形方程式を解く方法を示すコード例はありますか?

行列を作成して各変数を解決する方法の例やチュートリアルを知っている人は、本当にありがとうと思います。

____   ____ 
|     | 
| 4 3 -1 | 2 | 
| -2 3 8 | 0 | 
| 0 2 6 | -1 | 
|____   ____| 
+0

私は可能です:http://stackoverflow.com/questions/769/solving-a-linear-equation – zellus

+0

私はそれを見た複製。どのような方法を使うのか、それをどのようにプログラムするのか分かりません。だから、ベースラインを確立するためのサンプルを探したいのです。 – John

+0

Pressなどの数値メソッドは$ LANGUAGEでこのトピックの読んだほうがいいです。 – thiton

答えて

4

Objective-Cがオブジェクト指向の拡張機能を持つCであることを忘れないでください。任意のCライブラリをLAPACKを含むiPhoneアプリケーションにドロップできます。

LAPACK用のObjective-Cラッパークラスを作成したい場合は、LAPACKプロジェクトチームがこのパッチを受け入れることができないことを確信しています。

+0

例を見ると、私は線形代数を使って私の記憶をリフレッシュする必要があるので、かなりの数年です。私はそれが今統合されているので、私はLAPACKを使用したいですが、私はサンプルを見つけることができません。 – John

3

ここでは、AppleのLAPACKの実装であるCLAPACKを使用した線形システムを解決するためのコード例を示します。これはiOS 4.0以降で使用できます。

#define N 3 
#define NRHS 1 
#define LDA N 
#define LDB N 

void solve_system() { 
    __CLPK_integer n = N, nrhs = NRHS, lda = LDA, ldb = LDB, info; 
    __CLPK_integer ipiv[N]; 

    __CLPK_real a[LDA * N] = { 
     4, -2, 0, 
     3, 3, 2, 
     -1, 8, 6, 
    }; 

    __CLPK_real b[LDB * NRHS] = { 
     2, 0, -1, 
    }; 

    // Solve A * x = b 
    sgesv_(&n, &nrhs, a, &lda, ipiv, b, &ldb, &info); 

    if(info > 0) { 
     // A is singular; solution is not unique. 
    } 

    print_matrix(N, NRHS, b); 
} 

void print_matrix(size_t rows, size_t columns, __CLPK_real *mat) { 
    for(size_t r = 0; r < rows; ++r) { 
     for(size_t c = 0; c < columns; ++c) { 
      printf("%6.2f ", mat[r * columns + c]); 
     } 
     printf("\n"); 
    } 
} 

これは、線形システムを解くためのLAPACK関数SGESV、「ドライバ」機能を使用しています。 LAPACKは元々列主形式で多次元配列を格納するFORTRANで書かれているため、データは列メジャー形式で提供されることに注意してください。 __CLPK_integerおよび__CLPK_realはそれぞれlongおよびfloatのtypedefです。

+1

LAPACK関数を使用するには、Accelerate.frameworkと '#import 'とリンクする必要があることに注意してください。 – warrenm

関連する問題