Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ТЕЛЕКОММУНИКАЦИЙ И ИНФОРМАТИКИ
УРАЛЬСКИЙ ТЕХНИЧЕСКИЙ ИНСТИТУТ СВЯЗИ И
ИНФОРМАТИКИ
ФАКУЛЬТЕТ ТЕЛЕКОММУНИКАЦИЙ, ИНФОРМАТИКИ И УПРАВЛЕНИЯ
Курсовая работа
по информатике
на тему:
Визуализация численных методов. Решение обыкновенных дифференциальных уравнений.
Руководитель: Выполнил:
Минина Е. Е. Садовой К.С. Группа № ОЕ-71
Екатеринбург 2008г.
Содержание
Техническое задание…………………………………..………….-3-
1.Введение…………………………………………………………-4-
2.Постановка задачи………………………………………………-5-
3.Описание используемых методов……..……………………….-7-
4. Формы.………………………………………….………………-10-
5. Блок-схемы ………………………………….…………...……-11-
6. Решение задачи в MathCAD…………………………….....…-15-
7.Листинг программы……………………………………...……..-16-
8.Заключение……………………..……………………....………..-18-
Решить дифференциальное уравнение
y' + y = cos(x)
c начальным условием y0 = 1 и общим решением
на отрезке х0 = 0 до хk = с шагом h = методом Эйлера и Рунге-Кутта..
Курсовой проект является важнейшей составляющей курса и первой объемной самостоятельной инженерно-расчетной работой студента. Курсовой проект завершает подготовку по дисциплине «Информатика» и становится базой для выполнения последующих курсовых проектов по специальным дисциплинам.
Темой курсового проекта является «Визуализация численных методов» путём:
В ходе выполнения курсовой работы предполагается решение дифференциального уравнения с помощью численных методов:
Дифференциальным уравнением называются уравнения, связывающие независимую переменную, искомую функцию и ее производные. Решением дифференциального уравнения называется функция, которая при подстановке в уравнение обращает его в тождество. Лишь очень немногие из таких уравнений удается решить без помощи вычислительной техники. Поэтому численные методы решения дифференциального уравнения играют важную роль в практике инженерных расчетов.
Если искомая функция зависит от одной переменной, то дифференциальное уравнение называют обыкновенным; в противном случае дифференциальное уравнение в частных производных. В данной курсовой работе рассматриваются методы решения обыкновенных дифференциальных уравнений.
Актуальность курсового проекта: в настоящее время можно решать дифференциальные уравнения с помощью различных приложений. Существует множество математических пакетов, например, MathCAD, Mathematica и другие, позволяющих решать дифференциальные уравнения. Не сложно решить их и в среде программирования Visual Basic, причем Visual Basic позволяет решать уравнения разными методами с требуемой точностью и представить результаты также наглядно, как и в математических пакетах.
В курсовой работе необходимо двумя методами (Эйлер, Рунге-Кутта) решить задачу Коши для дифференциального уравнения 1-го порядка y'+y=cos(x) на отрезке [0,π/2] с шагом h=π/10 и начальным условием Y(X0)=Y0(1), Y0=1,
Ответ должен быть получен в виде таблицы результатов:
X |
Y(1) |
Y(2) |
Y(T) |
X0 |
Y0(1) |
Y0(2) |
Y(X0) |
X1 |
Y1(1) |
Y1(2) |
Y(X1) |
… |
… |
… |
… |
Xk |
Yk(1) |
Yk(2) |
Y(Xk) |
Где: Y(1) , Y(2) - решения, полученные различными численными методами,
Y(T) точное решение дифференциального уравнения.
Возможно представление результатов решения не в виде таблицы, а в виде списков.
Данные таблицы визуализировать на форме в виде графиков.
Перед вычислением последнего столбца таблицы результатов необходимо из начальных условий вычислить значение коэффициента С, используемого в общем решении.
Входные данные: x0, xk, y0, h.
Выходные данные: массив значений y в каждой точке узла.
В тех случаях, когда решить уравнение сложно или невозможно, используют численные методы (приближенное решение).
В численных методах обязательно должны быть начальные условия, чтобы исключить константу. Численными методами мы должны построить интегральную кривую, т.е. график решения.
Иногда этот метод называют методом Рунге-Кутта первого порядка точности.
Данный метод одношаговый. Табулирование функции происходит поочередно в каждой точке. Для расчета значения функции в очередном узле необходимо использовать значение функции в одном предыдущем узле.
Для решения поставленной задачи выполняем следующие действия:
x1 = 1 + 1 · 0,1 = 1,1;
Из прямоугольного треугольника ABC ,
Δy = y1 y0,
y1 y0= Δx· tg α0
Δx = x1 x0 = h => y1 = y0 + h · (f(x0; y0)) = 4 + 0,1 f(1;4) = 4 + 0,1 · 1,718 = 1,172
Следовательно, точка B имеет координаты (1,1; 1,172).
Следующую точку будем искать аналогичным способом по формуле расчета очередной точки интегральной функции:
(*)
Рис1. Решение задачи методом Эйлера.
Из формулы (*) видно, что для расчета каждой следующей точки интегральной функции необходимо знать значение только одной предыдущей точки. Таким образом, зная начальные условия, можно построить интегральную кривую на заданном промежутке.
Метод Эйлера - один из простейших методов численного решения обыкновенных дифференциальных уравнений. Но существенным его недостатком является большая погрешность вычислений.
Для уменьшения погрешности вычислений используется и метод Рунге-Кутта. Этот метод имеет так же название метод Рунге-Кутта четвертого порядка точности.
Для решения поставленной задачи выполняем следующие действия:
x1 = 1 + 1 · 0,1 = 1,1;
x1/4 = x0 + h/4 = 1 + 0,1/2 = 1,05
y1/4 = y0 + h/4 · f(x0; y0) = 1 + 0,1/2 · 1,718 = 1,086
Следовательно, точка B имеет координаты (1,05; 1,086);
Ищем угол наклона касательной к графику в точке B:
α1 = arctg(f(x1/4; y1/4)) = arctg(( 1,718 1,086)/1,05)) = arctg(1,687) = 59,3°
y1 = y1/4 + h/4(f(x1/4;y1/4)) = 1,086 + 0,1/2 · 1,687 = 1,169
Следовательно, точка C имеет координаты (1,1; 1,169).
yi+1 = yi + h ∙ f(xi + h/4, yi + h/4 ∙ f(xi, yi))
Рис2. Решение задачи методом Рунге-Кутта
Dim x(50) As Single
Dim y(50) As Single
Dim y1(50) As Single
Dim y2(50) As Single
Private y0 As Single
Private x0 As Single
Private xk As Single
Function f(l As Single, q As Single) As Single
f = Cos(l) - q
End Function
Private Sub Command1_Click()
x0 = Val(Text1.Text)
xk = Val(Text2.Text)
y0 = Val(Text4.Text)
h = Val(Text3.Text)
N = Round((xk - x0) / h)
MSFlexGrid1.Rows = N + 2
MSFlexGrid1.TextMatrix(0, 0) = "X"
MSFlexGrid1.TextMatrix(0, 1) = "Ye"
MSFlexGrid1.TextMatrix(0, 2) = "Yrk"
MSFlexGrid1.TextMatrix(0, 3) = "Yt"
Max = 1
Min = 0.55
y(0) = y0
y1(0) = y0
y2(0) = y0
For i = 0 To N
x(i) = x0 + i * h
y(i + 1) = Round(y(i) + f(x(i), y(i)) * h, 4)
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) = y1(i) + K4
y2(i) = Round(0.5 * Exp(-x(i)) + ((Cos(x(i)) + Sin(x(i))) / 2), 4)
If y(i) > Max Then Max = y(i)
If y(i) < Min Then Min = y(i)
MSFlexGrid1.TextMatrix(i + 1, 0) = Str(x(i))
MSFlexGrid1.TextMatrix(i + 1, 1) = Str(y(i))
MSFlexGrid1.TextMatrix(i + 1, 2) = Str(y1(i))
MSFlexGrid1.TextMatrix(i + 1, 3) = Str(y2(i))
Next i
Picture1.Cls
kx = (Picture1.Width - 1200) / (xk - x0)
ky = (Picture1.Height - 1000) / (Max - Min)
Label4.Caption = Str(Min)
Label5.Caption = Str(Max)
Label6.Caption = Str(x0)
Label7.Caption = Str(xk)
For i = 0 To N - 1
z1 = Round(720 + (x(i) - x0) * kx)
z2 = Round(5400 - (y(i) - Min) * ky)
z3 = Round(5400 - (y1(i) - Min) * ky)
z4 = Round(5400 - (y2(i) - Min) * ky)
z5 = Round(720 + (x(i + 1) - x0) * kx)
z6 = Round(5400 - (y(i + 1) - Min) * ky)
z7 = Round(5400 - (y1(i + 1) - Min) * ky)
z8 = Round(5400 - (y2(i + 1) - Min) * ky)
Picture1.Line (z1, z2)-(z5, z6), vbGreen
Picture1.Line (z1, z3)-(z5, z7), vbRed
Picture1.Line (z1, z4)-(z5, z8)
Next i
End Sub
Private Sub Command2_Click()
End
End Sub
В ходе выполнения курсовой работы я решила дифференциальное уравнение с помощью численных методов:
а) метода Эйлера или метода Рунге-Кутта 1 порядка;
б) метода Рунге-Кутта 4 порядка.
Метод Эйлера наиболее простой метод численного решения обыкновенных дифференциальных уравнений, но его недостаток - большая погрешность вычислений, которая с каждым шагом вычислений увеличивается.
Методы Рунге-Кутта легко программируются и обладают значительной точностью и устойчивостью для широкого круга задач.
В пояснительной записке приведены блок-схемы основных процедур, листинг и формы программы на языке Visual Basic.
Правильность решения проверила с помощью математического пакета MathCAD.