내가 본 일부 오래된 책은 지정된 주문의 명시 적 Runge-Kutta 방법의 최소 단계 수를 주문에 대해 알 수 없다고 말합니다. . 아직도 그래요?
고차 Runge-Kutta 방법으로 자동 작업하기 위해 어떤 라이브러리가 있습니까?
내가 본 일부 오래된 책은 지정된 주문의 명시 적 Runge-Kutta 방법의 최소 단계 수를 주문에 대해 알 수 없다고 말합니다. . 아직도 그래요?
고차 Runge-Kutta 방법으로 자동 작업하기 위해 어떤 라이브러리가 있습니까?
답변:
그것은 여전히 사실입니다. 에서 백정의 책 에서 : 196 페이지, 다음은 말합니다 1985 종이, 백정은 당신이 순서 8을 얻기 위해 11 단계가 필요하다고 보여 ,이 날카로운이다. 주문 10의 경우, Hairer는 17 단계 방법 군을 도출 했지만 더 잘할 수 있는지는 알 수 없습니다. 동일한 정보는 Hairer, Norsett 및 Wanner vol 의 섹션 II.5에 제공됩니다 . I . 후자의 참고 문헌은 또한 고차 쌍을 개발하기위한 기술 중 일부 (8 차까지)를 거칩니다.
외삽 법으로 스테이지를 구성 할 수 있기 때문에 모든 주문에 필요한 최소 스테이지 수에는 상한이 있습니다. 이것은 오랫동안 알려져왔다. 이에 대한 설명 은 이 최근 논문을 참조하십시오 . 그러나이 한계는 순서에 따라 2 차적이며 확실히 비관적입니다. 아래에서 논의되는 nodepy 소프트웨어는 이러한 방법과 모든 순서의 지연된 보정 방법 (Runge-Kutta 방법)에 대한 정확한 계수를 생성 할 수 있습니다.
@Etienne은 수작업으로 만든 최고급 방법이 Terry Feagin에 의한 것이라고 말하는 것이 맞습니다. 그의 다른 의견과 관련하여이 백서는 9 (8) 쌍을 포함합니다.
JH Verner, 저급 차수를 갖는 고차 명시 적 Runge-Kutta 쌍, 응용 수치 수학, 22 권, 1996 년 11 월 1 ~ 3 호, 페이지 345-357
다음은 (누적) 주문 조건 수의 표입니다. 각 주문에 필요 ; 이 표는 문헌에 제공된 것보다 더 나아가 nodepy를 사용하여 생성되었습니다.
p | N
-----
1 | 1
2 | 2
3 | 4
4 | 8
5 | 17
6 | 37
7 | 85
8 | 200
9 | 486
10| 1205
11| 3047
12| 7813
13| 20300
14| 53264
매우 높은 차수 방법의 경우, 수주 조건의 수와 복잡성을 직접 처리 할 수 없게됩니다. 일부 상징적 패키지 (최소한 Mathematica)에는 Runge-Kutta 주문 조건을 생성하는 기능이 있습니다. 아마도 다른 패키지가있을 수 있지만 다음을 알고 있습니다 (둘 다 내가 썼습니다).
이러한 높은 주문에서 중요한 주문 조건에 대한 또 다른 흥미로운 참고 사항은 주문을 파생시키는 두 가지 방법이 있으며, 서로 다른 (하지만 집합 적으로 동등한) 조건을 제공한다는 것입니다. 하나는 Butcher 때문이고 다른 하나는 Albrecht 입니다.
@DavidKetcheson의 대답은 큰 요점을 명중합니다. 외삽 법을 사용하여 항상 높은 순서의 방법을 만들 수 있습니다. 매우 비관적이며 항상 훨씬 더 많이 할 수 있습니다. 모든 좋은 방법은 손으로 파생됩니다 (일부 컴퓨터의 도움으로) 대수 도구), 하한은 알려져 있지 않으며 최상위 방법은 Feagin에 의한 것입니다. 일부 의견을 감안할 때, 나는 현장에서 현재의 최신 tableaus에 대한 토론으로 답을 마무리하고 싶었습니다.
RK tableaus의 개요를 원한다면 이 Julia 코드에서 찾을 수 있습니다 . 그들이 온 논문에 대한 인용은 tableau 생성자의 docstring에 있습니다. DifferentialEquations.jl에 대한 개발자 문서는 사용할 수 이러한 tableaus 모두 나열 , 당신은 여기에서 볼 수있는 이러한 모든뿐만 아니라 주문 조건이 충족되었는지 확인 트래비스와 AppVeyor 지속적인 통합 스위트를 사용하여 테스트되어 있지만, 실제로 그들이 요청 된 수렴을 달성합니다 (확인 테스트). 이것들로부터 다음과 같은 것을 알 수 있습니다.
(내가 출판 된 것을 찾을 수 있음). 다시 한 번, 모두 손으로 파생되었습니다.
수렴 테스트는 일부 파생이 64 비트 이상의 숫자에 대해 작동하기에 충분히 높은 정밀도로 수행되지 않았 음을 나타냅니다 ( 이와 같이 주석 처리됨 ). 따라서이 점에 유의해야 할 흥미로운 점이 있습니다. 이러한 높은 차수에서는 보통 "오류 x
"가 차수 조건을 만족시키는 계수 만 얻지 만 임의의 정밀 산술을 사용할 때 실제로 이러한 경계를 감지 할 수 있습니다. 따라서 계수를 수행하는 정밀도가 중요하므로 테스트하려는 정밀도 (물론 / 사용)를 포괄하도록 선택해야합니다.
안정성 플롯을 원한다면 plot(tableau)
Plots.jl 레시피를 사용하면됩니다. Peter Stone의 웹 사이트 에서이 내용을 많이 적어 놓은 훌륭한 노트 세트를 찾을 수 있습니다 (아래로 이동하여 주문 10 구성표라고 말하면 많은 PDF를 얻을 수 있습니다). DifferentialEquations.jl을 개발할 때 테스트 문제에 대해 체계적으로 살펴 보거나 분석 표시기를 살펴보고 기본 라이브러리에 포함 해야하는 지표를 확인하기 위해 해당 tableaus를 만들었습니다. 나는 여기에 몇 가지 간단한 메모를했다 . 기본 라이브러리에 포함 된 알고리즘에서 볼 수 있듯이, 내가 가치있게 생각한 것은 Verner와 Feagin 방법이었습니다. Verner 9 차 방법은 차수가 일치하는 보간법을 가진 최고 차수 방법입니다. Feagin 메소드에는 일치하는 보간이 없습니다 (Hermite를 부트 스트랩 할 수는 있지만 실제로는 비효율적입니다).
그것들은 모두 매우 효율적인 구현으로 구현되기 때문에, 그들과 함께 놀면서 다른 기능들이 실제로 얼마나 중요한지 볼 수 있습니다. 다음은 사용중인 Feagin 방법을 보여주는 Jupyter 노트북입니다 . 수렴 플롯은 실제로 1e-48
오류가 발생합니다. 높은 차수 방법은 실제로 매우 낮은 공차가 필요할 때 낮은 차수 방법보다 더 효율적입니다. DiffEqBenchmarks.jl에서 벤치 마크 중 일부를 사용하는 벤치 마크를 찾을 수 있지만, 일반적으로 9 차 Verner 방법이며 벤치 마크가이 순서가 효율적인 경우는 아닙니다.
따라서 고차원 적 인 방법을 가지고 놀고 싶을 때 RK-Opt는 내가 찾은 것입니다 (@DavidKetcheson이 언급했듯이) 일부는 파생 된 좋은 방법입니다. ) 구현되어 쉽게 테스트 / 벤치 마크 할 수 있습니다. 그러나 떨어질 수있는 가정을 찾지 않으면 내 테스트에서 Verner (6-9 차) 및 Feagin (10 + 차) 방법을 능가하는 것을 찾을 수 없었습니다. 그래도 YMMV, 나는 이것에 대한 더 많은 연구를보고 싶습니다.