Eigen 라이브러리는 C++용 오픈 소스 템플릿 라이브러리로, 벡터와 행렬 연산을 포함한 다양한 선형 대수 연산을 지원한다. 주로 행렬 연산, 벡터 연산, 고유값 계산, 행렬 분해 등을 간단하고 효율적으로 수행할 수 있도록 설계되었다.
참고 사이트
https://eigen.tuxfamily.org/dox/
주요 특징
- 간단한 사용법: C++ 템플릿 클래스를 사용하여 벡터 및 행렬을 정의하고 연산할 수 있다.
- 고성능: SIMD(Vectorization)를 사용하여 고속 연산을 제공하고, 다양한 최적화가 되어 있어 빠른 성능을 제공한다.
- 다양한 행렬 연산 지원: 행렬 곱셈, 전치, 역행렬, 고유값 분해, LU 분해 등 다양한 선형 대수 연산을 지원한다.
- 크기 자동 관리: 정적 크기와 동적 크기 행렬을 모두 지원하여 상황에 따라 유연하게 사용할 수 있다.
Include Path 설정:
- 프로젝트의 빌드 설정에서 #include 경로에 Eigen의 헤더 파일 경로를 추가한다.
#include <Eigen/Dense>
---------------기능-------------------
1. 기본 선형 대수 연산
- 행렬 및 벡터 연산: 더하기, 빼기, 곱하기, 나누기, 전치, 스칼라 곱셈 등 기본적인 수학 연산을 지원한다.
- 기본 벡터화: 연산을 벡터 단위로 실행하여 성능을 향상시킨다.
2. 행렬 분해
- LU 분해: 행렬을 L(하삼각 행렬)과 U(상삼각 행렬)로 분해한다.
- QR 분해: 행렬을 직교 행렬(Q)과 상삼각 행렬(R)로 분해한다.
- 고유값 분해: 고유값과 고유벡터를 계산하여 행렬의 특성을 분석한다.
- SVD(특이값 분해): 특이값, 왼쪽 특이벡터, 오른쪽 특이벡터를 계산한다.
3. 고급 연산 기능
- 역행렬 계산: matrix.inverse()로 쉽게 역행렬을 구할 수 있다.
- 행렬의 행렬식(determinant) 계산: matrix.determinant()를 사용하여 행렬식을 계산한다.
- 행렬 전치 및 소거 행렬: matrix.transpose(), matrix.adjoint() 등을 지원한다.
- 자기자신 할당 연산: +=, -=, *=, /= 등의 연산을 지원하여 연산 중 복사 비용을 줄일 수 있다.
4. 크기 조정 및 블록 연산
- 블록 연산: 행렬의 일부를 블록으로 선택하고 연산할 수 있다.
cpp코드 복사Matrix3d mat; mat << 1, 2, 3, 4, 5, 6, 7, 8, 9; cout << "Block (2x2):\n" << mat.block<2,2>(0,0) << endl;
- 크기 조정: 행렬의 크기를 동적으로 변경할 수 있다.
cpp코드 복사MatrixXd mat(2, 2); mat.resize(4, 4);
5. 정적 및 동적 크기 지원
- 정적 크기 행렬은 컴파일 시 크기가 고정되어 메모리 할당 비용이 적고 성능이 빠르다.
- 동적 크기 행렬은 런타임 시 크기가 결정되어 유연하게 사용할 수 있다.
6. 유틸리티 함수
- 행렬 초기화: Identity(), Zero(), Ones() 등을 사용해 쉽게 초기화할 수 있다.
cpp코드 복사Matrix3d identity = Matrix3d::Identity();
- 랜덤 행렬 생성: Random() 함수를 사용해 무작위 값을 가지는 행렬을 생성한다.
cpp코드 복사MatrixXd randomMatrix = MatrixXd::Random(3, 3);
7. 자기 최적화
- Eigen은 SIMD(Vectorization)를 사용해 연산을 자동으로 최적화한다.
- 다양한 CPU 아키텍처에 맞춰 자동으로 성능을 최적화한다.
8. 지원되는 자료형
- 정수형, 부동 소수점(float, double, long double) 등의 자료형을 지원하며, 복소수(complex) 연산도 가능하다.
----------------------변수 선언------------------------
1. 벡터 선언
Eigen에서 벡터는 VectorXd, Vector3d, RowVectorXd 등으로 선언할 수 있다. 여기서 Xd는 동적 크기의 벡터를 나타내며, 숫자가 붙은 형식(Vector3d)은 고정 크기를 나타낸다.
1.1 동적 크기 벡터 선언 (크기가 런타임에 결정됨)
1.2 고정 크기 벡터 선언 (컴파일 시 크기 고정)
2. 행렬 선언
Eigen에서는 행렬도 쉽게 선언할 수 있다. MatrixXd는 동적 크기의 행렬을, Matrix2d, Matrix3f와 같은 형식은 고정 크기의 행렬을 나타낸다.
2.1 동적 크기 행렬 선언
2.2 고정 크기 행렬 선언
3. 0으로 초기화, 단위 행렬, 난수 행렬 선언
3.1 0으로 초기화된 벡터 및 행렬
3.2 단위 행렬 (Identity Matrix)
3.3 난수로 채워진 행렬