一维电磁波的有限差分时域(FTDT)方法

时间:2014-06-25 12:45:09

标签: matlab numerical-methods

我试图编写代码以解决以下耦合偏微分电磁波方程:

enter image description here

该代码使用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)我对运行电影模拟知之甚少,随着解决方案的运行,图表会发生振荡。我怎么能阻止这个?

2 个答案:

答案 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)。您需要调整常量,然后再试一次