#include<iostream>
using namespace std;
#include<ctime>
#include<Eigen/Core>
#include<Eigen/Dense>
using namespace Eigen;
#define MATRIX_SIZE 50
int main (int argc,char **argv){
Matrix<float,2,3>matrix_23;
Vector3d v_3d;
Matrix<float,3,1>vd_3d;
Matrix3d matrix_33 = Matrix3d::Zero();
Matrix <double,Dynamic,Dynamic>matrix_dynamic;
MatrixXd matrix_x;
matrix_23<<1,2,3,4,5,6;
cout<<"matrix 2x3 from 1 to 6: \n"<<matrix_23<<endl;
cout<<"print matrix 2x3:"<<endl;
for(int i =0; i<2 ; i++){
for(int j = 0;j<3 ; j++)cout<<matrix_23(i,j)<<"\t";
cout<<endl;
}
v_3d<<3,2,1;
vd_3d<<4,5,6;
//Matrix<double, 2, 1>result_wrong_type = matrix_23 *v_3d;
Matrix<double, 2, 1>result = matrix_23.cast<double>() * v_3d;
cout<<"[1,2,3;4,5,6]*[3,2,1] = "<<result.transpose()<<endl;
Matrix<float , 2, 1>result2 = matrix_23 * vd_3d;
cout<<"[1,2,3;4,5,6]*[4,5,6] = "<<result2.transpose()<<endl;
//Eigen::Matrix<double,2,3>result_wrong_dimension = matrix_23.cast<double>() *v_3d;
matrix_33 = Matrix3d::Random(); //随机数矩阵
cout<<"random matrix:\n "<<matrix_33<<endl;
//注意逆和行列式需要声明<Eigen/Dense>
cout<<"tranpose:\n"<<matrix_33.transpose()<<endl;//转置
cout<<"sum:"<<matrix_33.sum()<<endl; //各元素求和
cout<<"trace:"<<matrix_33.trace()<<endl;
cout<<"times 10"<< 10 * matrix_33<<endl;
//cout << "inverse: \n" << matrix_33.inverse() << endl;
//cout << "det: " << matrix_33.determinant() << endl;
}