3-D溶液和具有MATLAB函数的梯度图
3-D解决方案图的类型可用MATLAB
除了PDE绘图功能可提供的表面和梯度图外,您还可以使用MATLAB®图形功能可为3D模型创建更多类型的图。
在2-D切片上绘制 - 检查几何内部的溶液,定义与几何形状相交的二维网格,然后将溶液插入网格上。有关示例,请参见2D切片通过3D几何形状和通过3-D解决方案进行轮廓切片。尽管这两个示例显示了平面网格切片,但您也可以将其切成弯曲的网格。
流线或箭袋图 - 将解决方案的梯度绘制为流线或箭袋。看梯度和流线的图。
您可以使用任何MATLAB绘图命令来创建3D图。看可视化标量卷数据的技术和可视化向量量数据。
2D切片通过3D几何形状
此示例显示了如何通过3D几何形状从2D切片中获取图。
问题是
在尺寸为10 x 10 by-1的3D平板上,其中
时间t = 0
,边界条件是Dirichlet,并且
设置并解决PDE
定义非线性功能F
语法系数指定系数的F系数。
函数bcmatrix = myfffun(区域,状态)
bcmatrix = 1+10*region.z。^2+region.y;
导入几何并检查面部标签。
model = createpde;g = importgeemetry(模型,'板10x10x1.stl');pdegplot(g,'facelabels',,,,'上',,,,'facealpha',0.5)
面孔编号为1到6。
创建系数和边界条件。
C = 1;a = 0;d = 1;f = @myfffun;指定系数(模型,'M',0,'D',D,'C',C,'一个',一个,'F',F);应用程序条件(模型,'dirichlet',,,,'脸',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*一个(size(yy));uintrp = InterPolateLoute(结果,xx,yy,zz,1:长度(tlist));
溶液矩阵uintrp
有11列,每次tlist
。以第二列的插值解决方案,对应于时间0.02。
usol = uintrp(:,2);
元素USOL
来自将解决方案插入到xx
,,,,是的
, 和Z Z
矩阵,每个矩阵5 x-21,对应于z-by-y
变量。重塑USOL
达到相同的5 x-21尺寸,并制作溶液的表面图。还使表面图对应于时间0.06、0.10和0.20。
图usol = reshape(usol,size(xx));子图(2,2,1)冲浪(USOL)标题('t = 0.02')zlim([0,1.5])xlim([1,21])ylim([1,5])usol = uintrp(:,4);usol = reshape(usol,size(xx));子图(2,2,2)冲浪(USOL)标题('t = 0.06')zlim([0,1.5])xlim([1,21])ylim([1,5])usol = uintrp(:,6);usol = reshape(usol,size(xx));子图(2,2,3)冲浪(USOL)标题('t = 0.10')zlim([0,1.5])xlim([1,21])ylim([1,5])usol = uintrp(:,11);usol = reshape(usol,size(xx));子图(2,2,4)冲浪(USOL)标题('t = 0.20')Zlim([0,1.5])Xlim([1,21])Ylim([1,5])
通过3-D解决方案进行轮廓切片
此示例显示了如何通过3D几何形状中的解决方案在各个方向上创建轮廓切片。
设置并解决PDE
问题是要为复杂的几何形状求解用零dirichlet边界条件的泊松方程。泊松方程是
部分微分方程Toolbox™以表单求解方程
因此,您可以通过设置来表示问题 和 。任意设置 。
C = 1;a = 0;F = 10;
解决任何3-D PDE问题的第一步是创建PDE模型。这是一个容纳PDE的方程,几何,网格和边界条件的容器。创建模型,然后导入'前臂链接'
文件并查看几何形状。
n = 1;model = createpde(n);导入测定法(模型,'前臂链接');PDEGPLOT(模型,'facealpha',0.5)视图(-42,24)
指定PDE系数
将PDE系数包括在模型
。
指定系数(模型,'M',0,'D',0,'C',C,'一个',一个,'F',F);
在所有面上创建零dirichlet边界条件。
应用程序条件(模型,'dirichlet',,,,...'脸',1:model.deometry.numfaces,...'U',0);
创建网格并解决PDE。
generatemesh(型号);结果= solvepde(model);
将解决方案绘制为轮廓切片
因为边界条件是 在所有面孔上,解决方案 仅在内部中为非零。要检查内部,请取一个矩形网格,该网格在每个坐标方向上覆盖一个单元的几何形状。
[x,y,z] = meshgrid(0:135,0:35,0:61);
用于绘图和分析,创建一个PDERESULTS
解决方案的对象。在每个网格点插值结果。
v = interpolateLoute(结果,x,y,z);v = reshape(v,size(x));
绘图轮廓切片的各种值 。
图colormap喷射contourslice(x,y,z,v,[],[],0:5:60)xlabel('X')ylabel('y')Zlabel('Z')配色栏视图(-11,14)轴平等的
绘图轮廓切片的各种值 。
图colormap喷射contourslice(x,y,z,v,[],1:6:31,[])xlabel('X')ylabel('y')Zlabel('Z')配色栏视图(-62,34)轴平等的
通过需要评估来节省内存
对于大型问题,创建精细的3-D网格时,您可能会用尽内存。此外,在完整网格上评估解决方案可能很耗时。为了节省内存和时间,请仅在您绘制的点上进行评估。您也可以使用此技术将插值插入倾斜的网格或其他表面。
例如,将溶液插入倾斜平面上的网格 ,,,, , 和 。绘制轮廓和彩色表面数据。使用细网格,间距为0.2。
[x,y] = meshgrid(0:0.2:135,0:0.2:35);z = x/10 + y/2;v = interpolateLoute(结果,x,y,z);v = reshape(v,size(x));图子图(2,1,1)轮廓(x,y,v);轴平等的标题(“倾斜飞机上的轮廓图”)xlabel('X')ylabel('y')配色栏子图(2,1,2)冲浪(x,y,v,'linestyle',,,,'没有任何');轴平等的查看(0,90)标题(“倾斜平面上的彩色情节”)xlabel('X')ylabel('y')配色栏
梯度和流线的图
此示例显示了如何计算解决方案的近似梯度,以及如何在箭袋图或精简图中使用这些梯度。
问题是计算来自包含吸收(逃生)边界和反映边界的区域的布朗粒子的平均退出时间。有关更多信息,请参阅狭窄的逃生问题。PDE是具有恒定系数的泊松方程。几何形状是简单的矩形固体。解决方案 代表平均粒子从位置开始的平均时间 退出该地区。
导入并查看几何形状
model = createpde;导入测定法(模型,'block.stl');PDEGPLOT(模型,'facelabels',,,,'上',,,,'facealpha',0.5)视图(-42,24)
设定边界条件
固定面1、2和5是粒子可以逃脱的地方。在这些面孔上,解决方案 。保持默认反映面部3、4和6的边界条件。
应用程序条件(模型,'dirichlet',,,,'脸',[1,2,5],'U',0);
创建PDE系数
PDE是
在部分微分方程工具箱™语法中,
该方程转换为系数C = 1
,,,,a = 0
, 和F = 2
。输入系数。
C = 1;a = 0;F = 2;指定系数(模型,'M',0,'D',0,'C',C','一个',一个,'F',F);
创建网格并解决PDE
初始化网格。
generatemesh(型号);
解决PDE。
结果= solvepde(模型);
在轮廓切片图中检查解决方案
创建一个网格并插入溶液到网格。
[x,y,z] = meshgrid(0:135,0:35,0:61);v = interpolateLoute(结果,x,y,z);v = reshape(v,size(x));
为五个固定值创建一个轮廓切片图y
-协调。
图colormap喷射contourslice(x,y,z,v,[],0:4:16,[])xlabel('X')ylabel('y')Zlabel('Z')xlim([0,100])Ylim([0,20])Zlim([0,50])轴平等的查看(-50,22)配色栏
粒子的平均出口时间最大 。
将梯度用于箭袋和简化图
通过评估溶液的梯度,更详细地检查解决方案。使用一个相当粗的网格,以便您可以在箭袋和流线图上查看详细信息。
[x,y,z] = meshgrid(1:9:9:99,1:3:20,1:6:50);[Gradx,Grady,Gradz] =评估Gradient(结果,X,Y,Z);
绘制梯度向量。首先将近似梯度重塑为网格的形状。
gragx = reshape(gradx,size(x));grady = reshape(grady,size(y));gradz = reshape(gradz,size(z));图Quiver3(X,Y,Z,Gradx,Grady,Gradz)轴平等的XLABEL'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
- 坐标对你
什么时候X
很小,但是X
大于40,较大的值对你
。同样,什么时候z
小于20,其价值对你
。