Maxima で drawdf() を使って2次元ベクトル方向場を描く

Maxima でベクトル場(電場・磁場)を描く」では,ごちゃごちゃと設定してベクトル場を描いていたが,こと2次元ベクトルの方向場(大きさが一定で向きだけを表すベクトル場)に限れば,drawdf パッケージを使ってもっと簡単に描けることがわかったのでメモ。

In [1]:
/* 最初に1回だけロードする */
load(drawdf)$

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

In [2]:
Ex(x, y):= x/sqrt(x**2 + y**2)**3$
Ey(x, y):= y/sqrt(x**2 + y**2)**3$

/* これだけで方向場を描いてくれる。簡単。*/
/* ベクトルの大きさも勝手に規格化してくれるし。*/
/* (0, 1) においた正電荷 */
drawdf([Ex(x, y-1), Ey(x, y-1)], [x, -3, 3], [y, -3, 3])$

In [3]:
/* (0, 1) においた正電荷と (0, -1) においた負電荷 */
/* オプションの設定例 */
drawdf([Ex(x, y-1) - Ex(x, y+1), Ey(x, y-1) - Ey(x, y+1)], 
       [x, -3, 3], [y, -3, 3], 
       /* 方向ベクトル場の色 */
       field_color = blue, 
       /* ベクトル始点の格子数 */
       field_grid=[20, 20], 
       
       /* 縦横比 */
       proportional_axes = xy,
       /* 目盛非表示 */
       xtics=false, ytics=false, 
       /* title のフォントサイズの変更例。*/
       title = "{/=16 正電荷と負電荷がつくる電場の向き}", 
       
       /* 正電荷の周りを白で塗りつぶす */
       color = white,
       point_size = 3, 
       point_type = 7, 
       points([[0, 1]]),
       /* 正電荷 */
       color = black,
       point_size = 1.5, 
       point_type = 6, 
       points([[0, 1]]),
       label(["+", 0, 1]), 
       /* 負電荷の周りを白で塗りつぶす */
       color = white,
       point_size = 3, 
       point_type = 7, 
       points([[0, -1]]),
       /* 負電荷 */
       color = red, 
       point_size = 1.5, 
       point_type = 6, 
       points([[0, -1]]),
       label(["ー", 0, -1]), 
       
       /* Web ページ用に画像ファイルとして保存 */
       file_name = drawdf02, 
       terminal = 'svg
       )$

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

In [4]:
/* 電場 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$

drawdf(
  [Ex(x, y), Ey(x, y)], [x, -3, 3], [y, -3, 3], 
  /* 方向ベクトル場の色 */
  field_color = blue, 
  /* ベクトル始点の格子数 */
  field_grid=[20, 20], 

/* 縦横比 */
  proportional_axes = xy,
  /* 目盛非表示 */
  xtics=false, ytics=false, 
  /* title */
  title = "{/=16 電気双極子がつくる電場の向き}", 
       
  /* 電気双極子 */
  color = red, 
  line_width = 5,
  head_length = 0.05,
  head_angle  = 30, 
  vector([0,-0.1],[0,0.2]), 
  
  /* Web ページ用に画像ファイルとして保存 */
  file_name = drawdf03, 
  terminal = 'svg
)$

直線電流がつくる磁場

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

drawdf(
  [Bx(x, y), By(x, y)], [x, -3, 3], [y, -3, 3], 
  /* 方向ベクトル場の色 */
  field_color = dark-green, 
  /* ベクトル始点の格子数 */
  field_grid=[20, 20], 

/* 縦横比 */
  proportional_axes = xy,
  /* 目盛非表示 */
  xtics=false, ytics=false, 
  /* title */
  title = "{/=16 直線電流がつくる磁場の向き}", 
       
  /* 電線の位置 */
  color = red,
  point_size = 1.5, 
  point_type = 6, 
  points([[0, 0]]),
  label(["・", 0, 0]), 
  
  /* Web ページ用に画像ファイルとして保存 */
  file_name = drawdf04, 
  terminal = 'svg
)$