किसी दिए गए अंतराल में फ़ंक्शन की सभी जड़ें खोजें


9

मुझे एक दिए गए अंतराल में स्केलर फ़ंक्शन की सभी जड़ों को खोजने की आवश्यकता है । फ़ंक्शन में असंगति हो सकती है। एल्गोरिथ्म में algorithm की सटीकता हो सकती है (जैसे कि यदि एल्गोरिथ्म में दो अलग-अलग जड़ें नहीं हैं तो यह ठीक है)।

क्या ऐसा एल्गोरिथ्म मौजूद है? क्या आप मुझे उस बारे में कागजात बता सकते हैं?


वास्तव में, मेरे पास ब्रेंट के एल्गोरिथ्म का उपयोग करके दिए गए अंतराल में एक शून्य खोजने के लिए एक फ़ंक्शन है, और दिए गए अंतराल में एक न्यूनतम खोजने के लिए एक फ़ंक्शन है। उन दो कार्यों का उपयोग करते हुए, मैंने अपना खुद का एल्गोरिदम बनाया, लेकिन मैं सोच रहा था कि क्या बेहतर एल्गोरिथ्म मौजूद है। मेरा एल्गोरिथम ऐसा है:

मैं एक अंतराल [a,b]और एक समारोह के साथ शुरू करता हूं f। तो sign(f(a+ε)) ≠ sign(f(b-ε)), मुझे पता नहीं है कम से कम एक शून्य के बीच aऔर b, और मुझे लगता है z = zero(]a,b[)। मैं परीक्षण करता हूं कि क्या zवास्तव में एक शून्य है (यह एक असंतोष हो सकता है), z-εऔर के मूल्य को देखकर z+ε। यदि यह है, तो मैं इसे पाया शून्य की सूची में जोड़ देता हूं। यदि f(a+ε)और f(b-ε)दोनों सकारात्मक हैं, तो मैं खोज करता हूं m = min(]a, b[)। यदि f(m)अभी भी सकारात्मक है, तो मैं खोज करता हूं m = max(]a,b[)क्योंकि बीच में एक असंतोष हो सकता है aऔर b। मैं विपरीत करता हूं अगर f(a+ε)और f(b-ε)नकारात्मक थे।

अब, मैंने जो बिंदु पाया, ( zया m) मैं एक स्टैक का निर्माण करता हूं जिसमें मेरे फ़ंक्शन के शून्य, असंतोष और विभक्ति बिंदु शामिल हैं। पहले पुनरावृत्ति के बाद, स्टैक अब जैसा दिखता है [a, z, b]। मैं फिर से अंतराल से एल्गोरिथ्म शुरू करता हूं ]a,z[और ]z,b[। जब, दो बिंदुओं के बीच aऔर b, दोनों अंतरालों की तुलना में एक्स्ट्रेमा का एक ही चिन्ह होता है, और दोनों एक्सट्रैमा में कोई असंतोष नहीं होता है, तो मैं अंतराल को स्टैक से हटा देता हूं। अधिक अंतराल न होने पर एल्गोरिथ्म समाप्त हो जाता है।


2
अंतराल अंकगणित पर आधारित विधियां हैं।
lhf

जवाबों:


6

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

Chebfun जड़ खोजक के पीछे मुख्य विचार पुनरावर्ती द्विभाजन और सहकर्मी मैट्रिक्स, एक एनालॉग के संयोजन का उपयोग करने के लिए है कंपेनियन मैट्रिक्स , लक्ष्य समारोह के interpolant के गुणांकों पर।

मेरे पास यहां कोड का एक सरलीकृत संस्करण है । यह फ़ंक्शन chebrootsअपने पहले इनपुट के रूप में एक अनाम फ़ंक्शन लेता है, दूसरे और तीसरे तर्क के रूप में परिमित अंतराल, और Nयह चौथे और अंतिम तर्क के रूप में एक डिग्री है। उचित परिणामों के लिए, आप सेट कर सकते हैं Nकरने के लिए 100


0

सामान्य तौर पर, यह एक निराशाजनक खोज है- कार्य की निरंतरता और / या भिन्नता के बारे में कुछ जानकारी के बिना, कुछ भी हो सकता है। उदाहरण के लिए 0 से 1 के अंतराल पर MATLAB फ़ंक्शन को परिभाषित करें:

समारोह y = f (x)

y = 1.0;

अगर (x == 0.01)

y = 0.0;

समाप्त

यदि (x == 0.013)

y = 0.0;

समाप्त

यदि (x == 0.753124)

y = 0.0;

समाप्त

इस फ़ंक्शन को ब्लॉक बॉक्स के रूप में मानते हुए, यह देखने का कोई तरीका नहीं है कि इसमें इन तीन बिंदुओं पर शून्य है और 0 से 1 के बीच के प्रत्येक फ्लोटिंग पॉइंट नंबर की जांच किए बिना 0 से 1 के अंतराल में कोई अन्य बिंदु नहीं है।


1
इस तरह के शून्य को खोजने में स्पष्ट रूप से असंभव है, लेकिन @Charles में दिलचस्पी दिखाई दे रही थी, सबसे बुरी तरह से, ब्लैक बॉक्स जंप डिसकंटिनिटी के साथ कार्य करता है, लेकिन तथाकथित हटाने योग्य असंतोष नहीं।
बिल बर्थ

1
यहां तक ​​कि अगर आप अपने आप को कूदने की छूट के लिए सीमित करते हैं और यहां तक ​​कि अगर आप अपने आप को निरंतर कार्यों तक सीमित रखते हैं, यदि फ़ंक्शन Lipschitz को ज्ञात अंतराल पर निरंतर नहीं है, तो सभी जीरो को बिंदुओं की एक निश्चित संख्या में मूल्यांकन से सुनिश्चित करना कि आप सुनिश्चित नहीं करेंगे सभी जड़ें प्राप्त करें।
ब्रायन बोरचर्स

विशेष रूप से, फ़ंक्शन पर विचार करें sin(1/x) एक उदाहरण के रूप में जहां अंतराल पर सभी शून्य ढूंढते हैं [0,1]कठिन होगा।
वोल्फगैंग बंगेरथ

ओपी एक निर्दिष्ट करने के लिए तैयार था ϵ। यदि कार्य पैथोलॉजिकल है, तो यह कई शून्य पाएंगे, लेकिन ऐसा लगता है कि यह जीवन है। यह संभव है कि इस तरह की विकृति से बचने के लिए उसे अधिक से अधिक अंतराल निर्धारित करना पड़े।
बिल बर्थ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.