x軸上にいる物体が左右方向に動いた時の確率分布のコードが完成しました。。。?
【前提条件】__________________________________________________
x座標、xにいるときの状態(ここではphai)は関数phai(t,x)とすると、P,Qをある定数として
phai(t,x) = Pphai(t,x+1)+Qphai(t,x-1)と表します。
(物理学的背景は除く)
あとは初期設定の数値を変更するだけで動くと思ったのですが、、問題が発生しています。
下記のx=nのとき、phai=[0,1]に変更すると、下図のグラフがちょうどx=nに線対称な、右側に山なりになるはずなのですが、実際に動かしても設定を変える前と変わりません。
一方で、θ(theta)の値を変えると、しっかりとネットでいわれているような確率分布になってくれるので、自分が書いたコードが根本的におかしいとは考えられず、解決できずにいます。
以下に、現在の進行状況を挙げます。
python
1import numpy as np 2import matplotlib.pyplot as plt 3import math 4 5#初期設定 6n=150 7theta= 3*(math.pi)/12 #θの値 8 9P = [[np.cos(theta),np.sin(theta)],[0,0]] #Shift Operator 10Q = [[0,0],[np.sin(theta),-np.cos(theta)]] #Shift Operator 11x_list=[]#x座標 12t_list=[]#time 13p_list=[]#probability 14s_list=[]#state 15 16for x in range(0,2*n+1): 17 if x == n: 18 phai = [1,0] #←このphaiの値を[0,1]にしたら、変わるはずなのですが、変わりません。 19 else: 20 phai = [0,0] 21 p = np.dot(phai,phai) 22 23 x_list.append(x) 24 s_list.append(phai) 25 p_list.append(p) 26 27 28 29for t in range(0,3*n): #以下の文は時間ごとにそれぞれの位置での確率を計算 30 t_list.append(t) 31 if t ==0: 32 s_list 33 p_list 34 else: 35 for x in range(0,2*n+1): 36 if x == 0: 37 s_list[0] = np.inner(P, s_list[1]) 38 if x == 2*n: 39 s_list[2*n] = np.inner(Q, s_list[2*n-1]) 40 else: 41 s_list[x] = np.inner(P, s_list[x+1]) + np.inner(Q, s_list[x-1]) 42 p_list[x] = np.dot(s_list[x],s_list[x]) 43 44 45 46 print(x_list,p_list) 47 #plt.bar(x_list,p_list,width=0.1,color='black') 48 plt.xlabel("x") 49 plt.ylabel("probability") 50 plt.ylim([0,0.1]) 51 plt.xlim([-n,3*n]) 52 plt.plot(x_list,p_list,color="red",linewidth=1.0) 53 plt.pause(0.001) 54 plt.cla() 55
と行うと、以下のような確率の挙動(今回は一部を貼り付け)がわかりました。
θ=π/4
θ=5π/12
となりました。
ご指摘の程、宜しくお願いします。
python初心者ですので、お手柔らかにお願いします。。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/08 06:35
2018/05/08 06:59