このブログを検索

2019年9月15日日曜日

【C++】 Eigen行列計算1

【C++】 Eigen行列計算1
(2019年9月15日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0
 ※Windows SDK バージョンの変更方法


■使用ライブラリ
・Eigen 3.3.7
 ※Eigen行列計算ライブラリ導入方法


■手順
1.コンソールアプリを作成する。
新しいプロジェクトの作成→コンソールアプリ→プロジェクト名と場所を指定して作成

2.C++ファイル(.cpp)を以下のとおり変更する。
#include <iostream>
#include <Eigen/Core>

int main()
{
    //mat1
    Eigen::MatrixXd mat1 = Eigen::MatrixXd::Constant(3, 5, 2);
    std::cout << mat1 << std::endl;

    std::cout << "-------------------------------------------------------------" << std::endl;

    //mat2
    Eigen::MatrixXd mat2 = Eigen::MatrixXd::Constant(5, 3, 4);
    std::cout << mat2 << std::endl;

    std::cout << "-------------------------------------------------------------" << std::endl;

    //mat3
    Eigen::MatrixXd mat3(3, 5);
    for (int i = 0; i < mat3.rows(); i++)
    {
        for (int j = 0; j < mat3.cols(); j++)
        {
            mat3(i, j) = (double)i + (double)j;
        }
    }
    std::cout << mat3 << std::endl;

    std::cout << "-------------------------------------------------------------" << std::endl;

    //行列と行列の和
    std::cout << mat1 + mat3 << std::endl;

    std::cout << "-------------------------------------------------------------" << std::endl;

    //行列と行列の積
    std::cout << mat1 * mat2 << std::endl;

    std::cout << "-------------------------------------------------------------" << std::endl;

    //行列とスカラーの積
    std::cout << mat1 * 3 << std::endl;

    std::cout << "-------------------------------------------------------------" << std::endl;

    //行列とスカラーの商
    std::cout << mat1 / 2 << std::endl;

    std::cout << "-------------------------------------------------------------" << std::endl;

    //行列と行列の要素同士の積
    std::cout << mat1.array() * mat3.array() << std::endl;

    std::cout << "-------------------------------------------------------------" << std::endl;

    //転置行列
    std::cout << mat2.transpose() << std::endl;

    std::cout << "-------------------------------------------------------------" << std::endl;

    //逆行列
    std::cout << mat1.array().inverse() << std::endl;

    std::cout << "-------------------------------------------------------------" << std::endl;

    return 0;
}

3.実行結果
・行列と行列の和
・行列と行列の積
・行列とスカラーの積
・行列とスカラーの商
・行列と行列の要素同士の積
・転置行列
・逆行列

4.参考文献
Eigen - C++で使える線形代数ライブラリ

【C++】Eigen関数一覧

Eigen ー C++で線形代数を!(2)

0 件のコメント:

コメントを投稿