我试图编写代码以解决以下耦合偏微分电磁波方程:
该代码使用Yee算法采用有限差分时域,可以在以下两个在线文档中阅读:
http://www.eecs.wsu.edu/~schneidj/ufdtd/ufdtd.pdf
http://www.eecs.wsu.edu/~schneidj/ufdtd/chap3.pdf
我希望左侧边界的源是一个带有参数的正弦波:
Ex(0,t) = E0 sin(2πft) for 0 ≤ t ≤ 1/f
代码用每个循环更新波的电场和磁场属性。
我的初始代码如下:
%FDTD Yee algorithm to solve coupled EM wave equations
clear
clc
G=50; %Specify size of the grid
f=10^3; %choose initial frequency of wave in hertz
e=1; %specify permitivity and permeability (normalised condition)
u=1;
Nt=150; %time steps
E0=1; %Electric Field initial amplitude
%Specify step sizes using corruant condition
c=3*10^8;
dx=0.01;
dt=dx/2*c;
%make constant terms
c1=-dt/(dx*e);
c2=-dt/(dx*u);
%create vgector place holders
Ex=zeros(1,G);
Hy=zeros(1,G);
%create updating loop
M=moviein(Nt);
for t=1:Nt
% Spatial Ex
for k=2:G-1
Ex(k)=Ex(k)+c1*(Hy(k)-Hy(k-1));
end
Ex(G)=0; %PEC boundary condition
%E Source at LHS boundary
Ex(1)=E0*sin(2*pi*f*t);
%Spatial Hy
for n=1:G-1
Hy(n)=Hy(n)+c2*(Ex(n)-Ex(n+1));
end
Hy(G)=0; %PMC boundary condition
plot(Ex);
M(:,t) = getframe;
end
movie(M,1);
基本上我想创建一个更新电影,它显示传播到右侧边界的正弦波,编码为完美的电导体;因此反射波,然后传播回左侧边界编码为完美的绝缘体;吸收浪潮。
我遇到的问题如下:
1)我不确定如何正确实现我想要的来源。它似乎不是纯粹的正弦曲线。
2)我编码的波开始传播,但在大多数模拟中它很快消失。我不知道为什么会发生这种情况
3)我对运行电影模拟知之甚少,随着解决方案的运行,图表会发生振荡。我怎么能阻止这个?
答案 0 :(得分:1)
你的波衰减是因为差分方程没有正确实现;代替:
Ex(k)=Ex(k)+c1*(Hy(k)-Hy(k-1));
你应该使用
Ex1(k)=Ex(k)+c1*(Hy(k)-Hy(k-1));
而不是:
Hy(n)=Hy(n)+c2*(Ex(n)-Ex(n+1));
你应该使用:
Hy1(n)=Hy(n)+c2*(Ex(n)-Ex(n+1));
并且,在循环结束时更新当前"数据帧":
Hy = Hy1;
Ey = Ey1;
(你也应该注意边界条件)。
如果您想要一个在数据发生变化时不会改变的固定绘图框,请首先创建一个axis
,您可以在其中绘制,使用已定义的xmin / max和ymin / max,请参阅{{ 3}}
答案 1 :(得分:0)
您应该将Courant编号设置为接近1表示0.995。因此delta_t = 0.995 * delta_x / c。 同样假设delta_x是METRIC单位,那么e和u应该是公制单位。 我不知道使用的具体编码语言,但在c或c ++中,不需要中间变量Ey1等。 另外,每个波长应该至少有10个样本用于精确度(优选为60)。因此波长= 60 * delta_x,因此频率大约等于10到9的幂。此外,我认为sinesoidal源应该是E0 * sin(2 * pi * f * t * delta_t)。您需要调整常量,然后再试一次