忘却の微分方程式(173) Maxima、{vect}、ベクトル解析、ラプラシアン

Joseph Halfmoon

graddivcurl(rot)と練習してきて今回は Laplacian です。過去回はスカラー場からベクトルが飛び出てきたり、あるいはその逆であったりしました。今回は地味。スカラー場をLaplacianすると出てくるのはスカラー。でも計算の奥底にはベクトルが息づいている?凸とか凹とか調べるのにお馴染みの操作です。

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

毎度のvect パッケージ

過去回では「ベクトル場」をプロットするのに plotdf パッケージのお世話になってきましたが、今回のプロットはスカラーで地味なのでplotdfはお休みです。使用するのはベクトル解析用の vect パッケージのみ。以下にマニュアルページ(日本語)へのリンクを貼らせていただきます。

23. Matrices and Linear Algebra

Laplacian

画像のエッジを検出するときの「ラプラシアン・フィルタ」は定番です。といいつつ信号処理の別シリーズなど眺めていたら、他のフィルタは練習していたのに、肝心の「ラプラシアン・フィルタ」はやってませんでした。トホホ。

今回 Maxima様のvectパッケージの中で定義されているベクトル微分演算子群の一つ Laplacian は、3次元のスカラー場が凹になっていたり、凸になっている様子を計算できる演算子であります。しかし「3次元の場が凹になっている」様子などは、お惚け老人がよく描けるところにないです。例によって1次元を端折って、場は2次元、描画は3次元風で行きたいと思います。

2次元のときのラプラシアンが以下に。Laplacian

プロット例

まずはラプラシアンを計算する対象のスカラー場を以下のように定義してみました。

f(x, y):= x^2 * y^2;

f(x, y)の値をz方向にとってグラフ化してみるのはこんな感じでよいですかね。

plot3d(f(x, y), [x, -2, 2], [y, -2, 2],
  [grid, 39, 39],
  [palette, [gradient, red, orange, yellow, green]],
  color_bar, [xtics, 1], [ytics, 1], [ztics, 2],
  [color_bar_tics, 2], [zlabel, "f(x,y)"])$

プロット結果は以下のようになります。plotF

原点(0,0)に近いところでは平らかなのだけれども、原点を底として凹になっている「地形」であることが分かります。

さて、vectパッケージを使って laplacianを計算し、その結果をプロットするステップが以下に。なお、vectパッケージはデフォルトで3次元を扱うようになっているので、dimension : 2 でことさらに2次元に抑えてくれるようにお願いしてます。

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

ラプラシアンの計算結果のプロットが以下に。plotL2

原点が底の凹ね。そんなの見れば分かるか。

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

忘却の微分方程式(174) Maxima、{draw}、3次元ベクトル場とスカラー場表示 へ進む