evaluateGradient

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

Описание

пример

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

пример

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

пример

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

пример

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

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

пример

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

Первая размерность gradx, grady, и, в 3-D случае, gradz соответствует точкам запроса. Для одного зависящего от времени УЧП второе измерение соответствует временным шагам iT. Для системы зависящих от времени PDE, второе измерение соответствует индексам уравнений 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. The axes contains an object of type quiver.

Вычислите градиенты для среднего времени выхода брауновской частицы из области, которая содержит поглощающие (выходящие) контуры и отражающие контуры. Используйте уравнение Пуассона с постоянными коэффициентами и 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. The axes 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. The axes contains an object of type quiver.

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

axis([-0.2 0.2 -0.2 0.2])

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

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

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

model = createpde(2);

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

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. The axes 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. The axes 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. The axes with title Component 2 contains an object of type quiver.

Решить систему гиперболических PDE и оценить градиентов.

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

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

Figure contains an axes. The axes 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. The axes 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.

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

свернуть все

PDE решение, заданное как StationaryResults объект или TimeDependentResults объект. Создание results использование solvepde или createPDEResults.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример: Для 2-D геометрии 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, см. Размерности решений, градиентов и потоков.

Совет

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

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

Введенный в R2016a