2015-08-25 14 views
9

Bairstow's root finding method को अभिसरण करने के लिए वर्गबद्ध कारकों के लिए बहुत अच्छे आरंभिक अनुमानों की आवश्यकता है।बेयरस्टो की विधि प्रारंभिक वर्गिक अनुमान

मैंने पीछे के गुणांक (-a1/a2, -a0/a2; लिन द्वारा) के विभिन्न स्थिरांक, यादृच्छिक संख्या, अंशों का कोई फायदा नहीं हुआ।

कृपया, किसी को भी कारकों चुनने के लिए एक अच्छा तरीका के बारे में पता है?

उदाहरण के लिए:

1*x^8 + 118*x^7 + 1*x^6 + 2*x^5 - 2*x^4 - 3*x^3 + 3*x^2 + 2*x + 1 

यह तुलना में यह 0.2, 2.0 के साथ करता है, प्रारंभिक अनुमानों 0.1 के साथ रूट को खोजने के लिए 0.2 3x के रूप में ज्यादा समय लगता है।

या:

1*x^8 - 36*x^7 + 546*x^6 - 4536*x^5 + 22449*x^4 - 67284*x^3 + 118124*x^2 - 109584*x + 40320 

थोड़ा लंबा (~ 50%) 0.1 के साथ लेता है, 0.1 के साथ की तुलना में 1.2, 0,1


कॉची की प्रारंभिक द्विघात सन्निकटन के लिए बाध्य उपयोग करने के लिए कोशिश कर रहा है:

R=0 
for i in range(1,n+1): 
    R=max(abs(a[i]/a[0]),R) 
R=1+R 
phi=2*pi*random() 
x1=complex(R*cos(phi),R*sin(phi)) 
x2=complex(x1.real,-x1.imag) 
r=-x1.real-x2.real 
s=(x1*x2).real 

दुर्भाग्यवश, यह वास्तव में अभिसरण को गति प्रदान नहीं करता है।

उत्तर

3

जैसा कि मैंने लेख पर काम किया है और चित्रों की आपूर्ति की है, मैं बता सकता हूं कि आपको वास्तव में अच्छे अनुमानों की आवश्यकता नहीं है।

सबसे महत्वपूर्ण प्रारंभिक चरण बहुपद को यहां तक ​​कि डिग्री तक कम करना है, जैसा लेख में बताया गया है। उसके बाद, आप गलत नहीं कर सकते हैं, लगभग वैश्विक अभिसरण होना चाहिए। यह सुनिश्चित हो, न्यूटन की विधि में के रूप में ही लागू होता है: अगर 10 कदम के बाद अभिसरण की कोई उल्लेखनीय संकेत है, एक अलग प्रारंभिक बिंदु के साथ पुनः आरंभ करें।

कुछ बाहरी रूट त्रिज्या की गणना करना और इस त्रिज्या के अंदर जड़ें रखने के लिए प्रारंभिक वर्गबद्ध कारक चुनना निश्चित रूप से समझदार है।


एक "अनुभवहीन" या "वैनिला" लेकिन प्रतीत होता है मजबूत कार्यान्वयन के लिए http://catc.ac.ir/mazlumi/jscodes/bairstow.php के स्रोत कोड में जावास्क्रिप्ट कार्यान्वयन देखें। गुणांक/जड़ परिमाण, के लिए भी डिग्री, कोई देखभाल करने के लिए कोई कमी ...


उदाहरण कुशलतापूर्वक आभासी अनंत पर एक जड़ -117.9917 साथ इकाई डिस्क के अंदर एक अजीब डिग्री बहुपद है। हर कदम में प्रारंभ करने के लिए एक बाहरी जड़ त्रिज्या है, जो "गुणांकों के पेट की 1 + अधिकतम" में R=119 है (प्रमुख गुणांक 1) संस्करण की गणना करना चाहिए। तब x^2-R^2 या phi=2*pi*random(); और x^2+R^2*cos(phi)*x+R^2*sin(phi) या कुछ इसी तरह के साथ आरंभ कर देगा।

+0

समस्या यह है कि मैं स्पष्ट रूप से देख सकता हूं कि अभिसरण गति में एक बड़ा अंतर है जब मैं थोड़ा अलग प्रारंभिक अनुमानों का उपयोग करता हूं। मेरा मतलब है, निश्चित रूप से कुछ दूसरों की तुलना में बेहतर होना चाहिए? और जब एक से अधिक गुणा के साथ जड़ों हैं, यह भी बदतर है। यहां तक ​​कि यहां तक ​​कि डिग्री के बहुआयामी पद के लिए ... –

+0

पहले ऐसा नहीं होना चाहिए, कम से कम नहीं बहुत बार। कई जड़ों हमेशा एक समस्या होगी। हमेशा की तरह एल्गोरिदम में से सिर्फ जेनकींस-Traub कि के खिलाफ अपेक्षाकृत मजबूत है, यह केवल छोटे divisors में रद्द त्रुटियों से ग्रस्त है। क्या आप प्रश्न में दस्तावेज कर सकते हैं - यदि संभव हो तो पहली समस्या के लिए छोटा - उदाहरण? – LutzL

+0

संपादन देखें। Btw।, जब मैं आपके द्वारा लिंक किए गए "वेनिला" कार्यान्वयन में उदाहरण प्लग करता हूं, तो यह जम जाता है। –

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