gnuplot でベクトル場(電場・磁場)を描く

電磁気学の授業の準備。

gnuplot では,special file-name “++” を使うと,データファイルを作らずにベクトル場を描くことができる。ちょっと出来上がりがしょぼいが,簡単にベクトル場を表示できるので使ってみる。

点電荷がつくる電場 $\boldsymbol{E}$

\begin{eqnarray}
\boldsymbol{E}
&=& \frac{q_1}{4\pi \varepsilon_0} \frac{\boldsymbol{r} – \boldsymbol{r}_1}{|\boldsymbol{r} – \boldsymbol{r}_1|^3}\end{eqnarray}

$z=0$ の $xy$ 平面で2次元ベクトル場を描く。

$$\boldsymbol{r} = (x, y, 0), \quad \boldsymbol{r}_1 = (x_1, y_1, 0)$$$$E_x = s \frac{x-x_1}{\left((x-x_1)^2 + (y-y_1)^2\right)^{3/2}}$$$$E_y = s \frac{y-y_1}{\left((x-x_1)^2 + (y-y_1)^2\right)^{3/2}}$$

$s$ は $\mbox{scaling}$ 係数。実際の描画の際にベクトルの長さを微調整する係数。

正電荷がつくる電場

In [1]:
# 電場 E
Ex(x, y) = scaling * x/(sqrt(x**2 + y**2)**3)
Ey(x, y) = scaling * y/(sqrt(x**2 + y**2)**3)

reset
unset xtics
unset ytics
unset border

# 表示範囲の設定
set xrange [-3:3]
set yrange [-3:3]

# special filename "++" のときは
# urange, vrange で描画範囲の設定
set urange [-3:3]
set vrange [-3:3]
set size ratio 1

# x 軸方向のサンプル数
set samples 13
# y 軸方向のサンプル数
set isosamples 13

scaling = 0.2

# 正電荷の位置に青丸と +
x1 = 0
y1 = 1
set label 1 point pt 6 ps 1.5 lc "blue" at x1, y1
set label 2 center at first x1, y1 "+" tc "blue"

set title "正電荷がつくる電場"
plot "++" using 1:2:(Ex($1-x1,$2-y1)):(Ey($1-x1,$2-y1)) \
     w vec notitle lc "blue" lw 1.5

$\boldsymbol{E}$ の向きを表す単位ベクトル場

電場 $\boldsymbol{E}$ の大きさは電荷からの距離の2乗に反比例するので,上図のようにベクトルの長さが大きく変化する。これはこれで正しいのだが,見やすくするために,以下のように $\boldsymbol{E}$ の向きを表す単位ベクトル場(大きさが $1$)を定義して,ベクトルの向きのみを正しく描画する。

$$\hat{\boldsymbol{E}} \equiv \frac{\boldsymbol{E}}{\sqrt{\boldsymbol{E}\cdot\boldsymbol{E}}} =
\frac{\boldsymbol{r} – \boldsymbol{r}_1}{|\boldsymbol{r} – \boldsymbol{r}_1|}$$$$\hat{E}_x = s \frac{x-x_1}{\sqrt{(x-x_1)^2 + (y-y_1)^2}}$$$$\hat{E}_y = s \frac{y-y_1}{\sqrt{(x-x_1)^2 + (y-y_1)^2}}$$

$s$ は $\mbox{scaling}$ 係数。実際の描画の際にベクトルの長さを微調整する係数。

正電荷がつくる電場の向き

In [2]:
# 電場 E
Ex(x, y) = x/(sqrt(x**2 + y**2)**3)
Ey(x, y) = y/(sqrt(x**2 + y**2)**3)

# 規格化された hat E
E(x, y) = sqrt(Ex(x, y)**2 + Ey(x, y)**2)
hEx(x, y) = scaling * Ex(x, y)/E(x, y)
hEy(x, y) = scaling * Ey(x, y)/E(x, y)

reset
unset xtics
unset ytics
unset border
# 表示範囲の設定
set xrange [-3:3]
set yrange [-3:3]

# special filename "++" のときは
# urange, vrange で描画範囲の設定
set urange [-3:3]
set vrange [-3:3]
set size ratio 1

# x 軸方向のサンプル数
set samples 13
# y 軸方向のサンプル数
set isosamples 13

scaling = 0.18

# 正電荷の位置に青丸と +
x1 = 0
y1 = 1
set label 1 point pt 6 ps 1.5 lc "blue" at x1, y1
set label 2 center at first x1, y1 "+" tc "blue"

set title "正電荷がつくる電場の向き"
plot "++" using 1:2:(hEx($1-x1,$2-y1)):(hEy($1-x1,$2-y1)) \
     w vec notitle lc "blue" lw 1.5

負電荷がつくる電場の向き

In [3]:
# 電場 E
Ex(x, y) = -x/(sqrt(x**2 + y**2)**3)
Ey(x, y) = -y/(sqrt(x**2 + y**2)**3)

# 規格化された hat E
E(x, y) = sqrt(Ex(x, y)**2 + Ey(x, y)**2)
hEx(x, y) = scaling * Ex(x, y)/E(x, y)
hEy(x, y) = scaling * Ey(x, y)/E(x, y)

reset
unset xtics
unset ytics
unset border

# special filename "++" のときは
# urange, vrange で描画範囲の設定
set urange [-3:3]
set vrange [-3:3]
set size ratio 1

# x 軸方向のサンプル数
set samples 13
# y 軸方向のサンプル数
set isosamples 13

scaling = 0.18

# 負電荷の位置に赤丸と -
x2 = 0
y2 = -1
set label 3 point pt 6 ps 1.5 lc "red" at x2, y2
set label 4 center at first x2, y2 "-" tc "red"

set title "負電荷がつくる電場の向き"
plot "++" using 1:2:(hEx($1-x2,$2-y2)):(hEy($1-x2,$2-y2)) \
     w vec notitle lc "red" lw 1.5

正電荷と負電荷がつくる電場の向き

In [4]:
# 電場 E
Ex(x, y) = x/sqrt(x**2 + y**2)**3
Ey(x, y) = y/sqrt(x**2 + y**2)**3

# 正電荷と負電荷がつくる電場
E2x(x, y) = Ex(x-x1, y-y1) - Ex(x-x2, y-y2)
E2y(x, y) = Ey(x-x1, y-y1) - Ey(x-x2, y-y2)

# 規格化された hat E
E(x, y) = sqrt(E2x(x, y)**2 + E2y(x, y)**2)
hE2x(x, y) = scaling * E2x(x, y)/E(x, y)
hE2y(x, y) = scaling * E2y(x, y)/E(x, y)

reset
unset xtics
unset ytics
unset border

# special filename "++" のときは
# urange, vrange で描画範囲の設定
set urange [-3:3]
set vrange [-3:3]
set size ratio 1

# x 軸方向のサンプル数
set samples 17
# y 軸方向のサンプル数
set isosamples 17

scaling = 0.18

# 正電荷の位置に青丸と +
x1 = 0
y1 = 1
set label 1 point pt 6 ps 1.5 lc "blue" at x1, y1
set label 2 center at first x1, y1 "+" tc "blue"

# 負電荷の位置に赤丸と -
x2 = 0
y2 = -1
set label 3 point pt 6 ps 1.5 lc "red" at x2, y2
set label 4 center at first x2, y2 "-" tc "red"

set title "正電荷と負電荷がつくる電場の向き"
plot "++" using 1:2:(hE2x($1,$2)):(hE2y($1,$2)) \
     w vec notitle lc 1 lw 1.8

電気双極子がつくる電場

$$\boldsymbol{E} = 3 \frac{\boldsymbol{r}\cdot\boldsymbol{p}}{r^5} \boldsymbol{r}
– \frac{\boldsymbol{p}}{r^3}$$

$\boldsymbol{p} = (0, 1, 0), \quad z = 0$ として

\begin{eqnarray}
E_x &=& \frac{3}{\left( x^2 + y^2 \right)^{5/2}} x y \\
E_y &=& \frac{3}{\left( x^2 + y^2 \right)^{5/2}} y^2 – \frac{1}{\left( x^2 + y^2 \right)^{3/2}} \\
\end{eqnarray}

電気双極子がつくる電場の向き

In [5]:
# 電場 E
Ex(x, y) = 3.* x*y/sqrt(x**2 + y**2)**5 
Ey(x, y) = 3.* y*y/sqrt(x**2 + y**2)**5 - 1./sqrt(x**2 + y**2)**3

# 規格化された hat E
E(x, y) = sqrt(Ex(x, y)**2 + Ey(x, y)**2)
hEx(x,y) = scaling * Ex(x, y)/E(x, y)
hEy(x,y) = scaling * Ey(x, y)/E(x, y)

reset
unset xtics
unset ytics
unset border
set zeroaxis

# special filename "++" のときは
# urange, vrange で設定
set urange [-3:3]
set vrange [-3:3]
set size ratio 1

# x 軸方向のサンプル数
set samples 17
# y 軸方向のサンプル数
set isosamples 17

scaling = 0.18

# 電気双極子 p
set arrow 1 from 0, -0.2 to 0, 0.2 filled lw 5 lc "red" lt 1

set title "電気双極子がつくる電場の向き"
plot "++" using 1:2:(hEx($1,$2)):(hEy($1,$2))\
     w vec notitle lw 1.8

直線電流がつくる磁場 $\boldsymbol{B}$

$$\boldsymbol{B} = \frac{\boldsymbol{I}\times\boldsymbol{\rho}}{\rho^2}$$$$ \boldsymbol{I} = (0, 0, I), \quad \boldsymbol{\rho} = (x, y, 0)$$\begin{eqnarray}
B_x &=& – \frac{ I y}{x^2 + y^2} \\
B_y &=& \frac{ I x}{x^2 + y^2}
\end{eqnarray}

直線電流がつくる磁場

In [6]:
# 磁場 B
Bx(x, y) = - scaling * y/(x**2 + y**2)
By(x, y) =   scaling * x/(x**2 + y**2)

reset
unset xtics
unset ytics
unset border
set zeroaxis

# special filename "++" のときは
# urange, vrange で設定
set urange [-3:3]
set vrange [-3:3]
set size ratio 1

# x 軸方向のサンプル数
set samples 15
# y 軸方向のサンプル数
set isosamples 15

scaling = 0.25

# 電線の位置
set label 1 point pt 6 ps 1.5 lc "blue" at 0, 0
set label 2 center at first 0,0 "+" tc "blue"

set title "直線電流がつくる磁場"
plot "++" using 1:2:(Bx($1,$2)):(By($1,$2))\
     w vec notitle lw 1.8

直線電流がつくる磁場の向き

In [7]:
# 磁場 B
Bx(x, y) = - y/(x**2 + y**2)
By(x, y) =   x/(x**2 + y**2)

# 規格化された hat B
B(x, y) = sqrt(Bx(x, y)**2 + By(x, y)**2)
hBx(x, y) = scaling * Bx(x, y)/B(x, y)
hBy(x, y) = scaling * By(x, y)/B(x, y)

reset
unset xtics
unset ytics
unset border
set zeroaxis
# 表示範囲の設定
set size ratio 1

# special filename "++" のときは
# urange, vrange で設定
set urange [-3:3]
set vrange [-3:3]

set samples 17
set isosamples 17

scaling = 0.25

# 電線の位置
set label 1 point pt 6 ps 1.5 lc "blue" at 0, 0
set label 2 center at first 0,0 "+" tc "blue"

set title "直線電流がつくる磁場の向き"
plot "++" using 1:2:(hBx($1,$2)):(hBy($1,$2)) \
     w vec notitle lw 1.8