Перед созданием граничных условий необходимо создать PDEModel
контейнер. Для получения дополнительной информации см. раздел «Решение проблем с использованием объектов PDEModel». Предположим, что у вас есть контейнер с именем model
, и что геометрия сохранена в model
. Осмотрите геометрию, чтобы увидеть метки каждого ребра или грани.
pdegplot(model,'EdgeLabels','on') % for 2-D pdegplot(model,'FaceLabels','on') % for 3-D
Теперь можно задать граничные условия для каждого ребра или грани. Если у вас есть система PDE, можно задать различные граничные условия для каждого компонента на каждом краевом ребре или грани.
Если вы не задаете граничное условие для ребра или грани, по умолчанию это граничное условие Неймана с нулевыми значениями для 'g'
и 'q'
.
Если граничное условие является функцией положения, времени или u решения, установите граничные условия с помощью синтаксиса в неконстантных граничных условиях.
Граничное условие Дирихле подразумевает, что решение, u на конкретном ребре или грани, удовлетворяет уравнению
hu = r,
где h и r являются функциями, заданными на ∂, и могут быть функциями пространства (x, y и, в 3-D, z), u решения и, для зависящих от времени уравнений, времени. Часто вы принимаете h = 1 и устанавливаете r на соответствующее значение. Можно задать граничные условия Дирихле как значение решения u
на контуре или как пара параметров h
и r
.
Предположим, что у вас есть модель PDE с именем model
, и ребра или грани [e1,e2,e3]
, где u решения должна быть равной 2
. Задайте это граничное условие следующим образом.
% For 3-D geometry: applyBoundaryCondition(model,'dirichlet','Face',[e1,e2,e3],'u',2); % For 2-D geometry: applyBoundaryCondition(model,'dirichlet','Edge',[e1,e2,e3],'u',2);
Если решение на ребрах или гранях [e1,e2,e3]
удовлетворяет уравнению 2 u = 3, задает граничное условие следующим образом.
% For 3-D geometry: applyBoundaryCondition(model,'dirichlet','Face',[e1,e2,e3],'r',3,'h',2); % For 2-D geometry: applyBoundaryCondition(model,'dirichlet','Edge',[e1,e2,e3],'r',3,'h',2);
Если вы не задаете 'r'
, applyBoundaryCondition
устанавливает его значение равным 0
.
Если вы не задаете 'h'
, applyBoundaryCondition
устанавливает его значение равным 1
.
Условие контура Дирихле для системы PDE является hu = r, где h является матрицей, u является решением вектором, а r является вектором.
Предположим, что у вас есть модель PDE с именем model
, и метки ребра или грани [e1,e2,e3]
где первый компонент u решения должен равняться 1
, в то время как второй и третий компоненты должны равняться 2
. Задайте это граничное условие следующим образом.
% For 3-D geometry: applyBoundaryCondition(model,'dirichlet','Face',[e1,e2,e3],... 'u',[1,2,2],'EquationIndex',[1,2,3]); % For 2-D geometry: applyBoundaryCondition(model,'dirichlet','Edge',[e1,e2,e3],... 'u',[1,2,2],'EquationIndex',[1,2,3]);
The 'u'
и 'EquationIndex'
аргументы должны иметь одинаковую длину.
Если вы исключаете 'EquationIndex'
аргумент, 'u'
аргумент должен иметь N длины.
Если вы исключаете 'u'
аргумент, applyBoundaryCondition
устанавливает компоненты в 'EquationIndex'
на 0
.
Предположим, что у вас есть модель PDE с именем model
, и метки ребра или грани [e1,e2,e3]
где первый, второй и третий компоненты u решения должны удовлетворять уравнениям 2 u1 = 3, 4 u2 = 5 и 6 u3 = 7, соответственно. Задайте это граничное условие следующим образом.
H0 = [2 0 0; 0 4 0; 0 0 6]; R0 = [3;5;7]; % For 3-D geometry: applyBoundaryCondition(model,'dirichlet', ... 'Face',[e1,e2,e3], ... 'h',H0,'r',R0); % For 2-D geometry: applyBoundaryCondition(model,'dirichlet', ... 'Edge',[e1,e2,e3], ... 'h',H0,'r',R0);
The 'r'
параметр должен быть числовым вектором длины N. Если вы не задаете 'r'
, applyBoundaryCondition
устанавливает значения на 0
.
The 'h'
параметром может быть N -by N числовая матрица или вектор длины N2 соответствует форме линейной индексации матрицы N -by- N. Для получения дополнительной информации о форме линейной индексации см. Раздел Индексация массивов. Если вы не задаете 'h'
, applyBoundaryCondition
устанавливает значение в матрицу тождеств.
Обобщенные граничные условия Неймана подразумевают, что решение, u на краю или грани, удовлетворяет уравнению
c коэффициентов совпадает с коэффициентом дифференциального оператора второго порядка в уравнении УЧП
- внешний модуль нормали. q и g являются функциями, заданными на ∂, и могут быть функциями пространства (x, y и, в 3-D, z), u решения и, для зависящих от времени уравнений, времени.
Предположим, что у вас есть модель PDE с именем model
, и ребра или грани [e1,e2,e3]
где u решения должны удовлетворять граничному условию Неймана с q = 2
и g = 3
. Задайте это граничное условие следующим образом.
% For 3-D geometry: applyBoundaryCondition(model,'neumann','Face',[e1,e2,e3],'q',2,'g',3); % For 2-D geometry: applyBoundaryCondition(model,'neumann','Edge',[e1,e2,e3],'q',2,'g',3);
Если вы не задаете 'g'
, applyBoundaryCondition
устанавливает его значение равным 0
.
Если вы не задаете 'q'
, applyBoundaryCondition
устанавливает его значение равным 0
.
Граничные условия Неймана для системы PDE являются . Для 2-D систем обозначение означает вектор N -by-1 с (i, 1) - компонент
где вектор внешней нормали контура .
Для 3-D систем обозначение означает вектор N -by-1 с (i, 1) - компонент
где вектор внешней нормали контура . Для каждого ребра или грани существует в общей сложности N граничных условий.
Предположим, что у вас есть модель PDE с именем model
, и ребра или грани [e1,e2,e3]
где первый компонент u решения должен удовлетворять граничному условию Неймана с q = 2
и g = 3
, и второй компонент должен удовлетворять граничному условию Неймана с q = 4
и g = 5
. Задайте это граничное условие следующим образом.
Q = [2 0; 0 4]; G = [3;5]; % For 3-D geometry: applyBoundaryCondition(model,'neumann','Face',[e1,e2,e3],'q',Q,'g',G); % For 2-D geometry: applyBoundaryCondition(model,'neumann','Edge',[e1,e2,e3],'q',Q,'g',G);
The 'g'
параметр должен быть числовым вектором длины N. Если вы не задаете 'g'
, applyBoundaryCondition
устанавливает значения на 0
.
The 'q'
параметром может быть N -by N числовая матрица или вектор длины N2 соответствует форме линейной индексации матрицы N -by- N. Для получения дополнительной информации о форме линейной индексации см. Раздел Индексация массивов. Если вы не задаете 'q'
, applyBoundaryCondition
устанавливает значения на 0
.
Если некоторые уравнения в вашей системе PDE должны удовлетворять граничному условию Дирихле, а некоторые должны удовлетворять граничному условию Неймана для той же геометрической области, используйте 'mixed'
параметр для применения граничных условий в одном вызове. Обратите внимание, что applyBoundaryCondition
использует условие контура Неймана по умолчанию с g = 0
и q = 0
для уравнений, для которых вы явным образом не задаете граничное условие.
Предположим, что у вас есть модель PDE с именем model
, и метки ребра или грани [e1,e2,e3]
где первый компонент u решения должен равняться 11
второй компонент должен равняться 22
, и третий компонент должен удовлетворять граничному условию Неймана с q = 3
и g = 4
. Выразите это граничное условие следующим образом.
Q = [0 0 0; 0 0 0; 0 0 3]; G = [0;0;4]; % For 3-D geometry: applyBoundaryCondition(model,'mixed','Face',[e1,e2,e3],... 'u',[11,22],'EquationIndex',[1,2],... 'q',Q,'g',G); % For 2-D geometry: applyBoundaryCondition(model,'mixed',... 'Edge',[e1,e2,e3],'u',[11,22],... 'EquationIndex',[1,2],'q',Q,'g',G);
Предположим, что у вас есть модель PDE с именем model
, и ребра или грани [e1,e2,e3]
где первый компонент u решения должен удовлетворять граничному условию Дирихле 2 u1 = 3, второй компонент должен удовлетворять граничному условию Неймана с q = 4
и g = 5
, и третий компонент должен удовлетворять граничному условию Неймана с q = 6
и g = 7
. Выразите это граничное условие следующим образом.
h = [2 0 0; 0 0 0; 0 0 0]; r = [3;0;0]; Q = [0 0 0; 0 4 0; 0 0 6]; G = [0;5;7]; % For 3-D geometry: applyBoundaryCondition(model,'mixed', ... 'Face',[e1,e2,e3], ... 'h',h,'r',r,'q',Q,'g',G); % For 2-D geometry: applyBoundaryCondition(model,'mixed', ... 'Edge',[e1,e2,e3], ... 'h',h,'r',r,'q',Q,'g',G);
Используйте функции для выражения неконстантных граничных условий.
applyBoundaryCondition(model,'dirichlet', ... 'Edge',1, ... 'r',@myrfun); applyBoundaryCondition(model,'neumann', ... 'Face',2, ... 'g',@mygfun,'q',@myqfun); applyBoundaryCondition(model,'mixed', ... 'Edge',[3,4], ... 'u',@myufun, ... 'EquationIndex',[2,3]);
Каждая функция должна иметь следующий синтаксис.
function bcMatrix = myfun(location,state)
Partial Differential Equation Toolbox™ решатели передают location
и state
данные для вашей функции.
location
- структура, содержащая следующие поля. Если вы передаете паре "имя-значение" в applyBoundaryCondition
с Vectorized
установлено на 'on'
, затем location
может содержать несколько точек оценки. Если вы не устанавливаете Vectorized
или использовать Vectorized,'off'
затем решатели передают всего одну точку оценки в каждом вызове.
location.x
- X-координата точки или точки
location.y
- Y-координата точки или точки
location.z
- Для 3-D геометрии координата Z точки или точки
Кроме того, если существуют условия Неймана, решатели передают следующие данные в location
структура.
location.nx
- x-компонент вектора normal в точке вычисления или точках
location.ny
- y-компонент вектора normal в точке оценки или точках
location.nz
- Для 3-D геометрии, z-компонент вектора нормали в точке вычисления или точках
state
- Для переходных или нелинейных задач.
state.u
содержит вектор решения в точках оценки. state.u
является N -by - M матрицей, где каждый столбец соответствует одной точке оценки, и M является количеством точек оценки.
state.time
содержит время в точках оценки. state.time
является скаляром.
Ваша функция возвращается bcMatrix
. Эта матрица имеет следующую форму, в зависимости от типа граничного условия.
'u'
- N1 -by - M матрица, где каждый столбец соответствует одной точке оценки, и M количество точек оценки. N1 - длина 'EquationIndex'
аргумент. Если нет 'EquationIndex'
аргумент, тогда N1 = N.
'r'
или 'g'
- N -by - M матрица, где каждый столбец соответствует одной точке оценки, и M количество точек оценки.
'h'
или 'q'
— N2-by - M матрица, где каждый столбец соответствует одной точке оценки через линейную индексацию базовой N -by - N матрицы, и M является количеством точек оценки. Кроме того, N -by N -by - M массив, где каждая точка оценки является матрицей N -by - N. Для получения дополнительной информации о линейной индексации см. Раздел Индексация массивов.
Если граничные условия зависят от state.u
или state.time
, убедитесь, что ваша функция возвращает матрицу NaN
правильного размера при state.u
или state.time
являются NaN
. Решатели проверяют, является ли задача нелинейной или зависящей от времени передачей NaN
значения состояний и поиск возвращенных NaN
значения.