読み書きプログラミング

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

(22) トンネル効果

1次元のSchrödinger方程式は簡単な単位系を選択すると以下のように書けます。

ここで、

という位置エネルギーを考えると、が粒子の運動エネルギーより大きな場合がトンネル効果が現れる場合になります。
この条件では、波動関数は規格化因子を除いて以下のように仮定できます。

境界で関数と導関数が連続という条件から係数の満たすべき関係を求めましょう。

/* 5.2.5m */
psi_L(x) := exp(%i*k*x) + r*exp(-%i*k*x)$
psi_I(x) := a*exp(K*x) + b*exp(-K*x)$
psi_R(x) := t*exp(%i*k*x)$
set : [psi_L(0) = psi_I(0), psi_I(d) = psi_R(d),
         at(diff(psi_L(x), x), x=0) = at(diff(psi_I(x), x), x=0),
         at(diff(psi_I(x), x), x=d) = at(diff(psi_R(x), x), x=d)];


パラメータにそれっぽい値を仮定して、数値化してみましょう。

/* 5.2.6m */
params : [d = 1, K = 2, k = 4.0]$
sol : solve(set, [r, t, a, b]), params, expand, numer;

反射波と通過波の振幅を足してみましょう。

/* 5.2.8m */
cabs(r)^2 + cabs(t)^2, sol;

ほぼ1であることが確認できました。


波動関数の実部を使って可視化をしてみましょう。

/* 5.2.9m */
psi(x) := if x < 0 then psi_L(x)
              elseif (x >= 0) and (x < d) then psi_I(x)
              else psi_R(x)$
plot2d(realpart(psi(x)), [x, -8, 8]), sol[1], params;