MATLAB에서 ODE를 사용하여 단계 크기 선택


12

저기, 저의 질문을 볼 시간을 주셔서 감사합니다. 이것은 이전에 physics.stackexchange.com에 게시 한 내 질문의 업데이트 된 버전입니다.

현재 2D 엑시톤 스피너 인 Bose-Einstein Condensate를 연구하고 있으며이 시스템의 기본 상태에 대해 궁금합니다. 지면 상태에 도달하는 수학적 방법을 가상 시간 방법 이라고 합니다 .

이 방법은 양자 역학의 시간이 허수 1 로 대체되는 경우 매우 간단합니다. 이 대체는 내 시스템의 고 에너지 입자가 저에너지 입자보다 빠르게 붕괴되도록합니다. 계산의 모든 단계에서 입자 수를 다시 정규화하면 가장 낮은 에너지 입자, 즉 일명 시스템으로 끝납니다. 지상 상태.

t=iτ

문제의 방정식은 비선형이며, 비선형 슈뢰딩거 방정식 이라고도하며 때때로 Gross-Pitaevskii 방정식 입니다. 문제를 해결하기 위해 Matlabs ode45를 사용하고 있습니다.이 시스템은 시간이 지남에 따라 시스템을 발전시켜 결국 지상 상태에 도달합니다.

  • 노트! 비선형 슈뢰딩거 방정식에는 공간에서의 라플라시안 및 다른 미분 항이 포함됩니다. 이것들은 모두 고속 푸리에 변환을 사용하여 해결됩니다. 결국 우리는 시간 ODE 만 있습니다. *

내 문제와 질문 : 계산은 에서 로 이동 합니다. ode45는 for 루프에 들어가므로 거대한 벡터 를 동시에 계산하지 않습니다 . 첫 번째 라운드는 ode45 (odefun, )로 시작한 다음 합니다. 여기에 시간 단계 내 문제입니다. 시간 단계에서 다른 선택을하면 다른 지상 상태 솔루션을 얻을 수 있으며 어떤 시간 단계에서 "가장"정확한 지상 상태를 제공하는지 결정하는 방법을 모릅니다.t f [ t 0 , , t f ] [ t 0 , t 0 + Δ / 2 , t 0 + Δ ] , y , t 0 + Δ Δt0tf[t0,,tf][t0,t0+Δ/2,t0+Δ],y,t0+ΔΔ

내 시도 : 나는이 계획에서 많은 시간 단계가 원래 수의 입자로 다시 정규화되기 전에 많은 수의 입자가 붕괴되는 반면 작은 시간 단계는 재 정규화되기 전에 더 적은 양의 입자가 붕괴되는 것을 알고 있습니다. 내 초기 생각은 작은 시간 단계가 더 정확한 해결책을 제공해야하지만 그 반대라고 생각합니다.

나는 수치 전문가가 아니기 때문에 ode45의 선택은 단순히 임의적이었습니다. ode113도 같은 것을 제공합니다. :(

누구 든지이 문제에 대한 생각이 있습니까? 추가 세부 정보가 필요한 경우 알려주십시오.

감사합니다.

업데이트 1 : 가상의 시간 방법과 ODE를 연구했습니다. 시간 간격이 충분히 작지 않으면 모든 것이 불안정 해 보입니다. 이것은 비선형 방정식 이 뻣뻣하여 내가 이해하는 것보다 훨씬 어렵게 만드는지 궁금합니다 . 계속 업데이트하겠습니다.

업데이트 2 : 수정 됨 : 실제로 문제가 ODE 외부에서 정규화되었습니다. 정규화가 odefun 내부에 유지되면 ODE는 "외부"시간 단계의 다른 선택에 대해 동일한 결과를 반환합니다. 동료가 나에게 더 오래된 코드를 보여 주었고 나는 단순히 내 odefun에 한 줄을 추가했습니다.

function y_out = odefun(t,y_in,...variables...) 

    ...
    [ Nonlinear equations evaluated ]  
    ...


    y_out = y_out + 0.1*y_in*(N0-Ntemp) ;
end

마지막 행은 현재 입자 수 (Ntemp)와 시스템이 보유해야하는 입자 수 (N0)의 차이를 계산합니다. 파티클의 일부를 다시 출력에 추가하여 시스템에서 모든 파티클이 붕괴되는 대신 전체 파티클 수 안정성을 만듭니다.

또한 문제의 차원과 ODE에서 시간 단계로 피코 초 또는 나노초로 작업 할 때의 몇 가지 차이점에 관한 새로운 질문을 제기 할 것입니다.

모두 감사합니다. :)


3
근본적인 문제는 등 ode45()간격으로 단계를 수행 하는 것과 같은 적응 형 방법을 사용한다는 것 입니다. 왜 정확하게 "거대한 벡터"의 생성을 피하고 있습니까? 등거리 점이 절대적으로 필요한 경우 ode45()평소대로 진행 한 다음 보간을 사용하십시오.
JM

흠 ... 이것이 문제 일 수 있습니다. 이 고정 단계의 기원은 입자가 모두 붕괴되기 전에 어딘가에서 입자 수를 다시 정규화해야한다는 것입니다. 그러나 정규화를 odefun 에 넣고 "거대한 시간 벡터"를 사용 하여이 작업을 수행 할 수 있습니다 . 또한, ode45 로의 입력 는 4 * 129 * 129 숫자입니다. 시간 단계를 사용하지 않으면 메모리가 부족 할까봐 두려웠습니다. y

메모리 ode45()가 작동하면 특정 임계 값보다 큰 단계를 유지할 수 있는 옵션이 있어야합니다 . 당신은 그것을 조사하고 싶을 수도 있습니다.
JM

1
대답은 단지 로컬 오류 추정치를 사용하는 것입니다. ODE45에는 하나가 내장되어 있으므로 가장 쉬운 방법은이를 사용하는 것이지만 직접 코딩 할 수도 있습니다.
David Ketcheson

1
후속에 대한 응답에 해당 것이 밝혀 치수 차원 수량 . 하면보다 일관된 결과를 얻을 수 있습니다. 여기서 는 시간 단계입니까? 1 / 시간 α0.11/timeΔtαΔt(NtN0)Δt
Stefano M

답변:


4

MATLAB 코드를 게시하지 않았으므로 ode45를 어떻게 호출하는지 잘 모르겠습니다. ode45를 호출 할 때마다 tspan 벡터 (두 번째 인수)를 변경하고 있다고 생각합니다. 가장 먼저 알아야 할 점은 tspan 벡터가 ode45에서 사용하는 시간 단계에 거의 영향을 미치지 않는다는 것입니다. tspan 벡터를 사용하면 통합 시간 범위 및 원하는 출력 시간을 ode45로 전달할 수 있습니다. ode45의 Runga-Kutta 알고리즘이 사용하는 시간 단계는 규정 된 정확도를 달성하기 위해 내부적으로 조정됩니다. 이 정확도를 제어하는 ​​두 가지 매개 변수는 ode45에 전달 된 옵션 구조의 RelTol 및 AbsTol입니다. 그들은 합리적인 기본값을 가지고 있으며, 당신이 이것들을 언급하지 않았기 때문에, 나는 당신이 그것들을 변경하지 않았다고 가정합니다.

나는 정상적인 ode45 시간 단계에 "거의"영향을 미치지 않는다고 말했다. ode45가 걸리는 시간 단계에 비해 시간 간격이 매우 작은 시간 간격으로 출력을 요청하는 경우 출력 요청을 충족시키기 위해 시간 단계를 줄여야합니다. JM이 계속하고 있다고 생각합니다. 너무 많은 출력 시간에 솔루션이 필요한 이유는 무엇입니까? 일반적으로 부드러운 플롯을 생성하기에 충분한 시간에 출력을 요청하는 것으로 충분합니다.

보고있는 솔루션의 변경에 따라 RelTol 및 AbsTol의 기본값이 문제에 적합하지 않을 수 있습니다. ode45의 루프를 단일 호출로 교체하고 합리적인 횟수로 출력을 요청하며 수렴 된 솔루션을 얻을 때까지 더 작은 RelTol 및 AbsTol 값을 실험 해보십시오.


답변 해주셔서 감사합니다. 너무 많은 출력 시간에 솔루션이 필요한 이유는 웨이브 기능이 정기적으로 정규화되지 않으면 모든 것이 붕괴되고 시스템이 비어 있기 때문입니다. 그래서 작은 tspan 벡터가있는 루프에 ode45를 넣었으므로 각 tspan 벡터 후에 다시 정규화 할 수 있습니다.

2

비선형 슈뢰딩거 방정식은 비선형이기 때문에 많은 정지 상태를 가질 수 있으며 그 중 일부는 안정적 일 수 있습니다. 물리적 현실에서 하나의 특정 상태에서 시작하여 시스템은 결정적으로 하나의 최종 상태로 진화합니다. 수치 체계가 다른 이산화 (시간 단계)에 대해 다른 결과를 제공하는 경우 이는 이산화의 근본적인 결함입니다. 코드를 확인하십시오.

상태로 경우 실제로 정지 상태인지 여부를 쉽게 확인할 수 있습니다. 시간이 의해 주어진 경우 다음 당신은 실제로 서로 다른 고정 된 상태로 끝날 당신이 그들의 깁스 에너지를 비교할 수 있어야를 여기서 는 에너지 밀도입니다. 때 , 종종 Ginzburg-랜도 방정식을 위해, 예를 들어, 매우 간단 보인다 .ψψ0F(ψ0)=0G(ψ)=ΩE(ψ)E()F(ψ)=0E(ψ)E(ψ)=-| ψ| 4

dψdt=F(ψ),
F(ψ0)=0.
G(ψ)=ΩE(ψ)
E()F(ψ)=0E(ψ)E(ψ)=|ψ|4

예. 출력 솔루션의 밀도 프로파일을 플로팅하고 오랫동안 바뀌지 않고 기본적으로 진화가 중단되면 정지 상태에 도달했다고 가정합니다. 그러나 파동 함수가 (+2, +1, -1, -2) 스핀 구성 요소를 가진 스피너이기 때문에 에너지 밀도를 보는 것이 도움이 될지 확실하지 않습니다. 각 구성 요소를 통합하면 응축수의 에너지를 알 수 있다고 생각하지 않지만 지상 상태에 도달하면 에너지 밀도가 고정되어 일정하게 유지되어야합니다. 이것은 올바른 해결책의 단서입니다.

1

문제 해결됨:

정규화는 ODE에서 평가 된 함수의 일부 여야합니다. 여러 단계에서 ODE를 분리하고 이들 사이를 정규화하면 수치 적으로 불안정 해지며 ODE가 분리 된 시간 간격에 따라 다른 결과가 생성됩니다. (자세한 내용은 해당 편집 2를 참조하십시오.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.