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