इस समस्या को देखने का एक और तरीका है असतत उलटा समस्याओं, यह है कि, समस्याओं से उपकरण जो सुलझाने शामिल करने पर विचार करने के लिए है या मिनट | | एक एक्स - बी | | 2 जहां एक बहुत बीमार वातानुकूलित है (यानी पहली और आखिरी विलक्षण मूल्य के बीच का अनुपात σ 1 / σ एन बड़ी है)।Ax=bmin||Ax−b||2Aσ1/σn
यहां, हमारे पास स्टॉपिंग मानदंड चुनने के लिए कई तरीके हैं, और एक पुनरावृत्ति विधि के लिए, मैं एल-वक्र मानदंड की सिफारिश करूंगा क्योंकि इसमें केवल पहले से उपलब्ध मात्राएं शामिल हैं (अस्वीकरण: मेरे सलाहकार ने इस पद्धति का बीड़ा उठाया है, इसलिए मैं निश्चित रूप से इसके प्रति पक्षपाती हूं) यह)। मैंने इसे एक पुनरावृत्त विधि में सफलता के साथ प्रयोग किया है।
विचार के लिए अवशिष्ट मानदंड की निगरानी करना है और समाधान के आदर्श η कश्मीर = | | x k | | 2 , जहां एक्स कश्मीर है कश्मीर 'वें पुनरावृति। जैसा कि आप पुनरावृति करते हैं, यह एक loglog (rho, eta) प्लॉट में L की आकृति बनाना शुरू करता है, और उस L के कोने पर स्थित बिंदु सबसे इष्टतम विकल्प है।ρk=||Axk−b||2ηk=||xk||2xkk
(ρk,ηk)
abs(log(ηk)−log(ηk−1)log(ρk)−log(ρk−1)) was larger than some threshold for 20 successive iterations, I knew that I was on the vertical part of the curve and that I had passed the corner. I then took the first iterate in my array (i.e. the one 20 iterations ago) as my solution.
There are also more detailed methods for finding the corner, and these work better but require storing a significant number of iterates. Play around with it a bit. If you are in matlab, you can use the toolbox Regularization Tools, which implements some of this (specifically the "corner" function is applicable).
Note that this approach is particularly suitable for large-scale problems, since the extra computing time involved is minuscule.