0

したがって、基本的には odeint を使用して自分が持っている頌歌を解き、それを別の方程式の変数として使用したいと考えています (最終的には実際に私の解である方程式)。

したがって、ここで最初の頌歌を解きます (私のコードは実際には ODE の行列を解いていますが、同じ問題が引き続き適用されます)。

Omeg = odeint(f, zeros, sMesh, args=(dOmeg,om,)) 

私の f() 関数は次のように定義されています。

def f(y, t, dh, v):
"""Returns dh/ds with initial values plugged in"""
# Create vector for solved DEs    
solvedEqs = range(len(dh))

# Establish a dictionary for values to substitue
subValues = {}
for i in range(0,len(v)):
    subValues.update({v[i]:y[i]}) #add {symbol:value} to dictionary

# Set each element of dh with initial values subed in to return array
for i in range(0,len(solvedEqs)):
    solvedEqs[i] = dh[i].subs(subValues)
return solvedEqs

それで、すべての良いものの後、私は解決策を示すためにプロットできる配列または数値、ポイントを取得します。しかし、私が持っている質問は、この解決策を使用する必要があるということです(簡単にするために、ソリューションのマトリックスではありません)私が実際に見つけようとしている機能にプラグインします:

Hs = H0
for i in range(1,order): # length of order
    Hs += ((bernoulli(i-1)*1.)/math.factorial(i-1))*(adjointOp(H0,Omeg,i))

ここで、bernoulli() はその次数のベルヌーイ数を返す単なる関数であり、adjointOp() は指定された次数の随伴演算子 (交換関係) です。

OmegのソリューションがInterpolationFunctionであったMathematicaでこれを最初に行いましたが、それは単に変数として機能し、乗算などを行いました。ただし、Pythonでこの状況を処理する方法がわかりません。

4

0 に答える 0