此示例显示了如何在数字上解决泊松方程式,将数值解决方案与精确的解决方案进行比较,并在解决方案关闭之前优化网格。金宝搏官方网站
单位磁盘上的泊松方程可以写入零的单位边界条件 在 那 在 , 在哪里 是单位磁盘。确切的解决方案是
对于大多数PDE,确切的解决方案是未知的。但是,单位盘上的泊松等式有一个已知的,精确的解决方案,您可以用来了解错误如何降低,因为您将网格缩短。
创建PDE模型并包括几何图形。
model = createpde();几何Fremedges(模型,@ CircleG);
绘制几何形状并显示边缘标签以用于边界条件定义。
图pdegplot(模型,“EdgeLabels”那'在');轴平等的
在所有边缘上指定零Dirichlet边界条件。
ApplyBoundaryCondition(模型,'dirichlet'那'边缘'1: model.Geometry.NumEdges,'U', 0);
指定系数。
指定COFEFICERS(模型,“米”,0,'D',0,'C',1,'一种',0,'F',1);
创建一个最大元素尺寸为0.1的网格。
hmax = 0.1;generatemesh(型号,'hmax',hmax);图pdemesh(型号);轴平等的
解偏微分方程并画出解。
结果= Solvepde(型号);u =结果。不管地区;pdeplot(模型,'xydata',U)标题('数字解决方案');Xlabel('X') ylabel ('是')
将此结果与精确的分析解决方案进行比较并绘制错误。
p = model.mesh.nodes;精确=(1 - p(1,:)。^ 2 - p(2,:)。^ 2)/ 4;pdeplot(模型,'xydata',U - 确切的')标题('错误');Xlabel('X') ylabel ('是')
在每次迭代中精炼网格并将结果与精确解决方案进行比较时,解决方程。每次细化都会减半Hmax.
价值。在误差矢量的无限常态下方精确到网状物
。
hmax = 0.1;error = [];err = 1;尽管err> 5e-7%运行直到错误<= 5e-7generatemesh(型号,'hmax',hmax);%细化网格结果= Solvepde(型号);u =结果。不管地区;p = model.mesh.nodes;精确=(1 - p(1,:)。^ 2 - p(2,:)。^ 2)/ 4;err = norm(U - 精确',INF);%与精确的解决方案相比错误= [错误错误];%保持错误的历史hmax = hmax / 2;结尾
绘制每个迭代的错误矢量的无限常态。误差的值在每次迭代中减少。
绘图(错误,'rx'那“MarkerSize”12);甘氨胆酸ax =;斧子。XTick = 1:元素个数(错误);标题('错误历史');Xlabel('迭代');ylabel('错误的规范');
绘制最终网格及其相应的解决方案。
图pdemesh(型号);轴平等的
图pdeplot(模型,'xydata',U)标题('数字解决方案');Xlabel('X') ylabel ('是')
将结果与精确的分析解决方案进行比较并绘制错误。
p = model.mesh.nodes;精确=(1 - p(1,:)。^ 2 - p(2,:)。^ 2)/ 4;pdeplot(模型,'xydata',U - 确切的')标题('错误');Xlabel('X') ylabel ('是')