Как ограничить размер шага, используя python's scipy.stats.levy? - PullRequest
0 голосов
/ 23 июня 2018

Я пытаюсь смоделировать прогулку Леви, используя scipy.stats.levy.Он работает отлично, за исключением того факта, что есть несколько шагов, которые ОЧЕНЬ велики, и я хотел бы знать, если есть правильный способ ограничить размер шага.

Вот код, который я использую:

import numpy as np 
from scipy.stats import uniform
from scipy.stats import levy
import matplotlib.pyplot as plt

def levy_walk( n ):

    # uniformly distributed angles
    angle = uniform.rvs( size=(n,), loc=.0, scale=2.*np.pi )

    # levy distributed step length
    r = levy.rvs( size=n )

    # x and y coordinates (position added to previous coordinate --> cum. sum)
    x = np.cumsum( r * np.cos(angle) )
    y = np.cumsum( r * np.sin(angle) )

    return np.array( (x, y, r, angle) )

# number of steps to simulate
n = 500

# get levy walk (strictly speaking, it seems to be a flight)
foo = levy_walk( n )

# initialize figure
fig = plt.figure( figsize=(14,6) )

# plot 2D random walk with Levy stepsize
ax1 = fig.add_subplot( 1,2,1 )
ax1.plot( foo[0,:], foo[1,:] )
ax1.set_xlabel( 'x' )
ax1.set_ylabel( 'y' )
ax1.set_title( '2D Levy flight' )

# plot histogram
ax2 = fig.add_subplot( 1,2,2 )
num_bins = n/10
ax2.hist( foo[2,:], bins=n/10 )
ax2.set_yscale( 'log' )
ax2.set_xlabel( 'stepsize' )
ax2.set_title( 'histogram' )

plt.show()

И это пример выходного рисунка, на котором вы можете четко увидеть появление очень немногих, но ОЧЕНЬ больших шагов:

2D Lévy flight (walk)

Итак, мой вопрос: как правильно ограничить размер шага?(Использование опции scale на самом деле не помогает, поскольку только уменьшает все)

1 Ответ

0 голосов
/ 23 июня 2018

Это на самом деле ведет себя так, как должно. ожидаемое значение распределения Леви ∞ , оно чрезвычайно «толстохвостое».Если это дистрибутив, который вы используете, то вы получите значительное количество чудовищно больших значений.Если вы их усекаете, это не дистрибутив Levy.Так что нет, нет правильного способа ограничить размеры шагов при использовании дистрибутива Леви.Ваша альтернатива - использовать другое распределение для размера шага, если полученные результаты не соответствуют данным наблюдений или вашей интуиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...