Школьникам: Занимательная математика • Логические задачи
Студентам: Высшая алгебра • Векторная алгебра • Аналитическая геометрия • Численные методы
Метод Рунге-Кутта 4-го порядка для одного уравнения
В данной статье рассмотрим эффективность метода Эйлера, модифицированного метода Эйлера и метода Рунге-Кутта 4-го порядка в случае одного обыкновенного дифференциального уравнения:
Описание методов
Решим уравнение 1 численно методом Эйлера. Суть метода заключается в том, что производная заменяется конечной разностью:
Отсюда значение функции y в следyющий момент времени:
Модифицированный метод Эйлера использует двушаговую поправку к функции:
y1 = y0 + 0.5 τ [ f(y*) + f(y0) ]
Метод Рунге-Кутта 4-го порядка вычисляет значение в следующий момент времени по формуле:
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
Перепечатка материалов возможна в объеме не более 5 страниц с указанием гипертекстовой ссылки на источник http://math.originweb.info/ и автора статьи.
Время создания страницы 0.0011 сек.