eigenを使って行列の対角化をする[C++]
C++のライブラリ"eigen"を使って行列演算式を対角化するサンプルコードです。
eigenのincludeの仕方等は一つ前の記事で('ω')
#include <iostream>
#include <eigen3/Eigen/Dense>
#include <eigen3/Eigen/Eigenvalues>
void main(){
Eigen::Matrix3d m; //doubleで3行3列を宣言
//値を代入
m(0, 0) = 11;
m(0, 1) = 12;
m(0, 2) = 13;
m(1, 0) = 21;
m(1, 1) = 22;
m(1, 2) = 23;
m(2, 0) = 31;
m(2, 1) = 32;
m(2, 2) = 33;
//行列の表示
cout << m << endl;
//ソルバーの生成
Eigen::ComplexEigenSolver<Eigen::Matrix3d> ces;
ces.compute(m);
//対角化
Eigen::MatrixXcd d;
d = ces.eigenvalues().asDiagonal(); //ベクトル⇒対角行列
//対角行列の表示
cout << d << endl;
}
この記事が気に入ったらサポートをしてみませんか?