如何解决外部函数中的两个内部函数可以生成一些时间序列,从而发出运行时警告
我正在尝试生成由给定函数定义的合成时间序列。我以简单的方式成功生成了代码。但是我想通过使用函数来生成它。正常工作的代码如下:
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],d20=1)*dt) * ran_val[i-1]
plt.plot(seq_test,X)
The Graphic generated by the first code
我尝试将相同的代码转换为以下代码,两个代码的目的应该相同,上面的代码在所有情况下均有效:
def timeseries1D(N,dt,d10=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],d10)*dt + np.sqrt(D2(Xdata[i-1],d20)*dt) * ran_val[i-1]
return Xdata
N=1000000
seq_test = np.linspace(0,N)
data=timeseries1D(N,dt=0.1,d11=7,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时,将给出相同的运行时警告,并且绘图如下所示: The graphic generated with Warning
给定的运行时警告为:
* C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ ipykernel_launcher.py:7:RuntimeWarning:在double_scalars中遇到溢出 导入系统
C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ ipykernel_launcher.py:7:RuntimeWarning:在double_scalars中遇到无效值 导入系统
C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ ipykernel_launcher.py:9:RuntimeWarning:在double_scalars中遇到溢出 如果名称 =='主要':*
我也尝试通过导入sys。
任何有关通过以下带有timeseries1D函数的代码生成时间序列的帮助都将受到赞赏。我想要的是我应该能够使用D1和D2的任何值,并且我应该工作。我认为问题出在np.sqrt。如果* dt项是从根中取出的,则它对所有值都适用。但是我无法弄清楚! 非常感谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。