Задайте граничные условия

Прежде чем вы создадите граничные условия, необходимо создать 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 на ребре или поверхности удовлетворяет уравнению

n·(cu)+qu=g

Коэффициент c совпадает с коэффициентом дифференциального оператора второго порядка в уравнении PDE

(cu)+au=f on domain Ω

n исходящий нормальный модуль. 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.

Системы УЧП

Неймановы граничные условия для системы УЧП n·(cu)+qu=g. Для 2D систем, обозначения n·(cu) означает N-by-1 вектор с (i, 1) - компонент

j=1N(cos(α)ci,j,1,1x+cos(α)ci,j,1,2y+sin(α)ci,j,2,1x+sin(α)ci,j,2,2y)uj

где исходящий вектор нормали контура n=(cos(α),sin(α)).

Для 3-D систем, обозначения n·(cu) означает N-by-1 вектор с (i, 1) - компонент

j=1N(sin(φ)cos(θ)ci,j,1,1x+sin(φ)cos(θ)ci,j,1,2y+sin(φ)cos(θ)ci,j,1,3z)uj+j=1N(sin(φ)sin(θ)ci,j,2,1x+sin(φ)sin(θ)ci,j,2,2y+sin(φ)sin(θ)ci,j,2,3z)uj+j=1N(cos(θ)ci,j,3,1x+cos(θ)ci,j,3,2y+cos(θ)ci,j,3,3z)uj

где исходящий вектор нормали контура n=(sin(φ)cos(θ),sin(φ)sin(θ),cos(φ)). Для каждого ребра или сегмента поверхности, существуют в общей сложности граничные условия 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.xX-координата точки или точек

    • location.yY-координата точки или точек

    • location.z — Для 3-D геометрии, z-координаты точки или точек

    Кроме того, если существуют Неймановы условия, то решатели передают следующие данные в location структура.

    • location.nxx-компонент вектора нормали в точке оценки или точках

    • location.nyy-компонент вектора нормали в точке оценки или точках

    • 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 значения.

Смотрите решают УЧП с непостоянными граничными условиями.