Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 单维纳过程(布朗运动)_Python_Numpy - Fatal编程技术网

Python 单维纳过程(布朗运动)

Python 单维纳过程(布朗运动),python,numpy,Python,Numpy,粒子位置的控制方程为:Xt+dt=Xt+dt^0.5*U 其中U是一个0,1的正态随机变量 我试图最终解决X_0=Xt=0,Xt=dt,Xt=2dt,…,Xt=Nt 其中N是大的,dt是小的,但是我首先尝试用Nt=1000个正态随机数来解X_0,所以我得到了1000个不同的解 我已经作为npr导入了numpy.random 如果我在python终端中输入这个,我会得到一条错误消息 Xt+dt=Xt+sqrtdt*npr.randnNt:“无法分配给函数调用” 在这种情况下,我不理解这个错误。在返

粒子位置的控制方程为:Xt+dt=Xt+dt^0.5*U

其中U是一个0,1的正态随机变量

我试图最终解决X_0=Xt=0,Xt=dt,Xt=2dt,…,Xt=Nt

其中N是大的,dt是小的,但是我首先尝试用Nt=1000个正态随机数来解X_0,所以我得到了1000个不同的解

我已经作为npr导入了numpy.random

如果我在python终端中输入这个,我会得到一条错误消息 Xt+dt=Xt+sqrtdt*npr.randnNt:“无法分配给函数调用”


在这种情况下,我不理解这个错误。

在返回X0之前,您的方法甚至没有触及X0,因此我不太确定我的尝试是否符合您的要求。我与@Watten Weckesser一起阅读scipy食谱,但对于您的方法,解决方案可能是:

def wiener1(dt=0.1,X0=X(t=0),Nt=1000):
    """ Input variables:
    dt    time step
    X0    intial value, X(t=0) = X0
    Nt    number of time steps 
    """
    # initialize start value
    res = X0
    # calculate and store time series
    for ii in range(1,Nt):
        #         X(t+dt)=X(t)+sqrt(dt)*npr.randn(Nt)
        res += sqrt(dt)*npr.randn(Nt)

    # return final value after t = N*dt
    return res
对于空洞的时间演化

def wiener1(dt=0.1,X0=X(t=0),Nt=1000):
    """ Input variables:
    dt    time step
    X0    intial value, X(t=0) = X0
    Nt    number of time steps 
    """
    # create result array
    res = numpy.zeros(Nt)
    # initialize start value
    res[0] = X0
    # calculate and store time series
    for ii in range(1,Nt):
        #         X(t+dt)=X(t)+sqrt(dt)*npr.randn(Nt)
        res[ii] = res[ii-1] + sqrt(dt)*npr.randn(Nt)

    # return time series
    return res
如果您只是对最终值感兴趣,可以节省阵列内存并执行以下操作:

def wiener1(dt=0.1,X0=X(t=0),Nt=1000):
    """ Input variables:
    dt    time step
    X0    intial value, X(t=0) = X0
    Nt    number of time steps 
    """
    # initialize start value
    res = X0
    # calculate and store time series
    for ii in range(1,Nt):
        #         X(t+dt)=X(t)+sqrt(dt)*npr.randn(Nt)
        res += sqrt(dt)*npr.randn(Nt)

    # return final value after t = N*dt
    return res

当然,两种方法都需要一个import numpy.random作为npr,第一种方法还需要一个import numpy。

什么是X?它是如何定义的?如果它是一个numpy.array,你应该使用X[t]而不是Xt,t在哪里定义???我应该如何定义它们?我很困惑,我已经花了很多时间在这上面,却一无所获。也许你应该从头开始,读一本教程。。。这些都是非常基本的东西。我是否将X定义为一个函数?仅供参考:我想知道在第一种情况下,res[ii]=res[ii-1]+sqrtdt*npr.randnt是否应该是res[ii]=res[ii-1]+sqrtdt*npr.randn1。类似地,在第二种情况下,res+=sqrtdt*npr.randnt应该是res+=sqrtdt*npr.randn1。