电磁场仿真——绘制电场线和等势线
空間中有三個電荷量分別為+1C,-1C,+1C的點電荷,三個點電荷在邊長為10mm的正三角形頂點處,繪制電場線的空間二維分布。
?
一:基本原理
在空間二維平面中建立二維坐標系,如圖1所示在(5,0),(-5,0)和(0,5)處分別有1C的正電荷,1C的正電荷和-1C的負電荷。
(一)電勢原理
根據空間中某一點距離點電荷的電勢知道:
U=kqr
根據空間某點處電勢的疊加原理,在場點P(x,y)處產生的電勢U為:
?
?
其中,
知道了空間某一點P(x,y)處三個點電荷產生的電勢的疊加值,我們就可以找出某一電勢所對應的多個空間點,將這些點連接成線即可以得到等勢線。
(二)電場原理
根據庫侖定律知道,空間某一點相對某一位置的電荷的電場強度為?:
根據點電荷電場強度的疊加原理,在場點P(x,y)處產生的電場強度E為:
通過計算可以知道:
?
。
大小分別為1C,1C,-1C。
知道了空間某一點處的各分量的電場強度的大小,我們就推導出下一段電場線上的點的各分量電場強度大小。即滿足?在模型中我們可以將各個電荷看成一定半徑的球體,按照一定的間距將每一個球體表面圓周分成若干個點,這些點就是電場線的起始點。通過從各個起始點取一定間隔逐次推導出下一個坐標點的位置,知道滿足一定的條件停止推導,將這些點連線即可得到電場線。
二:仿真數據設置
將x的范圍設置成[-2.5,2.5]/cm。其中取樣間隔為0.01cm,將y的范圍同樣設置成[-2.5,2.5]/cm,取樣間隔同樣為0.01。這樣就形成了一個501*501的網格。我們取k介質為真空中,化簡得到。在等勢線繪制的時候我們把網格內的電勢線分成了100份。我們設置各個電荷的半徑0.05*2^(1/2)m,各個電荷表面有50個起始點。起始點到下一個推導電場點的距離間隔為0.001。最終電場線終止要滿足的條件有:
1.下一個電場點靠近其他電荷。
2.下一個電場點的位置超出了網格點的邊界。
三.結果分析及總結
最終仿真圖像結果如下:
?
四:MATLAB代碼運行
clear,number=3; %設定空間電荷數,并用charge矩陣來保存各個電荷的電荷量和位置 charge=[1,0.5,0;1,-0.5,0;-1,0,0.86] k=9*10^9;%這里取介質為無限大真空,化簡得到k=9*10^9 x=-2.5:0.01:2.5; y=-2.5:0.01:2.5; [X,Y]=meshgrid(x,y); %建立X_Y坐標系 U=zeros(501,501); clf %clf指令是清除之前的圖像 for j=1:numberU=U+k*charge(j,1)./sqrt((X-charge(j,2)).^2+(Y-charge(j,3)).^2); end%得到電勢的值 注意U與XY的對應關系是U[Y,X] for a=1:number for b=-10:10 %橫坐標變化 for c=-10:10 %縱坐標變化 if abs(U(charge(a,3)*100+251+b,charge(a,2)*100+251+c))>abs(U(charge(a,3)*100+251+5,charge(a,2)*100+251+5)) U(charge(a,3)*100+251+b,charge(a,2)*100+251+c)=U(charge(a,3)*100+251+5,charge(a,2)*100+251+5); end end end end%由于在電荷處,電勢理論上無窮大,所以通過設置閾值對其進行“削頂” contour(X,Y,U,100)%畫等勢面 hold on %下面是對電場線的繪制 total=sum(abs(charge(:,1)));%電荷模值求和 px=[];py=[];%存放電場線數據 for a=1:number%畫由第a個電荷發出的電場線for b=1:round(abs(charge(a,1))/total*50*number)%電場線數目由歸一化電荷決定 其中round函數是四舍五入的意思j=round(abs(charge(a,1))/total*50*number);i=1;%j是單個電荷表面電場線起始點的數目px(a,b,i)=charge(a,2)+0.05*2^(1/2)*cos(b*2*pi/j);py(a,b,i)=charge(a,3)+0.05*2^(1/2)*sin(b*2*pi/j);%分配電場線起點坐標 其中ab表示的是第a個電荷的第b個起始點的位置t=1;while t==1Ex=0;Ey=0;for c=1:numberRx=px(a,b,i)-charge(c,2);Ry=py(a,b,i)-charge(c,3);E=k*charge(c,1)./(Rx^2+Ry^2);Ex=Ex+E*Rx/sqrt((Rx^2+Ry^2));Ey=Ey+E*Ry/sqrt((Rx^2+Ry^2));%得到線端點電出場的X,Y方向上的大小endrx=0.001*Ex/sqrt(Ex^2+Ey^2);ry=0.001*Ey/sqrt(Ex^2+Ey^2);%得到下一步要連接的點跨度if charge(a,1)>0elserx=-rx;ry=-ry;end %判斷切線的方向px(a,b,i+1)=px(a,b,i)+rx;py(a,b,i+1)=py(a,b,i)+ry;i=i+1;for c=1:numberif ((((px(a,b,i)+rx-charge(c,2))^2+(py(a,b,i)+ry-charge(c,3))^2)>0.005)&&(px(a,b,i)+rx<2.5)&&(py(a,b,i)+ry<2.5)&&(px(a,b,i)+rx>-2.5)&&(py(a,b,i)+ry>-2.5))%上面這一行是判斷下一個連接點即沒有出坐標范圍也沒連接到另一個電荷else t=0;endendendend end%我們終于得到所有電場線的信息了 hold on for a=1:numberfor b=1:round(abs(charge(a,1))/total*50*number)t=1;hold onpxp=squeeze(px(a,b,:));pyp=squeeze(py(a,b,:));pxp(find(pxp==0))=[];pyp(find(pyp==0))=[];for c=1:numberif ((((pxp(end)-charge(c,2))^2+(pyp(end)-charge(c,3))^2)<=0.01)&&charge(a,1)<0)t=0;elsehold onendendif t==1plot(pxp,pyp)endend end%一根根的畫出來 xlabel('X'),ylabel('Y'),title('電場線等勢面繪制圖'),text(1.8,2.3,'電荷量單位 C') text(2.1,-2.35,'坐標單位cm') text(1.9,-2.6,date) for a=1:numbertext(charge(a,2)-0.04,charge(a,3),num2str(charge(a,1)*1)) end?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的电磁场仿真——绘制电场线和等势线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flume协作框架
- 下一篇: Jmeter常见问题