三维求解和梯度图的MATLAB函数
中可用的三维解图类型MATLAB
除了曲面和梯度图可用PDE绘图函数外,还可以使用MATLAB®图形功能,为您的3d模型创建更多类型的图。
在2-D切片上绘图——要检查几何图形内部的解,定义与几何图形相交的2-D网格,并在网格上插入解。有关示例,请参见通过三维几何的二维切片而且三维求解等高线切片.虽然这两个示例显示的是平面网格切片,但您也可以在曲面网格上进行切片。
流线或箭袋图——将溶液的梯度画成流线或箭袋图。看到梯度和流线图.
您可以使用任何MATLAB绘图命令来创建3-D绘图。看到可视化标量体积数据的技术而且可视化矢量体积数据.
通过三维几何的二维切片
这个例子展示了如何从2-D切片通过3-D几何图形获取图。
问题是
在一个尺寸为10乘10乘1的三维平板上,其中
在时间T = 0
,边界条件为Dirichlet,和
建立并求解偏微分方程
定义一个非线性函数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;A = 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的时间并求解偏微分方程。
Tlist = 0:0.02:0.2;Results = solvepde(model,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*ones(size(YY));uintrp = interpolatresolution (results,XX,YY,ZZ,1:length(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));Subplot (2,2,1) surf(usol) title("t = 0.02") zlim ([0, 1.5]) xlim ([1, 21]) ylim((1、5))usol = uintrp (:, 4);usol =重塑(usol,大小(XX));Subplot (2,2,2) surf(usol) title("t = 0.06") zlim ([0, 1.5]) xlim ([1, 21]) ylim((1、5))usol = uintrp (:, 6);usol =重塑(usol,大小(XX));Subplot (2,2,3) surf(usol) title("t = 0.10") zlim ([0, 1.5]) xlim ([1, 21]) ylim((1、5))usol = uintrp (:, 11);usol =重塑(usol,大小(XX));Subplot (2,2,4) surf(usol) title("t = 0.20") xlim([1,21]) ylim([1,5])
三维求解等高线切片
这个例子展示了如何通过三维几何中的解决方案在各个方向上创建轮廓切片。
建立并求解偏微分方程
问题是求解复杂几何的零狄利克雷边界条件泊松方程。泊松方程是
偏微分方程工具箱™解决方程的形式
你可以通过设置来表示这个问题 而且 .任意设置 .
C = 1;A = 0;F = 10;
解决任何三维PDE问题的第一步是创建一个PDE模型。这是一个容器,用于保存PDE的方程式、几何图形、网格和边界条件的数量。创建模型,然后导入ForearmLink.stl”
文件和查看几何图形。
N = 1;model = createpde(N);importGeometry(模型,“ForearmLink.stl”);pdegplot(模型,“FaceAlpha”, 0.5)视图(-42,24)
指定PDE系数
包括偏微分方程系数模型
.
specifyCoefficients(模型,“m”0,“d”0,“c”c“一个”一个,“f”f);
在所有面上创建零狄利克雷边界条件。
applyBoundaryCondition(模型,“边界条件”,...“面子”1: model.Geometry.NumFaces,...“u”, 0);
创建一个网格并求解PDE。
generateMesh(模型);Result = solvepde(模型);
将解绘制为等高线切片
因为边界条件是 从各个方面来看,解决方案 只在内部是非零的。为了检查内部,取一个矩形网格,该网格覆盖几何图形,每个坐标方向上间隔一个单元。
[X,Y,Z] = meshgrid(0:135,0:35,0:61);
为了绘图和分析,创建一个PDEResults
对象。在每个网格点插值结果。
V = interpolatresolve(结果,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)轴平等的
通过根据需要评估来节省内存
对于较大的问题,在创建精细的3-D网格时可能会耗尽内存。此外,在一个完整的网格上评估解决方案可能很耗时。为了节省内存和时间,请仅在所绘制的点上进行计算。您还可以使用此技术插值到倾斜网格或其他表面。
例如,将解插值到倾斜平面上的网格 , , .绘制等高线和彩色表面数据。使用细网格,间距为0.2。
[X,Y] = meshgrid(0:0.2:135,0:0.2:35);Z = x /10 + y /2;V = interpolatresolve(结果,X,Y,Z);V =重塑(V,大小(X));图子图(2,1,1)等高线(X,Y,V);轴平等的标题(倾斜平面等高线图)包含(“x”) ylabel (“y”)色条subplot(2,1,2)“线型”,“没有”);轴平等的视图(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系数
偏微分方程是
在偏微分方程工具箱™语法中,
这个方程可以转化为系数C = 1
,A = 0
,F = 2
.输入系数。
C = 1;A = 0;F = 2;specifyCoefficients(模型,“m”0,“d”0,“c”c“一个”一个,“f”f);
创建网格并求解PDE
初始化网格。
generateMesh(模型);
求解偏微分方程。
结果= solvepde(模型);
在等高线切片图中检验解
创建一个网格,并将解插入到网格中。
[X,Y,Z] = meshgrid(0:135,0:35,0:61);V = interpolatresolve(结果,X,Y,Z);V =重塑(V,大小(X));
的五个固定值创建等高线切片图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] =网格(1:9:99,1:3:20,1:6:50);[gradx,grady,gradz] = evaluateGradient(results,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
.