如何在 Eigen (C++) 中处理复数?

Posted

技术标签:

【中文标题】如何在 Eigen (C++) 中处理复数?【英文标题】:How do I work with complex numbers in Eigen (C++)? 【发布时间】:2018-04-20 22:59:32 【问题描述】:

我正在成功地使用 Eigen,并且我正在尝试了解复数的一些细节。

    如何将矩阵或向量乘以复数常数?乘以复杂的矩阵很容易;复数向量和矩阵的内积也是如此。 如何将复数值分配给矩阵元素?我试过了:

这很好用(Visual Studio)

kx.real()(0, 0) = 1.0;

这会引发编译器错误

kz_r.imag()(0, ii) =1.0

我得到的错误是:

严重性代码描述项目文件行抑制状态 错误 C2440 'return': 无法从 'double' 转换为 'double &' \eigen\src\core\mathfunctions.h 919

【问题讨论】:

为什么会得到一个-1?我想如果问题被标记下来,你必须留下一个解释...... 【参考方案1】:

只需使用std::complex<double>(或float):

std::complex<double> c(1,1);
Eigen::MatrixXd R1; R1.setRandom(2,2);
Eigen::MatrixXcd C1 = c*R1; // multiply complex*real
Eigen::MatrixXcd C2 = c*C1; // complex scalar times complex matrix
C1(0,0) = c; // assign complex value.

【讨论】:

谢谢...我很难通过文档找到这个。您似乎可以分配给矩阵元素的实部,但您不能分配给矩阵元素的虚部。 你的kz_r会不会是一个实值矩阵?在那种情况下,.imag() 将是一个不可写的零矩阵表达式。

以上是关于如何在 Eigen (C++) 中处理复数?的主要内容,如果未能解决你的问题,请参考以下文章

使用 c++ Eigen 库处理 numpy 数组后,输出错误

如何检查向量的所有元素是不是在 Eigen c++ 中的另一个向量中?

线性代数c++模板库 eigen如何使用

如何使用 C++ 将 Eigen 稀疏矩阵转换为数组?

如何使用带有 eigen 数学库的 gdb 进行调试

如何在 C++ 中将 typedef 与类初始值设定项参数一起使用?