見出し画像

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;
}




この記事が気に入ったらサポートをしてみませんか?