> 5 d @ 9 e w Î2 - osaka university ·...
TRANSCRIPT
'>ĵńğŀĹŅğw� �Î2
1
*�$>ą±&`�Ią�t�Verlett�
Mathematicaĕ�ýú�h
2
òąYkĀĆMathematicaĕ�ýúĢĹľŃņĢĿŅ����hĕ�ëã
Mathematica��.nb ĕĨĚŅńņĭã
(2)6f2:ĠĸŅĭą@��iĕ�$õúêaĆ
(1)6f1:MathematicaĠĸŅĭą@�ą`t+4ąx�Ā3Ėû³�ĕ²UõÿâShift+Return(Enter)ĕ.aVõ÷ēã
currentdir =SetDirectory["Z:"];
ĠŃ
rlist =ReadList["test.dat",Number,RecordLists ->True]
ĠĸŅĭą@��iĕ�$õúðăêaĆĥĹĠńŅĕþñēã
rlist =ReadList["test.dat",Number,RecordLists ->True];ĥĹĠńŅ
(0)ıĤĕ�? (Mathematicaĕ¤&õúđr2�ë�)ãcurrentdir =SetDirectory["Z:"];$Path=Prepend[$Path,currentdir];
��â¾<ąĠĸŅĭĕ@�õÿðûôê
Mathematicaĕ�ýú�h
3
(3)īņħą´�ĉą�ċ©ċã
1.0 2.0 3.04.05.01.1 2.13.1 4.15.11.2 2.23.24.25.2
v�ʼnpą3�5�ąīņħĕ�ĔúĴėęł,test.datĕĻļFĀcêÿ�=õÿðûôêŇ
(4)Transpose[´�/]Ʀ�
{{1.0,2.0,3.0,4.0,5.0},{1.1,2.1,3.1,4.1,5.1},{1.2,2.2,3.2,4.2,5.2}}
{{1.0,1.1,1.2},{2.0,2.1,3.1},{3.0,3.1,3.2},{4.0,4.1,4.2},{5.0,5.1,5.2}}
rlist rlist2=Transpose[rlist]
rlist =ReadList["test.dat",Number,RecordLists ->True]Mathematicaąpą�ċ©ċĠĸŅĭĕ@�õâtest.datąīņħĕ�ċ©Čã
ĠŃĕ²UõÿShift+Return(Enter)ĕ.aVõ
rlist2
Mathematicaĕ�ýú�h
4
(5)´�íđňp�´�(�)ąW�ã
(6)1p�´�íđ2p�´�ą�Sã
rlist2[[1]](���)ĄĆ{1.0,1.1,1.2}î�ýÿêērlist2[[3]](���)ĄĆ{3.0,3.1,3.2}î�ýÿêē
time={1.0,1.1,1.2}
position={3.0,3.1,3.2}trajectory={}
AppendTo[trajectory,time](timeĕ«%)ĕ@�
trajectoryĆ {{1.0,1.1,1.2}}āăē
AppendTo[trajectory,position](positionĕ«%)ĕ@�
trajectoryĆd��Ą {{1.0,3.0},{1.1,3.1},{1.2,3.2}}āăē
trajectoryĆ {{1.0,1.1,1.2},{3.0,3.1,3.2}}āăētrajectory=Transpose[trajectory](¦�)
time=rlist2[[1]]
position=rlist2[[3]]òĔĀtime,positionĄĆ,äpą´�î��ôĔēʼn
Mathematicaĕ�ýú�h
5
(7){{x1,y1},{x2,y2},{x3,y3},…}āêë´�ą\�īņħĕĵńĩĬ÷ēaĆListPlot
(8)º\ĕPlot÷ēaĆPlot[]
ListPlot[trajectory]
trajectory={{1.,3.},{1.1,3.1},{1.2,3.2}}
Plot[0.5*x^2,{x,-2.5,2.5}]
!2 !1 1 2
0.5
1.0
1.5
2.0
2.5
3.0
1.05 1.10 1.15 1.20
3.05
3.10
3.15
3.20
(9)º\ąPlotā4KăĂĕ.aĵńĩĬ÷ēaĆ
Show[Plot[….],Graphics[…]]
!2 !1 1 2
0.5
1.0
1.5
2.0
2.5
3.0
Newton`�Iĕ\��Ą�ð
�;ąĢĹľŃņĢĿŅąňþĄâ�;ą&ïĕ*��ĄĢĹľŃņĬ÷ē
å�;&$>(MolecularDynamics)æāêë`tîéēã
òą`tĆâ*�$>ąNewton`�Ilą`�Iĕ�ê�;ąa¹8'ĕ«êâěłġņĭOĕ ?õÿa¹Ąº÷ē��ĕ)ē�Āâläă
z$>·ĕsčē`tĀéēã
òąĐëĄ�ąa¹8'ĕ«ëaâ��oĆ¯�ąM�ĕTë�îĀïăê
yâ�ìć
dx(t)dt
= f (x(t)) x(ti+1)− x(ti )Δt
= f (x(ti ))x(ti+1) = x(ti )+ f (x(ti ))Δt
ąĐëĄa¹ĕ½[�÷ēãòąĐëă`�IĕE�`�Iā0Ĉã
òąE�`�Iĕ�ýÿâ�;ąåĠĸ¬Ēæĕ�ēâāêëąî6fĀéēã
(ti,xi)
ti ti+1
xi
dxdt ti
×dt
(ti+1,xi+)dxdt ti
×dt
t
x(ti+1) = x(ti )+dxdt ti
dt+ 12d2xdt2 ti
dt+
≅ x(ti )+dxdt ti
dt
xąt�=OĕĪęŀņC¸ą1pĊĀĀª�
ňpĊĀąC¸ăąĀ�GîPê..
�ýq�Ąa¹�Cĕ«ë`t(Eulert)
x
ăąĀf ÁĀĆåVerlettæāêë�;&$>Āmvāăýÿêēňþą`tĕ�ëã
Verlett
x(t +Δt) = x(t)+ v(t)Δt + (Δt)2
2a(t)+
xĕâßΔtĄAõÿ2pĊĀC¸(*1)ʼn
x(t −Δt) = x(t)− v(t)Δt + (Δt)2
2a(t)+
v(t) ≡ ∂x(t)∂t
a(t) ≡ ∂2x(t)∂t2
(*1)(1)
(2)
I(1),(2)ĕ¨ä¥õÿ]}÷ē
x(t +Δt) ≅ 2x(t)− x(t −Δt)+ (Δt)2a(t) (3)
I(1),(2)ĕ¨äJêÿ
v(t) ≅ x(t +Δt)− x(t −Δt)2Δt
òąI(3),(4)ĕ~êÿa¹�Cĕôøē`tĕVerlettā0Ĉ
Ć£·m=1ąaą®Gā%®G
(4)
�qVerlett
òąI(3),(4)ĕùąĊĊ~êÿĎ�êîâĵńğŀĺî�¼ĄăēąĀBõ�('÷ēãI(4)ĄI(3)ĕ��÷ēāâ
(5)
v(t) = x(t)− x(t −Δt)Δt
+Δt2a(t)
x(t +Δt) ≅ 2x(t)− x(t −Δt)+ (Δt)2a(t)
òąI(3)āI(5)î2ąĵńğŀĺą6fIāăēã
(5)
(3)
v(t +Δt) = x(t +Δt)− x(t)Δt
+Δt2a(t +Δt)
v(t +Δt) = x(t +Δt)− x(t)Δt
+Δt2a(t +Δt)
10
¡1X&;ķĪŅĢĽł E(x) =ωx2 (ω = 0.5)
ą�Āâ e��ÞÃÈÄÏÊÇÈÅ e®GÜÃÈÄÏÈÇÈ
āõÿâÓÕÝÛØ×`�IĄLë�;ã·Éā÷ēÄą±&ĕĢĹľŃņĬ÷ē
ĵńğŀĺĕ�Ĕã
úûõa¹ĤĪĩĵĆàÛÏÈÇÈÊÅÂĤĪĩĵ\ĆÊÈÈÈ2āõâÊÚÛÕÙĄÉ2â
a"â��â®Gâ��ěİłĝņâąÌþĕĴė곥cï�÷ĐëĄ
÷ē�ã
ç Á7.1è
11
IJŅĬ(1)
£·îÉăąĀâ±&·ÙĆ®GÜā�õðăēʼn
p(t) = v(t) ≡ ∂x(t)∂t
įľņĬŅ`�IĀâ%®GĆ$ÃüíđÄā�õðăēÃÒÏÖÔĀÖÏÉăąĀÄʼn
a(t) = F(t) ≡ −∂E(x)∂xE(x) =ωx2= −2ω x
�;Ąííē$ĆķĪŅĢĽłÃòą7-��ěİłĝņÄÑąâ��ÞĄº÷ēM�ĄĸęĮĤĕþñúĎą
(6)
12
IJŅĬ(2)��â®GÃϱ&·Äâ%®GÃÏ$ÄĕâĤĪĩĵóāâIÃËÄāIÃÍÄĄLýÿ
b_õÿêñć�êÃÐØłņĵĕ�ýÿÄãúûõâ e|Rą��â®GĆ
a(0) = F(0) ≡ −∂E(x)∂x t=0
= −2ω x(t)t=0
e%®GĆ
x(0) = 2.0 v(0) = 0.0
ÉĤĪĩĵ�ą��ĆIÃËÄ ÃáÄĕùąĊĊ�ýÿõĊëāâ eÞÃÈÄĐĒ�#ą
��ÞÃÆàÛÄîN�ĄăýÿõĊëʼn
x(Δt) ≅ 2x(0)− x(−Δt)+ (Δt)2a(t)
ùòĀÉĤĪĩĵ�ûñĆIÃÉÄÃáÄĕ�êâÐØłņĵą#Ą!��÷ēã
x(Δt) = x(0)+ v(0)Δt + (Δt)2
2a(0)+
(7)
(8)
(9)
13
eg�ʼnX0î��âVx0î®Gâa0îX0íđ��õú%®G
ňĤĪĩĵ�ąHmûñâI(9)(p.12)ĕ�ýÿ��
�j�ĕ5čĐãIJŅĬʼnVerlettą�q{ąI(3),(5),(6)ĕ�ëã(Xnew→anew→Vxnewāêë��ą¿�ĄuQ)
�iĆĴė곥cï�÷�
�iĆĴė곥cï�÷�
programverletimplicitreal*8(a-h,o-z)
nstep=2000wk=0.5d0dt=0.02d0
CCInitialpositionandvelocityC
X0=2.0d0a0=-2.0d0*wk*X0Vx0=0.0d0E0=wk*X0*X0
open(15,file="oscillation.out",status="unknown")
write(15,'(4F15.8)')0.0d0,X0,Vx0,E0Xold=X0
CCpositionandvelocity@1ststepC
Xnow =X0+dt*Vx0+dt*dt*a0/2.0d0anow =-2.0d0*wk*XnowVxnow=(Xnow-Xold)/dt +dt*anow/2.0d0Enow =wk*Xnow*Xnow
do100i=2,nstepCCposition,velocity,and acceleration@i-th stepC
Xnew =2.0d0*Xnow - Xold +dt*dt*anowanew=-2.0d0*wk*XnewVxnew=(Xnew-Xnow)/dt +dt*anew/2.0d0Enew=wk*Xnew*Xnewt=i*dt
if(MOD(i,2).eq.0)thenwrite(15,'(4F15.8)')t,Xnew,Vxnew,Enewendif
Xold=XnowXnow=Xnewanow=anew
100continueclose(15)
stopend
¶�òòĀĆâI(3),(5),(6)ą8\/ĕ��ąĐëĄõÿêēʼn
x(t +Δt)→ xnew x(t)→ xnow x(t −Δt)→ xolda(t +Δt)→ anew a(t)→ anow v(t +Δt)→Vxnew
a¹ĤĪĩĵî°Č»Ąâ8\/ĕb_
14
調和振動子の解析
ディレクトリパスの設定currentdir = SetDirectory@"Z:"D;$Path = Prepend@$Path, currentdirD;
データの入力rlist = ReadList@"oscillation.out", Number, RecordLists Ø TrueD;rlist2 = Transpose@rlistD
時刻データを配列timeに代入time = rlist2@@1DD
位置データを配列positionに代入position = rlist2@@2DD
運動量(速度)データを配列velocityに代入velocity = rlist2@@3DD
ポテンシャルエネルギーデータを配列potentialEに代入potentialE = rlist2@@4DD
表示するデータ時刻データと位置データを配列trajectoryに代入
trajectory = 8<;AppendTo@trajectory, timeD;AppendTo@trajectory, positionD;trajectory = Transpose@trajectoryD
åīĘŃĞĬŁıĤą�?æď
åa"īņħĕ´�timeĄ��æā
êýú^Ćuµ^Ā÷ã
(@�aĄĆ��Ā÷)
ĠĸŅĭĆâ�íđ�Ą¿Ą
@�õÿ�ð�ã
Á7.1ą@»ą�h(1)
15
表示 : 時刻 vs 位置(時間軸=横軸に沿って振り子が触れる様子)
ListPlot@trajectoryD
10 20 30 40
-2
-1
1
2
位置データと運動量データを配列phasepointsに代入phasepoints = 8<;AppendTo@phasepoints, positionD;AppendTo@phasepoints, velocityD;phasepoints = Transpose@phasepointsD
表示 : 位置 vs 運動量(古典力学の位相空間)
ListPlot@phasepointsD
-2 -1 1 2
-4
-2
2
4
位置データとポテンシャルエネルギーを配列realpointsに代入realpoints = 8<;AppendTo@realpoints, positionD;AppendTo@realpoints, potentialED;realpoints = Transpose@realpointsD
2 Verlet.nb
Á7.1ą@»ą�h(2)
16
realpoints[[1]]の位置を中心とした円とy=0.5* x2のグラフを同時プロット
Show@[email protected] * x^2, 8x, -2.5, 2.5<D,Graphics@Circle@realpoints@@1DD, 0.1D
DD
-2 -1 1 2
0.5
1.0
1.5
2.0
2.5
3.0
realpoints[[1]]~realpoints[[5]]の位置を中心とした円とy=0.5* x2のグラフを同時プロット
movies = 8<;Do@graph =Show@[email protected] * x^2, 8x, -2.5, 2.5<D,Graphics@Circle@realpoints@@iDD, 0.05D
DD;
AppendTo@movies, graphD,8i, 5<D
realpoints[[1]]~realpoints[[5]]の位置を中心とした円とy=0.5* x2のグラフを同時プロットがちゃんと配列moviesに入っているかを確認。
movies
:
-2 -1 1 2
0.51.01.52.02.53.0
,
-2 -1 1 2
0.51.01.52.02.53.0
,
-2 -1 1 2
0.51.01.52.02.53.0
,
-2 -1 1 2
0.51.01.52.02.53.0
,
-2 -1 1 2
0.51.01.52.02.53.0
>
Verlet.nb 3
Á7.1ą@»ą�h(3)
17
配列moviesにグラフを格納 。movies = 8<;Do@graph =Show@[email protected] * x^2, 8x, -2.5, 2.5<D,Graphics@Circle@realpoints@@iDD, 0.1D
DD;
AppendTo@movies, graphD,8i, 500<D
動画の作成ListAnimate@moviesD
-2 -1 1 2
0.5
1.0
1.5
2.0
2.5
3.0
4 Verlet.nb
moviesą�Sâ
&�ą�SĆ9Ba¹îííĒĊ÷ã
Á7.1ą@»ą�h(4)
18
表示 : 時刻 vs 位置(時間軸=横軸に沿って振り子が触れる様子)
ListPlot@trajectoryD
10 20 30 40
-2
-1
1
2
位置データと運動量データを配列phasepointsに代入phasepoints = 8<;AppendTo@phasepoints, positionD;AppendTo@phasepoints, velocityD;phasepoints = Transpose@phasepointsD
表示 : 位置 vs 運動量(古典力学の位相空間)
ListPlot@phasepointsD
-2 -1 1 2
-4
-2
2
4
位置データとポテンシャルエネルギーを配列realpointsに代入realpoints = 8<;AppendTo@realpoints, positionD;AppendTo@realpoints, potentialED;realpoints = Transpose@realpointsD
2 Verlet.nb
Mathematicaą4ĕ²U(D4ąĜŃŅģ)→åCtrl+CæĀĠijņ→WordĴėęłĕ¸êÿ→åCtrl+VæĀĶņĤĬ
Mathematicaą4ĕWordĴė곥¢ñēĄĆ..
ŃķņĬ
NÀ
Á7.1ąĵńğŀĺąĦņĤĠņĭâMathematicaĕ�ýú�h�ią(1)n§a"(t)�§��(x)ąĵńĩĬ(*1).öð�h�iąn§��(x)�§±&·(p)ąĵńĩĬ(*2)
ĕĵŁŅĬõÿâp2ąYk¸:aĄZ�
19
10 20 30 40
!2
!1
1
2
!2 !1 1 2
!4
!2
2
4(*1) (*2)