/ / Matlab में ODE solvers में 'odefun' में उपयोग के लिए अभिव्यक्तियों को जोड़ना - matlab, अंतर-समीकरण

Matlab में ODE solvers में 'odefun' में उपयोग के लिए अभिव्यक्तियों को जोड़ना - matlab, अंतर-समीकरण

मेरे पास दूसरी ऑर्डर अंतर समीकरणों की एक प्रणाली है जिसे मैं हल करना चाहता हूं, जो कि वैरिएबल y1, dy1, आदि का उपयोग करके प्रतीकात्मक रूप में है। उदाहरण के लिए:

dy1 = y1 + y2
dy2 = 2*y1 + y2^3

Matlab से एक ओडीई सॉल्वर का उपयोग करने के लिए, मुझे एक "odefun" की आवश्यकता है जहां मैं पहले के क्रम विभेदक समीकरणों की प्रणाली को इस तरह के रूप में व्यक्त करता हूं:

function dydt = eqs(t,y)
dydt = [y(1)+y(2);   2*y(1)+y(2)^3]

अब, मेरी समस्या में हाथ में, प्रतीकात्मक समीकरण बहुत लंबा रास्ता है और स्क्रीन में ठीक से दिखाया नहीं जा सकता है:

dy1 = y1 + y2 + ... More than 25000 characters
dy2 = 2*y1 + y2^3 + ... More than 25000 characters

तो ओडीई सॉल्वर में उपयोग करने के लिए संबंधित फ़ंक्शन को लिखने के लिए, मुझे निम्न के जैसा कुछ टाइप करना होगा:

function dydt = eqs(t,y)
dydt = [y(1)+y(2)+...More than 25000 characters; 2*y(1)+y(2)^3+...More than 25000 characters]

जाहिर है, व्यवहार्य नहीं है। मैं चाहता हूं कि "वाई (1)" के साथ "वाई 1" को प्रतिस्थापित करने के लिए प्रतीकात्मक रूप में समीकरणों को कुशल बनाना है। हालांकि, यह सीधा प्रतीत नहीं होता है क्योंकि एक चर के पास ब्रांड्स सहित कोई नाम नहीं हो सकता है, यानी, syms y (1) त्रुटि देता है।

एक और दृष्टिकोण: यदि मूल प्रतीकात्मक समीकरण तारों का उपयोग करके बनाए जाते हैं, तो "y (1)" के लिए तार "y1" को प्रतिस्थापित करना संभव है। इसके बाद, मैं एक मैटलैब स्क्रिप्ट फ़ाइल में अभिव्यक्तियों की प्रतिलिपि बना सकता हूं जहां मैं फ़ंक्शन dydt को परिभाषित करता हूं। हालांकि, अभिव्यक्ति पूरी तरह से दिखाए जाने के लिए बहुत लंबी हैं, चाहे प्रतीकात्मक या तार।

उत्तर:

जवाब के लिए 0 № 1

आप आसानी से एक इनलाइन फ़ंक्शन (उर्फ: फ़ंक्शन हैंडल) को परिभाषित कर सकते हैं:

dydt=@(y) [ sum(y) ; 2y(1)+y(2)^3+...]

फिर आप किसी भी मनमाने ढंग से मूल्य दर्ज कर सकते हैं dydt(y).

आप इसका भी उपयोग कर सकते हैं ode45() अंतर समीकरण को हल करने के लिए एक इनपुट के रूप में कार्य करें।