specifyCoefficientsВ этом разделе описывается, как записать m, d или коэффициенты в систему уравнений
+au=f
или в системе собственных значений
= λ 2mu
Раздел относится к рекомендуемому рабочему процессу для включения коэффициентов в модель с использованием specifyCoefficients.
Если в системе имеется N уравнений, то эти коэффициенты представляют N-на-N матриц.
Для матриц с постоянными (числовыми) коэффициентами каждый коэффициент представляется вектором-столбцом с N2 компонентами. Этот вектор столбца представляет, например, m(:).
Для получения информации о матрицах непостоянных коэффициентов см. раздел Непостоянные m, d или a.
Примечание
d коэффициент принимает специальную матричную форму, когда m имеет ненулевое значение. См. Коэффициент d, если m - ненулевое значение.
Иногда матрицы m, d или a являются диагональными или симметричными. В этих случаях можно представить m, d или a с помощью вектора меньшего размера, чем вектор с N2 компонентами. В следующих разделах представлены возможности.
Программное обеспечение интерпретирует скалярный m, d или a как диагональную матрицу.
Программное обеспечение интерпретирует вектор N-элементного столбца m, d или a как диагональную матрицу.
(N))
Программное обеспечение интерпретирует N (N + 1 )/2-элементный вектор-столбец m, d или a как симметричную матрицу. На следующей диаграмме • означает, что запись симметрична.
(N − 1 )/2 + 2) ⋮⋮⋮⋱⋮ • • ⋯a (N (N + 1 )/2))
Коэффициент a (i, j) находится в строке (j (j-1 )/2 + i) вектораa.
Программное обеспечение интерпретирует вектор N2-element столбца m, d или a как матрицу.
2) ⋮⋮⋱⋮d (N) d (2N) ⋯d (N2))
Коэффициент a (i, j) находится в строке (N (j-1) + i) вектораa.
Примечание
Если и m, и d ненулевые, то d должен быть постоянным скаляром или вектором, а не функцией.
Если какой-либо из m, d или коэффициентов не является постоянным, представляют его как функцию вида
dcoeffunction(location,state)
solvepde или solvepdeeig пройти location и state структуры в dcoeffunction. Функция должна возвращать матрицу размера N1-by-Nr, где:
N1 - длина вектора, представляющего коэффициент. Существует несколько возможных значений N1, детализированных в кратких m, d или векторах. 1 ≤ N1 ≤ N2 .
Nr - количество точек в месте прохождения решателя. Nr равна длине location.x или любой другой location поле. Функция должна вычислять m, d или a в этих точках.
Передать коэффициент в specifyCoefficients как дескриптор функции, например,
specifyCoefficients(model,'d',@dcoeffunction,...)
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 геометрия. Предположим, ваш d матрица имеет вид
− 1x2 + y2 − 19]
где s1 (x, y) равно 5 в поддомене 1 и равно 10 в поддомене 2.
Это d - симметричная матрица. Так что это естественно представлять d в виде N (N + 1 )/ 2-Element Вектор столбца m, d или a:
(N − 1 )/2 + 2) ⋮⋮⋮⋱⋮ • • ⋯a (N (N + 1 )/2))
Для этой формы подходит следующая функция.
function dmatrix = dcoeffunction(location,state)
n1 = 6;
nr = numel(location.x);
dmatrix = zeros(n1,nr);
dmatrix(1,:) = ones(1,nr);
dmatrix(2,:) = 5*location.subdomain;
dmatrix(3,:) = 4*ones(1,nr);
dmatrix(4,:) = sqrt(location.x.^2 + location.y.^2);
dmatrix(5,:) = -ones(1,nr);
dmatrix(6,:) = 9*ones(1,nr);Чтобы включить эту функцию в качестве вашей d коэффициент, передайте дескриптор функции @dcoeffunction:
specifyCoefficients(model,'d',@dcoeffunction,...