Прежде чем вы создадите граничные условия, необходимо создать PDEModel
контейнер. Для получения дополнительной информации смотрите Решают задачи Используя Объекты PDEModel. Предположим, что у вас есть контейнер под названием model
, и что геометрия хранится в model
. Исследуйте геометрию, чтобы видеть метку каждого ребра или поверхности.
pdegplot(model,'EdgeLabels','on') % for 2-D pdegplot(model,'FaceLabels','on') % for 3-D
Теперь можно задать граничные условия для каждого ребра или поверхности. Если у вас есть система УЧП, можно установить различное граничное условие для каждого компонента на каждом граничном ребре или поверхности.
Если вы не задаете граничное условие для ребра или поверхности, значением по умолчанию является Нейманово граничное условие с нулевыми значениями для '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]
удовлетворяет уравнению 2u = 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
.
Граничное условие Дирихле для системы УЧП является 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]);
'u'
и 'EquationIndex'
аргументы должны иметь ту же длину.
Если вы исключаете 'EquationIndex'
аргумент, 'u'
аргумент должен иметь длину N.
Если вы исключаете 'u'
аргумент, applyBoundaryCondition
устанавливает компоненты в 'EquationIndex'
к 0
.
Предположим, что у вас есть модель PDE под названием model
, и ребро или поверхность маркируют [e1,e2,e3]
где первые, вторые, и третьи компоненты решения u должны удовлетворить уравнениям 2u1 = 3, 4u2 = 5, и 6u3 = 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);
'r'
параметр должен быть числовым вектором из длины N. Если вы не задаете 'r'
, applyBoundaryCondition
устанавливает значения к 0
.
'h'
параметром может быть N-by-N числовая матрица или вектор из длины N2 соответствие линейной форме индексации N-by-N матрица. Для получения дополнительной информации о линейной форме индексации, смотрите Индексацию массива. Если вы не задаете 'h'
, applyBoundaryCondition
устанавливает значение к единичной матрице.
Обобщенные Неймановы граничные условия подразумевают, что решение u на ребре или поверхности удовлетворяет уравнению
Коэффициент c совпадает с коэффициентом дифференциального оператора второго порядка в уравнении PDE
исходящий нормальный модуль. 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
.
Неймановы граничные условия для системы УЧП . Для 2D систем, обозначения означает 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);
'g'
параметр должен быть числовым вектором из длины N. Если вы не задаете 'g'
, applyBoundaryCondition
устанавливает значения к 0
.
'q'
параметром может быть N-by-N числовая матрица или вектор из длины N2 соответствие линейной форме индексации N-by-N матрица. Для получения дополнительной информации о линейной форме индексации, смотрите Индексацию массива. Если вы не задаете 'q'
, applyBoundaryCondition
устанавливает значения к 0
.
Если некоторые уравнения в вашей системе УЧП должны удовлетворить граничному условию Дирихле, и некоторые должны удовлетворить Неймановому граничному условию для той же геометрической области, использовать '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 должен удовлетворить граничному условию Дирихле 2u1 = 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)
solvepde
или solvepdeeig
вычислите и заполните данные в location
и state
массивы структур и передача эти данные к вашей функции. Можно задать функцию так, чтобы ее выход зависел от этих данных. Можно использовать любые имена вместо location
и state
, но функция должна иметь точно два аргумента. Чтобы использовать дополнительные аргументы в вашей функции, перенесите свою функцию (который берет дополнительные аргументы) с анонимной функцией, которая берет только location
и state
аргументы. Например:
uVal = ... @(location,state) myfunWithAdditionalArgs(location,state,arg1,arg2...) applyBoundaryCondition(model,'mixed', ... 'Edge',[3,4], ... 'u',uVal, ... 'EquationIndex',[2,3]);
location
— Структура, содержащая следующие поля. Если вы передаете пару "имя-значение" applyBoundaryCondition
с Vectorized
установите на 'on'
, затем location
может содержать несколько точек оценки. Если вы не устанавливаете Vectorized
или используйте Vectorized,'off'
, затем решатели передают всего одну точку оценки в каждом вызове.
location.x
— X-координата точки или точек
location.y
— Y-координата точки или точек
location.z
— Для 3-D геометрии, z-координаты точки или точек
Кроме того, если существуют Неймановы условия, то решатели передают следующие данные в location
структура.
location.nx
— x-компонент вектора нормали в точке оценки или точках
location.ny
— y-компонент вектора нормали в точке оценки или точках
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- 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
значения.