evaluateGradient

Оцените градиенты решений для УЧП в произвольных точках

Описание

пример

[gradx,grady] = evaluateGradient(results,xq,yq) возвращает интерполированные значения градиентов решения для УЧП results в 2D точках, заданных в xq и yq.

пример

[gradx,grady,gradz] = evaluateGradient(results,xq,yq,zq) возвращает интерполированные градиенты в 3-D точках, заданных в xqyq , и zq.

пример

[___] = evaluateGradient(results,querypoints) возвращает интерполированные значения градиентов в точках, заданных в querypoints.

пример

[___] = evaluateGradient(___,iU) возвращает интерполированные значения градиентов для системы уравнений для индексов уравнения (компоненты) iU. При решении системы эллиптических УЧП задайте iU после входных параметров в любом из предыдущих синтаксисов.

Первая размерность gradx, grady, и, в 3-D случае, gradz соответствует точкам запроса. Второе измерение соответствует индексам уравнения iU.

пример

[___] = evaluateGradient(___,iT) возвращает интерполированные значения градиентов для зависящего от времени уравнения или системы зависящих от времени уравнений во времена iT. При оценке градиента для зависящего от времени УЧП задайте iT после входных параметров в любом из предыдущих синтаксисов. Для системы зависящих от времени уравнений задайте в оба раза индексы iT и индексы уравнения (компоненты) iU.

Первая размерность gradx, grady, и, в 3-D случае, gradz соответствует точкам запроса. Для одного зависящего от времени УЧП второе измерение соответствует тактам iT. Для системы зависящих от времени УЧП второе измерение соответствует индексам уравнения iU, и третья размерность соответствует тактам iT.

Примеры

свернуть все

Оцените градиенты решения скалярной эллиптической проблемы вдоль линии. Постройте график результатов.

Создайте решение проблемы -Δu=1 на L-образной мембране с нулем граничные условия Дирихле.

model = createpde;
geometryFromEdges(model,@lshapeg);
applyBoundaryCondition(model,'dirichlet', ...
                             'Edge',1:model.Geometry.NumEdges, ...
                             'u',0);
specifyCoefficients(model,'m',0,...
                          'd',0,...
                          'c',1,...
                          'a',0,...
                          'f',1);
generateMesh(model,'Hmax',0.05);
results = solvepde(model);

Оцените градиенты решения вдоль прямой линии от (x,y)=(-1,-1) к (1,1). Постройте результаты как график полей градиента при помощи quiver.

xq = linspace(-1,1,101);
yq = xq;
[gradx,grady] = evaluateGradient(results,xq,yq);

gradx = reshape(gradx,size(xq));
grady = reshape(grady,size(yq));

quiver(xq,yq,gradx,grady)
xlabel('x')
ylabel('y')

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

Вычислите градиенты на среднее выходное время Броуновской частицы из области, которая содержит абсорбирующий (Escape) контуры и отражающиеся контуры. Используйте уравнение Пуассона с постоянными коэффициентами и 3-D прямоугольной геометрией блока, чтобы смоделировать эту проблему.

Создайте решение для этой проблемы.

model = createpde;
importGeometry(model,'Block.stl');
applyBoundaryCondition(model,'dirichlet', ...
                             'Face',[1,2,5], ...
                             'u',0);
specifyCoefficients(model,'m',0,...
                          'd',0,...
                          'c',1,...
                          'a',0,...
                          'f',2);
generateMesh(model);
results = solvepde(model);

Создайте сетку и интерполируйте градиенты решения сетки.

[X,Y,Z] = meshgrid(1:16:100,1:6:20,1:7:50);
[gradx,grady,gradz] = evaluateGradient(results,X,Y,Z);

Измените градиенты к форме сетки и постройте градиенты.

gradx = reshape(gradx,size(X));
grady = reshape(grady,size(Y));
gradz = reshape(gradz,size(Z));

quiver3(X,Y,Z,gradx,grady,gradz)
axis equal
xlabel('x')
ylabel('y')
zlabel('z')

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

Решите скалярную эллиптическую задачу и интерполируйте градиенты решения плотной сетки. Используйте матрицу запроса, чтобы задать сетку.

Создайте решение проблемы -Δu=1 на L-образной мембране с нулем граничные условия Дирихле.

model = createpde;
geometryFromEdges(model,@lshapeg);
applyBoundaryCondition(model,'dirichlet', ...
                             'Edge',1:model.Geometry.NumEdges, ...
                             'u',0);
specifyCoefficients(model,'m',0,...
                          'd',0,...
                          'c',1,...
                          'a',0,...
                          'f',1);
generateMesh(model,'Hmax',0.05);
results = solvepde(model);

Интерполируйте градиенты решения сетки от-1 до 1 в каждом направлении. Постройте результат с помощью quiver функция построения графика.

v = linspace(-1,1,101);
[X,Y] = meshgrid(v);
querypoints = [X(:),Y(:)]';

[gradx,grady] = evaluateGradient(results,querypoints);
quiver(X(:),Y(:),gradx,grady)
xlabel('x')
ylabel('y')

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

Увеличьте масштаб конкретной части графика видеть больше деталей. Например, ограничьте область значений графического вывода 0,2 в каждом направлении.

axis([-0.2 0.2 -0.2 0.2])

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

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

Создайте модель PDE для двух компонентов.

model = createpde(2);

Создайте 2D геометрию как прямоугольник с круговым отверстием в его центре. Для получения дополнительной информации о создании геометрии, смотрите, что пример в Решает УЧП с Постоянными Граничными условиями.

R1 = [3,4,-0.3,0.3,0.3,-0.3,-0.3,-0.3,0.3,0.3]';
C1 = [1,0,0,0.1]';
C1 = [C1;zeros(length(R1)-length(C1),1)];
geom = [R1,C1];
ns = (char('R1','C1'))';
sf = 'R1 - C1';
g = decsg(geom,sf,ns);

Включайте геометрию в модель и просмотрите геометрию.

geometryFromEdges(model,g);
pdegplot(model,'EdgeLabels','on')
axis equal
axis([-0.4,0.4,-0.4,0.4])

Figure contains an axes object. The axes object contains 9 objects of type line, text.

Установите граничные условия и коэффициенты.

specifyCoefficients(model,'m',0,...
                          'd',0,...
                          'c',1,...
                          'a',0,...
                          'f',[2; -2]);

applyBoundaryCondition(model,'dirichlet', ...
                             'Edge',3,'u',[-1,1]);
applyBoundaryCondition(model,'dirichlet', ...
                             'Edge',1,'u',[1,-1]);
applyBoundaryCondition(model,'neumann', ...
                             'Edge',[2,4:8],'g',[0,0]);

Создайте mesh и решите задачу.

generateMesh(model,'Hmax',0.1);
results = solvepde(model);

Интерполируйте градиенты решения сетки от-0.3 до 0,3 в каждом направлении для каждого из этих двух компонентов.

v = linspace(-0.3,0.3,15);
[X,Y] = meshgrid(v);

[gradx,grady] = evaluateGradient(results,X,Y,[1,2]);

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

figure
gradx1 = gradx(:,1);
grady1 = grady(:,1);
quiver(X(:),Y(:),gradx1,grady1)
title('Component 1')
axis equal
xlim([-0.3,0.3])

Figure contains an axes object. The axes object with title Component 1 contains an object of type quiver.

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

figure
gradx2 = gradx(:,2);
grady2 = grady(:,2);
quiver(X(:),Y(:),gradx2,grady2)
title('Component 2')
axis equal
xlim([-0.3,0.3])

Figure contains an axes object. The axes object with title Component 2 contains an object of type quiver.

Решите систему гиперболических УЧП и оцените градиенты.

Импортируйте геометрию плиты для 3-D проблемы с тремя компонентами решения. Постройте геометрию.

model = createpde(3);
importGeometry(model,'Plate10x10x1.stl');
pdegplot(model,'FaceLabels','on','FaceAlpha',0.5)

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

Граница множества обусловливает таким образом, которые стоят 2, фиксируется (нулевое отклонение в любом направлении), и поверхность 5 имеет загрузку 1e3 в положительном z- направление. Эта загрузка заставляет плиту изгибаться вверх. Установите начальное условие, что решение является нулем, и его производная относительно времени является также нулем.

applyBoundaryCondition(model,'dirichlet','Face',2,'u',[0,0,0]);
applyBoundaryCondition(model,'neumann','Face',5,'g',[0,0,1e3]);
setInitialConditions(model,0,0);

Создайте коэффициенты УЧП для уравнений линейной эластичности. Установите свойства материала быть похожими на те из стали. Смотрите Линейные уравнения Эластичности.

E = 200e9;
nu = 0.3;
specifyCoefficients(model,'m',1,...
                          'd',0,...
                          'c',elasticityC3D(E,nu),...
                          'a',0,...
                          'f',[0;0;0]);

Сгенерируйте mesh, установку Hmax к 1.

generateMesh(model,'Hmax',1);

Решите задачу в течение многих времен 0 через 5e-3 с шагом 1e-4. Вам придется ожидать несколько минут решения.

tlist = 0:5e-4:5e-3;
results = solvepde(model,tlist);

Оцените градиенты решения в фиксированном x- и z- координаты в центрах их областей значений, 5 и 0.5 соответственно. Оцените для y от 0 до 10 с шагом 0,2. Получите только 3 компонента, z- компонент.

yy = 0:0.2:10;
zz = 0.5*ones(size(yy));
xx = 10*zz;
component = 3;
[gradx,grady,gradz] = evaluateGradient(results,xx,yy,zz, ...
                                 component,1:length(tlist));

Три проекции градиентов решения 51 1 51 массивом. Используйте squeeze удалить одноэлементную размерность. Удаление одноэлементной размерности преобразовывает эти массивы к 51 51 матрицам, который упрощает индексацию в них.

gradx = squeeze(gradx);
grady = squeeze(grady);
gradz = squeeze(gradz);

Постройте интерполированный компонент градиента grady вдоль y ось для следующих шести значений от временного интервала tlist.

figure
t = [1:2:11];
for i = t
  p(i) = plot(yy,grady(:,i),'DisplayName', ...
              strcat('t=',num2str(tlist(i))));
  hold on
end
legend(p(t))
xlabel('y')
ylabel('grady')
ylim([-5e-6, 20e-6])

Figure contains an axes object. The axes object contains 6 objects of type line. These objects represent t=0, t=0.001, t=0.002, t=0.003, t=0.004, t=0.005.

Входные параметры

свернуть все

Решение для УЧП в виде StationaryResults возразите или TimeDependentResults объект. Создайте results использование solvepde или createPDEResults.

Пример: results = solvepde(model)

x- точки запроса в виде действительного массива. evaluateGradient оценивает градиенты решения в 2D точках координаты [xq(i),yq(i)] или в 3-D координате указывает [xq(i),yq(i),zq(i)]. Так xqyq , и (если есть) zq должен иметь то же количество записей.

evaluateGradient преобразует точки запроса в вектор-столбцы xq(:)yq , и (если есть) zq(:). Для одного стационарного УЧП результат состоит из вектор-столбцов, одного размера. Чтобы гарантировать, что размерности компонентов градиента сопоставимы с размерностями точек исходного запроса, использовать reshape. Например, используйте gradx = reshape(gradx,size(xq)).

Для зависящего от времени УЧП или системы УЧП, первая размерность полученных массивов соответствует пространственным точкам, заданным вектор-столбцами xq(:)yq , и (если есть) zq(:).

Типы данных: double

y- точки запроса в виде действительного массива. evaluateGradient оценивает градиенты решения в 2D точках координаты [xq(i),yq(i)] или в 3-D координате указывает [xq(i),yq(i),zq(i)]. Так xqyq , и (если есть) zq должен иметь то же количество записей.

evaluateGradient преобразует точки запроса в вектор-столбцы xq(:)yq , и (если есть) zq(:). Для одного стационарного УЧП результат состоит из вектор-столбцов, одного размера. Чтобы гарантировать, что размерности компонентов градиента сопоставимы с размерностями точек исходного запроса, использовать reshape. Например, используйте grady = reshape(grady,size(yq)).

Для зависящего от времени УЧП или системы УЧП, первая размерность полученных массивов соответствует пространственным точкам, заданным вектор-столбцами xq(:)yq , и (если есть) zq(:).

Типы данных: double

z- точки запроса в виде действительного массива. evaluateGradient оценивает градиенты решения в 3-D точках координаты [xq(i),yq(i),zq(i)]. Так xqyq , и zq должен иметь то же количество записей.

evaluateGradient преобразует точки запроса в вектор-столбцы xq(:)yq , и (если есть) zq(:). Для одного стационарного УЧП результат состоит из вектор-столбцов, одного размера. Чтобы гарантировать, что размерности компонентов градиента сопоставимы с размерностями точек исходного запроса, использовать reshape. Например, используйте gradz = reshape(gradz,size(zq)).

Для зависящего от времени УЧП или системы УЧП, первая размерность полученных массивов соответствует пространственным точкам, заданным вектор-столбцами xq(:)yq , и (если есть) zq(:).

Типы данных: double

Точки запроса в виде действительной матрицы или с двумя строками для 2D геометрии или с тремя строками для 3-D геометрии. evaluateGradient оценивает градиенты решения в точках координаты querypoints(:,i), так каждый столбец querypoints содержит точно одну 2D или 3-D точку запроса.

Пример: Для 2D геометрии, querypoints = [0.5,0.5,0.75,0.75; 1,2,0,0.5]

Типы данных: double

Индексы уравнения в виде вектора из положительных целых чисел. Каждая запись в iU задает индекс уравнения.

Пример: iU = [1,5] задает индексы для первых и пятых уравнений.

Типы данных: double

Индексы времени в виде вектора из положительных целых чисел. Каждая запись в iT задает индекс времени.

Пример: iT = 1:5:21 задает каждый пятый такт до 21.

Типы данных: double

Выходные аргументы

свернуть все

x- градиента, возвращенного как массив. Для точек запроса, которые находятся вне геометрии, gradx = NaN. Для получения информации о размере gradx, смотрите Размерности Решений, Градиентов и Потоков.

y- градиента, возвращенного как массив. Для точек запроса, которые находятся вне геометрии, grady = NaN. Для получения информации о размере grady, смотрите Размерности Решений, Градиентов и Потоков.

z- градиента, возвращенного как массив. Для точек запроса, которые находятся вне геометрии, gradz = NaN. Для получения информации о размере gradz, смотрите Размерности Решений, Градиентов и Потоков.

Советы

results объект содержит решение и его градиент, вычисленный в узлах треугольной или четырехгранной mesh. Можно получить доступ к решению и трем компонентам градиента в узлах при помощи записи через точку.

interpolateSolution и evaluateGradient позвольте вам интерполировать решение и его градиент к пользовательской сетке, например, заданный meshgrid.

Введенный в R2016a