【电磁场实验作业】有限差分法(FDM)求解静电场电位分布
一、題目描述
試用超松弛法確定二維靜電場區域的電位分布
二、有限差分法
有限差分法(Finite Difference Methods,簡稱FDM),是一種微分方程的數值解法,是通過有限差分來近似導數,從而尋求微分方程的近似解,是一種以以差分為原理的一種數值解法。
將求解場域劃分為很多網格和節點,并用差商代替微商,將場域中的偏微分方程轉化成以各節點的電位或者磁矢為未知量的差分方程組。求解該方程組可以得到各離散點待求電位或磁矢的數值解。
2.1差分的基本定義
一階差分
Δf(x)=f(x+h)?f(x)\Delta f(x)=f(x+h)-f(x) Δf(x)=f(x+h)?f(x)
一階差商
Δf(x)Δx=f(x+h)?f(x)h\frac{\Delta f(x)}{\Delta x}=\frac{f(x+h)-f(x)}{h} ΔxΔf(x)?=hf(x+h)?f(x)?
二階差分
Δ2f(x)=Δf(x+h)?Δf(x)\Delta^{2} f(x)=\Delta f(x+h)-\Delta f(x) Δ2f(x)=Δf(x+h)?Δf(x)
二階差商
Δ2f(x)Δx2=1h[Δf(x+h)h?Δf(x)h]\frac{\Delta^{2} f(x)}{\Delta x^{2}}=\frac{1}{h}\left[\frac{\Delta f(x+h)}{h}-\frac{\Delta f(x)}{h}\right] Δx2Δ2f(x)?=h1?[hΔf(x+h)??hΔf(x)?]
2.1拉普拉斯方程的有限差分形式:
φi,j+1=φi,j+?φ?xh+12?2φ?x2h2+16?3φ?x3h3+?φi,j?1=φi,j??φ?xh+12?2φ?x2h2?16?3φ?x3h3+?φi?1,j=φi,j??φ?yh+12?2φ?y2h2?16?3φ?y3h3+?φi+1,j=φi,j+?φ?yh+12?2φ?y2h2+16?3φ?y3h3+?φi,j+1+φi,j?1+φi?1,j+φi+1,j=4φi,j+h2(?2φ?x2+?2φ?y2)+??2φ=?2φ?x2+?2φ?y2=0φi,j=14(φi,j+1+φi,j?1+φi?1,j+φi+1,j)\varphi_{i, j+1}=\varphi_{i, j}+\frac{\partial \varphi}{\partial x} h+\frac{1}{2} \frac{\partial^{2} \varphi}{\partial x^{2}} h^{2}+\frac{1}{6} \frac{\partial^{3} \varphi}{\partial x^{3}} h^{3}+\cdots \\ \varphi_{i, j-1}=\varphi_{i, j}-\frac{\partial \varphi}{\partial x} h+\frac{1}{2} \frac{\partial^{2} \varphi}{\partial x^{2}} h^{2}-\frac{1}{6} \frac{\partial^{3} \varphi}{\partial x^{3}} h^{3}+\cdots \\ \varphi_{i-1, j}=\varphi_{i, j}-\frac{\partial \varphi}{\partial y} h+\frac{1}{2} \frac{\partial^{2} \varphi}{\partial y^{2}} h^{2}-\frac{1}{6} \frac{\partial^{3} \varphi}{\partial y^{3}} h^{3}+\cdots \\ \varphi_{i+1, j}=\varphi_{i, j}+\frac{\partial \varphi}{\partial y} h+\frac{1}{2} \frac{\partial^{2} \varphi}{\partial y^{2}} h^{2}+\frac{1}{6} \frac{\partial^{3} \varphi}{\partial y^{3}} h^{3}+\cdots \\ \varphi_{i, j+1}+\varphi_{i, j-1}+\varphi_{i-1, j}+\varphi_{i+1, j}=4 \varphi_{i, j}+h^{2}\left(\frac{\partial^{2} \varphi}{\partial x^{2}}+\frac{\partial^{2} \varphi}{\partial y^{2}}\right)+\cdots \\ \nabla^{2} \varphi=\frac{\partial^{2} \varphi}{\partial x^{2}}+\frac{\partial^{2} \varphi}{\partial y^{2}}=0 \\ \varphi_{i, j}=\frac{1}{4}\left(\varphi_{i, j+1}+\varphi_{i, j-1}+\varphi_{i-1, j}+\varphi_{i+1, j}\right) φi,j+1?=φi,j?+?x?φ?h+21??x2?2φ?h2+61??x3?3φ?h3+?φi,j?1?=φi,j???x?φ?h+21??x2?2φ?h2?61??x3?3φ?h3+?φi?1,j?=φi,j???y?φ?h+21??y2?2φ?h2?61??y3?3φ?h3+?φi+1,j?=φi,j?+?y?φ?h+21??y2?2φ?h2+61??y3?3φ?h3+?φi,j+1?+φi,j?1?+φi?1,j?+φi+1,j?=4φi,j?+h2(?x2?2φ?+?y2?2φ?)+??2φ=?x2?2φ?+?y2?2φ?=0φi,j?=41?(φi,j+1?+φi,j?1?+φi?1,j?+φi+1,j?)
2.3求解方法
簡單迭代法:
φi,jn+1=14(φi,j+1n+φi,j?1n+φi?1,jn+φi+1,jn)\varphi_{i, j}^{n+1}=\frac{1}{4}\left(\varphi_{i, j+1}^{n}+\varphi_{i, j-1}^{n}+\varphi_{i-1, j}^{n}+\varphi_{i+1, j}^{n}\right) φi,jn+1?=41?(φi,j+1n?+φi,j?1n?+φi?1,jn?+φi+1,jn?)
松弛迭代法:
φi,jn+1=φi,jn+ω4(φi,j+1n+φi,j?1n+1+φi?1,jn+1+φi+1,jn?4φi,jn)ω=21+1?[cos?(π/m)+cos?(π/n)2]2\varphi_{i, j}^{n+1}=\varphi_{i, j}^{n}+\frac{\omega}{4}\left(\varphi_{i, j+1}^{n}+\varphi_{i, j-1}^{n+1}+\varphi_{i-1, j}^{n+1}+\varphi_{i+1, j}^{n}-4 \varphi_{i, j}^{n}\right)\\ \omega=\frac{2}{1+\sqrt{1-\left[\frac{\cos (\pi / m)+\cos (\pi / n)}{2}\right]^{2}}} φi,jn+1?=φi,jn?+4ω?(φi,j+1n?+φi,j?1n+1?+φi?1,jn+1?+φi+1,jn??4φi,jn?)ω=1+1?[2cos(π/m)+cos(π/n)?]2?2?
三、示例代碼
hx=25;hy=17; %設置網格節點數 v1=ones(hy,hx); %設置行列二維數組 v1(6:12,8:18)=zeros(7,11); m=24;n=16;%橫縱向網格數 %邊界的Dirichlet邊界條件值 v1(1,1:25)=0; %上邊界 v1(17,1:25)=0;%下邊界 v1(2:16,1)=0;%左邊界 v1(2:16,25)=0;%右邊界 v1(6,9:18)=ones(10,1)*100;%中間上邊界 v1(7:11,18)=ones(5,1)*100;%中間上邊界%計算松弛因子 t1=(cos(pi/m)+cos(pi/n))/2; w=2/(1+sqrt(1-t1*t1)); v2=v1;maxt=1;t=0;%初始化 k=0; while(maxt>1e-6)%由v1迭代,算出v2,迭代精度為0.000001k=k+1;%計算迭代次數maxt=0;for i=2:16%從2到16行循環for j=2:7%從2到7列循環v2(i,j)=v1(i,j)+(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1)-4*v1(i,j))*w/4;%拉普拉斯方程差分式t=abs(v2(i,j)-v1(i,j));if(t>maxt) maxt=t;endendendfor i=2:5%從2到5行循環for j=8:18%從8到18列循環v2(i,j)=v1(i,j)+(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1)-4*v1(i,j))*w/4;%拉普拉斯方程差分式t=abs(v2(i,j)-v1(i,j));if(t>maxt) maxt=t;endendendfor i=13:16%從13到16行循環for j=8:18%從8到18列循環v2(i,j)=v1(i,j)+(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1)-4*v1(i,j))*w/4;%拉普拉斯方程差分式t=abs(v2(i,j)-v1(i,j));if(t>maxt) maxt=t;endendendfor i=2:16%從2到16行循環for j=19:24%從19到24列循環v2(i,j)=v1(i,j)+(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1)-4*v1(i,j))*w/4;%拉普拉斯方程差分式t=abs(v2(i,j)-v1(i,j));if(t>maxt) maxt=t;endendendv2(6:12,8)=v2(6:12,7);v2(12,8:18)=v2(13,8:18);v1=v2; endv1=v2(hy:-1:1,:);save v1data v1subplot(1,2,1),mesh(v1)%畫三維曲面圖axis([0,25,0,17,0,100])subplot(1,2,2),contour(v1,50)%畫等電位線圖hold onx=1:1:hx;y=1:1:hy;[xx,yy]=meshgrid(x,y);%形成柵格[Gx,Gy]=gradient(v1,0.6,0.6);%計算梯度quiver(xx,yy,Gx,Gy,'r')%根據梯度數據畫箭頭axis([-1.5,hx+2.5,-2,20])%設置坐標邊框plot([1,1,hx,hx,1],[1,hy,hy,1,1],'k')%畫導體邊框text(hx/2-0.5,hy+0.4,'0V','fontsize',11);%上標注text(hx/2-0.5,0.4,'0V','fontsize',11);%下標注text(-1,hy/2,'0V','fontsize',11);%左標注text(hx+1,hy/2,'0V','fontsize',11);%右標注text(hx/2-3,hy/2+2,'\phi=50V','fontsize',11);%中間上標注text(hx/2-4,hy/2-1,'\partial\phi/\partialn=0','fontsize',11);%中間下標注hold off四、實驗結果
舉得有用別忘記點個贊再走呀😄
總結
以上是生活随笔為你收集整理的【电磁场实验作业】有限差分法(FDM)求解静电场电位分布的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【前端学习日记】用reveal.js实现
- 下一篇: 【Python项目实战】提取.docx文