SciPy optimize.curve_fit कभी कभी अभिसरण नहीं होंगे

वोट
1

मैं आवृत्ति और एक / बंद अनुक्रम के चरण अनुमान लगाने के लिए numpy.optimize.curve_fit उपयोग करने के लिए कोशिश कर रहा हूँ। इस कोड को मैं उपयोग कर रहा हूँ है:

from numpy import *
from scipy import optimize

row = array([0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0,])

def fit_func(x, a, b, c, d):
    return c * sin (a * x + b) + d

p0 = [(pi/10.0), 5.0, row.std(), row.mean()]
result = optimize.curve_fit(fit_func, arange(len(row)), row, p0)
print result

यह काम। लेकिन कुछ पंक्तियों पर, भले ही वे पूरी तरह से ठीक लग रहे हैं, यह विफल रहता है। नाकाम रहने पंक्ति का उदाहरण:

row = array([1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0, 0.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0, 0.0,  0.0,  0.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  0.0,  0.0,  0.0,  0.0, 0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  0.0,  0.0, 0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0,  1.0, 1.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,])

त्रुटि है:

RuntimeError: इष्टतम मानकों नहीं मिला: दोनों वास्तविक और वर्गों का योग में रिश्तेदार कटौती की भविष्यवाणी पर सबसे 0.000000 कर रहे हैं और लगातार दो दोहराता के बीच सापेक्ष त्रुटि पर सबसे 0.000000 है

जो मुझे बहुत क्या हुआ के बारे में थोड़ा बताता है। एक त्वरित परीक्षण से पता चलता है कि p0 में पैरामीटर बदलती उस पंक्ति सफल होने के लिए कारण होगा ... और दूसरों विफल। ऐसा क्यों है?

12/10/2010 को 14:58
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
2

मैं डेटा की दोनों पंक्तियों है कि आप प्रदान की है और दोनों मेरे लिए काम किया ठीक करने की कोशिश की। मैं SciPy 0.8.0rc3 उपयोग कर रहा हूँ। आप कौन सा संस्करण उपयोग कर रहे हैं? एक और बात यह है कि मदद कर सकता है तय मूल्यों के लिए ग और घ स्थापित करने के लिए है क्योंकि वे वास्तव में एक ही हर बार होना चाहिए। मैं .5 को 0,6311786 और घ के लिए ग निर्धारित किया है। तुम भी शून्य गद्दी और चोटी के चारों ओर द्विघात फिटिंग के साथ एक fft का उपयोग आवृत्ति खोजने के लिए यदि आप किसी अन्य विधि चाहते हो सकता है। वास्तव में, किसी भी पिच आकलन विधि आप मौलिक आवृत्ति के लिए देख रहे हैं के बाद से लागू है।

12/10/2010 को 17:15
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more