用GeoGebra探究試探電荷在兩個電荷產(chǎn)生的非勻強電場中的運動軌跡
定義電荷q1,q2,試探電荷的質(zhì)量m以及q,電場力常量k,試探電荷的初始速度v0x、v0y和初始位移x0,y0以及q1,q2的位置座標A,B。
定義電勢:
V(x,y)=k(q1/sqrt((x-x(A))^2+(y-y(A))^2)+q2/sqrt((x-x(B))^2+(y-y(B))^2))

定義電場強度:
E_x(x,y)=-Derivative(V,x)
E_y(x,y)=-Derivative(V,y)##由于在二維平面探究,所以不考慮k=(0,0,1)方向上的電場。##

ax(x,y)=qE_x/m
ay(x,y)=qE_y/m
dt=0.01##定義時間微分dt##
N=150##定義迭代次數(shù)N##
L1=IterationList[{(ax(Element(M,3)),ay(Element(M,3))),Element(M,1)dt+Element(M,2),Element(M,3)+Element(M,2)dt},M,{{(ax(x0,y0),ay(x0,y0)),(v0x,v0y),(x0,y0)}},N]##迭代a=(ax(r),ay(r)),v=v+a?dt,r=r+v?dt,迭代指令類似于各編程語言中的for循環(huán)。其中Element(M,1),Element(M,2)和Element(M,3)分別代表加速度a,速度v和位移r,三者都是矢量表達形式##
SetConditionToShowObject[L1,false]##隱去L1,不然我們得到的則是a,v,r所形成的點/矢量的集合,我們要求的是r的集合即電荷的軌跡點的集合,所以要想辦把r的點集合提取出來##
L2=Sequence[Element(Element(L1,j),3),j,1,N]##提取r的集合即試探電荷的軌跡點##
SetPointSize[L2,2]##美觀一下##
L3=Sequence[Sequence[Vector((i,j),(i,j)+scale*UnitVector[(E_x(i,j),E_y(i,j))]),i,-3,3,0.25],j,-3,3,0.25]##描繪出電場矢量場##
SetLineStyle[L3,1]##美觀一下##

探究軌跡方法不唯一,以上只是其中一種,還可以使用腳本法,以及NSolveODE指令方法,個人推薦用腳本法。但上面所描述的幾種方法,本質(zhì)都是Euler methods,不過當用NSolveODE指令方法以及IterationList迭代方法時都容易卡頓,不過腳本法則不會出現(xiàn)這種情況。同樣NSolveODE指令方法結(jié)果會比迭代法和腳本法更精確,根據(jù)個人愛好選擇。同樣,如果要探究三維空間里試探電荷在兩個點電荷產(chǎn)生的電場中的運動軌跡,電勢改為V(x,y,z)=V(x,y)=k(q1/sqrt((x-x(A))^2+(y-y(A))^2+(z-z(A))^2)+q2/sqrt((x-x(B))^2+(y-y(B))^2+(z-z(A))^2))
初始位移和初始速度添加上z0和v0z,電場強度再定義E_z=-Derivative(V,z),總之加了一個緯度。
以下兩張圖是腳本法制作,之前的所有量定義不變,但沒有IterationList指令,而是做了一點調(diào)整,dv=a*dt,dr=v*dt。定義了滑動條t,其中滑動條t中的更新腳本如下:
{
SetValue[a,q/m*(E_x(r),E_y(r),E_z(r))];
SetValue[v,v+dv];
SetValue[r,r+dr];
}
Start以及Reset按鈕里面的腳本詳見其他UP主的做法。


這是第二次發(fā)了,但還是有可能有些不到位,還請各位見諒,萬分感謝!