Визуализация численных методов. Решение обыкновенных дифференциальных уравнений

Автор работы: Пользователь скрыл имя, 04 Ноября 2014 в 12:01, курсовая работа

Краткое описание

Целью работы является решение задачи Коши для дифференциального уравнения 1–го порядка.
Задачи данной работы:
1) Изучение численных методов решения дифференциальных уравнений
2) Самостоятельное нахождение первой точки интегральной кривой указанными методами
3) Написание программы для построения интегральной кривой на языке программирования Visual Basic
4) Проверка решения в среде Mathcad

Содержание

Введение…………………………………………………………………………. 3
1. Постановка задачи............................................................................................4
2. Описание используемых методов…………………………………………...5
2.1. Метод Эйлера модифицированного…………………………………….5
2.2. Метод Рунге – Кутты ……………………………………………………6
2.3. Нахождение первой точки методом Эйлера модифицированного…...7
2.4. Нахождение первой точки методом Рунге – Кутты ………………….. 8-9
3. Блок – схемы………………………………………………………………….10
3.1. Подпрограмма метода Эйлера модифицированного…………………10
3.2. Подпрограмма метода Рунге – Кутта…………………………………..10
3.3. Подпрограмма общего решения………………………………………..11
3.4. Подпрограмма функции……………………………………………… ..11
3.5. Основная программа……………………………………………………12
4. Формы разработки…………………………………………………………...13
5. Листинг программы………………………………………………………14 - 15
6. Проверка в Mathcad………………………………………………………16 - 18
Заключение……………………………………………………………………19
Список используемых источников……………………………………………20

Вложенные файлы: 1 файл

Документ Microsoft Word.docx

— 223.66 Кб (Скачать файл)

Сибирский государственный университет телекоммуникаций и информатики

Уральский технический институт связи и информатики

Кафедра информационных систем и технологий

 

 

 

 

 

Курсовая работа

на тему:

«Визуализация численных методов. Решение обыкновенных дифференциальных уравнений»

Вариант 15

 

 

 

 

 

 

Выполнил: студент группы ИТЕ–21 Колесников Антон Алексеевич

Руководитель: доцент кафедры информационных систем и технологий Минина Елена Евгеньевна

 

 

 

 

 

Екатеринбург 2013

СОДЕРЖАНИЕ

 

Введение…………………………………………………………………………. 3

  1. Постановка задачи............................................................................................4
  2. Описание используемых методов…………………………………………...5
    1. Метод Эйлера модифицированного…………………………………….5
    2. Метод Рунге – Кутты ……………………………………………………6
    3. Нахождение первой точки методом Эйлера модифицированного…...7
    4. Нахождение первой точки методом Рунге – Кутты ………………….. 8-9
  3. Блок – схемы………………………………………………………………….10
    1. Подпрограмма  метода Эйлера модифицированного…………………10
    2. Подпрограмма метода Рунге – Кутта…………………………………..10
    3. Подпрограмма общего решения………………………………………..11
    4. Подпрограмма функции……………………………………………… ..11
    5. Основная программа……………………………………………………12
  4. Формы разработки…………………………………………………………...13
  5. Листинг программы………………………………………………………14 - 15
  6. Проверка в Mathcad………………………………………………………16 - 18

Заключение……………………………………………………………………19

Список используемых источников……………………………………………20

 

 

 

 

 

 

 

 

 

 

ВВЕДЕНИЕ

При решении задач математики, физики, химии и других наук часто пользуются уравнениями, связывающими независимую переменную, искомую функцию и ее производные. Такие уравнения называются дифференциальными.

Дифференциальные уравнения играют важную роль во многих отраслях науки и техники.

Лишь немногие из дифференциальных уравнений удается решить без применения вычислительной техники.  Вследствие этого численные методы являются необходимыми составляющими в практике инженерных расчётов.

 

Целью моей работы является решение задачи Коши для дифференциального уравнения 1–го порядка.

Задачи данной работы:

  1. Изучение численных методов решения дифференциальных уравнений
  2. Самостоятельное нахождение первой точки интегральной кривой указанными методами
  3. Написание программы для построения интегральной кривой на языке программирования Visual Basic
  4. Проверка решения в среде Mathcad

 

 

 

 

 

 

 

 

 

 

 

 

 

    1. Постановка задачи

Пусть дано дифференциальное уравнение  и начальное условие  . Требуется найти функцию , удовлетворяющую как указанному уравнению, так и начальному условию.

Численное решение задачи Коши сводится к табулированию искомой функции.

X

Y(1)

Y(2)

YT

X0

Y0(1)

Y0(2)

Y(X0)

X1

Y1(1)

Y1(2)

Y(X1)

Xk

Yk(1)

Yk(2)

Y(Xk)


 

 

Y(1) , Y(2)  - решения заданными методами

YT  - точное решение дифференциального уравнения

 

Дано:

ДУ первого порядка 

Начальное условие 

Шаг      

Отрезок     

Общее решение  

Метод решения   Рунге – Кутт, Эйлер модифицированный

Найти: значения функции на промежутке от x0 до xk с шагом h и начальным условием

 

 

 

 

 

 

 

    1. Описание используемых методов

2.1 Метод Эйлера модифицированного

Пусть дано ДУ первого порядка

с начальным условием

Выберем шаг и введем обозначения:

 

 

 

 – узлы  сетки

 – значение  функции в узлах

При использовании модифицированного метода Эйлера шаг делиться на два отрезка.

 

Этапы решения:

  1. Обозначим точки: А(xi,yi), C(xi+h/2 ,yi  h/2*f(xi,yi)) и B(xi+1,yi+1)
  2. Через точку A проведем прямую под углом ,

  

  1. На этой прямой найдем точку C(xi+h/2, yi+h/2*f(xi,yi))
  2. Через точку C проведем прямую под углом , где
  3. Через точку A проведем прямую параллельную последней прямой.
  4. Найдем точку B(xi+1, yx+1). Будем считать B(xi+1 , yi+1) решением ДУ при x=xi

 

 

 

 

 

2.2 Метод Рунге-Кутта

 

Пусть дано ДУ первого порядка

с начальным условием

Выберем шаг и введем обозначения:

 

 

 

 – узлы  сетки

 – значение  функции в узлах

 

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

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

 

Где    

 

Числа на каждом шаге вычисляются отдельно по формулам:

 

 

 

 

 

 

 

2.3 Нахождение первой точки методом Эйлера модифицированного

1) На миллиметровке построим координатную плоскость OXY.

2) Обозначим точку A(0,1)

Проведем через точку A прямую под углом .

 

Тангенс угла наклона функции в точке A(0,1) равен производной функции в этой точке

 

 найдем из дифференциального  уравнения 

 

 

Подставляя и находим

 

 

 

3) На этой прямой найдем точку C

 

 

Обозначим на координатной оси точку C (0.05, 1)

Проведем через точку C прямую под углом

 

 

Через точку A(0,1) проведем прямую параллельную последней прямой

4) Найдем точку B(x2,y2)

 

 

Обозначим на координатной оси точку B(0.1, 0.995)

 

 

2.4 Нахождение  первой точки методом Рунге – Кутты

1) На миллиметровке построим  координатную плоскость OXY

2) Отметим точку A(x0,y0)

x0 = 0

y0 = 1

Проведем прямую l0 под углом  через точку A

 

 

 

3) На прямой l0 отметим точку С(x1,y1)

x1 = x0 + h/4 = 0.025

y1 = y0 + (h/4)*f(x0,y0) = 1

Через точку C проведем прямую l1 под углом

 

Проведем из точки A прямую, параллельную прямой l1

4) Отметим на ней точку  D(x2,y2)

x2 = x0 + h/2 = 0.05

y2 = y0 + (h/2)*f(x1,y1) = 0.99875

Из точки D проведем прямую l2 под углом  

 

 

 

Проведем из точки A прямую, параллельную l2

5)Отметим на ней точку  E(x3,y3)

x3 = x0 + 3h/4 = 0.075

y3 = y0 + f(x2,y2) = 0.99625

 

Через точку E проведем прямую l3 под углом

Из точки A построим прямую, параллельную l3. Она пересечется с прямой x = x0 + h в точке B(x4,y4), это точка и будет решение дифференциального уравнения при x1 = x0 + h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Блок схемы

 

2.1 Подпрограмма метода Эйлера модифицированного


 

 

 

 

 

 

 

 

 

 

2.2 Подпрограмма метода Рунге - Кутты


 

 

 

 

 

 

 

 

2.3 Подпрограмма общего решения


 

 

 

 

 

 

 

 

 

 

2.4 Подпрограмма функции


 

 

 

 

 

 

 

 

 

 

 

2.5 Основная программа

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Форма разработки

 





 

 

 

4. Листинг программы

 

Public Class Form1

    Dim x(), r2(), r4(), t() As Single

    Public x0, y0, h, xk As Single

    Public n As Integer

 

    Function f(ByVal a, ByVal b) As Single

        f = a * Math.Exp(-a ^ 2) - 2 * a * b

    End Function

 

    Function tf(ByVal a) As Single

        tf = Math.Exp(-a ^ 2) * (1 + a ^ 2 / 2)

    End Function

 

    Private Sub Runge2()

 

        ReDim x(n + 1)

        ReDim r2(n + 1)

        r2(0) = y0

        For i = 0 To n

            x(i) = x0 + i * h

            r2(i + 1) = r2(i) + h * f(x(i) + h / 2, r2(i) + (h / 2) * f(x(i), r2(i)))

        Next i

    End Sub

 

    Private Sub Runge4()

        Dim k1, k2, k3, k4, k As Single

        ReDim x(n + 1)

        ReDim r4(n + 1)

        r4(0) = y0

        For i = 0 To n

            x(i) = x0 + i * h

            k1 = h * f(x(i), r4(i))

            k2 = h * f(x(i) + h / 2, r4(i) + k1 / 2)

            k3 = h * f(x(i) + h / 2, r4(i) + k2 / 2)

            k4 = h * f(x(i) + h, r4(i) + k3)

            k = (k1 + 2 * k2 + 2 * k3 + k4) / 6

            r4(i + 1) = r4(i) + k

        Next i

    End Sub

 

    Private Sub Total()

        ReDim x(n + 1)

        ReDim t(n + 1)

        For i = 0 To n

            x(i) = x0 + i * h

            t(i) = tf(x(i))

        Next i

    End Sub

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

 

        x0 = Val(TextBox1.Text)

        y0 = Val(TextBox2.Text)

        h = Val(TextBox3.Text)

        xk = Val(TextBox4.Text)

 

        n = Math.Round((xk - x0) / h)

 

        DataGridView1.RowHeadersWidth = 25

        DataGridView1.ColumnCount = 4

        DataGridView1.RowCount = n + 2

 

        DataGridView1.Item(0, 0).Value = "x"

        DataGridView1.Item(1, 0).Value = "общее решение"

        DataGridView1.Item(2, 0).Value = "рунге - кутта 2"

        DataGridView1.Item(3, 0).Value = "рунге- кутта 4"

        Runge2()

        Runge4()

        Total()

 

 

        For i = 0 To n

            DataGridView1.Item(0, i + 1).Value = x(i)

            DataGridView1.Item(1, i + 1).Value = Math.Round(t(i), 5)

            DataGridView1.Item(2, i + 1).Value = Math.Round(r2(i), 5)

            DataGridView1.Item(3, i + 1).Value = Math.Round(r4(i), 5)

        Next i

 

 

        For i = 0 To n - 1

            Chart1.Series(0).Points.AddXY(x(i), t(i))

            Chart1.Series(0).Points.AddXY(x(i + 1), t(i + 1))

            Chart1.Series(1).Points.AddXY(x(i), r2(i))

            Chart1.Series(1).Points.AddXY(x(i + 1), r2(i + 1))

            Chart1.Series(2).Points.AddXY(x(i), r4(i))

            Chart1.Series(2).Points.AddXY(x(i + 1), r4(i + 1))

        Next i

 

 

    End Sub

 

End Class

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5. Проверка в MathCad

 

 

 

 

 

 

 

 

 

 

 

 

 

ЗАКЛЮЧЕНИЕ

В данной курсовой работе рассматривалось решение обыкновенного дифференциального первого порядка двумя методами: Эйлера модифицированного и Рунге – Кутта. Я произвел самостоятельное вычисление первой точки и сделал построение на миллиметровке. Далее написал программу на Visual Basic, которая выводит таблицу значений и графики методов на заданном промежутке и шаге. После чего проверил решение в среде MathCAD и убедился в правильной работе программы.

 

Сравнивая полученные значения, я прихожу к выводу, что метод Эйлера модифицированного и Рунге – Кутта дают примерно одинаковые результаты. В этом можно убедиться, посмотрев на полученные графики – они практически совпадают. Но все – же если требуется повышенная точность вычислений необходимо пользоваться методом Рунге – Кутта, так - как он дает меньшую погрешность.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список используемых источников

 

1. Конспект лекций по высшей математике: полный курс / Д. Т. Письменный. — 4-е изд. — М.: Айрис-пресс, 2006. — 608 с:

 


Информация о работе Визуализация численных методов. Решение обыкновенных дифференциальных уравнений