16236

Визуализация численных методов

Курсовая

Информатика, кибернетика и программирование

Курсовая работа Визуализация численных методов Cсодержание Содержание Введение 1. Постановка задачи и математическая модель 2. Описание используемых методов 3. Блоксхемы основных процедур 4. Виды формы проекта 5.Листинг программы на языке Visual Basic 6.Ре

Русский

2013-06-20

449.83 KB

3 чел.

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

Визуализация численных методов


Cсодержание

Содержание

Введение

1. Постановка задачи и математическая модель

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

3. Блок-схемы основных процедур

4. Виды формы проекта

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

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

Вывод


Введение

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

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

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


1. Постановка задачи и математическая модель

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

  

Дифференциальное уравнение

X0

Xk

h

Y0

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

y`+2*x*y=x*exp(-x2)

0

1

0,1

1

y=exp(-x2)*(C+x2/2)


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

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

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

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

.

Выберем шаг =0,1 и введём обозначения:

и , где =0,1,2…,

        -узлы сетки,

        -значение интегральной функции в узлах.

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

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

Для большего уменьшения погрешности используется метод Рунге-Кутта.

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

Выберем шаг =0,1 и введём обозначения:

и , где =0,1,2…,

      -узлы сетки,

      -значение интегральной функции в узлах.

     

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

, где

     ,

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

Метод Рунге-Кутта даёт погрешность меньше, чем методы Эйлера и Эйлера модифицированного.

 


3. Блок-схемы основных процедур 

3.1. Блок-схема основной процедуры


3.2. Блок-схема функции

4.Виды формы проекта

Исходный вид для ввода данных


Итоговый вид с решением и графиком


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

Dim X() As Single

Dim Y() As Single

Dim g() As Single

Dim t() As Single

Private n, i As Integer

Private xk, x0, kx, ky As Single

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

Private h, max, min, y0 As Single

Private Function f(a, b As Single) As Single

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

End Function

Private Sub EilerMod()

ReDim Y(n)

Y(0) = y0

For i = 0 To n - 1

Y(i + 1) = Y(i) + h * f(X(i) + h / 2, Y(i) + h / 2 * f(X(i), Y(i)))

Next i

End Sub

Private Sub RungeKutt()

ReDim g(n)

g(0) = y0

For i = 0 To n - 1

k1 = h * f(X(i), g(i))

k2 = h * f(X(i) + h / 2, g(i) + k1 / 2)

k3 = h * f(X(i) + h / 2, g(i) + k2 / 2)

k4 = h * f(X(i) + h, g(i) + k3)

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

g(i + 1) = g(i) + k

Next i

End Sub

Private Sub Obchee()

ReDim t(n)

For i = 0 To n

t(0) = y0

c = 1

t(i) = Exp(-X(i) ^ 2) * (c + (X(i) ^ 2) / 2)

Next i

End Sub

Private Sub Command1_Click()

x0 = Val(Text1.Text)

xk = Val(Text2.Text)

h = Val(Text3.Text)

y0 = Val(Text4.Text)

n = (xk - x0) / h

MSFlexGrid1.Rows = n + 4

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

MSFlexGrid1.TextMatrix(0, 1) = "Эйлер Модиф."

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

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

MSFlexGrid1.TextMatrix(1, 0) = Str(x0)

MSFlexGrid1.TextMatrix(0, 1) = Str(y0)

ReDim X(n)

For i = 0 To n

X(i) = x0 + h * i

Next i

EilerMod

RungeKutt

Obchee

For i = 0 To n

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

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

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

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

Next i

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 g(i) > max Then max = g(i)

If g(i) < min Then min = g(i)

If t(i) > max Then max = t(i)

If t(i) < min Then min = t(i)

Next i

Label7.Caption = Str(max)

Label8.Caption = Str(min)

Label9.Caption = Str(x0)

Label10.Caption = Str(xk)

kx = (6600 - 360) / (xk - x0)

ky = (5280 - 480) / (max - min)

Picture1.Cls

For i = 1 To n - 1

X1 = 840 + Round(kx * (X(i - 1) - x0))

X2 = 840 + Round(kx * (X(i) - x0))

Y1 = 5280 - Round(ky * (Y(i - 1) - min))

Y2 = 5280 - Round(ky * (Y(i) - min))

Picture1.Line (X1, Y1)-(X2, Y2), RGB(9999, 0, 0)

X1 = 840 + Round(kx * (X(i - 1) - x0))

X2 = 840 + Round(kx * (X(i) - x0))

Y1 = 5280 - Round(ky * (g(i - 1) - min))

Y2 = 5280 - Round(ky * (g(i) - min))

Picture1.Line (X1, Y1)-(X2, Y2), RGB(0, 9999, 0)

X1 = 840 + Round(kx * (X(i - 1) - x0))

X2 = 840 + Round(kx * (X(i) - x0))

Y1 = 5280 - Round(ky * (t(i - 1) - min))

Y2 = 5280 - Round(ky * (t(i) - min))

Picture1.Line (X1, Y1)-(X2, Y2), RGB(0, 0, 9999)

Next i

End Sub

Private Sub Command2_Click()

End

End Sub


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


Вывод

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

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

 

.