Eigenの使い方

1378 ワード

こちらのブログを見てまとめてみましたhttps://blog.csdn.net/augusdi/article/details/12907341#あ、原作ありがとう!見てたくさん勉強になりました!

1、マトリックス定義

  • ベクトルもマトリクスもデフォルトのコンストラクション関数を持つため、変数を定義するときにパラメータを指定せずに、使用するまで具体的に割り当てることができます.

  • テンプレートパラメータは6つあり、最初の3つはタイプ、行、列が多いです.
    typedef Matrix MatrixXd;
    typedef Matrix Vector3d;
  • 行列のコンストラクション関数は、タイプ、行数、列数のコンストラクション関数のみを提供し、要素値の初期化は提供しません.比較的小さい固定長ベクトルについては、
  • のような初期化要素の定義が提供される.
    Vector2d a(5.0, 6.0);
    Vector3d b(5.0, 6.0, 7.0);
    Vector4d c(5.0, 6.0, 7.0, 8.0);
    

    2、静的マトリクスと動的マトリクス


    3、マトリックス要素のアクセス:


    下付き文字は0から、アクセスは()、ベクトルは[]を使用できます.行列には[]は使用できません.c++では、カンマ式m[i,j]の「i,j」は常にjの値であるため、m[i,j]はc++でm[j]です.覚えておいて!!!
    4、行列の要素を設定する
    1つ1つまたは1つ
    << // 
    
    VectorXt A;
    
    A.middleRows(3, 3)<< 1,2,3; // 

    2つのダイナミックマトリクスは直接値を割り当てることができ、静的マトリクスはダイナミックマトリクスに値を割り当てることができます.
    5、マトリックスサイズのリセット
    現在の行列の行数、列数、大きさはrows()、cols()、size()で得ることができ、動的行列についてはresize()関数で行列の大きさを動的に修正することができる.
    注意:
    (1)固定サイズのマトリクスはresize()を用いてマトリクスのサイズを変更できない.
    (2)resize()関数は元のデータを解析するので,resize()関数を呼び出すと要素の値が変わらないことは保証されない.(3)"="オペレータを使用してダイナミックマトリクスを操作する場合、左右のマトリクスのサイズが異なると、左のダイナミックマトリクスのサイズが右のサイズに変更されます.たとえば、次のコード・セグメントがあります.
    MatrixXf a(2,2);
    MatrixXf b(3,3);
    a = b;
    // a 3X3