[Python에 의한 과학·기술 계산] 2차원 랜덤 워크(취보 문제), 수치 계산

난수를 이용한 2차원 랜덤 워크 의 시뮬레이션을 실시한다.

1단계를 1로 하고 원점(0,0)에서 시작하여 2차원 평면 위를 랜덤 워크한다.

import numpy as np
from random import random
import matplotlib.pyplot as plt
from math import *
"""
2次元ランダムウォーク
"""

N_calc_list = [10]
x, y, r = 0, 0, 0
R_list=[]

N=100000

x_list=[0]
y_list=[0]
for n in range(N):
    theta=2.0*pi*random()#角度θ(2pi単位)をランダムにするため,random()を使って[0,1]の一様乱数を発生させる。
    x = x+cos(theta) # x方向への移動。cos(θ)。
    y = y+sin(theta) # y方向への移動。sin(θ)
    x_list.append (x) # xの値をx_listに格納していく
    y_list.append(y) # yの値をx_listに格納していく

# for plot
plt.plot( x_list,y_list) # (x,y)のプロット
plt.xlabel('X ') # x軸のラベル
plt.ylabel('Y') # y軸のラベル
plt.xlim([-120,120])  # x軸の範囲
plt.ylim([-120,120]) # y軸の範囲
plt.show()


결과





(0,0)을 스타트 위치로 하고, 100000보 이동의 궤적


원점(0,0)으로부터의 거리 R과 이동 스텝수 N의 관계. x축을 $N^{1/2}$로 플롯합니다. 오렌지선은 $N^{1/2}->∞$로 할 수 있는 이론치.

좋은 웹페이지 즐겨찾기