二维TE波CNDG-FDTD方法引入高斯源,并求数值解误差,显示收敛精度阶数matlab实现
时间: 2023-06-17 15:08:45 浏览: 57
二维TE波CNDG-FDTD方法是一种求解Maxwell方程组的数值方法,其中CNDG表示采用半隐式的中心差分格式,FDTD表示采用有限差分时间域方法。为了引入高斯源,我们可以在计算区域内选取一个位置作为源点,并将其周围的电磁场按照高斯分布进行初始化。具体实现如下:
1. 初始化计算区域
我们首先需要确定计算区域的大小和网格大小,然后使用半隐式的中心差分格式初始化电场和磁场。假设计算区域大小为Lx × Ly,网格大小为dx × dy,则电场和磁场的初始值可以表示为:
$$
E_x(x,y,0) = E_y(x,y,0) = H_z(x,y,0) = 0
$$
$$
H_x(x,y,0) = \frac{1}{\mu}\frac{\partial E_y}{\partial z}(x,y,0)
$$
$$
H_y(x,y,0) = -\frac{1}{\mu}\frac{\partial E_x}{\partial z}(x,y,0)
$$
其中,μ为介质的磁导率。
2. 引入高斯源
我们在计算区域内选取一个位置(x0, y0)作为高斯源的位置,然后将其周围的电磁场按照高斯分布进行初始化。假设高斯源的频率为f,波长为λ,则高斯源的电场和磁场可以表示为:
$$
E_x(x,y,0) = E_{x0}e^{-\frac{(x-x0)^2+(y-y0)^2}{2\sigma^2}}\sin(2\pi f t)
$$
$$
E_y(x,y,0) = E_{y0}e^{-\frac{(x-x0)^2+(y-y0)^2}{2\sigma^2}}\sin(2\pi f t)
$$
$$
H_z(x,y,0) = H_{z0}e^{-\frac{(x-x0)^2+(y-y0)^2}{2\sigma^2}}\sin(2\pi f t)
$$
其中,E0和H0是电场和磁场的幅值,σ是高斯分布的标准差。
3. 计算数值解误差和收敛精度阶数
为了计算数值解误差和收敛精度阶数,我们需要先计算出精确解。假设高斯源的位置为(x0, y0),则在时刻t处的精确解可以表示为:
$$
E_x(x,y,t) = E_{x0}e^{-\frac{(x-x0)^2+(y-y0)^2}{2\sigma^2}}\sin(2\pi f t - \theta_x)
$$
$$
E_y(x,y,t) = E_{y0}e^{-\frac{(x-x0)^2+(y-y0)^2}{2\sigma^2}}\sin(2\pi f t - \theta_y)
$$
$$
H_z(x,y,t) = H_{z0}e^{-\frac{(x-x0)^2+(y-y0)^2}{2\sigma^2}}\sin(2\pi f t - \theta_z)
$$
其中,θx、θy和θz是相位角。
然后,我们可以使用CNDG-FDTD方法求解数值解,将数值解和精确解进行比较,计算误差。假设数值解为$E_x^{num}(x,y,t)$,则误差可以表示为:
$$
error = \frac{\sqrt{\sum_{i,j}(E_x(x_i,y_j,t) - E_x^{num}(x_i,y_j,t))^2}}{\sqrt{\sum_{i,j}(E_x(x_i,y_j,t))^2}}
$$
最后,我们可以将误差随着网格大小的变化进行绘图,计算出收敛精度阶数。具体实现可以使用matlab进行编程。