lab5
.docxМинистерство цифрового развития, связи и массовых коммуникаций Российской Федерации
Ордена Трудового Красного Знамени Федеральное государственное бюджетное образовательное учреждение высшего образования «Московский технический университет связи и информатики» (МТУСИ)
Кафедра: Информатика
Дисциплина: Численные методы
Лабораторная работа №5
«Методы решения
обыкновенных дифференциальных уравнений»
Выполнил:
студент группы БИК2207
Москва 2024
Содержание
Y
1.Постановка задачи 3
2. Точное аналитическое решение 4
3.Значения точного решения ОДУ 4
4.Численные значения ОДУ методом Эйлера 5
5. Значения погрешностей метода Эйлера 5
6. Численные значения ОДУ методом Рунге-Кутта 4-го порядка с точностью 10-4 6
7.Значения погрешностей метода Рунге-Кутта 4-го порядка с точностью 10-4 8
8.Решение дифференциального уравнения ys(x) использованием функции математического пакета. 9
9.Иллюстрированные решения в одной системе координат 10
10.Выводы 10
1.Постановка задачи
Вариант 16
№ |
Уравнение |
|
|
|
a |
b |
16 |
|
0 |
-4 |
0.2 |
0 |
0.6 |
Выбрать индивидуальное задание в табл. 4-1 для решения обыкновенных дифференциальных уравнений:
дифференциальное уравнение
;
интервал [a;b] , где ищется решение дифференциального уравнения;
начальные условия x0, y0;
шаг интегрирования h0.
Найти аналитическое решение
заданного дифференциального уравнения,
полагая его точным.Создать в сценарии функцию для вычисления значений полученного решения
на отрезке [a;b]
с шагом h0.Создать в сценарии функцию для вычисления значений численное решение дифференциального уравнения методом Эйлера -
в точках отрезка [a;b]
с шагом h0Вычислить значения погрешностей
для
,
,.Написать и выполнить программу, реализующую программу решения дифференциального уравнения методом Рунге-Кутта 4-го порядка yрк(х) в точках отрезка [a;b] с шагом h0, обеспечив с использованием метода автоматического выбора шага, точность 10-4.
Вычислить значения погрешностей
для
,
.Найти решение дифференциального уравнения ys(x)использованием функции пакета Scilab ode.
Проиллюстрировать решения
в одной системе координат.
2. Точное аналитическое решение
Задача Коши:
x0 = 0
y0 = -4
Точное аналитическое решение:
3.Значения точного решения ОДУ
Вычислим в Mathcad значения полученного решения y(xi) на отрезке [0;0.6] с шагом изменения аргумента h=0.2:
xi |
y(xi) |
0 |
-1 |
0.2 |
-3.876 |
0.4 |
-3.185 |
0.6 |
-2.146 |
4.Численные значения ОДУ методом Эйлера
Вычислим
в Mathcad значения численного
решение ОДУ методом Эйлера (
)
в точках отрезка [0;0.6] с шагом h=0.2:
xi |
|
0 |
-4 |
0.2 |
-4 |
0.4 |
-3.616 |
0.6 |
-2.3608 |
5. Значения погрешностей метода Эйлера
Вычислим в Mathcad значения погрешностей для
:
xi |
Ei |
0 |
0 |
0.2 |
0.12403 |
0.4 |
0.43129 |
0.6 |
0.21483 |
6. Численные значения ОДУ методом Рунге-Кутта 4-го порядка с точностью 10-4
Вычислим в программе значения численного решения ОДУ с точностью 10^-4 , и получим решение в точках отрезка [0;0.6]с шагом h=0.2 методом Рунге-Кутта 4-го порядка:
import math
def f(x, y):
return(3*x**2*y**2)
def r(x0, y0, h, m):
for j in range(1, m+1):
k1 = f(x0, y0)
k2 = f(x0 + h / 2, y0 + h * k1 / 2)
k3 = f(x0 + h / 2, y0 + h * k2 / 2)
k4 = f(x0 + h, y0 + h * k3)
y0 = y0 + (h / 6) * (k1 + 2 * k2 + 2 * k3 + k4)
x0 = x0 + h
return y0
def resh(x0, y0, h0, b, E):
n = int((b - x0) / h0 + 1)
for i in range(1, n+1):
h = h0
m = 1
y = r(x0, y0, h, m)
while True:
y1 = y
h = h / 2
x = x0
y = y0
m = 2 * m
y = r(x0, y0, h, m)
if abs(y - y1) <= E:
break
x0 = x0 + h0
y0 = y
print(f"x0 = {x0:.8f}; y0 = {y0:.8f}; h = {h:.8f}; m = {m}")
def main():
while True:
x0 = float(input("Введите значение x0:\n"))
y0 = float(input("Введите значение y0:\n"))
h0 = float(input("Введите шаг h0:\n"))
b = float(input("Введите конец отрезка b:\n"))
E = float(input("Введите погрешность E:\n"))
resh(x0, y0, h0, b, E)
choice = input("Для повторения нажмите '1'\n")
if choice != '1':
break
if __name__ == "__main__":
main()
Результат работы кода:
xi |
|
0 |
-4 |
0.2 |
-3.87596859 |
0.4 |
-3.18471071 |
0.6 |
-2.14592464 |
Оптимальный шаг: h = 0.2
7.Значения погрешностей метода Рунге-Кутта 4-го порядка с точностью 10-4
Вычислим
значения погрешностей
,
i = 0, 1, …, n:
xi |
|
0 |
0 |
0.2 |
0.00024301975645668605 |
0.4 |
0.0012960283218674817 |
0.6 |
0.00106971378333931 |
8.Решение дифференциального уравнения ys(x) использованием функции математического пакета.
-
xi
ys(x)
0
-4
0.2
-3.875727
0.4
-3.183414
0.6
-2.14485
9.Иллюстрированные решения в одной системе координат
10.Выводы
В процессе выполнения лабораторной работы были получены численные значения ОДУ методами Эйлера и Рунге-Кутта 4 степени. Значения методов сошлись со значениями машинного расчёта, с друг с другом и с точным аналитическим решением в пределах погрешности.
xi |
Точное аналитическое значение |
Машинный расчёт |
Метод Эйлера |
Метод Рунге-Кутта 4 степени |
0 |
-4 |
-4 |
-4 |
-4 |
0.2 |
-3.87597 |
- 3.875727 |
-4 |
-3.87596859 |
0.4 |
- 3.18471 |
- 3.183414 |
-3.616 |
-3.18471071 |
0.6 |
- 2.14592 |
-2.14485 |
-2.3608 |
-2.14592464 |
По результатам видно, что с повышением степени метода повышается точность.
