콘텐츠로 건너뛰기
Home » GSL을 이용하여 역행렬 구하기

GSL을 이용하여 역행렬 구하기

GSL에서의 역행렬은 LU분해와 Cholesky분해를 이용하여 구할 수 있습니다.

역행렬을 구하기 위해서는 LU분해를 먼저 수행하여야 합니다.

LU분해를 위한 함수는 다음과 같습니다.

int gsl_linalg_LU_decomp (gsl_matrix * A, gsl_permutation * p, int *signum)

행렬 A를 분해하여 다시 A에 저장합니다. p는 순열행렬이며 signum은 순열행렬의 부호입니다.

(LU분해에 대한 더 자세한 내용은 다음 기회에 다시 설명하겠습니다.)

이렇게 얻은 LU행렬과 순열행렬 p를 이용하여 역행렬을 구합니다.

int gsl_linalg_LU_invert (const gsl_matrix * LU, const gsl_permutation * p, gsl_matrix * inverse)

역행렬은 inverse에 저장됩니다.

이제, GSL로 구한 역행렬을 Mathematica와 비교해 보고, 간단한 샘플코드를 작성하여 보겠습니다.

위에 난수값을 가지고 GSL을 이용하여 역행렬을 구해보겠습니다.

여기서 반드시 순영행렬 P와 역행렬이 저장될 수 있는 minv는 미리 메모리를 할당하여야 합니다.

[실행결과]

보시는 바와 같이 결과가 거의 동일함을 알 수 있습니다.

Cholesky분해로 역행렬 구하기

#include <gsl/gsl_linalg.h>

마찬가지로 gsl_linalg.h 헤더파일을 포함하여야 합니다.

Cholesky분해 함수는 다음과 같습니다.

iint gsl_linalg_cholesky_decomp (gsl_matrix * A)

행렬 A를 분해하여 다시 A에 저장합니다.

이렇게 얻은 행렬을 이용하여 역행렬을 구합니다.

int gsl_linalg_cholesky_invert (gsl_matrix * cholesky)

역시나 입출력을 같은 변수를 이용합니다.

Mathematica를 이용하여 Cholesky분해할 대칭행렬을 만들어보고 실제로 GSL을 이용하여 Cholesky분해를 수행하여 보겠습니다.

[실행결과]

Send us a message!

앞선 품질, 끊임없는 도전, 정직한 기술로 함께합니다.
문의 글을 작성해 주시면, 담당자 확인 후 빠르게 연락드립니다.

대표전화: (+82)02-420-3203

FAX: (+82)02-407-3511

05770 서울특별시 송파구 오금로 422, 연암빌딩 4F~6F




FAMILY SITE

advanced-floating-content-close-btn