Программная реализация решения системы обыкновенных дифференциальных уравнений методом Рунге-Кутта 4-го порядка
Обыкновенное дифференциальное уравнение первого порядка. Задача Коши, суть метода Рунге-Кутта. Выбор среды разработки. Программная реализация метода Рунге-Кутта 4-го порядка. Определение порядка точности метода. Применение языка программирования C++.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 16.05.2016 |
Размер файла | 163,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ФЕДЕРАЛЬНОЕ Государственное АВТОНОМНОЕ образовательное учреждение Высшего профессионального образования
«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»
Институт инженерных технологий и естественных наук
Кафедра математического и программного обеспечения информационных систем
программная реализация решения системы обыкновенных дифференциальных уравнений методом Рунге-кутта 4-го порядка
Курсовая работа
по дисциплине «Методы вычислений»
студента очного формы обучения
направления подготовки 010500.62
«Математическое обеспечение и администрирование
информационных систем»
3 курса группы 07001302
Данькова Николая Алексеевича
БЕЛГОРОД 2016
Содержание
Введение
1. Теоретическая часть
1.1 Обыкновенное дифференциальное уравнение первого порядка. Задача Коши
1.2 Суть метода Рунге-Кутта
1.3 Выбор среды разработки
2. Практическая часть
2.1 Программная реализация метода Рунге-Кутта 4-го порядка
3. Тестирование
3.1 Пример
Заключение
Список использованных источников
Приложение
Введение
При изучении самых разнообразных явлений окружающего мира, имеющих отношение как к точным, так и к гуманитарным наукам, исследователи сталкиваются в ряде случаев с тем, что функциональные зависимости между величинами находятся из уравнений, в которых присутствуют производные от искомых функций. Наиболее простыми среди них являются те, что содержат только производные первого порядка и могут быть записаны в виде
= f(x, y) ,
где у - искомая функция, х - независимая переменная, f(x,y) - непрерывная функция от х и у. Однако получить аналитическое решение этого уравнения для достаточно произвольной функции f не удается, и только для некоторых частных случаев, с которыми можно ознакомиться в справочной литературе.
В связи с быстрым развитием электронной вычислительной техники в последние десятилетия появилась возможность использовать приближенные математические методы для решения подобного рода задач. Один из таких подходов называется методом Рунге-Кутты и объединяет целую группу модификаций, связанных способом их получения.
Цель курсовой работы: изучить метод Рунге - Кутта 4-го порядка для решения обыкновенных дифференциальных уравнений.
Постановка задачи: необходимо составить программу, позволяющую решать обыкновенные дифференциальные уравнения методом Рунге - Кутта 4-го порядка.
Курсовая работа состоит из 3 разделов, содержит 6 рисунков, 3 листинга, 1 приложение и 18 страниц.
1. Теоретическая часть
1.1 Обыкновенное дифференциальное уравнение первого порядка. Задача Коши
Для простоты рассмотрим двумерное пространство переменных х и у и некоторое открытое множество G, принадлежащее ему. Пусть на этом открытом множестве определена непрерывно дифференцируемая функция f(х, у) и задано уравнение
= f(x, y) (1)
Согласно теореме существования и единственности для любой точки (x0,y0) ?G найдется решение у = у(х), определенное на некотором интервале (х0 -д, х0 +д), удовлетворяющее условию y(x0) = y0, такое, что точки (x,y(x)) ?G и y`x ? f(x, y(x)), причем это решение будет единственным. Задача для уравнения (1) с начальным условием у(х0) = y0 (задача Коши) состоит в нахождении функции у(х), обращающей и уравнение (1), и начальное условие в тождество. Допустим, что значения, которые принимает независимое переменное х, принадлежат интервалу (Х0, XN ) и запишем задачу Коши:
(2)
Разобьём отрезок [Х0, XN ] на N частей так, что xn+1 - хn = hn ,
n = 0, … ,N-1. В дальнейшем, не ограничивая общности, рассмотрим случай, когда разбиение равномерное, т.е. все hn = h = = const,
n = 0 ,… ,N-1.
1.2 Суть метода Рунге-Кутта
Методы Рунге-Кутта находят широкое применение при решении ДУ. Наибольшее применение нашел метод 4-го порядка.
(3)
(4)
(5)
- параметр, который определяет значение функции вблизи точки области определения.
Общепринятый метод 4-го порядка:
(6)
(7)
(8)
(9)
(10)
Ошибка формулы (10) пропорциональна h5.
Этот метод намного более точен, чем методы Эйлера, но требует и большего объема вычислений: положение точки (xi+1, yi+1) определяется в результате 4-кратного вычисления значения функции f (x,y). С появлением ЭВМ этот недостаток перестал быть существенным и метод Рунге-Кутта 4-го порядка применяется на практике чрезвычайно широко.
Число микроотрезков [xi; xi+1], на которые разбивается исходный отрезок [x0;xn], определяется требуемой точностью вычислений. Для достижения нужной точности задача решается несколько раз при последовательно удваиваемом числе микроотрезков n. Точность считается достигнутой, если при начальном и удвоенном числе n значения yi и y2i (в совпадающих точках x) отличаются не более чем на заданную величину:
, i =0, ..,n, (11)
где p - порядок точности метода.
Метод Ругне-Кутта обладает следующими свойствами:
1. Метод является одноступенчатым (чтобы найти , нужна информация о предыдущей точке, )
2. Не требует вычисления производных от f(x,y), а требует вычисления самой функции
3. Имеет небольшую погрешность
1.3 Выбор среды разработки
C++ Builder-- программный продукт, инструмент быстрой разработки приложений (RAD), интегрированная среда программирования (IDE), система, используемая программистами для разработки программного обеспечения на языке программирования C++. Данный продукт позволяет создавать как консольные приложения, так и приложения с графическим интерфейсом.
Microsoft Visual Studio -- линейка продуктов компании Microsoft, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. С помощью данного продукта можно разрабатывать консольные приложения, приложения с графическим интерфейсом, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Windows, Windows Mobile, Windows CE, .NET Framework, Xbox, Windows Phone .NET Compact Framework и Silverlight.
Для выполнения поставленной задачи был выбран программный продукт C++ Builder. Так как является более простым в использовании и соответствует всем необходимым требованиям для создания консольного приложения.
2. Практическая часть
2.1 Программная реализация метода Ркнге-Кутта 4-го порядка
дифференциальный уравнение программирование коши
Разработка программы начинается с описания функций. Для этого мы используем оператор switch.
Листинг 1 «описание функций»
double func(int tip,double x,double y,double a,double b,double c, double d, double e, double f ) {
double s=0;
switch (tip){
case 1: {
s = a+b*(y*c*sin(d*x))-(e*y*f*y);
break; }
case 2: {
s =a*cos(b*x+c*y)+d*(e*x-f*y);
break; }
case 3: {
s=((a*cos(b*x)/(x+c))-(d*y*e*y)*f);
break; }
case 4: {
s = a*(b*x+c*y)/(e*f)*d;
break; }
default:
{ s =0; }
}
return s;
}
Затем идет объявление и инициализация переменных, которые участвуют в вычислительном процессе: коэффициенты уравнений, границы отрезка, шаг, начальное условие.
Когда все нужные данные получены, мы переходим непосредственно к решению ОДУ методом Рунге - Кутта 4-го порядка.
Листинг 2 «программная реализация решения ОДУ методом Рунге - Кутта
4-го порядка»
for (i=0;i<=n;i++) {
k1=func(tip,x[i],y[i],a,b,c,d,e,f)*h;
k2=func(tip,x[i]+h/2, y[i]+(k1/2),a,b,c,d,e,f)*h;
k3=func(tip,x[i]+h/2, y[i]+(k2/2),a,b,c,d,e,f)*h;
k4=func(tip,x[i]+h, y[i]+k3,a,b,c,d,e,f)*h;
y[i+1]=y[i]+((1.0/6.0)*(k1+2*k2+2*k3+k4));
x[i+1]=x[i]+h;
cout<<"y"<<i<<"= "<<y[i]<<endl;
}
3. Тестирование
Запустив программу, мы увидим уравнения, предлагаемые для выбора.
Рис. 1 «выбор уравнения»
Если ввести номер не соответствующий представленным номерам уравнений программа отреагирует на это.
Рис. 2 «ввод неверного параметра»
Выбрав необходимое уравнение, вводим коэффициенты.
Рис. 3 «ввод коэффициентов»
Далее вводим начало и конец отрезка, на котором будет производиться расчет, шаг и начальное условие. Выбор последнего параметра необходимо выполнить пользователю самостоятельно.
Рис. 4 «ввод необходимых параметров»
После окончания вычисления программа выводит решение.
Рис. 5 «вывод результата»
3.1 Пример
Решить задачу Коши:
на отрезке [0: 0,4]. Найти решение на равномерной сетке с шагом 0.1
Решение. Так как f(x ,y ) = х + у , то получаем
= + ,
= ++ ,
= ++ ,
= +h+ ,
= +() ,
= +h ,
для значений i = 1, 2, 3, 4.
Полагая =0, = 1, последовательно находим:
при i = 1
= 0,1(0 +1) = 0,1 ,
= 0,1(0 + 0,05 +1 + 0,05) = 0,11 ,
= 0,1(0 + 0,05 +1 + 0,055) = 0,1105 ,
= 0,1(0 + 0,1 +1 + 0,1105) = 0,121050 ,
= 1 + *(0,1 + 2*0,11+2*0,1105 + 0,12105) = 1,110342 ,
= 0+0,1=0.1 ,
при i = 2
= 0,1*(0 + 1,110342) = 0,121034 ,
= 0,1*(0,1 + 0,05 +1,110342 + 0,0605171) = 0,1320859 ,
= 0,1*(0,1 + 0,05+1,110342 + 0,06604295) = 0,1326385 ,
= 0,1*(0,1 + 0,1 + 1,110342 + 0,11326385)= 0,1442980 ,
= 1,110342 + *(0,121034 + 2*0,1320859+2*0,1326385 + 0,1442980) = 1,242805 ,
= 0,1+0,1 ,
Далее получаем:
при i = 3 = 0,3, =1,399717,
при i = 4 = 0.4, = 1,583648.
Погрешность полученного решения не превышает величины
|y4 - ц(x4) | ? 0.000001.
Для наглядности в таблице 1 приведены численные решения одной и той же задачи Коши методами Эйлера, Эйлера-Коши и Рунге-Кутта.
Таблица 1 Численные решения задачи коши разными методами
i |
Значения , найденного методом |
Точное решениец(xi)=2- xi -1 |
||||
Эйлера |
Эйлера - Коши |
Рунге - Кутта |
||||
0 |
0 |
1.0 |
1.0 |
1.0 |
1.0 |
|
1 |
0.1 |
1.1 |
1.11 |
1.110342 |
1.110342 |
|
2 |
0.2 |
1.22 |
1.24205 |
1.242805 |
1.248805 |
|
3 |
0.3 |
1.362 |
1.398465 |
1.399717 |
1.399718 |
|
4 |
0.4 |
1.5282 |
1.581804 |
1.583648 |
1.583649 |
Теперь сравним полученные результаты с расчетами нашей программы.
Рис. 6 «результат работы программы»
Как мы видим из примера - точность вычисления сохраняется до пятого знака после запятой.
Заключение
В ходе выполнения курсовой работы была реализована поставленная задача, а именно составлена программа, позволяющая решать обыкновенные дифференциальные уравнения методом Рунге - Кутта 4-го порядка.
В ходе тестирования программы были получены результаты, по которым видно, что результаты решения методом Рунге - Кутта 4-го порядка совпадают, с достаточной точностью, с аналитическим.
Список использованных источников
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
Приложение 1
#include <iostream.h>
#include <math.h>
#include <locale.h>
#include <windows.h>
using namespace std;
char* rus(const char* text) {
char *buffRus=new char[strlen(text)];
CharToOem(text, buffRus);
return buffRus;
}
double func( int tip,double x,double y,double a,double b,double c, double d, double e, double f ) {
double s=0;
switch (tip) {
case 1: {
s = a+b*(y*c*sin(d*x))-(e*y*f*y);
break; }
case 2: {
s =a*cos(b*x+c*y)+d*(e*x-f*y);
break; }
case 3: {
s=((a*cos(b*x)/(x+c))-(d*y*e*y)*f);
break; }
case 4: {
s = a*(b*x+c*y)/(e*f)*d;
break; }
default:
{ s =0; }
}
return s;
}
int main( ) {
int tip, i=0, n=0;
double h=0.0, ot1=1.0, ot2=0.0, k1=0.0, k2=0.0, k3=0.0, k4=0.0, a=1.0, b=1.0, c=1.0, d=1.0, e=1.0, f=1.0, res=0.0;
bool flag=0;
cout<<rus(" Функции: ")<<endl;
cout<<" 1. y'=a+b*(y*c*sin(d*x))-(e*y*f*y)\n 2. y'=a*cos(b*x+c*y)+d*(e*x-f*y)\n 3. y'=((a*cos(b*x)/(x+c))-(d*y*e*y)*f)\n 4. y'=a*(b*x+c*y)/(e*f)*d\n";
while (!flag) {
cout<<endl<<rus(" Выберите тип функции: ");
cin>>tip;
if((tip == 1) || (tip == 2) || (tip == 3) || (tip == 4)){
flag=1; }
else {
cout <<rus(" Введен неверный параметр!\n");
}
}
cout<<rus(" Введите коэффициенты (a,b,c,d,e,f): ")<<endl;
cout <<" a= ";cin>>a;
cout <<" b= ";cin>>b;
cout <<" c= ";cin>>c;
cout <<" d= ";cin>>d;
cout <<" e= ";cin>>e;
cout <<" f= ";cin>>f;
cout<<rus(" Введите начало (x0) и конец (xn) отрезка")<<endl;
while (ot1>ot2) {
cout<<rus(" x0= ");
cin >>ot1;
cout<<rus(" xn= ");
cin >>ot2;
}
cout <<rus(" Введите шаг h= ");
cin>>h;
n = ((ot2-ot1)/h);
double* x=new double[n];
double* y=new double[n];
for(i = 0; i < n; i++) {
x[i]=0;
y[i]=0; }
cout <<rus(" введите начальное условие y(0)= ");
cin>>y[0];
cout<<endl;
for (i = 0; i <= n; i++) {
k1=func(tip,x[i],y[i],a,b,c,d,e,f)*h;
k2=func(tip,x[i]+h/2, y[i]+(k1/2),a,b,c,d,e,f)*h;
k3=func(tip,x[i]+h/2, y[i]+(k2/2),a,b,c,d,e,f)*h;
k4=func(tip,x[i]+h, y[i]+k3,a,b,c,d,e,f)*h;
y[i+1]=y[i]+((1.0/6.0)*(k1+2*k2+2*k3+k4));
x[i+1]=x[i]+h;
cout<<"y"<<i<<"= "<<y[i]<<endl;
}
system ("PAUSE");
return 0;
}
Приложение 2
Размещено на Allbest.ru
Подобные документы
Анализ предметной области объектно-ориентированного программирования. Языки Delphi, Object Pascal - объектно-ориентированная среда программирования. Основные алгоритмические решения. Решение дифференциального уравнения методом Рунге-Кутта в среде Excel.
курсовая работа [1,5 M], добавлен 02.04.2011Составление программы на алгоритмическом языке Turbo Pascal. Разработка блок-схемы алгоритма её решения. Составление исходной Pascal-программы и реализация вычислений по составленной программе. Применение методов Рунге-Кутта и Рунге-Кутта-Мерсона.
курсовая работа [385,0 K], добавлен 17.09.2009Суть метода Рунге-Кутта и его свойства. Решение дифференциальных уравнений первого порядка. Вычислительный блок Given/Odesolve. Встроенные функции rkfixed, Rkadapt, Bulstoer. Решения линейных алгебраических уравнений в среде MathCad и Microsoft Excel.
курсовая работа [1,1 M], добавлен 02.06.2014Обзор методов решения в Excel. Рекурентные формулы метода Эйлера. Метод Рунге-Кутта четвертого порядка для решения уравнения первого порядка. Метод Эйлера с шагом h/2. Решение дифференциальных уравнений с помощью Mathcad. Модифицированный метод Эйлера.
курсовая работа [580,1 K], добавлен 18.01.2011Математическое описание задачи решения обыкновенного дифференциального уравнения численным явным методом Рунге-Кутта, разработка схемы алгоритма и написание программы в среде программирования Microsoft Visual Studio 2010. Тестирование работы программы.
курсовая работа [1,1 M], добавлен 22.01.2014Реализация решения обыкновенных дифференциальных уравнений 1-го и 2-го порядка методом Рунге-Кутты. Построение на ЭВМ системы отображения результатов в табличной форме и в виде графика. Архитектура и требования к разрабатываемым программным средствам.
курсовая работа [2,7 M], добавлен 05.11.2011Решение дифференциальных уравнений первого порядка. Варианты методов Рунге-Кутта различных порядков. Основные методы численного решения задачи Коши. Повышение точности вычислений и итерационный метод уточнения. Дискретная числовая последовательность.
лабораторная работа [33,3 K], добавлен 14.05.2012Численные методы решения задачи Коши для обыкновенных дифференциальных уравнений: Эйлера, Рунге-Кутта, Адамса и Рунге. Техники приближенного решения данных уравнений: метод конечных разностей, разностной прогонки, коллокаций; анализ результатов.
курсовая работа [532,9 K], добавлен 14.01.2014Решение дифференциальных уравнений с использованием классических алгоритмов численных методов Эйлера и Рунге-Кутта 4-го порядка. Команды, используемые при решении обыкновенных дифференциальных уравнений в системе вычислений. Результат работы программы.
курсовая работа [226,6 K], добавлен 05.04.2013Анализ преимуществ и недостатков различных численных методов решения дифференциальных уравнений высших порядков. Обоснование выбора метода Рунге-Кутта четвертого порядка. Разработка программы, моделирующей физическое и математическое поведение маятника.
курсовая работа [1,6 M], добавлен 11.07.2012