더 정확한 취소 방법
요점을 파악하려고 노력할 것입니다. 남은 것이 있고 더 자세한 정보가 필요하면 알려주세요.
나는 명시 적으로 결합되지 않은 몇 가지 방정식을 풀고 있지만 해당하는 알 수없는 변수는 다음과 같습니다.$x$ 과 $y$ 미분 방정식을 충족해야합니다.
$\dot x = x + y,$
여기서 점은 독립 변수에 대한 미분을 나타냅니다. $t$.
에 대한 방정식 $x$ 두 번째 순서이므로 $x$ 과 $\dot x$그리고 위의 방정식이 지속적으로 만족되는지 확인할 수 있습니다. 그러나 (첨부 된 플롯 참조), SciPy (이미 구현 된 것)에서 어떤 통합 방법을 사용하든 위의 동등성이 어느 시점에서 충족되지 않는 것으로 나타났습니다. 이것은$x$ 과 $y$ SciPy에서 제공하는 방법 중 어느 것도 얻을 수없는 것처럼 보이는 매우 높은 정밀도까지 서로를 상쇄합니다 (나는 모든 방법을 사용하고 가능한 한 절대 및 상대 허용 오차를 낮춤으로써이를 확인했습니다. 첨부 된 플롯에서 , 사용 된 방법은 DOP853이며 매우 낮은 공차가 필요할 때 매우 유용합니다.)

제 질문 은 정확도를 향상시키는 방법을 알고 있으면 취소가 더 정확 해집니다 (전체 계산을 통해 방정식이 편리하게 충족되기를 바랍니다). 내가 지금까지 변경 한 유일한 매개 변수는 상대적 및 절대 허용 오차 (물론 우리가 처리 할 수있는 다른 방법)였습니다. 내가 누락 된 매개 변수가 있으며 그에 유용 할 수 있습니까?
답변
내부적으로 Fortran을 사용하고 있고 쉽게 다시 컴파일 할 수 없기 때문에 Python 라이브러리에서 이것이 가능할지 확신 할 수 없지만 Julia DifferentialEquations.jl JIT 컴파일은 사용자가 제공하는 숫자 유형에 따라 솔버를 전문화합니다. 다음은 유리수, MPFR BigFloats 및 ArbFloats (Arb 라이브러리 기반)와 같은 이상한 유형의 데모입니다 .
이를 위해 14 차 방법의 정확성을 보여주는 Feagin 수렴 플롯 에서 실제로 확인할 수 있습니다.$10^{-50}$BigFloats를 통해 . BigFloats 또는 ArbFloats를 사용하는 Julia에서 setprecision
필요한 정확도를 얻기 위해 숫자 유형의 정밀도를 변경할 수 있습니다.
그동안 줄리아 방법이 SciPy (순서와 크기의 절반)에 비해 매우 빠르고 , 그들은 특별한 최적화 코드는 고정밀 경우에 생성되도록 입력 유형을 전문으로 컴파일에도 불구하고, 고정밀 연산은 여전히 매우 비싸다 이것을 명심해야합니다. 이 높은 정확도 범위에 대해 적분기를 전문화하는 것은 상당히 중요합니다. 이 작업을 수행하려면 아마도 ( 허용 오차가 감소함에 따라 더 중요한 호출 사이에 다중 스레드 가 될 것입니다) 또는 새로운 16 차 symplectic integratorVern9
와 같은 다중 스레드 외삽 방법 중 하나를 권장 합니다.ExtrapolationMidpointDeuflhard
f
IRKGL16
또한 검증 된 산술이 필요한 경우 솔루션에서 부동 소수점 정확도 경계가있는 고차 Taylor 메서드에 TaylorIntegration.jl 을 사용할 수 있습니다 .