三维解和梯度图用MATLAB函数
可用的三维解决方案图的类型MATLAB
除了PDE绘图函数提供的曲面和梯度绘图外,您还可以使用MATLAB®图形功能,为您的3d模型创建更多类型的情节。
在二维切片上绘图——要检查几何图形内部的解,定义一个与几何图形相交的二维网格,并将解插入到网格中。有关示例,请参见通过三维几何的二维切片而且三维解轮廓切片.虽然这两个示例显示了平面网格切片,但您也可以在曲面网格上进行切片。
流线或颤动图-将溶液的梯度绘制成流线或颤动图。看到梯度和流线图.
您可以使用任何MATLAB绘图命令来创建3-D绘图。看到标量体积数据可视化技术而且可视化矢量体积数据.
通过三维几何的二维切片
这个例子展示了如何通过3d几何图形从2-D切片中获取图形。
现在的问题是
在一个尺寸为10乘10乘1的三维平板上
在时间t = 0
,边界条件为Dirichlet,和
建立并解决PDE
定义一个非线性函数f
的系数f为具体系数.
函数bcMatrix = myfffun(区域,状态)
bcMatrix = 1 + 10 * region.z。^ 2 + region.y;
导入几何图形并检查面标签。
模型= createpde;g = importGeometry(模型,“Plate10x10x1.stl”);pdegplot (g,“FaceLabels”,“上”,“FaceAlpha”, 0.5)
脸的编号从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 = 5
,y
取值范围为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
通过插值得到的解XX
,YY
,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])
三维解轮廓切片
这个例子展示了如何通过三维几何中的一个解决方案在各个方向上创建轮廓切片。
建立并解决PDE
问题是求解一个复杂几何的泊松方程,其狄利克雷边界条件为零。泊松方程
偏微分方程工具箱™解决方程的形式
你可以用设置来表示这个问题 而且 .任意设置 .
c = 1;= 0;f = 10;
解决任何三维PDE问题的第一步是创建一个PDE模型。这是一个容器,用于保存PDE的方程式、几何图形、网格和边界条件的数量。创建模型,然后导入ForearmLink.stl”
存档并查看几何图形。
N = 1;模型= createpde (N);importGeometry(模型,“ForearmLink.stl”);pdegplot(模型,“FaceAlpha”, 0.5)视图(-42,24)
指定PDE系数
包括PDE系数模型
.
specifyCoefficients(模型,“m”0,“d”0,“c”c“一个”一个,“f”f);
在所有面上创建零狄利克雷边界条件。
applyBoundaryCondition(模型,“边界条件”,...“面子”1: model.Geometry.NumFaces,...“u”, 0);
创建一个网格并求解PDE。
generateMesh(模型);结果= solvepde(模型);
将解绘制为等高线切片
因为边界条件是 从各个方面来看,都是解决方案 只有在内部是非零的。为了检查内部,取一个矩形网格,该网格覆盖几何图形,每个坐标方向的间距为一个单位。
[X, Y, Z] = meshgrid (0:135, 0:35 0:61);
为了绘图和分析,创建一个PDEResults
对象。在每个网格点插值结果。
V = interpolateSolution(因此,X, Y, Z);V =重塑(V,大小(X));
的不同值绘制等高线切片 .
图colormap飞机contourslice (X, Y, Z, V,[],[], 0:5:60)包含(“x”) ylabel (“y”) zlabel (“z”)彩色条视图(-11,14)轴平等的
的不同值绘制等高线切片 .
图colormap飞机contourslice (X, Y, Z, V,[], 1:6:31,[])包含(“x”) ylabel (“y”) zlabel (“z”)彩色条视图(-62,34)轴平等的
根据需要计算以节省内存
对于较大的问题,在创建精细的3d网格时可能会耗尽内存。此外,在一个完整的网格上评估解决方案可能很耗时。为了节省内存和时间,只在您绘制的点上求值。您还可以使用这种技术来插值倾斜的网格或其他表面。
例如,将解插值到倾斜平面上的网格上 , , .绘制等高线和彩色表面数据。使用细网格,间距为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
梯度和流线图
这个例子展示了如何计算解的近似梯度,以及如何在抖动图或流线图中使用这些梯度。
问题是计算一个布朗粒子从包含吸收(逃逸)边界和反射边界的区域的平均退出时间。有关更多信息,请参见九死一生的问题.偏微分方程是常系数泊松方程。几何形状是一个简单的矩形实体。解决方案 表示粒子从该位置开始所需的平均时间 退出该区域。
导入并查看几何图形
模型= createpde;importGeometry(模型,“Block.stl”);pdegplot(模型,“FaceLabels”,“上”,“FaceAlpha”, 0.5)视图(-42,24)
设置边界条件
将面1、2和5设置为粒子可以逃逸的地方。在这些面上,是解决方案 .在面3、面4和面6上保持默认反射边界条件。
applyBoundaryCondition(模型,“边界条件”,“面子”(1、2、5),“u”, 0);
创建PDE系数
PDE是
在偏微分方程工具箱™语法中,
这个方程可以转化为系数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视图
粒子在该点附近的平均出口时间最大 .
使用梯度箭袋和流线图
通过评估溶液的梯度更详细地检查溶液。使用比较粗的网格,这样你就可以看到箭筒和流线图上的细节。
[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”)标题(“溶液估计梯度的颤振图”)
画出近似梯度的流线。从较稀疏的初始点集合开始流线。
持有在[sx, sy, sz) = meshgrid ([1, 46], 1:6:20 1:12:50);简化(X, Y, Z, gradx grady, gradz, sx, sy, sz)标题(“带流线的箭袋图”)举行从
的流线显示y
而且z
给出更大的平均退出时间。他们还表明x
-coordinate对u
当x
很小,但什么时候呢x
是不是大于40,数值越大影响就小u
.同样的,当z
是小于20,它的值有什么影响吗u
.