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

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

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

这很好用(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?我想如果问题被标记下来,你必须留下一个解释......

标签: c++ visual-studio eigen


【解决方案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() 将是一个不可写的零矩阵表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 2016-08-28
  • 2020-12-14
  • 1970-01-01
  • 2013-07-10
相关资源
最近更新 更多