2018年1月18日木曜日

学習環境

解析入門〈3〉(松坂 和夫(著)、岩波書店)の第14章(多変数の関数)、14.1(微分可能性と勾配ベクトル)、問題11.を取り組んでみる。


    1. g r a d f x , y = 2 x y , x 2 g r a d f 2 , - 1 · 1 , 1 1 + 1 = - 4 , 4 · 1 , 1 · 1 2 = - 4 + 4 2 = 0

    2. f x = 1 2 x 2 + y 2 + z 2 - 1 2 x 2 + y 2 + z 2 · 2 x = x x 2 + y 2 + z 2
      g r a d f x , y , z = 1 x 2 + y 2 + z 2 x , y , z
      1 1 + 1 + 4 - 1 , 1 , 2 · 1 , 2 , 2 · 1 1 + 4 + 4 = 1 6 - 1 + 2 + 4 · 1 3 = 5 18

    3. f x = 2 x + y + 2 z + x = 2 2 x + y + z g r a d f x , y , z = 2 2 x + y + z , x + 2 y + z , x + y + 2 z
      g r a d f 2 , 2 , - 1 = 2 5 , 5 , 2 2 5 , 5 , 2 · 5 , 5 , 2 1 5 , 5 , 2 = 2 25 + 25 + 4 = 2 54 = 6 6

コード(Emacs)

Python 3

#!/usr/bin/env python3
from sympy import pprint, symbols, log, sqrt, Matrix, Derivative

x, y, z = symbols('x, y, z')
xs = [x, y, z]
f = x ** 2 * y
g = log(sqrt(x ** 2 + y ** 2 + z ** 2))
h = (x + y) ** 2 + (y + z) ** 2 + (z + x) ** 2

fs = [(f, 2), (g, 3), (h, 3)]
gradfs = [Matrix([Derivative(f0, xi, 1).doit() for xi in xs][:i])
          for f0, i in fs]
points = [((2, -1), (1, 1)),
          ((-1, 1, 2), (1, 2, 2)),
          ((2, 2, - 1), (5, 5, 2))]

for i, ((f, _), gradf, (p1, p2)) in enumerate(zip(fs, gradfs, points)):
    print(f'({chr(ord("a") + i)})')
    p1 = Matrix(p1)
    p2 = Matrix(p2) / Matrix(p2).norm()
    for t in [f, gradf.T, p1.T, p2.T, gradf.subs(dict(zip(xs, p1))).dot(p2)]:
        pprint(t)
        print()
    print()

入出力結果(Terminal, Jupyter(IPython))

$ ./sample11.py
(a)
 2  
x ⋅y

⎡        2⎤
⎣2⋅x⋅y  x ⎦

[2  -1]

⎡√2  √2⎤
⎢──  ──⎥
⎣2   2 ⎦

0


(b)
   ⎛   ______________⎞
   ⎜  ╱  2    2    2 ⎟
log⎝╲╱  x  + y  + z  ⎠

⎡     x             y             z      ⎤
⎢────────────  ────────────  ────────────⎥
⎢ 2    2    2   2    2    2   2    2    2⎥
⎣x  + y  + z   x  + y  + z   x  + y  + z ⎦

[-1  1  2]

[1/3  2/3  2/3]

5/18


(c)
       2          2          2
(x + y)  + (x + z)  + (y + z) 

[4⋅x + 2⋅y + 2⋅z  2⋅x + 4⋅y + 2⋅z  2⋅x + 2⋅y + 4⋅z]

[2  2  -1]

⎡5⋅√6  5⋅√6  √6⎤
⎢────  ────  ──⎥
⎣ 18    18   9 ⎦

6⋅√6


$

0 コメント:

コメントを投稿