파이썬에서 1 차 ODE를 해결하기 위해 4 차 Runge-Kutta 방법을 구현하려고합니다. 즉 입니다. 방법이 어떻게 작동하는지 이해하지만 비용이 많이 들기 때문에 계산 횟수를 최소화하는 효율적인 알고리즘을 작성하려고합니다 . 단계를 통해 증가함에 따라 이전에 계산 된 데이터 포인트를 재사용 할 수 있지만 방법을 볼 수 없다는 말을 들었습니다. 누구든지 이것을하는 방법을 알고 있습니까 아니면 불가능합니까?f(x,y)
파이썬에서 1 차 ODE를 해결하기 위해 4 차 Runge-Kutta 방법을 구현하려고합니다. 즉 입니다. 방법이 어떻게 작동하는지 이해하지만 비용이 많이 들기 때문에 계산 횟수를 최소화하는 효율적인 알고리즘을 작성하려고합니다 . 단계를 통해 증가함에 따라 이전에 계산 된 데이터 포인트를 재사용 할 수 있지만 방법을 볼 수 없다는 말을 들었습니다. 누구든지 이것을하는 방법을 알고 있습니까 아니면 불가능합니까?f(x,y)
답변:
당신은에서가는 경우 yp_1 = f(x_1, y_1)
에 yp_2 = f(x_1+h, y_2)
당신이 중간 포인트를 필요로하기 위하여려고하고있다 :
K1 = f(x_1+h/2, y_1+h/2*yp_1)
K2 = f(x_1+h/2, y_1+h/2*K1)
K3 = f(x_1+h, y_1+h*K2)
x_2 = x_1 + h
y_2 = y_1 + h/6*(yp_1+2*K1+2*K2+K3)
yp_2 = f(x_2, y_2)
일반적으로 중간 단계 중 어느 것도 다음 단계에서 유용하지 않습니다. 이 때문에 K1
, <> K2
와 K3
<> yp_2
.
일반적으로 명시 적 Runge-Kutta 차수 방법은 최소한 함수 평가가 필요 하며 이를 피할 수있는 방법은 없습니다. 과거 는 개 이상의 기능 평가가 필요합니다 .
과거의 기능 평가를 재사용하려면 Adams-Bashforth와 같은 다단계 방법을 사용해야합니다.
어쨌든 각 전략에 대해 비용을 지불합니다. 단일 단계 방법에는 많은 수의 기능 평가가 필요하지만 다단계 방법에는 최대 메모리 요구 사항이 있습니다.
편집 : 수정. 내 진술은 명시 적 방법에 대해서만 사실입니다. 단계의 수가 기능 평가의 수로 직접 변환되지 않기 때문에 암시 적 방법의 경우 상황이 명확하지 않습니다.
"내장 된"방법을 확인하십시오.이 유형의 RK 방법의 목표는 순서가 다른 두 가지 방법을 사용하는 것입니다. 여기서 고차 방법은 저차 방법과 동일한 함수 평가를 사용합니다. 이를 통해 매우 효율적인 오류 추정이 가능합니다. Hairer, Norsett 및 Wanner의 p.165 및 "일반 미분 방정식 I : 비 강성 문제 해결"의 추가 내용을 참조하십시오. 전형적인 예는 차수 7 (8)의 Fehlberg 방법입니다.
또한 PYTHON에서 ODE를 해결하려는 경우 assimulo를 확인하십시오 . 나는이 패키지를 몇 주 동안 가지고 놀았으며 매우 행복하다.
f(x,y)
결과가 기억되도록 쉽게 "랩핑"할 수 있습니다 .