3

数値ラプラス逆変換に「DE HOOG」アルゴリズムを使いたいです。「mpmath」パッケージを使用したいので、リンクからインストールしました:

https://github.com/klkuhlm/mpmath

t=1 で以下の関数の逆ラプラス変換を見つける必要があるとしましょう。

f = 1/(s-1)

f の逆ラプラス変換は : e^(t)

t=1 で、結果は次のようになると予想されます = e

import mpmath as mp
import numpy as np

def f(s):
    return 1 / (s-1)

t = np.linspace(0.01,0.5,10)

G = []

for i in range(0,4):
    G.append(mp.invlapdehoog(f, t[i]))

print G 

問題は、「i」の範囲を4未満に設定した場合にのみ完全に機能することです。たとえば、次のように置き換えます。

for i in range(0,5): #or for i in range(0,more than 5):

次のエラーが表示されます。

ここに画像の説明を入力

この問題を解決するのを手伝ってくれませんか?

ありがとう!

4

1 に答える 1

2

オブジェクトには、特定の精度レベルを達成するために必要な近似レベルを指示InverseLaplaceTransformする属性があります。より小さな値で呼び出すたびに更新degreesのコピー。最終的に、パラメーターが 1 つの値しか持たないほど小さいため、さらに計算を続行するには不十分です。InverseLaplaceTransformdegreesdegreesfp

解決策: への呼び出しを編集して、invlapdehoog毎回度をリセットします。invertlaplaceただし、ではなく直接呼び出すことをお勧めしinvlapdehoogます。

for i in xrange(0,10):
    G.append(mp.invertlaplace(f, t[i], method = 'dehoog', degree = 18))

編集: 元の投稿者は、このソリューションへのコメントで関連する質問をしました。彼らは、 を連続して呼び出すと、なぜ計算時間が (かなり大幅に) 増加するのかを尋ねましたmp.invertlaplace。つまり、mp.invertlaplaceは、逆ラプラスの計算で計算する必要がある小数点以下の桁数を決定する属性の精度を更新しています。上記のソリューションと同様に、各呼び出しに精度を渡して、必要な精度 (たとえば、小数点以下 10 桁) が得られるようにすることができます。

for i in xrange(0,10):
    G.append(mp.invertlaplace(f, t[i], method = 'dehoog', dps = 10, degree = 18))

PS - 次のスニペットを使用して、一度にすべての t に逆ラプラスを適用できます。

G = map( lambda x: mp.invertlaplace(f, x, method = 'dehoog', dps = 10, degree = 18), t)
于 2016-11-24T00:54:42.157 に答える