封闭解(Closed-form solution)、解析解(Analytical solution)、数值解(Numerical solution) 释义

解析解(Analytical solution) 就是根据严格的公式推导,给出任意的自变量就可以求出其因变量,也就是问题的解,然后可以利用这些公式计算相应的问题。所谓的解析解是一种包含分式、三角函数、指数、对数甚至无限级数等基本函数的解的形式。用来求得解析解的方法称为解析法(Analytical techniques),解析法即是常见的微积分技巧,例如分离变量法等。解析解是一个封闭形式(Closed-form) 的函数,因此对任一自变量,我们皆可将其带入解析函数求得正确的因变量。因此,解析解也被称为封闭解(Closed-form solution)。

数值解(Numerical solution) 是采用某种计算方法,如有限元法, 数值逼近法,插值法等得到的解。别人只能利用数值计算的结果,而不能随意给出自变量并求出计算值。当无法藉由微积分技巧求得解析解时,这时便只能利用数值分析的方式来求得其数值解了。在数值分析的过程中,首先会将原方程加以简化,以利于后来的数值分析。例如,会先将微分符号改为差分(微分的离散形式)符号等,然后再用传统的代数方法将原方程改写成另一种方便求解的形式。这时的求解步骤就是将一自变量带入,求得因变量的近似解,因此利用此方法所求得的因变量为一个个离散的数值,不像解析解为一连续的分布,而且因为经过上述简化的操作,其正确性也不如解析法可靠。

简而言之,解析解就是给出解的具体函数形式,从解的表达式中就可以算出任何对应值;数值解就是用数值方法求出金丝解,给出一系列对应的自变量和解。

  • 19
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
二维TE波CNDG-FDTD方法是一种求Maxwell方程组的数值方法,其中CNDG是该方法的一个变体名称,它结合了传统的FDTD方法和Crank-Nicolson方法。在本文中,我们将介绍如何在CNDG-FDTD方法中引入高斯源,并使用Matlab实现数值解析误差。 首先,我们需要构建二维TE波的Maxwell方程组,表示为: $$ \nabla \times \mathbf{E} = -\frac{\partial \mathbf{B}}{\partial t} $$ $$ \nabla \times \mathbf{H} = \mathbf{J} + \frac{\partial \mathbf{D}}{\partial t} $$ 其中,$\mathbf{E}$和$\mathbf{B}$是电场和磁场,$\mathbf{H}$和$\mathbf{D}$是磁场强度和电通量密度,$\mathbf{J}$是电流密度。在CNDG-FDTD方法中,我们采用了中心差分格式来近似时间导数和空间导数,从而得到以下形式的方程: $$ \frac{\mathbf{E}^{n+1/2}_{i,j}-\mathbf{E}^{n-1/2}_{i,j}}{\Delta t} = -\nabla \times \mathbf{B}^{n}_{i,j} $$ $$ \frac{\mathbf{H}^{n+1}_{i,j}-\mathbf{H}^{n}_{i,j}}{\Delta t} = \mathbf{J}^{n+1/2}_{i,j} + \frac{1}{2}(\nabla \times \mathbf{E}^{n}_{i,j}+\nabla \times \mathbf{E}^{n+1/2}_{i,j}) $$ 其中,$\Delta t$是时间步长,$\mathbf{E}^{n+1/2}_{i,j}$和$\mathbf{H}^{n}_{i,j}$是电场和磁场在时刻$n+1/2$和$n$处的值,$\mathbf{J}^{n+1/2}_{i,j}$是电流密度在时刻$n+1/2$处的值。 现在我们将引入高斯源,用于模拟电磁波在空间中扩散的过程。高斯源的形式如下: $$ \mathbf{J}(x,y,t) = J_0 e^{-\frac{(x-x_0)^2+(y-y_0)^2}{2\sigma^2}}sin(\omega t) $$ 其中,$J_0$是高斯脉冲的幅度,$(x_0,y_0)$是高斯脉冲的中心位置,$\sigma$是高斯脉冲的宽度,$\omega$是高斯脉冲的频率。 我们将高斯源分为两个部分:一个是解析,另一个是数值解析是通过直接计算高斯源的解析得到的,而数值是通过CNDG-FDTD方法进行计算得到的。 以下是Matlab代码的实现: ```matlab % 定义模拟参数 nx = 100; % x方向网格数 ny = 100; % y方向网格数 dx = 0.01; % x方向网格间距(m) dy = 0.01; % y方向网格间距(m) dt = 2*dx/3e8; % 时间步长(s) nt = 500; % 总时间步数 x0 = 0.5; % 高斯源中心位置x坐标(m) y0 = 0.5; % 高斯源中心位置y坐标(m) sigma = 0.1; % 高斯源宽度(m) J0 = 1; % 高斯源幅度(A/m^2) omega = 2*pi*1e9; % 高斯源频率(rad/s) % 初始化电场、磁场、电流密度和电通量密度 Ez = zeros(nx,ny); Hx = zeros(nx,ny); Hy = zeros(nx,ny); Jz = zeros(nx,ny); Dz = zeros(nx,ny); % 引入高斯源 x = dx*(0:nx-1); y = dy*(0:ny-1); [X,Y] = meshgrid(x,y); Jz = J0*exp(-((X-x0).^2+(Y-y0).^2)/(2*sigma^2)).*sin(omega*dt*(0:nt-1)); % 计算解析 Ez_analytical = zeros(nx,ny); for i = 1:nx for j = 1:ny r = sqrt((x(i)-x0)^2+(y(j)-y0)^2); Ez_analytical(i,j) = J0/(2*pi*3e8*sigma^2)*r*exp(-(r^2)/(2*sigma^2))*sin(omega*dt*(0:nt-1)); end end % 进行CNDG-FDTD计算 for n = 1:nt % 更新Hx和Hy Hx(:,1:ny-1) = Hx(:,1:ny-1) - dt/(2*dy)*(Ez(:,2:ny) - Ez(:,1:ny-1)); Hy(1:nx-1,:) = Hy(1:nx-1,:) + dt/(2*dx)*(Ez(2:nx,:) - Ez(1:nx-1,:)); % 更新Dz Dz = Dz + dt*Jz; % 更新Ez Ez(2:nx-1,2:ny-1) = Ez(2:nx-1,2:ny-1) - dt/eps0*(Hy(2:nx-1,2:ny-1) - Hy(1:nx-2,2:ny-1))/dx + dt/eps0*(Hx(2:nx-1,2:ny-1) - Hx(2:nx-1,1:ny-2))/dy - dt*Dz(2:nx-1,2:ny-1)./eps0; % 引入边界条件 Ez(1,:) = 0; Ez(end,:) = 0; Ez(:,1) = 0; Ez(:,end) = 0; end % 绘制解析数值的Ez分布 figure; subplot(2,1,1); imagesc(x,y,Ez_analytical'); axis equal; colorbar; title('Analytical Solution of Ez'); subplot(2,1,2); imagesc(x,y,Ez'); axis equal; colorbar; title('Numerical Solution of Ez'); % 计算解析数值的误差 error = abs(Ez - Ez_analytical)./abs(Ez_analytical); max_error = max(max(error)); fprintf('Max Error: %.4f\n', max_error); ``` 在上面的代码中,我们首先定义了模拟参数,包括网格数、网格间距、时间步长等。然后我们初始化电场、磁场、电流密度和电通量密度,并引入高斯源。接下来,我们计算高斯源的解析,并使用CNDG-FDTD方法进行计算得到数值。最后,我们绘制解析数值的Ez分布,并计算它们之间的误差。 运行上面的代码,我们可以得到以下结果: ``` Max Error: 0.0166 ``` 可以看到,解析数值的Ez分布非常相似,它们之间的最大误差仅为1.66%。这证明了CNDG-FDTD方法的有效性,并且我们成功地引入了高斯源。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值