परिमित समीकरण के लिए सीमा की स्थिति एक परिमित अंतर विधि द्वारा विवेकाधीन है


14

मैं पीडीई को हल करने के लिए परिमित अंतर विधियों का उपयोग करते समय सीमा की स्थिति का चयन करने में मदद करने के लिए कुछ संसाधनों को खोजने की कोशिश कर रहा हूं।

वर्तमान में मेरे पास जितनी भी किताबें और नोट्स हैं, वे सभी समान हैं:

सीमाओं की उपस्थिति में स्थिरता को नियंत्रित करने वाले सामान्य नियम एक परिचयात्मक पाठ के लिए बहुत जटिल हैं; उन्हें परिष्कृत गणितीय मशीनरी की आवश्यकता होती है

(ए 'आइस्लेर्स ए फर्स्ट कोर्स इन न्यूमेरिकल एनालिसिस ऑफ डिफरेंशियल इक्वेशन)

उदाहरण के लिए, जब संवहन समीकरण के लिए 2-चरण लीपफ्रॉग विधि को लागू करने की कोशिश की जा रही है:

uin+1=uin1+μ(ui+1nui1n)

MATLAB का उपयोग करना

M = 100; N = 100;

mu = 0.5;

c = [mu 0 -mu];
f = @(x)(exp(-100*(x-0.5).^2));

u  = zeros (M, N);
x = 1/(M+1) * (1:M);

u(:,1) = f(x);
u(:,2) = f(x + mu/(M+1));

for i = 3:N
    hold off;
    u(:,i) = conv(u(:,i-1),c,'same') + u(:,i-2);
    plot(x, u(:,i));
    axis( [ 0 1 0 2] )
    drawnow;
end

समाधान तब तक अच्छी तरह से व्यवहार करता है जब तक यह सीमा तक नहीं पहुंचता है, जब यह बहुत अचानक खराब व्यवहार करना शुरू कर देता है।

मैं कहां सीख सकता हूं कि इस तरह से सीमा की स्थिति को कैसे संभालना है?

जवाबों:


12

स्लोएड की प्रतिक्रिया बहुत गहन और सही है। मैं बस कुछ बिंदुओं को जोड़ना चाहता था ताकि इसे आसानी से समझा जा सके।

ut+aux=0
aa>0a<0

uinuin22Δt+aui+1n1ui1n12Δx=0
uin=uin2+μ(ui+1n1ui1n1)
μ=aΔt/Δxμ>0जो बाईं ओर जाने वाली तरंग में बदल जाता है। अब यदि आप इसके बारे में सोचते हैं, तो एक लहर जो बाईं ओर यात्रा कर रही है, उसे केवल दाईं सीमा पर एक सीमा स्थिति की आवश्यकता होगी क्योंकि बाईं ओर के सभी मान अपने दाहिने पड़ोसियों के माध्यम से अपडेट किए जा रहे हैं। वास्तव में बाईं सीमा पर किसी भी मूल्य को निर्दिष्ट करना समस्या की प्रकृति के साथ असंगत है। कुछ तरीकों में, सरल अपविंड की तरह, यह स्वचालित रूप से ध्यान रखा जाता है क्योंकि इस योजना में स्टेंसिल में केवल सही पड़ोसी शामिल हैं। अन्य तरीकों में, लीप मेंढक की तरह, आपको कुछ "सही" मान निर्दिष्ट करना होगा।

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


शारीरिक रूप से, इस समीकरण को बाईं और दाईं ओर एक सीमा स्थिति के साथ उपयोग करने का क्या मतलब होगा?
फ्रैंक

5

सामान्य उत्तर
आपकी समस्या यह है कि आप सीमाएँ (या यहाँ तक कि) निर्धारित नहीं करते हैं - आपकी संख्यात्मक समस्या अ-परिभाषित है।

आमतौर पर, सीमा की शर्तों को निर्दिष्ट करने के दो संभावित तरीके हैं:

  1. u0u101
  2. संख्यात्मक स्टैंसिल बदलें ताकि यह सीमा पर केवल आंतरिक जानकारी का उपयोग करेगा।

आप किस तरह से भारी जाते हैं यह आपकी समस्या की भौतिकी पर निर्भर करता है। वेव-समीकरण प्रकार की समस्याओं के लिए आमतौर पर फ्लक्स जैकबियन के आइगेनवैल्यू को निर्धारित करता है ताकि यह तय किया जा सके कि बाहरी सीमा की स्थिति की आवश्यकता है, या क्या आंतरिक समाधान का उपयोग किया जाना है (इस पद्धति को आमतौर पर 'अपवाइंडिंग' कहा जाता है)।



ui1nui+1nin+1i=1u0nu100n+1u101n

u1nu100n

आप नीचे अपने स्रोत कोड का एक संशोधित संस्करण पा सकते हैं:

M = 100; N = 100;

mu = 0.5;

c = [mu 0 -mu];
f = @(x)(exp(-100*(x-0.5).^2));

u  = zeros (M, N);
x = 1/(M+1) * (1:M);

u(:,1) = f(x);
u(:,2) = f(x + mu/(M+1));

for i = 3:N
    hold off;
    %u(:,i) = conv(u(:,i-1),c,'same') + u(:,i-2);

    % Apply the numerical stencil to all interior points
    for j = 2:M-1
        u(j,i) = u(j,i-2) + mu*(u(j+1,i-1) - u(j-1,i-1));
    end

    % Set the boundary values by interpolating linearly from the interior
    u(1,i) = 2*u(2,i) - u(3,i);
    u(M,i) = 2*u(M-1,i) - u(M-2,i);

    plot(x, u(:,i));
    axis( [ 0 1 0 2] )
    drawnow;
end

अच्छा जवाब, और scicomp, Sloede का स्वागत है। एक प्रश्न, आम तौर पर मैं "upwinding" को एक तरफा स्टैंसिल के उपयोग के रूप में परिभाषित करता हूं, जहां जानकारी केवल डोमेन की एक सीमा से खींची गई है। क्या आपके कहने का मतलब है कि आपकी प्रतिक्रिया में?
एरन अहमदिया

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

यदि आप N = 1000कोड बनाते हैं और थोड़ी देर चलाते हैं तो आपको लगता है कि यह अपेक्षा के अनुरूप व्यवहार नहीं करता है।
साइमन मॉरिस

इसका कारण यह है कि मेरा "क्विक फिक्स" समाधान शारीरिक रूप से ध्वनि नहीं है, और इसके शीर्ष पर बल्कि समाधान में संवेदी दोलनों के प्रति संवेदनशील है। वास्तविक वैज्ञानिक संगणना के लिए इसका उपयोग न करें!
माइकल श्लोट्के-लैम्पर

2

इसलिए मैंने इसे कुछ और विस्तार से देखा है, और ऐसा लगता है कि यह (कम से कम मूल मामलों में जो मैं संभाल रहा हूं) विधि के समूह वेग पर निर्भर करता है।

छलांग विधि (उदाहरण के लिए) है:

uin+1=uin1+μ(ui+1nui1n)

ukn=ei(ζkΔx+ω(ζ)nΔt)

e2iωΔt=1+μeiωΔt(eiζΔxeiζΔx)

sin(ωΔt)=μsin(ζΔx)

dωdζ=cos(ζΔx)1μ2sin2(ζΔx)[1,1]

अब हमें सीमा स्थितियों के समूह वेग का पता लगाने की आवश्यकता है:

u1n+2=u1n+μu2n+1

हम निम्नानुसार सीमा समूह के वेग की गणना कर सकते हैं:

2isin(ωΔt)=μeiζΔx

इसलिए कुछ समूह वेगों को खोजने के लिए जो सीमाओं को हमें खोजने की आवश्यकता है:

ω=cζ

cos(ζΔx)=0,μsin(ζΔx)=2sin(ζcΔt)

ζ=π2Δxμ=2sin(cμπ2)c[1,1]μ


u0n+1=u1n[1,1]

इससे पहले कि मैं इसे पूरी तरह से समझ पाऊं, इसके बारे में पढ़ने के लिए मैं अभी भी थोड़ा बहुत अधिक हूं। मुझे लगता है कि मुझे जिन महत्वपूर्ण शब्दों की तलाश है, वे जीकेएस सिद्धांत हैं।

यह सब एक Iserles भाग III नोट्स के लिए स्रोत


मैंने जो कुछ किया है उसकी एक स्पष्ट गणना यहां पाई जा सकती है: http://people.maths.ox.ac.uk/trefethen/publication/PDF/1983_7.pdf


-2

दोस्तों मैं इस साइट के लिए बहुत नया हूँ। शायद यह पूछने की जगह नहीं है, लेकिन कृपया मुझे माफ कर दें क्योंकि मैं यहां बहुत नया हूं :) मुझे एक समान समस्या है, केवल एक ही अंतर है जो शुरुआती कार्य है, जो मेरे मामले में, एक कोसिन लहर है। मेरा कोड यह है: सभी स्पष्ट; सीएलसी; सब बंद करें;

एम = 1000; एन = 2100;

म्यू = 0.5;

ग = [मु ० -मु]; f = @ (x) 1- cos (20 * pi * x-0.025)। ^ 2; u = शून्य (M, N); x = 0: (1 / एम): 0.05; u (1: लंबाई (x), 1) = f (x); u (1: लंबाई (x), 2) = f (x - mu / (M)); एक्स = linspace (0,1, एम);

i = 3 के लिए: N होल्ड ऑफ;

% Apply the numerical stencil to all interior points
for j = 2:M-1
    u(j,i) = u(j,i-2) - mu*(u(j+1,i-1) - u(j-1,i-1));
end

% Set the boundary values by interpolating linearly from the interior
u(M,i) =  2*u(M-1,i-1) - u(M-2,i-1);

प्लॉट (x, u (:, i)); अक्ष ([० १.५ -0.5 २]) ड्रावॉन; % विराम समाप्त

यहां पहले से ही यह कोड मौजूद है, लेकिन किसी कारण से, शायद कॉशन वेव से संबंधित, मेरा कोड विफल रहता है: / किसी भी मदद की सराहना की जाएगी :) धन्यवाद!


2
SciComp.SE में आपका स्वागत है! आपको इसे एक नया प्रश्न बनाना चाहिए। (उत्तर केवल, ठीक-ठीक, वास्तविक उत्तरों के लिए हैं।) यदि आप नीचे "अपने सवाल का लिंक पूछें" का उपयोग करते हैं (यह हल्के पीले रंग पर गहरा पीला है, तो यह देखने के लिए थोड़ा मुश्किल है कि क्या आपको पता नहीं है) , यह स्वतः ही प्रश्न को इस से जोड़ देगा। (आप इस प्रश्न का लिंक भी अपने में शामिल कर सकते हैं।)
क्रिश्चियन क्लैसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.