数値精度 ======== 本節では :math:`{\mathcal H}\Phi` における数値精度の考慮事項を説明します。 浮動小数点表現 -------------- :math:`{\mathcal H}\Phi` はIEEE 754倍精度浮動小数点数を全体で使用します: - 実数: 64ビットdouble(``double``) - 複素数: 128ビットcomplex double(``double complex``) これにより約15-16桁の有効数字の精度が得られます。 数値誤差の原因 -------------- **有限精度演算** 各浮動小数点演算は小さな丸め誤差を導入します。 これらは反復アルゴリズム中に蓄積します。 **桁落ち誤差** ほぼ等しい数の減算では有効桁を失う可能性があります。 これは相転移近傍の特定の物理量で発生することがあります。 **オーバーフローとアンダーフロー** 非常に大きいまたは小さい中間値は表現可能な範囲を超える可能性があります。 :math:`{\mathcal H}\Phi` は通常の使用でこれらを避けるように設計されています。 収束判定条件 ------------ :math:`{\mathcal H}\Phi` はいくつかの収束判定条件を使用します: **Lanczos固有値収束** Lanczos反復は固有値の相対変化が指定された閾値 (デフォルト: :math:`10^{-14}`、すなわち ``LanczosEps = 14``)を下回ると収束します。 **固有ベクトル残差** 固有ベクトルの精度は :math:`|H|\psi\rangle - E|\psi\rangle|` でチェックされます。 **直交性** 複数の固有値の場合、固有ベクトル間の直交性は 再直交化によって維持されます。 収束閾値の設定 -------------- 収束閾値は ``ModPara`` 入力ファイルで指定します: ``LanczosEps`` 収束閾値を制御する整数。Lanczos法では、固有値と一つ前のステップの 固有値との相対誤差が :math:`10^{- {\rm LanczosEps}}` を下回ると収束した と判定します(デフォルト: ``LanczosEps = 14``)。 ``method="CG"`` の場合は、 残差ベクトルの2-ノルムが :math:`10^{- {\rm LanczosEps}/2}` を下回ると計算を終了します。 ``LanczosTarget`` 収束判定の対象とする固有値を指定する整数(例: ``1`` で基底状態、 ``2`` で第一励起状態)。 ``Lanczos_max`` 反復ステップ数の上限。上記の閾値に達した場合はそれより前に計算を終了します。 ほとんどのアプリケーションでは、デフォルト値で十分な精度が得られます。 検証とテスト ------------ :math:`{\mathcal H}\Phi` は以下を検証するテストケースを含んでいます: - 既知の解析結果に対する固有値の精度 - ハミルトニアンのエルミート性 - 粒子数と :math:`S_z` の保存 - 異なる計算方法間の一貫性 推奨事項 -------- **物理量の確認** 保存量(粒子数、 :math:`S_z` など)が数値精度の範囲内で 一定であることを常に確認してください。 **方法の比較** 可能な場合、LanczosとLOBPCG法の結果を比較してください。 一致は信頼できる結果を示します。 **システムサイズ依存性** より大きなシステムへの結果の外挿には注意が必要です。 数値誤差のスケーリングが異なる可能性があります。 **異常の報告** 予期しない数値的振る舞いが観察された場合は、 最小限の再現例とともに開発者に報告してください。