将 pde 解决方案导出到非均匀​​网格

计算科学 pde matlab
2021-12-01 01:18:51

将解 (u) 和网格 (p, e, t) 从 pdetool 导出到工作区后,我需要在一组预定义点处计算解。这些寻求解决方案的预定义点不是均匀分布的,而是分散在 xy 空间中。我知道,如果有来自 pde 工具箱的解决方案 (u),则可以使用以下任一 griddata将其导出到统一网格:

[u1,x1,y1] = gridfit(x,y,u,xnodes,ynodes)

或函数tri2grid我相信 gridfit 和 tri2grid 都需要输出采样点单调增加,不幸的是这不是我的情况。如何将解决方案导出/内插到非均匀/分散网格?

1个回答

要将均匀网格上的解插值/外推到非均匀网格,反之亦然,使用是要走的路。TriScatteredInterp

假设您u与节点相关联:p数组大小最初是定义解决方案的位置,因此. 以下命令让您创建一个插值类(抽象地):( # of nodes)×(Dimension)usize(u,1) = size(p,1)

uI = triScatteredInterp(p(:,1),p(:,2),u,'natural'); 

对于二维数据,或

uI = triScatteredInterp(p(:,1),p(:,2),p(:,3),u,'natural'); 

用于 3D 数据。我个人更喜欢'natural'这里的方法,'nearest'对于 PDE 解决方案不是很好,并且'linear'会导致需要两侧数据的边界附近的插值丢失。

现在要获取非均匀网格上的值,triScatteredInterp类的最佳之处在于它像函数一样工作,您可以feval像函数句柄一样使用它来评估:假设您的非均匀网格点是数组q

 uInterp_at_q = uI(q(:,1),q(:,2));

二维或

 uInterp_at_q = uI(q(:,1),q(:,2),q(:,3));

在 3D 中。是与个节点uInterp_at_q(i,1)关联的插值值iq(i,:)


注意 mathworks 的文档说

TriScatteredInterp将在未来的版本中删除。改为使用scatteredInterpolant

用法几乎相同,只是scatteredInterpolant有一个额外的外推方法开关。