主要内容

单位圆盘上的泊松方程

此示例演示如何数值求解泊松方程,将数值解与精确解进行比较,并细化网格,直到解接近。金宝搏官方网站

具有零Dirichlet边界条件的单位圆盘上的泊松方程可以写成 - Δ U = 1. 在里面 Ω , U = 0 δ Ω 哪里 Ω 是单位磁盘。精确解为

U ( x , Y ) = 1. - x 2. - Y 2. 4. .

对于大多数偏微分方程,精确解是未知的。但是,单位圆盘上的泊松方程有一个已知的精确解,您可以使用它来查看在细化网格时误差是如何减小的。

问题定义

创建PDE模型并包含几何图形。

model=createpde();geometryFromEdges(model,@circleg);

打印几何图形并显示边界条件定义中使用的边标签。

图pdegplot(模型,“EdgeLabels”,“开”);轴线相同的

图形包含一个轴。轴包含5个类型为line、text的对象。

在所有边上指定零Dirichlet边界条件。

applyBoundaryCondition(模型,“迪里克莱”,“边缘”1: model.Geometry.NumEdges,“你”, 0);

指定系数。

特定系数(型号,“米”,0,“d”,0,“c”1.“a”,0,“f”,1);

粗网格的求解及误差分析

创建一个最大元素尺寸为0.1的网格。

hmax=0.1;生成网格(模型,“Hmax”,hmax);图pdemesh(模型);轴相同的

图中包含一个轴。该轴包含两个类型为line的对象。

解偏微分方程并画出解。

结果=解算PDE(模型);u=结果。节点解算;pdeplot(模型,“XYData”(u)标题(“数值解”);xlabel(“x”) ylabel (“是的”)

图中包含一个轴。标题为“数值解”的轴包含一个patch类型的对象。

将该结果与精确的解析解进行比较,并绘制误差图。

p=model.Mesh.Nodes;精确=(1-p(1,:).^2-p(2,:).^2)/4;pdeplot(model,“XYData”,u-确切名称(“错误”);xlabel(“x”) ylabel (“是的”)

图中包含一个坐标轴。标题为Error的轴包含patch类型的对象。

金宝搏官方网站精细网格的解与误差

求解方程,同时在每次迭代中细化网格,并将结果与精确解进行比较。每次细化将最大波高优化网格,直到误差向量的无穷范数小于 5. 10 - 7. .

hmax=0.1;error=[];err=1;虽然误差>5e-7%运行直到错误<=5e-7generateMesh(模型,“Hmax”,hmax);%细化网格结果=解算PDE(模型);u=结果.NodalSolution;p=模型.Mesh.Nodes;精确=(1-p(1,:).^2-p(2,:).^2)/4;错误=范数(u-精确');%与精确解比较错误=[error err];%记录错误的历史hmax=hmax/2;终止

绘制每次迭代的误差向量的无穷范数。误差值在每次迭代中减小。

绘图(错误,“rx”,“MarkerSize”12);甘氨胆酸ax =;斧子。XTick = 1:元素个数(错误);标题(“错误历史记录”);xlabel(“迭代”);伊莱贝尔(“错误标准”);

图中包含一个轴。具有标题错误历史记录的轴包含一个line类型的对象。

绘制最终网格及其相应的解决方案。

图pdemesh(型号);轴相同的

图中包含一个轴。该轴包含两个类型为line的对象。

图pdeplot(型号,“XYData”(u)标题(“数值解”);xlabel(“x”) ylabel (“是的”)

图中包含一个轴。标题为“数值解”的轴包含一个patch类型的对象。

将结果与精确的解析解进行比较,并绘制误差图。

p=model.Mesh.Nodes;精确=(1-p(1,:).^2-p(2,:).^2)/4;pdeplot(model,“XYData”,u-确切名称(“错误”);xlabel(“x”) ylabel (“是的”)

图中包含一个坐标轴。标题为Error的轴包含patch类型的对象。