0

私は次のpython MWEを持っています(コードは以下で説明されています)

#!/usr/bin/python
from scipy import integrate
from math import *
import numpy
import matplotlib.pyplot as plt

def base_equations(y,t,center):
    return [5*exp(-(t-center)**2/3),-5*exp(-(t-center)**2/3)]

def eqexec1(y,t):
    return base_equations(y,t,30)

def eqexec2(y,t):
    return base_equations(y,t,60)

inits=[0.5, 0.5]

trange=numpy.arange(0,100,0.1)
print trange

y1=integrate.odeint(eqexec1,inits, trange, full_output=0, printmessg=1)
y2=integrate.odeint(eqexec2,inits, trange, full_output=0, printmessg=1)
plt.plot(trange,y1,trange,y2)
plt.legend(["y1a","y1b","y2a","y2b"])
plt.xlabel("Time")
plt.show()

ご覧のとおりbase_equations、本質的にガウス パルスである一連の方程式 ( ) を統合しています。odeintパルスの 2 つの中心点 (30 と 60) についてこれらの方程式を数値的に解くために使用します。

最初の中心点 (t=30) では、式 y1 により期待される動作が得られます。つまり、パルスが表示されます。

2 番目の中心点 (t=60) では、式 y2 によって予期しない動作が発生します。パルスがまったく表示されません!

働くことと働かないことの切り替えは、47 歳から 48 歳の間に起こります。

グラフィカルな出力は次のとおりです。予想される出力は、ライン y2a と y2b が 60 付近で劇的な変化を示すことですが、そうではありません。

ガウス パルスが 2 つあるはずの 1 つのガウス パルスを示す画像。

何が起こっているのでしょうか?

4

1 に答える 1

4

積分器は、微分が消失する初期領域でステップ サイズを大きくします。ステップが非常に大きくなり、ガウス ピークを超えることはありません。

ステップ サイズをあまり大きくしないように積分器に指示できます。

y2 = integrate.odeint(eqexec2,inits, trange, full_output=0, printmessg=1,hmax=1.0)
于 2012-10-07T16:36:02.500 に答える