में अभिव्यक्ति टेम्पलेट्स मैं समझना चाहता हूं कि अभिव्यक्ति टेम्पलेट्स 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 >
मौजूद है, लेकिन मैं महसूस कर रही है कि यह केवल दो वैक्टर के बीच componentwise कार्रवाई करने के लिए बनाया गया है। यह मतलब यह है कि एक अदिश द्वारा एक वेक्टर के उत्पाद एक एकल ऑपरेटर के अनुरूप है, कहते हैं कि
CwiseUnaryOp< internal::scalar_product_op<double>, VectorXd const, VectorXd const > ?
2. टेम्पलेट भाव मिश्रित संचालन से बनाया जा सकता है?
उदाहरण के लिए, की तरह
x = u + (2*v + (v-w))
एक अभिव्यक्ति में यह सच है कि इन आपरेशनों इस तरह एक नेस्टेड तरह से प्रदर्शन कर रहे हैं क्या है?
v-w
E22*v + (v-w)
का एक उदाहरण के निर्माण के लिए2*v
सुराग ई 1 का एक उदाहरण के निर्माण की ओर जाता है निर्माण की ओर जाता है E3u + (2*v + (u-w))
का एक उदाहरण के निर्माण की ओर जाता है ई 4x = 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 >;
आप अपने जवाब के लिए बहुत बहुत धन्यवाद: पहले भाव E1 इ 4 करने के लिए बनाई गई हैं, तो मूल्यांकन की तरह एक कोड जनरेट अतिभारित
operator=
से शुरू होता है! – Aleph