数学と物理学のブログ

本業から離れて、趣味である数学と物理学について書きます。

Pythonで量子力学の軌跡解釈に基づく二重スリットシミュレーション

Python量子力学の軌跡解釈に基づく二重スリットシミュレーション

昔、エクセルのVBAでやったときは随分苦労しましたけど、Pythonを使うとめちゃくちゃ簡単ですね。
ちなみに昔やったときのです→
アマリュアリズムの量子力学-ボーム力学(二重スリット1)

Pythonでやるとたった、1時間程度でプログラミングができました。また、グラフ化が容易にできるのが便利です。

これを動かすと、干渉模様が表示されます。(ノートPCで5分くらいです)

f:id:sr-memorandum:20190914150723p:plain

f:id:sr-memorandum:20190914153505p:plain

f:id:sr-memorandum:20190914154235p:plain

動画にしてみました。
youtu.be


import math as m
import random
import matplotlib.pyplot as plt
class Functions:
def __init__(self,b):
self.b=b
self.dt=0.01
self.maxt=50
def func1(self,y):
return m.exp(-(y*y+self.b*self.b)/2)*(m.exp(self.b*y)+m.exp(-self.b*y)+2)
def func2(self,t,y):
sigy=4*(1+t*t/4)
aa=2*self.b/sigy
bb=self.b*t/sigy
py0=y*t/sigy
py1up=-2*aa*m.sin(2*bb*y)+bb*(m.exp(-2*aa*y)-m.exp(2*aa*y))
py1down=m.exp(-2*aa*y)+m.exp(2*aa*y)+2*m.cos(2*bb*y)
py=py0+py1up/py1down
return(y+py*self.dt)
def y0set(self):
ramy=1
z=0
while ramy>z:
ramx=random.uniform(self.b-3,self.b+3)
z=self.func1(ramx)
ramy=random.uniform(0,1)
return ramx
def objuction(self):
yi=self.y0set()
t=0
while t
for i in range(10000):
if random.randint(0,1)==0:
f=Functions(7)
else:
f=Functions(-7)
datasx.append(f.objuction())
datasy=
for i in range(10000):
datasy.append(random.uniform(0,1))

fig=plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(datasx,datasy,s=1)
fig.show()

ちなみ、軌跡解釈では二重スリットのいずれか1つのスリットに粒子を通しただけでも、干渉が現れるという結果を得ることができます。

一般相対性理論を一歩一歩数式で理解する [ 石井 俊全 ]

価格:3,780円
(2019/3/21 13:11時点)
感想(0件)

マンガでわかる量子力学 日常の常識でははかりしれないミクロな世界の現象を解 (サイエンス・アイ新書) [ 福江純 ]

価格:1,188円
(2019/3/21 13:13時点)
感想(2件)