Пусть дано дифференциальное уравнение первого порядка
с начальным условием
y(x 0) = y 0 .
Выберем шаг h и введём обозначения:
x i = x 0 + i . h и y i = y(x i) ,
где i = 0, 1, 2, …
x i – узлы сетки,
y i - значение интегральной функции в узлах .
Аналогично описанным выше методам производится решение дифференциального уравнения. Отличие состоит в делении шага на 4 части.
Согласно методу Рунге – Кутта четвёртого порядка, последовательные значения y i искомой функции y определяются по формуле:
, i = 0, 1, 2, …
а числа k 1 (i) , k 2 (i) , k 3 (i) , k 4 (i) на каждом шаге вычисляются по формулам:
Это явный четырёхэтапный метод четвёртого порядка точности.
Методы Рунге – Кутта легко программируются и обладают значительной точностью и устойчивостью для широкого круга задач.
На рисунке 6 приведена блок-схема процедуры RUNGE(X0, XK, Y0, N, Y) для решения задачи Коши описанным выше методом Рунге – Кутта.
i = 0, … , N-1
K1 = h * F(x, Yi)
K2 = h * F(x + h/2, Yi + K1 / 2)
K3 = h * F(x + h/2, Yi + K2 / 2)
K4 = h * F(x + h, Yi + K3)
K = (K1 + 2*K2 + 2*K3 + K4) / 6
Рисунок 6 - Блок-схема процедуры RUNGE
На рисунке 7 приведена блок-схема алгоритма основной программы для решения задачи Коши и получения результатов с фиксированным количеством отрезков разбиения N. В основной программе происходит обращение к процедуре RUNGE(X0, XK, Y0, N, Y), вычисляющей значения искомой функции y j в точках x j методом Рунге – Кутта.
Исходными данными в данной задаче являются:
X0, XK – начальное и конечное значения независимой переменной;
Y0 – значение y 0 из начального условия y(x 0) = y 0 ;
N – количество отрезков разбиения.
Результаты работы программы выводятся в виде двух столбцов:
X – массив значений узлов сетки;
Y – массив значений искомого решения в соответствующих узлах сетки.
Ввод X0, XK, Y0, N
RUNGE(X0,XK,Y0,N,Y)
i=0…N
Вывод X, Y i
Рисунок 7 - Блок-схема алгоритма основной программы для решения задачи Коши с фиксированным количеством отрезков разбиения N
Решение дифференциальных уравнений в среде MathCad
Рисунок 8 - Пример решения дифференциального уравнения методом
Рунге-Кутта 4 порядка в среде MathCad.
Построение графиков функций в среде Visual Basic
Задача табулирования функций и построения их графиков является одной из основных задач в процессе решения обыкновенных дифференциальных уравнений. Рассмотрим эту задачу более подробно.
Задача.
Построить график функции y=sin(x) на отрезке . Шаг табулирования принять равным h.
Решение.
Для построения графика функции в среде Visual Basic удобно воспользоваться некоторыми графическими компонентами.
Рисунок 9 - Расположение основных компонентов в окне General
|
Рисунок 10 - Координаты объекта PictureBox
На рис. 10 показано расположение осей и координаты угловых точек объекта.
Компонент Line () используется для построения осей и отрезков ломаной графика функции.
Суть построения графика сводится к тому, что функцию необходимо представить в виде таблицы (протабулировать), а затем отметить на шаблоне графика точки и соединить их между собой.
Алгоритм построения графика функции приведен на рисунке 12. Алгоритм может быть модифицирован. В частности, некоторые процедуры могут быть объединены, а порядок действий в некоторых случаях может быть изменен.
Рассмотрим алгоритм более подробно.
До реализации алгоритма необходимо описать подпрограмму- функцию для построения графика. Это необходимо для облегчения модификации программы. Если потребуется построение графика другой функции, достаточно будет только изменить подпрограмму.
Так же до построения графика необходимо создать и отредактировать форму. Пример разработки формы приведен на рисунке 11. На форме надо расположить компоненты для ввода исходных данных, компонент для вывода на печать таблицы, командную кнопку, контейнер для размещения графика (PictureBox). Внутри PictureBox надо нарисовать оси координат с помощью прямых линий и расположить метки для записи границ отрезка значений аргумента функции и экстремумов функции на рассматриваемом отрезке.
Ввод исходных данных осуществляется в рассматриваемой программе при нажатии на командную кнопку. Очень часто ввод данных реализуется с помощью компонента TextBox.
Процедуру табулирования функции удобно осуществлять в цикле с параметром, так как известно количество обсчитываемых точек графика. До выполнения процедуры надо задать количество строк таблицы.
Количество строк рассчитывается по формуле k=n+2, где k – количество строк, а n – количество отрезков табулирования. Число строк должно быть больше количества отрезков на 2, так как необходимо учесть начальную точку (нулевую) и строку для записи заголовков столбцов страницы.
В самой процедуре табулирования можно совместить два действия – табулирование и расчет экстремумов. Такой вариант решения приведен в листинге программы на рисунке13.
Основной сложностью построения графика является переход от математического значения функции и аргумента к экранным координатам, используемым для построения графика. При решении этой проблемы необходимо учитывать противоположное направление осей на математическом графике и на объекте PictureBox и необходимость масштабирования картинки.
Коэффициенты масштабирования графика рассчитываются по следующим формулам:
где kx - коэффициент масштабирования по оси ОХ,
NPX – количество пикселей объекта PictureBox, отводимых для построения графика по горизонтали,
a – начальное значение отрезка аргумента функции,
b – конечное значение отрезка аргумента функции.
,
где Ky - коэффициент масштабирования по оси ОY,
NPY – количество пикселей объекта PictureBox, отводимых для построения графика по вертикали,
min – минимальное значение функции,
max – максимальное значение функции.
Перевод математических координат текущей точки в экранные производится по формулам:
zx = Round(ox + (x(i) - a) * kx),
zy = Round(oy - (y(i) - Min) * ky),
где zx, zy – экранные координаты текущей точки,
ox, oy - координаты точки пересечения осей в компоненте pictureBox,
x(i), y(i) – математические координаты текущей точки,
kx, ky – коэффициенты масштабирования.
В формуле расчета экранной координаты ординаты текущей точки используется знак «минус» для учета противоположного направления осей (на экране и на графике).
Листинг программы построения графика функции приведен на рисунке 13.
Примеры форм с результатами работы программы для различных исходных данных приведены на рисунках 14 и 15.
Рисунок 11 - Пример разработки формы
Рисунок 12 - Алгоритм построения графика функции
Rem Описание переменных
Dim x() As Single, y() As Single
Private a As Single
Пусть дано дифференциальное уравнение первого порядка с начальным условием y(x 0)=y 0. Выберем шаг h и введем обозначения:
x i = x 0 + ih и y i = y(x i), где i = 0, 1, 2, ... .
Аналогично описанному выше методу производится решение
дифференциального уравнения. Отличие состоит в делении шага на 4 части.
Согласно методу Рунге-Кутта четвертого порядка, последовательные значения y i искомой функции y определяются по формуле:
y i+1 = y i +?y i
где i = 0, 1, 2 ...
Y=(k1+2*k2+2*k3+k4)/6
a числа k1, k2 ,k3, k4 на каждом шаге вычисляются по формулам:
k1 = h*f(x i, y i)
k2 = f (x i +h/2, y i +k1 /2)*h
k3 = F(x i +h/2, y i +k2 /2)*h
k4 = F(x i +h, y i +k3)*h
Это явный четырехэтапный метод 4 порядка точности.
Блок-схема процедуры решения дифференциального уравнения методом Рунге-Кутта приведена на рисунке 6.
F(x, у) - заданная функция - должна быть описана отдельно.
Входные параметры:
Х0, XК - начальное и конечное
значения независимой
переменной;
Y0 - значение y 0 из начального условия
N - количество отрезков разбиения;
Выходные параметры:
Y - массив значений искомого решения
в узлах сетки.
Алгоритм решения задачи
Решение в MathCAD
Листинг программы на языке Visual Basic
Dim xr(), yr(), xe(), ye(), xo(), yo() As Single
Private x0, y0, h, xk, k1, k2, c, k3, k4, yd As Single
Private n, i As Integer
Public Function f(ByVal a, ByVal b) As Single
f = -(a - b) / a
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
x0 = Val(TextBox1.Text)
xk = Val(TextBox2.Text)
y0 = Val(TextBox4.Text)
h = Val(TextBox3.Text)
n = (xk - x0) / h
c = y0 / x0 + Math.Log(x0)
DataGridView1.ColumnCount = 4
DataGridView1.RowCount = n + 2
DataGridView1.Item(0, 0).Value = "x"
DataGridView1.Item(1, 0).Value = "Общее"
DataGridView1.Item(2, 0).Value = "Ейлер М"
DataGridView1.Item(3, 0).Value = "Рунге Кутт"
For i = 0 To n - 1
xe(i) = Math.Round((xe(0) + i * h), 2)
ye(i + 1) = ye(i) + h * f(xe(i) + h / 2, ye(i) + h / 2 * f(xe(i), ye(i)))
DataGridView1.Item(2, 1).Value = ye(0)
DataGridView1.Item(0, 1).Value = xe(0)
DataGridView1.Item(0, i + 1).Value = xe(i)
DataGridView1.Item(2, i + 1).Value = Str(ye(i))
For i = 0 To n - 1
xr(i) = Math.Round((xe(0) + i * h), 2)
k1 = h * f(xr(i), yr(i))
k2 = h * f(xr(i) + h / 2, yr(i) + k1 / 2)
k3 = h * f(xr(i) + h / 2, yr(i) + k2 / 2)
k4 = h * f(xr(i) + h, yr(i) + k3)
yd = (k1 + 2 * k2 + 2 * k3 + k4) / 6
yr(i + 1) = yr(i) + yd
DataGridView1.Item(3, 1).Value = yr(0)
DataGridView1.Item(3, i + 1).Value = Str(yr(i))
For i = 0 To n - 1
xo(i) = Math.Round((xe(0) + i * h), 2)
yo(i) = xo(i) * (c - Math.Log(xo(i)))
DataGridView1.Item(1, 1).Value = yo(0)
DataGridView1.Item(1, i + 1).Value = Str(yo(i))
Chart1.Series.Add("Общее решение")
Chart1.Series("Общее решение").ChartType = SeriesChartType.Line
For i = 0 To n - 1
Chart1.Series("Общее решение").Points.AddXY(xo(i), yo(i))
Chart1.Series("Общее решение").ChartArea = "ChartArea1"
Chart1.Series.Add("Эйлер М")
Chart1.Series("Эйлер М").ChartType = SeriesChartType.Point
For i = 0 To n - 1
Chart1.Series("Эйлер М").Points.AddXY(xe(i), ye(i))
Chart1.Series("Эйлер М").ChartArea = "ChartArea1"
Chart1.Series("Эйлер М").Color = Color.Blue
Chart1.Series.Add("Рунге Кутт")
Chart1.Series("Рунге Кутт").ChartType = SeriesChartType.Line
For i = 0 To n - 1
Chart1.Series("Рунге Кутт").Points.AddXY(xr(i), yr(i))
Chart1.Series("Рунге Кутт").ChartArea = "ChartArea1"
Chart1.Series("Рунге Кутт").Color = Color.Green
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ФЕДЕРАЛЬНОЕ Государственное АВТОНОМНОЕ образовательное учреждение Высшего профессионального образования
«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»
Институт инженерных технологий и естественных наук
Кафедра математического и программного обеспечения информационных систем
программная реализация решения системы обыкновенных дифференциальных уравнений методом Рунге-кутта 4-го порядка
Курсовая работа
по дисциплине «Методы вычислений»
студента очного формы обучения
направления подготовки 010500.62
«Математическое обеспечение и администрирование
информационных систем»
3 курса группы 07001302
Данькова Николая Алексеевича
БЕЛГОРОД 2016
Введение
1. Теоретическая часть
1.1 Обыкновенное дифференциальное уравнение первого порядка. Задача Коши
1.2 Суть метода Рунге-Кутта
1.3 Выбор среды разработки
2. Практическая часть
2.1 Программная реализация метода Рунге-Кутта 4-го порядка
3. Тестирование
3.1 Пример
Заключение
Приложение
При изучении самых разнообразных явлений окружающего мира, имеющих отношение как к точным, так и к гуманитарным наукам, исследователи сталкиваются в ряде случаев с тем, что функциональные зависимости между величинами находятся из уравнений, в которых присутствуют производные от искомых функций. Наиболее простыми среди них являются те, что содержат только производные первого порядка и могут быть записаны в виде
Согласно теореме существования и единственности для любой точки (x 0 ,y 0) ?G найдется решение у = у(х), определенное на некотором интервале (х 0 -д, х 0 +д), удовлетворяющее условию y(x 0) = y 0, такое, что точки (x,y(x)) ?G и y` x ? f(x, y(x)), причем это решение будет единственным. Задача для уравнения (1) с начальным условием у(х 0) = y 0 (задача Коши) состоит в нахождении функции у(х), обращающей и уравнение (1), и начальное условие в тождество. Допустим, что значения, которые принимает независимое переменное х, принадлежат интервалу (Х 0 , X N) и запишем задачу Коши:
Число микроотрезков , на которые разбивается исходный отрезок , определяется требуемой точностью вычислений. Для достижения нужной точности задача решается несколько раз при последовательно удваиваемом числе микроотрезков n. Точность считается достигнутой, если при начальном и удвоенном числе n значения y i и y 2i (в совпадающих точках x) отличаются не более чем на заданную величину:
1. Метод является одноступенчатым (чтобы найти, нужна информация о предыдущей точке,)
2. Не требует вычисления производных от f(x,y), а требует вычисления самой функции
3. Имеет небольшую погрешность
Microsoft Visual Studio -- линейка продуктов компании Microsoft, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. С помощью данного продукта можно разрабатывать консольные приложения, приложения с графическим интерфейсом, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Windows, Windows Mobile, Windows CE, .NET Framework, Xbox, Windows Phone .NET Compact Framework и Silverlight.
Значения, найденного методом |
Точное решениец(x i)=2- x i -1 |
|||||
Эйлера - Коши |
Рунге - Кутта |
|||||
1. Березин И.С., Жидков Н.П., Методы вычислений: Т.2 - М.: ГИФМЛ, 1960. - 620 с.
2. Бахвалов Н. С., Жидков Н. П., Кобельков Г. М. Численные методы. - М.: Бином, 2001 - с. 363-375.
3. Копченова Н.В., Марон И.А., Вычислительная математика в примерах и задачах - М.: Наука, 1972. - 368 с.
4. https://ru.wikipedia.org/wiki/Microsoft_Visual_Studio
5. https://ru.wikipedia.org/wiki/C%2B%2B_Builder
Анализ предметной области объектно-ориентированного программирования. Языки Delphi, Object Pascal - объектно-ориентированная среда программирования. Основные алгоритмические решения. Решение дифференциального уравнения методом Рунге-Кутта в среде Excel.
курсовая работа , добавлен 02.04.2011
Составление программы на алгоритмическом языке Turbo Pascal. Разработка блок-схемы алгоритма её решения. Составление исходной Pascal-программы и реализация вычислений по составленной программе. Применение методов Рунге-Кутта и Рунге-Кутта-Мерсона.
курсовая работа , добавлен 17.09.2009
Суть метода Рунге-Кутта и его свойства. Решение дифференциальных уравнений первого порядка. Вычислительный блок Given/Odesolve. Встроенные функции rkfixed, Rkadapt, Bulstoer. Решения линейных алгебраических уравнений в среде MathCad и Microsoft Excel.
курсовая работа , добавлен 02.06.2014
Обзор методов решения в Excel. Рекурентные формулы метода Эйлера. Метод Рунге-Кутта четвертого порядка для решения уравнения первого порядка. Метод Эйлера с шагом h/2. Решение дифференциальных уравнений с помощью Mathcad. Модифицированный метод Эйлера.
курсовая работа , добавлен 18.01.2011
Математическое описание задачи решения обыкновенного дифференциального уравнения численным явным методом Рунге-Кутта, разработка схемы алгоритма и написание программы в среде программирования Microsoft Visual Studio 2010. Тестирование работы программы.
курсовая работа , добавлен 22.01.2014
Реализация решения обыкновенных дифференциальных уравнений 1-го и 2-го порядка методом Рунге-Кутты. Построение на ЭВМ системы отображения результатов в табличной форме и в виде графика. Архитектура и требования к разрабатываемым программным средствам.
курсовая работа , добавлен 05.11.2011
Решение дифференциальных уравнений первого порядка. Варианты методов Рунге-Кутта различных порядков. Основные методы численного решения задачи Коши. Повышение точности вычислений и итерационный метод уточнения. Дискретная числовая последовательность.
лабораторная работа , добавлен 14.05.2012
Численные методы решения задачи Коши для обыкновенных дифференциальных уравнений: Эйлера, Рунге-Кутта, Адамса и Рунге. Техники приближенного решения данных уравнений: метод конечных разностей, разностной прогонки, коллокаций; анализ результатов.
курсовая работа , добавлен 14.01.2014
Анализ преимуществ и недостатков различных численных методов решения дифференциальных уравнений высших порядков. Обоснование выбора метода Рунге-Кутта четвертого порядка. Разработка программы, моделирующей физическое и математическое поведение маятника.
курсовая работа , добавлен 11.07.2012
Решение дифференциальных уравнений с использованием классических алгоритмов численных методов Эйлера и Рунге-Кутта 4-го порядка. Команды, используемые при решении обыкновенных дифференциальных уравнений в системе вычислений. Результат работы программы.