Усовершенствованный метод Эйлера
В этом методе для расчета очередного приближения производится усреднение тангенсов углов наклона касательных в двух соседних точках:
1) Через точку xi,yi проводится касательная до пересечения с прямой xi+1 = xi + h. с тангенсом угла наклона tg(a1) = f(xi , yi) .
2) В полученной точке пересечения по методу Эйлера рассчитывается значение функции yi+1 = yi + h * yi' и вычисляется новая производная tg(a2) = f(xi+1,yi+1) = f(xi+h,yi+h*yi') .
3) Далее осуществляется возврат в точку xi,yi и через нее выполняется шаг величиной h под углом наклона, тангенс которого есть среднее арифметическое двух предыдущих тангенсов:
tg(a) = [ tg(a1) + tg(a2) ]/2 = [ f(xi,yi) + f(xi+h,yi+h*yi') ]/2
Таким образом окончательное расчетное соотношение усовершенствованного метода Эйлера-Коши имеет вид:
yi+1 = yi + h/2 * [ f(xi,yi) + f(xi+h,yi+h*yi') ]/2
xi+1 = xi + h
Пример:
|
n |
x |
y |
x1=x+h |
y'=f(x,y) |
y1=y+h*y' |
f1=f(x,y)+f(x1,y1) |
h*f1/2 |
|
0 |
0.000 |
1.000 |
1.000 |
-1.000 |
0.000 |
1.000 |
0.500 |
|
1 |
1.000 |
1.500 |
2.000 |
0.500 |
2.000 |
6.500 |
3.250 |
|
2 |
2.000 |
4.750 |
3.000 |
3.250 |
8.000 |
13.250 |
6.625 |
|
3 |
3.000 |
11.375 |
4.000 |
6.625 |
18.000 |
20.62 |
10.3135 |
|
4 |
4.000 |
21.688 |
5.000 |
10.313 |
32.000 |
28.313 |
14.156 |
|
5 |
5.000 |
35.844 |
|
|
|
|
|
Метод Рунге-Кутта
Алгоритм этого метода может быть представлен в виде:
yi+1 = yi + h/6 * (k0 + 2k1 + 2k2 + k3), i = 0,1, …
k0 = f(xi , yi)
k1 = f(xi + h/2 , yi + k0*h/2)
k2 = f(xi + h/2 , yi + k1*h/2)
k3 = f(xi + h , yi + k2*h)
Таким образом, метод Рунге-Кутта требует на каждом шаге четырехкратного вычисления правой части уравнения f(x,y) .Метод Рунге-Кутта требует большого объема вычислений, однако это окупается повышенной точностью, что дает возможность проводить счет с большим шагом. Другими словами, для получения результатов с одинаковой точностью в методе Эйлера потребуется значительно меньший шаг, чем в методе Рунге-Кутта.
Пример:
|
n |
x |
y |
k0=f(xi,yi) |
k1=f(xi+h/2,yi +k0*h/2) |
k2=f(xi+h/2,yi+k1*h/2) |
k3=f(xi+h,yi+k2*h) |
|
0 |
0.000 |
1.000 |
-1.000 |
0.000 |
-0.500 |
1.500 |
|
1 |
1.000 |
0.917 |
1.083 |
3.042 |
2.063 |
5.021 |
|
2 |
2.000 |
3.635 |
4.365 |
6.682 |
5.523 |
8.841 |
|
3 |
3.000 |
9.905 |
8.095 |
10.548 |
9.321 |
12.774 |
|
4 |
4.000 |
20.006 |
11.994 |
14.497 |
13.245 |
16.748 |
|
5 |
5.000 |
34.044 |
|
|
|
|
Решение систем дифференциальных уравнений
Рассмотренные методы могут быть использованы также для решения систем дифференциальных уравнений. Это легко показать для случая системы двух уравнений вида:
dY/dx = j(x, Y, Z)
dZ/dx = y(x, Y, Z)
Начальные условия заданы в виде: Y(x0) = y0 , Z(x0) = z0 .
Если использовался метод Эйлера, то можно записать:
Yi+1 = Yi + h * j(xi, Yi, Zi)
Zi+1 = Zi + h * y(xi, Yi, Zi)
xi+1 = xi + h
Если, например, использовался метод Рунге-Кутта, то получим:
yi+1 = yi + h/6 * (k0 + 2k1 + 2k2 + k3),
zi+1 = zi + h/6 * (m0 + 2m1 + 2m2 + m3), i = 0,1, …
k0 = j(xi , yi , zi) , m0 = y(xi , yi, zi)
k1 = j(xi + h/2 , yi + k0/2 , zi + m0*h/2) , m1 = y(xi + h/2 , y i + k0/2 , zi + m0*h/2)
k2 = j(xi + h/2 , yi + k1/2 , zi + m1*h/2) , m2 = y(xi + h/2 , yi + k1/2 , zi + m1*h/2)
k3 = j(xi + h , yi + k2 , zi + m2*h) , m3 = y(xi + h , yi + k2 , zi + m2*h)
xi+1 = xi + h
К решению систем уравнений сводятся также задачи Коши для уравнения высших порядков. Например, можно рассмотреть задачу Коши для уравнения второго порядка:
d2Y/dx2 = f(x, Y, dY/dx),
Y(x0) = y0 , Y'(x0) = z0
Если ввести вторую неизвестную функцию Z(x) = Y'(x), то можно получить:
dZ/dx = f(x, Y, Z)
dY/dx = Z
Y(x0) = y0 , Z(x0) = z0
Все рассмотренные методы относятся к группе одношаговых методов, т.е. методов, в которых для получения решения в каждом новом расчетном узле достаточно иметь значение функции лишь в предыдущем узле. Это позволяет начать счет при i = 0 по известным начальным значениям.
Другой путь основан на том, что для вычисления значения yi+1 используются результаты не одного, а k предыдущих шагов, т.е. значения yi-k+1, yi-k+2, …, yi .В этом случае получается k - шаговый метод.
