Processing math: 100%

2018年1月18日木曜日

学習環境

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


    1. grad(f(x,y))=(2xy,x2)grad(f(2,-1))·(1,1)1+1=(-4,4)·(1,1)·12=-4+42=0

    2. fx=12(x2+y2+z2)-12x2+y2+z2·2x=xx2+y2+z2
      grad(f(x,y,z))=1x2+y2+z2(x,y,z)
      11+1+4(-1,1,2)·(1,2,2)·11+4+4=16(-1+2+4)·13=518

    3. fx=2(x+y)+2(z+x)=2(2x+y+z)grad(f(x,y,z))=2(2x+y+z,x+2y+z,x+y+2z)
      grad(f(2,2,-1))=2(5,5,2)2(5,5,2)·(5,5,2)1|(5,5,2)|=225+25+4=254=66

コード(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 コメント:

コメントを投稿