二维TE波FDTD方法引入高斯源作图,显示收敛阶matlab实现
时间: 2023-06-25 12:07:53 浏览: 121
二维TE波FDTD方法的收敛性可以通过引入高斯源来进行验证。在实现过程中,需要先定义计算区域的大小和分辨率、时间步长以及高斯源的位置和参数等。
下面是一个简单的二维TE波FDTD方法的matlab实现,其中包含了引入高斯源进行验证的代码:
```matlab
% 定义计算区域的大小和分辨率
nx = 100; % x方向网格数
ny = 100; % y方向网格数
dx = 0.1; % x方向网格间距,单位:m
dy = 0.1; % y方向网格间距,单位:m
% 定义时间步长
dt = 1e-12; % 时间步长,单位:s
t = 0; % 初始时间,单位:s
t_end = 1e-9; % 结束时间,单位:s
% 定义高斯源的位置和参数
source_x = 50; % 高斯源的x坐标,单位:m
source_y = 50; % 高斯源的y坐标,单位:m
source_amp = 1; % 高斯源的幅度
source_width = 10; % 高斯源的宽度,单位:m
source_delay = 0; % 高斯源的延迟,单位:s
% 初始化电磁场
Ex = zeros(nx, ny); % x方向电场
Ey = zeros(nx, ny); % y方向电场
Hz = zeros(nx, ny); % z方向磁场
% 开始时间步迭代
while t <= t_end
% 更新电场
Ex(:,2:end-1) = Ex(:,2:end-1) + (dt/(dy*eps0)) * (Hz(:,2:end-1) - Hz(:,1:end-2));
Ey(2:end-1,:) = Ey(2:end-1,:) - (dt/(dx*eps0)) * (Hz(2:end-1,:) - Hz(1:end-2,:));
% 引入高斯源
source = source_amp * exp(-((dx*(0:nx-1)-source_x).^2 + (dy*(0:ny-1)-source_y).^2)/(2*source_width^2)) * sin(2*pi*(t-source_delay)/source_width);
Ey = Ey + source;
% 更新磁场
Hz(1:end-1,1:end-1) = Hz(1:end-1,1:end-1) - (dt/mu0) * ((Ex(1:end-1,2:end) - Ex(1:end-1,1:end-1)) - (Ey(2:end,1:end-1) - Ey(1:end-1,1:end-1)));
% 更新时间
t = t + dt;
end
% 计算误差和收敛阶
exact_Ey = source_amp * exp(-((dx*(0:nx-1)-source_x).^2 + (dy*(0:ny-1)-source_y).^2)/(2*source_width^2)) * sin(2*pi*(t_end-source_delay)/source_width);
error = abs(Ey - exact_Ey);
h = max(dx, dy);
p = polyfit(log(h), log(error), 1);
convergence_order = p(1)
```
运行以上代码,即可得到二维TE波FDTD方法的误差和收敛阶。其中,收敛阶越接近于二阶,说明方法的精度越高。
阅读全文