(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>
#include <random>
int main()
{
//全ての値が0のベクトル
Eigen::VectorXd vec1 = Eigen::VectorXd::Zero(5);
std::cout << vec1 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//全ての値が1のベクトル
Eigen::VectorXd vec2 = Eigen::VectorXd::Ones(5);
std::cout << vec2 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//全ての値が7のベクトル
Eigen::VectorXd vec3 = Eigen::VectorXd::Constant(5, 7);
std::cout << vec3 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//1~2を分割した値
Eigen::VectorXd vec4 = Eigen::VectorXd::LinSpaced(5, 1, 2);
std::cout << vec4 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//1番目のみ1で、それ以外が0
Eigen::VectorXd vec5 = Eigen::VectorXd::Unit(5, 1);
std::cout << vec5 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//全ての値が乱数のベクトル(範囲-1.0~1.0)
Eigen::VectorXd vec6 = Eigen::VectorXd::Random(5);
std::cout << vec6 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//任意の乱数のベクトル(int型)
std::random_device seed;
std::mt19937 random(seed());
std::uniform_int_distribution<> number(1, 6);//int型の1~6の乱数
Eigen::VectorXd vec7 = Eigen::VectorXd::Zero(5).unaryExpr([&](double dummy) {return number(random); });
std::cout << vec7 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//任意の乱数のベクトル(double型)
std::random_device seed2;
std::mt19937 random2(seed2());
std::uniform_real_distribution<> number2(1, 6);//double型の1~6の乱数
Eigen::VectorXd vec8 = Eigen::VectorXd::Zero(5).unaryExpr([&](double dummy) {return number2(random2); });
std::cout << vec8 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//要素の直接参照
Eigen::VectorXd vec9(5);
for (int i = 0; i < vec8.rows(); i++)
{
vec9(i) = i * i;
}
std::cout << vec9 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
return 0;
}
#include <Eigen/Core>
#include <random>
int main()
{
//全ての値が0のベクトル
Eigen::VectorXd vec1 = Eigen::VectorXd::Zero(5);
std::cout << vec1 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//全ての値が1のベクトル
Eigen::VectorXd vec2 = Eigen::VectorXd::Ones(5);
std::cout << vec2 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//全ての値が7のベクトル
Eigen::VectorXd vec3 = Eigen::VectorXd::Constant(5, 7);
std::cout << vec3 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//1~2を分割した値
Eigen::VectorXd vec4 = Eigen::VectorXd::LinSpaced(5, 1, 2);
std::cout << vec4 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//1番目のみ1で、それ以外が0
Eigen::VectorXd vec5 = Eigen::VectorXd::Unit(5, 1);
std::cout << vec5 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//全ての値が乱数のベクトル(範囲-1.0~1.0)
Eigen::VectorXd vec6 = Eigen::VectorXd::Random(5);
std::cout << vec6 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//任意の乱数のベクトル(int型)
std::random_device seed;
std::mt19937 random(seed());
std::uniform_int_distribution<> number(1, 6);//int型の1~6の乱数
Eigen::VectorXd vec7 = Eigen::VectorXd::Zero(5).unaryExpr([&](double dummy) {return number(random); });
std::cout << vec7 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//任意の乱数のベクトル(double型)
std::random_device seed2;
std::mt19937 random2(seed2());
std::uniform_real_distribution<> number2(1, 6);//double型の1~6の乱数
Eigen::VectorXd vec8 = Eigen::VectorXd::Zero(5).unaryExpr([&](double dummy) {return number2(random2); });
std::cout << vec8 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
//要素の直接参照
Eigen::VectorXd vec9(5);
for (int i = 0; i < vec8.rows(); i++)
{
vec9(i) = i * i;
}
std::cout << vec9 << std::endl;
std::cout << "-------------------------------------------------------------" << std::endl;
return 0;
}
3.実行結果
・全ての値が1のベクトル
・全ての値が7のベクトル
・1~2を分割した値
・1番目のみ1で、それ以外が0
・全ての値が乱数のベクトル(範囲-1.0~1.0)
・任意の乱数のベクトル(int型)
・任意の乱数のベクトル(double型)
・要素の直接参照
4.参考文献
The Matrix class
【C++】Eigen関数一覧
Eigen ー C++で線形代数を!(2)
0 件のコメント:
コメントを投稿