忘却の微分方程式(171) Maxima、{vect}、ベクトル解析、ダイバージェンス

Joseph Halfmoon

前回は、スカラー場からベクトル(勾配)を求めるグラディエント(grad)を計算してみました。プロットもなんとかなる感じ?今回はベクトル場から発散(ダイバージェンス)を求めるdiv()関数を試用してみます。こんこんとベクトルが湧いてくるのよ?でも、お惚け老人には3次元空間ベクトル場の表現はムツカシイのでいつもの2次元ね。

※   MaximaおよびそのGUIであるwxMaximaの以下バージョンを使用させていただいております。

毎度のvect パッケージと plotdf パッケージ

ベクトル解析の関数どもを計算するのに vect パッケージを、またベクトル場をプロットするのに plotdf パッケージを使わせていただいております。まいどですが、vect パッケージのマニュアルページが以下に

23. Matrices and Linear Algebra

plotdf パッケージが以下に。

https://maths.cnam.fr/Membres/wilk/MathMax/help/Maxima/maxima_68.html

divergence

遥かな古代、大学の初年級だったと思うのですが、電磁気学の講義の最初の方で、

発散とは、ある点の近傍についての単位体積あたりの力線の出発数である

divE

とか習ったような、習わんかったような。。。

爾来、膨大な時間があったものの、まったく進歩していない年寄デス。上記の式で、ΔVという体積が出てきておるので、本来3次元空間の中で計算すべきダイバージェンスなのでありますが、例によって3次元空間のプロットがお惚け老人にはムズカシーという理由で次元を落として2次元空間で計算することも可能。

2次元空間でのダイバージェンスを、2次元の∇演算子と内積・を使って書き表すとこんな感じ。

DivE_2Dそして、vectパッケージには2次元でも3次元でも(切替はdimension制御変数への代入による)計算できる div()関数が備わってます。

先ずはベタなベクトル場の例

まずは「のっぺりした」ベクトル場 E1 です。x座標にはよらず、y座標に比例した「何か」がy成分を決めるもの。

load ("plotdf");
E1 : [0, y];
plotdf(E1, [x, -2, 2], [y, -2, 2]);

plotdf()関数でプロットしたベクトルの様子が以下に。E1_vect

上記のベクトル場に対してダイバージェンスを計算し、プロットしてみるコードが以下に。dimension:2ということで2次元を指定してます。

load ("vect");
dimension : 2;
D1: ev(express(div( E1 )), diff);
plot3d(D1, [x, -2, 2], [y, -2, 2],
  [grid, 39, 39],
  [palette, [gradient, red, orange, yellow, green]],
  color_bar, [xtics, 1], [ytics, 1], [ztics, 4],
  [color_bar_tics, 4])$

結果はのっぺりした「定数1」なので、ちょっとつまりませぬ。全面的に1が湧き出しているってか?DivE1

続いて人工的な例

もうちょっと凸凹のあるグラフが得たいということでアーティフィシャルなベクトル場E2を定義。

E2 : [cos(x), cos(y)];
plotdf(E2, [x, -2, 2], [y, -2, 2]);

ベクトル場のプロットが以下に。左下の方で「湧き出し」て右上の方で「吸い込まれ」ている気がしないでもない。E2_vect

そして上記のベクトル場のダイバージェンス(div)をとると、

D2: ev(express(div( E2 )), diff);
plot3d(D2, [x, -2, 2], [y, -2, 2],
  [grid, 39, 39],
  [palette, [gradient, red, orange, yellow, green]],
  color_bar, [xtics, 1], [ytics, 1], [ztics, 4],
  [color_bar_tics, 4])$

プロットが以下に。DivE2

確かに左下の方で「湧き出し」て右上の方で「吸い込まれ」ているみたい。いいのかそんな感じで。

忘却の微分方程式(170) Maxima、{vect}、ベクトル解析、gradのプロット へ戻る

忘却の微分方程式(172) Maxima、{vect}、ベクトル解析、ローテーション へ進む