2020年4月23日木曜日

学習環境

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



    1. zr=rfx,y=rfrcosθ,rsinθ=fx,fy·cosθ,sinθ=fxcosθ+fysinθ1rzθ=1rfx,fy·-rsinθ,rcosθ=-fxsinθ+fycosθ

    2. gr2+1r2rθ2=zr2+1rzθ2=fx2cos2θ+2fysinθcosθ+fy2sin2θ+fx2sin2θ-2fysinθcosθ+fy2cos2θ=fx2+fy2

コード

#!/usr/bin/env python3
from unittest import TestCase, main
from sympy import symbols, Function, sin, cos, pprint
from sympy.plotting import plot3d
print('7.')

x, y, r, theta = symbols('x, y, r, θ')
f = Function('f')(x, y)
xy = {x: r * cos(theta), y: r * sin(theta)}
z = f.subs(xy)


class TestDerivativeChainRule(TestCase):
    def test_a1(self):
        self.assertEqual(
            z.diff(r),
            (f.diff(x, 1) * cos(theta) + f.diff(y, 1) * sin(theta)).subs(xy)
        )

    def test_a2(self):
        self.assertEqual(
            (1 / r * z.diff(theta, 1)).simplify(),
            (-f.diff(x, 1).subs(xy) * sin(theta) +
             f.diff(y, 1) * cos(theta)).subs(xy).simplify()
        )


g = 2 * x ** 2 - y ** 3

for i, h in enumerate([g, g.subs(xy)]):
    p = plot3d(h, show=False)
    p.save(f'sample7_{i}.png')
p.show()

if __name__ == "__main__":
    main()

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

% ./sample7.py -v
7.
test_a1 (__main__.TestDerivativeChainRule) ... ok
test_a2 (__main__.TestDerivativeChainRule) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.775s

OK
%

0 コメント:

コメントを投稿