4.4. Содержание отчета
Индивидуальное задание.
Решение ОДУ аналитическим методом.
Создать в сценарии функцию для вычисления решения y(x) на отрезке [a;b] с шагом
,
и записать его в табл. 4-2.Создать в сценарии функцию для вычисления решения ОДУ методом Эйлера - в точках отрезка [a;b] с шагом h0, и записанные в табл. 4-2.
Вычислить значения погрешностей для , ,
,
записать в табл. 4-2.Создать в сценарии функцию для вычисления решения ОДУ методом Рунге-Кутта 4-го порядка
с шагом h0
и
записать его в табл. 4-2
Вычислить значения погрешностей
,
,
и записать их в табл. 4-2.Решить ОДУ, с использованием функции пакета Scilabode (ys(xi)), и записать его в табл. 4-2.
Построить график решений, полученных решений с использованием аналитического метода, метода Эйлера, метода Рунге-Кутта в одной системе координат.
Все решения в итоге должны быть оформлены в виде табл. 4-2.
Таблица4-2
-
xi
ys(xi)
…
…
4.5. Ход работы
Задание для численного решения обыкновенных дифференциальных уравнений:
дифференциальное уравнение y' = x2 y + y;
интервал [0,0.6];
начальные условия x0=0, y0=1;
шаг интегрирования h0=0.2.
Точное аналитическое решение заданного дифференциального уравнения
Найдем точное аналитическое решение заданного дифференциального уравнения (решение y=y(x))методом разделения переменных. Для этого запишем уравнение в виде dy/y = ((x^3)/3+x)dx и проинтегрируем с учетом начальных условий. Получим y = exp((x^3)/3+1).
Значения точного решения ОДУ y = exp((x^3)/3+1)
Вычислим в сценарии значения полученного решения y(xi) на отрезке [0;0.6] с шагом изменения аргумента h=0.2:
-
xi
y(xi)
0
1
0.2
1.22466
0.4
1.52399
0.6
1.95814
Численное решение заданного ОДУ методом Эйлера
Вычислим в сценарии значения численного решение ОДУ методом Эйлера (yЭ(x)) в точках отрезка [0;0.6] с шагом h=0.2. Для этого ОДУ записывают в виде y’=f(x,y) . Общая формула для определения очередного значения функции по методу Эйлера имеет вид yi+1=yi+hf(xi,yi), где i=0,n, n=b-a/h:
-
xi
yЭ(xi)
0
1
0.2
1.2
0.4
1.44960
0.6
1.78590
Значения погрешностей Ei = |y(xi)-yЭ(xi)|
Вычислим в сценарии значения погрешностей Ei = |y(xi)-yЭ(xi)| для xi = x0 + h*i,i=0,n, n=b-a/h:
-
xi
Ei
0
0
0.2
0.02466
0.4
0.07439
0.6
0.17224
Результаты решения ОДУ методом Рунге-Кутта 4-го порядка, дополненным методом автоматического выбора шага, обеспечивающим точность 10-4
Вычислим в программе значения численного решения ОДУ с точностью 10-4, и получим решение в точках отрезка [0;1.2]с шагом h=0.4 (ypk(x)) методом Рунге-Кутта 4-го порядка, используя формулы:
Код программы
import numpy as np def f(x, y): return x**2 * y + y def runge_kutta(f, x0, y0, h, n): x = np.zeros(n+1) y = np.zeros(n+1) x[0] = x0 y[0] = y0 for i in range(n): k1 = h * f(x[i], y[i]) k2 = h * f(x[i] + h/2, y[i] + k1/2) k3 = h * f(x[i] + h/2, y[i] + k2/2) k4 = h * f(x[i] + h, y[i] + k3) y[i+1] = y[i] + (k1 + 2*k2 + 2*k3 + k4) / 6 x[i+1] = x[i] + h return x, y x, y = runge_kutta(f, 0, -2, 0.4, 3) print(y[-1])
В нашем случае получены следующие значения.
-
xi
ypk(x)
0
1.
0.2
1.2246613962666668
0.4
1.5239834618635302
0.6
1.9581246946004922
Значения погрешностей ∆i = |y(xi)-ypk(xi)|
Вычислим в сценарии значения погрешностей ∆i = |y(xi)-ypk(xi)|, i = 0, n:
-
xi
0
0
0.2
0.000001
0.4
0.000007
0.6
0.000016
Все решения, полученные выше, сведем в табл. результатов 4-2:
-
xi
y(xi)
Ei
0
1
1
0
1.
0
0.2
1.22466
1.2
0.02466
1.224661
0.000001
0.4
1.52399
1.44960
0.07439
1.523983
0.000007
0.6
1.95814
1.78590
0.17224
1.958124
0.000016
y(xi)– аналитическое решение ОДУ,
yЭ(xi) - решение ОДУ, полученное методом Эйлера, Ei = |y(xi)-yЭ(xi)|,
ypk(xi)- решение ОДУ методом Рунге-Кутты 4-го порядка, ∆i = |y(xi)-ypk(xi)|.
Рисунок 1 — Аналитическое решение, Метод Эйлера и Метод Рунге-Кутты
Рисунок
2 — Аналитическое решение, Метод Эйлера
и Метод Рунге-Кутты
