Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

シュレーディンガー方程式の数値解法

量子力学の世界を記述する基本方程式は、シュレーディンガー方程式 (Schrödinger Equation) です。 本節では、これをコンピュータで扱うためにどのように離散化するか、すなわち行列形式への変換について学びます。

支配方程式

1粒子の波動関数 に対する方程式は以下の通りです。

時間依存シュレーディンガー方程式 (TDSE)

時間非依存シュレーディンガー方程式 (TISE)

エネルギー固有状態(定常状態)を求めるための固有値方程式です。

ここで はハミルトニアン演算子、 はポテンシャルエネルギー、 はプランク定数(ディラック定数)です。 数値計算では、通常 となる単位系(原子単位系など)を採用して式を簡略化します。

空間の離散化(差分法)

1次元空間 を格子間隔 で離散化し、格子点 上の波動関数の値を とします。 運動エネルギー項(2階微分)を第2中心差分で近似すると以下のようになります。

これを用いると、ハミルトニアン の第 成分は次のように書けます( とする)。

これを整理すると、隣接する3点に関係する式となります。

行列形式

上記の式は、ハミルトニアンを行列 、波動関数をベクトル と見なせば、行列ベクトル積として表現できます。

ここで、

  • 対角成分:
  • 非対角成分:

このように、連続的な演算子であったハミルトニアンは、離散化によって三重対角行列 (Tridiagonal Matrix) に変換されます。 これにより、量子力学の問題は線形代数の問題(固有値問題や連立一次方程式)に帰着されます。

Rustにおける複素数の扱い

量子力学では複素数が必須です。Rustには標準で複素数型が含まれていないため、num-complex クレートを使用します。

[dependencies]
num-complex = "0.4"
use num_complex::Complex64; // 複素数型 (実部・虚部がf64)

fn multiply_by_i(z: Complex64) -> Complex64 {
    z * Complex64::i()
}

fn main() {
    let z = Complex64::new(1.0, 2.0); // 1 + 2i
    let result = multiply_by_i(z);

    println!("z * i = {}", result); // (-2 + 1i)
}

次節以降、この行列形式と複素数型を用いて具体的な問題を解いていきます。

Last change: , commit: ec78068