Главная • О сайте • О математиках • О математикеФилдсовская премияФорум
Школьникам: Занимательная математика • Логические задачи
Студентам: Высшая алгебраВекторная алгебраАналитическая геометрияЧисленные методы
 

Метод Рунге-Кутта 4-го порядка для одного уравнения

Автор: Ильдар Насибуллаев

В данной статье рассмотрим эффективность метода Эйлера, модифицированного метода Эйлера и метода Рунге-Кутта 4-го порядка в случае одного обыкновенного дифференциального уравнения:

1 dy/dt = y2 + 1 = f(y)

Описание методов

Решим уравнение 1 численно методом Эйлера. Суть метода заключается в том, что производная заменяется конечной разностью:

2 dy/dt ≈ Δ y / Δ t = (y1 - y0) / τ

Отсюда значение функции y в следyющий момент времени:

3 y1 = y0 + τ f(y0)

Модифицированный метод Эйлера использует двушаговую поправку к функции:

4 y* = y0 + τ f(y0)
y1 = y0 + 0.5 τ [ f(y*) + f(y0) ]

Метод Рунге-Кутта 4-го порядка вычисляет значение в следующий момент времени по формуле:

k1 = τ f(y0)
k2 = τ f(y0 + 0.5 k1) 5
k3 = τ f(y0 + 0.5 k2)
k4 = τ f(y0 + k3)
y1 = y0 + ( k1 + 2 k2 + 2 k3 + k4) / 6

Теперь мы можем сравнить результаты всех трех методов с точным решением уравнения 1. Задаем начальное условие y0 = 0 и шаг τ = 0.1. Результат показан в таблице (в скобках указана относительная погрешность).

Шаг  t   Эйлер               Модиф. Эйлер         Рунге-Кутта
 1  0.1  0.10000000 ( 0.3%)  0.10050000 ( 0.16%)  0.10033459 (0.000083%)
 2  0.2  0.20100000 ( 0.8%)  0.20303533 ( 0.16%)  0.20270988 (0.000078%)
 3  0.3  0.30504010 ( 1.4%)  0.30981379 ( 0.15%)  0.30933604 (0.000068%)
 4  0.4  0.41434505 ( 2.0%)  0.42340835 ( 0.15%)  0.42279299 (0.000053%)
 5  0.5  0.53151323 ( 2.7%)  0.54702430 ( 0.13%)  0.54630231 (0.000033%)
 6  0.6  0.65976386 ( 3.6%)  0.68489900 ( 0.11%)  0.68413676 (0.000008%)
 7  0.7  0.80329269 ( 4.6%)  0.84294853 ( 0.08%)  0.84228857 (0.000022%)
 8  0.8  0.96782061 ( 6.0%)  1.02988692 ( 0.02%)  1.02963906 (0.000049%)
 9  0.9  1.16148828 ( 7.8%)  1.25929935 ( 0.07%)  1.26015878 (0.000045%)
10  1.0  1.39639379 (10.3%)  1.55378951 ( 0.23%)  1.55740644 (0.000082%)

Так, что если вам нужно выбирать, каким методом решить обыкновенное дифференциальное уравнение - выбор очевиден.

Текст программы на FORTRAN

Ниже приведен текст программы, по которой были получены приведенные в статье результаты.

! Comparison of the Euler, modified Euler and Runge-Kutta methods.
! (C) 2006-2007 by Ildar Nasibullayev
program relaxation
  implicit none 
  double precision yn1, yn, dt, ye, yme, yme1, yp
  double precision k1, k2, k3, k4, f
  integer i

  ye = 0.d0
  yme = 0.d0
  yn = 0.d0
  dt = 1.d0 /10.d0 

  do i=1,10
    ! Runge-Kutta
    k1 = dt * f(yn)
    k2 = dt * f(yn + 0.5d0 * k1)
    k3 = dt * f(yn + 0.5d0 * k2)
    k4 = dt * f(yn + k3) 
    yn = yn + (k1 + 2d0 * k2 + 2.d0 * k3 + k4)/6.d0

    ! Euler
    ye = ye + dt * f(ye)

    ! Modified Euler
    yme1 = yme + dt * f(yme)
    yme = yme + 0.5d0 * dt * ( f(yme1) + f(yme) )

    yp = dtan(i * dt)
    write (50,'(I2,F4.1,  F12.8,A2,F4.1,A3,  F12.8,A2,F5.2,A3,  F12.8,A2,F8.6,A3)') i, i * dt,&
      ye, ' (', dabs(yp-ye)*100.d0/yp, '%)',&
      yme, ' (', dabs(yp-yme)*100.d0/yp, '%)',&
      yn, ' (', dabs(yp-yn)*100.d0/yp, '%)'
  end do
end program relaxation

function f(y)
  implicit none 
  double precision f,y
  f = y**2 + 1.d0
end function

Обсудить статью на форуме



2007 (c) Ильдар Насибуллаев. Все права защищены. «Математика, доступная для всех» является частью «Научно-образовательного портала».
Перепечатка материалов возможна в объеме не более 5 страниц с указанием гипертекстовой ссылки на источник http://math.originweb.info/ и автора статьи.
Время создания страницы 0.0011 сек.