2020年4月5日日曜日

学習環境

解析入門 原書第3版 (S.ラング(著)、松坂 和夫(翻訳)、片山 孝次(翻訳)、岩波書店)の第Ⅵ部(多変数の関数)、第19章(多変数の関数)、2(偏微分)の練習問題15、16の解答を求めてみる。


  1. g r a d f x , y , z = g r a d e - 2 x cos y z = - 2 e - 2 x cos y z , - z e - 2 x sin y z , - y e - 2 x sin y z g r a d f 1 , π , π = - 2 e - 2 cos π 2 , - π e - 2 sin π 2 , - π e - 2 sin π 2

  2. g r a d e 3 x + y sin 5 z = 3 e 3 x + y sin 5 z , e 3 x + y sin 5 z , 5 e 3 x + y cos 5 z g r a d f 0 , 0 , π 6 = 3 2 , 1 2 , - 5 3 2

コード

#!/usr/bin/env python3
from unittest import TestCase, main
from sympy import symbols, exp, cos, sin, Derivative, Matrix, pi, Rational
from sympy import sqrt
from sympy.plotting import plot3d

print('15, 16.')

x, y, z = symbols('x, y, z')
xyz = [x, y, z]
f1 = exp(-2 * x) * cos(y * z)
df1 = Matrix([Derivative(f1, o, 1).doit() for o in xyz])
p1 = {x: 1, y: pi, z: pi}
f2 = exp(3 * x + y) * sin(5 * z)
df2 = Matrix([Derivative(f2, o, 1).doit() for o in xyz])
p2 = {x: 0, y: 0, z: pi / 6}


class TestGrad(TestCase):
    def test_15(self):
        self.assertEqual(
            df1.subs(p1),
            Matrix([-2 * exp(-2) * cos(pi ** 2),
                    -pi * exp(-2) * sin(pi ** 2),
                    -pi * exp(-2) * sin(pi ** 2)])
        )

    def test_16(self):
        self.assertEqual(
            df2.subs(p2),
            Matrix([Rational(3, 2), Rational(1, 2), - 5 * sqrt(3) / 2])
        )


for i, f in enumerate([f1, f2], 15):
    for j in range(5):
        try:
            p = plot3d(f.subs({z: j - 2}), show=False)
            p.save(f'sample{i}_{j}.png')
        except:
            pass

p.show()

if __name__ == "__main__":
    main()

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

% ./sample15.py -v 
15, 16.
test_15 (__main__.TestGrad) ... ok
test_16 (__main__.TestGrad) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.089s

OK
%

0 コメント:

コメントを投稿