关于在以下代码中使用 assempde

Regarding use of assempde in the following code

我试图理解这段代码。所以,我把我的理解简单记录下来,如果有人能澄清我的疑惑,我将不胜感激。

[p,e,t] = initmesh('lshapeg');

这将 return 一个 'L' 形状的二维三角形网格。但是,我怎样才能改变L形的边界呢?我的意思是默认的 L 形在 x 轴和 y 轴上介于 -1 到 1 之间。另外,是否还有其他形状,例如 'lshapeg'...比如正方形?

[p,e,t] = refinemesh('lshapeg',p,e,t);

pdemesh(p,e,t)

现在在 L 形膜定义的几何结构上求解泊松方程 –Δu = 1。在 ∂Ω 上使用 Dirichlet 边界条件 u = 0,并绘制结果。

u = assempde('lshapeb',p,e,t,1,0,1);

现在我无法理解 1、0、1 的意义。我尝试更改它们并观察图形结果,但无法理解如何应用边界条件。还有,lshapeb和lshapeg有什么区别?

pdemesh(p,e,t,u)

好吧,它们只是 PDE 问题的调用,遵循实现 FEM 方法的标准步骤。从这里开始,我假设您清楚地知道 FEM 是什么以及它涉及什么。我也假设我们是二维的.....

[p,e,t] = initmesh('lshapeg');

好吧,正如您所说,这是几乎所有 FEM 程序都需要的初始三角网格。我们在数值上求解 PDE 的第一步。当然可以'squares',但让三角形暂时安静...玫瑰是红色的,紫罗兰是蓝色的...

[p,e,t] = refinemesh('lshapeg',p,e,t);

这里的初始网格是'refined'。细化是网格尝试 'adapt' 解决问题而不解决问题的预处理步骤。这一步很关键,周围有数百种可用的方法。这里的函数,只是考虑到了几何形状,只是 'smooths' 了一点三角形。另外,没有考虑对称性,所以不要指望这里有金牌...

pdemesh(p,e,t)

这一步,只绘制网格,供您查看和粘贴。

u = assempde('lshapeb',p,e,t,1,0,1);

正如你所说,这里你建立了等式。勾选doc assempde,你会清楚地看到u = assempde(b,p,e,t,c,a,f)的意思:

−∇⋅(c∇u)+au=f,

你会检查泊松方程是:

  • c=1,这可能是material的介电常数,或热扩散,或机械运动粘度等...
  • a=0,一个线性项,在电气或热或流体情况 (XD) 上没有直接意义,...
  • f=1,单位电荷,或热源,或机械力或压力,...

请注意,lshapeg 只是 Matlab 徽标形状,所以如果您有自己的问题,请检查 decsg | pdegeom 函数,并在那里设置你自己的几何体!!....

我想,这回答了大部分问题.....

编辑:

检查 here 以获得更好的示例。

对于 Dirichlet 边界条件 - 即 u(x) = u0 on ∂Ω:

applyBoundaryCondition(model,'Face',1:4,'u',0);

并且对于 Neumann 边界条件 - 即 du/dx = u0' on ∂Ω:

applyBoundaryCondition(model,'Face',6,'g',-1);