u>
Розглянемо рівняння виду:
y = f (x, y) (1)
Уравнненіе (1) має нескінченну безліч рішень (рис. 1) - через кожну точку площини проходить інтегральна крива. Щоб виділити одну криву, потрібно вказати точку площини, через яку проходить крива, тобто вказати так звані початкові рівняння (значення x = x 0 і y = y 0 ) (2)
В
Метод Ейлера
Одним з методів вирішення диференціального рівняння (1) з початковою умовою (2) є метод Ейлера.
Будемо розглядати рівняння (1) на деякому відрізку [a, b]. Нехай відрізок поділений на n частин з кроком. p> Позначимо X 0 = a, X 1 = X 0 + h, X 2 = X < sub> 0 +2 h, ..., X n = X 0 + nh = b. Позначимо шукані y (X 1 ), ... y (X n ) через y 1 ... y n .
Методика рішення рівняння (1) з початковими умовами (2) не пов'язані з розкладанням рішення в ряд Тейлора в h-околиці точки X 0 .
В
При відкиданні членів ряду, що містять похідні другого та вищої порядків, отримаємо
В
де f (X, y) - права частина рівняння (1).
Таким чином,
В В
.
В
При досить малій величині кроку h метод Ейлера дає рішення з більшою точністю, тому що похибка близька до h 2 (h <<1) на кожному кроці інтегрування.
Метод Рунге-Кутта
Недоліком методу Ейлера є змедленіе обчислень при виборі малої величини кроку h, задає точність рішення.
Найбільш поширеним методом чисельного інтегрування диференціальних рівнянь служить метод Рунге-Кутта, що забезпечує прискорення за рахунок більшої точності обчислень на кожному кроці. Точність методу Рунге-Кутта оцінюється величиною E ≈ h 2 .
Уточнення досягається за рахунок спеціального підбору координат четурех точок, в яких обчислюється перша похідна f (x, y). Замість першої похідної h в€™ f (x, y) використовуваної у формулі Ейлера, обчислюється усереднена перша похідна f i .
Формули інтегрування за методом Рунге-Кутта мають вигляд:
В
де
В В В В
h = (x n - x 0 )/n i = 0,1,2, ... n
y '= (1-y 2 ) cos (x) +0.6 y
при х 0 = 0; x n = 1; у0 = 0; h = 0.1
program eyler;
label 100;
const h = 0.1; x0 = 0; xk = 1; у0 = 0;
х0 = а;
var h, y, x: real;
i: integer;
function f (x, y: real): real;
begin
f: = (1-y * y) * cos (x) +0.6 * y;
end;
begin
y: = y0; x: = x0;
100: y: = y + h * f (x, y);
x: = x + h;
writeln ('x =', x: 5:1, 'y =', y: 8:5);
if x
readln;
end.
відповідь:
x = 0.1 y = 0.1000
x = 0.2 y = 0.2045
x = 0.3 y = 0.3107
x = 0.4 y = 0.4156
x = 0.5 y = 0.5168
x = 0.6 y = 0.6121
x = 0.7 y = 0.7004
x = 0.8 y = 0.7814
x = 0.9 y = 0.8554
x = 1.0 y = 0.9234
y '= (1-y 2 ) cos (x) +0.6 y
при х 0 = 0; x n = 1; у0 = 0; h = 0.1
program rungekutta;
label 100;
var
x, p, x0, y0, xk, y, a, b, c, d, h: real;
function f (x, y: real): real;
begin
f: = (1-y * y) * cos (x) +0.6 * y;
end;
begin
x0: = 0; xk: = 1; y0: = 0; h: = 0.1;
x: = x0; y: = y0;
100: a: = h * f (x, y);
b: = h * f (x + h/2, y + a/2);
c: = h * f (x + h/2, y + b/2);
d: = h * f (x + h, y + c);
p: = (a +2 * b +2 * c + d)/6;
y: = y + p;
writeln ('x =', x: 8:1, 'y =', y: 8:5);
if x
readln;
end.
відповідь:
x = 0.1 y = 0.1025
x = 0.2 y = 0.2082
x = 0.3 y = 0.3141
x = 0.4 y = 0.4173
x = 0.5 y = 0.5156
x = 0.6 y = 0.6076
x = 0.7 y = 0.6926
x = 0.8 y = 0.7705
x = 0.9 y = 0.8419
x = 1.0 y = 0.9081
3. Оптимізаційні моделі
В
3.1. Рішення транспортної задачі
Транспортна задача є окремим випадком загальної задачі лінійного програмування. У лінійному програмуванні функція мети і система обмежень заданна лінійно.
Транспортна задача може бути вирішена основним методом лінійного програмування - симплекс методу , але для неї розроблені більш зручні та ефективні методи, зокрема метод потенціалу . Алгоритм транспортної задачі був вперше застосований для раціоналізації перевезень вантажу, тому отримав назву транспортна задача . p> Постановка завдання
Мається m відправник...