न्यूटन की विधि कई कारणों से अभिसरण नहीं हो सकती है, यहां कुछ सबसे आम हैं।
- जैकबियन गलत है (या अनुक्रमिक में सही है लेकिन समानांतर में नहीं)।
- रैखिक प्रणाली हल नहीं है या पर्याप्त रूप से हल नहीं है।
- जैकबियन प्रणाली में एक विलक्षणता है कि रैखिक सॉल्वर संभाल नहीं रहा है।
- फ़ंक्शन मूल्यांकन दिनचर्या में एक बग है।
- फ़ंक्शन निरंतर नहीं है या लगातार पहला डेरिवेटिव नहीं है (उदाहरण के लिए चरण परिवर्तन या टीवीडी सीमाएं)।
- समीकरणों में एक समाधान नहीं हो सकता है (जैसे स्थिर अवस्था के बजाय सीमा चक्र) या प्रारंभिक अनुमान और स्थिर स्थिति के बीच एक "पहाड़ी" हो सकता है (जैसे अभिकारक को स्थिर अवस्था तक पहुंचने से पहले जलना और जलना चाहिए, लेकिन स्थिर- राज्य अवशिष्ट दहन के दौरान बड़ा होगा)।
न्यूटन के अभिसरण की कमी में मदद करने के कुछ तरीके यहां दिए गए हैं।
- विकल्पों के साथ चलाएँ
-snes_monitor -ksp_monitor_true_residual -snes_converged_reason -ksp_converged_reason
। यदि रैखिक समाधान अभिसरण नहीं करता है, जांचें कि क्या याकूबियन सही है, तो यह प्रश्न देखें । यदि पूर्वनिर्मित अवशिष्ट अभिसरण करता है, लेकिन सही अवशिष्ट नहीं करता है, तो पूर्ववर्ती अवशिष्ट विलक्षण हो सकता है। यदि रैखिक हल अच्छी तरह से परिवर्तित हो जाता है, लेकिन लाइन खोज विफल हो जाती है, तो जेकोबियान गलत हो सकता है।
-pc_type lu or -pc_type svd
यह देखने के लिए चलाएँ कि क्या समस्या खराब लीनियर सॉल्वर है
- साथ दौड़ो
-mat_view
-mat_view_draw
दौड़ें या देखें कि क्या याकूब उचित लगता है
- साथ दौड़ो
-snes_type test -snes_test_display
करता है, तो Jacobian प्रयोग कर रहे हैं गलत है देखने के लिए। आउटपुट को तुलना करें जब आप -mat_fd_type ds
यह देखने के लिए जोड़ते हैं कि क्या परिणाम विभेदक पैरामीटर की पसंद के प्रति संवेदनशील है।
- साथ चलाने के लिए
-snes_mf_operator -pc_type lu
करता है, तो Jacobian प्रयोग कर रहे हैं गलत है देखने के लिए। यदि प्रत्यक्ष हल के लिए समस्या बहुत बड़ी है, तो प्रयास करें-snes_mf_operator -pc_type ksp -ksp_ksp_rtol 1e-12
। जब आप -mat_mffd_type ds
देखते हैं कि आउटपुट अलग-अलग पैरामीटर के विकल्प के प्रति संवेदनशील है, तो आउटपुट की तुलना करें ।
- केवल समस्या समानांतर में है, यह देखने के लिए एक प्रोसेसर पर चलाएँ।
- साथ दौड़ो
-snes_ls_monitor
अगर लाइन खोज विफल हो रहा है देखने के लिए (यह आमतौर पर एक बुरा Jacobian का एक संकेत है)।
-info
समाधान प्रक्रिया पर अधिक विस्तृत जानकारी प्राप्त करने के लिए साथ चलें।
यहां न्यूटन प्रक्रिया में मदद करने के कुछ तरीके दिए गए हैं, अगर ऊपर का सब कुछ चेक आउट हो जाता है
- अपने महीन जाल पर बेहतर प्रारंभिक अनुमान उत्पन्न करने के लिए ग्रिड सिक्वेंसिंग के साथ चलाएं (
-snes_grid_sequence
यदि आपको काम करने की ज़रूरत है तो DM
)
- क्वाड
./configure --with-precision=__float128 --download-f2cblaslapack
प्रिसिजन के साथ चलाएँ ( PETSc 3.2 के साथ और बाद में, संस्करण 4.6 या बाद में GNU संकलक की आवश्यकता है)
- इकाइयां (nondimunningization), सीमा स्थिति स्केलिंग, या सूत्रीकरण को बदलें ताकि याकूब बेहतर स्थिति में हो।
- फ़ंक्शन में Mollify विशेषताएं जिनके पास निरंतर पहला डेरिवेटिव नहीं है (अक्सर तब होता है जब
if
अवशिष्ट मूल्यांकन में बयान होते हैं , जैसे चरण परिवर्तन या टीवीडी सीमाएं)। यदि भिन्नता मूलभूत महत्व की हो तो एक परिवर्तनशील असमानता सॉल्वर ( SNESVINEWTONRSLS ) का उपयोग करें ।
- एक विश्वास क्षेत्र विधि का प्रयास करें (
-ts_type tr
, मापदंडों को समायोजित करना पड़ सकता है)।
- उस बिंदु से कुछ निरंतरता पैरामीटर के साथ चलाएं जहां आप समाधान जानते हैं, स्थिर-राज्य समस्याओं को हल करने के लिए TSPSEUDO देखें । PHCpack जैसे होमोटॉपी सॉल्वर पैकेज हैं जो आपको सभी संभव समाधान प्राप्त कर सकते हैं (और आपको बताएंगे कि यह उन सभी को मिल गया है), लेकिन वे स्केलेबल नहीं हैं और कुछ भी लेकिन छोटी समस्याओं को हल नहीं कर सकते हैं।