exponenta event banner

interpolateSolution

Интерполируйте решение для УЧП произвольных точек

Синтаксис

uintrp = interpolateSolution(results,xq,yq)
uintrp = interpolateSolution(results,xq,yq,zq)
uintrp = interpolateSolution(results,querypoints)
uintrp = interpolateSolution(___,iU)
uintrp = interpolateSolution(___,iT)

Описание

пример

uintrp = interpolateSolution(results,xq,yq) возвращает интерполированные значения решения скалярного стационарного уравнения, заданного в results в 2D точках, заданных в xq и yq.

пример

uintrp = interpolateSolution(results,xq,yq,zq) возвращает интерполированные значения в 3-D точках, заданных в xq, yq и zq.

пример

uintrp = interpolateSolution(results,querypoints) возвращает интерполированные значения в точках в querypoints.

пример

uintrp = interpolateSolution(___,iU), для любого предыдущего синтаксиса, возвращает интерполированные значения решения системы стационарных уравнений для индексов уравнения iU.

пример

uintrp = interpolateSolution(___,iT) возвращает интерполированные значения решения зависящего от времени уравнения или уравнения собственного значения или системы таких уравнений время от времени или модальных индексов iT. Для системы зависящих от времени или уравнений собственного значения, задайте и индексы времени / модальные индексы iT и индексы уравнения iU

Примеры

свернуть все

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

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

xq = linspace(-1,1,101);
yq = xq;

uintrp = interpolateSolution(results,xq,yq);
plot(xq,uintrp)

xlabel('x')
ylabel('u(x)')

Вычислите среднее выходное время Броуновской частицы из области, которая содержит абсорбирующий (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(0:135,0:35,0:61);
uintrp = interpolateSolution(results,X,Y,Z);
uintrp = reshape(uintrp,size(X));

Создайте график среза контура для пяти фиксированных значений координаты y.

contourslice(X,Y,Z,uintrp,[],0:4:16,[])
colormap jet
xlabel('x')
ylabel('y')
zlabel('z')
xlim([0,100])
ylim([0,20])
zlim([0,50])
axis equal
view(-50,22)
colorbar

Решите скалярную стационарную проблему и интерполируйте решение плотной сетки.

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

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

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

Создайте модель PDE для двух компонентов. Импортируйте геометрию торуса.

model = createpde(2);
importGeometry(model,'Torus.stl');
pdegplot(model,'FaceLabels','on');

Условия границы множества.

gfun = @(region,state)[0,region.z-40];
applyBoundaryCondition(model,'neumann','Face',1,'g',gfun);
ufun = @(region,state)[region.x-40,0];
applyBoundaryCondition(model,'dirichlet','Face',1,'u',ufun);

Установите проблемные коэффициенты.

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

Создайте mesh и решите проблему.

generateMesh(model);
results = solvepde(model);

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

[X,Z] = meshgrid(0:100);
Y = 15*ones(size(X));
uintrp = interpolateSolution(results,X,Y,Z,[1,2]);

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

sol1 = reshape(uintrp(:,1),size(X));
sol2 = reshape(uintrp(:,2),size(X));
figure
surf(X,Z,sol1)
title('Component 1')

figure
surf(X,Z,sol2)
title('Component 2')

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

Найдите собственные значения и собственные вектора для L-образной мембраны.

model = createpde(1);
geometryFromEdges(model,@lshapeg);
applyBoundaryCondition(model,'dirichlet','Edge',1:model.Geometry.NumEdges,'u',0);
specifyCoefficients(model,'m',0,...
                          'd',1,...
                          'c',1,...
                          'a',0,...
                          'f',0);
r = [0,100];
generateMesh(model,'Hmax',1/50);
results = solvepdeeig(model,r);
              Basis= 10,  Time=   4.46,  New conv eig=  0
              Basis= 11,  Time=   4.61,  New conv eig=  0
              Basis= 12,  Time=   4.68,  New conv eig=  0
              Basis= 13,  Time=   4.74,  New conv eig=  0
              Basis= 14,  Time=   4.84,  New conv eig=  0
              Basis= 15,  Time=   4.98,  New conv eig=  0
              Basis= 16,  Time=   5.05,  New conv eig=  0
              Basis= 17,  Time=   5.12,  New conv eig=  0
              Basis= 18,  Time=   5.16,  New conv eig=  1
              Basis= 19,  Time=   5.29,  New conv eig=  1
              Basis= 20,  Time=   5.40,  New conv eig=  1
              Basis= 21,  Time=   5.55,  New conv eig=  1
              Basis= 22,  Time=   5.66,  New conv eig=  1
              Basis= 23,  Time=   5.71,  New conv eig=  4
              Basis= 24,  Time=   5.75,  New conv eig=  4
              Basis= 25,  Time=   5.92,  New conv eig=  5
              Basis= 26,  Time=   6.00,  New conv eig=  6
              Basis= 27,  Time=   6.06,  New conv eig=  6
              Basis= 28,  Time=   6.22,  New conv eig=  6
              Basis= 29,  Time=   6.37,  New conv eig=  6
              Basis= 30,  Time=   6.46,  New conv eig=  7
              Basis= 31,  Time=   6.52,  New conv eig=  9
              Basis= 32,  Time=   6.66,  New conv eig= 10
              Basis= 33,  Time=   6.81,  New conv eig= 11
              Basis= 34,  Time=   6.86,  New conv eig= 11
              Basis= 35,  Time=   7.03,  New conv eig= 14
              Basis= 36,  Time=   7.16,  New conv eig= 14
              Basis= 37,  Time=   7.24,  New conv eig= 14
              Basis= 38,  Time=   7.31,  New conv eig= 14
              Basis= 39,  Time=   7.37,  New conv eig= 14
              Basis= 40,  Time=   7.53,  New conv eig= 14
              Basis= 41,  Time=   7.58,  New conv eig= 15
              Basis= 42,  Time=   7.75,  New conv eig= 15
              Basis= 43,  Time=   7.84,  New conv eig= 15
              Basis= 44,  Time=   7.94,  New conv eig= 15
              Basis= 45,  Time=   8.08,  New conv eig= 16
              Basis= 46,  Time=   8.15,  New conv eig= 16
              Basis= 47,  Time=   8.31,  New conv eig= 16
              Basis= 48,  Time=   8.46,  New conv eig= 16
              Basis= 49,  Time=   8.60,  New conv eig= 17
              Basis= 50,  Time=   8.69,  New conv eig= 18
              Basis= 51,  Time=   8.83,  New conv eig= 18
              Basis= 52,  Time=   8.94,  New conv eig= 18
              Basis= 53,  Time=   9.02,  New conv eig= 19
              Basis= 54,  Time=   9.18,  New conv eig= 20
              Basis= 55,  Time=   9.30,  New conv eig= 21
              Basis= 56,  Time=   9.40,  New conv eig= 22
End of sweep: Basis= 56,  Time=   9.41,  New conv eig= 22
              Basis= 32,  Time=  10.62,  New conv eig=  0
              Basis= 33,  Time=  10.69,  New conv eig=  0
              Basis= 34,  Time=  10.87,  New conv eig=  0
              Basis= 35,  Time=  10.99,  New conv eig=  0
              Basis= 36,  Time=  11.11,  New conv eig=  0
              Basis= 37,  Time=  11.21,  New conv eig=  0
              Basis= 38,  Time=  11.35,  New conv eig=  0
              Basis= 39,  Time=  11.45,  New conv eig=  0
              Basis= 40,  Time=  11.54,  New conv eig=  0
              Basis= 41,  Time=  11.62,  New conv eig=  0
              Basis= 42,  Time=  11.75,  New conv eig=  0
End of sweep: Basis= 42,  Time=  11.75,  New conv eig=  0

Интерполируйте собственный вектор, соответствующий пятому собственному значению к крупной сетке, и постройте результат.

[xq,yq] = meshgrid(-1:0.1:1);
uintrp = interpolateSolution(results,xq,yq,5);
uintrp = reshape(uintrp,size(xq));
surf(xq,yq,uintrp)

Решите систему зависящих от времени УЧП и интерполируйте решение.

Импортируйте геометрию плиты для 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);

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

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:1e-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;
uintrp = interpolateSolution(results,xx,yy,zz,component,1:length(tlist));

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

uintrp = squeeze(uintrp);

Постройте решение как функцию y и время.

[X,Y] = ndgrid(yy,tlist);
figure
surf(X,Y,uintrp)
xlabel('Y')
ylabel('Time')
title('Deflection at x = 5, z = 0.5')
zlim([0,14e-5])

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

свернуть все

Решение для УЧП, заданное как объект StationaryResults, объект TimeDependentResults или объект EigenResults. Создайте results с помощью solvepde, solvepdeeig или createPDEResults.

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

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

interpolateSolution преобразовывает точки запроса в вектор-столбцы xq(:), yq(:), и (если есть) zq(:). Возвращенное решение является вектор-столбцом, одного размера. Чтобы гарантировать, что размерности возвращенного решения сопоставимы с размерностями точек исходного запроса, используйте reshape. Например, используйте uintrp = reshape(gradxuintrp,size(xq)).

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

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

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

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

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

Точки запроса, заданные как действительная матрица или с двумя строками для 2D геометрии или с тремя строками для 3-D геометрии. interpolateSolution оценивает решение в точках координаты 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

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

свернуть все

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

Введенный в R2015b