nano_exit

量子力学、固体物理、fortran、python、etc

ストークスの定理の最も簡単な例

xy平面内でのみ回転している、大きさ1の回転を考える。
つまり、

 ( \nabla \times \vec{A} )_x = 0
 ( \nabla \times \vec{A} )_y = 0
 ( \nabla \times \vec{A} )_z = 1

ここから元のベクトルを復元すると、

 \vec{A} = \frac{1}{2}( - y, x, 0 )

ただし、微分でしか定義されていないので、一意には決まらずに任意性が残る。
例えば以下のようなものも可能である。

 \vec{A} = ( 0, x, 0 )

今回は上のものを考える。これをgnuplotで図示すると、

f:id:koideforest:20170121163708p:plain

グルグルとベクトルが渦を巻いているのが良くわかる。
原点から遠ざかるにつれて、そのベクトルの大きさは大きくなる。
実は、「最も簡単な回転しているベクトル」を想像したとき、これの全部のベクトルの大きさが1のver.を思いついたが、それは ( \nabla \times \vec{A} )_zが1にならず 1/\sqrt{x^2+y^2}になって原点で発散、外側で減衰していくので、個人的にはちょっとした発見があった。

これを用いてストークスの定理を考察する。
積分範囲を半径1の円に取る。そのため、線積分の方は、単位円の周りにそって一周する形になる。

面積積分の方は、何も考えずに

 \int_S ( \nabla \times \vec{A} )_z dS = \int_S dS = \pi

と求まる。

積分の方は体積素片を系に合わせて考察する必要があり、ここが読んでるだけではピンと来ないところではある。
単位円一周なので、 r=1極座標に対して \theta 0 \rightarrow 2\piまで動かして積分すればよい。積分変数を \thetaに変換するのを忘れないように気を付けると、

 
\displaystyle \oint_C \vec{A} d\vec{r} = \oint_C A_x dx + \oint_C A_y dy + \oint_C A_z dz \\
\displaystyle   = \int^{2\pi}_{0} A_x( \theta ) \frac{ dx }{ d\theta } d\theta
\displaystyle   + \int^{2\pi}_{0} A_y( \theta ) \frac{ dy }{ d\theta } d\theta
\displaystyle   + \int^{2\pi}_{0} A_z( \theta ) \frac{ dz }{ d\theta } d\theta \\
\displaystyle   = \int^{2\pi}_{0} ( - \frac{1}{2}{\rm sin}( \theta ) )( - {\rm sin}( \theta ) ) d\theta
\displaystyle   + \int^{2\pi}_{0} \frac{1}{2}{\rm cos}( \theta ) {\rm cos}( \theta ) d\theta 
\displaystyle   = \frac{1}{2} \int^{2\pi}_{0} d\theta = \pi
\\

という感じで、面積積分と同じになることが確認できた。

ちなみに、rotationを計算したpythonのコードは以下のものを使用。

import numpy as np

def a( x, y ):
  x1 = 0.2 * x
  y1 = 0.2 * y
  ax = -0.5 * y1
  ay = 0.5 * x1
  aa = np.sqrt( ax**2 + ay**2 )
  s = '{:f} {:f} {:f} {:f} {:f}\n'.format( x1, y1, ax, ay, aa )
  return s

f = open( 'simple_rot.dat', 'w')
for x in range(6):
  for y in range(6):
    if np.sqrt( ( 0.2 * x )**2 + ( 0.2 * y )**2 ) > 1. : continue
    f.write( a(  x,  y ) )
    f.write( a( -x,  y ) )
    f.write( a(  x, -y ) )
    f.write( a( -x, -y ) )
f.close()

gnuplotのコマンドは以下の通り。

set terminal png
set output 'simple_rot.png'
set xr[-1.2:1.2]
set yr[-1.2:1.2]
set palette rgbformulae 31,13,10
pl 'simple_rot.dat' u 1:2:3:4:5 w vector lc palette
unset output