2020年5月23日土曜日

学習環境

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


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

    k2ϕX=-1k-2rk-2k=2ϕX=logr

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

    X=x1,,xnk2xiϕX=1k-2·k-2rk-3r2k-4·xir=xirkgradϕX=Xrkk=1xilogr=1rxir=xir2gradϕX=Xr2

コード

#!/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 コメント:

コメントを投稿