Автор: Пользователь скрыл имя, 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
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(
MSFlexGrid1.TextMatrix(
MSFlexGrid1.TextMatrix(
MSFlexGrid1.TextMatrix(
Eiler
RungeKutta
Obhee
For i = 0 To n
MSFlexGrid1.TextMatrix(
MSFlexGrid1.TextMatrix(
MSFlexGrid1.TextMatrix(
MSFlexGrid1.TextMatrix(
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,сравнил полученные разными методами результаты с общим решением. Поэтому я считаю что полностью выполнил поставленное передо мной задание курсовой работы.
Информация о работе Визуализация численных методов. Решение обыкновенных дифференциальных уравнений