C / C ++에서 Runge-Kutta 8 차 순서 찾기


10

Windows 기계를 사용하여 C ++로 작성된 천체 역학 / 우주 역학 응용 프로그램에서 Runge-Kutta 8 차 방법 (89)을 사용하고 싶습니다. 따라서 누구나 문서화되고 무료로 사용할 수있는 좋은 라이브러리 / 구현을 알고 있는지 궁금합니다. 컴파일 문제가 예상되지 않는 한 C로 작성해도 괜찮습니다.

지금 까지이 라이브러리 (mymathlib)를 찾았습니다 . 코드는 괜찮아 보이지만 라이센스에 대한 정보를 찾지 못했습니다.

알고 있거나 내 문제에 적합한 대안 중 일부를 공개하여 나를 도울 수 있습니까?

편집 :
예상대로 사용할 수있는 C / C ++ 소스 코드가 많지 않다는 것을 알았습니다. 따라서 Matlab / Octave 버전도 괜찮습니다 (여전히 무료로 사용해야 함).

답변:


8

두 GNU 과학 라이브러리 (GSL) (C)와 Odeint 부스트 (C ++) 기능 8 순서 룽게 - 쿠타 방법을.

둘 다 오픈 소스이며 Linux 및 Mac에서는 패키지 관리자에서 직접 사용할 수 있어야합니다. Windows에서는 GSL 대신 Boost를 사용하는 것이 더 쉬울 것입니다.

GSL은 GPL 라이센스에 따라, Boost Odeint는 Boost 라이센스에 따라 게시됩니다.

편집 : Ok, Boost Odeint에는 Runge-Kutta 89 방법이 없으며 78 만 있지만 임의의 Runge-Kutta 스테퍼를 만드는 방법 을 제공합니다 .

그러나 8 차 방법은 상당히 높으며 문제에 너무 과도합니다.

Prince-Dormand 는 특정 종류의 Runge-Kutta를 나타내며 순서와 직접 관련이 없지만 가장 일반적인 것은 45입니다. 권장되는 ODE 알고리즘 인 Matlabs ode45는 Prince-Dormand 45 구현입니다. 이것은 Boost Odeint Runge_Kutta_Dopri5 에서 구현 된 것과 동일한 알고리즘 입니다.


1
답변 주셔서 감사합니다. 지금 당황 스럽습니다. 여기에 묻기 전에 Boost Odeint를 살펴본 결과 "runge_kutta_fehlberg78"만 발견되었습니다. 이것이 옳은 일입니까? 실제로 나는 실제로 사용될 때 방법의 차이점을 알지 못하지만 RK89 (인터넷을 검색 할 때 Dormand-Prince라고도 함)를 찾고있었습니다. 이 문제에 대한 답변을 논평하거나 확장 할 수 있습니까? 감사합니다.
— James C

질문에 답변하도록 게시물을 업데이트했습니다. Prince-Dormand 45가 문제를 잘 해결할 것입니다.
— LKlevin

15

오랜 시간 동안 천체 역학을 수행하는 경우 클래식 Runge-Kutta 통합기를 사용하면 에너지가 보존되지 않습니다. 이 경우, 대칭 적분기를 사용하는 것이 좋습니다. Boost.odeint는 또한 오랜 간격 동안 더 잘 작동하는 4 차 증상 Runge-Kutta 체계를 구현합니다. GSL은 내가 알 수있는 한 상징적 인 방법을 구현하지 않습니다.


답변 주셔서 감사합니다. 4 차 대칭 Runge-Kutta가 RKF78보다 더 나은 결과를 낼 수 있을까요? 지구 위성 (낮은 궤도와 더 깊은 우주 궤도)과 함께 사용한다면 아마도 1 ~ 3 번의 궤도에 있을까요?
— James C

@JamesC 예. 장기간에 걸쳐 증상 적 인 방법이 훨씬 좋습니다.
— eccstartup

@eccstartup-여기서 장기적으로 무엇을 고려 하시겠습니까? 태양 주위의 한 행성의 궤도, 또는 지구 주위의 날씨 위성의 궤도의 길이만큼 길 수 있기 때문입니다.
— James C

@JamesC 나는 그 큰 문제를 관찰하지 못했습니다. 그러나 많은 궤도를 계산 한 내 모형 문제의 경우, 상징적 인 방법은 매우 완벽한 궤도를 제공합니다.
— eccstartup

따라서 암시 적 Runge-Kutta 방법의 버전을 소유하도록 프로그래밍하는 것이 좋습니다. 여기에는 원하는만큼 높은 수준의 많은 상징적 방법이 포함됩니다.
— eccstartup

4

몇 가지 요점을 요약하면 다음과 같습니다.

  1. 비 분산 모델의 장기 통합 인 경우 원하는 통합 적자가 있습니다.
  2. 그렇지 않으면 운동 방정식이기 때문에 Runge-Kutta Nystrom 방법이 1 차 시스템으로 변환하는 것보다 더 효율적입니다. DP로 인해 고차 RKN 방법이 있습니다. 여기 Julia 와 같은 일부 구현 이 문서화되어 있으며 여기에는 MATLAB이 있습니다.
  3. 고정밀 Runge-Kutta 방법은 고 정확도 솔루션을 원하는 경우에만 필요합니다. 공차가 낮 으면 5 차 RK가 더 빠를 수 있습니다 (같은 오류에 대해). 이 문제를 자주 해결해야 할 경우 가장 좋은 방법은 여러 가지 방법을 테스트하는 것입니다. 3- 바디 문제에 대한이 벤치 마크 세트에서 (같은 오류에 대해) 높은 순서의 RK 방법은 속도가 약간 개선 된 것으로 나타났습니다. -Prince 45 ( DP5)는 4 자리의 정확도를 볼 때 (허용 오차는 다소 낮습니다. 허용 오차는 모든 문제에 대한 야구장 일뿐입니다). 공차를 낮추면 RK 방법이 커질수록 개선이 향상되지만 더 높은 정밀도를 사용해야합니다.
  4. Dormand-Prince order 7/8 알고리즘은 Hair853 dop853과 DifferentialEquations.jl의 DP853 방법과 동일한 8 차 tableau를 가지고 있습니다 DP8(동일 함). 후자의 853 방법은 에러 추정기가 비표준이기 때문에 Runge-Kutta 방법의 표준 tableau 버전에서는 구현 될 수 없습니다. 그러나이 방법은 훨씬 효율적이며 구형 Fehlberg 7/8 또는 DP 7/8 방법을 사용하지 않는 것이 좋습니다.
  5. 고차 RK 방법의 경우 Verner "Efficient"방법 이 금본위 제입니다. 그것은 내가 연결 한 벤치 마크에 나타납니다. Boost로 직접 코딩하거나 더 쉽게 원하는 경우 구현하는 2 개의 패키지 중 하나를 사용할 수 있습니다 (Mathematica 또는 DifferentialEquations.jl).

2

Geoff Oxberry가 장기 통합 (증상 적분기 사용)에 대해 제안한 것은 사실이지만 일부 경우에는 작동하지 않습니다. 보다 구체적으로, 소산 력이있는 경우 시스템은 더 이상 에너지를 보존하지 않으므로이 경우 증상 적분기에 의지 할 수 없습니다. 이 질문을하는 사람은 낮은 지구 궤도에 대해 이야기하고 있었으며, 그러한 궤도는 많은 양의 대기 항력을 나타냅니다.

이 특정한 경우 (및 상징적 통합자를 사용하지 못하거나 사용하지 않으려는 경우)에는 오랜 시간 동안 정밀도와 효율성이 필요한 경우 Bulirsch-Stoer 통합자를 사용하는 것이 좋습니다. 경험에 따라 잘 작동하며 Numerical Recipes (Press et al., 2007)에서도 권장됩니다.


아니요, 수치 레시피를 권장하지 않습니다. 특히 대부분의 경우 Burlirsch-Stoer는 권장하지 않습니다. 이것은이 책에서 잘 알려진 문제입니다. 여기 분야에서 최고 연구자 rebuttles의 무리를 참조하십시오 uwyo.edu/buerkle/misc/wnotnr.html를 . 이것에 대한 벤치 마크를 원한다면 BS가 거의 잘하지 못하는 Hairer의 첫 번째 책을 참조하십시오. 높은 순서는 오류가 충분히 낮을 때만 더 효율적이며, 우리 (및 기타)는 부동 소수점 정밀도에만 효율적이라는 것을 일관되게 보여주기 위해 벤치마킹을 수행했습니다.
— Chris Rackauckas

ODE에 주로 사용했기 때문에 NR에 대해 너무 많이 말할 수는 없지만 링크하는 페이지의 불만이 오래되어 NR의 저자가 응답 (페이지 끝)에서 해결 한 것으로 보입니다. 그러나 이것은 주제가 아닙니다. 내 대답에서 언급 한 고정밀 궤도 (예 : 13-14 자릿수)의 장기 통합과 관련하여 외삽 법이 잘 작동한다는 것이 오랫동안 입증되었습니다 (Monternbruck & Gill의 Numerical Integration 장 참조). 보다 최근의 논문에서도이 문서를 사용하며, 저와 다른 사람들에게 신뢰할 수 있고 효율적인 방법으로 입증되었습니다.
— viiv

M & G는 dop853에 대해서만 테스트하고 Verner로 인한 것과 같은보다 현대적인 고차 RK 방법이 훨씬 더 효율적입니다. M & G는 또한 타이밍의 약한 지표 인 기능 평가 만 사용하여 측정하는 것 같습니다. 또한 특별히 2 차 ODE 용이며 2 차에 적용되는 1 차 RK 방법보다 훨씬 효율적인 Runge-Kutta Nystrom 방법에 대해서는 시간이 없습니다. 13-14 자리에서 BS는 대부분의 문제에 대해 경쟁적이지만 아마도 명백한 선택과는 거리가 멀며 최근의 방법으로 동의하지 않는 작업 정밀도 다이어그램을 보지 못했습니다.
— Chris Rackauckas

M & G는 RKN에 대해 RKN을 테스트하고 BS 및 기타는 RKN에 대해 테스트하고 (123-132 및 151-154 페이지) RK 방법 중 가장 효율적이라고 말합니다 (버너를 인용하더라도 Verner는 포함하지 않음). BS는 13-14 자릿수에서 효율적 인 것으로 나타났습니다. 제 주장은 dop853, ABM (12), Taylor 및 표준 RK8에 대해 테스트되었으며 성능이 뛰어납니다. 나는 그것이 RKN에서 다시 테스트 한 것을 보지 못했지만 M & G에서 볼 수있는 것에서 예를 들어 FILG11과 멀지 않습니다. 나는 Verner의 RK에 진심으로 관심이 있으며 위의 링크를 볼 것입니다. 그들 모두를 볼 수있는 시험지가 있습니까?
— viiv December

난 다시 가서에서 벤치 마크의 무리를 다시 실행 DiffEqBenchmarks.jl 와 odex잘 박람회 경향이되지 않습니다. 따라서 적어도 1 차 ODE 및 공차 >=1e-13에 대해서는 외삽이 잘 수행되지 않는 것으로 보이며 일반적으로 가깝지 않습니다. 이것은 위의 주장과 일치합니다.
— Chris Rackauckas 2014
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.