📄 shiyuyouxianchafen.m
字号:
%时域有限差分方法
%本程序是利用麦克斯韦方程组的微分形式变成差分形式,把空间分成许多很小的细网格
%利用在时间上的逐步推进来求得空间上的电磁场分布
clear;
%入射波中的常数
E0=1;
N0=377;
c=3*10^8;
w=1.7773585*10^15;
delt_z=8.83333*10^(-8);%空间步长
delt_t=1.47222*10^(-16);%时间步长
%空气中的介电系数和磁导率
Ea=1;
%二氧化硅的介电系数和磁导率
Es=2.1;
%二氧化铪的介电系数和磁导率
Eh=3.73;
%导磁系数
h=1;
%各层介质中的介电系数,共分为5层,其中第一层为1/2波长,之后为1/4波长
%SIO2和HFO2交替分布
int n;%N表示时间
int k;%K表示空间
k==0;
while(k<142)
if k>=0&k<120
e(k)=Ea; k=k+1;
elseif k==120
e(k)=(Ea+Es)/2; k=k+1;
elseif k>120&k<128
e(k)=Es; k=k+1;
elseif k==128
e(k)=(Es+Eh)/2; k=k+1;
elseif k>128&k<131
e(k)=Eh; k=k+1;
elseif k==131
e(k)=(Es+Eh)/2; k=k+1;
elseif k>131&k<135
e(k)=Es; k=k+1;
elseif k==135
e(k)=(Es+Eh)/2; k=k+1;
elseif k>135&k<138
e(k)=Eh; k=k+1;
elseif k==138
e(k)=(Es+Eh)/2; k=k+1;
elseif k>138&k<142
e(k)=Es; k=k+1;
end
end
plot(e);
%初始值
%初始时刻,即n=0时空间各点的值
E(0,0)=E0;
H(0,0)=(E0/N0)*sin(w((-1/2)*delt_z/c-(-1/2)*delt_t));
n==0;
k==1;
while(n==0&(k>0&k<143))
E(k,n)=0;
H(k,n)=0;
k=k+1;
end
%入射波的起始位置即k=0时任意时刻的值
k==0;
n==1;
while(k==0&(n>0&n<286))
E(k,n)=E0*cos(n*w*delt_t);
H(k,n)=(E0/N0)*sin(w((-1/2)*delt_z/c-(n-1/2)*delt_t));
n=n+1;
end
%迭代过程
n==1;
while (n<285) %在时间上逐步推进
k==1;
while (k<142) %在空间上逐步推进
H(k,n)=H(k,n-1)-(delt_t/h*delt_z)*(E(k,n-1)-E(k-1,n-1));
k=k+1;
end
k==1;
while (k<142)
E(k,n)=E(k,n-1)-(delt_t/e(k)*delt_z)*(H(k+1,n)-H(k,n));
k=k+1;
end
n=n+1;
end
%吸收边界条件
n==285;
k==142;
E(k,n)=E(k-1,n-1)+((c*delt_t-delt_z)/(c*delt_t+delt_z))*(E(k-1,n)-E(k,n-1));
plot(H);
plot(E);
%画出电场E(k,n)随空间z的变化
n=285;
k=0:1:142;
plot(k,E(k,n));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -