interpolateSolution

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

Описание

пример

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

Постройте график получившейся интерполяции на mesh.

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.

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

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

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

Создайте 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 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);

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

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

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