www.gusucode.com > pde 案例源码 matlab代码程序 > pde/ContourSlices3DExample.m

    %% Contour Slices Through a 3-D Solution
% This example shows how to create contour slices in various directions
% through a solution in 3-D geometry.

% Copyright 2014-2015 The MathWorks, Inc.

%% Set Up and Solve the PDE
% The problem is to solve Poisson's equation with zero Dirichlet boundary
% conditions for a complicated geometry. Poisson's equation is
%
% $$-\nabla\cdot\nabla u = f.$$
%
% Partial Differential Equation Toolbox(TM) solves equations in the form
%
% $$-\nabla\cdot\nabla (c u) + au = f.$$
%
% So you can represent the problem by setting $c = 1$ and $a = 0$.
% Arbitrarily set $f = 10$.
c = 1;
a = 0;
f = 10;
%%
% The first step in solving any 3-D PDE problem is to create a PDE Model.
% This is a container that holds the number of equations, geometry, mesh,
% and boundary conditions for your PDE. Create the model, then import the
% |'ForearmLink.stl'| file and view the geometry.
N = 1;
model = createpde(N);
importGeometry(model,'ForearmLink.stl');
pdegplot(model,'FaceAlpha',0.5)
view(-42,24)
%% Specify PDE Coefficients
% Include the PDE COefficients in |model|.
specifyCoefficients(model,'m',0,'d',0,'c',c,'a',a,'f',f);

%%
% Create zero Dirichlet boundary conditions on all faces.
applyBoundaryCondition(model,'dirichlet','Face',1:model.Geometry.NumFaces,'u',0);

%%
% Create a mesh and solve the PDE.
generateMesh(model);
result = solvepde(model);

%% Plot the Solution as Contour Slices
% Because the boundary conditions are $u = 0$ on all faces, the solution
% $u$ is nonzero only in the interior. To examine the interior, take a
% rectangular grid that covers the geometry with a spacing of one unit in
% each coordinate direction.
[X,Y,Z] = meshgrid(0:135,0:35,0:61);

%%
% For plotting and analysis, create a |PDEResults| object from the
% solution. Interpolate the result at every grid point.
V = interpolateSolution(result,X,Y,Z);
V = reshape(V,size(X));

%%
% Plot contour slices for various values of $z$.
figure
colormap jet
contourslice(X,Y,Z,V,[],[],0:5:60)
xlabel('x')
ylabel('y')
zlabel('z')
colorbar
view(-11,14)
axis equal
%%
% Plot contour slices for various values of $y$.
figure
colormap jet
contourslice(X,Y,Z,V,[],1:6:31,[])
xlabel('x')
ylabel('y')
zlabel('z')
colorbar
view(-62,34)
axis equal
%% Save Memory by Evaluating As Needed
% For large problems you can run out of memory when creating a fine 3-D
% grid. Furthermore, it can be time-consuming to evaluate the solution on a
% full grid. To save memory and time, evaluate only at the points you plot.
% You can also use this technique to interpolate to tilted grids, or to
% other surfaces.
%
% For example, interpolate the solution to a grid on the tilted plane $0\le
% x\le 135$, $0\le y\le 35$, and $z = x/10 + y/2$. Plot both contours and
% colored surface data. Use a fine grid, with spacing 0.2.
[X,Y] = meshgrid(0:0.2:135,0:0.2:35);
Z = X/10 + Y/2;
V = interpolateSolution(result,X,Y,Z);
V = reshape(V,size(X));
figure
subplot(2,1,1)
contour(X,Y,V);
axis equal
title('Contour Plot on Tilted Plane')
xlabel('x')
ylabel('y')
colorbar
subplot(2,1,2)
surf(X,Y,V,'LineStyle','none');
axis equal
view(0,90)
title('Colored Plot on Tilted Plane')
xlabel('x')
ylabel('y')
colorbar

displayEndOfDemoMessage(mfilename)