電界中の誘電体の電束線
 一定電界 中に誘電率εで半径aの球状誘電体を入れたときの電気力線描くことを考えよう。電界は次の式のようになっている。
中に誘電率εで半径aの球状誘電体を入れたときの電気力線描くことを考えよう。電界は次の式のようになっている。
      =(1+
=(1+![(\[Epsilon] - \[Epsilon]_0)/(\[Epsilon] + 2\[Epsilon]_0)](HTMLFiles/index_3.gif)
 )
)  cosθ    r>a
cosθ    r>a
      =
=![(3\[Epsilon]_0)/(\[Epsilon] + 2\[Epsilon]_0)](HTMLFiles/index_7.gif) 
  cosθ    r<a
cosθ    r<a
            =-(1-
=-(1-![(\[Epsilon] - \[Epsilon]_0)/(\[Epsilon] + 2\[Epsilon]_0)](HTMLFiles/index_10.gif)
 )
) sinθ      r>a
sinθ      r>a
            =
=![(-3\[Epsilon]_0)/(\[Epsilon] + 2\[Epsilon]_0)](HTMLFiles/index_14.gif) 
  sinθ    r<a
sinθ    r<a    
 電束密度は
           D=e0 E r>a
           D=e E r<a
           である。
プログラム
定義
定数の定義
  
電界の定義。ここではIf文を使って定義することにする。
 ![Clear[Dr, Dth] ; Dr[r_, th_] := If[r>a, ep0 * (1 + (ep - ep0)/(ep + 2ep0) 2a^3/r^3) E0 Cos[th], ep * 3ep0/(ep + 2ep0) E0 Cos[th]] ;](HTMLFiles/index_17.gif) 
 ![Dth[r_, th_] := If[r>a, -ep0 * (1 - (ep - ep0)/(ep + 2ep0) 2a^3/r^3) E0 Sin[th], -3 * ep * ep0/(ep + 2ep0) E0 Sin[th]] ;](HTMLFiles/index_18.gif) 
球座標でφ=0のとき、直交座標に変換する。
 ![r[x_, y_] := Sqrt[x^2 + y^2] ; th[x_, y_] := Which[x>0, ArcTan[y/x], x<0, Pi + ArcTan[ ...  0] ; Dx[x_, y_] := Dr[r[x, y], th[x, y]] Cos[th[x, y]] - Dth[r[x, y], th[x, y]] Sin[th[x, y]] ;](HTMLFiles/index_19.gif) 
 ![Dy[x_, y_] := Dr[r[x, y], th[x, y]] Sin[th[x, y]] + Dth[r[x, y], th[x, y]] Cos[th[x, y]] ;](HTMLFiles/index_20.gif) 
作画のためのプログラム
 (x,y)にいるときに、つぎに電気力線がどちらの方向に進むか計算する。それは
                ,
, 
で与えられる。               
 ![(* x軸方向にどのくらい移動するか *)
calx[x_, y_] := Module[{length, ret = 0}, 
    len ... ;    ret = y + Dy[x, y]/r * dr ; 
    Return[ret] ; 
] ;](HTMLFiles/index_23.gif) 
 計算が終了したかどうかを判定する関数。この場合はx<0の領域のみ計算するので、下のようなプログラムになる。たとえば、r= を計算して、r<aの時に終了するとか変更することができる。
を計算して、r<aの時に終了するとか変更することができる。
 ![limit[x_, y_] := Module[{r}, 
Return[x>0] ;] ;](HTMLFiles/index_25.gif) 
 実際に作画するところ。liというリストにLine[{{x1,y1},{x2,y2}, ---,{xn,yn}}]という線を描くグラフィック要素を付け加えていく。はじめは(-2.66,-2)という点から始まって次の点を計算し、limit[x,y]で無い限り点を付け加える。左右対称を利用している。
ysの範囲を変更して、プログラムを実行し、li, tsl, tsrを?で表示させてみるとよい。
 ![cal[] := Module[{x, y}, 
li = {} ;     
For[ys = 2, ys >= -2, ys -= 0.25 ... evel[0.5], Disk[{0, 0}, a]}, li}, AspectRatio -> 3/4, PlotRange -> {{-2.66, 2.66}, {-2, 2}}]] ; 
]](HTMLFiles/index_26.gif) 
実行
epとep0の値を変化させて計算させると面白い。ep/ep0<1の時にははじくようになる。
 ![ep = 3 ; ep0 = 1 ; cal[]](HTMLFiles/index_27.gif) 
 ![[Graphics:HTMLFiles/index_28.gif]](HTMLFiles/index_28.gif) 
 ![ep = 1 ; ep0 = 3 ; cal[]](HTMLFiles/index_29.gif) 
 ![[Graphics:HTMLFiles/index_30.gif]](HTMLFiles/index_30.gif) 
 ![ep = 0 ; ep0 = 3 ; cal[]](HTMLFiles/index_31.gif) 
 ![[Graphics:HTMLFiles/index_32.gif]](HTMLFiles/index_32.gif) 
PlotVectorFieldを使うと簡単に表示できるが、美しさは今一歩。
 ![Needs["Graphics`PlotField`"] ; (* パッケ - ジの読み込み*)](HTMLFiles/index_33.gif) 
  
 ![PlotVectorField[{Dx[x, y], Dy[x, y]}, {x, -2, 2}, {y, -2, 2}, ScaleFunction -> (0.5&)]](HTMLFiles/index_35.gif) 
 ![[Graphics:HTMLFiles/index_36.gif]](HTMLFiles/index_36.gif) 
  
| Created by Mathematica (March 1, 2005) |  |