Apple은 LAPACK 코드를 전혀 문서화하지 않았습니다. 표준 인터페이스가 단지 netlib.org에서 구현 되었기 때문입니다. 내장 Xcode 문서에서 이러한 함수 이름을 검색 할 수는 없지만 솔루션은 매우 간단합니다. 예를 들어 URL에 함수 이름 만 지정하면됩니다. dgetrf_()
의 경우 http://www.netlib.org/clapack/what/double/dgetrf.c으로 이동하십시오.
두 개의 LAPACK 함수를 필요로합니다 : LU factorisation을 수행하는 dgetrf_()
과 이전 함수의 출력을 받아 실제 반전을 수행하는 dgetri_()
.
본인은이 프레임 워크를 가속화 두 개의 C 파일 생성 추가, 표준 응용 프로그램 프로젝트 사용하여 엑스 코드를 생성 : matinv.h, matinv.c 및 코코아 것들을 제거 할 main.m 파일 편집 : 이제
// main.m
#import "matinv.h"
int main(int argc, char *argv[])
{
int N = 3;
double A[N*N];
A[0] = 1; A[1] = 1; A[2] = 7;
A[3] = 1; A[4] = 2; A[5] = 1;
A[6] = 1; A[7] = 1; A[8] = 3;
matrix_invert(N, A);
// [ -1.25 -1.0 3.25 ]
// A^-1 = [ 0.5 1.0 -1.5 ]
// [ 0.25 0.0 -0.25 ]
return 0;
}
을 헤더 파일, 다음
// matinv.h
int matrix_invert(int N, double *matrix);
및 소스 파일,
int matrix_invert(int N, double *matrix) {
int error=0;
int *pivot = malloc(N*sizeof(int)); // LAPACK requires MIN(M,N), here M==N, so N will do fine.
double *workspace = malloc(N*sizeof(double));
/* LU factorisation */
dgetrf_(&N, &N, matrix, &N, pivot, &error);
if (error != 0) {
NSLog(@"Error 1");
free(pivot);
free(workspace);
return error;
}
/* matrix inversion */
dgetri_(&N, matrix, &N, pivot, workspace, &N, &error);
if (error != 0) {
NSLog(@"Error 2");
free(pivot);
free(workspace);
return error;
}
free(pivot);
free(workspace);
return error;
}
정규 LAPACK 참조는 LAPACK 사용입니다 r 's 가이드. (http://www.netlib.org/lapack/lug/) –
LAPACK 인이 신빙성있는 라이브러리를 스캔하는 데 문제가 있습니다. 이 코드를 단 정밀도 부동 소수점에 적용하려면 어떻게해야합니까? –
오, 찾았습니다 : sgetrf_와 sgetri_ ("단 정밀도"는?) –