Python 外部函数中的两个内部函数用于生成某些时间序列,从而发出运行时警告
我试图生成一个由给定函数定义的综合时间序列。我以一种简单的方式成功地生成了。但是我想用一个函数来生成它。工作正常的代码如下所示:Python 外部函数中的两个内部函数用于生成某些时间序列,从而发出运行时警告,python,function,time-series,warnings,nested-function,Python,Function,Time Series,Warnings,Nested Function,我试图生成一个由给定函数定义的综合时间序列。我以一种简单的方式成功地生成了。但是我想用一个函数来生成它。工作正常的代码如下所示: import numpy as np from matplotlib import pyplot as plt N=1000000 ran_val=np.random.randn(N) #normally distributed random variable dt=0.1 #time step X=np.zeros(N) seq_test = np.linspac
import numpy as np
from matplotlib import pyplot as plt
N=1000000
ran_val=np.random.randn(N) #normally distributed random variable
dt=0.1 #time step
X=np.zeros(N)
seq_test = np.linspace(0,N,N)
def D1(x,d13=0,d12=0,d11=0,d10=0):
return d13*x**3 + d12*x**2 + d11*x + d10
def D2 (x, d23=0, d22=0, d21=0, d20=0):
return d23*x**3 + d22*x**2 + d21*x + d20
for i in range(1, N-1):
X[i]= X[i-1] + D1(X[i-1],d13=-1, d11=1)*dt + np.sqrt(D2(X[i-1],d22=0, d20=1)*dt) * ran_val[i-1]
plt.plot(seq_test, X)
我试图转换为以下代码的代码相同,两个代码的目标应该相同,上面的代码在所有情况下都有效:
def timeseries1D(N,dt,d13=0,d12=0,d11=0,d10=0,d22=0, d21=0, d20=0):
Xdata = np.zeros(N)
ran_val = np.random.randn(N)
def D1(x,d13,d12,d11,d10):
return d13 * x**3 + d12 * (x**2) + d11 * x + d10
def D2 (x, d22, d21, d20):
return d22 * x**2 + d21 * x + d20
for i in range(1, N-1):
Xdata[i] = Xdata[i-1] + D1(Xdata[i-1],d13, d12, d11, d10)*dt + np.sqrt(D2(Xdata[i-1], d22, d21, d20)*dt) * ran_val[i-1]
return Xdata
然后我用以下命令调用函数:
N=1000000
seq_test = np.linspace(0,N,N)
data=timeseries1D(N, dt=0.1, d13=-1, d12=0, d11=7, d10=0, d22=0, d21=0, d20=1)
plt.plot(seq_test,data)
当dt=0.1时,对于D1和D2(上面定义的函数)的所有值,除d22=1外,以下代码工作正常。但是,如果dt设置为0.01,则一切正常。同样,当dt=0.1、d12=0、d11=0和d22=1时,它工作正常。但是,当D1参数中的任何一个再次设置为1时,同时保持d22=1,则会给出相同的运行时警告,并且绘图如下所示:
给定的运行时警告是:
*C:\ProgramData\Anaconda3\lib\site packages\ipykernel\u launcher.py:7:RuntimeWarning:在双\u标量中遇到溢出
导入系统
C:\ProgramData\Anaconda3\lib\site packages\ipykernel\u launcher.py:7:RuntimeWarning:在双\u标量中遇到无效值
导入系统
C:\ProgramData\Anaconda3\lib\site packages\ipykernel\u launcher.py:9:RuntimeWarning:在双\u标量中遇到溢出
如果name='main':*
我还尝试导入sys
在这方面,如果您能通过以下带有timeseries1D函数的代码生成timeseries,我们将不胜感激。我想要的是我应该能够使用D1和D2的任何值,我应该工作。我认为问题在于np.sqrt。如果从根中取出*dt项,则它对所有值都适用。但我想不出来!
非常感谢