Прежде чем вы создадите граничные условия, необходимо создать контейнер PDEModel. Для получения дополнительной информации смотрите, Решают проблемы Используя Устаревшие Объекты PDEModel. Предположим, что у вас есть контейнер под названием model, и что геометрия хранится в model. Исследуйте геометрию, чтобы видеть метку каждого ребра или поверхности.
pdegplot(model,'EdgeLabels','on') % for 2-D pdegplot(model,'FaceLabels','on') % for 3-D
Теперь можно задать граничные условия для каждого ребра или поверхности. Если у вас есть система УЧП, можно установить различное граничное условие для каждого компонента на каждом граничном ребре или поверхности. Если граничное условие является функцией положения, время или решение u, условия границы множества при помощи синтаксиса в Непостоянных Граничных условиях.
Если вы не задаете граничное условие для ребра или поверхности, значением по умолчанию является Нейманово граничное условие с нулевыми значениями для 'g' и 'q'.
Граничное условие Дирихле подразумевает, что решение 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 числовая матрица или вектор длины N 2 соответствия линейной форме индексации N-by-N матрица. Для получения дополнительной информации о линейной форме индексации, смотрите Индексацию массива (MATLAB). Если вы не задаете '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.
Неймановы граничные условия для системы УЧП . Для 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 числовая матрица или вектор длины N 2 соответствия линейной форме индексации N-by-N матрица. Для получения дополнительной информации о линейной форме индексации, смотрите Индексацию массива (MATLAB). Если вы не задаете '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)Решатели Partial Differential Equation Toolbox™ передают location и данные state к вашей функции.
местоположение Структура, содержащая следующие поля. Если вы передаете пару "имя-значение" 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' — N 2 M матрицей, где каждый столбец соответствует одной точке оценки через линейную индексацию базового N-by-N матрица и M, является количеством точек оценки. Также N-by-N-by-M массив, где каждой точкой оценки является N-by-N матрица. Для получения дополнительной информации о линейной индексации, смотрите Индексацию массива (MATLAB).
Если граничные условия зависят от state.u или state.time, гарантируют, что ваша функция возвращает матрицу NaN правильного размера, когда state.u или state.time является NaN. Решатели проверяют, является ли проблема нелинейной или зависящей от времени путем передачи значений состояния NaN и поиска возвращенных значений NaN.