在 MATLAB 中积分有限元计算的结果

计算科学 有限元 matlab 插值 一体化
2021-12-29 11:59:12

我有一个 PDE,我MATLAB使用“推荐的工作流程”(即函数等)在 2D 域中descg求解createpde求解器 ( solvepde) 工作并返回一个看起来合理的解决方案。到目前为止,一切都很好。

现在我想获取结果并计算整个域上的各种积分。主要是我想计算

Ω|u|2d2x
在哪里Ω是二维 PDE 域和u是 PDE 的解。

实现这一目标的最佳方法是什么?

----更多详情----

如果它有任何区别,等式是

2uau=0
与 Neumann 边界条件。a是我输入的一些小数字,只是为了使解决方案独一无二(因为我所有的边界条件都是 Neumann,所以解决方案只定义为一个附加常数。如果你有更好的方法来解决非唯一性,那么我会也很高兴听到这个消息)。域是一个带有两个圆孔的圆。这是生成几何图形和解决方案的代码:

gd=[1 0 0 1; 1 .8 0 .1; 1 -.4 0 .1]';
ns=char('bound','p1','p2')';
sf='(bound-p1)-p2';
[dl, bt]=decsg(gd,sf,ns);
model=createpde();
geometryFromEdges(model,dl);
applyBoundaryCondition(model,'neumann','Edge',1:12,'q',0,'g',1);
specifyCoefficients(model,'m',0,'d',0,'a',1e-6,'f',0,'c',1);
generateMesh(model,'Hmax',.06);
u=model.solvepde;
2个回答

如果域Ω很好,纯诺伊曼问题的解决方案被定义为一个加法常数。以及任何用于求解的共轭梯度法Ax=b如果您使右侧与作为常数向量的内核正交(即,从 b 中减去其元素的平均值),那么具有这种奇异 A 将收敛。

所以唯一要做的就是使从线性求解器获得的解也与常数向量正交。对我来说,这种方式似乎比通过给问题添加小扰动更简单一些au.

我确信matlab在这个工具箱中有一个函数来计算这个术语(它是H1norm)或一个函数,它将为您提供 FEM 离散化的刚度矩阵 A然后你计算这个积分为u'*A*u