2010-12-15 14 views
10

में समीकरणों की सूची में वेक्टर समीकरण को परिवर्तित करना डीएसओएलवी वाक्यविन्यास के कारण, विभेदक समीकरणों की प्रणालियों को समीकरणों की सूचियों के रूप में दिया जाना चाहिए, वेक्टर समीकरण (हल के विपरीत, जो दोनों स्वीकार करता है) के रूप में नहीं दिया जाना चाहिए।गणित

{f'[t],g'[t]}=={{a,b},{c,d}}.{f[t],g[t]} 
समीकरणों की सूची के लिए

:

{f'[t]==a*f[t]+b*g[t],g'[t]==c*f[t]+d*g[t]} 

मुझे लगता है कि मैं एक बार जवाब पता था, लेकिन मैं इसे अब नहीं मिल रहा है तो मेरी सरल सवाल यह है कि इस तरह के रूप में एक वेक्टर समीकरण कन्वर्ट करने के लिए है और मुझे लगता है कि यह दूसरों को भी लाभ पहुंचा सकता है।

उत्तर

13

थ्रेड उपयोग करके देखें:

Thread[{f'[t], g'[t]} == {{a, b}, {c, d}}.{f[t], g[t]}] 
(* {f'[t] == a f[t] + b g[t], g'[t] == c f[t] + d g[t] *) 

यह समानता ऑपरेटर == लेता है और एक ही Head के साथ एक सूची के भीतर प्रत्येक आइटम के लिए यह लागू होता है।

+0

@Mike यदि आप पुराने जवाब का विस्तार करने जा रहे हैं, प्रासंगिक कार्य करता है और अवधारणाओं के लिए प्रलेखन लिंक जोड़ने भी विचार करें है। उदाहरण के लिए, 'हेड' शब्द कोड में कहीं भी दिखाई नहीं देता है, और यह किसी को अनुमान लगा सकता है। –

6

इस प्रश्न का मानक उत्तर यह है कि Brett प्रस्तुत किया गया है, यानी Thread का उपयोग कर। हालांकि, मुझे लगता है कि DSolve, NDSolve, आदि में उपयोग के लिए ... कमांड LogicalExpand बेहतर है।

eqn = {f'[t], g'[t]} == {{a, b}, {c, d}}.{f[t], g[t]}; 

LogicalExpand[eqn] 

(* f'[t] == a f[t] + b g[t] && g'[t] == c f[t] + d g[t] *) 

यह एक सूची के लिए एक वेक्टर समीकरण परिवर्तित नहीं करता है, लेकिन यह अधिक उपयोगी है, क्योंकि यह स्वचालित रूप से मैट्रिक्स/टेन्सर समीकरण और वेक्टर समीकरणों के संयोजन बाहर सपाट। उदाहरण के लिए, यदि आप ऊपर अंतर समीकरण को प्रारंभिक स्थितियों जोड़ना चाहते थे, तो आप

init = {f[0], g[0]} == {f0, g0}; 

LogicalExpand[eqn && init] 

(* f[0] == f0 && g[0] == g0 && 
    f'[t] == a f[t] + b g[t] && g'[t] == c f[t] + d g[t] *) 

का उपयोग करेंगे एक मैट्रिक्स समीकरण का एक उदाहरण

mEqn = Array[a, {2, 2}] == Partition[Range[4], 2]; 

यहाँ Thread का उपयोग करना अजीब है, तो आप की जरूरत है परिणाम को कई बार और Flatten परिणाम लागू करने के लिए। LogicalExpand का उपयोग करना आसान

LogicalExpand[mEqn] 

(* a[1, 1] == 1 && a[1, 2] == 2 && a[2, 1] == 3 && a[2, 2] == 4 *)