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

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

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

m2ut2+dut·(cu)+au=f

или в системе собственного значения

·(cu)+au=λduили·(cu)+au=λ2mu

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

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

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

Для непостоянных содействующих матриц смотрите Непостоянный m, d, или a.

Примечание

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

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

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

Скаляр m, d, или a

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

(a000a000a)

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

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

(d(1)000d(2)000d(N))

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

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

(a(1)a(2)a(4)a(N(N1)/2)a(3)a(5)a(N(N1)/2+1)a(6)a(N(N1)/2+2)a(N(N+1)/2))

Коэффициент a (i, j) последовательно (j (j –1)/2+i) векторного a.

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

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

(d(1)d(N+1)d(N2N+1)d(2)d(N+2)d(N2N+2)d(N)d(2N)d(N2))

Коэффициент a (i, j) последовательно (N (j –1) +i) векторного a.

Непостоянный m, d, или a

Примечание

Если и m и d являются ненулевыми, то d должен быть постоянным скаляром или вектором, не функцией.

Если какой-либо из m, d, или коэффициенты не являются постоянными, представляйте его в зависимости от формы

dcoeff = dcoeffunction(location,state)

Передайте коэффициент specifyCoefficients как указатель на функцию, такой как

specifyCoefficients(model,'d',@dcoeffunction,...)

solvepde или solvepdeeig вычислите и заполните данные в location и state массивы структур и передача эти данные к вашей функции. Можно задать функцию так, чтобы ее выход зависел от этих данных. Можно использовать любые имена вместо location и state, но функция должна иметь точно два аргумента. Чтобы использовать дополнительные аргументы в вашей функции, перенесите свою функцию (который берет дополнительные аргументы) с анонимной функцией, которая берет только location и state аргументы. Например:

dcoeff = ...
@(location,state) myfunWithAdditionalArgs(location,state,arg1,arg2...)
specifyCoefficients(model,'d',dcoeff,...
  • location структура с этими полями:

    • location.x

    • location.y

    • location.z

    • location.subdomain

    Поля xY, и 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, подробные в коротком m, d, или векторы. 1 ≤ N 1 ≤ N2.

  • Nr является числом точек в месте, которое передает решатель. Nr равен длине location.x или любой другой location поле . Функция должна оценить m, d, или в этих точках.

Например, предположите N = 3, и у вас есть 2D геометрия. Предположим свой d матрица имеет форму

d=[1s1(x,y)x2+y2s1(x,y)41x2+y219]

где s 1 (x, y) 5 в субдомене 1 и 10 в субдомене 2.

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

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

Похожие темы