Программная реализация решения системы обыкновенных дифференциальных уравнений методом Рунге-Кутта 4-го порядка

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    47,49 Кб
  • Опубликовано:
    2016-05-16
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Программная реализация решения системы обыкновенных дифференциальных уравнений методом Рунге-Кутта 4-го порядка

ФЕДЕРАЛЬНОЕ Государственное АВТОНОМНОЕ образовательное учреждение Высшего профессионального образования

«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ

ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»

Институт инженерных технологий и естественных наук

Кафедра математического и программного обеспечения информационных систем





программная реализация решения системы обыкновенных дифференциальных уравнений методом Рунге-кутта 4-го порядка

Курсовая работа

по дисциплине «Методы вычислений»

студента очного формы обучения

направления подготовки 010500.62

«Математическое обеспечение и администрирование

информационных систем»

курса группы 07001302

Данькова Николая Алексеевича


БЕЛГОРОД 2016

Содержание

Введение

.        Теоретическая часть

.1 Обыкновенное дифференциальное уравнение первого порядка. Задача Коши

.2 Суть метода Рунге-Кутта

.3 Выбор среды разработки

.        Практическая часть

.1 Программная реализация метода Рунге-Кутта 4-го порядка

. Тестирование

.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.      Метод является одноступенчатым (чтобы найти , нужна информация о предыдущей точке, )

.        Не требует вычисления производных от f(x,y), а требует вычисления самой функции

.        Имеет небольшую погрешность

1.3 Выбор среды разработки

++ Builder- программный продукт, инструмент быстрой разработки приложений (RAD), интегрированная среда программирования (IDE), система, используемая программистами для разработки программного обеспечения на языке программирования C++. Данный продукт позволяет создавать как консольные приложения, так и приложения с графическим интерфейсом.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 «описание функций»func(int tip,double x,double y,double a,double b,double c, double d, double e, double f ) {s=0;(tip){1: {= a+b*(y*c*sin(d*x))-(e*y*f*y);; }2: {=a*cos(b*x+c*y)+d*(e*x-f*y);; }3: {=((a*cos(b*x)/(x+c))-(d*y*e*y)*f);; }4: {= a*(b*x+c*y)/(e*f)*d;; }:

{ s =0; }

}s;

}

Когда все нужные данные получены, мы переходим непосредственно к решению ОДУ методом Рунге - Кутта 4-го порядка.

Листинг 2 «программная реализация решения ОДУ методом Рунге - Кутта

4-го порядка»(i=0;i<=n;i++) {=func(tip,x[i],y[i],a,b,c,d,e,f)*h;=func(tip,x[i]+h/2, y[i]+(k1/2),a,b,c,d,e,f)*h;=func(tip,x[i]+h/2, y[i]+(k2/2),a,b,c,d,e,f)*h;=func(tip,x[i]+h, y[i]+k3,a,b,c,d,e,f)*h;[i+1]=y[i]+((1.0/6.0)*(k1+2*k2+2*k3+k4));[i+1]=x[i]+h;<<"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

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 с.

.        Бахвалов Н. С., Жидков Н. П., Кобельков Г. М. Численные методы. - М.: Бином, 2001 - с. 363-375.

.        Копченова Н.В., Марон И.А., Вычислительная математика в примерах и задачах - М.: Наука, 1972. - 368 с.

4.      <https://ru.wikipedia.org/wiki/Microsoft_Visual_Studio>

.        <https://ru.wikipedia.org/wiki/C%2B%2B_Builder>

Приложение 1


#include <iostream.h>

#include <math.h>

#include <locale.h>

#include <windows.h>namespace std;* rus(const char* text) {*buffRus=new char[strlen(text)];(text, buffRus);buffRus;

}func( int tip,double x,double y,double a,double b,double c, double d, double e, double f ) {s=0;(tip) {1: {= a+b*(y*c*sin(d*x))-(e*y*f*y);; }2: {=a*cos(b*x+c*y)+d*(e*x-f*y);; }3: {=((a*cos(b*x)/(x+c))-(d*y*e*y)*f);; }4: {= a*(b*x+c*y)/(e*f)*d;; }:

{ s =0; }

}s;

}main( ) {tip, i=0, n=0;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;flag=0;<<rus(" Функции: ")<<endl;<<" 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";(!flag) {<<endl<<rus(" Выберите тип функции: ");>>tip;((tip == 1) || (tip == 2) || (tip == 3) || (tip == 4)){=1; }

else {

cout <<rus(" Введен неверный параметр!\n");

}

}

cout<<rus(" Введите коэффициенты (a,b,c,d,e,f): ")<<endl;

cout <<" a= ";cin>>a;<<" b= ";cin>>b;<<" c= ";cin>>c;<<" d= ";cin>>d;<<" e= ";cin>>e;<<" f= ";cin>>f;<<rus(" Введите начало (x0) и конец (xn) отрезка")<<endl;

while (ot1>ot2) {<<rus(" x0= ");>>ot1;<<rus(" xn= ");>>ot2;

}<<rus(" Введите шаг h= ");>>h;= ((ot2-ot1)/h);* x=new double[n];* y=new double[n];(i = 0; i < n; i++) {[i]=0;[i]=0; } <<rus(" введите начальное условие y(0)= ");

cin>>y[0];<<endl;(i = 0; i <= n; i++) {=func(tip,x[i],y[i],a,b,c,d,e,f)*h;=func(tip,x[i]+h/2, y[i]+(k1/2),a,b,c,d,e,f)*h;=func(tip,x[i]+h/2, y[i]+(k2/2),a,b,c,d,e,f)*h;=func(tip,x[i]+h, y[i]+k3,a,b,c,d,e,f)*h;[i+1]=y[i]+((1.0/6.0)*(k1+2*k2+2*k3+k4));[i+1]=x[i]+h;<<"y"<<i<<"= "<<y[i]<<endl;

}("PAUSE");0;

}

Приложение 2
























Похожие работы на - Программная реализация решения системы обыкновенных дифференциальных уравнений методом Рунге-Кутта 4-го порядка

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!