numerical methods - Automatically return derivative from ode solver at each solution point in Matlab? -


मानक Matlab ode45 कॉल है:

  [T, Y] = solver (odefun) , tspan, Y0, विकल्प);   

लेकिन मैं भी प्रत्येक राज्य वेक्टर वाई पर odefun का मान चाहता हूं। ऐसा लगता है कि जैसे कुछ वापस करने का विकल्प होना चाहिए

  [T, Y, DYDT] = solver (odefun, tspan, y0, विकल्प);   

क्योंकि यह सबसे कारगर तरीका होगा, क्योंकि दिनचर्या पहले से ही आंतरिक रूप से प्रत्येक बिंदु पर व्युत्पन्न का मूल्यांकन करता है स्पष्ट रूप से काम करना है

  DYDT = odefun (टी, वाई);   

फिर भी मुझे odefun का एक संशोधित संस्करण लिखना होगा क्योंकि आप सॉल्वर से गुजरने वाले एक कॉलम वेक्टर होना चाहिए एक ही राज्य को दर्शाता है यहां स्पष्ट रूप से मैं yydt सभी राज्यों y पर solver द्वारा लौटाना चाहता हूं। कोई सुझाव?

मुझे विश्वास नहीं है कि व्युत्पन्न सीधे प्राप्त करने के लिए दूर है।

हो सकता है आप ऐसा कुछ करने की कोशिश कर सकते हैं:

  tspan = 0: 0.001: 5; % एक समय-अंतराल x0 = 5% और एक प्रारंभिक स्थिति   

को चलाने ode45 कोड

  [~, xt_solution चुनें ] = ode45 ( 'odefun', tspan, x0);   

और उसके बाद अपने समाधान को अलग करना:

  tdiff = diff (tspan); xdiff = diff (xt_solution); । Dxdt = xdiff1 / tdiff1;   

और वहां तुम जाओ आपके संगत tspan मान के साथ व्युत्पन्न के मूल्य आपके पास होंगे! बस याद रखें कि आपके 'adxdt' सरणी में xt_solution से कम एक तत्व होगा। इसका कारण यह है कि हम xt_solution

< पूर्व> यदि आकार (xt_solution, 1) & gt; आकार (dxdt, 1) xt_solution = xt_solution (1: आकार (dxdt, 1), :);

तो पहले से अपने tspan को पूर्वनिर्धारित करने के लिए चाल है और फिर व्युत्पन्न को खोजने के लिए इसका उपयोग करें!

Comments

Popular posts from this blog

java - ImportError: No module named py4j.java_gateway -

python - Receiving "KeyError" after decoding json result from url -

.net - Creating a new Queue Manager and Queue in Websphere MQ (using C#) -