如何在 Eigen 库中手动构造复杂矩阵?
How to manually construct complex matrix in Eigen library?
例如,下面的代码生成一个复数矩阵,虚部等于0
#include <Eigen/Dense>
#include <iostream>
using namespace std;
using namespace Eigen;
int main()
{
MatrixXcf m(2,2);
m<<1,2,3,4;
cout<<m<<endl;
}
输出
(1,0) (2,0)
(3,0) (4,0)
但是如何手动输入虚部非零的任意复数矩阵呢?
由于 MatrixXcf
只是元素类型为 std::complex<float>
的矩阵的别名,您可以提供该类型的任意初始值设定项。在 C++14 中,您可以方便地使用 user-defined 文字 i
、if
、il
来制作各种浮点类型的虚数单位。所以以下工作:
#include <Eigen/Dense>
#include <complex>
#include <iostream>
using namespace std::literals;
int main()
{
Eigen::MatrixXcf m(2,2);
m << 1.0f + 2.0if, 2.0f + 1.0if, 3.0f - 1.0if, 4.0f - 2.0if;
std::cout << m << std::endl;
}
如果你没有文字,你可以自己制作并相乘:
const std::complex<float> If(0.0f, 1.0f); // use x * I etc
即上面的代码变成:
m << 1.0f + 2.0f * If, 2.0f + 1.0 * If, 3.0f - 1.0 * If, 4.0f - 2.0 * If;
您必须注意为所有文字赋予正确的类型,否则运算符重载将不起作用。
例如,下面的代码生成一个复数矩阵,虚部等于0
#include <Eigen/Dense>
#include <iostream>
using namespace std;
using namespace Eigen;
int main()
{
MatrixXcf m(2,2);
m<<1,2,3,4;
cout<<m<<endl;
}
输出
(1,0) (2,0)
(3,0) (4,0)
但是如何手动输入虚部非零的任意复数矩阵呢?
由于 MatrixXcf
只是元素类型为 std::complex<float>
的矩阵的别名,您可以提供该类型的任意初始值设定项。在 C++14 中,您可以方便地使用 user-defined 文字 i
、if
、il
来制作各种浮点类型的虚数单位。所以以下工作:
#include <Eigen/Dense>
#include <complex>
#include <iostream>
using namespace std::literals;
int main()
{
Eigen::MatrixXcf m(2,2);
m << 1.0f + 2.0if, 2.0f + 1.0if, 3.0f - 1.0if, 4.0f - 2.0if;
std::cout << m << std::endl;
}
如果你没有文字,你可以自己制作并相乘:
const std::complex<float> If(0.0f, 1.0f); // use x * I etc
即上面的代码变成:
m << 1.0f + 2.0f * If, 2.0f + 1.0 * If, 3.0f - 1.0 * If, 4.0f - 2.0 * If;
您必须注意为所有文字赋予正确的类型,否则运算符重载将不起作用。