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

Автор: Пользователь скрыл имя, 15 Сентября 2011 в 21:33, курсовая работа

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

Целью данной курсовой работы является решение дифференциального уравнения двумя численными методами: методом Эйлера и методом Рунге-Кутта 4 порядка точности.

Для достижения цели я поставил перед собой следующие задачи:

Написать программу для решения данного дифференциального уравнения двумя численными методами в программе Visual Basic.
Проверить решение с помощью приложения MathCad.
Сравнить полученные разными методами результаты с общим решением.

Оглавление

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

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

2. Описание методов решения…………………………………………..5

2. 1. Суть задачи………………………………………………………….5
2. 2. Геометрический смысл задачи…………………………………….5

2. 3. Численные методы решения задачи Коши……………………….6

2. 4. Метод Эйлера……………………………………………………….9
2. 5. Метод Эйлера модифицированный……………………………….9
2. 6. Метод Рунге-Кутта 4-го порядка………………………………….10
2. 7. Решение поставленной задачи методами Эйлера и Рунге-Кутта…………………………………………………………….12

2. 7. 1. Метод Эйлера……………………………………………………12

2. 7. 2. Метод Рунге-Кутта……………………………13

3. Алгоритм решения задачи…………………………………………...16

3. 1. Алгоритмы подпрограмм.………………………………………....16

3. 1. 1. Подпрограмма метода Эйлера………………………………….16

3. 1. 2 Подпрограмма метода Эйлера модифицированного…………..16

3. 1. 3. Подпрограмма общего решения и поиска максимальных значений x и y……………………………………………………………………17

3. 2. Алгоритм функции…………………………………………………17

3. 3. Алгоритм программы………………………………………………19

4. Форма программы…………………………………………………….20

5. Листинг программы…………………………………………………..21

6. Решение задачи в MathCad…………………………………………..23

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

Файлы: 1 файл

Курсовая (2).doc

— 327.50 Кб (Скачать)

      3. 1. 3. Подпрограмма общего решения 

        
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

      3. 2. Алгоритм функции 

        
 

          

 

       

       3. 3. Алгоритм программы

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

       4. Форма программы. 
 

 

 
 

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

       Dim x(), e(), em(), o() As Single

       Private i, n As Integer

       Private x0, xk, y0, h, miny, maxy, minx, maxx As Single

       Function f(a, b) As Single

       f = (b + 2) / (a + 1)

       End Function

       Private Sub Eiler()

       ReDim x(n + 1)

       ReDim e(n + 1)

       e(0) = y0

       For i = 0 To n

       x(i) = Round(x0 + (i * h), 3)

       e(i + 1) = Round(e(i) + h * f(x(i), e(i)), 3)

       Next i

       End Sub

       Private Sub RungeKutta()

       ReDim x(n + 1)

       ReDim em(n + 1)

       em(0) = y0

       For i = 0 To n

       x(i) = Round(x0 + i * h, 3)

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

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

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

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

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

       em(i + 1) = Round(em(i) + k, 3)

       Next i

       End Sub

       Private Sub Obhee()

       ReDim x(n + 1)

       ReDim o(n + 1)

       maxy = y0

       miny = y0

       maxx = x0

       minx = x0

       For i = 0 To n

       x(i) = Round(x0 + i * h, 3)

          c = (y0 + 2) / (x0 + 1)

       o(i) = Round((x(i) + 1) * c - 2, 3)

       Next i

       End Sub

       Private Sub Command1_Click()

       x0 = Val(Text1.Text)

       y0 = Val(Text2.Text)

       xk = Val(Text3.Text)

       h = Val(Text4.Text)

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

       MSFlexGrid1.Cols = 4

       MSFlexGrid1.Rows = n + 2

       MSFlexGrid1.TextMatrix(0, 0) = "x"

       MSFlexGrid1.TextMatrix(0, 1) = "Общее рещение"

       MSFlexGrid1.TextMatrix(0, 2) = "эйлер"

       MSFlexGrid1.TextMatrix(0, 3) = "Рунге-Кутт" 

       Eiler

       RungeKutta

       Obhee

       For i = 0 To n

       MSFlexGrid1.TextMatrix(i + 1, 0) = Str(x(i))

       MSFlexGrid1.TextMatrix(i + 1, 1) = Str(o(i))

       MSFlexGrid1.TextMatrix(i + 1, 2) = Str(e(i))

       MSFlexGrid1.TextMatrix(i + 1, 3) = Str(em(i))

       Next i

       minx = x(0)

       maxx = x(n)

       miny = o(0)

       maxy = o(n)

       If e(n) > o(n) Then maxy = e(n)

       If em(n) > o(n) Then maxy = em(n)

       If e(n) > em(n) Then maxy = e(n)

       Label10.Caption = Str(miny)

       Label11.Caption = Str(maxy)

       Label8.Caption = Str(minx)

       Label12.Caption = Str(maxx)

       Picture1.Cls

       kx = (Picture1.Width - 1200) / (xk - x0)

       ky = (Picture1.Height - 1000) / (maxy - miny)

       For i = 0 To n - 1

       z1 = Round(720 + (x(i) - x0) * kx)

       z2 = Round(5400 - (e(i) - miny) * ky)

       z3 = Round(720 + (x(i + 1) - x0) * kx)

       z4 = Round(5400 - (e(i + 1) - miny) * ky)

       Picture1.Line (z1, z2)-(z3, z4), RGB(0, 0, 9999)

       Next i

       For i = 0 To n - 1

       z1 = Round(720 + (x(i) - x0) * kx)

       z2 = Round(5400 - (em(i) - miny) * ky)

       z3 = Round(720 + (x(i + 1) - x0) * kx)

       z4 = Round(5400 - (em(i + 1) - miny) * ky)

       Picture1.Line (z1, z2)-(z3, z4), RGB(0, 9999, 0)

       Next i

       For i = 0 To n - 1

       z1 = Round(720 + (x(i) - x0) * kx)

       z2 = Round(5400 - (o(i) - miny) * ky)

       z3 = Round(720 + (x(i + 1) - x0) * kx)

       z4 = Round(5400 - (o(i + 1) - miny) * ky)

       Picture1.Line (z1, z2)-(z3, z4), RGB(9999, 0, 0)

       Next i

       End Sub 
 
 

6. Решение задачи  в MathCad. 

 

       Метод Эйлера 
 

 

Метод Эйлера IV порядка точности (Метод Рунге-Кутта)

 
 
 
 
 
 

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

 

 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

       Заключение 

При расчете  уравнения ,двумя методами (Эйлера и Рунге-Кутта), получил значения сходные с общим, хотя метод Рунге-Кутта является наиболее точным. Это совпадение обуславливается маленьким шагом и небольшим диапазоном конечных значений. 

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

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