python - Does scipy.integrate.ode.set_solout work? -
एकीकरण routines के लिए scipy.integrate.ode इंटरफ़ेस एकीकरण को रोकने के लिए एक विधि प्रदान करता है किसी भी कदम पर बाधा का उल्लंघन है, सेट_सोलआउट हालांकि, मैं इस पद्धति को सरलतम उदाहरणों में भी काम नहीं कर सकता। यहाँ एक प्रयास है:
आयातित रूप से nppy के रूप में np से scipy.integrate आयात ode def f (t, y): "" "घातीय क्षय।" "" वापस लौ-एफ़ solout (टी, वाई ): यदि वाई [0] & lt; 0.5: वापसी -1 और: वापसी 0 y_initial = 1 t_initial = 0 r = ode (f) .set_integrator ('dopri5') # समाधानकर्ता जो सोलआउट r.set_initial_value का समर्थन करता है (y_initial, t_initial) r.set_solout (solout) # एकीकृत करें टी = 5, लेकिन रोक जब solout बाधा r.integrate उल्लंघन (5) # जब solout एकीकरण समाप्त किया जाना चाहिए था: intersection_time = np.log (2) एकीकरण होना चाहिए था जब t = log (2) = 0.693 ... , लेकिन इसके बजाय खुशी से जारी रहता है जब तक t = 5 , जब y = 0.007 ।
क्या यह scipy में एक बग है या मैं सही ढंग से set_solout का उपयोग नहीं कर रहा / रही हूं?
यह पता चला है कि आपको set_solout से पहले कॉलिंग set_initial_value को कॉल करने की आवश्यकता है। (मैं इसे scipy परीक्षण सूट में पढ़कर इसे समझता हूं।) तो, मेरे प्रश्न कोड में दो कॉलों के क्रम को पीछे करने से सही परिणाम उत्पन्न होता है।
यहां तक कि अगर यह व्यवहार सही है, यह set_solout के लिए दस्तावेज़ में उल्लेख किया जाना चाहिए। मैंने पोस्ट किया है।
अद्यतन करें: यह समस्या SciPy 0.17.0; set_solout भी set_initial_value के बाद कहलाएगा, और प्रश्न कोड सही परिणाम देगा।
Comments
Post a Comment