Обыкновенные дифференциальные уравнения


Задание
1. Решить дифференциальное уравнение обыкновенные дифференциальные уравнения - student2.ru , обыкновенные дифференциальные уравнения - student2.ru , обыкновенные дифференциальные уравнения - student2.ru ,
обыкновенные дифференциальные уравнения - student2.ru , на отрезке обыкновенные дифференциальные уравнения - student2.ru

· аналитическим методом (решение обыкновенные дифференциальные уравнения - student2.ru )

· методом Эйлера с шагом обыкновенные дифференциальные уравнения - student2.ru ( обыкновенные дифференциальные уравнения - student2.ru ) .

· методом Рунге-Кутта обыкновенные дифференциальные уравнения - student2.ru -го порядка (программно)


2. Вычислить погрешность обыкновенные дифференциальные уравнения - student2.ru для обыкновенные дифференциальные уравнения - student2.ru ,

обыкновенные дифференциальные уравнения - student2.ru , обыкновенные дифференциальные уравнения - student2.ru , обыкновенные дифференциальные уравнения - student2.ru .

3. Вычислить погрешность обыкновенные дифференциальные уравнения - student2.ru , обыкновенные дифференциальные уравнения - student2.ru .
4. Дать графическую иллюстрацию решений.

Исследование задания
Аналитический способ решения данного уравнения – метод разделения переменных.
Запишем уравнение в виде обыкновенные дифференциальные уравнения - student2.ru и проинтегрируем с учётом начальных условий.
обыкновенные дифференциальные уравнения - student2.ru

Получаем обыкновенные дифференциальные уравнения - student2.ru , обыкновенные дифференциальные уравнения - student2.ru Из начальных условий следует обыкновенные дифференциальные уравнения - student2.ru , следовательно, аналитическое решение ОДУ имеет вид обыкновенные дифференциальные уравнения - student2.ru .

Решение уравнения методом Эйлера: обыкновенные дифференциальные уравнения - student2.ru , обыкновенные дифференциальные уравнения - student2.ru .

Для интегрирования дифференциального уравнения методом Рунге-Кутта 4-го порядка воспользуемся формулами:
обыкновенные дифференциальные уравнения - student2.ru , обыкновенные дифференциальные уравнения - student2.ru .
обыкновенные дифференциальные уравнения - student2.ru ,

обыкновенные дифференциальные уравнения - student2.ru ,

обыкновенные дифференциальные уравнения - student2.ru ,

обыкновенные дифференциальные уравнения - student2.ru .

Воспользуемся программными средствами для решения уравнения методом Эйлера.

Скриншот работы программы
обыкновенные дифференциальные уравнения - student2.ru

Исходный код программы

  Imports System.Math Public Class Form1   Function f(ByVal x As Single, ByVal y As Single) f = y * Exp(-2 * x) End Function Function F_toch(ByVal x As Single) Return Exp((1 / 2) - ((Exp(-2 * x)) / (2))) End Function Function vvod(ByVal T As TextBox) Return CSng(Val(T.Text)) End Function Sub vivod(ByVal x As Single, ByVal T As TextBox) T.Text = CStr(x) End Sub Sub vivodint(ByVal x As Integer, ByVal T As TextBox) T.Text = CStr(x) End Sub     Sub difur(ByVal x0 As Single, ByVal y0 As Single, ByVal b As Single, _ ByVal h0 As Single, ByRef L As ListBox) Dim h, y, ep As Single, z, z1, z2 As String Dim i, n As Integer n = (b - x0) / h0 z1 = Format(F_toch(x0), "0.0000000") + Space(3) z2 = Format(y, "0.000000") + Space(4) z = Format(x0, "0.00") + Space(6) + z1 L.Items.Add(z) For i = 1 To n h = h0 y = rung((x0), (y0), h)   x0 = x0 + h0 y0 = y ep = Abs(F_toch(x0) - y) If F_toch(x0) > 100 Then z1 = Format(F_toch(x0), "0.0000000") + Space(3) ElseIf F_toch(x0) >= 10 Then z1 = Format(F_toch(x0), "0.0000000") + Space(5) Else z1 = Format(F_toch(x0), "0.0000000") + Space(7) End If If y > 100 Then z2 = Format(y, "0.0000000") + Space(4) ElseIf y >= 10 Then z2 = Format(y, "0.0000000") + Space(6) Else z2 = Format(y, "0.0000000") + Space(8) End If z = Format(x0, "0.00") + Space(6) + z1 + Space(3) + z2 + Space(3) + Format(ep, "0.000000") L.Items.Add(z) Next End Sub Function rung(ByVal x As Single, ByVal y As Single, ByVal h As Single) Dim k1 As Single k1 = f(x, y)   y = y + h * k1 x = x + h   rung = y End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim y0, b, x0, h0 As Single   x0 = vvod(TextBox1) y0 = vvod(TextBox2) b = vvod(TextBox3)   h0 = vvod(TextBox4) difur(x0, y0, b, h0, ListBox1) End Sub   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub End Class  


Воспользуемся программными средствами для решения уравнения методом Рунге-Кутта 4-го порядка.

Скриншот работы программы
обыкновенные дифференциальные уравнения - student2.ru


Исходный код программы

Imports System.Math Public Class Form1   Function f(ByVal x As Single, ByVal y As Single) f = y * Exp(-2 * x) End Function   Function F_toch(ByVal x As Single) Return Exp((1 / 2) - ((Exp(-2 * x)) / (2))) End Function Function vvod(ByVal T As TextBox) Return CSng(Val(T.Text)) End Function Sub vivod(ByVal x As Single, ByVal T As TextBox) T.Text = CStr(x) End Sub Sub vivodint(ByVal x As Integer, ByVal T As TextBox) T.Text = CStr(x) End Sub Function rung(ByVal x As Single, ByVal y As Single, ByVal h As Single, ByVal m As Integer) Dim k1, k2, k3, k4 As Single Dim j As Integer For j = 1 To m k1 = f(x, y) k2 = f(x + h / 2, y + h * k1 / 2) k3 = f(x + h / 2, y + h * k2 / 2) k4 = f(x + h, y + h * k3) y = y + h * (k1 + 2 * k2 + 2 * k3 + k4) / 6 x = x + h Next j rung = y End Function Sub difur(ByVal x0 As Single, ByVal y0 As Single, ByVal b As Single, ByVal eps As Single, _ ByVal h0 As Single, ByRef L As ListBox) Dim h, x, y, y1 As Single, z, z1, z2 As String Dim i, m, n As Integer n = (b - x0) / h0   For i = 1 To n h = h0 m = 1 y = rung((x0), (y0), (h), (m)) Do y1 = y : h = h / 2 x = x0 : y = y0 : m = 2 * m y = rung((x), (y), (h), (m)) Loop Until Abs(y - y1) < eps x0 = x0 + h0 y0 = y   If F_toch(x0) > 100 Then z1 = Format(F_toch(x0), "0.0000000") + Space(3) ElseIf F_toch(x0) >= 10 Then z1 = Format(F_toch(x0), "0.0000000") + Space(5) Else z1 = Format(F_toch(x0), "0.0000000") + Space(7) End If If y > 100 Then z2 = Format(y, "0.0000000") + Space(4) ElseIf y >= 10 Then z2 = Format(y, "0.0000000") + Space(6) Else z2 = Format(y, "0.0000000") + Space(8) End If z = Format(x0, "0.00") + Space(6) + z1 + Space(5) + z2 + Space(3) L.Items.Add(z) Next End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim y0, b, x0, eps, h0 As Single   x0 = vvod(TextBox1) y0 = vvod(TextBox4) b = vvod(TextBox2) eps = vvod(TextBox3) h0 = vvod(TextBox5) difur(x0, y0, b, eps, h0, ListBox1) End Sub   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub End Class  

Таблица решений уравнения

обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru
обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru        
обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru
обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru
обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru
обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru
обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru
обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru
обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru
обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru
обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru
обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru


Графические иллюстрации решений

обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru обыкновенные дифференциальные уравнения - student2.ru

6. АЛГОРИТМЫ РЕШЕНИЯ ЗАДАЧИ ОДНОМЕРНОЙ ОПТИМИЗАЦИИ

Задание
1.Решить задачу оптимизации функции обыкновенные дифференциальные уравнения - student2.ru c точностью обыкновенные дифференциальные уравнения - student2.ru методом золотого сечения.
2. Вычислить число итераций, необходимых, чтобы локализовать точку минимума с точностью обыкновенные дифференциальные уравнения - student2.ru .
3. Методом дихотомии решить задачу оптимизации (три итерации).
4. Определить длину конечного отрезка, содержащего точку минимума.
5. Вычислить теоретическую точность оптимизации. Сравнить с результатом, полученным в п. 4.
6. Проиллюстрировать графическое решение задачи.

Исследование задания

График функции обыкновенные дифференциальные уравнения - student2.ru

1) Определим отрезок унимодальности функции обыкновенные дифференциальные уравнения - student2.ru . Практический критерий унимодальности функции требует непрерывности функции и выполнение условия обыкновенные дифференциальные уравнения - student2.ru при обыкновенные дифференциальные уравнения - student2.ru или неубывания обыкновенные дифференциальные уравнения - student2.ru .
Вторая производная обыкновенные дифференциальные уравнения - student2.ru при обыкновенные дифференциальные уравнения - student2.ru , т.е. функция обыкновенные дифференциальные уравнения - student2.ru - унимодальная на отрезке обыкновенные дифференциальные уравнения - student2.ru .

Отрезок обыкновенные дифференциальные уравнения - student2.ru - начальный отрезок неопределённости.

2) Теоретическая величина погрешности определяется соотношениями:
обыкновенные дифференциальные уравнения - student2.ru – длина конечного отрезка после обыкновенные дифференциальные уравнения - student2.ru итераций для метода дихотомии, обыкновенные дифференциальные уравнения - student2.ru - длина начального отрезка.

Для метода золотого сечения длина конечного отрезка после обыкновенные дифференциальные уравнения - student2.ru итераций
обыкновенные дифференциальные уравнения - student2.ru .

Полагаем, что длина конечного отрезка неопределённости – мера погрешности.
3) Воспользуемся программными средствами для решения задачи оптимизации методом золотого сечения.


Скриншот работы программы
обыкновенные дифференциальные уравнения - student2.ru

Исходный код программы

Imports System.Math Public Class Form1 Function f(ByVal x As Single) f = Sqrt(x) + 2 + x ^ 2 End Function   Function vvod(ByVal T As TextBox) Return CSng(Val(T.Text)) End Function Sub vivod(ByVal x As Single, ByVal T As TextBox) T.Text = CStr(x) End Sub Sub vivodint(ByVal x As Integer, ByVal T As TextBox) T.Text = CStr(x) End Sub Sub gold(ByVal a As Single, ByVal b As Single, ByVal eps As Single, _ ByRef x As Single, ByRef n As Integer, ByRef L As ListBox) Dim k1, k2, x1, x2, f1, f2 As Single, z As String k1 = (3 - Sqrt(5)) / 2 k2 = (Sqrt(5) - 1) / 2 x1 = a + k1 * (b - a) x2 = a + k2 * (b - a) f1 = f(x1) f2 = f(x2) n = 0 Do Until (b - a) < eps / 2 n = n + 1 If n > 100 Then z = CStr(n) + Space(2) ElseIf n >= 10 Then z = CStr(n) + Space(4) Else z = CStr(n) + Space(6) End If z = z + Format(a, "0.00000") + Space(3) + Format(b, "0.00000") + Space(3) + Format(f(a), "0.00000") + Space(3) z = z + Format(f(b), "0.00000") + Space(5) + Format(b - a, "0.00000") L.Items.Add(z) If f1 < f2 Then b = x2 : x2 = x1 x1 = a + k1 * (b - a) f2 = f1 : f1 = f(x1) Else a = x1 : x1 = x2 : f1 = f2 x2 = a + k2 * (b - a) f2 = f(x2) End If Loop x = (a + b) / 2 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim a, b, x, eps As Single Dim n As Integer a = vvod(TextBox1) b = vvod(TextBox2) eps = vvod(TextBox3) gold(a, b, eps, x, n, ListBox1) vivodint(n, TextBox4) vivod(x, TextBox5) vivod(f(x), TextBox6)   End Sub   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub   End Class
обыкновенные дифференциальные уравнения - student2.ru , обыкновенные дифференциальные уравнения - student2.ru .

Определим число итераций обыкновенные дифференциальные уравнения - student2.ru , необходимых для локализации точки минимума с точностью обыкновенные дифференциальные уравнения - student2.ru из условия, что длина конечного отрезка неопределённости не превышает заданной точности.

обыкновенные дифференциальные уравнения - student2.ru .
𝑁≥ обыкновенные дифференциальные уравнения - student2.ru , обыкновенные дифференциальные уравнения - student2.ru .

При обыкновенные дифференциальные уравнения - student2.ru длина конечного отрезка равна обыкновенные дифференциальные уравнения - student2.ru .
Точность достигнута при обыкновенные дифференциальные уравнения - student2.ru , т.е. расчёт примерно совпадает с теоретической оценкой.

4) Воспользуемся программными средствами для решения задачи оптимизации методом дихотомии.

Скриншот работы программы

обыкновенные дифференциальные уравнения - student2.ru

Исходный код программы

Imports System.Math Public Class Form1 Function f(ByVal x As Single) f = Sqrt(x) + 2 + x ^ 2 End Function   Function vvod(ByVal T As TextBox) Return CSng(Val(T.Text)) End Function Sub vivod(ByVal x As Single, ByVal T As TextBox) T.Text = CStr(x) End Sub Sub vivodint(ByVal x As Integer, ByVal T As TextBox) T.Text = CStr(x) End Sub Sub dihot(ByVal a As Single, ByVal b As Single, ByVal eps As Single, _ ByRef x As Single, ByRef n As Integer, ByRef L As ListBox) Dim d, x1, x2, f1, f2 As Single, z As String d = eps / 10 n = 0 Do x1 = (a + b) / 2 - d x2 = (a + b) / 2 + d f1 = f(x1) f2 = f(x2) n = n + 1 If n > 100 Then z = CStr(n) + Space(2) ElseIf n >= 10 Then z = CStr(n) + Space(4) Else z = CStr(n) + Space(6) End If z = z + Format(a, "0.00000") + Space(3) + Format(b, "0.00000") + Space(3) + Format(f(a), "0.00000") + Space(3) z = z + Format(f(b), "0.00000") + Space(5) + Format(b - a, "0.00000") L.Items.Add(z) If f1 > f2 Then a = x1 Else b = x2 End If Loop Until (b - a) < eps / 2 x = (a + b) / 2 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim a, b, x, eps As Single Dim n As Integer a = vvod(TextBox1) b = vvod(TextBox2) eps = vvod(TextBox3) dihot(a, b, eps, x, n, ListBox1) vivodint(n, TextBox4) vivod(x, TextBox5) vivod(f(x), TextBox6)   End Sub   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub End Class  


При обыкновенные дифференциальные уравнения - student2.ru определим длину конечного отрезка неопределённости и сравним с расчётом.
обыкновенные дифференциальные уравнения - student2.ru . обыкновенные дифференциальные уравнения - student2.ru .

обыкновенные дифференциальные уравнения - student2.ru .

Расчётная длина обыкновенные дифференциальные уравнения - student2.ru . обыкновенные дифференциальные уравнения - student2.ru .
Как мы видим, теоретическая точность оптимизации почти в 2 раза больше расчётной точности.


Графическая иллюстрация процесса оптимизации.

обыкновенные дифференциальные уравнения - student2.ru

Наши рекомендации