interpolateSolution

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

Описание

пример

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

пример

uintrp = interpolateSolution(results,xq,yq,zq) возвращает интерполированные значения в 3-D точках, заданных в xqyq , и 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=   3.99,  New conv eig=  0
              Basis= 11,  Time=   4.05,  New conv eig=  0
              Basis= 12,  Time=   4.10,  New conv eig=  0
              Basis= 13,  Time=   4.14,  New conv eig=  0
              Basis= 14,  Time=   4.18,  New conv eig=  0
              Basis= 15,  Time=   4.25,  New conv eig=  0
              Basis= 16,  Time=   4.31,  New conv eig=  0
              Basis= 17,  Time=   4.36,  New conv eig=  0
              Basis= 18,  Time=   4.40,  New conv eig=  1
              Basis= 19,  Time=   4.46,  New conv eig=  1
              Basis= 20,  Time=   4.50,  New conv eig=  1
              Basis= 21,  Time=   4.64,  New conv eig=  1
              Basis= 22,  Time=   4.81,  New conv eig=  1
              Basis= 23,  Time=   4.93,  New conv eig=  4
              Basis= 24,  Time=   5.09,  New conv eig=  4
              Basis= 25,  Time=   5.17,  New conv eig=  5
              Basis= 26,  Time=   5.34,  New conv eig=  6
              Basis= 27,  Time=   5.48,  New conv eig=  6
              Basis= 28,  Time=   5.54,  New conv eig=  6
              Basis= 29,  Time=   5.69,  New conv eig=  6
              Basis= 30,  Time=   5.80,  New conv eig=  7
              Basis= 31,  Time=   5.93,  New conv eig=  9
              Basis= 32,  Time=   6.11,  New conv eig= 10
              Basis= 33,  Time=   6.26,  New conv eig= 11
              Basis= 34,  Time=   6.37,  New conv eig= 11
              Basis= 35,  Time=   6.44,  New conv eig= 14
              Basis= 36,  Time=   6.55,  New conv eig= 14
              Basis= 37,  Time=   6.70,  New conv eig= 14
              Basis= 38,  Time=   6.86,  New conv eig= 14
              Basis= 39,  Time=   7.00,  New conv eig= 14
              Basis= 40,  Time=   7.13,  New conv eig= 14
              Basis= 41,  Time=   7.28,  New conv eig= 15
              Basis= 42,  Time=   7.42,  New conv eig= 15
              Basis= 43,  Time=   7.61,  New conv eig= 15
              Basis= 44,  Time=   7.73,  New conv eig= 15
              Basis= 45,  Time=   7.84,  New conv eig= 16
              Basis= 46,  Time=   7.96,  New conv eig= 16
              Basis= 47,  Time=   8.06,  New conv eig= 16
              Basis= 48,  Time=   8.22,  New conv eig= 16
              Basis= 49,  Time=   8.45,  New conv eig= 17
              Basis= 50,  Time=   8.56,  New conv eig= 18
              Basis= 51,  Time=   8.74,  New conv eig= 18
              Basis= 52,  Time=   8.92,  New conv eig= 18
              Basis= 53,  Time=   9.15,  New conv eig= 19
              Basis= 54,  Time=   9.34,  New conv eig= 20
              Basis= 55,  Time=   9.45,  New conv eig= 21
              Basis= 56,  Time=   9.67,  New conv eig= 22
End of sweep: Basis= 56,  Time=   9.68,  New conv eig= 22
              Basis= 32,  Time=  10.91,  New conv eig=  0
              Basis= 33,  Time=  11.09,  New conv eig=  0
              Basis= 34,  Time=  11.25,  New conv eig=  0
              Basis= 35,  Time=  11.37,  New conv eig=  0
              Basis= 36,  Time=  11.53,  New conv eig=  0
              Basis= 37,  Time=  11.67,  New conv eig=  0
              Basis= 38,  Time=  11.82,  New conv eig=  0
              Basis= 39,  Time=  11.94,  New conv eig=  0
              Basis= 40,  Time=  11.98,  New conv eig=  0
              Basis= 41,  Time=  12.10,  New conv eig=  0
              Basis= 42,  Time=  12.16,  New conv eig=  0
End of sweep: Basis= 42,  Time=  12.16,  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);

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

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)]. Так xqyq , и (если есть) 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)]. Так xqyq , и (если есть) zq должен иметь то же количество записей. Внутренне, interpolateSolution преобразует точки запроса в вектор-столбец yq(:).

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

z- точки запроса в виде действительного массива. interpolateSolution оценивает решение в 3-D точках координаты [xq(i),yq(i),zq(i)]. Так xqyq , и 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