Интерполяция решения УЧП в произвольные точки
возвращает интерполированные значения в точках в uintrp
= interpolateSolution(results
,querypoints
)querypoints
.
возвращает интерполированные значения решения в зависящее от времени или собственного значения уравнение или систему таких уравнений во времени или модальных индексах uintrp
= interpolateSolution(___,iT
)iT
. Для системы зависящих от времени или собственных значений уравнений задайте оба временных/модальных индексы iT
и индексы уравнений iU
Интерполируйте решение скалярной задачи вдоль линии и постройте график результата.
Создайте решение задачи на 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)')
Вычислите среднее время выхода брауновской частицы из области, которая содержит поглощающие (выходящие) контуры и отражающие контуры. Используйте уравнение Пуассона с постоянными коэффициентами и 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
Решите скаляр стационарную задачу и интерполируйте решение в плотную сетку.
Создайте решение задачи на 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')
Создайте решение для двухкомпонентной системы и постройте график двух компонентов вдоль плоского среза через геометрию.
Создайте модель УЧП для двух компонентов. Импортируйте геометрию тора.
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= 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)
Решить систему зависящих от времени PDE и интерполировать решение.
Импортируйте геометрию перекрытия для 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])
results
- решение УЧПStationaryResults
объект (по умолчанию) | TimeDependentResults
| объекта EigenResults
объектPDE решение, заданное как StationaryResults
объект, a TimeDependentResults
объект, или EigenResults
объект. Создание results
использование solvepde
, solvepdeeig
, или createPDEResults
.
Пример: results = solvepde(model)
xq
- x -координатные точки запроса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
yq
- y -координатные точки запросаy -согласованные точки запроса, заданные как действительный массив .interpolateSolution
оценивает решение в 2-D координатных точках [xq(i),yq(i)]
или в 3-D координатных точках [xq(i),yq(i),zq(i)]
. Итак xq
, yq
, и (при наличии) zq
должно иметь одинаковое количество записей. Внутренне, interpolateSolution
преобразует точки запроса в вектор-столбец yq(:)
.
Типы данных: double
zq
- z -координатные точки запросаz -согласованные точки запроса, заданные как действительный массив .interpolateSolution
оценивает решение в 3-D координатных точках [xq(i),yq(i),zq(i)]
. Итак xq
, yq
, и zq
должно иметь одинаковое количество записей. Внутренне, interpolateSolution
преобразует точки запроса в вектор-столбец zq(:)
.
Типы данных: double
querypoints
- Точки запросаТочки запроса, заданные как действительная матрица с двумя строками для 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
задает индекс уравнения.
Пример: iU = [1,5]
задает индексы для первого и пятого уравнений.
Типы данных: double
iT
- Индексы времени или режимаИндексы времени или режима, заданные как вектор положительных целых чисел. Каждая запись в iT
задает временной индекс для зависящих от времени решений или модовый индекс для собственных значений решений.
Пример: iT = 1:5:21
задает время или режим для каждого пятого решения до 21.
Типы данных: double
uintrp
- Решение в точках запросаРешение в точках запроса, возвращаемое как массив. Для точек запроса, которые находятся вне геометрии, uintrp
= NaN
. Для получения дополнительной информации о размерностях решения, см. «Размерности решений», «Градиенты» и «Потоки».
evaluateGradient
| PDEModel
| StationaryResults
| TimeDependentResults
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.