6
我想了解表达式模板在Eigen中是如何工作的。 我理解,两个动力双载体的总和的东西,看起来像这样进行的:Eigen中的表达式模板
CwiseBinaryOp< internal::scalar_sum_op<double>, VectorXd const, VectorXd const > operator+(VectorXd const & lhs, VectorXd const & rhs);
我也充分理解两个向量的差异是如何实现的。
我有两个问题。
1.通过标量工作,矢量的乘积是怎样的?
我注意到,
CwiseBinaryOp< internal::scalar_product_op<double>, VectorXd const, VectorXd const >
存在,但我有一种感觉,它只是设计用于两个向量的分量地执行操作。这是否意味着由标量的向量的产品对应一元运算符,说
CwiseUnaryOp< internal::scalar_product_op<double>, VectorXd const, VectorXd const > ?
2.可模板表达式从混合运算建?
例如,在像
x = u + (2*v + (v-w))
的表达,这是真的,这些操作是在这样的嵌套方式执行?
v-w
导致E1的一个实例的制作2*v
导致E22*v + (v-w)
的一个实例的结构导致E3u + (2*v + (u-w))
的一个实例的结构导致建设E4的一个实例x = u + (2*v + (v-w))
来电
构造
VectorXd(E4 const &);
或超载
VectorXd & operator=(E4 const &);
其评估来自前面的步骤建立的树,有以下别名:
using diff = internal::scalar_difference_op<double>;
using prod = internal::scalar_product_op<double>;
using sum = internal::scalar_sum_op<double>;
using E1 = CwiseBinaryOp< diff, VectorXd const, VectorXd const >;
using E2 = CwiseUnaryOp< prod, VectorXd const >;
using E3 = CwiseBinaryOp< sum, E1 const, E2 const >;
非常感谢您的回答! – Aleph