벤치 마크 설정
Julia 소프트웨어 DifferentialEquations.jl에서 우리는 Feagin 메소드를 포함하여 많은 고차 메소드를 구현했습니다. 당신은 우리 의 방법 목록 에서 그것을 볼 수 있으며 , 당신은 제공된 tableaus로 사용할 수있는 다른 것들이 많이 있습니다. 이러한 모든 방법이 통합되어 있으므로 쉽게 벤치마킹 할 수 있습니다. 여기서 온라인으로 가지고있는 벤치 마크를 볼 수 있으며 다양한 알고리즘을 벤치마킹하는 것이 매우 간단하다는 것을 알 수 있습니다. 따라서 벤치 마크를 실행하는 데 몇 분이 걸리려면 계속 진행하십시오. 다음은 나오는 내용에 대한 요약입니다.
먼저, 각 벤치 마크를 살펴보면 DP5
(Dormand-Prince Order 5) 및 DP8
메소드가 Hairer Fortran 코드 ( dopri5
및 dop853
) 보다 빠르 므로 이러한 구현이 매우 최적화되어 있음을 알아야합니다. . 이들은 다른 스레드 에서 언급 한 바와 같이 Dormand-Prince 메소드의 과다 사용은 메소드가 여전히 최고이기 때문에 작성되지 않았기 때문임을 보여줍니다. 따라서 가장 최적화 된 구현 간의 실제 비교는 Tsitorous 메서드, Verner 메서드 및 DifferentialEquations.jl의 Feagin 메서드 사이에 있습니다.
결과
일반적으로, 7보다 높은 차수의 방법은 선택된 공차를 고려할 때 일반적으로 차수보다 큰 계산 비용을가집니다. 이것의 한 가지 이유는 낮은 차수 방법에 대한 계수 선택이보다 최적화되어 있기 때문입니다 (비대칭 적으로 작지 않을 때 더 중요한 "원소 잘림 오류 계수"가 작음). 여기와 같은 많은 문제 에서 Verner Efficient 6 및 7 방법은 매우 잘 작동하지만 Verner Efficient 8과 같은 방법은 기울기가 더 낮을 수 있습니다. 높은 차수의 "게인"이 더 낮은 공차에서 합성되기 때문에, 높은 차수의 방법이 더 효율적일 수있는 공차가 항상 있기 때문입니다.
그러나 질문은 얼마나 낮습니까? 잘 최적화 된 구현에서는 두 가지 이유로 상당히 낮아집니다. 첫 번째 이유는 하위 메소드가 FSAL이라는 것을 구현하기 때문입니다 (첫 번째는 마지막과 동일 함). 이 특성은 하위 메소드가 다음 단계에서 이전 단계의 함수 평가를 재사용하므로 효과적으로 하나의 함수 평가를 갖지 않음을 의미합니다. 이것이 올바르게 사용된다면, 5 차 방법 (Tsitorous 또는 Dormand-Prince)과 같은 것이 실제로 tableaus가 제안하는 6 개 대신 5 개의 기능 평가를 수행하고 있습니다. 이것은 Verner 6 방법에서도 마찬가지입니다.
다른 이유는 보간 때문입니다. 매우 높은 차수의 방법을 사용하는 한 가지 이유는 더 적은 단계를 수행하고 단순히 중간 값을 보간하는 것입니다. 그러나 중간 값을 얻기 위해 보간 함수는 단계 수행에 사용 된 것보다 더 많은 함수 평가가 필요할 수 있습니다. Verner 방법을 보면, Order 8 보간법을 얻기 위해서는 Order 8 방법에 대해 8 개의 추가 함수 평가가 필요합니다. 하위 차수 방법은 "자유"보간법을 제공하는 경우가 많습니다. 예를 들어 대부분의 5 차 방법에는 자유 4 차 보간법이 있습니다 (추가 기능 평가 없음). 따라서 중간 값이 필요한 경우 (고차 수 방법을 사용하는 경우 좋은 플롯이 필요함) 숨겨진 비용이 추가로 발생합니다. 이러한 보간 된 값이 이벤트 처리 및 지연 미분 방정식 해결에 실제로 중요하다는 사실을 고려하면 추가 보간 비용이 왜 영향을 받는지 알 수 있습니다.
Feagin 방법은 어떻습니까?
따라서 Feagin 방법이 벤치 마크에서 의심스럽게 누락되었음을 알 수 있습니다. 그것들은 훌륭하고 수렴 테스트는 임의의 정밀도 수 등에서 작동하지만 실제로 잘 수행하려면 약간의 허용 오차를 요구해야합니다. 예를 들어, 게시되지 않은 벤치 마크에서 (9 차 Verner Efficient Method)가 다음과 같은 허용 오차 Feagin14
보다 우수한 것으로 나타났습니다 . 혼돈 역학 (Pleides 또는 3-body 천체 물리학 문제에서와 같이)이있는 응용 프로그램의 경우 민감한 의존성 (혼돈 시스템의 오류가 빠름)으로 인해이 정도의 정확도를 원할 수 있습니다. 그러나 대부분의 사람들은 아마도 배정 밀도 부동 소수점 숫자로 계산하고 있으며이 허용 오차 영역에서 성능이 우수한 벤치 마크를 찾지 못했습니다.Vern9
1e-30
또한 Feagin 방법과 함께 보간법이 없습니다. 그래서 내가하는 일은 단순히 3 차 Hermite 보간법을 사용하여 하나가 존재하는 방식으로 만드는 것입니다 (놀랍게도 잘 작동합니다). 그러나 표준 보간 함수가없는 경우 재귀 Hermite 방법을 사용하여 (이 보간을 사용하여 중간 점을 얻은 다음 5 차 보간 등을 수행하여) 고차 보간을 얻을 수 있지만 비용이 많이 들고 결과 보간은 원칙적으로 잘림 오류가 낮을 필요는 없습니다 (따라서 dt
실제로 작을 때만 좋습니다 , 우리가 원하는 경우의 정반대입니다!). 따라서 정확도와 일치하기 위해 정말 좋은 보간이 필요한 경우 최소한으로 돌아 가야 Vern9
합니다.
외삽에 대한 참고 사항
외삽 방법은 임의의 순서의 Runge-Kutta 방법을 생성하기위한 알고리즘 일뿐입니다. 그러나 순서에 따라 필요한 것보다 더 많은 단계를 수행하고 높은 기본 잘림 오류 계수를 가지므로 주어진 순서에서 잘 최적화 된 RK 방법만큼 효율적이지 않습니다. 그러나 이전의 분석에서 볼 때, 이는 "알려진"RK 방법보다이 방법이 더 잘 수행 될 수있는 내성이 매우 낮은 영역이 있음을 의미합니다. 그러나 내가 실행 한 모든 벤치 마크에서, 나는 그렇게 낮아지지 않은 것 같습니다.
안정성에 대한 참고 사항
선택은 실제로 안정성 문제와 관련이 없습니다. 실제로 DifferentialEquations.jl tableaus ( plot(tab)
안정성 영역에 대해서만 가능) 를 거치면 대부분의 방법에 의심되는 안정성 영역이 있음을 알 수 있습니다. 이것은 실제로 선택입니다. 일반적으로 메소드를 파생시킬 때 작성자는 일반적으로 다음을 수행합니다.
- 가장 낮은 원리 잘림 오차 계수 (즉, 다음 차수 항의 계수)를 찾습니다.
- 주문 제약 조건에 따라
- 그리고 안정성 영역을 Dormand-Prince Order 5 방법의 안정성 영역에 가깝게 만드십시오.
왜 마지막 상태입니까? PI-controlled adaptive stepize가 선택을 수행하는 방식에 따라이 방법은 항상 안정적인 경향이 있기 때문에 "충분한"안정 영역에 대한 좋은 기준이됩니다. 따라서 안정성 영역이 모두 비슷한 경향이있는 것은 우연이 아닙니다.
결론
모든 선택 방법에는 장단점이 있습니다. 가장 높은 차수의 RK 방법은 계수 선택을 최적화하기가 어렵고 함수 평가의 수가 복합적이기 때문에 (그리고 보간이 관련 될 때 더욱 빠르게 증가하기 때문에) 더 낮은 공차에서 효율적이지 않습니다. 그러나 공차가 충분히 낮아지면 승리하지만 필요한 공차는 "표준"응용 프로그램보다 훨씬 낮을 수 있습니다 (즉, 실제로 혼란스러운 시스템에만 적용 가능).