schrodinger1d プログラム仕様

概要: 1次元シュレーディンガー方程式ソルバー

詳細説明:

このスクリプトは、1次元の定常シュレーディンガー方程式を射撃法を用いて数値的に解きます。 原子単位系 (atomic units) を使用し、Verlet積分を用いて波動関数を計算します。 境界条件として「漸近条件 (asymptotic)」または「ゼロ条件 (zero)」を選択でき、 結果はExcelファイルに保存され、matplotlibで可視化されます。

関連リンク:

schrodinger1d_usage

Quantum.schrodinger1d.V(x)

概要: ポテンシャルエネルギーを計算します。

詳細説明:

現在の実装では、調和振動子ポテンシャル V(x) = 0.5 * x**2 (Ha) を使用しています。 他のポテンシャルを使用する場合は、この関数を変更してください。

引数:
param x:

位置 (原子単位)

type x:

float or numpy.ndarray

戻り値:
returns:

ポテンシャルエネルギー V(x) (Ha)

rtype:

float or numpy.ndarray

Quantum.schrodinger1d.initialize()

概要: コマンドライン引数を初期化し、パースします。

詳細説明:

argparse モジュールを使用して、エネルギーの推定値、計算領域、メッシュ点数、 波動関数の発散閾値、レポート間隔、出力ファイル名、境界条件、初期微分値といった パラメータを定義します。

戻り値:
returns:

argparse.ArgumentParserオブジェクトとargparse.Namespaceオブジェクトを含むタプルです。

rtype:

tuple[argparse.ArgumentParser, argparse.Namespace]

Quantum.schrodinger1d.main()

概要: プログラムのメイン処理を実行します。

詳細説明:

本関数は、まずコマンドライン引数をパースして初期設定を行います。 次に、パースされた引数を使用して solve_schrodinger 関数を呼び出し、 1次元シュレーディンガー方程式を解きます。 その後、計算結果のメッセージと終了点の波動関数値を出力し、 最後に save_and_plot 関数を呼び出して結果をExcelに保存し、グラフを表示します。

戻り値:
returns:

なし

rtype:

None

Quantum.schrodinger1d.save_and_plot(x, psi, outfile, diverged=False, diverged_x=None)

概要: 計算結果の波動関数データをExcelファイルに保存し、matplotlibでプロットします。

詳細説明:

波動関数 psi と確率密度 abs(psi)**2 をExcelファイル (outfile) に保存します。 matplotlibを用いて psi と abs(psi)**2 をグラフ表示します。 波動関数が発散した場合は、発散が始まったx座標に垂直な破線が追加され、y軸が対数スケールになります。

引数:
param x:

x座標の配列

type x:

numpy.ndarray

param psi:

計算された波動関数の配列

type psi:

numpy.ndarray

param outfile:

データ保存先のExcelファイル名

type outfile:

str

param diverged:

波動関数が計算中に発散したかどうかを示すフラグ。デフォルトはFalse。

type diverged:

bool

param diverged_x:

波動関数が発散し始めたx座標。diverged がTrueの場合にのみ使用されます。 デフォルトはNone。

type diverged_x:

float or None

戻り値:
returns:

なし

rtype:

None

Quantum.schrodinger1d.solve_schrodinger(E, L, nx, psi_max, report_step, bc, eps)

概要: 1次元シュレーディンガー方程式を射撃法で解きます。

詳細説明:

Verlet積分を用いて波動関数を数値的に伝播させます。 指定された境界条件 (bc) に基づいて初期条件を設定し、 計算中に波動関数が psi_max を超えた場合、発散と判断して計算を中断します。 計算の進行状況は report_step 間隔で出力されます。

引数:
param E:

エネルギー固有値の推定値 (Ha)

type E:

float

param L:

計算領域の半分のサイズ。xは[-L, L]の範囲になります。

type L:

float

param nx:

メッシュ点の数

type nx:

int

param psi_max:

波動関数の発散を検出するための閾値

type psi_max:

float

param report_step:

計算の進行状況を報告するステップ間隔。0以下の場合は報告しません。

type report_step:

int

param bc:

境界条件のタイプ ("asymptotic" または "zero")

type bc:

str

param eps:

bc="zero" の場合に使用される、x=-Lにおける波動関数の初期微分値

type eps:

float

戻り値:
returns:

x座標の配列 x_full、波動関数の配列 psi_full、および計算情報を含む辞書 info のタプルを返します。 info辞書には、"success" (bool)、"diverged" (bool)、"diverged_x" (float or None)、 "message" (str) のキーが含まれています。

rtype:

tuple[numpy.ndarray, numpy.ndarray, dict]