科学計算において、微分は不可欠な操作です。 その一方で、学部などで習うような数値微分を行おうとすると、

  • どの方法で微分をするか

  • 差分を取る際の刻み幅をどうするか

等、注意する点が多いです。 そのため、なるべく自動微分を行いたいです。

ではJuliaでハミルトニアンを自動微分するにはどうすればいいのでしょうか? JuliaにはZygoteJuliaDiffの中のパッケージ等様々なツールが存在します。 しかし、複素数を返す関数を標準でサポートはしていません。 その為、Zygoteのページでは虚部と実部に分けて微分を行う方法が紹介されています。 今回はより単純なForwardDiffを用いた実装を紹介します。

Juliaでの実装はこのページにあります。

見ていただいたように、導関数を返す実装の方が型が安定し、速度も出ています。

ではこれをWolframでの実装と比較して正しい答えを返しているかを確認しましょう。

Wolframでの実装はこのページにあります。

同じ画像が出力されています。

以上で、記事は終わりです。 良い実装があれば教えてください。