2020年5月23日土曜日

学習環境

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


  1. 求めるポテンシャル関数の1つは、

    k 2 ϕ X = - 1 k - 2 r k - 2 k = 2 ϕ X = log r

    実数に勾配ベクトル、偏微分係数を計算してみる。

    X = x 1 , , x n k 2 x i ϕ X = 1 k - 2 · k - 2 r k - 3 r 2 k - 4 · x i r = x i r k g r a d ϕ X = X r k k = 1 x i log r = 1 r x i r = x i r 2 g r a d ϕ X = X r 2

コード

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

print('3.')

xs = symbols('x:2', real=True)
X = Matrix(xs)
k = symbols('k')
r = X.norm()
f = X / r ** k
phi = -1 / ((k - 2) * r ** (k - 2))
phi2 = log(r)

grad_phi = Matrix([phi.diff(xi, 1) for xi in xs])
grad_phi2 = Matrix([phi2.diff(xi, 1) for xi in xs])


class TestPotential(TestCase):
    def test(self):
        self.assertEqual(f.simplify(), grad_phi.simplify())

    def test2(self):
        self.assertEqual(f.subs({k: 2}).simplify(),
                         grad_phi2.simplify())


p = plot3d(phi.subs({k: 1}),
           show=False)
p.save('sample3_1.png')
p = plot3d(phi2, show=False)
p.save('sample3_2.png')

for k0 in range(3, 6):
    p = plot3d(phi.subs({k: k0}),
               show=False)
    p.save(f'sample3_{k0}.png')
p.show()

if __name__ == "__main__":
    main()

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

% ./sample3.py -v
3.
test (__main__.TestPotential) ... ok
test2 (__main__.TestPotential) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.325s

OK
%

0 コメント:

コメントを投稿