specifyCoefficients
Эта тема описывает, как записать коэффициенту c
в уравнениях такой как
Тема применяется к рекомендуемому рабочему процессу за включение коэффициентов в вашем использовании модели specifyCoefficients
.
Для 2D систем, c
тензор с 4N2 элементы. Для 3-D систем, c
тензор с 9N2 элементы. Для определения элементов тензора см. Определение c Элементов Tensor. N является количеством уравнений, смотрите уравнения, которые Можно Решить Используя Тулбокс УЧП.
Записать коэффициенту c
для включения в модель PDE через specifyCoefficients
, дайте c
как любое из следующего:
Если c
является постоянным, дайте вектор-столбец, представляющий элементы в тензоре.
Если c
не является постоянным, дайте указатель на функцию. Функция должна иметь форму
ccoeffunction(location,state)
solvepde
или solvepdeeig
передайте location
и state
структуры к ccoeffunction
. Функция должна возвратить матрицу размера N 1 Nr, где:
N 1 является длиной вектора, представляющего c
коэффициент. Существует несколько возможных значений N 1, подробный в Некоторых c Векторах Может Быть Коротким. Для 2D геометрии, 1 ≤ N 1 ≤ 4N2, и для 3-D геометрии, 1 ≤ N 1 ≤ 9N2.
Nr является числом точек в месте, которое передает решатель. Nr равен длине location.x
или любой другой location
поле . Функция должна оценить c
в этих точках.
Для 2D систем, обозначения представляет N-by-1 матрица с (i, 1) - компонент
Для 3-D систем, обозначения представляет N-by-1 матрица с (i, 1) - компонент
Все представления c
коэффициент начинается с “выравнивания” тензора к матрице. Для 2D систем N-by-N-by-2-by-2 тензор сглаживается к матрице 2N-by-2N, где матрицей является логически N-by-N матрица блоков 2 на 2.
Для 3-D систем N-by-N-by-3-by-3 тензор сглаживается к матрице 3N-by-3N, где матрицей является логически N-by-N матрица 3х3 блоков.
Эти матрицы далее сглажены в вектор-столбец. Сначала N-by-N матрицы и 3х3 блоков 2 на 2 преобразовывается в "векторы" из и 3х3 блоков 2 на 2. Затем блоки превращены в векторы обычным постолбцовым способом.
Вектор коэффициентов c
относится к тензору c можно следующим образом. Для 2D систем,
Коэффициентом c (i, j, k, l) является последовательно (4N (j –1) + 4i + 2l + k – 6) векторного c
.
Для 3-D систем,
Коэффициентом c (i, j, k, l) является последовательно (9N (j –1) + 9i + 3l + k – 12) векторного c
.
Часто, ваш тензор c имеет структуру, такой как симметричную или диагональ блока. Во многих случаях можно представлять c использование меньшего вектора, чем один с 4N2 компоненты для 2D или 9N2 компоненты для 3-D. Следующие разделы дают возможности.
Скаляр c, 2D Системы. Программное обеспечение интерпретирует скалярный c как диагональную матрицу, с c (i, i, 1,1) и c (i, i, 2,2) равный скаляру и всем другим записям 0.
Двухэлементный Вектор-столбец c, 2D Системы. Программное обеспечение интерпретирует двухэлементный вектор-столбец c как диагональная матрица, с c (i, i, 1,1) и c (i, i, 2,2) как эти две записи и все другие записи 0.
Трехэлементный Вектор-столбец c, 2D Системы. Программное обеспечение интерпретирует трехэлементный вектор-столбец c как симметричная матрица диагонали блока, с c (i, i, 1,1) = c (1), c (i, i, 2,2) = c (3), и c (i, i, 1,2) = c (i, i, 2,1) = c (2).
Четырехэлементный Вектор-столбец c, 2D Системы. Программное обеспечение интерпретирует четырехэлементный вектор-столбец c как матрица диагонали блока.
Вектор-столбец N-элемента c, 2D Системы. Программное обеспечение интерпретирует N - вектор-столбец элемента c как диагональная матрица.
Внимание
Если N = 2, 3, или 4, 2-, 3-, или форма вектор-столбца с 4 элементами более приоритетен по сравнению с N - форма элемента. Например, если N = 3, и у вас есть матрица c формы
вы не можете использовать N - форма элемента c. Вместо этого необходимо использовать форму 2N-элемента. Если вы даете c как векторный [c1;c2;c3]
, программное обеспечение интерпретирует c
как форма с 3 элементами:
Вместо этого используйте форму 2N-элемента [c1;c1;c2;c2;c3;c3]
.
Вектор-столбец 2N-элемента c, 2D Системы. Программное обеспечение интерпретирует вектор-столбец 2N-элемента c как диагональная матрица.
Внимание
Если N = 2, форма с 4 элементами более приоритетна по сравнению с формой 2N-элемента. Например, если ваша матрица c
вы не можете дать c как [c1;c2;c3;c4]
, потому что программное обеспечение интерпретирует этот вектор как форму с 4 элементами
Вместо этого используйте форму 3N-элемента [c1;0;c2;c3;0;c4]
или 4N-элемент формирует [c1;0;0;c2;c3;0;0;c4]
.
Вектор-столбец 3N-элемента c, 2D Системы. Программное обеспечение интерпретирует вектор-столбец 3N-элемента c как симметричная матрица диагонали блока.
Коэффициент c (i, j, k, l) последовательно (3i + k + l – 4) векторного c
.
Вектор-столбец 4N-элемента c, 2D Системы. Программное обеспечение интерпретирует вектор-столбец 4N-элемента c как матрица диагонали блока.
Коэффициент c (i, j, k, l) последовательно (4i + 2l + k – 6) векторного c
.
2 Н (2N+1)/2-Element Вектор-столбец c, 2D Системы. Программное обеспечение интерпретирует 2N (2N+1)/2-element вектор-столбец c как симметрическая матрица. В следующей схеме, • означает, что запись симметрична.
Коэффициент c (i, j, k, l), для i < j, последовательно (2j2 – 3j + 4i + 2l + k – 5) векторного c
. Для i = j, коэффициент c (i, j, k, l) последовательно (2i2 + i + l + k – 4) векторного c
.
4 Н2- Вектор-столбец элемента c, 2D Системы. Программное обеспечение интерпретирует 4N2- вектор-столбец элемента c как матрица.
Коэффициентом c (i, j, k, l) является последовательно (4N (j –1) + 4i + 2l + k – 6) векторного c
.
Скаляр c, 3-D Системы. Программное обеспечение интерпретирует скалярный c как диагональную матрицу, с c (i, i, 1,1), c (i, i, 2,2), и c (i, i, 3,3) равный скаляру и всем другим записям 0.
Трехэлементный Вектор-столбец c, 3-D Системы. Программное обеспечение интерпретирует трехэлементный вектор-столбец c как диагональная матрица, с c (i, i, 1,1), c (i, i, 2,2), и c (i, i, 3,3) как эти три записи и все другие записи 0.
Вектор-столбец с шестью элементами c, 3-D Системы. Программное обеспечение интерпретирует вектор-столбец с шестью элементами c как симметричная матрица диагонали блока, с
c (i, i, 1,1) = c (1)
c (i, i, 2,2) = c (3)
c (i, i, 1,2) = c (i, i, 2,1) = c (2)
c (i, i, 1,3) = c (i, i, 3,1) = c (4)
c (i, i, 2,3) = c (i, i, 3,2) = c (5)
c (i, i, 3,3) = c (6).
В следующей схеме, • означает, что запись симметрична.
Вектор-столбец с девятью элементами c, 3-D Системы. Программное обеспечение интерпретирует вектор-столбец с девятью элементами c как матрица диагонали блока.
Вектор-столбец N-элемента c, 3-D Системы. Программное обеспечение интерпретирует N - вектор-столбец элемента c как диагональная матрица.
Внимание
Если N = 3, 6, или 9, 3-, 6-, или форма вектор-столбца с 9 элементами более приоритетен по сравнению с N - форма элемента. Например, если N = 3, и у вас есть матрица c формы
вы не можете использовать N - форма элемента c. Если вы даете c как векторный [c1;c2;c3]
, программное обеспечение интерпретирует c
как форма с 3 элементами:
Вместо этого используйте одну из следующих форм:
Форма 6N-элемента — [c1;0;c1;0;0;c1;c2;0;c2;0;0;c2;c3;0;c3;0;0;c3]
Форма 9N-элемента — [c1;0;0;0;c1;0;0;0;c1;c2;0;0;0;c2;0;0;0;c2;c3;0;0;0;c3;0;0;0;c3]
Вектор-столбец 3N-элемента c, 3-D Системы. Программное обеспечение интерпретирует вектор-столбец 3N-элемента c как диагональная матрица.
Внимание
Если N = 3, форма с 9 элементами более приоритетна по сравнению с формой 3N-элемента. Например, если ваша матрица c
вы не можете дать c как [c1;c2;c3;c4;c5;c6;c7;c8;c9]
, потому что программное обеспечение интерпретирует этот вектор как форму с 9 элементами
Вместо этого используйте одну из следующих форм:
Форма 6N-элемента — [c1;0;c2;0;0;c3;c4;0;c5;0;0;c6;c7;0;c8;0;0;c9]
Форма 9N-элемента — [c1;0;0;0;c2;0;0;0;c3;c4;0;0;0;c5;0;0;0;c6;c7;0;0;0;c8;0;0;0;c9]
Вектор-столбец 6N-элемента c, 3-D Системы. Программное обеспечение интерпретирует вектор-столбец 6N-элемента c как симметричная матрица диагонали блока. В следующей схеме, • означает, что запись симметрична.
Коэффициент c (i, j, k, l) последовательно (6i + k + 1/2l (l –1) – 6) векторного c
.
Вектор-столбец 9N-элемента c, 3-D Системы. Программное обеспечение интерпретирует вектор-столбец 9N-элемента c как матрица диагонали блока.
Коэффициент c (i, j, k, l) последовательно (9i + 3l + k – 12) векторного c
.
3 Н (3N+1)/2-Element Вектор-столбец c, 3-D Системы. Программное обеспечение интерпретирует 3N (3N+1)/2-element вектор-столбец c как симметрическая матрица. В следующей схеме, • означает, что запись симметрична.
Коэффициентом c (i, j, k, l), для i < j, является последовательно (9 (j –1) (j –2)/2 + 6 (j –1) + 9i + 3l + k – 12) векторного c
. Для i = j, коэффициент c (i, j, k, l) является последовательно (9 (i –1) (i –2)/2 + 15 (i –1) + 1/2l (l –1) + k) векторного c
.
9 Н2- Вектор-столбец элемента c, 3-D Системы. Программное обеспечение интерпретирует 9N2- вектор-столбец элемента c как матрица.
Коэффициентом c (i, j, k, l) является последовательно (9N (j –1) + 9i + 3l + k – 12) векторного c
.
Если ваш c
коэффициент не является постоянным, представляйте его в зависимости от формы
ccoeff = ccoeffunction(location,state)
Передайте коэффициент specifyCoefficients
как указатель на функцию, такой как
specifyCoefficients(model,'c',@ccoeffunction,...)
solvepde
или solvepdeeig
вычислите и заполните данные в location
и state
массивы структур и передача эти данные к вашей функции. Можно задать функцию так, чтобы ее выход зависел от этих данных. Можно использовать любые имена вместо location
и state
, но функция должна иметь точно два аргумента. Чтобы использовать дополнительные аргументы в вашей функции, перенесите свою функцию (который берет дополнительные аргументы) с анонимной функцией, которая берет только location
и state
аргументы. Например:
ccoeff = ... @(location,state) myfunWithAdditionalArgs(location,state,arg1,arg2...) specifyCoefficients(model,'c',ccoeff,...
location
структура с этими полями:
location.x
location.y
location.z
location.subdomain
Поля x
Y
, и z
представляйте x - y - и z - координаты точек, для которых ваша функция вычисляет содействующие значения. subdomain
поле представляет числа субдомена, которые в настоящее время применяются только к 2D моделям. Поля местоположения являются векторами-строками.
state
структура с этими полями:
state.u
state.ux
state.uy
state.uz
state.time
state.u
поле представляет текущее значение решения u. state.ux
, state.uy
, и state.uz
поля являются оценками частных производных решения (∂u / ∂ x, ∂u / ∂ y и ∂u / ∂ z) в соответствующих точках структуры местоположения. Решением и оценками градиента является N-by-Nr матрицы. state.time
поле является скалярным временем представления для зависящих от времени моделей.
Ваша функция должна возвратить матрицу размера N 1 Nr, где:
N 1 является количеством коэффициентов, которые вы передаете решателю. Существует несколько возможных значений N 1, подробный в Некоторых c Векторах Может Быть Коротким. Для 2D геометрии, 1 ≤ N 1 ≤ 4N2, и для 3-D геометрии, 1 ≤ N 1 ≤ 9N2.
Nr является числом точек в месте, которое передает решатель. Nr равен длине location.x
или любой другой location
поле . Функция должна оценить c
в этих точках.
Например, предположите N = 3, и у вас есть 2D геометрия. Предположим свой c
матрица имеет форму
где не включенными в список элементами является нуль. Здесь s 1 (x, y) 5 в субдомене 1 и 10 в субдомене 2.
Этот c
симметричная, блочно диагональная матрица с различными коэффициентами в каждом блоке. Таким образом, естественно представлять c
как Вектор-столбец 3N-элемента c, 2D Системы:
Для той формы следующая функция является соответствующей.
function cmatrix = ccoeffunction(location,state)
n1 = 9;
nr = numel(location.x);
cmatrix = zeros(n1,nr);
cmatrix(1,:) = ones(1,nr);
cmatrix(2,:) = 2*ones(1,nr);
cmatrix(3,:) = 8*ones(1,nr);
cmatrix(4,:) = 1+location.x.^2 + location.y.^2;
cmatrix(5,:) = state.u(2,:)./(1 + state.u(1,:).^2 + state.u(3,:).^2);
cmatrix(6,:) = cmatrix(4,:);
cmatrix(7,:) = 5*location.subdomain;
cmatrix(8,:) = -ones(1,nr);
cmatrix(9,:) = cmatrix(7,:);
Включать эту функцию как ваш c
коэффициент, передайте указатель на функцию @ccoeffunction
:
specifyCoefficients(model,'c',@ccoeffunction,...