私は非常に環境にsympy
やさしく、適切にフォーマットされた方法で出力を生成する方法がわかりません。今、私は潜在的な関数のヘッセ行列を計算しました:
V = 1/2*kOH*(r1)**2 +1/2*kOH*(r2)**2 +1/2*kHH*(r3)**2
の一般形を持つ 3 つの調和振動子項の
1/2*k*r**2
.
すべての変数は正で実数です。
私にとっての問題は、マトリックスを印刷すると、エントリがまだ解決されておらず、機能的な方法でのみ表示されることです。マトリックスの各ポイントでどのような派生を実行する必要があるかを表示するだけでなく、部分導関数が既に実行された後にエントリをフォームにしたいと思います。
def Hessian():
'''
sympy calc of hessian Matrix H for IR normal modes analysis
from a potential V.
Must be multiplicable with 9x9 matrix (somehow) in
the equation: F = M**(-1/2) * H * M**(-1/2)
Here, F is the mass weighted Hessian, whose Eigenvalues
contain the frequencies of the normal modes of water.
M comes from the multiplication of the 3N-Dimensional
mass-vector m with a 3N-dimensional identity matrix:
M = m*I, I.shape = 3*N, 3*N, N = number of atoms in water.
'''
kOH, kHH, r1, r2, r3 = sy.symbols('kOH kHH r1 r2 r3', real=True, positive=True)
V = sy.Function('V')(1/2*kOH*(r1)**2 +1/2*kOH*(r2)**2 +1/2*kHH*(r3)**2)
f = sy.hessian(V,[r1, r2, r3])
sy.pprint(f)
Hessian()
追加:これは実際にはコンピューティング側の一部ではないため、実際には質問の一部ではありませんが、物事の科学的側面に関して誰かが自分のものを知っている場合: (3,3) 3 つの距離に依存する可能性のあるヘシアンは、(9,9) 質量行列で乗算されることになっていますか? 興味があれば、関数の解説に科学的背景が含まれています。