Metoda Bogackiego-Shampine’a – metoda numeryczna do rozwiązywania równań różniczkowych zwyczajnych w postaci y ′ = f ( t , y ) {\displaystyle y'=f(t,y)} zaproponowana przez Przemysława Bogackiego i Lawrence’a Shampine’a w 1989[1]. Metoda Bogackiego-Shampine’a jest metodą Rungego-Kutty trzeciego rzędu z czterema współczynnikami k {\displaystyle k} (patrz dalej) z tzw. własnością pierwszy taki jak ostatni (ang. FSAL, first same as last), dzięki której w każdej iteracji funkcja f {\displaystyle f} wywoływana jest trzykrotnie. Metoda ta ma wbudowaną metodę rzędu drugiego dzięki czemu możliwa jest adaptacyjna zmiana kroku całkowania. Metoda Bogackiego-Shampine’a zaimplementowana jest jako funkcja ode23 w programie MATLAB[2].
ode23
W ogólności metody niższego rzędu są bardziej odpowiednie niż algorytmy wyższego rzędu jak np. Metoda Dormanda-Prince’a (piątego rzędu) do numerycznego rozwiązywania równań różniczkowych zwyczajnych, jeśli nie jest wymagana wysoka dokładność rozwiązania przybliżonego. Bogacki i Shampine twierdzą ponadto, że zaproponowana przez nich metoda przewyższa inne metody trzeciego rzędu z osadzonym metodami rzędu drugiego.
Tabela Butchera dla metody Bogackiego-Shampine’a wygląda następująco:
Rozważmy równanie różniczkowe w postaci y ′ = f ( t , y ) . {\displaystyle y'=f(t,y).} Jeśli y n {\displaystyle y_{n}} oznacza numeryczne rozwiązanie w chwili t n , {\displaystyle t_{n},} zaś h n {\displaystyle h_{n}} jest krokiem czasowym zdefiniowanym jako h n = t n + 1 − t n , {\displaystyle h_{n}=t_{n+1}-t_{n},} wtedy jeden krok metody Bogackiego-Shampine’a jest dany jako:
gdzie z n + 1 {\displaystyle z_{n+1}} jest przybliżeniem drugiego rzędu rozwiązania dokładnego. Sposób obliczania y n + 1 {\displaystyle y_{n+1}} został wybrany za Ralstonem[3]. Z drugiej strony y n + 1 {\displaystyle y_{n+1}} jest przybliżeniem trzeciego rzędu, więc różnica pomiędzy y n + 1 {\displaystyle y_{n+1}} i z n + 1 {\displaystyle z_{n+1}} może być użyta do adaptacyjnej zmiany długości kroku całkowania. Właściwość FSAL (pierwszy jak ostatni) oznacza, że k 4 {\displaystyle k_{4}} w danym kroku jest równa k 1 {\displaystyle k_{1}} w kroku następnym, stąd tylko trzy wywołania funkcji f {\displaystyle f} są potrzebne w każdej iteracji.