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')

Вычислите градиенты на среднее выходное время Броуновской частицы из области, которая содержит абсорбирующий (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')

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

Создайте решение проблемы -Δ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')

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

axis([-0.2 0.2 -0.2 0.2])

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

Создайте модель 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])

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

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
gradx2 = gradx(:,2);
grady2 = grady(:,2);
quiver(X(:),Y(:),gradx2,grady2)
title('Component 2')
axis equal
xlim([-0.3,0.3])

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

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

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

Граница множества обусловливает таким образом, которые стоят 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])

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

свернуть все

Решение для УЧП, заданное как 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