微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

外部函数中的两个内部函数可以生成一些时间序列,从而发出运行时警告

如何解决外部函数中的两个内部函数可以生成一些时间序列,从而发出运行时警告

我正在尝试生成由给定函数定义的合成时间序列。我以简单的方式成功生成代码。但是我想通过使用函数生成它。正常工作的代码如下:

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 举报,一经查实,本站将立刻删除。