我正在处理一个复数数组a
和一个实数数组b
(作为双精度数)。
typedef std::complex<double> Complex;
std::valarray<Complex> a(1024);
std::valarray<double> b(1024);
std::valarray<double> modulus = std::abs(a); // problem 1
std::valarray<Complex> modulus2 = std::abs(a); // this works but uses 2 times more memory :(
std::valarray<Complex> c = a * b; // problem 2
我遇到了两个问题(这里是现场可运行的演示):
出于内存管理的目的,由于绝对值(或“模数”)是实数,因此应该可以将其存储为
std::valarray<double>
. 但在这里它不起作用:有一个错误conversion from 'std::_Expr<std::_UnClos<std::_Abs, std::_ValArray, std::complex<double> >, std::complex<double> >' to non-scalar type 'std::valarray<double>' requested
。如何存储modulus
为std::valarray<double>
?应该可以将结果乘以
a
并将b
结果存储为复数数组。但是有这个错误:no match for 'operator*' (operand types are 'std::valarray<std::complex<double> >' and 'std::valarray<double>')
。如何正确地进行数组的这种乘法?