这个例子展示了如何解决一个简单的散射问题,在这个问题中,你可以计算被来自左边的入射波照亮的方形物体反射的波。gydF4y2Ba
对于这个问题,假设一个无限水平膜受到小的垂直位移gydF4y2BaUgydF4y2Ba.膜固定在物体的边界上。介质是均匀的,波的相速度(传播速度),gydF4y2Baα,gydF4y2Ba是恒定的。波动方程是gydF4y2Ba
解决方案gydF4y2BaUgydF4y2Ba是入射波的总和吗gydF4y2BaVgydF4y2Ba反射波gydF4y2BaRgydF4y2Ba:gydF4y2Ba
当光照在时间上是谐波的时候,你可以通过解决一个稳定的问题来计算场。假设入射波是在gydF4y2Ba- xgydF4y2Ba方向:gydF4y2Ba
反射波可以分解为空间和时间分量:gydF4y2Ba
现在你可以把波动方程写成亥姆霍兹方程用波数表示反射波的空间分量gydF4y2Ba :gydF4y2Ba
物体边界的狄利克雷边界条件是gydF4y2BaUgydF4y2Ba= 0,或根据入射波和反射波,gydF4y2BaRgydF4y2Ba= -gydF4y2BaVgydF4y2Ba.求时谐解和入射波在gydF4y2Ba- xgydF4y2Ba方向,可以将此边界条件写为:gydF4y2Ba
的反射波gydF4y2BaRgydF4y2Ba从物体向外传播。计算外边界的条件必须允许波不反射地通过。这种情况通常称为无反射。作为gydF4y2Ba 趋于无穷时,gydF4y2BaRgydF4y2Ba近似满足单向波动方程gydF4y2Ba
这个方程只考虑正向运动的波gydF4y2BaξgydF4y2Ba方向。在这里,gydF4y2BaξgydF4y2Ba为到物体的径向距离。利用时谐解,将该方程转化为广义诺伊曼边界条件gydF4y2Ba
为了使用编程工作流解决散射问题,首先创建一个单因变量的PDE模型。gydF4y2Ba
numberOfPDE = 1;模型= createpde (numberOfPDE);gydF4y2Ba
指定定义问题的变量:gydF4y2Ba
ggydF4y2Ba
:一个几何说明函数。有关更多信息,请参阅文档部分gydF4y2Ba2-D几何创建的参数化函数gydF4y2Ba代码是gydF4y2Bascatterg.mgydF4y2Ba
.gydF4y2Ba
kgydF4y2Ba
,gydF4y2BacgydF4y2Ba
,gydF4y2Ba一个gydF4y2Ba
,gydF4y2BafgydF4y2Ba
:系数和非齐次项。gydF4y2Ba
g = @scatterg;k = 60;c = 1;= - k ^ 2;f = 0;gydF4y2Ba
转换几何图形并将其附加到模型中。gydF4y2Ba
geometryFromEdges(模型中,g);gydF4y2Ba
绘制几何图形并显示边界条件定义中使用的边缘标签。gydF4y2Ba
图;pdegplot(模型,gydF4y2Ba“EdgeLabels”gydF4y2Ba,gydF4y2Ba“上”gydF4y2Ba);轴gydF4y2Ba平等的gydF4y2Ba标题gydF4y2Ba“显示边缘标签的几何图形”gydF4y2Ba;ylim ([0, 1])gydF4y2Ba
应用边界条件。gydF4y2Ba
布特= applyBoundaryCondition(模型,gydF4y2Ba“纽曼”gydF4y2Ba,gydF4y2Ba“边缘”gydF4y2Ba(8)gydF4y2Ba...gydF4y2Ba‘g’gydF4y2Ba0,gydF4y2Ba“问”gydF4y2Ba-60我);州innerBCFunc = @ (loc) exp (1 * k * loc.x);克里丝= applyBoundaryCondition(模型,gydF4y2Ba“边界条件”gydF4y2Ba,gydF4y2Ba“边缘”gydF4y2Ba(1:4),gydF4y2Ba...gydF4y2Ba“u”gydF4y2Ba, innerBCFunc);gydF4y2Ba
指定系数。gydF4y2Ba
specifyCoefficients(模型,gydF4y2Ba“米”gydF4y2Ba0,gydF4y2Ba' d 'gydF4y2Ba0,gydF4y2Ba“c”gydF4y2BacgydF4y2Ba“一个”gydF4y2Ba一个,gydF4y2Ba“f”gydF4y2Baf);gydF4y2Ba
生成一个网格。gydF4y2Ba
generateMesh(模型,gydF4y2Ba“Hmax”gydF4y2Ba, 0.02);图pdemesh(模型);轴gydF4y2Ba平等的gydF4y2Ba
求复振幅。向量的实部gydF4y2BaugydF4y2Ba
存储亥姆霍兹方程实值解的近似值。gydF4y2Ba
结果= solvepde(模型);u = result.NodalSolution;gydF4y2Ba
策划解决方案。gydF4y2Ba
图pdeplot(模型,gydF4y2Ba“XYData”gydF4y2Ba真正的(u),gydF4y2Ba“网”gydF4y2Ba,gydF4y2Ba“关闭”gydF4y2Ba);colormap(喷气)包含gydF4y2Ba“x”gydF4y2BaylabelgydF4y2Ba“y”gydF4y2Ba标题(gydF4y2Ba亥姆霍兹方程的实值解gydF4y2Ba)gydF4y2Ba
使用亥姆霍兹方程的解,创建一个动画显示相应的随时间变化的波动方程的解。gydF4y2Ba
图m = 10;maxu = max (abs (u));gydF4y2Ba为gydF4y2BaJ = 1:m uu =实数(exp(-j*2*pi/m*根号(-1))*u);pdeplot(模型,gydF4y2Ba“XYData”gydF4y2Bauu,gydF4y2Ba“ColorBar”gydF4y2Ba,gydF4y2Ba“关闭”gydF4y2Ba,gydF4y2Ba“网”gydF4y2Ba,gydF4y2Ba“关闭”gydF4y2Ba);colormap(喷气)caxis ([-maxu maxu]);轴gydF4y2Ba紧gydF4y2Ba甘氨胆酸ax =;斧子。dataspectratio = [1 1 1];轴gydF4y2Ba从gydF4y2Ba米(j) = getframe;gydF4y2Ba结束gydF4y2Ba
要播放电影,请使用gydF4y2Ba电影(M)gydF4y2Ba
命令。gydF4y2Ba