Почему метод рунге кутта точнее. Методы рунге-кутты

Ме́тоды Ру́нге - Ку́тты (распространено неправильное название Ме́тоды Ру́нге - Ку́тта или же Ме́тоды Ру́нге - Кутта́ ) - важное семейство численных алгоритмов решения обыкновенных дифференциальных уравнений и их систем. Данные итеративные методы явного и неявного приближённого вычисления были разработаны около 1900 года немецкими математиками К. Рунге и М. В. Куттой .

Формально, методом Рунге - Кутты является модифицированный и исправленный метод Эйлера , они представляют собой схемы второго порядка точности. Существуют стандартные схемы третьего порядка, не получившие широкого распространения. Наиболее часто используется и реализована в различных математических пакетах (Maple , MathCAD , Maxima) стандартная схема четвёртого порядка. Иногда при выполнении расчётов с повышенной точностью применяются схемы пятого и шестого порядков . Построение схем более высокого порядка сопряжено с большими вычислительными трудностями . Методы седьмого порядка должны иметь по меньшей мере девять стадий, в схему восьмого порядка входит 11 стадий. Хотя схемы девятого порядка не имеют большой практической значимости, неизвестно, сколько стадий необходимо для достижения этого порядка точности. Аналогичная задача существует для схем десятого и более высоких порядков .

Классический метод Рунге - Кутты четвёртого порядка

Метод Рунге - Кутты четвёртого порядка столь широко распространён, что его часто называют просто методом Рунге - Кутты.

Численное решение данного примера дает чистый ноль при условии | r(z) | < 1 с z = h\lambda. Множество таких r называется областью абсолютной устойчивости . В частности, метод называется A-стабильным если все r с \textrm{Re}(z) < 0 находятся в области абсолютной стабильности. Функция устойчивости явного метода Рунге-Кутта является многочленом, поэтому явные методы Рунге-Кутты в принципе не могут быть стабильными.

Если метод имеет порядок p, то функция стабильности удовлетворяет условию r(z) = \textrm{e}^z + O(z^{p+1}) при z \to 0 . Таким образом, представляет интерес отношение многочленов данной степени, приближающее экспоненциальную функцию наилучшим образом. Эти отношения известны как аппроксимации Паде . Аппроксимация Паде с числителем степени m и знаменателем степени n А-устойчива, тогда и только тогда, когда m \le n \le m + 2.

s-стадийный метод Гаусса - Лежандра с имеет порядок 2s, поэтому его функция устойчивости является приближением Паде m=n=s. Отсюда следует, что метод является A-устойчивым. Это показывает, что A-устойчивые методы Рунге-Кутты могут иметь сколь угодно высокий порядок. В отличие от этого, порядок А-устойчивости метода Адамса не может превышать два.

Произношение

Согласно грамматическим нормам русского языка, фамилия Ку́тта склоняется, поэтому говорят: «Метод Ру́нге - Ку́тты». Правила русской грамматики предписывают склонять все фамилии (в том числе и мужские), оканчивающиеся на -а, -я, которым предшествует согласный. Единственное исключение - фамилии французского происхождения с ударением на последнем слоге типа Дюма́, Золя́ . Однако, иногда встречается несклоняемый вариант «Метод Ру́нге - Ку́тта» (например, в книге ).

Пример решения на алгоритмических языках программирования

public class MainClass { public static void main(String args) { int k = 2; double Xo, Yo, Y1, Zo, Z1; double k1, k2, k4, k3, h; double q1, q2, q4, q3; /* *Начальные условия */ Xo = 0; Yo = 0.8; Zo = 2; h = 0.1; // шаг System.out.println("\tX\t\tY\t\tZ"); for(; r(Xo,2)<1.0; Xo += h){ k1 = h * f(Xo, Yo, Zo); q1 = h * g(Xo, Yo, Zo); k2 = h * f(Xo + h/2.0, Yo + q1/2.0, Zo + k1/2.0); q2 = h * g(Xo + h/2.0, Yo + q1/2.0, Zo + k1/2.0); k3 = h * f(Xo + h/2.0, Yo + q2/2.0, Zo + k2/2.0); q3 = h * g(Xo + h/2.0, Yo + q2/2.0, Zo + k2/2.0); k4 = h * f(Xo + h, Yo + q3, Zo + k3); q4 = h * g(Xo + h, Yo + q3, Zo + k3); Z1 = Zo + (k1 + 2.0*k2 + 2.0*k3 + k4)/6.0; Y1 = Yo + (q1 + 2.0*q2 + 2.0*q3 + q4)/6.0; System.out.println("\t" + r(Xo + h, k) + "\t\t" + r(Y1 ,k) + "\t\t" + r(Z1 ,k)); Yo = Y1; Zo = Z1; } } /** * функция для округления и отбрасывания "хвоста" */ public static double r(double value, int k){ return (double)Math.round((Math.pow(10, k)*value))/Math.pow(10, k); } /** * функции, которые получаются из системы */ public static double f(double x, double y, double z){ return (Math.cos(3*x) - 4*y); } public static double g(double x, double y, double z){ return (z); } }

using System; using System.Collections.Generic; namespace PRJ_RungeKutta { ///

/// Реализация метода Ру́нге - Ку́тты для обыкновенного дифференциального уравнения /// public abstract class RungeKutta { /// /// Текущее время /// public double t; /// /// Искомое решение Y - само решение, Y[i] - i-тая производная решения /// public double Y; /// /// Внутренние переменные /// double YY, Y1, Y2, Y3, Y4; protected double FY; /// /// Конструктор /// /// размерность системы public RungeKutta(uint N) { Init(N); } /// /// Конструктор /// public RungeKutta(){} /// /// Выделение памяти под рабочие массивы /// /// Размерность массивов protected void Init(uint N) { Y = new double[N]; YY = new double[N]; Y1 = new double[N]; Y2 = new double[N]; Y3 = new double[N]; Y4 = new double[N]; FY = new double[N]; } /// /// Установка начальных условий /// /// Начальное время /// Начальное условие public void SetInit(double t0, double Y0) { t = t0; if (Y == null) Init((uint)Y0.Length); for (int i = 0; i < Y.Length; i++) Y[i] = Y0[i]; } /// /// Расчет правых частей системы /// /// текущее время /// вектор решения /// правая часть abstract public double F(double t, double Y); /// /// Следующий шаг метода Рунге-Кутта /// /// текущий шаг по времени (может быть переменным) public void NextStep(double dt) { int i; if (dt < 0) return; // рассчитать Y1 Y1 = F(t, Y); for (i = 0; i < Y.Length; i++) YY[i] = Y[i] + Y1[i] * (dt / 2.0); // рассчитать Y2 Y2 = F(t + dt / 2.0, YY); for (i = 0; i < Y.Length; i++) YY[i] = Y[i] + Y2[i] * (dt / 2.0); // рассчитать Y3 Y3 = F(t + dt / 2.0, YY); for (i = 0; i < Y.Length; i++) YY[i] = Y[i] + Y3[i] * dt; // рассчитать Y4 Y4 = F(t + dt, YY); // рассчитать решение на новом шаге for (i = 0; i < Y.Length; i++) Y[i] = Y[i] + dt / 6.0 * (Y1[i] + 2.0 * Y2[i] + 2.0 * Y3[i] + Y4[i]); // рассчитать текущее время t = t + dt; } } class TMyRK: RungeKutta { public TMyRK(uint N) { Init(N); } /// /// пример математический маятник /// y""(t)+y(t)=0 /// /// Время /// Решение /// Правая часть public override double F(double t, double Y) { FY = Y; FY = -Y; return FY; } /// /// Пример использования /// static public void Test() { // Шаг по времени double dt = 0.001; // Объект метода TMyRK task = new TMyRK(2); // Определим начальные условия y(0)=0, y"(0)=1 задачи double Y0 = { 0, 1 }; // Установим начальные условия задачи task.SetInit(0, Y0); // решаем до 15 секунд while (task.t <= 15) { Console.WriteLine("Time = {0:F5}; Func = {1:F8}; d Func / d x = {2:F8}", task.t, task.Y, task.Y); // вывести t, y, y" // рассчитать на следующем шаге, шаг интегрирования task.NextStep(dt); } Console.ReadLine(); } } class Program { static void Main(string args) { TMyRK.Test(); } } }

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

Пример решения в среде MATLAB

Решение систем дифференциальных уравнений методом Рунге - Кутты является одним из самых распространённых численных методов решений в технике. В среде MATLAB реализована его одна из разновидностей - метод Дорманда - Принса . Для решения системы уравнений необходимо сначала записать функцию, вычисляющую производные, т.е. функции y = g(x,y,z) и z = cos(3x) - 4y = f(x,y,z) , о чём сказано выше. В одном из каталогов, к которому имеется доступ из системы MATLAB нужно создать текстовый файл с именем (например) runge.m со следующим содержимым (для MATLAB версии 5.3):

Имя файла и имя функции должно совпадать, но оно может быть любым неиспользуемым ранее.

Затем необходимо создать главный файл c именем, например, main.m , который будет выполнять основные вычисления. Этот главный файл будет содержать следующий текст:

clear; clc; % Очистка памяти и экрана h = 0,1; % Шаг интегрирования x_fin = 8; % Конечное время интегрирования y0 = 0,8; % Начальное значение функции Dy0 = 2; % Начальное значение производной функции = ode45("runge", , ); % Метод Рунге - Кутты plot(x, y, "LineWidth", 2); grid; % Построение графика и сетки legend("y(x)", "y""(x)", 0); % Легенда на графике

Так как MATLAB ориентирован на работу с матрицами, решение по методу Рунге - Кутты очень легко выполняется для целого ряда x как, например, в приведенном примере программы. Здесь решение - график функции в пределах времён от 0 до x_fin . Переменные x и y , полученные в результате работы функции ODE45 , есть векторы значений. Очевидно, что решение конкретно заданного выше примера - второй элемент x , так как первое значение 0 , шаг интегрирование h = 0,1 , а интересуемое значение x = 0,1 . Следующая запись в командном окне MATLAB даст искомое решение:

Ответ: y1 = 0,98768

Напишите отзыв о статье "Метод Рунге - Кутты"

Ссылки

Отрывок, характеризующий Метод Рунге - Кутты

– Вы не знаете, Болконский, – обратился Билибин к князю Андрею, – что все ужасы французской армии (я чуть было не сказал – русской армии) – ничто в сравнении с тем, что наделал между женщинами этот человек.
– La femme est la compagne de l"homme, [Женщина – подруга мужчины,] – произнес князь Ипполит и стал смотреть в лорнет на свои поднятые ноги.
Билибин и наши расхохотались, глядя в глаза Ипполиту. Князь Андрей видел, что этот Ипполит, которого он (должно было признаться) почти ревновал к своей жене, был шутом в этом обществе.
– Нет, я должен вас угостить Курагиным, – сказал Билибин тихо Болконскому. – Он прелестен, когда рассуждает о политике, надо видеть эту важность.
Он подсел к Ипполиту и, собрав на лбу свои складки, завел с ним разговор о политике. Князь Андрей и другие обступили обоих.
– Le cabinet de Berlin ne peut pas exprimer un sentiment d"alliance, – начал Ипполит, значительно оглядывая всех, – sans exprimer… comme dans sa derieniere note… vous comprenez… vous comprenez… et puis si sa Majeste l"Empereur ne deroge pas au principe de notre alliance… [Берлинский кабинет не может выразить свое мнение о союзе, не выражая… как в своей последней ноте… вы понимаете… вы понимаете… впрочем, если его величество император не изменит сущности нашего союза…]
– Attendez, je n"ai pas fini… – сказал он князю Андрею, хватая его за руку. – Je suppose que l"intervention sera plus forte que la non intervention. Et… – Он помолчал. – On ne pourra pas imputer a la fin de non recevoir notre depeche du 28 novembre. Voila comment tout cela finira. [Подождите, я не кончил. Я думаю, что вмешательство будет прочнее чем невмешательство И… Невозможно считать дело оконченным непринятием нашей депеши от 28 ноября. Чем то всё это кончится.]
И он отпустил руку Болконского, показывая тем, что теперь он совсем кончил.
– Demosthenes, je te reconnais au caillou que tu as cache dans ta bouche d"or! [Демосфен, я узнаю тебя по камешку, который ты скрываешь в своих золотых устах!] – сказал Билибин, y которого шапка волос подвинулась на голове от удовольствия.
Все засмеялись. Ипполит смеялся громче всех. Он, видимо, страдал, задыхался, но не мог удержаться от дикого смеха, растягивающего его всегда неподвижное лицо.
– Ну вот что, господа, – сказал Билибин, – Болконский мой гость в доме и здесь в Брюнне, и я хочу его угостить, сколько могу, всеми радостями здешней жизни. Ежели бы мы были в Брюнне, это было бы легко; но здесь, dans ce vilain trou morave [в этой скверной моравской дыре], это труднее, и я прошу у всех вас помощи. Il faut lui faire les honneurs de Brunn. [Надо ему показать Брюнн.] Вы возьмите на себя театр, я – общество, вы, Ипполит, разумеется, – женщин.
– Надо ему показать Амели, прелесть! – сказал один из наших, целуя кончики пальцев.
– Вообще этого кровожадного солдата, – сказал Билибин, – надо обратить к более человеколюбивым взглядам.
– Едва ли я воспользуюсь вашим гостеприимством, господа, и теперь мне пора ехать, – взглядывая на часы, сказал Болконский.
– Куда?
– К императору.
– О! о! о!
– Ну, до свидания, Болконский! До свидания, князь; приезжайте же обедать раньше, – пocлшaлиcь голоса. – Мы беремся за вас.
– Старайтесь как можно более расхваливать порядок в доставлении провианта и маршрутов, когда будете говорить с императором, – сказал Билибин, провожая до передней Болконского.
– И желал бы хвалить, но не могу, сколько знаю, – улыбаясь отвечал Болконский.
– Ну, вообще как можно больше говорите. Его страсть – аудиенции; а говорить сам он не любит и не умеет, как увидите.

На выходе император Франц только пристально вгляделся в лицо князя Андрея, стоявшего в назначенном месте между австрийскими офицерами, и кивнул ему своей длинной головой. Но после выхода вчерашний флигель адъютант с учтивостью передал Болконскому желание императора дать ему аудиенцию.
Император Франц принял его, стоя посредине комнаты. Перед тем как начинать разговор, князя Андрея поразило то, что император как будто смешался, не зная, что сказать, и покраснел.
– Скажите, когда началось сражение? – спросил он поспешно.
Князь Андрей отвечал. После этого вопроса следовали другие, столь же простые вопросы: «здоров ли Кутузов? как давно выехал он из Кремса?» и т. п. Император говорил с таким выражением, как будто вся цель его состояла только в том, чтобы сделать известное количество вопросов. Ответы же на эти вопросы, как было слишком очевидно, не могли интересовать его.
– В котором часу началось сражение? – спросил император.
– Не могу донести вашему величеству, в котором часу началось сражение с фронта, но в Дюренштейне, где я находился, войско начало атаку в 6 часу вечера, – сказал Болконский, оживляясь и при этом случае предполагая, что ему удастся представить уже готовое в его голове правдивое описание всего того, что он знал и видел.
Но император улыбнулся и перебил его:
– Сколько миль?
– Откуда и докуда, ваше величество?
– От Дюренштейна до Кремса?
– Три с половиною мили, ваше величество.
– Французы оставили левый берег?
– Как доносили лазутчики, в ночь на плотах переправились последние.
– Достаточно ли фуража в Кремсе?
– Фураж не был доставлен в том количестве…
Император перебил его.
– В котором часу убит генерал Шмит?…
– В семь часов, кажется.
– В 7 часов. Очень печально! Очень печально!
Император сказал, что он благодарит, и поклонился. Князь Андрей вышел и тотчас же со всех сторон был окружен придворными. Со всех сторон глядели на него ласковые глаза и слышались ласковые слова. Вчерашний флигель адъютант делал ему упреки, зачем он не остановился во дворце, и предлагал ему свой дом. Военный министр подошел, поздравляя его с орденом Марии Терезии З й степени, которым жаловал его император. Камергер императрицы приглашал его к ее величеству. Эрцгерцогиня тоже желала его видеть. Он не знал, кому отвечать, и несколько секунд собирался с мыслями. Русский посланник взял его за плечо, отвел к окну и стал говорить с ним.
Вопреки словам Билибина, известие, привезенное им, было принято радостно. Назначено было благодарственное молебствие. Кутузов был награжден Марией Терезией большого креста, и вся армия получила награды. Болконский получал приглашения со всех сторон и всё утро должен был делать визиты главным сановникам Австрии. Окончив свои визиты в пятом часу вечера, мысленно сочиняя письмо отцу о сражении и о своей поездке в Брюнн, князь Андрей возвращался домой к Билибину. У крыльца дома, занимаемого Билибиным, стояла до половины уложенная вещами бричка, и Франц, слуга Билибина, с трудом таща чемодан, вышел из двери.
Прежде чем ехать к Билибину, князь Андрей поехал в книжную лавку запастись на поход книгами и засиделся в лавке.
– Что такое? – спросил Болконский.
– Ach, Erlaucht? – сказал Франц, с трудом взваливая чемодан в бричку. – Wir ziehen noch weiter. Der Bosewicht ist schon wieder hinter uns her! [Ах, ваше сиятельство! Мы отправляемся еще далее. Злодей уж опять за нами по пятам.]
– Что такое? Что? – спрашивал князь Андрей.
Билибин вышел навстречу Болконскому. На всегда спокойном лице Билибина было волнение.
– Non, non, avouez que c"est charmant, – говорил он, – cette histoire du pont de Thabor (мост в Вене). Ils l"ont passe sans coup ferir. [Нет, нет, признайтесь, что это прелесть, эта история с Таборским мостом. Они перешли его без сопротивления.]
Князь Андрей ничего не понимал.
– Да откуда же вы, что вы не знаете того, что уже знают все кучера в городе?
– Я от эрцгерцогини. Там я ничего не слыхал.
– И не видали, что везде укладываются?
– Не видал… Да в чем дело? – нетерпеливо спросил князь Андрей.
– В чем дело? Дело в том, что французы перешли мост, который защищает Ауэсперг, и мост не взорвали, так что Мюрат бежит теперь по дороге к Брюнну, и нынче завтра они будут здесь.
– Как здесь? Да как же не взорвали мост, когда он минирован?
– А это я у вас спрашиваю. Этого никто, и сам Бонапарте, не знает.
Болконский пожал плечами.
– Но ежели мост перейден, значит, и армия погибла: она будет отрезана, – сказал он.
– В этом то и штука, – отвечал Билибин. – Слушайте. Вступают французы в Вену, как я вам говорил. Всё очень хорошо. На другой день, то есть вчера, господа маршалы: Мюрат Ланн и Бельяр, садятся верхом и отправляются на мост. (Заметьте, все трое гасконцы.) Господа, – говорит один, – вы знаете, что Таборский мост минирован и контраминирован, и что перед ним грозный tete de pont и пятнадцать тысяч войска, которому велено взорвать мост и нас не пускать. Но нашему государю императору Наполеону будет приятно, ежели мы возьмем этот мост. Проедемте втроем и возьмем этот мост. – Поедемте, говорят другие; и они отправляются и берут мост, переходят его и теперь со всею армией по сю сторону Дуная направляются на нас, на вас и на ваши сообщения.
– Полноте шутить, – грустно и серьезно сказал князь Андрей.
Известие это было горестно и вместе с тем приятно князю Андрею.
Как только он узнал, что русская армия находится в таком безнадежном положении, ему пришло в голову, что ему то именно предназначено вывести русскую армию из этого положения, что вот он, тот Тулон, который выведет его из рядов неизвестных офицеров и откроет ему первый путь к славе! Слушая Билибина, он соображал уже, как, приехав к армии, он на военном совете подаст мнение, которое одно спасет армию, и как ему одному будет поручено исполнение этого плана.
– Полноте шутить, – сказал он.
– Не шучу, – продолжал Билибин, – ничего нет справедливее и печальнее. Господа эти приезжают на мост одни и поднимают белые платки; уверяют, что перемирие, и что они, маршалы, едут для переговоров с князем Ауэрспергом. Дежурный офицер пускает их в tete de pont. [мостовое укрепление.] Они рассказывают ему тысячу гасконских глупостей: говорят, что война кончена, что император Франц назначил свидание Бонапарту, что они желают видеть князя Ауэрсперга, и тысячу гасконад и проч. Офицер посылает за Ауэрспергом; господа эти обнимают офицеров, шутят, садятся на пушки, а между тем французский баталион незамеченный входит на мост, сбрасывает мешки с горючими веществами в воду и подходит к tete de pont. Наконец, является сам генерал лейтенант, наш милый князь Ауэрсперг фон Маутерн. «Милый неприятель! Цвет австрийского воинства, герой турецких войн! Вражда кончена, мы можем подать друг другу руку… император Наполеон сгорает желанием узнать князя Ауэрсперга». Одним словом, эти господа, не даром гасконцы, так забрасывают Ауэрсперга прекрасными словами, он так прельщен своею столь быстро установившеюся интимностью с французскими маршалами, так ослеплен видом мантии и страусовых перьев Мюрата, qu"il n"y voit que du feu, et oubl celui qu"il devait faire faire sur l"ennemi. [Что он видит только их огонь и забывает о своем, о том, который он обязан был открыть против неприятеля.] (Несмотря на живость своей речи, Билибин не забыл приостановиться после этого mot, чтобы дать время оценить его.) Французский баталион вбегает в tete de pont, заколачивают пушки, и мост взят. Нет, но что лучше всего, – продолжал он, успокоиваясь в своем волнении прелестью собственного рассказа, – это то, что сержант, приставленный к той пушке, по сигналу которой должно было зажигать мины и взрывать мост, сержант этот, увидав, что французские войска бегут на мост, хотел уже стрелять, но Ланн отвел его руку. Сержант, который, видно, был умнее своего генерала, подходит к Ауэрспергу и говорит: «Князь, вас обманывают, вот французы!» Мюрат видит, что дело проиграно, ежели дать говорить сержанту. Он с удивлением (настоящий гасконец) обращается к Ауэрспергу: «Я не узнаю столь хваленую в мире австрийскую дисциплину, – говорит он, – и вы позволяете так говорить с вами низшему чину!» C"est genial. Le prince d"Auersperg se pique d"honneur et fait mettre le sergent aux arrets. Non, mais avouez que c"est charmant toute cette histoire du pont de Thabor. Ce n"est ni betise, ni lachete… [Это гениально. Князь Ауэрсперг оскорбляется и приказывает арестовать сержанта. Нет, признайтесь, что это прелесть, вся эта история с мостом. Это не то что глупость, не то что подлость…]
– С"est trahison peut etre, [Быть может, измена,] – сказал князь Андрей, живо воображая себе серые шинели, раны, пороховой дым, звуки пальбы и славу, которая ожидает его.
– Non plus. Cela met la cour dans de trop mauvais draps, – продолжал Билибин. – Ce n"est ni trahison, ni lachete, ni betise; c"est comme a Ulm… – Он как будто задумался, отыскивая выражение: – c"est… c"est du Mack. Nous sommes mackes , [Также нет. Это ставит двор в самое нелепое положение; это ни измена, ни подлость, ни глупость; это как при Ульме, это… это Маковщина. Мы обмаковались. ] – заключил он, чувствуя, что он сказал un mot, и свежее mot, такое mot, которое будет повторяться.
Собранные до тех пор складки на лбу быстро распустились в знак удовольствия, и он, слегка улыбаясь, стал рассматривать свои ногти.
– Куда вы? – сказал он вдруг, обращаясь к князю Андрею, который встал и направился в свою комнату.
– Я еду.
– Куда?
– В армию.
– Да вы хотели остаться еще два дня?
– А теперь я еду сейчас.
И князь Андрей, сделав распоряжение об отъезде, ушел в свою комнату.
– Знаете что, мой милый, – сказал Билибин, входя к нему в комнату. – Я подумал об вас. Зачем вы поедете?
И в доказательство неопровержимости этого довода складки все сбежали с лица.
Князь Андрей вопросительно посмотрел на своего собеседника и ничего не ответил.
– Зачем вы поедете? Я знаю, вы думаете, что ваш долг – скакать в армию теперь, когда армия в опасности. Я это понимаю, mon cher, c"est de l"heroisme. [мой дорогой, это героизм.]
– Нисколько, – сказал князь Андрей.
– Но вы un philoSophiee, [философ,] будьте же им вполне, посмотрите на вещи с другой стороны, и вы увидите, что ваш долг, напротив, беречь себя. Предоставьте это другим, которые ни на что более не годны… Вам не велено приезжать назад, и отсюда вас не отпустили; стало быть, вы можете остаться и ехать с нами, куда нас повлечет наша несчастная судьба. Говорят, едут в Ольмюц. А Ольмюц очень милый город. И мы с вами вместе спокойно поедем в моей коляске.
– Перестаньте шутить, Билибин, – сказал Болконский.
– Я говорю вам искренно и дружески. Рассудите. Куда и для чего вы поедете теперь, когда вы можете оставаться здесь? Вас ожидает одно из двух (он собрал кожу над левым виском): или не доедете до армии и мир будет заключен, или поражение и срам со всею кутузовскою армией.
И Билибин распустил кожу, чувствуя, что дилемма его неопровержима.
– Этого я не могу рассудить, – холодно сказал князь Андрей, а подумал: «еду для того, чтобы спасти армию».
– Mon cher, vous etes un heros, [Мой дорогой, вы – герой,] – сказал Билибин.

В ту же ночь, откланявшись военному министру, Болконский ехал в армию, сам не зная, где он найдет ее, и опасаясь по дороге к Кремсу быть перехваченным французами.
В Брюнне всё придворное население укладывалось, и уже отправлялись тяжести в Ольмюц. Около Эцельсдорфа князь Андрей выехал на дорогу, по которой с величайшею поспешностью и в величайшем беспорядке двигалась русская армия. Дорога была так запружена повозками, что невозможно было ехать в экипаже. Взяв у казачьего начальника лошадь и казака, князь Андрей, голодный и усталый, обгоняя обозы, ехал отыскивать главнокомандующего и свою повозку. Самые зловещие слухи о положении армии доходили до него дорогой, и вид беспорядочно бегущей армии подтверждал эти слухи.

Суть метода Эйлера заключается в переходе от бесконечно малых приращений в уравнении к конечным: (1)

т.е. в замене производной приближенным конечно-разностным отношением:

где h = ∆х - шаг интегрирования.

Отсюда (3)

Рассматривая приближенное решение в точке как новые начальные условия, можно по формуле (3) найти значение искомой функции у(х) в следующей точке. В общем случае формула Эйлера имеет вид: (4)

Метод Эйлера может быть интерпретирован геометрически следующим образом: функцию у(х) заменяют ломаной, представляющей собой отрезки касательных к этой функции в узлах (рис. 5.1).

Рис. 5.1. Метод Эйлера

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

Методы Рунге-Кутта второго порядка

Методы Рунге-Кутта второго порядка основаны на разложении функции у(х) в ряд Тейлора и учете трех его первых членов (до второй производной включительно).

Метод Рунге-Кутта второго порядка с полным шагом реализуется по формуле:

Его геометрическая интерпретация (рис. 6.1.) заключается в следующем:

1. Приближенно вычисляют значение функции в точке x i +h по формуле Эйлера и наклон интегральной кривой в этой точке

2. Находят средний наклон на шаге h:

3. По этому наклону уточняют значение y i +1 по формуле (6.1.).


Формула метода Рунге-Кутта второго порядка с половинным шагом имеет вид

Существуют и другие явные одношаговые методы. Так, рассмотренные метод Эйлера (1.15) и его модифицированные варианты (1.22), (1.23) и (1.25), (1.26) являются частными случаями методов первого и второго порядков, относящихся к классу методов Рунге – Кутта. Эти методы используют для вычисления значения значение yi , а также значения функции f (x , у) при некоторых специальным образом выбираемых значениях и у. На их основе могут быть построены разностные схемы разного порядка точности.

Широко распространен метод Рунге – Кутта четвертого порядка.

Запишем алгоритм этого метода в виде

Таким образом, данный метод Рунге – Кутта требует на каждом шаге четырехкратного вычисления правой части f (x , Y ) уравнения (1.9). Суммарная погрешность этого метода есть величина О(h 4).

Метод Рунге – Кутта (1.27) требует большего объема вычислений по сравнению с методом Эйлера и его модификациями, однако это окупается повышенной точностью, что дает возможность проводить счет с большим шагом. Другими словами, для получения результатов с одинаковой точностью в методе Эйлера потребуется значительно меньший шаг, чем в методе Рунге – Кутта (1.27).

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

Пример . Решить задачу Коши

Решение . Сформулированная задача Коши может быть решена известными из курса высшей математики методами. Опустив выкладки, запишем окончательное выражение для точного решения с учетом заданного начального условия:

Теперь решим данную задачу численно с помощью рассмотренных выше методов. Результаты вычислений приведены в табл. 1.1. Анализ решения позволяет проследить рост погрешности с возрастанием xi . Как видно из табл. 1.1, самым точным является решение, полученное методом Рунге – Кутта четвертого порядка. При х i = 1погрешность составляет менее 0,003%. Для модифицированных методов Эйлера погрешность при х i = 1 составляет около 1%, а для самого метода Эйлера - почти 18%. Следовательно, при больших х метод Эйлера может привести к еще более существенным погрешностям, и в таких случаях предпочтительнее пользоваться численными методами высших порядков точности.

Таблица 1.1

Результаты вычислений xi разными методами

С уменьшением шага h локальная погрешность метода Эйлера снизится, однако при этом возрастет число узлов, что неблагоприятно повлияет на точность результатов. Поэтому метод Эйлера применяется сравнительно редко при небольшом числе расчетных точек. Наиболее употребительным одношаговым методом является метод Рунге – Кутта.

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

Начальные условия зададим в виде

По аналогии с (1.27) запишем формулы Рунге – Кутта для системы двух уравнений:

К решению систем уравнений сводятся также задачи Коши для уравнения высших порядков. Например, рассмотрим задачу Коши для уравнения второго порядка

Введем вторую неизвестную функцию . Тогда сформулированная задача Коши заменяется следующей:

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

Пусть требуется найти решение дифференциального уравнения

y ’ = f (t , y ),

удовлетворяющее начальному условию

y’ (t 0) = y 0 .

Принцип, на котором основан метод Рунге – Кутта, можно пояснить, как и принцип, на котором основан метод Эйлера, с помощью разложения функции в ряд Тейлора

Чтобы удержать в ряде Тейлора член n -го порядка, необходимо вычислить n -ю производную зависимой переменной. При использовании модифицированного метода Эйлера для получения второй производной в конечно-разност-ной форме достаточно было знать наклон кривой на концах рассматриваемого интервала. Чтобы вычислить третью производную в конечно-разностном виде, необходимо иметь значения второй производной, по меньшей мере, в двух точках. Для этого необходимо дополнительно определить наклон кривой в некоторой промежуточной точке интервала h , т. е. между tn и n 1 t + . Очевидно, чем выше порядок вычисляяемой производной, тем больше дополнительных точек потребуется вычислить внутри интервала. Так как существует несколько способов расположения внутренних точек и выбора относительных весов для найденных производных, то метод Рунге – Кутта, в сущности, объединяет целое семейство методов решения дифференциальных уравнений.

Наиболее распространенным из них является метод четвёртого порядка точности , при котором удерживаются все члены ряда Тейлора, включая h 4 . Расчеты при использовании этого классического метода производятся по формулам:

Метод Эйлера и его модификация по сути дела являются методами Рунге – Кутта первого и второго порядка соответственно. Более высокая точность метода Рунге – Кутта позволяет увеличить шаг интегрирования h . Допустимая погрешность на шаге определяет его максимальную величину. В прикладных пакетах программ выбор шага часто осуществляется автоматически. Для этого проводят вычисления сначала с шагом h , а затем – с шагом h /2.

За оценку погрешности вычислений с шагом h /2 можно принять приближенную формулу

где - вычисленное значение с шагом h /2; y n – вычисленное значение с шагом h . Пример: y ’ = xy .

При реализации методов Рунге – Кутта на ЭВМ для каждой точки проводят двойной счет. Если полученные при этом значения удовлетворяют выражению (5.4), то для точки t n+1 шаг удваивают, в противном случае уменьшают вдвое. Однако необходимо помнить, что выражение (5.4) приближенное и при неблагоприятных условиях можно получить совершенно ошибочные результаты, хотя в большинстве случаев дело обстоит благополучно.

ПРИБЛИЖЕННОЕ Решение ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ И СИСТЕМ.

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

Методы их решения подразделяются на два класса:

    аналитические методы, в которых решение получается в виде аналитических функций;

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

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

Решить дифференциальное уравнение

численным методом означает, что для заданной последовательности аргументов
и числа
, не определяя аналитического вида функции
, найти значения
, удовлетворяющие условиям:

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

§8.1. Метод Эйлера.

Этот метод обладает малой точностью и применяется в основном для ориентировочных расчетов. Однако идеи, положенные в основу метода Эйлера, являются исходными для ряда других численных методов.

Пусть дано дифференциальное уравнение с начальным условием (задача Коши)

,
(7.2)

и выполняются условия существования и единственности решения.

Теорема Пиккара (теорема о существовании и единственности решения задачи Коши).

Если в уравнении (7.1) функция
непрерывна в прямоугольникеи удовлетворяет в
условию Липшица

где
- константа Липшица, то существует единственное решение
,
, уравнения (7.1), удовлетворяющее условию
, где
,
в
.

Требуется найти решение
задачи Коши (7.2) на отрезке
.

Выбрав шаг - достаточно малый, равный
, строим систему равноотстоящих точек

Искомую интегральную кривую
, проходящую через точку
, приближенно заменим ломаной Эйлера с вершинами
(Рис.7.1).

Звено ломаной
, заключенное междуи
, наклонено к оси
под углом. Тангенс этого угла вычисляется по формуле:

.

Сделав преобразование, получим формулу Эйлера:

Вычисление значений
осуществляется с использованием формулы (7.3) следующим образом. По заданным начальным условиям
иполагая
в выражении (7.3) вычисляется значение

(7.4)

Далее определяя значение аргумента по формуле
, используя найденное значениеи полагая в формуле (7.3)
вычисляем следующее приближенное значение интегральной кривой
, как

(7.5)

Поступая аналогичным образом при
определяем все остальные значения, в том числе последнее значение, которое соответствует значению аргумента
.

Таким образом, соединяя на координатной плоскости точки отрезками прямых, получаем ломанную линию с вершинами в точках.

Запишем разложение
в ряд Тейлора:

Учитывая формулы (7.3) и (7.6), получим

Соотношение (7.7) может быть использовано для выбора шага . Как правило, шагвыбирают таким образом, чтобы
, где- заданная точность.

Метод Эйлера может быть применен к решению систем дифференциальных уравнений.

Пусть задана система двух уравнений первого порядка

(7.8)

с начальными условиями

Необходимо найти решение этой задачи Коши. Проводя аналогичные рассуждения, получаем расчетные формулы вида:

(7.9)

где - шаг интегрирования.

При расчетах полагается, что
и
. В результате применения расчетной схемы (7.9) получается приближенное представление интегральных кривых
и
в форме двух ломаных Эйлера, построенных по полученным таблицам
.

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

§8.2. Метод Рунге-Кутта.

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

, (7.10)

с начальным условием

. (7.11)

Выберем шаг и для краткости введем обозначения
,
, где
.

Рассмотрим числа:

(7.12)

По методу Рунге-Кутта последовательные значения искомой функцииопределяются по формуле:

. (7.13)

Погрешность метода Рунге-Кутта, заданного формулой (7.13), на каждом шаге есть величина порядка (в предположении, что
.

Формулу (7.13) еще называют формулой Рунге-Кутта четвертого порядка точности.

Помимо формулы (7.13) существуют еще другие формулы типа Рунге-Кутта с иными порядками точности. В частности формула
- формула Рунге-Кутта второго порядка точности. Эта формула на каждом шаге дает погрешность порядка.

Для определения правильности выбора шага на практике обычно на каждом этапе из двух шагов применяют двойной пересчет. Исходя из текущего верного значения
, вычисляют
двумя способами: вначале с шагом, а затем с шагом
. Если расхождение полученных результатов не превышает допустимой погрешности, то шагдля данного этапа выбран правильно и полученное с его помощью значение можно принять за
. В противном случае шаг уменьшается в два раза. Эту вычислительную схему легко запрограммировать на ЭВМ.

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

с начальными условиями

Формулы метода Рунге-Кутта для данной системы примут вид:

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

§8.3. Метод Адамса.

Этот метод численного интегрирования разработан Адамсом в 1855 году по просьбе известного английского артиллериста Башфорта, который занимался баллистикой. В последствии этот метод был забыт и вновь открыт в начале XXвека норвежским математиком Штермером. Популяризация метода Адамса и дальнейшее его усовершенствование связано с именем А.Н. Крылова.

Пусть дано дифференциальное уравнение первого порядка

, (7.14)

с начальным условием

. (7.15)

Пусть
- система равноотстоящих значений с шагоми
. Очевидно, что

. (7.16)

Запишем вторую интерполяционную формулу Ньютона с точностью до разностей четвертого порядка:

где
.

В формуле (7.17) функцию заменим на производную, получим:

Так как
, то подставив (7.18) в (7.16), получим:

После преобразований будем иметь:

Формула (7.19) называется экстраполяционной формулой Адамса.

Для начала итерационного процесса нужно знать начальные значения
, так называемый начальный отрезок, который определяют, исходя из начального условия (7.15), каким-либо численным методом (например, методом Рунге-Кутта). Зная значения
из (7.14) находят
и составляют таблицу разностей:

Дальнейшие значения
искомого решения можно шаг за шагом вычислять по формуле Адамса (7.19), пополняя по мере необходимости таблицу разностей (7.20).

Для работы на ЭВМ формулу Адамса применяют в раскрытом виде. Так как

то после приведения подобных членов имеем:

(7.21)

На практике шаг выбирают так, чтобы можно было пренебречь величиной

.

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

Последние материалы раздела:

Длины световых волн. Длина волны. Красный цвет – нижняя граница видимого спектра Видимое излучение диапазон длин волн в метрах
Длины световых волн. Длина волны. Красный цвет – нижняя граница видимого спектра Видимое излучение диапазон длин волн в метрах

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

Николай Некрасов — Дедушка: Стих
Николай Некрасов — Дедушка: Стих

Николай Алексеевич НекрасовГод написания: 1870Жанр произведения: поэмаГлавные герои: мальчик Саша и его дед-декабрист Очень коротко основную...

Практические и графические работы по черчению б) Простые разрезы
Практические и графические работы по черчению б) Простые разрезы

Рис. 99. Задания к графической работе № 4 3) Есть ли отверстия в детали? Если есть, какую геометрическую форму отверстие имеет? 4) Найдите на...