Решение и графики градиента с pdeplot и pdeplot3D

2D графики решения и градиента

Чтобы визуализировать 2D скалярное решение для УЧП, можно использовать pdeplot функция. Эта функция позволяет вам построить решение, явным образом не интерполируя решение. Например, решите скалярную эллиптическую задачу -u=1 на L-образной мембране с нулем граничные условия Дирихле и график решение.

Создайте модель PDE, 2D геометрию и 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);

results = solvepde(model);

Используйте pdeplot построить решение.

u = results.NodalSolution;
pdeplot(model,'XYData',u,'ZData',u,'Mesh','on')
xlabel('x')
ylabel('y')

Figure contains an axes object. The axes object contains an object of type patch.

Чтобы получить более сглаженную поверхность решения, задайте максимальный размер треугольников mesh при помощи Hmax аргумент. Затем решите задачу УЧП с помощью этой новой mesh и постройте решение снова.

generateMesh(model,'Hmax',0.05);
results = solvepde(model);
u = results.NodalSolution;

pdeplot(model,'XYData',u,'ZData',u,'Mesh','on')
xlabel('x')
ylabel('y')

Figure contains an axes object. The axes object contains an object of type patch.

Доступ к градиенту решения в узловых местоположениях.

ux = results.XGradients;
uy = results.YGradients;

Постройте градиент как график полей градиента.

pdeplot(model,'FlowData',[ux,uy])

Figure contains an axes object. The axes object contains an object of type quiver.

3-D графики поверхности и градиента

Получите объемную поверхностную диаграмму решения с 3-D геометрией и N> 1.

Во-первых, импортируйте четырехгранную геометрию к модели с N = 2 уравнения и просмотрите его поверхности.

model = createpde(2);
importGeometry(model,'Tetrahedron.stl');
pdegplot(model,'FaceLabels','on','FaceAlpha',0.5)
view(-40,24)

Figure contains an axes object. The axes object contains 3 objects of type quiver, patch, line.

Создайте проблему с нулем граничные условия Дирихле на поверхности 4.

applyBoundaryCondition(model,'dirichlet','Face',4,'u',[0,0]);

Создайте коэффициенты для проблемы, где f = [1;10] и c симметрическая матрица в форме на 6 Н.

f = [1;10];
a = 0;
c = [2;0;4;1;3;8;1;0;2;1;2;4];
specifyCoefficients(model,'m',0,'d',0,'c',c,'a',a,'f',f);

Создайте mesh для решения.

generateMesh(model,'Hmax',20);

Решите задачу.

results = solvepde(model);
u = results.NodalSolution;

Постройте два компонента решения.

pdeplot3D(model,'ColorMapData',u(:,1))
view(-175,4)
title('u(1)')

figure
pdeplot3D(model,'ColorMapData',u(:,2))
view(-175,4)
title('u(2)')

Вычислите поток решения и постройте результаты для обоих компонентов.

[cgradx,cgrady,cgradz] = evaluateCGradient(results);
figure
pdeplot3D(model,'FlowData',[cgradx(:,1) cgrady(:,1) cgradz(:,1)])

figure
pdeplot3D(model,'FlowData',[cgradx(:,2) cgrady(:,2) cgradz(:,2)])