เงื่อนไขขอบเขตเป็นระยะสำหรับสมการความร้อนใน] 0,1 [


13

ขอให้เราพิจารณาสภาพเริ่มต้นที่ราบรื่นและสมการความร้อนในหนึ่งมิติ: ในช่วงเวลาที่เปิด] 0 , 1 [และให้เราคิดว่าเราต้องการแก้มันด้วยความแตกต่างแน่นอน

tu=xxu
]0,1[

ฉันรู้ว่าสำหรับปัญหาของฉันจะดีถูกวางฉันต้องยกมันด้วยเงื่อนไขขอบเขตที่และx = 1 ฉันรู้ว่า Dirichlet หรือ Neumann ทำงานได้ดีx=0x=1

ถ้าฉันมีในกรณีแรกการตกแต่งภายในชี้x k = kNสำหรับk=1,,Nจากนั้นฉันมีNunknowns:uk=u(xk)สำหรับk=1,,Nเพราะคุณถูกกำหนดไว้ที่ขอบเขตxk=kN+1k=1,,NNuk=u(xk)k=1,,Nu

ในกรณีที่สองฉันมีไม่ทราบแน่ชัดคุณ0 , , u N + 1และฉันรู้วิธีใช้ (เป็นเนื้อเดียวกัน) Neumann BC เพื่อแยก Laplacian ที่ชายแดนเช่นแยกส่วนของจุดสมมติสองจุดx - 1และx N + 2และความเท่ากัน:N+2u0,,uN+1x1xN+2

u1u12h=0=uN+2uN2h

คำถามของฉันเกี่ยวกับ BC เป็นระยะ ฉันมีความรู้สึกว่าฉันสามารถใช้สมการหนึ่งคือ แต่อาจจะสองและจากนั้นฉันจะใช้ x u ( 0 ) = x u ( 1 )

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

แต่ฉันไม่แน่ใจ ฉันไม่รู้ว่าฉันควรมีเท่าไร มันเป็นหรือไม่?N+1


คุณมีเงื่อนไขขอบเขต Dirichlet หรือ Neumann หรือไม่? จำนวนเซลล์ผีขึ้นอยู่กับลำดับของการประมาณค่าสำหรับเงื่อนไขขอบเขตของ Neumann ของคุณ
ilciavo

@ilciavo, quesition เกี่ยวกับเงื่อนไขขอบเขตเป็นระยะ
Bill Barth

คำตอบ:


8

u(0)=u(1)x=0x=1

x=1x=0N+1x0 xNxN x0

แผนผังของตารางธาตุ

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

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

แปลงสภาพเริ่มต้น

แปลงที่ t = 0.5

พล็อตของการแก้ปัญหาที่ t = 1.0

แปลงที่ t = 2.0


1
ทางออกที่ยอดเยี่ยมและเรียบง่าย !! ในกรณีที่มีคนต้องการที่นี่การใช้งานใน Python
ilciavo

x

@ bela83 คุณถูกต้องแล้วว่าไม่จำเป็นต้องระบุอะไรมากไปกว่าเงื่อนไขเริ่มต้น การทำเช่นนั้นจะส่งผลให้ระบบมีการกำหนดเกินจริง สิ่งที่คุณต้องทำคือระวังให้ใกล้จุดสิ้นสุดของช่วงเวลาเล็กน้อยเพื่อให้แน่ใจว่าคุณห่อสิ่งต่าง ๆ รอบ ๆ เป็นระยะอย่างถูกต้อง มีวิธีที่ถูกต้องมากมายในการทำเช่นนี้
Doug Lipinski

-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 ไม่ทราบ

นอกจากนี้คุณยังสามารถกำจัดสมการและเซลล์ผีแรกและมาถึงระบบของสมการ N และ N unknowns


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 เพิ่มข้อ จำกัด เพิ่มเติม (สมการ u1 − uN = 0) ให้กับระบบของคุณ
ilciavo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.