specifyCoefficients
В этом разделе описывается записать m, d, или коэффициенты в системе уравнений
или в системе собственного значения
Тема применяется к рекомендуемому рабочему процессу за включение коэффициентов в вашем использовании модели specifyCoefficients
.
Если существуют уравнения N в системе, то эти коэффициенты представляют N-by-N матрицы.
Для постоянных (числовых) содействующих матриц представляйте каждый коэффициент с помощью вектор-столбца с N2 компоненты. Этот вектор-столбец представляет, например, m(:)
.
Для непостоянных содействующих матриц смотрите Непостоянный m, d, или a.
Примечание
d
коэффициент принимает специальную матричную форму когда m
является ненулевым. См. d Коэффициент, Когда m будет Ненулевым.
Иногда, ваши m, d, или матрицы являются диагональными или симметричными. В этих случаях можно представлять m, d, или использование меньшего вектора, чем один с N2 компоненты. Следующие разделы дают возможности.
Программное обеспечение интерпретирует скаляр m, d, или как диагональная матрица.
Программное обеспечение интерпретирует N - вектор-столбец элемента m, d, или как диагональная матрица.
Программное обеспечение интерпретирует N (N +1)/2-element вектор-столбец m, d, или как симметрическая матрица. В следующей схеме, • означает, что запись симметрична.
Коэффициент a (i, j) последовательно (j (j –1)/2+i) векторного a
.
Программное обеспечение интерпретирует N2- вектор-столбец элемента m, d, или как матрица.
Коэффициент a (i, j) последовательно (N (j –1) +i) векторного 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
Поля x
Y
, и 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
матрица имеет форму
где s 1 (x, y) 5 в субдомене 1 и 10 в субдомене 2.
Этот d
симметрическая матрица. Таким образом, естественно представлять d
как N (N+1)/2-Element Вектор-столбец m, d, или a:
Для той формы следующая функция является соответствующей.
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,...