要将均匀网格上的解插值/外推到非均匀网格,反之亦然,使用类是要走的路。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有一个额外的外推方法开关。