유한 차분 법으로 이산 된 대류 방정식의 경계 조건


14

유한 차분 법을 사용하여 PDE를 해결할 때 경계 조건을 선택하는 방법을 설명하는 데 도움이되는 몇 가지 리소스를 찾고 있습니다.

현재 내가 이용할 수있는 책과 메모는 비슷한 것을 말합니다.

경계가있을 때 안정성을 관리하는 일반적인 규칙은 소개 텍스트에 비해 너무 복잡합니다. 그들은 정교한 수학 기계가 필요합니다

(A. Iserles 미분 방정식의 수치 분석에서 첫 번째 과정)

예를 들어, 이류 방정식에 대해 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

Sloede의 답변은 매우 철저하고 정확합니다. 이해하기 쉽도록 몇 가지 점을 추가하고 싶었습니다.

기본적으로 모든 파동 방정식에는 고유 한 파동 속도와 방향이 있습니다. 1 차원 파동 방정식의 경우 : 파동 속도는 정보가 도메인에서 전파되는 속도뿐만 아니라 그 방향도 결정 하는 상수 a 입니다. 경우 > 0 , 정보는 왼쪽에서 오른쪽으로 진행되고있는 경우 < 0 그것은 다른 방법이 없잖아요.

ut+aux=0
aa>0a<0

도약 개구리 방법의 경우 방정식을 이산화하면 다음과 같은 결과를 얻을 수 있습니다. 또는 : U N =U N - 2 I +μ(U N - 1 I + 1 -U N - 1 I - 1 )여기서μ=-Δt/ΔX. 귀하의 경우μ>0

uinuin22Δt+aui+1n1ui1n12Δx=0
uin=uin2+μ(ui+1n1ui1n1)
μ=Δ/Δ엑스μ>0이것은 왼쪽으로가는 파도로 해석됩니다. 이제 생각하면 왼쪽으로 이동하는 파도는 오른쪽 경계에서 경계 조건 만 필요합니다. 왼쪽의 모든 값이 오른쪽 이웃을 통해 업데이트되기 때문입니다. 실제로 왼쪽 경계에 값을 지정하는 것은 문제의 특성과 일치하지 않습니다. 간단한 업 윈드와 같은 특정 방법에서는 스킴에 올바른 이웃 만 포함되기 때문에 자동으로 처리됩니다. 도약 개구리와 같은 다른 방법에서는 "올바른"값을 지정해야합니다.

이것은 일반적으로 내부 도메인으로부터 외삽 법을 통해 이루어지며 결 측값을 찾습니다. 다차원 및 비정규 문제의 경우, 여기에는 자속 자코비 안의 모든 고유 벡터를 찾아 경계의 어떤 부분이 실제로 경계 조건을 필요로하고 어느 부분이 외삽을 필요로하는지 결정하는 것이 포함됩니다.


물리적으로이 방정식을 왼쪽과 오른쪽의 경계 조건과 함께 사용한다는 것은 무엇을 의미합니까?
Frank

5

일반적인 답변
문제는 경계 조건을 전혀 설정하지 않거나 지정하지 않는 것입니다. 수치 문제는 잘못 정의되어 있습니다.

일반적으로 경계 조건을 지정하는 두 가지 방법이 있습니다.

  1. 0101
  2. 경계에서 내부 정보 만 사용하도록 숫자 스텐실을 변경하십시오.

당신이가는 길은 문제의 물리학에 달려 있습니다. 파동 방정식 유형 문제의 경우 외부 경계 조건이 필요한지 또는 내부 솔루션을 사용할지 여부를 결정하기 위해 플럭스 자코비 안의 고유 값을 결정합니다 (이 방법을 일반적으로 '업 와인딩'이라고 함).



나는1나는+1나는+1나는=10100+1101

1100

아래에서 소스 코드의 수정 된 버전을 찾을 수 있습니다.

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

정답입니다. Scide에 오신 것을 환영합니다. 한 가지 질문은, 일반적으로 도메인의 한 경계에서만 정보를 가져 오는 단측 스텐실을 사용하는 것으로 정의 된 "업 와인딩"입니다. 당신은 당신의 응답으로 그 말을 하시겠습니까?
Aron Ahmadia

1
네 확실합니다. 대답이 명확하지 않으면 죄송합니다. 그러나 일반적으로 "상향"은 정보 흐름의 방향을 고려한다는 의미입니다. 그것은 당신이 솔루션의 한쪽을 완전히 버린다는 것을 의미 할 필요는 없으며, 단지 "상향"방향에있는 솔루션의 부분을 선호한다는 것을 의미합니다.
Michael Schlottke-Lakemper

N = 1000코드를 조금 더 길게 만들고 실행하면 코드가 예상대로 작동하지 않는 것을 알 수 있습니다.
Simon Morris

그 이유는 "빠른 수정"솔루션이 물리적으로 건전하지 않고 솔루션의 가짜 진동에 민감하기 때문입니다. 실제 과학 계산에는 이것을 사용하지 마십시오!
Michael Schlottke-Lakemper

2

그래서 나는 이것을 좀 더 자세히 살펴 보았고, 이것이 (적어도 내가 처리하고있는 기본 경우) 메소드의 그룹 속도에 달려있는 것처럼 보입니다.

예를 들어 leapfrog 방법은 다음과 같습니다.

나는+1=나는1+μ(나는+1나는1)

형태의 솔루션 시도 케이=이자형나는(ζ케이Δ엑스+ω(ζ)Δ) 우리는 찾는다:

이자형2나는ωΔ=1+μ이자형나는ωΔ(이자형나는ζΔ엑스이자형나는ζΔ엑스)

(ωΔ)=μ(ζΔ엑스)

ωζ=코사인(ζΔ엑스)1μ2에스나는2(ζΔ엑스)[1,1]

이제 경계 조건의 그룹 속도를 찾아야합니다.

내 방법 :1+2=1+μ2+1

경계 그룹 속도는 다음과 같이 계산할 수 있습니다.

2나는(ωΔ)=μ이자형나는ζΔ엑스

경계가 허용하는 그룹 속도를 찾으려면 다음을 찾으십시오.

ω=ζ

코사인(ζΔ엑스)=0,μ(ζΔ엑스)=2(ζΔ)

ζ=π2Δ엑스 줄 것이다 μ=2(μπ2) 에 대한 해결책 [1,1]존재합니다. (대부분의 선택을 위해μ 적어도)


내가 문학에서 찾은 해결책은 0+1=1 외부에 경계 파수가 있기 때문에 [1,1].

나는 그것을 완전히 이해하기 전에 여전히 이것에 대해 꽤 많이 읽었습니다. 내가 찾고있는 핵심 단어는 GKS 이론이라고 생각합니다.

이 모든 Iserles Part III 노트의 출처


내가 한 일에 대한 명확한 계산은 여기에서 찾을 수 있습니다 : http://people.maths.ox.ac.uk/trefethen/publication/PDF/1983_7.pdf


-2

여러분, 저는이 사이트를 처음 접했습니다. 어쩌면 이곳은 물어볼 곳이 아니지만 여기에서 매우 새롭기 때문에 저를 용서해주십시오 :) 나는 매우 비슷한 문제를 겪고 있습니다. 유일한 차이점은 내 경우에는 코사인 웨이브입니다. 내 코드는 다음과 같습니다. 모두 지우기; clc; 모두 닫으십시오.

M = 1000; N = 2100;

mu = 0.5;

c = [mu 0 -mu]; f = @ (x) 1-cos (20 * pi * x-0.025). ^ 2; u = 0 (M, N); x = 0 : (1 / M) : 0.05; u (1 : 길이 (x), 1) = f (x); u (1 : 길이 (x), 2) = f (x-mu / (M)); x = 린 스페이스 (0,1, M);

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 1.5 -0.5 2]) 인발; 일시 중지 %

여기에 이미이 코드가 있지만 어떤 이유로 코사인 웨이브와 관련이있을 수 있습니다. 제 코드가 실패합니다 : / 어떤 도움을 주시면 감사하겠습니다 :) 감사합니다!


2
SciComp.SE에 오신 것을 환영합니다! 이것을 새로운 질문으로 만들어야합니다. (답변은 실제 답변만을위한 것입니다.) 하단에 "자신의 질문 링크"를 사용하는 경우 (연한 노랑색은 진한 노랑색이며, 거기에 있는지 모르는 경우에는 조금 어렵습니다) 질문을이 질문에 자동으로 연결합니다. (이 질문에 대한 링크를 귀하의 질문에 포함시킬 수도 있습니다.)
Christian Clason
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.