勾配とは、最も急な上り坂の向き
勾配(こうばい)とは、2つ以上の変数をもつ関数で、いちばん急に値が増える向きと、その急さを表す数の組です。山の斜面で、水が流れる向きの反対と考えるとつかめます。
変数が2つになると、傾きは1つでは足りません。東へ進む傾きと、北へ進む傾きを別々に調べ、組にして持ちます。
このレッスンのゴール
メモ
2つの変数をもつ関数の偏微分を求め、勾配を組にして表すことができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| 偏微分 | 1つの変数だけを動かし、ほかを止めたときの傾き | |
| 勾配 | 各変数の偏微分を並べた組。最も急に増える向き | |
| 変数 | 関数に入れる数。値が変わる文字 | x と y |
| 最急降下の向き | 勾配の符号を逆にした向き。最も急に下る | |
| 勾配の長さ | 組の2乗の和の平方根。坂の急さ |
学生が入力するセルは、このプレビューでは空白です。
偏微分は1つだけ動かして調べる
地面の高さが、東へ x、北へ y 進んだ所で x² + 3y² メートルだとします。(1, 2) の高さは 1 + 12 で 13 です。
東向きの傾きは、y を 2 に止めて、x だけを少し動かして調べます。これが偏微分です。北向きの傾きも同じように、x を止めて y だけを動かして調べます。
例: (1, 2) の近くの傾き
| 動かす向き | 高さの変化(h = 0.1) | 前進の差分商 | 中心差分(h = 0.001) |
|---|---|---|---|
| 東(x) | 13.21 − 13 = 0.21 | 2.1 | 2 |
| 北(y) | 14.23 − 13 = 1.23 | 12.3 | 12 |
学生が入力するセルは、このプレビューでは空白です。
2つの偏微分を数値で求める
# 公園の地面の高さは、東へ x、北へ y 進んだ所で x² + 3y² メートルとします。
def height(x, y):
return x ** 2 + 3 * y ** 2
x = 1
y = 2
h = 0.001
slope_x = (height(x + h, y) - height(x - h, y)) / (2 * h)
slope_y = (height(x, y + h) - height(x, y - h)) / (2 * h)
print("東向きの傾き:", round(slope_x, 3))
print("北向きの傾き:", round(slope_y, 3))
# x を 2、y を 1 に変えて、実行する前に2つの傾きを予想してください。
東向きの傾きを確かめる
docker exec jupyter python3 -c "print(round(((1.001 ** 2 + 3 * 2 ** 2) - (0.999 ** 2 + 3 * 2 ** 2)) / 0.002, 3))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
北向きの傾きを確かめる
docker exec jupyter python3 -c "print(round(((1 ** 2 + 3 * 2.001 ** 2) - (1 ** 2 + 3 * 1.999 ** 2)) / 0.002, 3))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
勾配は偏微分を並べた組
東向きと北向きの傾きを組にしたものが勾配です。この例の (1, 2) では (2, 12) です。勾配は、いちばん急に高くなる向きを指します。
勾配の長さは、2 と 12 を2乗して足し、平方根を取ります。√148 で、約 12.166 です。長いほど、坂は急です。
勾配の長さを確かめる
docker exec jupyter python3 -c "print(round((2 ** 2 + 12 ** 2) ** 0.5, 3))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
勾配は、水が流れ下る向きだと考えがちです。勾配は、いちばん急に上る向きです。下りたいときは、勾配の符号を逆にします。次の回では、この逆向きへ少しずつ進みます。