예, 어떤 이유로 이것에 대한 리소스가 너무 많지 않습니다. 오랫동안 표준 goto는 "BDF 방법 만 사용"이었습니다. 이 만트라는 역사적인 이유가 거의 없기 때문에 하나의 기어 코드가 처음으로 널리 사용되는 견고한 솔버 였고 다른 MATLAB 제품군에는 암시 적 RK 방법이 포함되지 않았거나 포함되지 않았습니다. 그러나이 휴리스틱이 항상 올바른 것은 아니며 테스트에서 일반적으로 잘못되었습니다. 자세히 설명하겠습니다.
BDF 방법은 고정 비용이 높다
BDF 방식의 적응 형 타임 스텝핑 및 적응 형 순서는 비용이 매우 높습니다. 계수를 다시 계산하거나 값을 다른 시간으로 보간해야합니다. 현재 BDF 코드를 개선하기 위해 많은 노력이 있었지만 (이 문제를 다르게 처리하려는 구현을 위해 잘 알려진 두 가지 "양식"이 있습니다) 실제로는 매우 어려운 소프트웨어 엔지니어링 문제입니다. 이 때문에 실제로 대부분의 BDF 코드는 Gear의 원래 코드의 모든 자손입니다. Gears, vode, lsoda, Sundial의 CVODE, 심지어 DAE 솔버 DASKR 및 DASSL도 동일한 코드의 자손입니다.
이것이 의미하는 바는 문제가 "너무 작은"경우 고정 비용이 높고 암시 적 RK 방법이 더 효과적이라는 것입니다.
고차 BDF 방법은 복잡한 고유 값에 대해 매우 불안정합니다.
BDF 방법을 사용하면 최대 차수를 제어하고 더 보수적 인 이유를 찾을 수 있습니다. 높은 차수의 BDF 방법은 "중간 크기"복잡한 고유 값도 잘 처리 할 수 없습니다. 따라서이 경우 안정을 위해서는 주문을 취소해야합니다. 이것이 기술적으로 안정적인 6 차 BDF 방법이 종종 무시되는 이유입니다. 5 차에도 이미 문제가 있기 때문입니다 (6 차는 덜 안정적 임). 최대 2 차까지만 A-stable이므로 항상 거기로 폴백 할 수 있지만 스테핑은 오류가 지배적입니다.
따라서 사소한 문제가 아닌 경우 BDF 코드를 사용하면 항상 5 차 주문이되지 않습니다. 진동으로 인해 순서가 떨어집니다.
BDF 방법은 시작 비용이 높습니다
자동 시작되는 BDF 방법은 시작 비용이 높습니다. 작은 오일러 단계부터 작은 BDF-2 단계 등으로 시작합니다. 짧은 시간 통합의 경우 무시할 수없는 효과가 있습니다. 이벤트 처리와 같이 자주 중지하는 경우 코드의 효율성이 크게 저하됩니다. 이것이 무거운 이벤트 처리 또는 지연 방정식 상황에서 사용되는 다단계 방법을 거의 볼 수없는 이유 중 하나입니다 (지연 방정식이 각 높은 순서 불연속에서 다시 시작되며, 각 지연 시간 τ 마다 각 에서 전파됨 ).나는 ττ
다단계 방법 인 BDF 방법은 최상의 스케일링을 갖습니다.
그러나 이것이 BDF 방법이 원하는 방식입니다. 함수 호출이 가장 적기 때문입니다. 이로 인해 "항상 BDF 방법을 항상 기본값으로 설정해야한다"는 아이디어가 잘못되었지만 (위의 이유로 안정성 및 효율성상의 이유로 항상 참인 것은 아님), 함수 호출 가 충분히 비싸면 BDF 방법이 가장 좋습니다. 일반적으로 이것은 충분히 크고 뻣뻣한 PDE 이산화에 대해 BDF 방법이 가장 효율적이라는 것을 의미합니다. 즉,이 "충분히 큰"은 매우 문제에 의존하며, 최대 1,000의 공간 변수, 즉 YMMV의 방법으로 더 나은 PDE 이산화를 발견했습니다 . 아는 유일한 방법은 테스트하는 것입니다.에프radau
어떤 벤치 마크를 이용할 수 있습니까?
Hairer 's book과 DiffEqBenchmarks (아래 설명)는 쉽게 사용할 수있는 작업 정밀 다이어그램 측면에서 최고 일 것입니다. Hairer 's Solvingary Differential Equations II 에는 154 및 155 페이지에 많은 작업 정밀도 다이어그램이 있습니다. 그가 선택한 문제에 대한 결과는 위에서 언급 한 이유로 위에서 언급 한 것과 일치합니다. 문제가 아닌 경우 암시 적 RK가 더 효율적입니다. "충분히 큰". 주목해야 할 또 다른 흥미로운 점은 Rodas
오류가 높은 정권에서 높은 순서의 Rosenbrock 방법이 (예를 들어 ) 그의 많은 테스트에서 가장 효율적으로 나오고 내재 된 RK radau5
가 낮은 오류에서 가장 효율적이라는 것입니다. 그러나 그의 테스트 문제는 대부분 큰 PDE의 이산화가 아니므로 위의 사항을 고려하십시오.
테스트 / 벤치 마크는 어떻게합니까?
Julia의 DifferentialEquations.jl을 사용 하여 이것을 테스트하고 싶습니다 (면책 조항 : 개발자 중 한 명입니다). 이것은 줄리아에 있습니다. 프로그래밍 언어는 여기서 실제로 메모를 받아야합니다. 함수 호출 비용이 증가함에 따라 BDF 방법이 더 우수하다는 것을 기억하십시오. R / MATLAB / Python에서 사용자 함수는 최적화 된 솔버가 실제로 사용해야하는 유일한 R / MATLAB / Python 코드입니다. SciPy 또는 Sundials 랩퍼를 사용하는 경우 전달하는 함수를 제외한 모든 C / 포트란 코드입니다. . 이는 동적 언어 (Julia가 아닌)에서 함수 호출이 매우 최적화되지 않았기 때문에 BDF 메소드가 일반적으로 수행하는 것보다 낫습니다 (이는 아마도 Shampine ode15s
이 MATLAB 제품군에 포함되었지만 암시 적 RK 메소드가없는 이유 일 것입니다 ). .
에프ODEProblem
@time sol = solve(prob,CVODE_BDF())
@time sol = solve(prob,radau())
여기서 첫 번째는 Sundials CVODE
(BDF 방법)를 사용하고 두 번째는 Hairer radau
(암시 적 RK)를 사용합니다.
어떤 경우 든 ODEProblem
벤치마킹 도구를 사용하여 다양한 알고리즘이 다양한 적응 형 공차에 대해 어떻게 확장되는지 확인할 수 있습니다. 일부 결과는 DiffEqBenchmarks.jl에 게시됩니다 . 예를 들어, ROBER 문제 (3 개의 뻣뻣한 ODE 시스템)에서 Sundials가 실제로 불안정하고 충분히 높은 공차 (다른 방법은 잘 수렴되는)로 분산되어 안정성 문제에 대한 위의 참고 사항을 보여줍니다. Van Der Pol 문제 에서 더 많은 세척을 볼 수 있습니다. 나는 게시하지 않은 것보다 훨씬 더 많은 것을 가지고 있지만 아마도 Rosenbrock 방법을 더 많이 마칠 때까지 아마 그것을 얻지 못할 것입니다 (Rodas는 Fortran 버전입니다).
(참고 : 엄격한 벤치 마크는 업데이트가 필요합니다. 우선 ODE.jl의 메소드가 분기 된 이후로 텍스트를 업데이트해야합니다.)
외삽 법 및 RKC
seulex
뻣뻣한 문제에 대한 외삽 법도 있습니다. 이것들은 "무한 적응 순서"이지만, 매우 낮은 오류를 찾을 때 (예를 들어 뻣뻣한 문제를 해결 1e-10
하려는 경우에는 명시적인 방법을 사용할 수 있음) 비대칭 적으로 양호하다는 의미 일뿐 입니다. . 그러나 대부분의 경우 효율적이지 않으므로 피해야합니다.
Runge-Kutta Chebyschev는 명시적인 방법으로 고려해야 할 엄격한 문제에 대해서도 작동합니다. DifferentialEquations.jl에 싸여 있지 않으므로 공정한 방법에 대한 확실한 증거가 없습니다.
고려해야 할 다른 방법 : 뻣뻣한 PDE를위한 특수화 된 방법
고품위 Rosenbrock 방법은 Jacobian을 쉽게 계산할 수있는 중소형 강성 문제에 대해 실제로 훨씬 더 우수하다는 점에 유의해야합니다. 그러나 일부 PDE의 경우, 전이 확산 문제가이 범주에 속한다고 생각합니다. Rosenbrock은 약간의 정확도를 잃을 수 있습니다. 또한 정확성을 유지하려면 매우 정확한 야곱 인이 필요합니다. Julia에서는 솔버가 엡실론 가공에 적합 할 수있는 기호 및 자동 분화 기능을 제공하기 때문에 이것이 쉽습니다. 그러나 MATLAB과 같은 것ode23s
이러한 구현에는 유한 차분을 사용하기 때문에 문제가 발생할 수 있습니다. BDF 및 묵시적 RK 방법의 경우 Jacobian의 오류는 수렴 속도가 느리지 만 Rosenbrock의 경우 묵시적 방정식이 아니며 Jacobian 역전이있는 RK 방법이므로 정확도가 떨어집니다.
살펴볼 다른 방법으로는 지수 RK 방법, 지수 시차 (ETD), 암시 적분 계수 (IIF) 및 지수 Rosenbrock 방법이 있습니다. 처음 세 가지는 많은 PDE 이산화에서
유티= A u + f( u )
ㅏ유이자형ㅏㅏ
ㅏ제이u + g( u )제이에프= Ju + g
또 다른 방법 : 최신 작품
완전히 암시적인 방법은 뻣뻣한 방정식에 적합합니다. PDE가 충분히 크지 않으면 HPC를 사용하기에 충분한 "공간 내 병렬화"를 효과적으로 수행 할 수 없습니다. 대신, 완전히 암시적이고 뻣뻣한 방정식에는 적합하지만 하드웨어를 최대한 활용하기 위해 평행 한 시간에 따른 이산화를 만들 수 있습니다. XBraid 는 이와 같은 기술을 사용하는 솔버이며 주요 방법은 PFFAST 및 초현실적 방법입니다. DifferentialEquations.jl은 유사하게 작동하는 신경망 방법을 개발 중입니다.
다시 말하지만, 효율적으로 병렬화하기에 충분한 공간 이산 법이 없지만 병렬 계산을위한 리소스를 사용할 수있는 경우에 최적입니다.
결론 : 소금 한 알갱이로 점근 적 고려
Δ의 t
BDF 방법은 점진적으로 가장 좋지만 대부분의 경우 해당 체제에서 작동하지 않을 수 있습니다. 그러나 공간 이산화에 충분한 점이있는 경우 BDF 방법은 공간에서 효율적으로 선형화 (선형 해석을 병렬화하여) 할 수 있으며 함수 호출이 가장 적으므로 최선을 다할 것입니다. 그러나 PDE 이산화가 충분히 크지 않은 경우 암시 적 RK, Rosenbrock, 지수 RK 등의 방법을 잘 살펴보십시오. 여러 방법간에 쉽게 전환 할 수있는 DifferentialEquations.jl과 같은 소프트웨어 제품군을 사용하면 문제 도메인에 가장 적합한 방법을 이해하는 데 도움이 될 수 있습니다. 많은 경우 사전에 알 수 없기 때문입니다.
[테스트 스위트에 추가하고 싶은 예시 문제가있는 경우 언제든지 문제를 해결하는 데 도움을주십시오. 나는 이것에 대해 매우 포괄적 인 자료를 유지하고 싶다. Hairer의 모든 벤치 마크를 실행 가능한 노트북 형태로 "곧"사용할 수 있기를 희망하며 과학 분야를 대표하는 다른 문제를 원합니다. 어떤 도움이라도 감사합니다!]