Добавил:
Если чем-то мне удалось вам помочь, то благодарность принимаю на эту карту: 2200 2460 1776 0607 Для защищенки 5 сем: https://t.me/+h5cc9QNQe19kODVi Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лаба5

.docx
Скачиваний:
16
Добавлен:
18.11.2023
Размер:
47.71 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

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

Лабораторная работа №5

«Методы решения обыкновенных дифференциальных уравнений»

Выполнил: ---------------------------------------------

Проверил:

Москва, 2023 г.

Индивидуальное задание к работе

Уравнение

a

8

y' = (x – 1)2 y2

0

-1

0.5

0

5

где – дифференциальное уравнение

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

, – начальные условия

– шаг интегрирования

Выполнение задания:

Решение ОДУ аналитическим методом

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

Вычислим значения полученного решения y(xi) на отрезке [0;5] с шагом изменения аргумента h=0.5:

xi

y(xi)

0

0

0.5

0.5906

1

1

1.5

1.68

2

3.25

2.5

11.94

3

-10.14

3.5

-3.956

4

-2.58

4.5

-1.98

5

-1.64

Решение ОДУ методом Эйлера

Вычислим значение численного решение ОДУ методом Эйлера в точках отрезка [1;2] с шагом h=0.2. Общая формула для определения очередного значения функции по методу Эйлера , где

x₀ = 0, y₀ = -1 (начальные условия)

- x₁ = 1.2, y₁ = y₀ + h*f(x₀, y₀) = 1 + 0.2*(1^2)/1 = 1.2

- x₂ = 1.4, y₂ = y₁ + h*f(x₁, y₁) = 1.2 + 0.2*(1.2^2)/1.2

- x₃ = 1.6, y₃ = y₂ + h*f(x₂, y₂) = 1.44 + 0.2*(1.44^2)/1.6

- x₄ = 1.8, y₄ = y₃ + h*f(x₃, y₃) = 1.698 + 0.2*(1.698^2)/1.8

- x₅ = 2.0, y₅ =y₄+ h*f(x₄, y₄) = 2.01 + 0.2*(2.01^2)/2

xi

y(xi)

1

1

1.2

1.222

1.4

1.507

1.6

1.8868

1.8

2.4259

2.0

3.258

xi

1

1

1.2

1.2

1.4

1.44

1.6

1.736

1.8

2.113

2.0

2.609


Вычислим значение погрешностей для

xi

Ei

1

0

1.2

0.0222

1.4

0.067

1.6

0.1508

1.8

0.3129

2.0

0.649

Решение ОДУ методом Рунге-Кутта 4-го порядка

Вычислим в программе значения численного решения ОДУ с точностью 10-4, и получим решение в точках отрезка [1;2]с шагом h=0.2 ( ) методом Рунге-Кутта 4-го порядка, используя формулы:

где

xi

y(xi)

1

1

1.2

1.222

1.4

1.507

1.6

1.8868

1.8

2.4259

2.0

3.258

xi

1

1

1.2

1.222957

1.4

1.511

1.6

1.886795

1.8

2.425903

2.0

3.258821


Вычислим в сценарии значения погрешностей

xi

1

1

1.2

0

1.4

0.004

1.6

0.000

1.8

0.000

2.0

0.000

Сделаем сводку решений ОДУ всеми методами в одну таблицу.

xi

y(xi)

Ei

1

1

1

0

1

1

1.2

1.222

1.2

0.0222

1.22

0

1.4

1.507

1.44

0.067

1.511

0.004

1.6

1.8868

1.736

0.1508

1.886795

0.000

1.8

2.4259

2.113

0.3129

2.425903

0.000

2.0

3.258

2.609

0.649

3.258821

0.000

Решение ОДУ с помощью языка программирования C++

#include <iostream>

#include <vector>

#include <cmath>

double f(double x, double y) {

return pow((x - 1), 2) * pow(y, 2);

}

std::vector<std::pair<double, double>> Euler(double x0, double y0, double h, double a, double b) {

double x = x0;

double y = y0;

std::vector<std::pair<double, double>> result = { {x, y} };

while (x < b) {

double y_new = y + h * f(x, y);

x += h;

y = y_new;

result.push_back({ x, y });

}

return result;

}

int main() {

double x[] = { 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5 };

double y[11];

for (int i = 0; i < 11; i++) {

y[i] = -1 / (log(fabs(x[i])) - 1);

}

for (int i = 0; i < 11; i++) {

std::cout << "x = " << x[i] << ", y = " << y[i] << std::endl;

}

std::vector<std::pair<double, double>> result = Euler(0, -1, 0.5, 0, 5);

for (auto& p : result) {

std::cout << "x = " << p.first << ", y = " << p.second << std::endl;

}

return 0;

}

Вывод

Выполняя эту лабораторную работу, мы изучили методы решения обыкновенных дифференциальных уравнений и рассчитали погрешности. При выполнении ручного расчета ОДУ результаты совпали с машинным вычислением.

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