मैटलैब में ओडीई का उपयोग करके स्टेप साइज का चुनाव


12

अरे वहाँ और मेरे प्रश्न को देखने के लिए समय देने के लिए धन्यवाद। यह मेरे प्रश्न का एक अद्यतन संस्करण है जो मैंने पहले Phys.stackexchange.com में पोस्ट किया था

मैं वर्तमान में एक 2D एक्जिट स्पिनर बोस-आइंस्टीन कंडेनसेट का अध्ययन कर रहा हूं और इस प्रणाली की जमीनी स्थिति के बारे में उत्सुक हूं। जमीनी अवस्था में पहुंचने की गणितीय विधि को काल्पनिक समय पद्धति कहा जाता है

विधि बहुत सरल है जहां क्वांटम यांत्रिकी में समय को काल्पनिक एक द्वारा बदल दिया जाता है यह प्रतिस्थापन मेरे सिस्टम में उच्च ऊर्जा कणों को कम ऊर्जा वाले लोगों की तुलना में तेजी से क्षय करने का कारण बनता है। गणना के हर चरण में कणों की संख्या को फिर से सामान्य करना हम सबसे कम ऊर्जा कणों, उर्फ ​​की एक प्रणाली के साथ समाप्त करते हैं। जमीनी अवस्था।

t=iτ

विचाराधीन समीकरण (नों) को गैर -रेखीय समीकरण कहा जाता है, जिसे कभी - कभी ग्रॉस-पिटावेस्की समीकरण कहा जाता है । इस समस्या को हल करने के लिए, मैं मैटलैब्स ode45 का उपयोग कर रहा हूं जो समय में सिस्टम को आगे बढ़ाता है और अंततः जमीनी स्थिति तक पहुंचता है।

  • ध्यान दें! Nonlinear Schrödinger समीकरण में अंतरिक्ष में लैपलियन और कुछ अन्य विभेदक शब्द शामिल हैं। ये सभी तेजी से फूरियर रूपांतरण का उपयोग करके हल किए गए हैं। अंत में हमारे पास केवल एक समय ODE है। *

मेरी समस्या और प्रश्न: गणना से तक । Ode45 को एक लूप के लिए रखा गया है , इसलिए यह एक ही समय में एक विशाल वेक्टर गणना नहीं करता है । पहला दौर ode45 (odefun, ) से शुरू होगा और फिर से अगली बार जाना । यहाँ समय कदम मेरी समस्या है। समय के कदमों में अलग-अलग विकल्प मुझे अलग-अलग जमीनी राज्य समाधान देते हैं और मुझे नहीं पता कि यह कैसे निर्धारित किया जाए कि कौन सा कदम मुझे "सबसे" सही जमीनी अवस्था देता है!टी [ टी 0 , ... , टी ] [ टी 0 , टी 0 + Δ / 2 , टी 0 + Δ ] , y , ... टी 0 + Δ Δt0t[t0,,टी][टी0,टी0+Δ/2,टी0+Δ],y,...टी0+ΔΔ

मेरा प्रयास: मुझे पता है कि इस योजना में बड़े समय के कदमों से बड़ी संख्या में कणों का क्षय होने से पहले कणों की मूल संख्या को फिर से सामान्य कर दिया जाएगा जबकि छोटे समय के कदमों से कणों की छोटी मात्रा फिर से सामान्य होने से पहले क्षय हो जाएगी। मेरा प्रारंभिक विचार यह है कि छोटे समय के कदमों को अधिक सटीक समाधान देना चाहिए लेकिन यह विपरीत प्रतीत होता है।

मैं एक संख्यात्मक विशेषज्ञ नहीं हूं, इसलिए ode45 का विकल्प बस मनमाना था। ode113 मुझे एक ही चीज देता है। :(

क्या इस मामले पर किसी का कोई विचार है? यदि कोई अतिरिक्त विवरण चाहिए तो मुझे बताएं।

धन्यवाद।

अद्यतन 1: मैं काल्पनिक समय पद्धति और ODEs पर शोध कर रहा हूं। ऐसा लगता है कि यदि समय कदम छोटा नहीं है तो पूरी चीज अस्थिर हो जाती है। इससे मुझे आश्चर्य होता है कि यदि मेरे गैर-समीकरण समीकरण कठोर हैं जो कि चीजों को मैं जो समझ रहा हूं उससे बहुत अधिक कठिन है। मैं आपको अद्यतित रखूंगा।

अद्यतन 2: फिक्स्ड: समस्या वास्तव में ODE के बाहर सामान्यीकरण थी। यदि सामान्यकरण को odefun के अंदर रखा जाता है, तो ODE "आउट" समय चरणों के विभिन्न विकल्पों के लिए एक ही परिणाम देता है। मेरे सहयोगी ने मुझे पुराने कोड दिखाए और मैंने बस अपने odefun में एक पंक्ति जोड़ दी।

function y_out = odefun(t,y_in,...variables...) 

    ...
    [ Nonlinear equations evaluated ]  
    ...


    y_out = y_out + 0.1*y_in*(N0-Ntemp) ;
end

अंतिम पंक्ति कणों की वर्तमान संख्या (Ntemp) और उन कणों की संख्या में अंतर की गणना करती है जिन्हें सिस्टम को धारण करना चाहिए (N0)। यह कणों के एक हिस्से को आउटपुट में वापस जोड़ता है और इस प्रकार सिस्टम में कुल कण संख्या स्थिरता बनाता है बजाय सभी को क्षय होने के।

मैं ODE में समय के कदम के रूप में समस्या की आयामीता और पिकोसेकंड या नैनोसेकंड के साथ काम करने में कुछ अंतर के बारे में एक नया प्रश्न भी प्रस्तुत करूंगा।

आप सभी को धन्यवाद। :)


3
मूलभूत समस्या यह है कि आप जबरन एक अनुकूली विधि का उपयोग कर रहे हैं जैसे ode45()कि समकालिक कदम उठाना। क्यों, ठीक है, क्या आप "विशाल वेक्टर" की पीढ़ी से बच रहे हैं? यदि आपको बिल्कुल समान बिंदुओं की आवश्यकता है, तो ode45()हमेशा की तरह आगे बढ़ें, और फिर प्रक्षेप का उपयोग करें।
जेएम

हम्म ... यह समस्या हो सकती है। इन निश्चित चरणों की उत्पत्ति यह थी कि कहीं न कहीं मुझे कणों की संख्या को फिर से सामान्य करने की आवश्यकता थी, इससे पहले कि वे सभी क्षय हो जाएं। लेकिन हो सकता है कि मैं इसे ओडफुन में सामान्यीकरण करके "विशाल समय वेक्टर" का उपयोग कर सकता हूं । इसके अलावा, ode45 में इनपुट 4 * 129 * 129 संख्या है। मुझे डर था अगर मैं समय के कदमों का उपयोग नहीं करता तो मेरे पास पर्याप्त मेमोरी नहीं होगी। y

यदि स्मृति कार्य करती है, तो इसमें एक विकल्प होना चाहिए जो ode45()आपको एक निश्चित सीमा से बड़े चरणों को बनाए रखने की अनुमति देगा; आपको उस पर गौर करने की इच्छा हो सकती है।
जेएम

1
इसका उत्तर सिर्फ स्थानीय त्रुटि अनुमान का उपयोग करना है। ODE45 में एक बनाया गया है, इसलिए इसका उपयोग करना सबसे आसान काम है, लेकिन आप वैकल्पिक रूप से अपना खुद का कोड बना सकते हैं।
डेविड केचेसन

1
0.11/समयαΔटी(एनटी-एन0)Δटी

जवाबों:


4

चूंकि आपने अपना MATLAB कोड पोस्ट नहीं किया है, मुझे यकीन नहीं है कि आप ode45 को कैसे कॉल कर रहे हैं। मुझे लगता है कि आप ode45 के लिए प्रत्येक कॉल पर tspan वेक्टर (दूसरा तर्क) बदल रहे हैं। समझने वाली पहली बात यह है कि tspan वेक्टर का (लगभग) ode45 द्वारा उपयोग किए जाने वाले समय कदम पर कोई प्रभाव नहीं है। Tspan वेक्टर बस आपको ode45 को एकीकरण के समय के अंतराल पर और आप कितने समय के लिए आउटपुट देना चाहते हैं। Rodea-Kutta एल्गोरिथ्म द्वारा ode45 में उपयोग किए जाने वाले समय चरण को निर्धारित सटीकता प्राप्त करने के लिए आंतरिक रूप से समायोजित किया जाता है। इस सटीकता को नियंत्रित करने वाले दो पैरामीटर ode45 को दिए गए विकल्प संरचना में RelTol और AbsTol हैं। उनके पास उचित चूक हैं और जब से आपने इन का उल्लेख नहीं किया है, मैं मान रहा हूं कि आपने उन्हें नहीं बदला।

मैंने कहा "लगभग" सामान्य ode45 समय कदम पर कोई प्रभाव नहीं है। यदि आप समय अंतराल पर आउटपुट का अनुरोध कर रहे हैं, तो समय कदम ode45 के सापेक्ष बहुत कम होगा अन्यथा, फिर उसे अपने आउटपुट अनुरोध को पूरा करने के लिए समय कदम को कम करना होगा। मेरा मानना ​​है कि जेएम मान रहा है कि यह क्या हो रहा है। आपको इतने उत्पादन समय पर समाधान की आवश्यकता क्यों है? आमतौर पर यह एक चिकनी भूखंड उत्पन्न करने के लिए पर्याप्त समय पर आउटपुट का अनुरोध करने के लिए पर्याप्त है।

जैसा कि आप देख रहे हैं कि समाधान में परिवर्तन, शायद RelTol और AbsTol के डिफ़ॉल्ट मान आपकी समस्या के लिए उपयुक्त नहीं हैं। मेरा सुझाव है कि एक एकल कॉल के साथ ode45 पर अपने लूप की जगह लें, कुछ उचित समय पर आउटपुट का अनुरोध करें, और जब तक आप एक परिवर्तित समाधान प्राप्त नहीं करते हैं तब तक RelTol और AbsTol के छोटे मूल्यों के साथ प्रयोग करें।


जवाब के लिए धन्यवाद। इस कारण से मुझे इतने सारे आउटपुट समय पर एक समाधान की आवश्यकता थी क्योंकि अगर लहर फ़ंक्शन को नियमित रूप से सामान्य नहीं किया जाता है, तो सब कुछ ठीक हो जाता है और मेरा सिस्टम खाली हो जाता है। इसलिए मैंने छोटे त्सपन वैक्टर के साथ ode45 को एक लूप में डाल दिया ताकि मैं प्रत्येक त्सपन वेक्टर के बाद फिर से सामान्य कर सकूं।

2

चूंकि nonlinear Schrödinger समीकरण है, ठीक है, nonlinear, इसमें स्थिर राज्यों की एक बड़ी संख्या हो सकती है, जिनमें से कुछ स्थिर हो सकते हैं। भौतिक वास्तविकता में, एक विशेष राज्य से शुरू होकर, प्रणाली एक अंतिम स्थिति में नियत रूप से विकसित होगी। यदि संख्यात्मक योजना आपको अलग-अलग विवेक (समय कदम) के लिए अलग-अलग परिणाम देती है, तो यह आपके विवेक का मूलभूत दोष है। अपना कोड जांचें।

ψ0

ψटी=एफ(ψ),
एफ(ψ0)=0।
जी(ψ)=Ω(ψ)
()एफ(ψ)=0(ψ)(ψ)=-|ψ|4

हाँ। मैं अपने आउटपुट समाधान के घनत्व की रूपरेखा तैयार करता हूं और जब यह लंबे समय तक नहीं बदलता है, तो मूल रूप से विकसित होना बंद हो जाता है, मुझे लगता है कि मैं एक स्थिर राज्य में पहुंच गया हूं। लेकिन मुझे यकीन नहीं है कि ऊर्जा घनत्व को देखने में मदद मिल सकती है क्योंकि तरंग फ़ंक्शन एक स्पिनर है (+2, +1, -1, -2,) स्पिन घटकों के साथ। मुझे नहीं लगता कि प्रत्येक घटक को एकीकृत करने से मुझे संघनन की ऊर्जा मिलेगी, लेकिन जब मैं जमीनी स्थिति में पहुंच जाता हूं, तो ऊर्जा घनत्व स्थिर होना चाहिए और इस तरह एक निरंतरता, यह एक सही समाधान के लिए एक संकेत है।

1

समस्या सुलझ गयी:

सामान्यीकरण को ODE में मूल्यांकन किए गए फ़ंक्शन का एक हिस्सा होना चाहिए। ODE को कई चरणों में तोड़ना और उनके बीच सामान्य होना प्रतीत होता है कि संख्यात्मक अस्थिरता है और ODE में समय अंतराल के आधार पर अलग-अलग परिणाम उत्पन्न करता है। (अधिक विवरण के लिए प्रश्न 2 में संपादित देखें।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.