Автор: Пользователь скрыл имя, 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
Рисунок 13 - Блок схема программы
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
Форма разработки
проекта.
Рисунок 14 - Форма разработки проекта
Форма с
результатами работы проекта.
Рисунок 15 - Форма
с результатами работы проекта
Рисунок 16 - Пример решения дифференциального уравнения методом Рунге-Кутта 4 порядка в среде MathCad.
В курсовой работе были описаны методы Эйлера и Рунге-Кутта четвертого порядка. С помощью которых была решена задача Коши первого порядка. В ходе работы были построены блок-схемы программ, разработан код программы построения графика в VisualBasic.
С помощью данной работы были закреплены навыки работы в различных приложениях WINDOWS, а именно Microsoft Word, MathCad и VisualBasic.
Курсовая работа на тему «Визуализация численных методов» показалась мне интересной и была выполнена по указаниям преподавателя.
Информация о работе Визуализация численных методов. Решение обыкновенных дифференциальных уравнений