6. Неявні інтерполяційні схеми

Алгоритм неявних інтерполяційних методів дослівно повторює алгоритм звичайних (явних) інтерполяційних методів. Єдина відмінність полягає в тому, що ми не використовуємо звичайну (явну) схему Рунге-Кутта другого порядку:

Ми заміняємо її на неявну схему Рунге-Кутта другого порядку:

Нагадаємо, що для цієї схеми можна використовувати два різних рецепта:

•  шукати точне рішення цієї системи нелінійних рівнянь методом Ньютона;

•  обмежитися лінеаризованим рівнянням, тобто зробити тільки перший крок методу Ньютона :

У будь-якому випадку доведеться вирішувати СЛР. В більшості випадків можна обійтись другим варіантом, але в дуже нестійких завданнях доведеться вдатися до першого (до речі, при цьому не доведеться сильно міняти текст програми).

Нагадаємо, що існують варіанти інтерполяційного методу з фіксованим кроком Н і змінним порядком m, з фіксованому порядку те і змінним кроком Н і, нарешті, із змінними m і Н. Тут можна привечти тільки простий алгоритм з фіксованим H.

Алгоритм:

Вибираємо постійний крок H за часом (як правило слід брати H близько 0.2). Рухаємося по траєкторії з цим кроком. Кожен окремий крок реалізується так:

Для k = 1,2,.. виконуємо наступне:

Для чергового Nkз набору {4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128} обчислюємо крок hk = H/Nk.

За допомогою цього кроку hk знаходимо

тут tn = t+nhk, n = 0.. Nk-1; при цьому . Зрозуміло, тут не слід обчислювати зворотну матрицю, потрібно просто вирішувати СЛР.

Для кожного хі по k точок:

виконуємо поліноміальну інтерполяцію взалежності Y(X) в точку X = 0. Результат інтерполяції, отриманий на k -му етапі, означаємо . Оцінюємо погрішність

 як

Перетворюємо вектор на число характеризуючи погрішність. Якщо  менше замовленого  те вважаємо  і завершуємо даний крок t→t+H.

Перша неприємна відмінність від явного методу полягає в тому, що кожен маленький крок на hk (великий крок H складається з Nk штук таких кроків) вимагає рішення СЛР.

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

На перший погляд, цей алгоритм приведе не просто до багатьох помилок в описі динаміки "швидких" змінних, а до помилок якісних. Дійсно, якщо рівняння для "швидкої" змінної має вигляд , то при Ch>>1 неявна схема Рунге-Кутта другого порядку замість експоненціального вибуває дає x(t+h)≈-x(t), тобто |x(t+H)|≈|x(t)|. На щастя, наступна інтерполяція виправляє ситуацію. Інтерполяційний алгоритм "помічає", що у міру зменшення hkабсолютна величина x(k)(t+H) зменшується. Причому це зменшення тим помітніше, чим менше hk - В результаті остаточна відповідь  буде помітна менше за абсолютною величиною, чим x(t).

7. Програма Рунге-Кутта на мові С#

Наведемо приклад пограми Рунге-Кутта на мові С#. В програмі використовується абстрактний клас TrungeKutta, в якому потрібно перекрити абстрактний метод F, який задає перші чаcтини рівняння.

using System;

using System.Collections.Generic;

 

namespace rwsh_rk4

{

abstract class TRungeKutta

{

public int N;

double t; // теперішній час

public double[] Y; // шукане число Y[0] – саме рішення, Y[i] - i-та змінна розвязку

double[] YY, Y1, Y2, Y3, Y4; // внутрішня змінна

 

public TRungeKutta(int N) // N – розмір системи

{

this.N = N; // зберегти розміри системи

 

if (N < 1)

{

this.N = -1; // якщо розмірність менше одиниці, то установити флаг помилки

return; // і вийти із конструктора

}

 

Y = new double[N]; // створення вектора розв’язку

YY = new double[N]; // внутрішній розв’язок

Y1 = new double[N];

Y2 = new double[N];

Y3 = new double[N];

Y4 = new double[N];

}

 

public void SetInit(double t0, double[] Y0) // встановлення початкових умов.

{  // t0 – початковий час, Y0 – початкова умова

t = t0;

int i;

for (i = 0; i < N; i++)

{

Y[i] = Y0[i];

}

}

 

public double GetCurrent() // повернути даний час

{

return t;

}

 

abstract public void F(double t, double[] Y, ref double[] FY); // перші частини с-ми.

 

public void NextStep(double dt) // наступний крок метода Рунге-Кутта, dt – крок по часу

{

if(dt<0)

{

return;

}

 

int i;

 

F(t, Y, ref Y1); // вирахувати Y1

 

for (i = 0; i < N; i++)

{

YY[i] = Y[i] + Y1[i] * (dt / 2.0);

}

F(t + dt / 2.0, YY, ref Y2);

 

for (i = 0; i < N; i++)

{

YY[i] = Y[i] + Y2[i] * (dt / 2.0);

}

F(t + dt / 2.0, YY, ref Y3); // вирахувати Y3

 

for (i = 0; i < N; i++)

{

YY[i] = Y[i] + Y3[i] * dt;

}

F(t + dt, YY, ref Y4); // вирахувати Y4

 

for (i = 0; i < N; 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 : TRungeKutta

{

public TMyRK(int aN) : base(aN) { }

 

public override void F(double t, double[] Y, ref double[] FY)

{

FY[0] = Y[1]; // приклад математичний маятник

FY[1] = -Y[0]; // y''(t)+y(t)=0

}

}

 

class Program

{

static void Main(string[] args)

{

TMyRK RK4 = new TMyRK(2);

 

double[] Y0 = {0, 1}; // задаємо початкові умови y(0)=0, y'(0)=1

 

RK4.SetInit(0, Y0);

 

while (RK4.GetCurrent() < 10) // розв’язуєм до 10

{

Console.WriteLine("{0}\t{1}\t{2}", RK4.GetCurrent(), RK4.Y[0], RK4.Y[1]); // вивести t, y, y'

 

RK4.NextStep(0.01); // розв’язати на наступному кроці, крок інтегрування dt=0.01

}

}

}

}


Информация о работе «Деякі скінченно-різнецеві методи розв’язування звичайних диференціальних рівнянь»
Раздел: Математика
Количество знаков с пробелами: 27789
Количество таблиц: 1
Количество изображений: 13

Похожие работы

Скачать
374035
10
12

... і, перебудову управлінської ієрархії), систем планування, контролю, оцінки діяльності персоналу, його винагороди. Подібні корінні перебудови - результат явної невідповідності стратегії і структури. Досвід внутрішньо фірмового управління 1950-1970-х років, коли жорсткість формалізованих, бюрократичних структур, очевидно, суперечила збільшеній динаміці змін зовнішнього середовища, показав, що часті ...

Скачать
626537
17
17

... коштів є важливим чинником у зниженні собівартості продукції чи виконаної роботи. Раціональне використання оборотних коштів залежить від правильного їхнього формування і ефективної організації виробництва. Зосередження н підприємствах зайвих оборотних коштів приводить до їхнього заморожування. Це завдає шкоди економіці господарства. Щоб уникнути такого положення, оборотні кошти нормуються, що є ...

Скачать
763160
11
9

... іонери. Залежно від стилю керівництва й політичної системи, в якій функціонує лідер, відрізняють: диктаторський тип, демократичний тип, автократичний тип, плутократичний тип. В сучасній політології використовується типологія М. Дж. Херманн, де за основу виступає імідж, “образ”, візуальна привабливість лідера: прапороносець, який має особистий погляд на реальність, майбутнє; чітко викладає цілі, ...

Скачать
823470
10
9

... ї моделі економіки і способів її побудови; на визначенні пріоритетних цінностей та економічного порядку, який повинен забезпечувати реалізацію цієї моделі. Тому розроблення філософії взаємодії держави і ринку передбачає дослідження багатогранності цього процесу, урахування впливу інституційного середовища на конкретну модель економіки. Без визначення цілей, цінностей у суспільстві неможливо ...

0 комментариев


Наверх