Diis struct

提供: ComplexRI: Manual
2026年5月26日 (火) 04:17時点におけるHirano (トーク | 投稿記録)による版 (ページの作成:「== 概要 == diis_struct はSCF計算に対する収束加速法であるDIIS法の計算を行う構造体である。 SCF計算は分極計算やWHAM計算等、多く…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

diis_struct はSCF計算に対する収束加速法であるDIIS法の計算を行う構造体である。

SCF計算は分極計算やWHAM計算等、多くの場面で見られ、DIIS法は容易に適用される。

現在FreeFlexではWHAM計算のみにDIISを用いている。

変数

ndiis: DIISの次数。過去ndiis回のSCF結果から、次のステップでの解を予測する。

n: データ配列の大きさ。

x: 過去ndiis回のSCFデータ。 x(1:ndiis+1,1:n)

計算の詳細

構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://wikimedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle A\mathbf{x} = \mathbf{b} } で表される連立方程式を解くことと、 構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://wikimedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle L=\frac{1}{2}|A\mathbf{x}-\mathbf{b}|^2 } を最小化するを求めることは等価である。

ここで、過去ステップ分のの線形結合により推定ベクトル を作ることを考える。

ただしここではとする。 に依存しないとき、すなわち線形であるときには 構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://wikimedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle \mathbf{x}^{n+1}} により得られる残差は直ちに 構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://wikimedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle L=\frac{1}{2}|A\mathbf{x}^{n+1}-\mathbf{b}|^2 \\ =\frac{1}{2}|\sum_ic_iA\mathbf{x}^i-\mathbf{b}|^2 \\ =\frac{1}{2}|\sum_ic_i\mathbf{p}^i|^2 } と計算される。ここで残差ベクトル構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://wikimedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle \mathbf{p}_i=A\mathbf{x}^i-b} である。

推定解としてもっともらしいものは、構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://wikimedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle L} を最小化するような構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://wikimedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle {c}} の組である。

拘束条件構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://wikimedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle \sum_{i=1}^nc_i=1} が課せられているから、Lagrangeの未定乗数法により目的関数 構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://wikimedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle \mathscr{L}=L-\lambda(\sum_i c_i-1) } を定義すれば良い。 ここから構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://wikimedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle L} を最小化する条件として、以下の式が得られる。 構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://wikimedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle \frac{\partial \mathscr{L}}{\partial c_i}=\sum_j c_j\mathbf{p}^j\cdot\mathbf{p}^i-\lambda=0 \\ \frac{\partial \mathscr{L}}{\partial \lambda}=1-\sum_i c_i=0 }

これらを行列形式で書けば 構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://wikimedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle \begin{align} \begin{pmatrix} B_{11}&B_{12}&\cdots&B_{1n}&-1 \\ B_{21}&&&&-1 \\ \vdots&&&&\vdots \\ B_{n1}&&&&-1 \\ -1&-1&-1&-1&0 \end{pmatrix} \begin{pmatrix} c_1 \\ c_2 \\ \vdots \\ c_n \\ \lambda \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \\ \vdots \\ 0 \\ -1 \end{pmatrix} \end{align} }

となる。ここで構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://wikimedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle B_{ij}=\mathbf{p}_i\cdot\mathbf{p}_j} とした。

出力

現状下記が実装されている。 必要に応じて各自追加する。

 subroutine init(ndiis,n)
 !!!
 !!! 配列のallocationやゼロセットを行う。
 !!!
 
 subroutine store(x)
 !!!
 !!! 過去のデータを保存する。
 !!!
 
 subroutine predict(x)
 !!!
 !!! 過去のデータからDIIS法により予測された、次のステップにおけるSCFの初期値を返す。
 !!!