2013-02-26 58 views
6

मेरा एक matlab कोड के भीतर, मैं एक निश्चित दिया मैट्रिक्स के Cholesky गुणन से निपटने के लिए। मैं आमतौर पर निम्न त्रिभुज कारक उत्पन्न करने के लिए chol(A,'lower') पर कॉल कर रहा हूं।Cholesky गुणन

अब, profiler के साथ मेरा कोड जांचना, यह स्पष्ट है कि chol फ़ंक्शन वास्तव में समय लेने वाला है, खासकर यदि इनपुट मैट्रिक्स का आकार बड़ा हो जाता है। बिल्ट-इन chol समारोह

इसलिए, मैं, जानना चाहते हैं, अगर वहाँ के लिए किसी भी मूल्यवान विकल्प नहीं है।

मैं LAPACK लाइब्रेरी, और spptrf फ़ंक्शन के बारे में सोच रहा हूं। क्या यह MATLAB में उपलब्ध है या नहीं?

किसी भी संकेत या समर्थन का स्वागत करते हैं और अधिक से अधिक कर रहे हैं।

संपादित

बस एक उदाहरण के रूप, प्रोफाइलर इस जानकारी को पुन: प्राप्त:

enter image description here

जहां Coh_u आकार (1395*1395) है। यह भी टिप्पणी की जा सकती है कि chol को 4000 बार कहा जाता है, क्योंकि मुझे 4000 विभिन्न कॉन्फ़िगरेशन के लिए cholesky कारक की आवश्यकता है।

+4

दृश्यों के पीछे मैटलैब आम तौर पर उच्च गुणवत्ता वाले न्यूमेरिक पुस्तकालयों का उपयोग करता है जो सटीकता, सटीकता और गति के साथ-साथ शेल्फ पुस्तकालयों जैसे बीएलएएस, लैपैक इत्यादि के बराबर (व्यापक रूप से बोलने वाले) हैं। वास्तव में कुछ मामलों में मैटलैब उन लोगों का उपयोग करता है पुस्तकालयों। यह अत्यधिक संभावना है, लेकिन मैंने जांच नहीं की है, कि 'चोल' के उनके कार्यान्वयन ऐसे कोड का उपयोग करता है। मेरे से बेहतर प्रोग्रामर (हालांकि शायद आपके से बेहतर नहीं) ने मैटलैब की संख्यात्मक दिनचर्या के तेज़ी से कार्यान्वयन (कुछ तरीकों से) लागू करने की कोशिश की है और बुरी तरह विफल रही है। इस समय –

+0

मैं अपने कोड के प्रदर्शन की तुलना किसी अन्य व्यक्ति के साथ कर रहा हूं, जिसे 'किलेरान' में लिखा गया है और लैपैक 'spptrf' का उपयोग करना है।अनुभव यह है कि 'spptrf'' चोल 'के बाद काफी तेज है, हालांकि आपको हमेशा दो अलग-अलग भाषाओं में समान कोड की तुलना करने में सतर्क रहने की आवश्यकता है। मुझे संदेह है कि 'MATLAB' आंतरिक रूप से' LAPACK 'लाइब्रेरी को कॉल करता है, लेकिन मुझे पूरा यकीन नहीं है। – fpe

उत्तर

1

मुझे यकीन नहीं है कि आप किस मैटलैब का उपयोग कर रहे हैं, लेकिन मुझे this discussion मिला, जो पुराने संस्करणों में सुझाव देता है कि Cholesky फैक्टोरिज़ेशन बहुत धीमा था जैसा आप वर्णन कर रहे हैं।

CHOLMOD package or SuiteSparse का उपयोग करने के लिए कहने वाले उत्तरों में से एक है, जिसमें chol2 फ़ंक्शन है जो तेज़ी से माना जाता है।

+0

मैं मैटलैब की नवीनतम रिलीज का उपयोग कर रहा हूं, इसलिए 'CHOLMOD' पहले ही लागू किया जाना चाहिए। या मुझे ऐसा लगता है! – fpe

0

आप

एक) Coh_u = exp(-a.*sqrt((f(ii)/Uhub).^2 + (0.12/Lc).^2)).*(df.*psd(ii,1));

या

ख) Coh_u = exp(-a.*dist*sqrt((f(ii)/Uhub).^2 + (0.12/Lc).^2)).*(df.*psd(ii,1));

एक में अंतर) और नीचे के रूप में ख) में है कि है अगर Coh_u के लिए सही एक्सप्रेशन है पुष्टि कर सकते हैं ख) dist जोड़ दिया गया है जो दो मैट्रिक्स Y एक Z ऐसी है कि

0 के बीच की दूरी है
dist = pdist2([Y(:) Z(:)],[Y(:) Z(:)]); 

लेकिन यह chol() फ़ंक्शन के साथ "मैट्रिक्स सकारात्मक सकारात्मक" त्रुटि में नहीं जाता है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^