Можно интерполировать решение и, при необходимости, его градиент отдельными шагами, а затем построить график результатов с помощью функций MATLAB ®, таких как surf
, mesh
, quiver
и так далее. Для примера решите ту же скаляр эллиптическую задачу на L-образной мембране с нулевыми граничными условиями Дирихле. Интерполируйте решение и его градиент, а затем постройте график результатов.
Создайте модель PDE, 2-D геометрию и mesh. Задайте граничные условия и коэффициенты. Решите УЧП задачу.
model = createpde; geometryFromEdges(model,@lshapeg); applyBoundaryCondition(model,'dirichlet','edge',1:model.Geometry.NumEdges,'u',0); c = 1; a = 0; f = 1; specifyCoefficients(model,'m',0,'d',0,'c',c,'a',a,'f',f); generateMesh(model,'Hmax',0.05); results = solvepde(model);
Интерполируйте решение и его градиенты в плотную сетку от -1 до 1 в каждом направлении.
v = linspace(-1,1,101); [X,Y] = meshgrid(v); querypoints = [X(:),Y(:)]'; uintrp = interpolateSolution(results,querypoints);
Постройте график получившегося решения на mesh.
uintrp = reshape(uintrp,size(X)); mesh(X,Y,uintrp) xlabel('x') ylabel('y')
Интерполируйте градиенты решения в сетку от -1 до 1 в каждом направлении. Постройте график результата с помощью quiver
.
[gradx,grady] = evaluateGradient(results,querypoints); figure quiver(X(:),Y(:),gradx,grady) xlabel('x') ylabel('y')
Изменение масштаба для получения дополнительной информации. Для примера ограничьте область значений [-0.2,0.2]
в каждом направлении.
axis([-0.2 0.2 -0.2 0.2])
Постройте график решения и градиентов в одной области значений.
figure h1 = meshc(X,Y,uintrp); set(h1,'FaceColor','g','EdgeColor','b') xlabel('x') ylabel('y') alpha(0.5) hold on Z = -0.05*ones(size(X)); gradz = zeros(size(gradx)); h2 = quiver3(X(:),Y(:),Z(:),gradx,grady,gradz); set(h2,'Color','r') axis([-0.2,0.2,-0.2,0.2])
Срез графика решения вдоль линии x = y
.
figure mesh(X,Y,uintrp) xlabel('x') ylabel('y') alpha(0.25) hold on z = linspace(0,0.15,101); Z = meshgrid(z); surf(X,X,Z') view([-20 -45 15]) colormap winter
Постройте график интерполированного решения вдоль линии.
figure xq = v; yq = v; uintrp = interpolateSolution(results,xq,yq); plot3(xq,yq,uintrp) grid on xlabel('x') ylabel('y')
Интерполируйте градиенты решения вдоль той же линии и добавьте их к графику решения.
[gradx,grady] = evaluateGradient(results,xq,yq);
gradx = reshape(gradx,size(xq));
grady = reshape(grady,size(yq));
hold on
quiver(xq,yq,gradx,grady)
view([-20 -45 75])