読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

(32) 膜振動

円形の薄膜の振動を考えます。
極座標を使うと、運動方程式は以下になります。

ここでvは音速です。

この方程式は、時間と偏角に関して線形なので、変数分離して周波数領域で解くことができます。すなわち、

として一般性を失いません。
運動方程式の解となるはBessel函数として知られています。

ドラムのように、半径aで振幅が0となる境界条件を考えます。例えば、の零点を探すのに、グラフを書いてみましょう。

/* 6.1.16m */
plot2d(bessel_j(2, x), [x, 0, 30]);

原点の次に5前後に最初の零点があることがわかりましたので、その値を数値的に計算しましょう。

/* 6.1.17m */
find_root(bessel_j(2, x), x, 5, 7);

使用した機能

求めた値を使って、ドラムのn=2の振動をアニメーション化してみましょう。

/* 6.1.18m */
load(draw);
z : 5.135622301840683^2;
for t : 0 thru 6 do
draw3d(enhanced3d=true, surface_hide=true,
  explicit(-bessel_j(2, sqrt(x^2+y^2))*x*y/(x^2+y^2) * cos(t) * (1+signum(z-x^2-y^2))-0.1*(1-signum(z-x^2-y^2)), x, -6.5, 6.5, y, -6.5, 6.5), zrange=[-0.6, 0.6]);


使用した機能