Eigen

2012-10-19 74 views
10

का उपयोग कर Cholesky अपघटन की गणना करें मैं C++ में एक मैट्रिक्स के Cholesky कारक की गणना करने की कोशिश कर रहा हूँ (दिए गए मैट्रिक्स पी खोजने के लिए एल जैसे एलएल^टी = पी)। मेरा उद्देश्य एक रैखिक प्रणाली पी * एक्स = बी को हल नहीं करना है, क्योंकि इस तरह के मैट्रिक्स अपघटन का उपयोग अक्सर किया जाता है, लेकिन वास्तव में मैट्रिक्स एल प्राप्त करने के लिए। (मैं "सिग्मा पॉइंट्स" की गणना करने की कोशिश कर रहा हूं जैसा कि असंतुलित परिवर्तन में किया गया है ।)Eigen

पुस्तकालय Eigen माना जाता है कि Cholesky decompositions की गणना करता है, लेकिन मैं समझ नहीं कैसे जब मैं कोड के निम्नलिखित लाइनों का प्रयास

Eigen::MatrixXd P(3,3); 
P << 6, 0, 0, 0, 4, 0, 0, 0, 7; 
std::cout << P.llt().matrixL().col(0) << std::endl; 

मैं यह मेरे मैट्रिक्स एल में मान देने के लिए प्राप्त करने के लिए संकलक त्रुटि प्राप्त करें

error: ‘Eigen::internal::LLT_Traits<Eigen::Matrix<double, -0x00000000000000001, -0x00000000000000001>, 1>::MatrixL’ has no member named ‘col’ 

documentation का कहना है कि एलएलटी.मैट्रिक्सएल() प्रकार ट्राइट्स :: मैट्रिक्सएल देता है। वह क्या है और मैं एल के मूल्य कैसे प्राप्त करूं?

उत्तर

11

आप देख सकते हैं कि एलएलटीएच हेडर फ़ाइल में ट्राइट क्या है। प्रलेखन की तरह यह TriangularView है। त्रिकोणीय दृश्य में col सदस्य नहीं है, इसलिए आपको त्रुटि मिलती है। त्रिभुज दृश्य को घने मैट्रिक्स में कॉपी करना:

Eigen::MatrixXd P(3,3); 
P << 6, 0, 0, 0, 4, 0, 0, 0, 7; 
Eigen::MatrixXd L(P.llt().matrixL()); 
std::cout << L.col(0) << std::endl; 

आपको वह चाहिए जो आप चाहते हैं।