LAPACK — Linear Algebra PACKage


가장 대표적이고 가잘 빠르다고 소문난 포트란 90 버전으로 작성된 선형 대수 라이브러리.
많은 선형대수 라이브러리들이 LAPACK을 참조하고 있다고함.
LAPACK은 C 바인딩도 자체적으로 지원하며, BLAS 라이브러가 내장되어있음.

LAPACK is written in Fortran 90 and provides routines for solving systems of simultaneous linear equations, least-squares solutions of linear systems of equations, eigenvalue problems, and singular value problems. The associated matrix factorizations (LU, Cholesky, QR, SVD, Schur, generalized Schur) are also provided, as are related computations such as reordering of the Schur factorizations and estimating condition numbers. Dense and banded matrices are handled, but not general sparse matrices. In all areas, similar functionality is provided for real and complex matrices, in both single and double precision.

아래의 코드는 MinGW에서 테스트한 코드이며, 컴파일 방법은 아래와 같음.

gcc sample.c -llapack -lblas -lm -lgfortran

아래는 테스트 코드.

#define N 3
double A[N*N];
double x[N];
int main(void)
  static int i;
  static long int n=N,inc=1,info,piv[N];
  A[0]=1.; A[1]=3.; A[2]=1.;
  A[3]=1.; A[4]=1.;A[5]=-2.;
  A[6]=1.; A[7]=-3.;A[8]=-5.;
  x[0]=3.; x[1]=1.; x[2]=-6.;
  printf("N = %d\n",N);
  for(i=0; i<N; ++i) printf("%lf\n", x[i]);

다운로드: 3.4.0

Armadillo – C++ linear algebra library


C++ 용 매트릭스 연산 라이브러리. 사용하기 쉽고 빠른것이 장점이다.

Armadillo is an open-source C++ linear algebra library (matrix maths) aiming towards a good balance between speed and ease of use. Integer, floating point and complex numbers are supported, as well as a subset of trigonometric and statistics functions.

이런 느낌의 코드.

mat A = randu(size,size);
mat B = randu(size,size);
mat Z = zeros(size,size);

for(int i=0; i<N; ++i)
  Z = A+B;  //  or Z = A+B+C ... etc

다운로드: 2.4.2