--- title: Euler method id: 59880443fb36441083c6c20e challengeType: 5 videoUrl: '' localeTitle: Método de Euler --- ## Description

O método de Euler aproxima numericamente soluções de equações diferenciais ordinárias (ODEs) de primeira ordem com um dado valor inicial. É um método explícito para resolver problemas de valor inicial (IVPs), conforme descrito na página da Wikipedia .

O ODE deve ser fornecido da seguinte forma:

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

com um valor inicial

:: $ y (t_0) = y_0 $

Para obter uma solução numérica, substituímos a derivada no LHS por uma aproximação por diferenças finitas:

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

então resolva para $ y (t + h) $:

:: $ y (t + h) \ aproximadamente y (t) + h \, \ frac {dy (t)} {dt} $

que é o mesmo que

:: $ y (t + h) \ aproximadamente y (t) + h \, f (t, y (t)) $

A regra de solução iterativa é então:

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

em que $ h $ é o tamanho do passo, o parâmetro mais relevante para a precisão da solução. Um tamanho de passo menor aumenta a precisão, mas também o custo de computação, por isso sempre tem que ser escolhido a dedo de acordo com o problema em questão.

Exemplo: Lei de Resfriamento de Newton

A lei de refrigeração de Newton descreve como um objeto da temperatura inicial $ T (t_0) = T_0 $ esfria em um ambiente de temperatura $ T_R $ :

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

ou

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

Ele diz que a taxa de resfriamento de $ \ frac {dT (t)} {dt} $ do objeto é proporcional à diferença de temperatura atual $ \ Delta T = (T (t) - T_R) $ para o ambiente ao redor.

A solução analítica, que vamos comparar com a aproximação numérica, é

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

Tarefa:

Implemente uma rotina do método de Euler e depois use-a para resolver o exemplo dado da lei de resfriamento de Newton com ela para três tamanhos diferentes de degraus de:

:: 2 s

:: * 5 se

:: 10 s

e comparar com a solução analítica.

Valores iniciais:

:: * temperatura inicial $ T_0 $ deve ser 100 ° C

:: * temperatura ambiente $ T_R $ deve ser 20 ° C

:: * constante de resfriamento $ k $ deve ser 0,07

:: * o intervalo de tempo a calcular deve ser de 0 s ──► 100 s

## Instructions
## Tests
```yml tests: - text: eulersMethod é uma função. testString: 'assert(typeof eulersMethod === "function", "eulersMethod is a function.");' - text: 'eulersMethod(0, 100, 100, 10) deve retornar um número.' testString: 'assert(typeof eulersMethod(0, 100, 100, 10) === "number", "eulersMethod(0, 100, 100, 10) should return a number.");' - text: 'eulersMethod(0, 100, 100, 10) deve retornar 20.0424631833732.' testString: 'assert.equal(eulersMethod(0, 100, 100, 2), 20.0424631833732, "eulersMethod(0, 100, 100, 10) should return 20.0424631833732.");' - text: 'eulersMethod(0, 100, 100, 10) deve retornar 20.01449963666907.' testString: 'assert.equal(eulersMethod(0, 100, 100, 5), 20.01449963666907, "eulersMethod(0, 100, 100, 10) should return 20.01449963666907.");' - text: 'eulersMethod(0, 100, 100, 10) deve retornar 20.000472392.' testString: 'assert.equal(eulersMethod(0, 100, 100, 10), 20.000472392, "eulersMethod(0, 100, 100, 10) should return 20.000472392.");' ```
## Challenge Seed
```js function eulersMethod (x1, y1, x2, h) { // Good luck! } ```
## Solution
```js // solution required ```