exponenta event banner

interpolateSolution

Интерполяция PDE-решения в произвольные точки

Описание

пример

uintrp = interpolateSolution(results,xq,yq) возвращает интерполированные значения решения к скалярному стационарному уравнению, указанному в results в точках 2-D, указанных в 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)')

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

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

Figure contains an axes. The axes contains 64 objects of type patch.

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

Создайте решение задачи -Δ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);

Постройте график результирующей интерполяции на сетке.

uintrp = reshape(uintrp,size(X));
mesh(X,Y,uintrp)
xlabel('x')
ylabel('y')

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

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

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

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

Figure contains an axes. The axes contains 2 objects of type quiver, patch.

Задание граничных условий.

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]);

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

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

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

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

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

Найдите собственные значения и собственные векторы для 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=  12.57,  New conv eig=  0
              Basis= 11,  Time=  12.98,  New conv eig=  0
              Basis= 12,  Time=  13.18,  New conv eig=  0
              Basis= 13,  Time=  13.47,  New conv eig=  0
              Basis= 14,  Time=  13.73,  New conv eig=  0
              Basis= 15,  Time=  14.01,  New conv eig=  0
              Basis= 16,  Time=  14.11,  New conv eig=  0
              Basis= 17,  Time=  14.25,  New conv eig=  0
              Basis= 18,  Time=  14.50,  New conv eig=  1
              Basis= 19,  Time=  14.75,  New conv eig=  1
              Basis= 20,  Time=  14.84,  New conv eig=  1
              Basis= 21,  Time=  15.12,  New conv eig=  1
              Basis= 22,  Time=  15.34,  New conv eig=  1
              Basis= 23,  Time=  15.56,  New conv eig=  4
              Basis= 24,  Time=  15.68,  New conv eig=  4
              Basis= 25,  Time=  15.76,  New conv eig=  5
              Basis= 26,  Time=  15.85,  New conv eig=  6
              Basis= 27,  Time=  15.95,  New conv eig=  6
              Basis= 28,  Time=  16.07,  New conv eig=  6
              Basis= 29,  Time=  16.16,  New conv eig=  6
              Basis= 30,  Time=  16.25,  New conv eig=  7
              Basis= 31,  Time=  16.35,  New conv eig=  9
              Basis= 32,  Time=  16.45,  New conv eig= 10
              Basis= 33,  Time=  16.55,  New conv eig= 11
              Basis= 34,  Time=  16.66,  New conv eig= 11
              Basis= 35,  Time=  16.73,  New conv eig= 14
              Basis= 36,  Time=  16.80,  New conv eig= 14
              Basis= 37,  Time=  16.88,  New conv eig= 14
              Basis= 38,  Time=  17.00,  New conv eig= 14
              Basis= 39,  Time=  17.14,  New conv eig= 14
              Basis= 40,  Time=  17.22,  New conv eig= 14
              Basis= 41,  Time=  17.29,  New conv eig= 15
              Basis= 42,  Time=  17.42,  New conv eig= 15
              Basis= 43,  Time=  17.50,  New conv eig= 15
              Basis= 44,  Time=  17.63,  New conv eig= 15
              Basis= 45,  Time=  17.73,  New conv eig= 16
              Basis= 46,  Time=  17.85,  New conv eig= 16
              Basis= 47,  Time=  17.96,  New conv eig= 16
              Basis= 48,  Time=  18.06,  New conv eig= 16
              Basis= 49,  Time=  18.19,  New conv eig= 17
              Basis= 50,  Time=  18.32,  New conv eig= 18
              Basis= 51,  Time=  18.67,  New conv eig= 18
              Basis= 52,  Time=  18.82,  New conv eig= 18
              Basis= 53,  Time=  19.00,  New conv eig= 19
              Basis= 54,  Time=  19.41,  New conv eig= 20
              Basis= 55,  Time=  19.87,  New conv eig= 21
              Basis= 56,  Time=  20.29,  New conv eig= 22
End of sweep: Basis= 56,  Time=  20.31,  New conv eig= 22
              Basis= 32,  Time=  22.63,  New conv eig=  0
              Basis= 33,  Time=  22.96,  New conv eig=  0
              Basis= 34,  Time=  23.22,  New conv eig=  0
              Basis= 35,  Time=  23.46,  New conv eig=  0
              Basis= 36,  Time=  23.69,  New conv eig=  0
              Basis= 37,  Time=  23.96,  New conv eig=  0
              Basis= 38,  Time=  24.20,  New conv eig=  0
              Basis= 39,  Time=  24.42,  New conv eig=  0
              Basis= 40,  Time=  24.66,  New conv eig=  0
              Basis= 41,  Time=  24.92,  New conv eig=  0
              Basis= 42,  Time=  25.17,  New conv eig=  0
End of sweep: Basis= 42,  Time=  25.17,  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)

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

Решение системы зависящих от времени 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);

Создайте коэффициенты PDE для уравнений линейной упругости. Задайте свойства материала, аналогичные свойствам стали. См. раздел Уравнения линейной упругости.

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

Создание сетки, настройка 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])

Figure contains an axes. The axes with title Deflection at x = 5, z = 0.5 contains an object of type surface.

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

свернуть все

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

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

точки запроса координат x, заданные как вещественный массив. interpolateSolution вычисляет решение в 2-D точках координат [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 вычисляет решение в 2-D точках координат [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

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

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

свернуть все

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

Представлен в R2015b