완전히 닫힌 Neumann 경계 조건 (유한 경계에서 반사)으로 유한 차분에 의해 이류 방정식을 풀 때 이상한 진동


32

나는 대류 방정식을 풀려고 노력하고 있지만 파도가 경계에서 반사 될 때 솔루션에 이상한 진동이 나타납니다. 아무도 전에이 유물을 본 적이 있다면 원인과 그것을 피하는 방법을 알고 싶습니다!

이 애니메이션 GIF는 별도의 창에서 열어 애니메이션을 봅니다 (캐시 된 한 번에 한 번만 재생 됨). 가우스 펄스의 전파

전파가 첫 번째 경계에서 반사되기 시작할 때까지 전파가 매우 안정적으로 보입니다. 여기서 무슨 일이 일어날 수 있다고 생각하십니까? 며칠 동안 코드를 두 번 확인했지만 오류를 찾을 수 없습니다. 두 가지 전파 솔루션이있는 것 같습니다 : 하나는 긍정적이고 하나는 부정적입니다. 첫 번째 경계에서 반사 후. 솔루션은 인접한 메쉬 포인트를 따라 이동하는 것 같습니다.

구현 세부 사항은 다음과 같습니다.

이류 방정식,

ut=vux

여기서 는 전파 속도입니다.v

크랭크-니콜슨 (Crank-Nicolson 은 가 공간에서 느리게 변할 때 (포리에 변환 될 때 저주파 성분 만 포함 경우에 이류 방정식에 대한 무조건 (pdf 링크) 안정적인 이산화입니다 .u(x)

내가 적용한 이산화는

ϕjn+1ϕjnΔt=v[1β2Δx(ϕj+1nϕj1n)+β2Δx(ϕj+1n+1ϕj1n+1)]

미지수를 오른쪽에두면 선형 형태로 쓸 수 있습니다.

βrϕj1n+1+ϕjn+1βrϕj+1n+1=(1β)rϕj1n+ϕjn+(1β)rϕj+1n

여기서 (현재와 미래 지점 사이의 시간 평균이 균일하게 가중 됨) 및 .r = v Δ tβ=0.5r=vΔt2Δx

이 방정식 세트는 행렬 형식 . 여기서,Aun+1=Mun

A=(1βr0βr1βrβr1βr0βr1)

M=(1(1β)r0(1β)r1(1β)r(1β)r1(1β)r0(1β)r1)

벡터 및 은 우리가 풀고 자하는 양에 대해 알려져 있고 알려지지 않았습니다.u n + 1unun+1

그런 다음 왼쪽과 오른쪽 경계에 닫힌 Neumann 경계 조건 을 적용 합니다. 닫힌 경계 는 두 인터페이스에서 을 의미합니다. 닫힌 경계의 경우 (여기서 작업을 보여주지 않을 것입니다) 위의 방정식을 풀면됩니다. @DavidKetcheson이 지적한 바와 같이, 위의 매트릭스 방정식은 실제로 Dirichlet 경계 조건을 설명 합니다 . Neumann 경계 조건의 경우ux=0

A=(100βr1βrβr1βr001)

최신 정보

이 동작은 내가 사용하는 상수의 선택과는 상당히 독립적 인 것처럼 보이지만 위의 플롯에 대한 값입니다.

  • v = 2
  • dx = 0.2
  • dt = 0.005
  • σ = 2 (가우시안 hwhm)
  • β = 0.5

업데이트 II

0이 아닌 확산 계수 (아래 주석 참조)을 사용한 시뮬레이션 에서는 진동이 사라지지만 파동은 더 이상 반사되지 않습니다! 왜 그런지 모르겠어요?D=1

확산과 대류


위해 무엇을 했 습니까? v
chris mar

v=2이러한 시뮬레이션에서 . 시뮬레이션 설정으로 업데이트하겠습니다. 좋은 생각.
boyfarrell

그런 다음 초기 조건이 오른쪽으로 이동하고 오른쪽 경계를 통해 사라질 것으로 기대합니다. 염두에 두어야 할 것은 셀 페 클릿 수가 2 미만인 대류-확산 방정식에 적용되지 않는 한 중앙 스킴이 스퓨리어스 발진을 일으킬 수 있다는 것입니다.
chris mar

방정식에 부호 오류가있을 수 있다고 생각하십니까? 실제로, 나의 최종 목표는 이것을 advection-diffusion equation과 함께 적용하는 것입니다. 현재 다른 제한 사례를 테스트하고 있습니다. 상기 예에서, 확산 계수는 0으로 설정되었다. 위의 새로운 애니메이션을 포함 시켰습니다. 확산 계수가 0이 아닌 경우 피크가 반영되지 않는 이유를 이해하지 못합니까? 그것은 당신이 언급 한 것과 정확히 같습니다 (방향과는 별도로).
boyfarrell

나는 생각했다 부호가 확인하므로. 두 번째 줄거리는 나에게 좋아 보인다. 왜 반영해야합니까? 변경이 어떻게 든 서명 된 경우에만 발생할 수 있습니다. 중앙 구성표 대신 상향식 구성표를 사용해보십시오. 그러면 과 비슷한 것이 표시 됩니다. v D = 0tu+vxu=0vD=0
chris mar

답변:


28

풀고있는 방정식은 올바른 솔루션을 허용하지 않으므로이 방정식에 대한 반사 경계 조건 과 같은 것은 없습니다 . 특성을 고려하면 오른쪽 경계에만 경계 조건을 부과 할 수 있음을 알게됩니다. 왼쪽 경계에 균일 한 Dirichlet 경계 조건을 적용하려고하는데 수학적으로 유효하지 않습니다.

다시 한번 강조 : 특성에있어서, 상기 용액 형태의 임의의 라인을 따라 일정해야 있다고 에 대한 임의의 정수 . 따라서 왼쪽 경계를 따르는 솔루션은 문제 도메인 내부의 초기 솔루션에 의해 결정됩니다. 거기에 해결책을 강요 할 수 없습니다.xνt=CC

방정식과 달리 수치 체계 올바른 솔루션을 인정합니다. 올바른 모드는 기생 모드라고하며 매우 높은 주파수를 사용합니다. 올바른 파도는 그리드에서 표현할 수있는 가장 높은 주파수와 관련된 톱니파 패킷입니다. 그 파동은 순수하게 당신의 이산화에 의해 만들어진 수치 적 인공물입니다.

강조 하기 위해 : 해결하려는 전체 초기 경계 값 문제를 기록하지 않았습니다. 그렇게하면 수학적으로 제기 된 문제가 아니라는 것이 분명해집니다.

잘 알려지지 않은 문제를 구별 할 때 발생할 수있는 일과 기생 모드 현상에 대한 아름다운 그림이므로 여기에 게시하게되어 기쁩니다. 나에게 당신의 질문에 큰 +1.


토론과 수정에 감사드립니다. 나는 행렬이 미분 방정식과 동일한 속성을 갖지 않을 것이라는 것을 이해 하지 못했습니다 . 따라야 할 더 많은 의견 ...
boyfarrell

예, 이제 이것이 실제로 Dirichlet 경계 조건이 어떻게되는지 수정했습니다. 이 방정식을 푸는 과정을 실제로 이해하기 위해 시도한 것은 처음입니다. 진행 상황을 게시하게되어 기쁩니다!
boyfarrell

@David Ketcheson : 같은 문제가 발생하여 다음 링크에 내 문제를 게시했습니다. scicomp.stackexchange.com/questions/30329/… 문제가 "수학적으로 잘 정의되어 있지 않다"고 말하는 이유를 설명해 주시겠습니까? ? 감사.
허먼 자라 밀로

@HermanJaramillo 당신은 이미 PDE에 의해 결정된 왼쪽 경계에 솔루션 값을 부과하려고합니다. 이류에 대한 논의가 포함 된 모든 교과서에는 유효한 경계 조건과 그 이유가 표시됩니다. 추가 설명과 함께 두 번째 단락을 추가했습니다. 도움이 되길 바랍니다.
David Ketcheson

1
@HermanJaramillo : "수학적으로 잘 정의되어 있지 않다"는 것은 기본적으로 경계에 하나의 함수 값, 경계 조건 및 PDE 자체에 대한 두 개의 방정식이 있음을 의미합니다. 일반적으로이 두 방정식은 서로 모순됩니다. 보다 일반적으로,이를 두 목표가 가능한 한 양호하게 충족되는 최적화 문제로 간주 할 수 있습니다.
davidhigh

0

위의 답변에서 많은 것을 배웠습니다. 문제에 대한 다른 통찰력을 제공한다고 생각하기 때문에이 답변을 포함하고 싶습니다.

일정한 파동 속도 갖는 방정식 를 생각해 보자 .

uxx+1cutt=0.
c

초기 및 경계 조건이 없으면이 방정식은 형식의 해를 갖습니다 . (오른쪽으로 움직이는 펄스)u(x,t)=f(xct)

초기 조건 부과하면 구간의 방정식 해 는 입니다. 경계가 없으며 이것이 해결책입니다.u(x,t0)=p(x)x(,)p[xc(tt0)]

이제 모든 컴퓨터의 메모리가 제한된 후에 경계 도메인 정의한다고 가정하겠습니다 . 그런 다음 와 값을 지정해야합니다 . 그렇지 않으면 계산 적으로 고정됩니다.x[a,b]ab

경계 조건을 정의하는 한 가지 방법은 왼쪽 경계에 Dirichlet을 사용하고 전파되는 솔루션과 일치하는 조건을 사용하는 것입니다. 즉, (초기 시간 이라고 가정 ) t0

u(a,t0)=0,u(b,t0)=p[bc(tt0)].

이것은 오른쪽 가장자리에서 사라질 때까지 오른쪽으로 흐르는 펄스를 생성합니다.

왼쪽 경계에서 디리클레의 애니메이션을 보려면 여기를 누르십시오.

여전히 이해할 수없는 소음이납니다 (누군가 도와주세요?)

다른 옵션은주기적인 경계 조건을 부과하는 것입니다. 그것은 왼쪽에 Dirichlet 경계 조건을 부과하는 대신 왼쪽 경계와 일치하는 웨이브 패킷을 부과 할 수 있습니다. 그건:

u(a,t0)=p[ac(tt0)],u(b,t0)=p[bc(tt0)].

그러나 for 및 , 간격 안에 데이터를 넣어야하므로 길이가 "기간"을 하나 더한 다음 이므로 왼쪽의 조건이 (동일!)이되고 펄스가 종료됩니다. 오른쪽에서 왼쪽으로 들어갑니다.ac(tt0)<at>t0c>0[a,b]baac(tt0)+ba=a+b(tt0)u(a,t0)=p[bc(tt0]

링크 는 내가 주기적 경계 조건이라고 부르는 것을 보여줍니다.

나는 파이썬으로 애니메이션을 만들었고 그 구성표는 여기 질문에 표시된 Crank-Nicholson 구성표입니다.

파도가 첫 번째 (오른쪽) 경계에 부딪힌 후에도 여전히 노이즈 패턴으로 어려움을 겪고 있습니다.


1
휴대 전화에서 애니메이션을 볼 수 없지만 수치 패턴이 누락되어 잡음 패턴이 원인이라고 생각합니다. 흡수는 경계에 정확한 솔루션을 부과하기 때문에 작동합니다. 이 정확한 솔루션을 사용하면 오른쪽 경계에 도달하는 수치 솔루션은 주파수와 위상이 약간 다릅니다. 이것은 다시 반사 및 간섭으로 이어진다.
davidhigh

@davidhigh : 정보 주셔서 감사합니다. 나는 이것을 확인할 것이다. 휴대 전화에서 애니메이션이 작동하지 않아 죄송합니다. 내 전화 (삼성)에서도 작동하지 않았습니다. 전화기에 일부 소프트웨어가 없을 수 있습니다. 컴퓨터에서 작동해야합니다. 다시 감사합니다.
허먼 자라 미요

천만에요. 애니메이션 자체는 그다지 중요하지 않습니다. 오류가 얼마나 큰지 알고 싶었습니다. Btw, 경계에 정확한 솔루션을 부과함으로써 의도적으로 "불 포지"를 피할 수 있습니다. 즉, 여전히 경계에서 하나의 값에 대해 두 개의 방정식이 있지만 정확한 결과를 사용하면 일관성을 유지하게됩니다. 그러나 수치 결과가 완전히 정확하지 않기 때문에 이것은 대략적으로 만 작동합니다.
davidhigh

또 다른 의견 : 파동 방정식에 대한 일반적인 분석 솔루션은 왼쪽으로 움직이는 펄스와 오른쪽으로 움직이는 펄스의 중첩입니다. 귀하의 경우에는 오른쪽 이동 펄스 만 고려하므로 텍스트의 상태와 달리 초기 조건을 이미 적용했습니다.
davidhigh

@ davidhigh : 펄스가 경계에 부딪친 후 노이즈에 대한 통찰력에 대해 약간 생각하고 있습니다. 나는 당신이 옳고 정확한 분석 솔루션과 수치 전파 펄스 사이에 차이가 있다고 생각합니다. 그 작은 차이는 작은 노이즈 패턴을 생성합니다. 이 논의에서 보여지는 CN 전파 시스템은 분산 적이며 펄스가 경계에 도달하기 전에 분산이 눈에 띄지 않지만 경계에서 작은 섭동 (분석 및 수치 솔루션의 차이)을 유발할 수 있다고 생각합니다. 다시 감사합니다.
허먼 자라 미요
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.