如何在 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 数组后,输出错误