exponenta event banner

m, d или коэффициент для specifyCoefficients

Коэффициенты m, d или a

В этом разделе описывается, как записать m, d или коэффициенты в систему уравнений

m∂2u∂t2+d∂u∂t−∇ · (c ⊗∇ u) +au=f

или в системе собственных значений

−∇· (c⊗∇u) +au=λduor−∇· (c⊗∇u) + au = λ 2mu

Раздел относится к рекомендуемому рабочему процессу для включения коэффициентов в модель с использованием specifyCoefficients.

Если в системе имеется N уравнений, то эти коэффициенты представляют N-на-N матриц.

Для матриц с постоянными (числовыми) коэффициентами каждый коэффициент представляется вектором-столбцом с N2 компонентами. Этот вектор столбца представляет, например, m(:).

Для получения информации о матрицах непостоянных коэффициентов см. раздел Непостоянные m, d или a.

Примечание

d коэффициент принимает специальную матричную форму, когда m имеет ненулевое значение. См. Коэффициент d, если m - ненулевое значение.

Короткие m, d или векторы

Иногда матрицы m, d или a являются диагональными или симметричными. В этих случаях можно представить m, d или a с помощью вектора меньшего размера, чем вектор с N2 компонентами. В следующих разделах представлены возможности.

Скалярные m, d или a

Программное обеспечение интерпретирует скалярный m, d или a как диагональную матрицу.

(a0⋯00a⋯0⋮⋮⋱⋮00⋯a)

Вектор столбца N-элемента m, d или a

Программное обеспечение интерпретирует вектор N-элементного столбца m, d или a как диагональную матрицу.

d (1) 0⋯00d (2) ⋯0⋮⋮⋱⋮00⋯d (N))

N (N + 1 )/ 2-Element Вектор столбца m, d

или a

Программное обеспечение интерпретирует N (N + 1 )/2-элементный вектор-столбец m, d или a как симметричную матрицу. На следующей диаграмме • означает, что запись симметрична.

(a (1) a (2) a (4) ⋯a (N (N 1 )/2) a (3) a (5) ⋯a (N (N 1 )/2 + 1) a (6) ⋯a (N (N − 1 )/2 + 2) ⋮⋮⋮⋱⋮ • • ⋯a (N (N + 1 )/2))

Коэффициент a (i, j) находится в строке (j (j-1 )/2 + i) вектораa.

N2-Element Вектор столбца m, d или a

Программное обеспечение интерпретирует вектор N2-element столбца m, d или a как матрицу.

(d (1) d (N + 1) ⋯d (N2 N + 1) d (2) d (N + 2) ⋯d (N2 N + 2) ⋮⋮⋱⋮d (N) d (2N) ⋯d (N2))

Коэффициент a (i, j) находится в строке (N (j-1) + i) вектораa.

Непостоянные m, d или 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 матрица имеет вид

d = [1s1 (x, y) x2 + y2s1 (x, y) 4 − 1x2 + y2 − 19]

где s1 (x, y) равно 5 в поддомене 1 и равно 10 в поддомене 2.

Это d - симметричная матрица. Так что это естественно представлять d в виде N (N + 1 )/ 2-Element Вектор столбца m, d или a:

(a (1) a (2) a (4) ⋯a (N (N 1 )/2) a (3) a (5) ⋯a (N (N 1 )/2 + 1) a (6) ⋯a (N (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,...

Связанные темы