ここでは、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です。
私は可能です:http://stackoverflow.com/questions/769/solving-a-linear-equation – zellus
私はそれを見た複製。どのような方法を使うのか、それをどのようにプログラムするのか分かりません。だから、ベースラインを確立するためのサンプルを探したいのです。 – John
Pressなどの数値メソッドは$ LANGUAGEでこのトピックの読んだほうがいいです。 – thiton