Files
freeCodeCamp/curriculum/challenges/ukrainian/22-rosetta-code/rosetta-code-challenges/euler-method.md
camperbot 7a0d396180 chore(i18n,learn): processed translations (#53415)
Co-authored-by: Naomi Carrigan <nhcarrigan@gmail.com>
Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
2024-02-13 18:31:01 +01:00

5.3 KiB
Raw Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
59880443fb36441083c6c20e Метод Ейлера 1 302258 euler-method

--description--

Метод Ейлера надає приблизний розв’язок звичайних диференціальних рівнянь першого порядку з заданим початковим значенням. Це явний метод розв’язку задачі Коші, як описано в цій статті.

Звичайні диференціальні рівняння задані в такому форматі:

  • $\frac{dy(t)}{dt} = f(t,y(t))$

з початковим значенням

  • $y(t_0) = y_0$

Щоб отримати числовий розв’язок, замінимо похідну зліва на скінченнорізницеве наближення:

  • $\frac{dy(t)}{dt} \approx \frac{y(t+h)-y(t)}{h}$

потім знайдемо y(t+h):

  • $y(t+h) \approx y(t) + h \, \frac{dy(t)}{dt}$

що є тим самим, як і

  • $y(t+h) \approx y(t) + h \, f(t,y(t))$

Тоді правило ітеративного розв’язку:

  • $y_{n+1} = y_n + h \, f(t_n, y_n)$

де h є розміром кроку — найважливішим параметром для точності розв’язку. Менший розміру кроку збільшує точність, але також і витрати обчислень, тому його завжди потрібно вибирати відповідно до конкретної задачі.

Приклад: закон Ньютона про охолодження

Закон Ньютона про охолодження описує, як об’єкт з початковою температурою T(t_0) = T_0 охолоджується за температури T_R:

  • $\frac{dT(t)}{dt} = -k \, \Delta T$

або

  • $\frac{dT(t)}{dt} = -k \, (T(t) - T_R)$

Це означає, що швидкість охолодження об’єкта \\frac{dT(t)}{dt} пропорційна поточній різниці температур між об’єктом та навколишнім середовищем \\Delta T = (T(t) - T_R).

Ось аналітичний розв’язок, який ми порівняємо з числовим наближенням:

  • $T(t) = T_R + (T_0 - T_R) \; e^{-k t}$

--instructions--

Реалізуйте процедуру методу Ейлера, а потім використайте його, щоб розв’язати закон Ньютона про охолодження з трьома різними розмірами кроку:

  • 2 s
  • 5 s
  • 10 s

та порівняйте з аналітичним розв’язком.

Початкові значення:

  • початкова температура $T_0$ дорівнює 100 °C
  • кімнатна температура $T_R$ дорівнює 20 °C
  • константа охолодження $k$ дорівнює 0.07
  • часовий інтервал для обчислення дорівнює від 0 s до 100 s

Перший параметр функції — початковий час, другий параметр — початкова температура, третій параметр — пройдений час, а четвертий параметр — розмір кроку.

--hints--

eulersMethod має бути функцією.

assert(typeof eulersMethod === 'function');

eulersMethod(0, 100, 100, 2) має повернути число.

assert(typeof eulersMethod(0, 100, 100, 2) === 'number');

eulersMethod(0, 100, 100, 2) має повернути 20.0424631833732.

assert.equal(eulersMethod(0, 100, 100, 2), 20.0424631833732);

eulersMethod(0, 100, 100, 5) має повернути 20.01449963666907.

assert.equal(eulersMethod(0, 100, 100, 5), 20.01449963666907);

eulersMethod(0, 100, 100, 10) має повернути 20.000472392.

assert.equal(eulersMethod(0, 100, 100, 10), 20.000472392);

--seed--

--seed-contents--

function eulersMethod(x1, y1, x2, h) {

}

--solutions--

function eulersMethod(x1, y1, x2, h) {
  let x = x1;
  let y = y1;

  while ((x < x2 && x1 < x2) || (x > x2 && x1 > x2)) {
    y += h * (-0.07 * (y - 20));
    x += h;
  }

  return y;
}