2020年4月24日金曜日

学習環境

解析入門 原書第3版 (S.ラング(著)、松坂 和夫(翻訳)、片山 孝次(翻訳)、岩波書店)の第Ⅵ部(多変数の関数)、第20章(合成微分律と勾配ベクトル)、1(合成微分律)の練習問題8の解答を求めてみる。



    1. r = X = x , y , z = x 2 + y 2 + z 2 d f dx = g x = dg d r x x 2 + y 2 + z 2 d f dy = d f d r y x 2 + y 2 + z 2 d f dz = d f d r z x 2 + y 2 + z 2 d f dx 2 + d f dy 2 + d f dz 2 = d f d r 2 x 2 + y 2 + z 2 x 2 + y 2 + z 2 = d f d r 2 = d g d r 2

    2. g x = f x = f u , f v · 1 , 1 = f u + f v g y = f u , f v · 1 , - 1 = f u - f v g x g y = f u 2 - f v 2

    3. t = 2 x + 7 y

      とおく。

      このとき、

      g x = f x = d f d s 2 g y = d f d s 7

      よって、

      1 2 g x = 1 7 g y 2 g y = 7 g x

コード

#!/usr/bin/env python3
from unittest import TestCase, main
from sympy import symbols, Function, Matrix
from sympy.plotting import plot3d

print('8.')

x, y, z, r, u, v = symbols('x, y, z, r, u, v', real=True)


class TestDerivativeChainRule(TestCase):
    def test_a(self):
        X = Matrix([x, y, z])
        d = {r: X.norm()}
        g = Function('g')(r)
        f = g.subs(d)
        self.assertEqual(
            (g.diff(r, 1).subs(d) ** 2).simplify(),
            (f.diff(x, 1) ** 2 + f.diff(y, 1) ** 2 + f.diff(z, 1) ** 2)
            .simplify()
        )

    def test_b(self):
        f = Function('f')(u, v)
        d = {u: x + y, v: x - y}
        g = f.subs(d)
        self.assertEqual(
            (g.diff(x, 1) * g.diff(y, 1)).simplify(),
            (f.diff(u) ** 2 - f.diff(v, 1) ** 2).subs(d).simplify()
        )

    def test_c(self):
        f = Function('f')(r)
        d = {r: 2 * x + 7 * y}
        g = f.subs(d)
        self.assertEqual(2 * g.diff(y), 7 * g.diff(x, 1))


if __name__ == "__main__":
    main()

入出力結果(Zsh、PowerShell、Terminal、Jupyter(IPython))

% ./sample8.py -v
8.
test_a (__main__.TestDerivativeChainRule) ... ok
test_b (__main__.TestDerivativeChainRule) ... ok
test_c (__main__.TestDerivativeChainRule) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.608s

OK
%

0 コメント:

コメントを投稿