Вот пример кода для решения линейных систем с помощью CLAPACK, реализации Apple LAPACK, которая доступна на 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
являются typedefs для long
и float
соответственно.