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项,则它对所有值都适用。但我想不出来! 非常感谢