Интерполируйте решение для УЧП произвольных точек
возвращает интерполированные значения в точках в 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)')
Вычислите среднее выходное время Броуновской частицы из области, которая содержит абсорбирующий (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
Решите скалярную стационарную задачу и интерполируйте решение плотной сетки.
Создайте решение проблемы на 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.85, New conv eig= 0 Basis= 11, Time= 3.93, New conv eig= 0 Basis= 12, Time= 3.96, New conv eig= 0 Basis= 13, Time= 4.00, New conv eig= 0 Basis= 14, Time= 4.06, New conv eig= 0 Basis= 15, Time= 4.10, New conv eig= 0 Basis= 16, Time= 4.14, New conv eig= 0 Basis= 17, Time= 4.18, New conv eig= 0 Basis= 18, Time= 4.22, New conv eig= 1 Basis= 19, Time= 4.26, New conv eig= 1 Basis= 20, Time= 4.31, New conv eig= 1 Basis= 21, Time= 4.36, New conv eig= 1 Basis= 22, Time= 4.40, New conv eig= 1 Basis= 23, Time= 4.50, New conv eig= 4 Basis= 24, Time= 4.54, New conv eig= 4 Basis= 25, Time= 4.59, New conv eig= 5 Basis= 26, Time= 4.64, New conv eig= 6 Basis= 27, Time= 4.69, New conv eig= 6 Basis= 28, Time= 4.73, New conv eig= 6 Basis= 29, Time= 4.77, New conv eig= 6 Basis= 30, Time= 4.84, New conv eig= 7 Basis= 31, Time= 4.88, New conv eig= 9 Basis= 32, Time= 4.92, New conv eig= 10 Basis= 33, Time= 4.97, New conv eig= 11 Basis= 34, Time= 5.01, New conv eig= 11 Basis= 35, Time= 5.11, New conv eig= 14 Basis= 36, Time= 5.17, New conv eig= 14 Basis= 37, Time= 5.21, New conv eig= 14 Basis= 38, Time= 5.27, New conv eig= 14 Basis= 39, Time= 5.32, New conv eig= 14 Basis= 40, Time= 5.37, New conv eig= 14 Basis= 41, Time= 5.42, New conv eig= 15 Basis= 42, Time= 5.47, New conv eig= 15 Basis= 43, Time= 5.52, New conv eig= 15 Basis= 44, Time= 5.57, New conv eig= 15 Basis= 45, Time= 5.63, New conv eig= 16 Basis= 46, Time= 5.75, New conv eig= 16 Basis= 47, Time= 5.82, New conv eig= 16 Basis= 48, Time= 5.88, New conv eig= 16 Basis= 49, Time= 5.95, New conv eig= 17 Basis= 50, Time= 6.02, New conv eig= 18 Basis= 51, Time= 6.10, New conv eig= 18 Basis= 52, Time= 6.16, New conv eig= 18 Basis= 53, Time= 6.28, New conv eig= 19 Basis= 54, Time= 6.34, New conv eig= 20 Basis= 55, Time= 6.41, New conv eig= 21 Basis= 56, Time= 6.48, New conv eig= 22 End of sweep: Basis= 56, Time= 6.52, New conv eig= 22 Basis= 32, Time= 7.16, New conv eig= 0 Basis= 33, Time= 7.21, New conv eig= 0 Basis= 34, Time= 7.28, New conv eig= 0 Basis= 35, Time= 7.35, New conv eig= 0 Basis= 36, Time= 7.40, New conv eig= 0 Basis= 37, Time= 7.45, New conv eig= 0 Basis= 38, Time= 7.49, New conv eig= 0 Basis= 39, Time= 7.57, New conv eig= 0 Basis= 40, Time= 7.64, New conv eig= 0 Basis= 41, Time= 7.69, New conv eig= 0 Basis= 42, Time= 7.75, New conv eig= 0 End of sweep: Basis= 42, Time= 7.76, 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])
results
— Решение для УЧПStationaryResults
объект (значение по умолчанию) | TimeDependentResults
возразите | EigenResults
объектРешение для УЧП в виде StationaryResults
объект, TimeDependentResults
объект или EigenResults
объект. Создайте results
использование solvepde
, solvepdeeig
, или createPDEResults
.
Пример: results = solvepde(model)
xq
— x - координирует точки запроса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
yq
— y - координирует точки запросаy- точки запроса в виде действительного массива. interpolateSolution
оценивает решение в 2D точках координаты [xq(i),yq(i)]
или в 3-D координате указывает [xq(i),yq(i),zq(i)]
. Так xq
yq
, и (если есть) zq
должен иметь то же количество записей. Внутренне, interpolateSolution
преобразует точки запроса в вектор-столбец yq(:)
.
Типы данных: double
zq
— z - координирует точки запросаquerypoints
— Точки запросаТочки запроса в виде действительной матрицы или с двумя строками для 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
задает индекс уравнения.
Пример: iU = [1,5]
задает индексы для первых и пятых уравнений.
Типы данных: double
iT
— Время или индексы режимаВремя или индексы режима в виде вектора из положительных целых чисел. Каждая запись в iT
задает индекс времени для зависящих от времени решений или индекс режима для решений для собственного значения.
Пример: iT = 1:5:21
задает время или режим для каждого пятого решения до 21.
Типы данных: double
uintrp
— Решение в точках запросаРешение в точках запроса, возвращенных как массив. Для точек запроса, которые находятся вне геометрии, uintrp
= NaN
. Для получения дополнительной информации о размерностях решения, смотрите Размерности Решений, Градиентов и Потоков.
PDEModel
| StationaryResults
| TimeDependentResults
| evaluateGradient
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.