先日,「gnuplot でベクトル場(電場・磁場)を描く」で描いてみたが,いろいろ検索すると palette でベクトルの色を(ベクトルの大きさに合わせて)可変にできるようなので,備忘録として。
点電荷がつくる電場 $\boldsymbol{E}$
位置 $\boldsymbol{r}_1$ にある点電荷 $q_1$ がつくる電場ベクトル $\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}$ 係数。実際の描画の際にベクトルの長さを微調整する係数。
正電荷がつくる電場
# 電場 E
Ex(x, y) = scaling * x/(sqrt(x**2 + y**2)**3)
Ey(x, y) = scaling * y/(sqrt(x**2 + y**2)**3)
# 電場 E の大きさは距離の2乗に反比例
E(x, y) = 1./(x**2 + y**2)
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.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 "正電荷がつくる電場"
# colorbox を非表示に
unset colorbox
# palette の cublehelix での設定例:
# start 0: blue, 1: red, 2: green
# cycles 0 で同一色の濃淡のみに
# saturation 3 が好み
# negative で強いところが濃くなる
set palette cubehelix start 0 cycles 0 saturation 3 negative
# using 始点のx : 始点のy : ベクトルのx成分 : ベクトルのy成分 : variable color 情報
plot "++" u 1:2:(Ex($1-x1,$2-y1)):(Ey($1-x1,$2-y1)):(log(E($1-x1,$2-y1))) \
w vec notitle lw 4 lc palette filled head
$\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}$ 係数。実際の描画の際にベクトルの長さを微調整する係数。
正電荷がつくる電場の向き
# 電場 E
Ex(x, y) = x/(sqrt(x**2 + y**2)**3)
Ey(x, y) = y/(sqrt(x**2 + y**2)**3)
# 電場 E の大きさ
E(x, y) = sqrt(Ex(x, y)**2 + Ey(x, y)**2)
# 規格化された hat E
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 19
# y 軸方向のサンプル数
set isosamples 19
# 矢印の長さ調整用
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 "正電荷がつくる電場の向き"
unset colorbox
set palette cubehelix start 0 cycles 0 saturation 3 negative
plot "++" u 1:2:(hEx($1-x1,$2-y1)):(hEy($1-x1,$2-y1)):(log(E($1-x1,$2-y1))) \
w vec notitle lw 4 lc palette filled head
負電荷がつくる電場の向き
# 電場 E
Ex(x, y) = -(x-x2)/(sqrt((x-x2)**2 + (y-y2)**2)**3)
Ey(x, y) = -(y-y2)/(sqrt((x-x2)**2 + (y-y2)**2)**3)
# 電場 E の大きさ
E(x, y) = sqrt(Ex(x, y)**2 + Ey(x, y)**2)
# 規格化された hat E
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 19
# y 軸方向のサンプル数
set isosamples 19
# 矢印の長さ調整用
scaling = 0.2
# 負電荷の位置に赤丸と -
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 "負電荷がつくる電場の向き"
unset colorbox
set palette cubehelix start 1 cycles 0 saturation 3 negative
plot "++" u 1:2:(hEx($1,$2)):(hEy($1,$2)):(log(E($1,$2))) \
w vec notitle lc palette lw 4 filled head
正電荷と負電荷がつくる電場の向き
# 電場 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)
# 電場の大きさ
E(x, y) = sqrt(E2x(x, y)**2 + E2y(x, y)**2)
# 規格化された hat E
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 19
# y 軸方向のサンプル数
set isosamples 19
# 矢印の長さ調整用
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"
# 負電荷の位置に赤丸と -
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 "正電荷と負電荷がつくる電場の向き"
unset colorbox
set palette cubehelix start 2 cycles 0 saturation 3 negative
plot "++" u 1:2:(hE2x($1,$2)):(hE2y($1,$2)):(log(E($1,$2))) \
w vec notitle lc palette lw 4 filled head
電気双極子がつくる電場
$$\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}
電気双極子がつくる電場の向き
# 電場 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 19
# y 軸方向のサンプル数
set isosamples 19
scaling = 0.15
# 電気双極子 p
set arrow 1 from 0, -0.2 to 0, 0.2 filled head lw 5 lc "red" lt 1
set title "電気双極子がつくる電場の向き"
unset colorbox
set palette cubehelix start 0 cycles 0 saturation 3 negative
plot "++" u 1:2:(hEx($1,$2)):(hEy($1,$2)):(log(E($1,$2)))\
w vec notitle lc palette lw 4 filled head
直線電流がつくる磁場 $\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}
直線電流がつくる磁場
# 磁場 B
Bx(x, y) = - scaling * y/(x**2 + y**2)
By(x, y) = scaling * x/(x**2 + y**2)
# 磁場 B の大きさ
B(x, y) = 1./sqrt(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 19
# y 軸方向のサンプル数
set isosamples 19
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 "直線電流がつくる磁場"
unset colorbox
set palette cubehelix start 1 cycles 0 saturation 3 negative
plot "++" u 1:2:(Bx($1,$2)):(By($1,$2)):(log(B($1,$2)))\
w vec notitle lw 4 lc palette filled head
直線電流がつくる磁場の向き
# 磁場 B
Bx(x, y) = - y/(x**2 + y**2)
By(x, y) = x/(x**2 + y**2)
# 磁場 B の大きさ
B(x, y) = sqrt(Bx(x, y)**2 + By(x, y)**2)
# 規格化された hat B
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 19
set isosamples 19
scaling = 0.2
# 電線の位置
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 "直線電流がつくる磁場の向き"
unset colorbox
set palette cubehelix start 1 cycles 0 saturation 3 negative
plot "++" u 1:2:(hBx($1,$2)):(hBy($1,$2)):(log(B($1,$2))) \
w vec notitle lw 4 lc palette filled head