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».

Примечание

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

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

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

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

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

(a000a000a)

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

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

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

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

или a

Программа интерпретирует N (N + 1 )/2-элемент вектора-столбца 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))

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

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

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

(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 или коэффициентов не является постоянным, представьте его как функцию от вида

dcoeffunction(location,state)

solvepde или solvepdeeig передайте location и state структуры, для dcoeffunction. Функция должна вернуть матрицу размера N 1-by- Nr, где:

  • N 1 является длиной вектора, представляющего коэффициент. Существует несколько возможных значений N 1, детализированных в Short m, d или векторах. 1  <reservedrangesplaceholder1> 1  <reservedrangesplaceholder0>  2.

  • 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 - координаты точек, для которых ваша функция вычисляет значения коэффициентов. The subdomain поле представляет числа поддоменов, которые в настоящее время применяются только к 2-D моделям. Поля местоположения являются векторами-строками.

  • state - структура с этими полями:

    • state.u

    • state.ux

    • state.uy

    • state.uz

    • state.time

    The state.u поле представляет текущее значение u решения. The state.ux, state.uy, и state.uz области - оценки частных производных решения ( <reservedrangesplaceholder8> /  <reservedrangesplaceholder7>,  <reservedrangesplaceholder6> /  <reservedrangesplaceholder5> и  <reservedrangesplaceholder4> /  <reservedrangesplaceholder3>) в соответствующих точках структуры местоположения. Решения и оценки градиента являются N -by Nr матрицами. The state.time поле является скаляром, представляющим время для зависящих от времени моделей.

Например, предположим N = 3, и у вас есть 2-D геометрия. Предположим, что вы 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,...

Похожие темы