2020年4月5日日曜日

学習環境

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


  1. gradfx,y,z=grade-2xcosyz=-2e-2xcosyz,-ze-2xsinyz,-ye-2xsinyzgradf1,π,π=-2e-2cosπ2,-πe-2sinπ2,-πe-2sinπ2

  2. grade3x+ysin5z=3e3x+ysin5z,e3x+ysin5z,5e3x+ycos5zgradf0,0,π6=32,12,-532

コード

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

コメントを投稿