主要内容

三维解和梯度图用MATLAB函数

可用的三维解决方案图的类型MATLAB

除了PDE绘图函数提供的曲面和梯度绘图外,您还可以使用MATLAB®图形功能,为您的3d模型创建更多类型的情节。

通过三维几何的二维切片

这个例子展示了如何通过3d几何图形从2-D切片中获取图形。

现在的问题是

u t - Δ u f

在一个尺寸为10乘10乘1的三维平板上 u 0 在时间t = 0,边界条件为Dirichlet,和

f x y z 1 + y + 1 0 z 2

建立并解决PDE

定义一个非线性函数f的系数f为具体系数

函数bcMatrix = myfffun(区域,状态)

bcMatrix = 1 + 10 * region.z。^ 2 + region.y;

导入几何图形并检查面标签。

模型= createpde;g = importGeometry(模型,“Plate10x10x1.stl”);pdegplot (g,“FaceLabels”“上”“FaceAlpha”, 0.5)

图中包含一个axes对象。axis对象包含quiver、patch和line类型的3个对象。

脸的编号从1到6。

创建系数和边界条件。

c = 1;= 0;d = 1;f = @myfffun;specifyCoefficients(模型,“m”0,“d”d“c”c“一个”一个,“f”f);applyBoundaryCondition(模型,“边界条件”“面子”1:6,“u”, 0);

设置初始条件为零。

setInitialConditions(模型中,0);

创建一个边长不超过0.3的网格。

generateMesh(模型,“Hmax”, 0.3);

设置从0到0.2的时间并求解PDE。

tlist = 0:0.02:0.2;结果= solvepde(模型、tlist);

情节切片通过解决方案

创建一个网格(x, y, z)点,x = 5y取值范围为0 ~ 10和z取值范围为0 ~ 1。插值解到这些网格点和所有时间。

yy = 0:0.5:10;zz = 0:0.25:1;[YY, ZZ] = meshgrid (YY, ZZ);XX = 5 *的(大小(YY));uintrp = interpolateSolution(结果,XX, YY、ZZ 1:长度(tlist));

解矩阵uintrp有11列,每一列表示在tlist.取第二列的插值解,它对应于时间0.02。

usol = uintrp (:, 2);

的元素usol通过插值得到的解XXYY,ZZ矩阵,每个都是5 × 21,对应于z-by-y变量。重塑usol到同样的5 × 21尺寸,并做出溶液的曲面图。还要制作对应于时间0.06、0.10和0.20的曲面图。

figure usol =重塑(usol,size(XX));次要情节(2、2、1)冲浪(usol)标题(“t = 0.02”) zlim ([0, 1.5]) xlim ([1, 21]) ylim((1、5))usol = uintrp (:, 4);usol =重塑(usol、大小(XX));次要情节(2 2 2)冲浪(usol)标题(“t = 0.06”) zlim ([0, 1.5]) xlim ([1, 21]) ylim((1、5))usol = uintrp (:, 6);usol =重塑(usol、大小(XX));次要情节(2,2,3)冲浪(usol)标题(“t = 0.10”) zlim ([0, 1.5]) xlim ([1, 21]) ylim((1、5))usol = uintrp (:, 11);usol =重塑(usol、大小(XX));次要情节(2,2,4)冲浪(usol)标题(“t = 0.20”) zlim([0,1.5]) xlim([1,21]) ylim([1,5])

图中包含4个轴对象。标题为t = 0.02的axis对象1包含一个类型为surface的对象。标题为t = 0.06的Axes对象2包含一个类型为surface的对象。标题为t = 0.10的Axes对象3包含一个类型为surface的对象。标题为t = 0.20的Axes对象4包含一个类型为surface的对象。

三维解轮廓切片

这个例子展示了如何通过三维几何中的一个解决方案在各个方向上创建轮廓切片。

建立并解决PDE

问题是求解一个复杂几何的泊松方程,其狄利克雷边界条件为零。泊松方程

- u f

偏微分方程工具箱™解决方程的形式

- c u + 一个 u f

你可以用设置来表示这个问题 c 1 而且 一个 0 .任意设置 f 1 0

c = 1;= 0;f = 10;

解决任何三维PDE问题的第一步是创建一个PDE模型。这是一个容器,用于保存PDE的方程式、几何图形、网格和边界条件的数量。创建模型,然后导入ForearmLink.stl”存档并查看几何图形。

N = 1;模型= createpde (N);importGeometry(模型,“ForearmLink.stl”);pdegplot(模型,“FaceAlpha”, 0.5)视图(-42,24)

图中包含一个axes对象。axis对象包含quiver、patch和line类型的3个对象。

指定PDE系数

包括PDE系数模型

specifyCoefficients(模型,“m”0,“d”0,“c”c“一个”一个,“f”f);

在所有面上创建零狄利克雷边界条件。

applyBoundaryCondition(模型,“边界条件”...“面子”1: model.Geometry.NumFaces,...“u”, 0);

创建一个网格并求解PDE。

generateMesh(模型);结果= solvepde(模型);

将解绘制为等高线切片

因为边界条件是 u 0 从各个方面来看,都是解决方案 u 只有在内部是非零的。为了检查内部,取一个矩形网格,该网格覆盖几何图形,每个坐标方向的间距为一个单位。

[X, Y, Z] = meshgrid (0:135, 0:35 0:61);

为了绘图和分析,创建一个PDEResults对象。在每个网格点插值结果。

V = interpolateSolution(因此,X, Y, Z);V =重塑(V,大小(X));

的不同值绘制等高线切片 z

图colormap飞机contourslice (X, Y, Z, V,[],[], 0:5:60)包含(“x”) ylabel (“y”) zlabel (“z”)彩色条视图(-11,14)轴平等的

图中包含一个axes对象。axes对象包含335个patch类型的对象。

的不同值绘制等高线切片 y

图colormap飞机contourslice (X, Y, Z, V,[], 1:6:31,[])包含(“x”) ylabel (“y”) zlabel (“z”)彩色条视图(-62,34)轴平等的

图中包含一个axes对象。axes对象包含91个patch类型的对象。

根据需要计算以节省内存

对于较大的问题,在创建精细的3d网格时可能会耗尽内存。此外,在一个完整的网格上评估解决方案可能很耗时。为了节省内存和时间,只在您绘制的点上求值。您还可以使用这种技术来插值倾斜的网格或其他表面。

例如,将解插值到倾斜平面上的网格上 0 x 1 3. 5 0 y 3. 5 , z x / 1 0 + y / 2 .绘制等高线和彩色表面数据。使用细网格,间距为0.2。

(X, Y) = meshgrid (0:0.2:135 0:0.2:35);Z = x /10 + y /2;V = interpolateSolution(因此,X, Y, Z);V =重塑(V,大小(X));图次要情节(2,1,1)轮廓(X, Y, V);轴平等的标题(“倾斜平面等高线图”)包含(“x”) ylabel (“y”) subplot(2,1,2) surf(X,Y,V,“线型”“没有”);轴平等的视图(0 90)标题(“倾斜平面上的彩色图”)包含(“x”) ylabel (“y”) colorbar

图中包含2个轴对象。标题为“倾斜平面上的等高线图”的轴对象1包含一个等高线类型的对象。标题为“倾斜平面上的彩色图”的Axes对象2包含一个类型为surface的对象。

梯度和流线图

这个例子展示了如何计算解的近似梯度,以及如何在抖动图或流线图中使用这些梯度。

问题是计算一个布朗粒子从包含吸收(逃逸)边界和反射边界的区域的平均退出时间。有关更多信息,请参见九死一生的问题.偏微分方程是常系数泊松方程。几何形状是一个简单的矩形实体。解决方案 u x y z 表示粒子从该位置开始所需的平均时间 x y z 退出该区域。

导入并查看几何图形

模型= createpde;importGeometry(模型,“Block.stl”);pdegplot(模型,“FaceLabels”“上”“FaceAlpha”, 0.5)视图(-42,24)

图中包含一个axes对象。axis对象包含quiver、patch和line类型的3个对象。

设置边界条件

将面1、2和5设置为粒子可以逃逸的地方。在这些面上,是解决方案 u 0 .在面3、面4和面6上保持默认反射边界条件。

applyBoundaryCondition(模型,“边界条件”“面子”(1、2、5),“u”, 0);

创建PDE系数

PDE是

- Δ u - u 2

在偏微分方程工具箱™语法中,

- c u + 一个 u f

这个方程可以转化为系数c = 1一个= 0,f = 2.输入系数。

c = 1;= 0;f = 2;specifyCoefficients(模型,“m”0,“d”0,“c”c“一个”一个,“f”f);

创建网格并解决PDE

初始化网格。

generateMesh(模型);

解决PDE。

结果= solvepde(模型);

等高线切片图解的检验

创建一个网格,并将解决方案插入到网格中。

[X, Y, Z] = meshgrid (0:135, 0:35 0:61);V = interpolateSolution(结果,X, Y, Z);V =重塑(V,大小(X));

的5个固定值创建等高线切片图y协调。

图colormap飞机contourslice (X, Y, Z, V,[], 0:4:16,[])包含(“x”) ylabel (“y”) zlabel (“z”) xlim([0,100]) ylim([0,20]) zlim([0,50])轴平等的(-50年,22)colorbar视图

图中包含一个axes对象。axes对象包含67个patch类型的对象。

粒子在该点附近的平均出口时间最大 x y z 1 0 0 0 0

使用梯度箭袋和流线图

通过评估溶液的梯度更详细地检查溶液。使用比较粗的网格,这样你就可以看到箭筒和流线图上的细节。

[X, Y, Z] = meshgrid (1:9:99, 1:3:20 1:6:50);[gradx, grady, gradz] = evaluateGradient(结果,X, Y, Z);

画出梯度向量。首先重塑近似的梯度形状的网格。

gradx =重塑(gradx、大小(X));grady =重塑(grady,大小(Y));gradz =重塑(gradz、大小(Z));图quiver3 (X, Y, Z, gradx grady, gradz)轴平等的包含(“x”) ylabel (“y”) zlabel (“z”)标题(“溶液估计梯度的颤振图”

图中包含一个axes对象。标题为“解的估计梯度的抖动图”的轴对象包含抖动类型的对象。

画出近似梯度的流线。从较稀疏的初始点集合开始流线。

持有[sx, sy, sz) = meshgrid ([1, 46], 1:6:20 1:12:50);简化(X, Y, Z, gradx grady, gradz, sx, sy, sz)标题(“带流线的箭袋图”)举行

图中包含一个axes对象。标题为Quiver Plot with Streamlines的axis对象包含41个类型为Quiver、line的对象。

的流线显示y而且z给出更大的平均退出时间。他们还表明x-coordinate对ux很小,但什么时候呢x是不是大于40,数值越大影响就小u.同样的,当z是小于20,它的值有什么影响吗u

Baidu
map