import matplotlib.pyplot as plt import numpy as np def f(x): fx=np.sin(x) return fx a=0.; b=2.*np.pi; N=20 dx=(b-a)/N x1=np.arange(a,b,dx) x2=np.arange(a+dx,b+dx,dx) fx=f(x1) fp=(f(x2)-f(x1))/dx fpex=np.cos(x1) s5='%9.4f'*5 for i in range(N): print(s5 %(x1[i],x2[i],fx[i],fp[i],fpex[i])) plt.plot(x1,fx,'b-') plt.plot(x1,fp,'ro') plt.plot(x1,fpex,'g--') plt.savefig("num-diff.png") print ('plot is done') |
============輸出:============= 0.0000 0.3142 0.0000 0.9836 1.0000 0.3142 0.6283 0.3090 0.8873 0.9511 0.6283 0.9425 0.5878 0.7042 0.8090 0.9425 1.2566 0.8090 0.4521 0.5878 1.2566 1.5708 0.9511 0.1558 0.3090 1.5708 1.8850 1.0000 -0.1558 0.0000 1.8850 2.1991 0.9511 -0.4521 -0.3090 2.1991 2.5133 0.8090 -0.7042 -0.5878 2.5133 2.8274 0.5878 -0.8873 -0.8090 2.8274 3.1416 0.3090 -0.9836 -0.9511 3.1416 3.4558 0.0000 -0.9836 -1.0000 3.4558 3.7699 -0.3090 -0.8873 -0.9511 3.7699 4.0841 -0.5878 -0.7042 -0.8090 4.0841 4.3982 -0.8090 -0.4521 -0.5878 4.3982 4.7124 -0.9511 -0.1558 -0.3090 4.7124 5.0265 -1.0000 0.1558 -0.0000 5.0265 5.3407 -0.9511 0.4521 0.3090 5.3407 5.6549 -0.8090 0.7042 0.5878 5.6549 5.9690 -0.5878 0.8873 0.8090 5.9690 6.2832 -0.3090 0.9836 0.9511 plot is done |
import matplotlib.pyplot as plt import numpy as np dt=0.1; N=int(1./dt)+2 t=0; x=0; xp=t**2; xx=t**3/3. t1=[]; x1=[]; xp1=[]; xx1=[] for i in range(1,N): xp=t**2 x=x+xp*dt xx=t**3/3. t1.append(t) xp1.append(xp) x1.append(x) xx1.append(xx) print ('%9.4f %9.4f %9.4f %9.4f' %(t,xp,x,xx)) t=dt*i plt.figure() plt.plot(t1,x1,'ko', label=r'$x(t+dt) \simeq x(t)+t^2 dt$') plt.plot(t1,xx1,'b', label=r'$x(t)=\frac{1}{3}t^3$') plt.legend() plt.savefig("finite-diff-1.png") print ('plot is done') |
============輸出:============= 0.0000 0.0000 0.0000 0.0000 0.1000 0.0100 0.0010 0.0003 0.2000 0.0400 0.0050 0.0027 0.3000 0.0900 0.0140 0.0090 0.4000 0.1600 0.0300 0.0213 0.5000 0.2500 0.0550 0.0417 0.6000 0.3600 0.0910 0.0720 0.7000 0.4900 0.1400 0.1143 0.8000 0.6400 0.2040 0.1707 0.9000 0.8100 0.2850 0.2430 1.0000 1.0000 0.3850 0.3333 plot is done |
GlowScript 3.0 VPython scene = display(width=600, height=600,center=vector(0,12,0)) ball= sphere(radius=0.5) floor=box(pos=vector(0,0,0),size=vector(20,0.5,20), color=color.blue) g=9.8; h=25.0; x_0=h v_0=0.; x=x_0; v=v_0 t=0. dt=0.01 NR=int(1./dt) while t<30.: rate(NR) t=t+dt x=x+v*dt v=v-g*dt ball.pos=vector(0,x,0) #if(ball.pos.y < 0): break if(ball.pos.y < 0): v=-v |
GlowScript 3.0 VPython ''' 在這個程式當中我們考慮一個進行自由落體運動的物體受到空氣阻力的影響。 假設阻力的大小可以表示為下面的公式: fr=-mCv, m=落體質量C=阻力係數,v=速度, 請注意到阻力的方向總是與物體運動的方向相反,所以他會削減掉速度的大小,動能就會損失。 然而由於地球的重力,物體的速度一直受到向下的加速,空氣阻力使他減速, 最後在這兩種力量大小相等,合力為零的時候將會,落體趨近於一個等速度運動。 第一個球(藍色),在真空的管子內運動,沒有受到任何空氣阻力的影響,是一個理想的自由落體運動。 第二個黃色的球受到空氣阻力的影響,速度雖然越來越快但最後會趨近於一個等速度運動, 那個極限的速率稱為終端速率(terminal speed)。為了彰顯這個現象, 我們在第二個球的加速度小於0.1的時候,就產生第三個紅球,讓這個紅球以終端速率做等速度運動。 我們不難發現黃色的球跟紅色地球同步運動,顯現出黃色的球已經進入一個等速度運動的狀態。 ''' g=-9.8; v0=0.; y0=120.; r=1; N=1; C=0.7 scene = display(width=600, height=800,center=vec(0,y0/2.,0)) ball1 = sphere(pos=vec(0,y0,0),radius=r, color=vec(0.5,0.5,1)) ball2 = sphere(pos=vec(5,y0,0),radius=r, color=color.yellow) floor=box(pos=vec(0,0,0),size=vec(30,0.5,30), color=color.cyan) arrY=arrow(pos=vec(-10,0,0),axis=vec(0,y0+5,0),shaftwidth=0.2,headwidth=0.7) tube=cylinder(pos=vec(0,0,0),axis=vec(0,y0,0),radius=2,color=vec(0.5,1,0),opacity=0.2) y1=y0; v1=v0 y2=y0; v2=v0 dt=0.01;NR=int(1/dt) t=0.; K=0 while (t < 20.): rate(NR/2) v1+=g*dt if(ball1.pos.y > r): ball1.pos.y+=v1*dt if(ball2.pos.y < 0.): break a2=g-C*v2 v2+=a2*dt y2+=v2*dt t=t+dt ball2.pos.y=y2 if(abs(a2)<0.1) and K==0: K=1 y3=y2 v3=v2 ball3 = sphere(pos=vec(10,y0,0),radius=r, color=color.red) if(K==0): continue else: y3+=v3*dt ball3.pos.y=y3 |