specifyCoefficients
В этом разделе описывается, как записать коэффициент c
в уравнениях, таких как
Тема относится к рекомендуемому рабочему процессу для включения коэффициентов в вашу модель с помощью specifyCoefficients
.
Для 2-D систем c
является тензором с 4 N2 элементы. Для 3-D систем c
является тензором с 9 N2 элементы. Для получения определения элементов тензора смотрите Определение элемента c Tensor Elements. N количество уравнений, см. Уравнения, которые вы можете решить используя PDE Toolbox.
Чтобы записать коэффициент c
для включения в модель PDE через specifyCoefficients
, дайте c
как одно из следующих:
Если c
является постоянным, дайте вектор-столбец, представляющую элементы в тензоре.
Если c
не является постоянным, задайте указатель на функцию. Функция должна иметь вид
ccoeffunction(location,state)
solvepde
или solvepdeeig
передайте location
и state
структуры, для ccoeffunction
. Функция должна вернуть матрицу размера N 1-by- Nr, где:
N 1 является длиной вектора, представляющего c
коэффициент. Существует несколько возможных значений N 1, подробно описанных в Некоторых Векторах C, которые могут быть Короткими. Для 2-D геометрии 1 ≤ N 1 ≤ 4 N2и для 3-D геометрии 1 ≤ N 1 ≤ 9 N2.
Nr - число точек в местоположении, которое проходит решатель. Nr равно длине location.x
или любой другой location
поле. Функция должна оценивать c
в этих точках.
Для 2-D систем обозначение представляет N -by-1 матрицу с (i, 1) - компонент
Для 3-D систем обозначение представляет N -by-1 матрицу с (i, 1) - компонент
Все представления c
коэффициент начинается с «уплощения» тензора в матрицу. Для 2-D систем N -by N -by-2-by-2 тензор уплощается к 2 N -by-2 N матрице, где матрица логически является N-by N матрицей блоков 2 на 2.
Для 3-D систем N -by N -by-3-by-3 тензор уплощается к 3 N -by-3 N матрице, где матрица логически является N-by N матрицей блоков 3 на 3.
Эти матрицы далее уплощаются в вектор-столбец. Сначала N -by - N матрицы блоков 2 на 2 и 3 на 3 преобразуются в «векторы» блоков 2 на 2 и 3 на 3. Затем блоки превращаются в векторы обычным столбцовым способом.
Вектор коэффициентов c
относится к тензору с следующим образом. Для 2-D систем,
Коэффициент c (i, j, k, l) находится в строке (4 N ( j - 1) + 4 i + 2 l + k - 6) вектора c
.
Для 3-D систем,
Коэффициент c (i, j, k, l) находится в строке (9 N ( j - 1) + 9 i + 3 l + k - 12) вектора c
.
Часто ваш тензор c имеет структуру, такую как симметричная или блочная диагональ. Во многих случаях можно представлять c с помощью меньшего вектора, чем с 4 N2 компоненты для 2-D или 9 N2 компоненты для 3-D. В следующих разделах приведены возможности.
Скаляр c, 2-D системы. Программное обеспечение интерпретирует скаляр c как диагональную матрицу, с c (i, i, 1,1) и c (i, i, 2,2) равный скаляру и всем другим записям 0.
Двухэлементный вектор-столбец c, 2-D систем. Программное обеспечение интерпретирует вектор - столбец с двумя элементами c как диагональную матрицу, с c (i, i, 1,1) и c (i, i, 2,2) как эти два записей и все другие записи 0.
Трехэлементный вектор-столбец c, 2-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, 2-D систем. Программа интерпретирует четырехэлементный вектор-столбец c как блочную диагональную матрицу.
N-элемент Вектора-столбца c, 2-D системы. Программа интерпретирует вектор-столбец N c как диагональную матрицу.
Внимание
Если N = 2, 3 или 4, векторная форма 2-, 3- или 4-элементного столбца имеет приоритет над формой N -элемент. Для примера, если N = 3, и у вас есть c матрица вида
вы не можете использовать N -элемент форму c. Вместо этого необходимо использовать форму 2 N - элемент. Если вы даете c как вектор [c1;c2;c3]
программное обеспечение интерпретирует c
как 3-элементная форма:
Вместо этого используйте форму
2 N - элемент [c1;c1;c2;c2;c3;c3]
.
2N-Element Вектор-столбец c, 2-D Systems. Программа интерпретирует вектор N столбцом 2-х c как диагональную матрицу.
Внимание
Если N = 2, форма с 4 элементами имеет приоритет над формой 2 N -element. Для примера, если ваша c матрица
вы не можете дать c как [c1;c2;c3;c4]
, потому что программа интерпретирует этот вектор как 4-элементную форму
Вместо этого используйте форму
3 N - элемент [c1;0;c2;c3;0;c4]
или форма 4 N - элемент [c1;0;0;c2;c3;0;0;c4]
.
3N-Element Вектор-столбец c, 2-D Systems. Программа интерпретирует вектор N столбцом 3-х c как симметричную блочную диагональную матрицу.
Коэффициент c (i, j, k, l) последовательно (3 i + k + l - 4) вектора c
.
4N-Element Вектор-столбец c, 2-D Systems. Программа интерпретирует вектор N столбцом 4-х c как блочную диагональную матрицу.
Коэффициент c (i, j, k, l) находится в строке ( 4 i + 2 l + k - 6) вектора c
.
2N (2N + 1 )/ 2-Element Вектор-столбец c, 2-D Systems. Программа интерпретирует вектор-столбец с 2 N (2 N + 1 )/2 элементами c как симметричную матрицу. На следующей схеме • означает, что запись симметрична.
Коэффициент c (i, j, k, l), для i < j, в строке (2 j2 - 3 j + 4 i + 2 l + k - 5) вектора c
. Для i = j, коэффициент c (i, j, k, l) последовательно (2 i2 + i + l + k - 4) вектора c
.
4 Н2- Вектор-столбец элемента c, 2-D системы. Программное обеспечение интерпретирует 4 N2-элементный вектор-столбец, c как матрица.
Коэффициент c (i, j, k, l) находится в строке (4 N ( j - 1) + 4 i + 2 l + 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-элементная форма:
Вместо этого используйте одну из следующих форм:
6 N - элемент форма - [c1;0;c1;0;0;c1;c2;0;c2;0;0;c2;c3;0;c3;0;0;c3]
9 N - элемент форма - [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-Element Вектор-столбец c, 3-D Systems. Программа интерпретирует вектор N столбцом 3-х c как диагональную матрицу.
Внимание
Если N = 3, форма с 9 элементами имеет приоритет над формой 3 N - элемент. Для примера, если ваша c матрица
вы не можете дать c как [c1;c2;c3;c4;c5;c6;c7;c8;c9]
, потому что программа интерпретирует этот вектор как форму с 9 элементами
Вместо этого используйте одну из следующих форм:
6 N - элемент форма - [c1;0;c2;0;0;c3;c4;0;c5;0;0;c6;c7;0;c8;0;0;c9]
9 N - элемент форма - [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-Element Вектор-столбец c, 3-D Systems. Программа интерпретирует 6 N элементный вектор-столбец c как симметричную блочную диагональную матрицу. На следующей схеме • означает, что запись симметрична.
Коэффициент c (i, j, k, l) находится в строке ( 6 i + k + 1/2 l (l -1) -6) вектора c
.
9N-Element Вектор-столбец c, 3-D Systems. Программа интерпретирует вектор-столбец N 9-тью c как блочную диагональную матрицу.
Коэффициент c (i, j, k, l) находится в строке ( 9 i + 3 l + k - 12) вектора c
.
3N (3N + 1 )/ 2-Element Вектор-столбец c, 3-D Systems. Программа интерпретирует вектор-столбец с 3 N (3 N + 1 )/2 элементами c как симметричную матрицу. На следующей схеме • означает, что запись симметрична.
Коэффициент c (i, j, k, l), для i < j, находится в строке (9 (j -1) (j -2 )/2 + 6 (j -1 ) + 9 i + 3 l + k - 12) вектора c
. Для i = j, коэффициент c (i, j, k, l) является последовательно (9 (i-1) (i-2 ) /2 + 15 (i -1) + 1/2 <reservedrangesplaceholder3> (l-1) + k) вектора c
.
9 Н2- Вектор-столбец элемента c, 3-D системы. Программное обеспечение интерпретирует 9 N2-элементный вектор-столбец, c как матрица.
Коэффициент c (i, j, k, l) находится в строке (9 N ( j - 1) + 9 i + 3 l + k - 12) вектора c
.
Если ваш c
коэффициент не является постоянным, представлять его как функцию вида
ccoeffunction(location,state)
solvepde
или solvepdeeig
передайте location
и state
структуры, для ccoeffunction
. Функция должна вернуть матрицу размера N 1-by- Nr, где:
N 1 - это количество коэффициентов, которые вы передаете решателю. Существует несколько возможных значений N 1, подробно описанных в Некоторых Векторах C, которые могут быть Короткими. Для 2-D геометрии 1 ≤ N 1 ≤ 4 N2и для 3-D геометрии 1 ≤ N 1 ≤ 9 N2.
Nr - число точек в местоположении, которое проходит решатель. Nr равно длине location.x
или любой другой location
поле. Функция должна оценивать c
в этих точках.
Передайте коэффициент в specifyCoefficients
как указатель на функцию, такой как
specifyCoefficients(model,'c',@ccoeffunction,...)
location
- структура с этими полями:
location.x
location.y
location.z
location.subdomain
Поля x
, y
, и z
представлять x -, y - и z - координаты точек, для которых ваша функция вычисляет значения коэффициентов. The subdomain
поле представляет числа поддоменов, которые в настоящее время применяются только к 2-D моделям. Поля местоположения являются векторами-строками.
state
- структура с этими полями:
state.u
state.ux
state.uy
state.uz
state.time
The state.u
поле представляет текущее значение u решения. The state.ux
, state.uy
, и state.uz
области - оценки частных производных решения ( <reservedrangesplaceholder8> / <reservedrangesplaceholder7>, <reservedrangesplaceholder6> / <reservedrangesplaceholder5> и <reservedrangesplaceholder4> / <reservedrangesplaceholder3>) в соответствующих точках структуры местоположения. Решения и оценки градиента являются N -by Nr матрицами. The state.time
поле является скаляром, представляющим время для зависящих от времени моделей.
Например, предположим N = 3, и у вас есть 2-D геометрия. Предположим, что вы c
матрица имеет вид
где отсутствующие элементы равны нулю. Здесь s 1 (x, y) равен 5 в субдомене 1 и равен 10 в субдомене 2.
Этот c
является симметричной, блок-диагональной матрицей с различными коэффициентами в каждом блоке. Поэтому естественно представлять c
как 3N-Element вектор-столбец c, 2-D Systems:
Для этой формы подходит следующая функция.
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,...