Isı denklemi için periyodik sınır koşulu] 0,1 [


13

Düzgün bir başlangıç ​​koşulu ve ısı denklemini bir boyutta ele : açık aralıkta ve bunu sonlu farklarla sayısal olarak çözmek istediğimizi varsayalım.

tu=xxu
]0,1[

Sorunumun iyi pozlanması için bunu ve sınır koşulları ile donatmam gerektiğini biliyorum . Dirichlet veya Neumann'ın iyi çalıştığını biliyorum.x=0x=1

İlk durumda iç noktası , için , o zaman : için , çünkü sınırlarda reçete edilir.Nxk=kN+1k=1,,NNuk=u(xk)k=1,,Nu

İkinci durumda gerçekten var bilinmeyenler , ve iki birleşim, örneğin, sınırda Laplacian kesikli hale (homojen) Neumann BC kullanımı nasıl kurgusal noktalar ve ve eşitlikler:N+2u0,,uN+1x1xN+2

u1u12h=0=uN+2uN2h

Benim sorum periyodik M.Ö. Bir denklem kullanabileceğimi hissediyorum, yani ama belki iki, ve sonra

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

ama emin değilim. Kaç tane bilmediğimi de bilmiyorum. Öyle mi ?N+1


Dirichlet veya Neumann sınır koşullarınız var mı? Hayalet hücre sayısı, Neumann sınır koşulları için yaklaşıklık sırasına bağlıdır.
ilciavo

@ilciavo, soru periyodik sınır koşulları hakkında.
Bill Barth

Yanıtlar:


8

Bunu yapmanın en iyi yolu (dediğin gibi) sadece periyodik sınır koşullarının tanımını kullanmak ve gerçeğini kullanarak en baştan denklemlerinizi doğru şekilde . Aslında, daha da önemlisi, periyodik sınır koşulları ile tanımlar . Bu nedenle çözüm alanınızda bu noktalardan yalnızca birine sahip olmalısınız. Periyodik sınır koşulları kullanılırken açık bir aralık anlamlı değildir, çünkü sınır yoktur .u(0)=u(1)x=0x=1

Bu gerçek, bir nokta koymamanız gerektiği anlamına gelir, çünkü aynıdır . İle kesikli sayı, daha sonra aslında kullanımı , tanımı gereği, solunda noktalı olan ve sağında noktası olan .x=1x=0N+1x0 xNxN x0

periyodik bir ızgara şeması

PDE'niz daha sonra uzayda

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

Bu matris şeklinde yazılabilir

tx=1Δx2Ax
A=[21001121000012110012].

Tabii ki bu matrisi gerçekten oluşturmaya veya depolamaya gerek yok. Sonlu farklar, gerektiğinde ilk ve son noktaları özel olarak ele almaya özen gösterilerek anında hesaplanmalıdır.

Basit bir örnek olarak, aşağıdaki MATLAB betiği alanında periyodik sınır koşulları ile çözer . Üretilen çözüm

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

Başlangıç ​​durumunun grafiği

Çözelti t = 0.5'de arsa

Çözelti t = 1.0'da

Çözelti t = 2.0'da


1
Harika ve basit bir çözüm !! Birisi burada ihtiyacı varsa Python
ilciavo

Harika ! Örneğin kendim için yarı ayrıklaştırma kullandığım için yöntem hakkında çok spesifik olmak istemedim. Ancak denklem için, -derivative üzerinde bir koşul belirtmeye gerek olmadığını doğrularsınız? Daha doğrusu, böyle bir durum kötü bir soruna yol açar mı? x
bela83

@ bela83 Başlangıç ​​koşulundan başka bir şey belirtmenize gerek olmadığı doğrudur. Aksi takdirde aşırı kararlı bir sistem ortaya çıkacaktır. Yapmanız gereken tek şey, aralıkları düzenli aralıklarla düzgün bir şekilde sardığınızdan emin olmak için aralığın uç noktalarına yakın biraz dikkatli olmaktır. Bunu yapmanın birçok geçerli yolu vardır.
Doug Lipinski

-1

Göre bu sen gibi periyodik sınır koşulları empoze olmalıdır:

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

Isı Denklemini geriye doğru Euler kullanarak örtükleştirmenin bir yolu

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

Denklem sisteminin çözümü

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

Nerede

A=[210000121000012100001210000120000012]

Periyodik sınır koşullarınız, iki denklem ve iki ek (hayalet) hücre daha eklenerek dahil edilebilir: ve ;u0uN+1

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

Bölüm 2.11 LeVeque'ye göre, bu size u_x için 2. bir sipariş doğruluğuux

Son olarak denklem sisteminiz şöyle görünecektir:

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

Bu size N + 2 denklemleri ve N + 2 bilinmeyenleri verir.

Ayrıca denklemlerden ve hayalet hücrelerden ilkinden kurtulabilir ve N denklemleri ve N bilinmeyenleri sistemine erişebilirsiniz.


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

Nu0uN1u1uNu1uNu0uN+1

u0=uN+1N+1

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

1
u1 =
uN
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.