変化率とは、変わる速さのこと
変化率(へんかりつ)とは、ある量が別の量に対して、どれだけの速さで変わるかを表す数です。微分は、この変化率を、とても小さな刻みまで追い込んだものです。
自転車が走った距離を1分ごとに記録すると、表の数だけから「いま、どれくらいの速さか」を見積もれます。この見積もり方が、このモジュールの出発点です。
このレッスンのゴール
メモ
数の表から、ある時点での変化の速さ(傾き)を見積もることができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| 変化率 | 変わった量を、かかった時間や距離で割った値 | |
| 傾き | グラフの上で、右へ1進むと上へどれだけ進むか | |
| 刻み幅 | 傾きを調べるために進める、小さな幅 | 0.1 |
| 差分商 | 関数の変化を刻み幅で割った値。傾きの見積もり | |
| 中心差分 | 調べる点の前後に刻み幅を取る差分商 |
学生が入力するセルは、このプレビューでは空白です。
変化率は変化した量を割る
距離が 10 m から 40 m に増え、時間が 1 分から 2 分に増えたとします。距離の変化は 30 m、時間の変化は 1 分なので、変化率は 30 ÷ 1 で、1分あたり 30 m です。
これは、その1分間の平均の速さです。実際の速さは刻々と変わるので、平均は目安になります。
例: 区間ごとの平均の速さ
| 時間(分) | 距離(m) | 次の1分間の変化 | 平均の速さ(m/分) |
|---|---|---|---|
| 0 | 0 | 10 − 0 = 10 | 10 |
| 1 | 10 | 40 − 10 = 30 | 30 |
| 2 | 40 | 90 − 40 = 50 | 50 |
| 3 | 90 | 160 − 90 = 70 | 70 |
学生が入力するセルは、このプレビューでは空白です。
刻みを小さくすると傾きに近づく
3分ちょうどの速さを知りたいとします。3分から 4分までの平均は 70 でした。これは、後ろの加速まで含んでいるので、少し大きすぎます。
刻み幅を 1 から 0.1、0.01 と小さくすると、平均は本当の速さに近づきます。この式を差分商と呼び、(f(x+h) − f(x)) ÷ h と書きます。h は刻み幅です。
刻み幅を小さくして速さを見る
# 自転車が走った距離は、t 分で 10 * t * t メートルとします。
def distance(t):
return 10 * t * t
t = 3
for h in [1, 0.1, 0.01, 0.001]:
speed = (distance(t + h) - distance(t)) / h
print("刻み幅", h, "のときの速さ:", round(speed, 3))
# t を 5 に変えて、もう一度実行してください。
# 刻み幅を小さくすると、速さはどんな数に近づきますか。
例: 3分のときの速さの見積もり
| 刻み幅 h | 前進の差分商 | 中心差分 |
|---|---|---|
| 1 | 70 | 60 |
| 0.1 | 61 | 60 |
| 0.01 | 60.1 | 60 |
| 0.001 | 60.01 | 60 |
学生が入力するセルは、このプレビューでは空白です。
前後に取る中心差分は誤差が小さい
ここまでは、調べる点から前へ進めました。中心差分は、前と後ろに同じ幅を取り、(f(x+h) − f(x−h)) ÷ (2h) で求めます。
前後の偏りが打ち消し合うので、同じ刻み幅でも、前進の差分商よりずっと正確です。この距離の例では、どの刻み幅でも 60 でした。
刻み幅 0.1 の前進差分を確かめる
docker exec jupyter python3 -c "print(round((10 * 3.1 ** 2 - 10 * 3 ** 2) / 0.1, 3))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
同じ刻み幅の中心差分を確かめる
docker exec jupyter python3 -c "print(round((10 * 3.1 ** 2 - 10 * 2.9 ** 2) / 0.2, 3))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
刻み幅は、小さければ小さいほど正確だと考えがちです。しかしコンピュータの小数には桁数の限りがあり、小さすぎると 2 つの値の差が消えます。0.001 から 0.000001 のあたりを、まず試します。
刻み幅が小さすぎる例
docker exec jupyter python3 -c "print((10 * (3 + 1e-16) ** 2 - 90) / 1e-16)"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。