gpt4 book ai didi

c++ - 如何将 double 的 Boost uBLAS vector 与复数双因子相乘?

转载 作者:行者123 更新时间:2023-11-28 06:42:56 24 4
gpt4 key购买 nike

是否可以计算 uBLAS double vector 与复数 double 的元素乘积?以下代码无法编译,因为它找不到重载的运算符 *。我希望它能工作,因为将 double 与复数 double 相乘是明确定义的。

#include <complex>

#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/io.hpp>

int main(int argc, char **argv)
{
using namespace boost::numeric::ublas;

vector<double> v(3);
for (unsigned i = 0; i < v.size(); ++i)
{
v (i) = i;
}

vector<std::complex<double> > w = v * std::complex<double>(3.0, -1.0);

return 0;
}

使用 GCC 4.6 和 Boost 1.55.0 编译它会产生以下结果:

error: no match for ‘operator*’ (operand types are ‘boost::numeric::ublas::vector<double>’ and ‘std::complex<double>’)                        

最佳答案

通过查看 vector_expression.hpp 中重载的 * 运算符:

// (t * v) [i] = t * v [i]
template<class T1, class E2>
BOOST_UBLAS_INLINE
typename enable_if< is_convertible<T1, typename E2::value_type >,
typename vector_binary_scalar1_traits<const T1, E2, scalar_multiplies<T1, typename E2::value_type> >::result_type
>::type
operator * (const T1 &e1,
const vector_expression<E2> &e2) {
typedef typename vector_binary_scalar1_traits<const T1, E2, scalar_multiplies<T1, typename E2::value_type> >::expression_type expression_type;
return expression_type (e1, e2 ());
}

看起来问题是“is_convertible”的输出,它不是双向的,所以在这种情况下没有从 std::complex 到 double 的转换,它不起作用。我添加了一个新定义,仅交换此模板中参数的顺序并且它有效...

抱歉英语不好

关于c++ - 如何将 double 的 Boost uBLAS vector 与复数双因子相乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25602647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com