specifyCoefficientsВ этом разделе описывается, как записать коэффициент c в таких уравнениях, как
+au=f
Раздел относится к рекомендуемому рабочему процессу для включения коэффициентов в модель с использованием specifyCoefficients.
Для 2-D систем, c - тензор с 4N2 элементами. Для 3-D систем, c - тензор с 9N2 элементами. Определение тензорных элементов см. в разделе Определение тензорных элементов c. N - количество уравнений, см. раздел Уравнения, которые можно решить с помощью панели инструментов PDE.
Для записи коэффициента c для включения в модель PDE через specifyCoefficients, дать c как одно из следующих:
Если c является константой, дает вектор столбца, представляющий элементы в тензоре.
Если c не является постоянной, задайте дескриптор функции. Функция должна иметь вид
ccoeffunction(location,state)
solvepde или solvepdeeig пройти location и state структуры в ccoeffunction. Функция должна возвращать матрицу размера N1-by-Nr, где:
N1 - длина вектора, представляющего c коэффициент. Существует несколько возможных значений N1, подробно описанных в разделе Некоторые c векторы могут быть короткими. Для 2-й геометрии, 1 ≤ N1 ≤ 4N2 , и для 3D геометрии, 1 ≤ N1 ≤ 9N2 .
Nr - количество точек в месте прохождения решателя. Nr равна длине location.x или любой другой location поле. Функция должна оценивать c в этих точках.
Для 2-D систем обозначение ) представляет собой N-by-1 матрицу с (i, 1) -компонентом
uj
Для 3-D систем обозначение ) представляет собой N-by-1 матрицу с (i, 1) -компонентом
∂∂zci,j,3,1∂∂x+∂∂zci,j,3,2∂∂y+∂∂zci,j,3,3∂∂z) uj
Все представления c коэффициент начинается с «сведения» тензора к матрице. Для 2-х систем тензор N на Н на 2 на 2 сглаживается к матрице 2N на 2N, где матрица - логически матрица блоков N на Н 2 на 2.
(N, 1,2,1) c (N, 1,2,2) c (N, 2,2,1) c (N, 2,2,2) ⋯c (N, N, 2,1) c (N, N, 2,2))
Для 3D систем тензор N на Н на 3 на 3 сглаживается к матрице 3N на 3N, где матрица - логически матрица блоков N на Н 3 на 3.
2,2,2) c (N, 2,2,3) ⋯c (N, N, 2,1) c (N, N, 2,2) c (N, N, 2,3) c (N, 1,3,1) c (N, 1,3,2) c (N, 1,3,3) c (N, 2,3,1) c (N, 2,3,2) c (N, 2,3,3) ⋯c (N, N, 3,1) c (N, N, 3,2) c (N, N, 3,3))
Эти матрицы далее сплющиваются в вектор-столбец. Сначала N-на-N матриц блоков 2 на-2 и 3 на-3 преобразуют в «векторы» блоков 2 на-2 и 3 на-3. Затем блоки превращают в векторы обычным столбчатым способом.
Вектор коэффициентов c относится к тензору с следующим образом. Для 2-D систем,
(8N−3) c (8N−1) ⋯c (4N2−3) c (4N2−1) c (4N−2) c (4 Н) c (8N−2) c (8 Н) ⋯c (4N2−2) c (4N2))
Коэффициент c (i, j, k, l) находится в строке (4N ( j-1) + 4i + 2l + k-6) вектораc.
Для 3-D систем,
(9N2−8) c (9N2−5) c (9N2−2) c (9N−7) c (9N−4) c (9N−1) c (18N−7) c (18N−4) c (18N−1) ⋯c (9N2−7) c (9N2−4) c (9N2−1) c (9N−6) c (9N−3) c (9 Н) c (18N−6) c (18N−3) c (18 Н) ⋯c (9N2−6) c (9N2−3) c (9N2))
Коэффициент c (i, j, k, l) находится в строке (9N ( j-1) + 9i + 3l + k-12) вектораc.
Часто тензор c имеет структуру, например симметричную или блок-диагональную. Во многих случаях можно представить c с помощью меньшего вектора, чем вектор с 4N2 компонентами для 2-D или 9N2 компонентами для 3-D. В следующих разделах представлены возможности.
Скаляр c, 2-D Systems. Программное обеспечение интерпретирует скаляр c как диагональную матрицу, где c (i, i, 1,1) и c (i, i, 2,2) равны скаляру, и все остальные элементы 0.
Вектор двухэлементного столбца c, 2-D Systems. Программное обеспечение интерпретирует двухэлементный вектор-столбец c как диагональную матрицу, где c (i, i, 1,1) и c (i, i, 2,2) как две записи, а все остальные записи 0.
00000⋯0c (2))
Вектор трехэлементного столбца c, 2-D Systems. Программное обеспечение интерпретирует трехэлементный вектор-столбец 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) 0000⋯c (2) c (3))
Четырехэлементный вектор столбцов c, 2-D Systems. Программное обеспечение интерпретирует четырехэлементный вектор-столбец c как блок-диагональную матрицу.
c (3) 0000⋯c (2) c (4))
Вектор столбца N-элемента c, 2-D Systems. Программное обеспечение интерпретирует вектор столбца с N-элементами как диагональную матрицу.
00000⋯0c (N))
Внимание
Если N = 2, 3 или 4, векторная форма столбца 2-, 3- или 4 имеет приоритет над формой N-элемента. Например, если N = 3, и у вас есть матрица c формы
нельзя использовать форму N-элемента c. Вместо этого необходимо использовать форму 2N-element. Если в качестве вектора указан c [c1;c2;c3], программное обеспечение интерпретирует c в виде 3-элементной формы:
Вместо этого используйте форму 2N-element [c1;c1;c2;c2;c3;c3].
2N-Element Вектор столбца c, 2-D Systems. Программное обеспечение интерпретирует вектор 2N-element столбца c как диагональную матрицу.
00000⋯0c (2 Н))
Внимание
Если N = 2, 4-элементная форма имеет приоритет над 2N-element формой. Например, если матрица c
вы не можете дать c как [c1;c2;c3;c4], поскольку программное обеспечение интерпретирует этот вектор как 4-элементную форму
Вместо этого используйте форму 3N-element [c1;0;c2;c3;0;c4] или форма 4N-element [c1;0;0;c2;c3;0;0;c4].
3N-Element Вектор столбца c, 2-D Systems. Программное обеспечение интерпретирует вектор 3N-element столбца c как симметричную блок-диагональную матрицу.
(3N−1) 0000⋯c (3N−1) c (3 Н))
Коэффициент c (i, j, k, l) находится в строке ( 3i + k + l-4) вектораc.
4N-Element Вектор столбца c, 2-D Systems. Программное обеспечение интерпретирует вектор 4N-element столбца c как блок-диагональную матрицу.
(4N−1) 0000⋯c (4N−2) c (4 Н))
Коэффициент c (i, j, k, l) находится в строке ( 4i + 2l + k-6) вектораc.
2N (2N + 1 )/ 2-Element Вектор столбца c, 2-D Systems. Программное обеспечение интерпретирует вектор 2N (2N + 1 )/2-элементного столбца c как симметричную матрицу. На следующей диаграмме • означает, что запись симметрична.
⋮⋮⋮⋮⋱⋮⋮ •••• ⋯c (N (2N+1) −2) c (N (2N+1) −1) •••• ⋯ • c (N (2N+1)))
Коэффициент 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.
4N2-Element Вектор столбца c, 2-D Systems. Программное обеспечение интерпретирует вектор 4N2-element столбца c как матрицу.
(8N−3) c (8N−1) ⋯c (4N2−3) c (4N2−1) c (4N−2) c (4 Н) c (8N−2) c (8 Н) ⋯c (4N2−2) c (4N2))
Коэффициент c (i, j, k, l) находится в строке (4N ( j-1) + 4i + 2l + k-6) вектораc.
Скаляр c, 3-D Systems. Программное обеспечение интерпретирует скаляр c как диагональную матрицу, где c (i, i, 1,1), c (i, i, 2,2) и c (i, i, 3,3) равны скаляру, и все остальные элементы 0.
Вектор трехэлементного столбца c, 3-D Systems. Программное обеспечение интерпретирует трехэлементный вектор-столбец c как диагональную матрицу, где c (i, i, 1,1), c (i, i, 2,2) и c (i, i, 3,3) как три элемента и все другие элементы 0.
(2) 0000000⋯00c (3))
Вектор шестиэлементного столбца c, 3-D Systems. Программное обеспечение интерпретирует шестиэлементный вектор-столбец 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).
На следующей диаграмме • означает, что запись симметрична.
000000⋯ • c (3) c (5) 000000⋯ •• c (6))
Девятиэлементный вектор колонн c, 3-D Systems. Программное обеспечение интерпретирует девятиэлементный вектор-столбец c как блок-диагональную матрицу.
(7) 000000⋯c (2) c (5) c (8) 000000⋯c (3) c (6) c (3))
Вектор столбца N-элемента c, 3-D Systems. Программное обеспечение интерпретирует вектор столбца с N-элементами как диагональную матрицу.
(N) 0000000⋯00c (N))
Внимание
Если N = 3, 6 или 9, то 3-, 6- или 9-элементная векторная форма столбца имеет приоритет над N-элементной формой. Например, если N = 3, и у вас есть матрица c формы
) 000000000c (3))
нельзя использовать N-элементную форму c. Если в качестве вектора указан c [c1;c2;c3], программное обеспечение интерпретирует c в виде 3-элементной формы:
) 000000000c (3))
Вместо этого используйте одну из следующих форм:
Форма 6N-element - [c1;0;c1;0;0;c1;c2;0;c2;0;0;c2;c3;0;c3;0;0;c3]
Форма 9N-element - [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. Программное обеспечение интерпретирует вектор 3N-element столбца c как диагональную матрицу.
0000000⋯00c (3 Н))
Внимание
Если N = 3, 9-элементная форма имеет приоритет над 3N-element формой. Например, если матрица c
) 000000000c (9))
вы не можете дать c как [c1;c2;c3;c4;c5;c6;c7;c8;c9], поскольку программное обеспечение интерпретирует этот вектор как 9-элементную форму
)
Вместо этого используйте одну из следующих форм:
Форма 6N-element - [c1;0;c2;0;0;c3;c4;0;c5;0;0;c6;c7;0;c8;0;0;c9]
Форма 9N-element - [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. Программное обеспечение интерпретирует вектор 6N-element столбца c как симметричную блок-диагональную матрицу. На следующей диаграмме • означает, что запись симметрична.
000000⋯ • c (6N−3) c (6N−1) 000000⋯ •• c (6 Н))
Коэффициент c (i, j, k, l) находится в строке ( 6i + k + 1/2l ( l-1) - 6) вектораc.
9N-Element Вектор столбца c, 3-D Systems. Программное обеспечение интерпретирует вектор 9N-element столбца c как блок-диагональную матрицу.
(9N−7) c (9N−4) c (9N−1) 000000⋯c (9N−6) c (9N−3) c (9 Н))
Коэффициент c (i, j, k, l) находится в строке ( 9i + 3l + k-12) вектораc.
3N (3N + 1 )/ 2-Element Вектор столбца c, 3-D Systems. Программное обеспечение интерпретирует вектор 3N (3N + 1 )/2-элементного столбца c как симметричную матрицу. На следующей диаграмме • означает, что запись симметрична.
(3 (N−1) (3 (N−1) +1)/2+18 ⋮⋮⋮⋮⋮⋮⋱⋮⋮⋮ •••••• ⋯c (3 Н (3N+1)/2−5) c (3 Н (3N+1)/2−4) c (3 Н (3N+1)/2−2) •••••• ⋯ • c (3 Н (3N+1)/2−3) c (3 Н (3N+1)/2−1) •••••• ⋯ •• c (3 Н (3N+1)/2))
Коэффициент 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.
9N2-Element Вектор столбца c, 3-D Systems. Программное обеспечение интерпретирует вектор 9N2-element столбца c как матрицу.
(9N2−8) c (9N2−5) c (9N2−2) c (9N−7) c (9N−4) c (9N−1) c (18N−7) c (18N−4) c (18N−1) ⋯c (9N2−7) c (9N2−4) c (9N2−1) c (9N−6) c (9N−3) c (9 Н) c (18N−6) c (18N−3) c (18 Н) ⋯c (9N2−6) c (9N2−3) c (9N2))
Коэффициент c (i, j, k, l) находится в строке (9N ( j-1) + 9i + 3l + k-12) вектораc.
Если ваш c коэффициент не постоянен, представляют его как функцию формы
ccoeffunction(location,state)
solvepde или solvepdeeig пройти location и state структуры в ccoeffunction. Функция должна возвращать матрицу размера N1-by-Nr, где:
N1 - количество коэффициентов, передаваемых решателю. Существует несколько возможных значений N1, подробно описанных в разделе Некоторые c векторы могут быть короткими. Для 2-й геометрии, 1 ≤ N1 ≤ 4N2 , и для 3D геометрии, 1 ≤ N1 ≤ 9N2 .
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 точек, для которых функция вычисляет значения коэффициентов. subdomain поле представляет номера поддоменов, которые в настоящее время применяются только к 2-D моделям. Поля местоположения являются векторами строк.
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-по-Nr. state.time поле - скаляр, представляющий время для зависящих от времени моделей.
Например, предположим, что N = 3 и имеется 2-D геометрия. Предположим, ваш c матрица имеет вид
21 + x2 + y2s1 (x, y) − 1 − 1s1 (x, y)]
где не включенные в список элементы равны нулю. Здесь s1 (x, y) равно 5 в поддомене 1 и равно 10 в поддомене 2.
Это c - симметричная блок-диагональная матрица с различными коэффициентами в каждом блоке. Так что это естественно представлять c как Вектор Колонки 3N-элемента c, 2-е Системы:
(3N−1) 0000⋯c (3N−1) c (3 Н))
Для этой формы подходит следующая функция.
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,...