1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <unsupported/Eigen/MatrixFunctions>
2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <iostream>
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace Eigen;
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstd::complex<double> expfn(std::complex<double> x, int)
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  return std::exp(x);
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint main()
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  const double pi = std::acos(-1.0);
14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  MatrixXd A(3,3);
16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  A << 0,    -pi/4, 0,
17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath       pi/4, 0,     0,
18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath       0,    0,     0;
19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  std::cout << "The matrix A is:\n" << A << "\n\n";
21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  std::cout << "The matrix exponential of A is:\n"
22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            << A.matrixFunction(expfn) << "\n\n";
23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
24