Oliver Eyton-Williams ee1e8abd87
feat(curriculum): restore seed + solution to Chinese (#40683)
* feat(tools): add seed/solution restore script

* chore(curriculum): remove empty sections' markers

* chore(curriculum): add seed + solution to Chinese

* chore: remove old formatter

* fix: update getChallenges

parse translated challenges separately, without reference to the source

* chore(curriculum): add dashedName to English

* chore(curriculum): add dashedName to Chinese

* refactor: remove unused challenge property 'name'

* fix: relax dashedName requirement

* fix: stray tag

Remove stray `pre` tag from challenge file.

Signed-off-by: nhcarrigan <nhcarrigan@gmail.com>

Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
2021-01-12 19:31:00 -07:00

70 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: 59880443fb36441083c6c20e
title: 欧拉方法
challengeType: 5
videoUrl: ''
dashedName: euler-method
---
# --description--
<p>欧拉方法在数值上近似具有给定初始值的一阶常微分方程ODE的解。它是解决初始值问题IVP的一种显式方法<a href='https://en.wikipedia.org/wiki/Euler method' title='wp欧拉方法'>维基百科页面中所述</a></p><p> ODE必须以下列形式提供 </p><p> :: <big>$ \ frac {dyt} {dt} = ftyt$</big> </p><p>具有初始值</p><p> :: <big>$ yt_0= y_0 $</big> </p><p>为了得到数值解我们用有限差分近似替换LHS上的导数 </p><p> :: <big>$ \ frac {dyt} {dt} \ approx \ frac {yt + h-yt} {h} $</big> </p><p>然后解决$ yt + h$ </p><p> :: <big>$ yt + h\ about yt+ h \\ frac {dyt} {dt} $</big> </p><p>这是一样的</p><p> :: <big>$ yt + h\ about yt+ h \ftyt$</big> </p><p>然后迭代解决方案规则是: </p><p> :: <big>$ y_ {n + 1} = y_n + h \ft_ny_n$</big> </p><p>其中<big>$ h $</big>是步长,是解决方案准确性最相关的参数。较小的步长会提高精度,但也会增加计算成本,因此必须根据手头的问题手工挑选。 </p><p>示例:牛顿冷却法</p><p> Newton的冷却定律描述了在温度<big>$ T_R $</big>的环境中初始温度<big>$ Tt_0= T_0 $</big>的对象如何冷却: </p><p> :: <big>$ \ frac {dTt} {dt} = -k \\ Delta T $</big> </p><p>要么</p><p> :: <big>$ \ frac {dTt} {dt} = -k \Tt - T_R$</big> </p><p>它表示物体的冷却速率<big>$ \ frac {dTt} {dt} $</big>与周围环境的当前温差<big>$ \ Delta T =Tt - T_R$成正比</big></p><p>我们将与数值近似进行比较的解析解是</p><p> :: <big>$ Tt= T_R +T_0 - T_R\; Ë^ { -克拉} $</big> </p>任务: <p>实现欧拉方法的一个例程,然后用它来解决牛顿冷却定律的给定例子,它有三种不同的步长: </p><p> :: * 2秒</p><p> :: * 5秒和</p><p> :: * 10秒</p><p>并与分析解决方案进行比较。 </p>初始值: <p> :: *初始温度<big>$ T_0 $</big>应为100°C </p><p> :: *室温<big>$ T_R $</big>应为20°C </p><p> :: *冷却常数<big>$ k $</big>应为0.07 </p><p> :: *计算的时间间隔应为0s──►100s </p>
# --hints--
`eulersMethod`是一个函数。
```js
assert(typeof eulersMethod === 'function');
```
`eulersMethod(0, 100, 100, 10)`应该返回一个数字。
```js
assert(typeof eulersMethod(0, 100, 100, 10) === 'number');
```
`eulersMethod(0, 100, 100, 10)`应返回20.0424631833732。
```js
assert.equal(eulersMethod(0, 100, 100, 2), 20.0424631833732);
```
`eulersMethod(0, 100, 100, 10)`应返回20.01449963666907。
```js
assert.equal(eulersMethod(0, 100, 100, 5), 20.01449963666907);
```
`eulersMethod(0, 100, 100, 10)`应返回20.000472392。
```js
assert.equal(eulersMethod(0, 100, 100, 10), 20.000472392);
```
# --seed--
## --seed-contents--
```js
function eulersMethod(x1, y1, x2, h) {
}
```
# --solutions--
```js
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;
}
```