0,1 [] में गर्मी समीकरण के लिए आवधिक सीमा की स्थिति


13

हमें एक आयाम में एक चिकनी प्रारंभिक हालत और गर्मी समीकरण पर विचार करें:

tu=xxu
खुला अंतराल में ]0,1[ , और हमें लगता है कि हम परिमित अंतर के साथ संख्यानुसार इसे हल करना चाहते हैं।

मुझे पता है कि मेरी समस्या को अच्छी तरह से प्रस्तुत करने के लिए, मुझे इसे x=0 और पर सीमा स्थितियों के साथ समाप्त करने की आवश्यकता है x=1। मुझे पता है कि डिरिक्लेट या न्यूमैन अच्छा काम करते हैं।

अगर मेरे पास पहले मामले में N आंतरिक बिंदु xk=kN+1 के लिएk=1,,N, तो मेरे पास हैNअज्ञात:uk=u(xk)के लिएk=1,,N, क्योंकिuसीमा पर निर्धारित है।

दूसरे मामले में मैं वास्तव में है N+2 अज्ञात u0,,uN+1 , और मुझे पता दो काल्पनिक अंक की adjunction के साथ सीमा पर Laplacian discretize, उदाहरण के लिए (सजातीय) न्यूमन ईसा पूर्व का उपयोग कैसे करें x1 और xN+2 और समानताएं:

u1u12h=0=uN+2uN2h

मेरा प्रश्न समय-समय पर ई.पू. मुझे लगता है कि मैं एक समीकरण, इस्तेमाल कर सकते हैं महसूस कर रही है अर्थात् लेकिन शायद दो, और फिर मैं का प्रयोग करेंगे एक्स यू ( 0 ) = एक्स यू ( 1 )

u(0)=u(1)
xu(0)=xu(1)

किंतु मुझे यकीन नहीं है। मुझे नहीं पता कि मेरे पास कितने अज्ञात होने चाहिए। क्या यह ?N+1


क्या आपके पास Dirichlet या Neumann सीमा स्थितियां हैं? भूत कोशिकाओं की संख्या आपके लिए न्यूमैन सीमा स्थितियों के अनुमान पर निर्भर करती है।
ilciavo

@ilciavo, quesition आवधिक सीमा स्थितियों के बारे में है।
बिल बैर्थ

जवाबों:


8

ऐसा करने का सबसे अच्छा तरीका है (जैसा कि आपने कहा) केवल आवधिक सीमा की शर्तों की परिभाषा का उपयोग करें और अपने समीकरणों को इस तथ्य का उपयोग करके प्रारंभ से सही ढंग से सेट करें कि । वास्तव में, और भी अधिक दृढ़ता से, आवधिक सीमा की स्थिति x = 0 को x = 1 से पहचानती है । इस कारण से, आपको अपने समाधान डोमेन में इनमें से एक बिंदु होना चाहिए। जब कोई सीमा नहीं होती है, तो आवधिक सीमा शर्तों का उपयोग करते समय एक खुले अंतराल का कोई मतलब नहीं होता हैu(0)=u(1)x=0x=1

इस तथ्य का मतलब है कि आपको पर एक बिंदु नहीं रखना चाहिए क्योंकि यह x = 0 के समान है । साथ Discretizing एन + 1 अंक, तो आप इस तथ्य का उपयोग करें कि परिभाषा के द्वारा, के बाईं ओर बिंदु एक्स 0 है एक्स एन और के अधिकार के लिए बिंदु एक्स एन है एक्स 0x=1x=0N+1x0 xNxN x0

एक आवधिक ग्रिड का योजनाबद्ध

आपके पीडीई को तब अंतरिक्ष में ized के रूप में विवेकाधीन किया जा सकता है

t[x0x1xN]=1Δx2[xN2x0+x1x02x1+x2xN12xN+x0]

यह के रूप में मैट्रिक्स के रूप में लिखा जा सकता है जहां एक=[ - 2 1 0 0 1 1 - 2 1 0 0

tx=1Δx2Ax
A=[21001121000012110012].

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

tu=xxu+b(t,x)
x[1,1)uRef(t,x)=exp(t)cos(5πx)b(t,x)=(25π21)exp(t)cos(5πx)
clear

% Solve: u_t = u_xx + b
% with periodic boundary conditions

% analytical solution:
uRef = @(t,x) exp(-t)*cos(5*pi*x);
b = @(t,x) (25*pi^2-1)*exp(-t)*cos(5*pi*x);

% grid
N = 30;
x(:,1) = linspace(-1,1,N+1);

% leave off 1 point so initial condition is periodic
% (doesn't have a duplicate point)
x(end) = [];
uWithMatrix = uRef(0,x);
uNoMatrix = uRef(0,x);

dx = diff(x(1:2));
dt = dx.^2/2;

%Iteration matrix:
e = ones(N,1);
A = spdiags([e -2*e e], -1:1, N, N);
A(N,1) = 1;
A(1,N) = 1;
A = A/dx^2;

%indices (left, center, right) for second order centered difference
iLeft = [numel(x), 1:numel(x)-1]';
iCenter = (1:numel(x))';
iRight = [2:numel(x), 1]';

%plot
figure(1)
clf
hold on
h0=plot(x,uRef(0,x),'k--','linewidth',2);
h1=plot(x,uWithMatrix);
h2=plot(x,uNoMatrix,'o');
ylim([-1.2, 1.2])
legend('Analytical solution','Matrix solution','Matrix-free solution')
ht = title(sprintf('Time t = %0.2f',0));
xlabel('x')
ylabel('u')
drawnow

for t = 0:dt:1
    uWithMatrix = uWithMatrix + dt*( A*uWithMatrix + b(t,x) );
    uNoMatrix = uNoMatrix + dt*(  ( uNoMatrix(iLeft) ...
                                - 2*uNoMatrix(iCenter) ...
                                  + uNoMatrix(iRight) )/dx^2 ...
                                + b(t,x) );
    set(h0,'ydata',uRef(t,x))
    set(h1,'ydata',uWithMatrix)
    set(h2,'ydata',uNoMatrix)
    set(ht,'String',sprintf('Time t = %0.2f',t))
    drawnow
end

प्रारंभिक स्थिति का प्लॉट

टी = 0.5 पर समाधान का प्लॉट

T = 1.0 पर हल का प्लॉट

टी = 2.0 पर समाधान का प्लॉट


1
बढ़िया और सरल उपाय !! मामले में किसी को इसकी आवश्यकता है यहां अजगर में कार्यान्वयन
ilciavo

x

@ bela83 आप सही हैं कि प्रारंभिक स्थिति से अधिक कुछ भी निर्दिष्ट करने की आवश्यकता नहीं है। ऐसा करने से एक निर्धारित प्रणाली खत्म हो जाएगी। आपको केवल अंतराल के अंत बिंदुओं के पास थोड़ा सावधान रहने की ज़रूरत है ताकि आप समय-समय पर चीजों को ठीक से लपेट सकें। ऐसा करने के लिए कई वैध तरीके हैं।
डग लिपिंस्की

-1

के अनुसार इस आप के रूप में आवधिक सीमा शर्तों को लागू करना चाहिए:

u(0,t)=u(1,t)ux(0,t)=ux(1,t)

हीट इक्वेशन को अलग करने का एक तरीका यह है कि पिछड़े यूलर का इस्तेमाल किया जाए

un+1unΔt=ui+1n+12uin+1+ui+1n+1Δx2

समीकरणों की प्रणाली को हल करना

[IΔtΔx2A][u1n+1u1n+1uNn+1]=[u1nu2nuNn]

जहाँ

A=[210000121000012100001210000120000012]

u0uN+1

u1uN=0u2u02ΔxuN+1uN12Δx=0

धारा २.११ लेवेके अनुसार यह आपको लिए २ क्रम सटीकता देता हैux

[0100010101010100000IΔtΔx2A0000000][u0n+1u1n+1u2n+1uNn+1uN+1n+1]=[00u1nu2nuNn]

जो आपको N + 2 समीकरण और N + 2 अज्ञात देता है।

आप पहले समीकरणों और भूत कोशिकाओं से भी छुटकारा पा सकते हैं और एन समीकरण और एन अज्ञात की एक प्रणाली पर पहुंच सकते हैं।


u1uNuN]0,1[xk=kN+1xN=NN+1

यह केवल अनुक्रमण का विषय है। आप कोशिकाओं (या अंक) के साथ u 0 से u N - 1 से शुरू करते हैं और आप दो कोशिकाओं को जोड़ते हैंNu0uN1u1uNu1uNu0uN+1

u0=uN+1N+1

मैंने नोटेशन बदल दिया है। यह u x के लिए सन्निकटन के क्रम पर निर्भर करता हैuxu(0,t)=u(1,t)ux(0,t)=ux(1,t)

1
u1 = uN आपके सिस्टम में एक अतिरिक्त प्रतिबंध (समीकरण u1 = uN = 0)
जोड़ता
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.