Метод Рунге-Кутты-Фельберга

Характеристика модифицированных методов Эйлера. Определение порядка аппроксимации. Рассмотрение адаптивных процедур Рунге-Кутты. Построение фазового портрета в системе координат для поставленной задачи. Определение особенностей пересчета по правилу Рунге.

Рубрика Математика
Вид реферат
Язык русский
Дата добавления 28.10.2017
Размер файла 1,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Курсовой проект по дисциплине

ЧИСЛЕННЫЕ МЕТОДЫ

Метод Рунге-Кутты-Фельберга

Афанасьев Сергей А-13-08

2011 год

Метод Рунге-Кутты-Фельберга

Теория

Методы Рунге-Кутты являются модифицированными методами Эйлера. Они служат для численного решения обыкновенных дифференциальных уравнений и их систем. Наиболее часто реализуется и используется метод Рунге-Кутты 4 порядка точности. Построение схем более высокого порядка приводит к громоздким расчетам и сопряжено с большими вычислительными трудностями. Схема Эйлера, является представителем семейства схем Р-К. Построение схем основано на разложении функции в ряд Тейлора вблизи инвариантной точки, и взятие конечного числа членов разложения.

Пусть дана задача

Тогда приближенное решение задается формулой

Где h - величина шага сетки, а k вычисляется по формуле

…..

Метод определяется числом s и коэффициентами bi, ai,j и ci

Причем

Порядок аппроксимации (точнее порядок сходимости) определить сложно, однако можно определить количество этапов, необходимых для реализации метода.

Конкретно метод Р-К 4 для системы ДУ

имеет следующий вид.

По сути, берется значение методом Эйлера, и уточняется 3 раза. За счет этого возрастает точность вычислений, ценой вычислительных трудностей.

Для метода Рунге-Кутты 5 порядка уравнения будут такими:

Стоит сказать и об адаптивных процедурах. В ходе выполнения процедуры, шаг, для достижения необходимой точности в следующей точке, выбирается автоматически.

Метод Рунге-Кутты-Фельберга, заключается в том, что на каждом шаге метода точность функции определяется разностью значений между результатами методов РК-4 и РК-5 (Поэтому этот метод иногда называют РК-45). Если они отличаются не более чем на е - локальную погрешность, то значение, уточненное по Рунге, считается приближенным значением функции в точке на рассматриваемом шаге.

Реализация

Программа, реализующая адаптивную процедуру Рунге-Кутты 4 порядка. Написана программа на языке Delphi в среде Code Gear 2009

//Класс для метода Рунге-Кутты-Фельдера.

TRunge = class

private

Erange: integer; //кол-во функций в системе

Estart: TRealArr; //Начальные значения

EFirst, ELast: double; //Начальное и конечное значение по оси t

Eeps: double; //Точность

Efun: TArrfun; //Массив функций

EArr: TResArr; //Массив значений функции в точках, больше 0.

EArrNeg: TResArr; //Массив значений функции в точках, меньших 0

EGetInd: integer; //Внутренняя переменная - для быстрого поиска нужного значения

procedure SetRange(const Value: integer); virtual;//Установить количество функций в системе

function GetStart(Index: Integer): double; //Получить начальное значений для функции index

procedure SetStart(Index: Integer; const Value: double);//Установить начальное значение value для функции index

function GetRes(X: double; index: integer): double; //Узнать значение функции index в точке x

function GetResInd(X: double): TRealArr; //Узнать значение всех функций в точке x

function GetCount: integer; //Узнать общее количество точек

function GetLeftInd: integer; //Узнать номер самой левой точки в массиве

function GetRightInd: integer; //Узнать номер самой правой точки

function Value(const x: real; const y: TRealArr; const h: real): TRealArr; //Вычисление значения в следующей точке методом РК-4

function Value5(const x: real; const y: TRealArr; const h: real): TRealArr;//Вычисление значения в следующей точке методом РК-5

procedure SetEps(const Value: double); virtual; //Установить значение точности

function calc(vlast: double; veps: double): TRes; overload; virtual; //Процедура вычисления значения в точке vlast с точностью veps

public

property LeftInd: integer read GetLeftInd; //Левый индекс

property RightInd: integer read GetRightInd; // Правый индекс в массиве точек

function GetInd(v: integer; n: integer): double; //Узнать значение функции v в точке n

property Count: integer read GetCount; //Доступ к количеству точек в результате

property Arr[X: double]: TRealArr read GetResInd; default; //Доступ к значениям функции в точке x

property ArrInd[X: double; index: integer]: double read GetRes; //Доступ к значению конкретной функции index в точке x

property range: integer read Erange write SetRange; //Доступ к количеству функций

property Start[Index: integer]: double read GetStart write SetStart; //Доступ к начальным значениям

property First: double read Efirst write EFirst; //Начальное значение по оси t

property Last: double read ELast write ELast; //Конечное значение по оси t

property eps: double read EEps write SetEps; //Точность вычисления

property Fun: TarrFun read EFun write EFun;//Доступ к массиву функций

constructor Create; virtual;

function Calcat(vfirst, vlast, veps: double): boolean; //Вычислить значение на отрезке с точностью

procedure ProcessMessages;

function CheckDelat(n: integer; f: TFunReal): double; //Проверить отклонение полученной функции от реальной.

end;

Класс TGraphicsRunge = class(TRunge) нужен для изображения графика.

Классы

//Класс для исходной задачи

TProg1 = class(TRunge)

public

constructor Create; override; //В конструкторе описываем те входные данные, которые требуется использовать в конкретной задаче

end;

//Два класса для тестовых примеров

TProg2 = class(TRunge)

public

constructor Create; override;

end;

TProg3 = class(TRunge)

public

constructor Create; override;

end;

Конкретные задачи. В конструкторе определяются начальные условия.

Реализация метода Рунге-Кутты-Фельберга

//Вычисленние одного шага методом Р-К 4

function TRunge.Value(const x: real; const y: TRealArr; const h: real): TRealArr;

var i: integer; //счетчики

k: array of TRealArr;

begin

setlength(k, 4, Erange);

setLength(Result, Erange);

for i:=0 to Erange - 1 do k[0, i]:=Efun[i](x, y);

for i:=0 to Erange - 1 do k[1, i]:=Efun[i](x+h/2, inc(y,h*k[0, i]/2));

for i:=0 to Erange - 1 do k[2, i]:=Efun[i](x+h/2, inc(y,h*k[1, i]/2));

for i:=0 to Erange - 1 do k[3, i]:=Efun[i](x+h, inc(y,h*k[2, i]));

for i:=0 to Erange - 1 do result[i]:=y[i]+h*(k[0, i] + 2* k[1, i]+ 2*k[2, i]+ k[3, i])/6;

end;

function TRunge.Value5(const x: real; const y: TRealArr; const h: real): TRealArr;

var i: integer; //счетчики

k: array of TRealArr;

begin

setlength(k, 6, Erange);

setLength(Result, Erange);

for i:=0 to Erange - 1 do begin

k[0, i]:=EFun[i](x, y);

k[1, i]:=EFun[i](x + 1/4*h, inc(y, h*k[0,i]/4));

k[2, i]:=EFun[i](x + 3/8*h, inc(y, h*(3/32*k[0,i] + 9/32*k[1,i])));

k[3, i]:=EFun[i](x + 12/13*h, inc(y, h*(1932/2197*k[0,i] - 7200/2197*k[1,i] + 7296/2197*k[2,i])));

k[4, i]:=EFun[i](x + h, inc(y, h*(439/216*k[0,i] - 8*k[1,i] + 3680/513*k[2,i] - 845/4104*k[3,i])));

k[5, i]:=EFun[i](x + h/2, inc(y, h*(- 8/27*k[0,i] + 2*k[1,i] - 3544/2565*k[2,i] + 1859/4104*k[3,i] - 11/40*k[4,i])));

result[i] :=y[i] + h*(16/135*k[0,i] + 6656/12825*k[2,i] + 28561/56430*k[3,i] +2/55*k[4,i]-9/50*k[5,i]);

end;

end;

//Проверка,

function checkeps(const a,b: TRealArr): double;

var i: integer;

begin

if length(a) <> length(b) then raise Exception.Create('Неверная длина массива. calc.CheckEps: a-'+inttostr(length(a))+', b-'+inttostr(length(b)));

result:=abs(a[0]-b[0]);

for i := 1 to high(a) do result:=max(result, abs(a[i] - b[i]));

end;

//Выполнение одного шага, со всеми проверками

function TRunge.calc(vlast, veps: double): TRes;

var

h, hmin: double;

Arr: PResArr;

procedure Step;

var tmp, tmp2: TRes;

i: integer;

delta: double;

begin

//Текущее значение функции

tmp.arr:=value(Arr^[High(Arr^)].x,Arr^[High(Arr^)].arr,h);

tmp.x:=Arr^[High(Arr^)].x+h;

tmp2.arr:=value5(Arr^[High(Arr^)].x,Arr^[High(Arr^)].arr,h);

tmp2.x:=tmp.x;

//Если функция по точности нам подходит

delta:=checkeps(tmp2.arr,tmp.Arr)*abs(ELast-EFirst)/abs(hmin);

if delta < Eeps then begin

hmin:=min(hmin, abs(h));

//То добавляем её в результрующий массив

setlength(Arr^, length(Arr^)+1);

setlength(Arr^[High(Arr^)].Arr, Erange);

for i := 0 to Erange-1 do

Arr^[High(Arr^)].Arr[i]:=tmp.arr[i];

Arr^[High(Arr^)].x:=tmp2.x;

//Если точность хорошая, то увеличиваем длину шага

if delta < Eeps/1000 then

h:=2*h;

end else //Если точность не достигнута, то уменьшаем шаг

h:=h/2;

end;

begin

Last:=vlast;

if veps > 0 then

Eeps:=veps;

h:=(Elast-Efirst)/10;

hmin:=abs(h);

if Elast > EFirst then begin

Arr:=@Earr;

while Arr^[High(Arr^)].x < last do begin

step;

end

end else begin

Arr:=@EarrNeg;

while Arr^[High(Arr^)].x > last do begin

step;

end;

end;

result:=Arr^[High(Arr^)];

end;

В связи с некоторыми особенностями реализации и использованием сторонних компонентов построение фазового портрета в системе координат y(x) для поставленной задачи занимает продолжительное время. Тесты

Для задачи 1:

Решением которой будет функция y(x) = sin(x)

Для задачи 2:

Решением этой задачи коши будет функция y(x) = ex+ 1

Исходная задача

Анализ методов

Далее я хочу сравнить несколько адаптивных процедур Рунге-Кутты.

Сравниваются такие методы:

Метод РК-4 с автоматическим выбором шага

Метод РК-5 с автоматическим выбором шага

Метод РК-45

Сравнение будет проводиться на трех тестах.

a)На задаче

Решением которой будет функция y(x) = sin(x)

b) На задаче

Решением этой задачи коши будет функция y(x) = ex+ 1

c) и на исходной задаче.

Целью является выяснить коэффициент, в зависимости от которого следует увеличивать шаг, чтобы достичь лучшей скорости вычисления.

Проблема есть и в функции, для перевода глобальной погрешности в локальную. Проблема актуальна, так как для неадаптивной процедуры этим коэффициентом будет ширина шага. Для адаптивной процедуры ширина шага, как таковая не определена, так как шаг переменный. Здесь этим коэффициентом принята величина, равная отношению длины отрезка к ширине наименьшего из сделанных шагов.

Задача а)

Решением которой будет функция y(x) = sin(x)

Для начала определим наилучший коэффициент, при котором следует увеличивать шаг. Для этого сравним времена вычислений каждой функции на отрезке (-3, 3) с точностью 0,01. В таблицу вынесены основные тесты.

Задача

Коэф.

Рунге-Кутты 4

Рунге-Кутты 5

Рунге-Кутты-Фельберга

Задача А

10

4 ms

2 ms

8 ms

100

3 ms

2 ms

7 ms

1000

2 ms

2 ms

8ms

10000

2 ms

1 ms

7 ms

Задача B

10

24ms

29 ms

20 ms

100

10 ms

13 ms

20 ms

1000

1 ms

13 ms

20 ms

10000

1 ms

13 ms

20 ms

Задача C

10

26 ms

21 ms

95 ms

100

25 ms

10 ms

100 ms

1000

25 ms

10 ms

95 ms

10000

25 ms

10 ms

101 ms

Результаты на относительно малом отрезке при достаточно больших значениях коэффициента отличаются не более чем на 2 ms. Так же зависит и вида функции. Актуальнее всего брать коэффициент 1000 для метода Р-К4.

Для метода РК-5 этот коэффициент особой роли не играет, в связи с этим был проведен эксперимент, в основе которого лежит то, что шаг не может увеличиваться. И на данных тестах результаты не изменились. Это говорит о том, что тестируемые функции имеют очень мало участков с достаточно маленькой производной. На экспоненте метод РК-5 проявил себя не очень хорошо.

Про метод РКФ стоит сказать отдельно. Если в РК4 и РК5 на каждом шаге делалось уточнение по Рунге, то в РК-45 этого сделать нельзя. Так же на каждом шаге производится сравнение разности значений с локальной погрешностью, а не её оценка по правилу Рунге, что тоже повышает точность метода (из-за 2 в степени порядок точности). Так же было замечено, что использование методов РК-4 и РК-5 на больших отрезках на задаче 2 занимают гораздо больше времени, чем использование метода РКФ

Отмечу еще, что мною не была обнаружена явная связь между локальной погрешностью и глобальной. Иными словами не существует гарантий, что метод с заданной точностью достигнет этой точности.

Для этого был проведен еще один эксперимент. В таблице приведены скорости вычислений значений и практическая погрешность. По понятным причинам эксперимент проводился на 2 задачах. На отрезке [-5,5] была задана точность вычисления 0,01, а на отрезке [-1,1] - 0,0001.

Задача

Отрезок

Рунге-Кутты 4

Рунге-Кутты 5

Рунге-Кутты-Фельберга

Задача А

х?[-5,5]

4 ms 0,18970

4ms 0,3577

15 ms 0,04494

х?[-1,1]

520 ms 0,001435

12 ms 0,0064

57 ms 0,000698

Задача B

х?[-5,5]

1 ms 0,1259…

1 ms 0,228

23 ms 5 разрядов

х?[-1,1]

1 ms 5 разрядов

3 ms 0,0008

82 ms 11 разрядов

Из этой таблицы видно, что метод Рунге-Кутты-Фельберга гораздо точнее, чем два других метода. Так что в следующей таблице приведены результаты вычислений каждым из методов с некоторым изменением. В методах РК-4 и РК-5 проверка достижения точности на каждом шаге оценивается не локальной погрешностью по Рунге, а разностью значений между результатами функций с разными шагами.

Таким образом, была повышена локальная точность.

Задача

Отрезок

Рунге-Кутты 4

Рунге-Кутты 5

Рунге-Кутты-Фельберга

Задача А

х?[-5,5]

68 ms 0,0106

98ms 0,01107

15 ms 0,04494

х?[-1,1]

269 ms 0,000207

404 ms 0,00019

57 ms 0,000698

Задача B

х?[-5,5]

1 ms 0,004006

7 ms 0,06

23 ms 5 разрядов

х?[-1,1]

1 ms 5 разрядов

71 ms 0,00053

82 ms 11 разрядов

эйлер рунге адаптивный аппроксимация

На первой задаче метод РК-45 работает гораздо быстрее двух других методов, однако его точность меньше. На второй задаче обратный результат.

Время вычисления методами РК-4 и РК-5 больше, чем у РКФ, так как на каждом шаге «простой» процедуры помимо вычисления следующего значения, делается пересчет, и в сумме процедура выполняется 3 раза, в то время как в методе РК-45 выполняется вычисление значения методами РК-4 и РК-5 - то есть 2 раза.

У методов РК-4 и РК-5 есть очевидный плюс - пересчет по правилу Рунге, который, как выяснилось и подтвердилось экспериментами, играет очень большую роль.

Размещено на Allbest.ru

...

Подобные документы

  • Изучение методов Рунге-Кутты четвертого порядка с автоматическим выбором длины шага интегрирования для решения дифференциальных уравнений. Оценка погрешности и сходимость методов, оптимальный выбор шага. Листинг программы для ЭВМ, результаты, иллюстрации.

    курсовая работа [2,9 M], добавлен 14.09.2010

  • Основные методы Рунге-Кутта: построение класса расчетных формул. Расчетная формула метода Эйлера. Получение различных методов Рунге-Кутта с погрешностью второго порядка малости при произвольном задавании параметров. Особенности повышения порядка точности.

    реферат [78,4 K], добавлен 18.04.2015

  • Аналитическое и компьютерное исследования уравнения и модели Ван-дер-Поля. Сущность и особенности применения методов Эйлера и Рунге-Кутта 4 порядка. Сравнение точности метода Эйлера и Рунге-Кутта на одном графике, рисуя фазовые траектории из 1 точки.

    курсовая работа [341,7 K], добавлен 06.10.2012

  • Теоретическое обоснование расчетных формул. Задача Коши для дифференциального уравнения первого порядка. Метод Рунге-Кутта. Ломаная Эйлера. Построение схем различного порядка точности. Выбор шага. Апостериорная оценка погрешности. Правило Рунге.

    курсовая работа [111,1 K], добавлен 13.11.2011

  • Общая характеристика и особенности двух методов решения обычных дифференциальных уравнений – Эйлера первого порядка точности и Рунге-Кутта четвёртого порядка точности. Листинг программы для решения обычного дифференциального уравнения в Visual Basic.

    курсовая работа [1,1 M], добавлен 04.06.2010

  • Составление диагональной системы способом прогонки, нахождение решения задачи Коши для дифференциального уравнения на сетке методом Эйлера и классическим методом Рунге-Кутта. Построение кубического сплайна интерполирующей функции равномерного разбиения.

    практическая работа [46,1 K], добавлен 06.06.2011

  • Численное решение уравнения методом Эйлера и Рунге-Кутта в Excel. Программа на языке Turbo Pascal. Блок-схема алгоритма. Метод Рунге-Кутта для дифференциального уравнения второго порядка. Модель типа "хищник-жертва" с учетом внутривидового взаимодействия.

    курсовая работа [391,5 K], добавлен 01.03.2012

  • Получение точного решения дифференциального уравнения вручную, операторным методом, приближенное решение с помощью рядов (до 5 элемента ряда) на заданном интервале, графическое решение. Относительная и абсолютная погрешность методов Эйлера и Рунге-Кутты.

    курсовая работа [990,8 K], добавлен 17.07.2014

  • Практическое решение дифференциальных уравнений в системе MathCAD методами Рунге—Кутты четвертого порядка для решения уравнения первого порядка, Булирша — Штера - системы обыкновенных дифференциальных уравнений первого порядка и Odesolve и их графики.

    лабораторная работа [380,9 K], добавлен 23.07.2012

  • Решение задачи Коши для дифференциального уравнения. Погрешность приближенных решений. Функция, реализующая явный метод Эйлера. Вычисление погрешности по правилу Рунге. Решение дифференциальных уравнений второго порядка. Условие устойчивости для матрицы.

    контрольная работа [177,1 K], добавлен 13.06.2012

  • Метод Гаусса, метод прогонки, нелинейное уравнение. Метод вращения Якоби. Интерполяционный многочлен Лагранжа и Ньютона. Метод наименьших квадратов, интерполяция сплайнами. Дифференцирование многочленами, метод Монте-Карло и Рунге-Кутты, краевая задача.

    курсовая работа [4,8 M], добавлен 23.05.2013

  • Задачи Коши и методы их решения. Общие понятия, сходимость явных способов типа Рунге-Кутты, практическая оценка погрешности приближенного решения. Автоматический выбор шага интегрирования, анализ брюсселятора и метод Зонневельда для его расчета.

    курсовая работа [1,7 M], добавлен 03.11.2011

  • Розгляд найбільш відомих скінченно-різнецевих методів рішення рівнянь руху з непереривною силою: чисельна ітерація рівнянь Ньютона; алгоритм Бімана і Шофілда; метод Рунге-Кутта; методи Адамса, Крилова, Чаплигіна. Програма Рунге-Кутта на мові С#.

    курсовая работа [359,5 K], добавлен 27.01.2011

  • Умови та особливості використання модифікованого методу Ейлера для отримання другої похідної в кінцево-різницевій формі. Два обчислення функції за крок. Метод Ейлера-Коші як частковий випадок методу Рунге-Кутта. Метод четвертого порядку точності.

    презентация [171,0 K], добавлен 06.02.2014

  • Вычисление производной по ее определению, с помощью конечных разностей и на основе первой интерполяционной формулы Ньютона. Интерполяционные многочлены Лагранжа и их применение в численном дифференцировании. Метод Рунге-Кутта (четвертого порядка).

    реферат [71,6 K], добавлен 06.03.2011

  • Описание метода сведения краевой задачи к задаче Коши. Решение системы из двух уравнений с четырьмя неизвестными. Метод Рунге-Кутта. Расчет максимальной погрешности и выполнение проверки точности. Метод конечных разностей. Описание полученных результатов.

    курсовая работа [245,2 K], добавлен 10.07.2012

  • Крайова задача для звичайного диференціального рівняння. Метод Рунге-Кутта, метод прогнозу і корекції та метод кінцевих різниць для розв’язання лінійних крайових задач. Реалізація пакетом Maple. Оцінка похибки й уточнення отриманих результатів.

    контрольная работа [340,6 K], добавлен 14.08.2010

  • Формирование системы их пяти уравнений по заданным параметрам, ее решение методом Гаусса с выбором главного элемента. Интерполяционный многочлен Ньютона. Численное интегрирование. Решение нелинейных уравнений. Метод Рунге-Кутта четвертого порядка.

    контрольная работа [115,5 K], добавлен 27.05.2013

  • Моделирование как метод познания. Классификаций и характеристика моделей: вещественные, энергетические и информационные. Математическая модель "хищники-жертвы", ее сущность. Порядок проверки и корректировки модели. Решение уравнений методом Рунге-Кутта.

    методичка [283,3 K], добавлен 30.04.2014

  • Градиентные уравнения и уравнения в вариациях, функционалы метода наименьших квадратов. Численное решение градиентных уравнений: полиномиальные системы, метод рядов Тейлора и метод Рунге-Кутта. Числовые модели осциллирующих процессов в живой природе.

    реферат [221,4 K], добавлен 10.08.2010

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