Программная реализация решения системы обыкновенных дифференциальных уравнений методом Рунге-Кутта 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.