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

Автор: Пользователь скрыл имя, 22 Ноября 2011 в 19:17, курсовая работа

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

В ходе выполнения курсовой работы предполагается решение дифференциального уравнения с помощью численных методов:
метода Эйлера или метода Рунге-Кутта 1 порядка точности;
метода Рунге-Кутта 4 порядка точности.
Если искомая функция зависит от одной переменной, то дифференциальное уравнение называют обыкновенным; в противном случае – дифференциальное уравнение в частных производных. В данной курсовой работе рассматриваются методы решения обыкновенных дифференциальных уравнений.

Оглавление

Введение 3
1. Постановка задачи и математическая модель 4
2. Описание численных методов (применительно к конкретной задаче) 5
2.1 Численные методы решения задачи Коши 6
2.2 Метод Эйлера 7
2.3 Метод Рунге – Кутта 4-го порядка 9
3. Решение поставленной задачи методами Эйлера и Рунге-Кутта 4 порядка 12
3.1 Решение методом Эйлера 12
3.2 Решение методом Рунге-Кутта 13
4. Блок-схемы программы и основных подпрограмм 14
4.1 Алгоритм функции 14
4.2 Подпрограмма метода Эйлера 14
4.3 Подпрограмма метода Рунге-Кутта 4 порядка 15
4.4 Подпрограмма общего решения 16
4.5 Блок-схема программы 17
5. Листинг программы на языке VisualBasic 21
6. Формы проекта 25
7. Решение задачи в Mahtcad 27
Заключение 28

Файлы: 1 файл

Умнова М.А. new version №2.docx

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

Рисунок 13 - Блок схема программы

5. Листинг программы на языке VisualBasic

 
Rem описание переменных

Dim x() As Single

Dim y() As Single

Dim y1() As Single

Dim y2() As Single

Private y0 As Single

Private x0 As Single

Private xk As Single 

Rem Описание функции, график которой необходимо построить

Function f(l As Single, q As Single) As Single

  f = (q * (Log(q) - Log(l))) / l

End Function

Private Sub Command1_Click() 

Rem ввод данных

x0 = Val(Text1.Text)

xk = Val(Text2.Text)

y0 = Val(Text4.Text)

h = Val(Text3.Text) 

Rem Расчитывание количества отрезков табуляции

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

Rem переопределение динамического массив

ReDim x(n + 1), y(n + 1)

ReDim x(n + 1), y1(n + 1)

ReDim x(n + 1), y2(n + 1)

y(0) = y0

y1(0) = y0

y2(0) = y0 

Rem Расчет количества строк в таблице

MSFlexGrid1.Rows = n + 2 

Rem подписи заголовков таблицы

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

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

MSFlexGrid1.TextMatrix(0, 2) = "рунге-кутт 4 порядка"

MSFlexGrid1.TextMatrix(0, 3) = "общее" 

Rem Эйлер

For i = 0 To n

  x(i) = x0 + i * h

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

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

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

Next i 

Rem Рунге-Кутте 4 порядка

For i = 0 To n

  x(i) = x0 + i * h

  K1 = h * f(x(i), y1(i))

  K2 = h * f(x(i) + h / 2, y1(i) + K1 / 2)

  K3 = h * f(x(i) + h / 2, y1(i) + K2 / 2)

  K4 = h * f(x(i) + h, y1(i) + K3)

  K = ((K1 + 2 * K2 + 2 * K3 + K4) / 6)

  y1(i + 1) = Round((y1(i) + K), 3)

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

Next i 

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

c = (Log(y0 / x0) - 1) / x0

For i = 0 To n

  x(i) = x0 + i * h

  y2(i) = Round(x(i) * Exp(1 + c * x(i)), 4)

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

Next i 

Rem поиск экстремумов

Max = y0

Min = y0

For i = 0 To n

  If y(i) > Max Then Max = y(i)

  If y(i) < Min Then Min = y(i)

  If y1(i) > Max Then Max = y1(i)

  If y1(i) < Min Then Min = y1(i)

  If y2(i) > Max Then Max = y2(i)

  If y2(i) < Min Then Min = y2(i)

Next i 

Rem Запись значений экстремумов на шаблон графика

Label6.Caption = Str(x0)

Label7.Caption = Str(xk)

Label4.Caption = Str(Min)

Label5.Caption = Str(Max) 

Rem очистка картинки

Picture1.Cls 

Rem расчет коэффициентов масштабирования

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

ky = (Picture1.Height - 1320) / (Max - Min) 

Rem расчет экранных координат и построение грфика функции

Rem Эйлер

For i = 0 To n - 1

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

  z2 = Round(5400 - (y(i) - Min) * ky)

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

  z6 = Round(5400 - (y(i + 1) - Min) * ky)

  Picture1.Line (z1, z2)-(z5, z6), vbGreen

Next i 

Rem Рунгк-Кутте 4 порядка

For i = 0 To n - 1

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

  z3 = Round(5400 - (y1(i) - Min) * ky)

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

  z7 = Round(5400 - (y1(i + 1) - Min) * ky)

  Picture1.Line (z1, z3)-(z5, z7), vbRed

Next i 

Rem Рунгк-Кутте 4 порядка

For i = 0 To n - 1

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

  z4 = Round(5400 - (y2(i) - Min) * ky)

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

  z8 = Round(5400 - (y2(i + 1) - Min) * ky)

  Picture1.Line (z1, z4)-(z5, z8)

Next i

End Sub 

Private Sub Command2_Click()

End

End Sub 

6. Формы проекта

Форма разработки проекта. 

Рисунок 14 - Форма разработки проекта

 

Форма с  результатами работы проекта. 

Рисунок 15 - Форма с результатами работы проекта 
 
 
 
 
 
 
 
 
 

7. Решение задачи в Mahtcad

 

    

Рисунок 16 - Пример решения дифференциального уравнения методом Рунге-Кутта              4 порядка в среде MathCad.

Заключение

 

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

      С помощью данной работы были закреплены навыки работы в различных приложениях  WINDOWS, а именно Microsoft Word, MathCad и VisualBasic.

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

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