Интерполируйте данные к выбранным местоположениям
Эта функция поддерживает устаревший рабочий процесс. Используя [p,e,t]
представление FEMesh
данные не рекомендуются. Использование interpolateSolution
и evaluateGradient
интерполировать решение для УЧП и его градиент к произвольным точкам, не переключаясь на [p,e,t]
представление.
В этом примере показано, как интерполировать решение скалярной проблемы с помощью pOut
матрица значений.
Решите уравнение на единичном диске с нулем условия Дирихле.
g0 = [1;0;0;1]; % circle centered at (0,0) with radius 1 sf = 'C1'; g = decsg(g0,sf,sf'); % decomposed geometry matrix model = createpde; gm = geometryFromEdges(model,g); % Zero Dirichlet conditions applyBoundaryCondition(model,'dirichlet', ... 'Edge',(1:gm.NumEdges), ... 'u',0); [p,e,t] = initmesh(gm); c = 1; a = 0; f = 1; u = assempde(model,p,e,t,c,a,f); % solve the PDE
Создайте интерполятор для решения.
F = pdeInterpolant(p,t,u);
Сгенерируйте случайный набор координат в модульном квадрате. Оцените интерполированное решение в случайных точках.
rng default % for reproducibility pOut = rand(2,25); % 25 numbers between 0 and 1 uOut = evaluate(F,pOut); numNaN = sum(isnan(uOut))
numNaN = 9
uOut
содержит некоторый NaN
записи, потому что некоторые точки в pOut
находятся вне единичного диска.
В этом примере показано, как интерполировать решение скалярной проблемы с помощью x
Y
значения.
Решите уравнение на единичном диске с нулем условия Дирихле.
g0 = [1;0;0;1]; % circle centered at (0,0) with radius 1 sf = 'C1'; g = decsg(g0,sf,sf'); % decomposed geometry matrix model = createpde; gm = geometryFromEdges(model,g); % Zero Dirichlet conditions applyBoundaryCondition(model,'dirichlet', ... 'Edge',(1:gm.NumEdges), ... 'u',0); [p,e,t] = initmesh(gm); c = 1; a = 0; f = 1; u = assempde(model,p,e,t,c,a,f); % solve the PDE
Создайте интерполятор для решения.
F = pdeInterpolant(p,t,u); % create the interpolant
Оцените интерполированное решение в узлах решетки в модульном квадрате с разрядкой 0.2
.
[x,y] = meshgrid(0:0.2:1); uOut = evaluate(F,x,y); numNaN = sum(isnan(uOut))
numNaN = 12
uOut
содержит некоторый NaN
записи, потому что некоторые точки в модульном квадрате находятся вне единичного диска.
В этом примере показано, как интерполировать решение системы N
= 3 уравнения.
Решите систему уравнений с граничными условиями Дирихле на единичном диске, где
g0 = [1;0;0;1]; % circle centered at (0,0) with radius 1 sf = 'C1'; g = decsg(g0,sf,sf'); % decomposed geometry matrix model = createpde(3); gm = geometryFromEdges(model,g); applyBoundaryCondition(model,'dirichlet', ... 'Edge',(1:gm.NumEdges), ... 'u',zeros(3,1)); [p,e,t] = initmesh(g); c = 1; a = 0; f = char('sin(x) + cos(y)','cosh(x.*y)','x.*y./(1+x.^2+y.^2)'); u = assempde(model,p,e,t,c,a,f); % solve the PDE
Создайте interpolant для решения.
F = pdeInterpolant(p,t,u); % create the interpolant
Интерполируйте решение в кругу.
s = linspace(0,2*pi); x = 0.5 + 0.4*cos(s); y = 0.4*sin(s); uOut = evaluate(F,x,y);
Постройте эти три компонента решения.
npts = length(x); plot3(x,y,uOut(1:npts),'b') hold on plot3(x,y,uOut(npts+1:2*npts),'k') plot3(x,y,uOut(2*npts+1:end),'r') hold off view(35,35)
В этом примере показано, как интерполировать решение, которое зависит вовремя.
Решите уравнение
на единичном диске с нулем условия Дирихле и нулевые начальные условия. Решите в пять раз от 0 до 1.
g0 = [1;0;0;1]; % circle centered at (0,0) with radius 1 sf = 'C1'; g = decsg(g0,sf,sf'); % decomposed geometry matrix model = createpde; gm = geometryFromEdges(model,g); % Zero Dirichlet conditions applyBoundaryCondition(model,'dirichlet', ... 'Edge',(1:gm.NumEdges), ... 'u',0); [p,e,t] = initmesh(gm); c = 1; a = 0; f = 1; d = 1; tlist = 0:1/4:1; u = parabolic(0,tlist,model,p,e,t,c,a,f,d);
52 successful steps 0 failed attempts 106 function evaluations 1 partial derivatives 13 LU decompositions 105 solutions of linear systems
Создайте interpolant для решения.
F = pdeInterpolant(p,t,u);
Интерполируйте решение в x = 0.1
, y = -0.1
, и все доступные времена.
x = 0.1; y = -0.1; uOut = evaluate(F,x,y)
uOut = 1×5
0 0.1809 0.2278 0.2388 0.2413
Решение запускается в 0 во время 0, как это должно. Это растет до приблизительно 1/4 во время 1.
В этом примере показано, как интерполировать эллиптическое решение сетки.
Задайте и решите задачу
Используйте встроенные функции геометрии, чтобы создать L-образную область с нулем граничные условия Дирихле. Решите эллиптический УЧП с коэффициентами , , , с нулем граничные условия Дирихле.
[p,e,t] = initmesh('lshapeg'); % Predefined geometry u = assempde('lshapeb',p,e,t,1,0,1); % Predefined boundary condition
Создайте Interpolant
Создайте interpolant для решения.
F = pdeInterpolant(p,t,u);
Создайте сетку для решения
xgrid = -1:0.1:1; ygrid = -1:0.2:1; [X,Y] = meshgrid(xgrid,ygrid);
Получившаяся сетка имеет некоторые точки, которые находятся вне L-образной области.
Оцените решение на сетке
uout = evaluate(F,X,Y);
Интерполированное решение uout
вектор-столбец. Можно изменить его, чтобы совпадать с размером X
или Y
. Это дает матрицу, как выход tri2grid
функция.
Z = reshape(uout,size(X));
F
InterpolantpdeInterpolant
Interpolant в виде выхода pdeInterpolant
.
Пример: F = pdeInterpolant(p,t,u)
pOut
— Точки запросаТочки запроса в виде матрицы с двумя или тремя строками. Первая строка представляет x
компонент точек запроса, вторая строка представляет y
компонент, и, для 3-D геометрии, третья строка представляет z
компонент. evaluate
вычисляет interpolant в каждом столбце pOut
. Другими словами, evaluate
интерполирует в точках pOut(:,k)
.
Пример: дуйтесь = [-1.5,0,1;
1,1,2.2]
Типы данных: double
x
— Компонент точки запросаКомпонент точки запроса в виде вектора или массива. evaluate
интерполирует в любой 2D точки [x(k),y(k)]
или в 3-D точках [x(k),y(k),z(k)]
. x
и y
, и z
массивы должны содержать то же количество записей.
evaluate
преобразовывает компоненты точки запроса к линейному представлению индекса, такие как x(:)
.
Пример: x = -1:0.2:3
Типы данных: double
y
— Компонент точки запросаКомпонент точки запроса в виде вектора или массива. evaluate
интерполирует в любой 2D точки [x(k),y(k)]
или в 3-D точках [x(k),y(k),z(k)]
. x
и y
, и z
массивы должны содержать то же количество записей.
evaluate
преобразовывает компоненты точки запроса к линейному представлению индекса, такие как y(:)
.
Пример: y = -1:0.2:3
Типы данных: double
z
— Компонент точки запросаКомпонент точки запроса в виде вектора или массива. evaluate
интерполирует в любой 2D точки [x(k),y(k)]
или в 3-D точках [x(k),y(k),z(k)]
. x
и y
, и z
массивы должны содержать то же количество записей.
evaluate
преобразовывает компоненты точки запроса к линейному представлению индекса, такие как z(:)
.
Пример: z = -1:0.2:3
Типы данных: double
uOut
— Интерполированные значенияИнтерполированные значения, возвращенные как массив. uOut
имеет одинаковое число столбцов как данные u
используемый в создании F
. Если u
зависит вовремя, uOut
содержит столбец для каждого временного шага. Для независимого от времени u
, uOut
имеет один столбец.
Количество строк в uOut
количество уравнений в системе УЧП, N
, времена количество точек запроса, pOut
. Первый pOut
строки соответствуют уравнению 1, следующему pOut
строки соответствуют уравнению 2 и так далее.
Если точка запроса находится вне mesh, evaluate
возвращает NaN
для той точки.
element является основной единицей в методе конечных элементов.
Для 2D проблем элементом является треугольник в model.Mesh.Element
свойство. Если треугольник представляет линейный элемент, он имеет узлы только в треугольных углах. Если треугольник представляет квадратичный элемент, то он имеет узлы в треугольных углах и центрах ребра.
Для 3-D проблем элементом является четырехгранник с или четырьмя или десятью точками. (Линейный) четырехгранник с четырьмя точками имеет узлы только в его углах. (Квадратичный) четырехгранник с десятью точками имеет узлы в своих углах и в центральную точку каждого ребра.
Для получения дополнительной информации смотрите Данные о Mesh.
Для каждой точки, где решение требуют (pOut
), в процессе интерполяции существует два шага. Во-первых, element, содержащий точку, должен быть расположен и во-вторых, интерполяция в том элементе должна быть выполнена с помощью функций формы элемента и значений решения в точках узла элемента.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.