Метады вылічэнняў
Прыклад на ўсёй старонцы
Каб параўноўваць метады аднолькава, ніжэй усюды бярэм адну і тую ж задачу Кошы:
\[ y' = y,\qquad y(0) = 1,\qquad h = 0.5. \]
Дакладнае рашэнне — \( y(x) = e^{x} \). На двух кроках: \( y(0{,}5) \approx 1{,}648721 \), \( y(1) \approx 2{,}718282 \).
Той жа прыклад можна адкрыць на калькулятары АДУ-1.
Метад Эйлера
Яўны Эйлер — схема парадку 1. З кропкі \( (x_n, y_n) \) бярэм нахіл \( k_1 = f(x_n, y_n) \) і робім прамалінейны крок даўжынёй \( h \):
\[ y_{n+1} = y_n + h\,k_1,\qquad x_{n+1} = x_n + h. \]
/**
* Один шаг явного метода Эйлера для y′ = f(x, y).
* @param {(x: number, y: number) => number} f правая часть
* @param {number} x текущий x
* @param {number} y текущий y
* @param {number} h шаг
* @returns {{ x: number, y: number, k1: number }}
*/
function eulerStep(f, x, y, h) {
const k1 = f(x, y)
return { x: x + h, y: y + h * k1, k1 }
}
Два крокі: \( y_1 = 1{,}5 \), \( y_2 = 2{,}25 \).
| i | x | y | k₁ | x′ | y′ |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 0.5 | 1.5 |
| 1 | 0.5 | 1.5 | 1.5 | 1 | 2.25 |
Метад Х’юна (RK2)
Х’юн (яўны RK2) — схема парадку 2. Спачатку прагноз Эйлера, потым сярэдняе двух нахілаў:
\[ k_1 = f(x_n,y_n),\qquad k_2 = f(x_n+h,\, y_n + h\,k_1),\qquad y_{n+1} = y_n + \tfrac{h}{2}(k_1 + k_2). \]
/**
* Один шаг метода Хьюна (явный RK2, predictor–corrector) для y′ = f(x, y).
* @param {(x: number, y: number) => number} f правая часть
* @param {number} x текущий x
* @param {number} y текущий y
* @param {number} h шаг
* @returns {{ x: number, y: number, k1: number, k2: number }}
*/
function heunStep(f, x, y, h) {
const k1 = f(x, y)
const k2 = f(x + h, y + h * k1)
return { x: x + h, y: y + (h * (k1 + k2)) / 2, k1, k2 }
}
Атрымліваем \( y_1 = 1{,}625 \), \( y_2 = 2{,}640625 \).
| i | x | y | k₁ | k₂ | x′ | y′ |
|---|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1.5 | 0.5 | 1.625 |
| 1 | 0.5 | 1.625 | 1.625 | 2.4375 | 1 | 2.640625 |
Рунге–Кута 4-га парадку (RK4)
Класічны яўны RK4 — схема парадку 4 з чатырма ацэнкамі нахілу:
\[ y_{n+1} = y_n + \tfrac{h}{6}(k_1 + 2k_2 + 2k_3 + k_4). \]
/**
* Один шаг классического Рунге–Кутты 4-го порядка для y′ = f(x, y).
* @param {(x: number, y: number) => number} f правая часть
* @param {number} x текущий x
* @param {number} y текущий y
* @param {number} h шаг
* @returns {{ x: number, y: number, k1: number, k2: number, k3: number, k4: number }}
*/
function rk4Step(f, x, y, h) {
const k1 = f(x, y)
const k2 = f(x + h / 2, y + (h * k1) / 2)
const k3 = f(x + h / 2, y + (h * k2) / 2)
const k4 = f(x + h, y + h * k3)
return {
x: x + h,
y: y + (h * (k1 + 2 * k2 + 2 * k3 + k4)) / 6,
k1, k2, k3, k4,
}
}
Пасля двух крокаў \( y_2 \approx 2{,}717346 \) пры дакладным \( \approx 2{,}718282 \).
| i | x | y | k₁ | k₂ | k₃ | k₄ | x′ | y′ |
|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1.25 | 1.3125 | 1.65625 | 0.5 | 1.6484375 |
| 1 | 0.5 | 1.6484375 | 1.6484375 | 2.060546875 | 2.16357421875 | 2.730224609375 | 1 | 2.71734619140625 |
Параўнанне на \( x = 1 \)
| Метад | y(1) | Памылка ≈ |
|---|---|---|
| Дакладнае \(e^{1}\) | 2.718282 | — |
| Эйлер | 2.25 | 0.468 |
| RK2 (Х’юн) | 2.640625 | 0.078 |
| RK4 | 2.717346 | 0.00094 |
На старонцы поля напрамкаў тыя ж тры схемы можна ўключыць разам і глядзець табліцу крокаў / CSV.