Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab5

.docx
Скачиваний:
0
Добавлен:
28.06.2026
Размер:
237.38 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации

Ордена Трудового Красного Знамени Федеральное государственное бюджетное образовательное учреждение высшего образования «Московский технический университет связи и информатики» (МТУСИ)

Кафедра: Информатика

Дисциплина: Численные методы

Лабораторная работа №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

  1. Выбрать индивидуальное задание в табл. 4-1 для решения обыкновенных дифференциальных уравнений:

  1. дифференциальное уравнение ;

  2. интервал [a;b] , где ищется решение дифференциального уравнения;

  3. начальные условия x0, y0;

  4. шаг интегрирования h0.

  1. Найти аналитическое решение заданного дифференциального уравнения, полагая его точным.

  2. Создать в сценарии функцию для вычисления значений полученного решения на отрезке [a;b] с шагом h0.

  3. Создать в сценарии функцию для вычисления значений численное решение дифференциального уравнения методом Эйлера - в точках отрезка [a;b] с шагом h0

  4. Вычислить значения погрешностей для , ,.

  5. Написать и выполнить программу, реализующую программу решения дифференциального уравнения методом Рунге-Кутта 4-го порядка yрк(х) в точках отрезка [a;b] с шагом h0, обеспечив с использованием метода автоматического выбора шага, точность 10-4.

  6. Вычислить значения погрешностей для , .

  7. Найти решение дифференциального уравнения ys(x)использованием функции пакета Scilab ode.

  8. Проиллюстрировать решения в одной системе координат.

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

По результатам видно, что с повышением степени метода повышается точность.

Соседние файлы в предмете Численные методы