Метод Адамса

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Метод Адамса — група методів чисельного інтегрування звичайних диференційних рівнянь, які дозволяють обчислювати таблицю наближених значень розв'язку за даними в початкових точках.

В однокрокових методах для обчислення значения уn+1 використовується значения тільки уn і для підвищення точності при фіксованому кроці необхідно проводити обчислення великої кількості допоміжних величин. Це є причиною того, що для багатьох задач застосування формул Рунге-Кутти неможливе внаслідок надто великого обсягу обчислень. Тому часто раціональніше переходити до багатокрокових методів, які дають можливість, використовуючи значення f(xi,yi), що обчислені на попередніх кроках, отримати прийнятну точність. Серед k-крокових методів найчастіше використовують методи інтегрування на сітці з постійним кроком, які називаються скінченно-різницевими схемами. Розглянемо загальне диференційне рівняння (1)
 \int\limits_D f(\vec x) d\vec x \approx \sum_{i=1}^N \omega_i f (\vec x^i)

Припустимо, що вже відомі розв'язки на множині значень Хi (і=0,1,. . .,п). Тобто можна записати рівняння (2):

 y (x_{n+1}) = y_n + \int_{x_n}^{x_{n+1}} f(t, y(t)) dt

При обчисленні інтеграла в правій частині цього виразу підінтегральну функцію замінимо на інтерполяційний многочлен Ньютона для інтерполяції назад P_{n-1} (x)=f(x_n)+f(x_{n-1};x_n)(x-x_n)+...+f(x_1;...;x_n)(x-x_n)...(x-x_1) на сітці хп, xn-1, xn-2 ,...

При цьому f(x,y) \equiv f(x) = a_0+a_1(x-x_n)+a_2(x-x_n)(x-x_{n-1})+...+a_m(x-x_n)...(x-x_{n-m+1})+R_m(x) де a_k=\frac{\nabla^k f_n}{k! h^k} і Rm(x) - похибка інтерполяції, яка і буде визначати похибку отриманих нижче формул. Нагадаємо, що \nabla^k f_n — скінченні ліві різниці k-го порядку функції f(x,y) в точці хn. Підставивши в (2) праву частину (1) і знехтувавши оцінкою похибки, отримаємо

\int_{x_n}^{x_{n+1}} f(t, y(t)) dt \approx \sum_{k=0}^m \frac{\nabla^k f_n}{k! h^k} \int_{x_n}^{x_{n+1}} (t-x_n)...(t-x_{n-k+1}) dt

Обрахуємо декілька перших інтегралів:

k=0, \int_{x_n}^{x_{n+1}} dt = h
k=1, \int_{x_n}^{x_{n+1}}(t-x_n) dt = \frac{h^2}{2}
k=2, \int_{x_n}^{x_{n+1}}(t-x_n)(t-x_{n-1}) dt = \frac{5}{6}h^3

У результаті отримаємо формулу Адамса

y_{n+1}=y_n+h[f_n+\frac{1}{2} \nabla f_n+\frac{5}{12} \nabla^2 f_n+\frac{3}{8} \nabla^3 f_n+\frac{251}{720} \nabla^4 f_n+...]

де порядок точності методу збігається з кількістю доданків у квадратних дужках. На практиці, для користування цією формулою залежно від порядку точності, необхідно знати відповідну початкову послідовність значень fi (а значить і yi) у вузлах Хi. Для їх обчислення зазвичай використовують однокроковий метод (наприклад Рунге-Кутти) в початкових точках поблизу x0, а потім переходять до використання формули Адамса.

Приклади[ред.ред. код]

Розглянемо такий приклад

 y' = y, \quad y(0) = 1.

Точним розв'язком є  y(t) = \mathrm{e}^t .

Однокроковий Ейлер[ред.ред. код]

Простим чисельним методом є метод Ейлера:

 y_{n+1} = y_n + hf(t_n, y_n). \,

Метод Ейлера можна розглядати як вироджений в однокроковий багатокроковий метод.

Цей метод, застосований з кроком розміру  h = \tfrac12 на проблемі  y' = y , дає такі висліди:

 \begin{align}
  y_1 &= y_0 + hf(t_0, y_0) = 1 + \tfrac12\cdot1 = 1.5, \\
  y_2 &= y_1 + hf(t_1, y_1) = 1.5 + \tfrac12\cdot1.5 = 2.25, \\
  y_3 &= y_2 + hf(t_2, y_2) = 2.25 + \tfrac12\cdot2.25 = 3.375, \\
  y_4 &= y_3 + hf(t_3, y_3) = 3.375 + \tfrac12\cdot3.375 = 5.0625.
\end{align}

Двокроковий метод Адамса-Бешфорта[ред.ред. код]

Метод Ейлер однокроковий. Простий багатокроковий метод це двокроковий метод Адамса-Бешфорта (англ. Adams–Bashforth method)

 y_{n+2} = y_{n+1} + \tfrac32 hf(t_{n+1},y_{n+1}) - \tfrac12 hf(t_n,y_n).

Цей метод для отримання наступного значення,  y_{n+2} , потребує два значення,  y_{n+1} і  y_n . Однак, задача з початковим значенням надає лише одне,  y_0 = 1 . Один з підходів полягає у використанні  y_1 обчисленого методом Ейлера як другого значення. З таким вибором, метод Адамса-Бешфорта видає (округлено до чотирьох цифр):

 \begin{align}
  y_2 &= y_1 + \tfrac32 hf(t_1, y_1) - \tfrac12 hf(t_0, y_0) = 1.5 + \tfrac32\cdot\tfrac12\cdot1.5 - \tfrac12\cdot\tfrac12\cdot1 = 2.375, \\
  y_3 &= y_2 + \tfrac32 hf(t_2, y_2) - \tfrac12 hf(t_1, y_1) = 2.375 + \tfrac32\cdot\tfrac12\cdot2.375 - \tfrac12\cdot\tfrac12\cdot1.5 = 3.7812, \\
  y_4 &= y_3 + \tfrac32 hf(t_3, y_3) - \tfrac12 hf(t_2, y_2) = 3.7812 + \tfrac32\cdot\tfrac12\cdot3.7812 - \tfrac12\cdot\tfrac12\cdot2.375 = 6.0234.
\end{align}

Точний розв'язок при  t = t_4 = 2 є  \mathrm{e}^2 = 7.3891\ldots , отже двокроковий метод Адамса-Бешфорта точніший ніж метод Ейлера. Це завжди виконується якщо крок достатньо малий.

Див. також[ред.ред. код]

Джерела[ред.ред. код]