c Коэффициент для specifyCoefficients

Обзор c Коэффициента

Эта тема описывает, как записать коэффициенту c в уравнениях такой как

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

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

Для 2D систем, c тензор с 4N2 элементы. Для 3-D систем, c тензор с 9N2 элементы. Для определения элементов тензора см. Определение c Элементов Tensor. N является количеством уравнений, смотрите уравнения, которые Можно Решить Используя Тулбокс УЧП.

Записать коэффициенту c для включения в модель PDE через specifyCoefficients, дайте c как любое из следующего:

  • Если c является постоянным, дайте вектор-столбец, представляющий элементы в тензоре.

  • Если c не является постоянным, дайте указатель на функцию. Функция должна иметь форму

    ccoeffunction(location,state)

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

    • N 1 является длиной вектора, представляющего c коэффициент. Существует несколько возможных значений N 1, подробный в Некоторых c Векторах Может Быть Коротким. Для 2D геометрии, 1 ≤ N 1 ≤ 4N2, и для 3-D геометрии, 1 ≤ N 1 ≤ 9N2.

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

Определение c Элементов Tensor

Для 2D систем, обозначения ∇⋅(c⊗∇u) представляет N-by-1 матрица с (i, 1) - компонент

∑j=1N(∂∂xci,j,1,1∂∂x+∂∂xci,j,1,2∂∂y+∂∂yci,j,2,1∂∂x+∂∂yci,j,2,2∂∂y)uj

Для 3-D систем, обозначения ∇⋅(c⊗∇u) представляет N-by-1 матрица с (i, 1) - компонент

∑j=1N(∂∂xci,j,1,1∂∂x+∂∂xci,j,1,2∂∂y+∂∂xci,j,1,3∂∂z)uj+∑j=1N(∂∂yci,j,2,1∂∂x+∂∂yci,j,2,2∂∂y+∂∂yci,j,2,3∂∂z)uj+∑j=1N(∂∂zci,j,3,1∂∂x+∂∂zci,j,3,2∂∂y+∂∂zci,j,3,3∂∂z)uj

Все представления c коэффициент начинается с “выравнивания” тензора к матрице. Для 2D систем N-by-N-by-2-by-2 тензор сглаживается к матрице 2N-by-2N, где матрицей является логически N-by-N матрица блоков 2 на 2.

(c(1,1,1,1)c(1,1,1,2)c(1,2,1,1)c(1,2,1,2)⋯c(1,N,1,1)c(1,N,1,2)c(1,1,2,1)c(1,1,2,2)c(1,2,2,1)c(1,2,2,2)⋯c(1,N,2,1)c(1,N,2,2)c(2,1,1,1)c(2,1,1,2)c(2,2,1,1)c(2,2,1,2)⋯c(2,N,1,1)c(2,N,1,2)c(2,1,2,1)c(2,1,2,2)c(2,2,2,1)c(2,2,2,2)⋯c(2,N,2,1)c(2,N,2,2)⋮⋮⋮⋮⋱⋮⋮c(N,1,1,1)c(N,1,1,2)c(N,2,1,1)c(N,2,1,2)⋯c(N,N,1,1)c(N,N,1,2)c(N,1,2,1)c(N,1,2,2)c(N,2,2,1)c(N,2,2,2)⋯c(N,N,2,1)c(N,N,2,2))

Для 3-D систем N-by-N-by-3-by-3 тензор сглаживается к матрице 3N-by-3N, где матрицей является логически N-by-N матрица 3х3 блоков.

(c(1,1,1,1)c(1,1,1,2)c(1,1,1,3)c(1,2,1,1)c(1,2,1,2)c(1,2,1,3)⋯c(1,N,1,1)c(1,N,1,2)c(1,N,1,3)c(1,1,2,1)c(1,1,2,2)c(1,1,2,3)c(1,2,2,1)c(1,2,2,2)c(1,2,2,3)⋯c(1,N,2,1)c(1,N,2,2)c(1,N,2,3)c(1,1,3,1)c(1,1,3,2)c(1,1,3,3)c(1,2,3,1)c(1,2,3,2)c(1,2,3,3)⋯c(1,N,3,1)c(1,N,3,2)c(1,N,3,3)c(2,1,1,1)c(2,1,1,2)c(2,1,1,3)c(2,2,1,1)c(2,2,1,2)c(2,2,1,3)⋯c(2,N,1,1)c(2,N,1,2)c(2,N,1,3)c(2,1,2,1)c(2,1,2,2)c(2,1,2,3)c(2,2,2,1)c(2,2,2,2)c(2,2,2,3)⋯c(2,N,2,1)c(2,N,2,2)c(2,N,2,3)c(2,1,3,1)c(2,1,3,2)c(2,1,3,3)c(2,2,3,1)c(2,2,3,2)c(2,2,3,3)⋯c(2,N,3,1)c(2,N,3,2)c(2,N,3,3)⋮⋮⋮⋮⋮⋮⋱⋮⋮⋮c(N,1,1,1)c(N,1,1,2)c(N,1,1,3)c(N,2,1,1)c(N,2,1,2)c(N,2,1,3)⋯c(N,N,1,1)c(N,N,1,2)c(N,N,1,3)c(N,1,2,1)c(N,1,2,2)c(N,1,2,3)c(N,2,2,1)c(N,2,2,2)c(N,2,2,3)⋯c(N,N,2,1)c(N,N,2,2)c(N,N,2,3)c(N,1,3,1)c(N,1,3,2)c(N,1,3,3)c(N,2,3,1)c(N,2,3,2)c(N,2,3,3)⋯c(N,N,3,1)c(N,N,3,2)c(N,N,3,3))

Эти матрицы далее сглажены в вектор-столбец. Сначала N-by-N матрицы и 3х3 блоков 2 на 2 преобразовывается в "векторы" из и 3х3 блоков 2 на 2. Затем блоки превращены в векторы обычным постолбцовым способом.

Вектор коэффициентов c относится к тензору c можно следующим образом. Для 2D систем,

(c(1)c(3)c(4N+1)c(4N+3)⋯c(4N(N−1)+1)c(4N(N−1)+3)c(2)c(4)c(4N+2)c(4N+4)⋯c(4N(N−1)+2)c(4N(N−1)+4)c(5)c(7)c(4N+5)c(4N+7)⋯c(4N(N−1)+5)c(4N(N−1)+7)c(6)c(8)c(4N+6)c(4N+8)⋯c(4N(N−1)+6)c(4N(N−1)+8)⋮⋮⋮⋮⋱⋮⋮c(4N−3)c(4N−1)c(8N−3)c(8N−1)⋯c(4N2−3)c(4N2−1)c(4N−2)c(4N)c(8N−2)c(8N)⋯c(4N2−2)c(4N2))

Коэффициентом c (i, j, k, l) является последовательно (4N (j –1) + 4i + 2l + k – 6) векторного c.

Для 3-D систем,

(c(1)c(4)c(7)c(9N+1)c(9N+4)c(9N+7)⋯c(9N(N−1)+1)c(9N(N−1)+4)c(9N(N−1)+7)c(2)c(5)c(8)c(9N+2)c(9N+5)c(9N+8)⋯c(9N(N−1)+2)c(9N(N−1)+5)c(9N(N−1)+8)c(3)c(6)c(9)c(9N+3)c(9N+6)c(9N+9)⋯c(9N(N−1)+3)c(9N(N−1)+6)c(9N(N−1)+9)c(10)c(13)c(16)c(9N+10)c(9N+13)c(9N+16)⋯c(9N(N−1)+10)c(9N(N−1)+13)c(9N(N−1)+16)c(11)c(14)c(17)c(9N+11)c(9N+14)c(9N+17)⋯c(9N(N−1)+11)c(9N(N−1)+14)c(9N(N−1)+17)c(12)c(15)c(18)c(9N+12)c(9N+15)c(9N+18)⋯c(9N(N−1)+12)c(9N(N−1)+15)c(9N(N−1)+18)⋮⋮⋮⋮⋮⋮⋱⋮⋮⋮c(9N−8)c(9N−5)c(9N−2)c(18N−8)c(18N−5)c(18N−2)⋯c(9N2−8)c(9N2−5)c(9N2−2)c(9N−7)c(9N−4)c(9N−1)c(18N−7)c(18N−4)c(18N−1)⋯c(9N2−7)c(9N2−4)c(9N2−1)c(9N−6)c(9N−3)c(9N)c(18N−6)c(18N−3)c(18N)⋯c(9N2−6)c(9N2−3)c(9N2))

Коэффициентом c (i, j, k, l) является последовательно (9N (j –1) + 9i + 3l + k – 12) векторного c.

Некоторые c Векторы Могут Быть Короткими

Часто, ваш тензор c имеет структуру, такой как симметричную или диагональ блока. Во многих случаях можно представлять c использование меньшего вектора, чем один с 4N2 компоненты для 2D или 9N2 компоненты для 3-D. Следующие разделы дают возможности.

2D Системы

Скаляр c, 2D Системы.  Программное обеспечение интерпретирует скалярный c как диагональную матрицу, с c (i, i, 1,1) и c (i, i, 2,2) равный скаляру и всем другим записям 0.

(c000⋯000c00⋯0000c0⋯00000c⋯00⋮⋮⋮⋮⋱⋮⋮0000⋯c00000⋯0c)

Двухэлементный Вектор-столбец c, 2D Системы.  Программное обеспечение интерпретирует двухэлементный вектор-столбец c как диагональная матрица, с c (i, i, 1,1) и c (i, i, 2,2) как эти две записи и все другие записи 0.

(c(1)000⋯000c(2)00⋯0000c(1)0⋯00000c(2)⋯00⋮⋮⋮⋮⋱⋮⋮0000⋯c(1)00000⋯0c(2))

Трехэлементный Вектор-столбец c, 2D Системы.  Программное обеспечение интерпретирует трехэлементный вектор-столбец c как симметричная матрица диагонали блока, с c (i, i, 1,1) = c (1), c (i, i, 2,2) = c (3), и c (i, i, 1,2) = c (i, i, 2,1) = c (2).

(c(1)c(2)00⋯00c(2)c(3)00⋯0000c(1)c(2)⋯0000c(2)c(3)⋯00⋮⋮⋮⋮⋱⋮⋮0000⋯c(1)c(2)0000⋯c(2)c(3))

Четырехэлементный Вектор-столбец c, 2D Системы.  Программное обеспечение интерпретирует четырехэлементный вектор-столбец c как матрица диагонали блока.

(c(1)c(3)00⋯00c(2)c(4)00⋯0000c(1)c(3)⋯0000c(2)c(4)⋯00⋮⋮⋮⋮⋱⋮⋮0000⋯c(1)c(3)0000⋯c(2)c(4))

Вектор-столбец N-элемента c, 2D Системы.  Программное обеспечение интерпретирует N - вектор-столбец элемента c как диагональная матрица.

(c(1)000⋯000c(1)00⋯0000c(2)0⋯00000c(2)⋯00⋮⋮⋮⋮⋱⋮⋮0000⋯c(N)00000⋯0c(N))

Внимание

Если N = 2, 3, или 4, 2-, 3-, или форма вектор-столбца с 4 элементами более приоритетен по сравнению с N - форма элемента. Например, если N = 3, и у вас есть матрица c формы

(c1000000c1000000c2000000c2000000c3000000c3)

вы не можете использовать N - форма элемента c. Вместо этого необходимо использовать форму 2N-элемента. Если вы даете c как векторный [c1;c2;c3], программное обеспечение интерпретирует c как форма с 3 элементами:

(c1c20000c2c3000000c1c20000c2c3000000c1c20000c2c3)

Вместо этого используйте форму 2N-элемента [c1;c1;c2;c2;c3;c3].

Вектор-столбец 2N-элемента c, 2D Системы.  Программное обеспечение интерпретирует вектор-столбец 2N-элемента c как диагональная матрица.

(c(1)000⋯000c(2)00⋯0000c(3)0⋯00000c(4)⋯00⋮⋮⋮⋮⋱⋮⋮0000⋯c(2N−1)00000⋯0c(2N))

Внимание

Если N = 2, форма с 4 элементами более приоритетна по сравнению с формой 2N-элемента. Например, если ваша матрица c

(c10000c20000c30000c4)

вы не можете дать c как [c1;c2;c3;c4], потому что программное обеспечение интерпретирует этот вектор как форму с 4 элементами

(c1c300c2c40000c1c300c2c4)

Вместо этого используйте форму 3N-элемента [c1;0;c2;c3;0;c4] или 4N-элемент формирует [c1;0;0;c2;c3;0;0;c4].

Вектор-столбец 3N-элемента c, 2D Системы.  Программное обеспечение интерпретирует вектор-столбец 3N-элемента c как симметричная матрица диагонали блока.

(c(1)c(2)00⋯00c(2)c(3)00⋯0000c(4)c(5)⋯0000c(5)c(6)⋯00⋮⋮⋮⋮⋱⋮⋮0000⋯c(3N−2)c(3N−1)0000⋯c(3N−1)c(3N))

Коэффициент c (i, j, k, l) последовательно (3i + k + l – 4) векторного c.

Вектор-столбец 4N-элемента c, 2D Системы.  Программное обеспечение интерпретирует вектор-столбец 4N-элемента c как матрица диагонали блока.

(c(1)c(3)00⋯00c(2)c(4)00⋯0000c(5)c(7)⋯0000c(6)c(8)⋯00⋮⋮⋮⋮⋱⋮⋮0000⋯c(4N−3)c(4N−1)0000⋯c(4N−2)c(4N))

Коэффициент c (i, j, k, l) последовательно (4i + 2l + k – 6) векторного c.

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

(c(1)c(2)c(4)c(6)⋯c((N−1)(2N−1)+1)c((N−1)(2N−1)+3)•c(3)c(5)c(7)⋯c((N−1)(2N−1)+2)c((N−1)(2N−1)+4)••c(8)c(9)⋯c((N−1)(2N−1)+5)c((N−1)(2N−1)+7)•••c(10)⋯c((N−1)(2N−1)+6)c((N−1)(2N−1)+8)⋮⋮⋮⋮⋱⋮⋮••••⋯c(N(2N+1)−2)c(N(2N+1)−1)••••⋯•c(N(2N+1)))

Коэффициент c (i, j, k, l), для i < j, последовательно (2j2 – 3j + 4i + 2l + k – 5) векторного c. Для i = j, коэффициент c (i, j, k, l) последовательно (2i2 + i + l + k – 4) векторного c.

4 Н2- Вектор-столбец элемента c, 2D Системы.  Программное обеспечение интерпретирует 4N2- вектор-столбец элемента c как матрица.

(c(1)c(3)c(4N+1)c(4N+3)⋯c(4N(N−1)+1)c(4N(N−1)+3)c(2)c(4)c(4N+2)c(4N+4)⋯c(4N(N−1)+2)c(4N(N−1)+4)c(5)c(7)c(4N+5)c(4N+7)⋯c(4N(N−1)+5)c(4N(N−1)+7)c(6)c(8)c(4N+6)c(4N+8)⋯c(4N(N−1)+6)c(4N(N−1)+8)⋮⋮⋮⋮⋱⋮⋮c(4N−3)c(4N−1)c(8N−3)c(8N−1)⋯c(4N2−3)c(4N2−1)c(4N−2)c(4N)c(8N−2)c(8N)⋯c(4N2−2)c(4N2))

Коэффициентом c (i, j, k, l) является последовательно (4N (j –1) + 4i + 2l + k – 6) векторного c.

3-D Системы

Скаляр c, 3-D Системы.  Программное обеспечение интерпретирует скалярный c как диагональную матрицу, с c (i, i, 1,1), c (i, i, 2,2), и c (i, i, 3,3) равный скаляру и всем другим записям 0.

(c00000⋯0000c0000⋯00000c000⋯000000c00⋯0000000c0⋯00000000c⋯000⋮⋮⋮⋮⋮⋮⋱⋮⋮⋮000000⋯c00000000⋯0c0000000⋯00c)

Трехэлементный Вектор-столбец c, 3-D Системы.  Программное обеспечение интерпретирует трехэлементный вектор-столбец c как диагональная матрица, с c (i, i, 1,1), c (i, i, 2,2), и c (i, i, 3,3) как эти три записи и все другие записи 0.

(c(1)00000⋯0000c(2)0000⋯00000c(3)000⋯000000c(1)00⋯0000000c(2)0⋯00000000c(3)⋯000⋮⋮⋮⋮⋮⋮⋱⋮⋮⋮000000⋯c(1)00000000⋯0c(2)0000000⋯00c(3))

Вектор-столбец с шестью элементами c, 3-D Системы.  Программное обеспечение интерпретирует вектор-столбец с шестью элементами c как симметричная матрица диагонали блока, с

c (i, i, 1,1) = c (1)
c (i, i, 2,2) = c (3)
c (i, i, 1,2) = c (i, i, 2,1) = c (2)
c (i, i, 1,3) = c (i, i, 3,1) = c (4)
c (i, i, 2,3) = c (i, i, 3,2) = c (5)
c (i, i, 3,3) = c (6).

В следующей схеме, • означает, что запись симметрична.

(c(1)c(2)c(4)000⋯000•c(3)c(5)000⋯000••c(6)000⋯000000c(1)c(2)c(4)⋯000000•c(3)c(5)⋯000000••c(6)⋯000⋮⋮⋮⋮⋮⋮⋱⋮⋮⋮000000⋯c(1)c(2)c(4)000000⋯•c(3)c(5)000000⋯••c(6))

Вектор-столбец с девятью элементами c, 3-D Системы.  Программное обеспечение интерпретирует вектор-столбец с девятью элементами c как матрица диагонали блока.

(c(1)c(4)c(7)000⋯000c(2)c(5)c(8)000⋯000c(3)c(6)c(9)000⋯000000c(1)c(4)c(7)⋯000000c(2)c(5)c(8)⋯000000c(3)c(6)c(9)⋯000⋮⋮⋮⋮⋮⋮⋱⋮⋮⋮000000⋯c(1)c(4)c(7)000000⋯c(2)c(5)c(8)000000⋯c(3)c(6)c(3))

Вектор-столбец N-элемента c, 3-D Системы.  Программное обеспечение интерпретирует N - вектор-столбец элемента c как диагональная матрица.

(c(1)00000⋯0000c(1)0000⋯00000c(1)000⋯000000c(2)00⋯0000000c(2)0⋯00000000c(2)⋯000⋮⋮⋮⋮⋮⋮⋱⋮⋮⋮000000⋯c(N)00000000⋯0c(N)0000000⋯00c(N))

Внимание

Если N = 3, 6, или 9, 3-, 6-, или форма вектор-столбца с 9 элементами более приоритетен по сравнению с N - форма элемента. Например, если N = 3, и у вас есть матрица c формы

(c(1)000000000c(1)000000000c(1)000000000c(2)000000000c(2)000000000c(2)000000000c(3)000000000c(3)000000000c(3))

вы не можете использовать N - форма элемента c. Если вы даете c как векторный [c1;c2;c3], программное обеспечение интерпретирует c как форма с 3 элементами:

(c(1)000000000c(2)000000000c(3)000000000c(1)000000000c(2)000000000c(3)000000000c(1)000000000c(2)000000000c(3))

Вместо этого используйте одну из следующих форм:

  • Форма 6N-элемента — [c1;0;c1;0;0;c1;c2;0;c2;0;0;c2;c3;0;c3;0;0;c3]

  • Форма 9N-элемента — [c1;0;0;0;c1;0;0;0;c1;c2;0;0;0;c2;0;0;0;c2;c3;0;0;0;c3;0;0;0;c3]

Вектор-столбец 3N-элемента c, 3-D Системы.  Программное обеспечение интерпретирует вектор-столбец 3N-элемента c как диагональная матрица.

(c(1)00000⋯0000c(2)0000⋯00000c(3)000⋯000000c(4)00⋯0000000c(5)0⋯00000000c(6)⋯000⋮⋮⋮⋮⋮⋮⋱⋮⋮⋮000000⋯c(3N−2)00000000⋯0c(3N−1)0000000⋯00c(3N))

Внимание

Если N = 3, форма с 9 элементами более приоритетна по сравнению с формой 3N-элемента. Например, если ваша матрица c

(c(1)000000000c(2)000000000c(3)000000000c(4)000000000c(5)000000000c(6)000000000c(7)000000000c(8)000000000c(9))

вы не можете дать c как [c1;c2;c3;c4;c5;c6;c7;c8;c9], потому что программное обеспечение интерпретирует этот вектор как форму с 9 элементами

(c(1)c(4)c(7)000000c(2)c(5)c(8)000000c(3)c(6)c(9)000000000c(1)c(4)c(7)000000c(2)c(5)c(8)000000c(3)c(6)c(9)000000000c(1)c(4)c(7)000000c(2)c(5)c(8)000000c(3)c(6)c(3))

Вместо этого используйте одну из следующих форм:

  • Форма 6N-элемента — [c1;0;c2;0;0;c3;c4;0;c5;0;0;c6;c7;0;c8;0;0;c9]

  • Форма 9N-элемента — [c1;0;0;0;c2;0;0;0;c3;c4;0;0;0;c5;0;0;0;c6;c7;0;0;0;c8;0;0;0;c9]

Вектор-столбец 6N-элемента c, 3-D Системы.  Программное обеспечение интерпретирует вектор-столбец 6N-элемента c как симметричная матрица диагонали блока. В следующей схеме, • означает, что запись симметрична.

(c(1)c(2)c(4)000⋯000•c(3)c(5)000⋯000••c(6)000⋯000000c(7)c(8)c(10)⋯000000•c(9)c(11)⋯000000••c(12)⋯000⋮⋮⋮⋮⋮⋮⋱⋮⋮⋮000000⋯c(6N−5)c(6N−4)c(6N−2)000000⋯•c(6N−3)c(6N−1)000000⋯••c(6N))

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

Вектор-столбец 9N-элемента c, 3-D Системы.  Программное обеспечение интерпретирует вектор-столбец 9N-элемента c как матрица диагонали блока.

(c(1)c(4)c(7)000⋯000c(2)c(5)c(8)000⋯000c(3)c(6)c(9)000⋯000000c(10)c(13)c(16)⋯000000c(11)c(14)c(17)⋯000000c(12)c(15)c(18)⋯000⋮⋮⋮⋮⋮⋮⋱⋮⋮⋮000000⋯c(9N−8)c(9N−5)c(9N−2)000000⋯c(9N−7)c(9N−4)c(9N−1)000000⋯c(9N−6)c(9N−3)c(9N))

Коэффициент c (i, j, k, l) последовательно (9i + 3l + k – 12) векторного c.

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

(c(1)c(2)c(4)c(7)c(10)c(13)⋯c(3(N−1)(3(N−1)+1)/2+1c(3(N−1)(3(N−1)+1)/2+4c(3(N−1)(3(N−1)+1)/2+7•c(3)c(5)c(8)c(11)c(14)⋯c(3(N−1)(3(N−1)+1)/2+2c(3(N−1)(3(N−1)+1)/2+5c(3(N−1)(3(N−1)+1)/2+8••c(6)c(9)c(12)c(15)⋯c(3(N−1)(3(N−1)+1)/2+3c(3(N−1)(3(N−1)+1)/2+6c(3(N−1)(3(N−1)+1)/2+9•••c(16)c(17)c(19)⋯c(3(N−1)(3(N−1)+1)/2+10c(3(N−1)(3(N−1)+1)/2+13c(3(N−1)(3(N−1)+1)/2+16••••c(18)c(20)⋯c(3(N−1)(3(N−1)+1)/2+11c(3(N−1)(3(N−1)+1)/2+14c(3(N−1)(3(N−1)+1)/2+17•••••c(21)⋯c(3(N−1)(3(N−1)+1)/2+12c(3(N−1)(3(N−1)+1)/2+15c(3(N−1)(3(N−1)+1)/2+18⋮⋮⋮⋮⋮⋮⋱⋮⋮⋮••••••⋯c(3N(3N+1)/2−5)c(3N(3N+1)/2−4)c(3N(3N+1)/2−2)••••••⋯•c(3N(3N+1)/2−3)c(3N(3N+1)/2−1)••••••⋯••c(3N(3N+1)/2))

Коэффициентом c (i, j, k, l), для i < j, является последовательно (9 (j –1) (j –2)/2 + 6 (j –1) + 9i + 3l + k – 12) векторного c. Для i = j, коэффициент c (i, j, k, l) является последовательно (9 (i –1) (i –2)/2 + 15 (i –1) + 1/2l (l –1) + k) векторного c.

9 Н2- Вектор-столбец элемента c, 3-D Системы.  Программное обеспечение интерпретирует 9N2- вектор-столбец элемента c как матрица.

(c(1)c(4)c(7)c(9N+1)c(9N+4)c(9N+7)⋯c(9N(N−1)+1)c(9N(N−1)+4)c(9N(N−1)+7)c(2)c(5)c(8)c(9N+2)c(9N+5)c(9N+8)⋯c(9N(N−1)+2)c(9N(N−1)+5)c(9N(N−1)+8)c(3)c(6)c(9)c(9N+3)c(9N+6)c(9N+9)⋯c(9N(N−1)+3)c(9N(N−1)+6)c(9N(N−1)+9)c(10)c(13)c(16)c(9N+10)c(9N+13)c(9N+16)⋯c(9N(N−1)+10)c(9N(N−1)+13)c(9N(N−1)+16)c(11)c(14)c(17)c(9N+11)c(9N+14)c(9N+17)⋯c(9N(N−1)+11)c(9N(N−1)+14)c(9N(N−1)+17)c(12)c(15)c(18)c(9N+12)c(9N+15)c(9N+18)⋯c(9N(N−1)+12)c(9N(N−1)+15)c(9N(N−1)+18)⋮⋮⋮⋮⋮⋮⋱⋮⋮⋮c(9N−8)c(9N−5)c(9N−2)c(18N−8)c(18N−5)c(18N−2)⋯c(9N2−8)c(9N2−5)c(9N2−2)c(9N−7)c(9N−4)c(9N−1)c(18N−7)c(18N−4)c(18N−1)⋯c(9N2−7)c(9N2−4)c(9N2−1)c(9N−6)c(9N−3)c(9N)c(18N−6)c(18N−3)c(18N)⋯c(9N2−6)c(9N2−3)c(9N2))

Коэффициентом c (i, j, k, l) является последовательно (9N (j –1) + 9i + 3l + k – 12) векторного c.

Функциональная форма

Если ваш c коэффициент не является постоянным, представляйте его в зависимости от формы

ccoeff = ccoeffunction(location,state)

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

specifyCoefficients(model,'c',@ccoeffunction,...)

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

ccoeff = ...
@(location,state) myfunWithAdditionalArgs(location,state,arg1,arg2...)
specifyCoefficients(model,'c',ccoeff,...
  • 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, подробный в Некоторых c Векторах Может Быть Коротким. Для 2D геометрии, 1 ≤ N 1 ≤ 4N2, и для 3-D геометрии, 1 ≤ N 1 ≤ 9N2.

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

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

c=[12281+x2+y2u(2)1+u(1)2+u(3)2u(2)1+u(1)2+u(3)21+x2+y2s1(x,y)−1−1s1(x,y)]

где не включенными в список элементами является нуль. Здесь s 1 (x, y) 5 в субдомене 1 и 10 в субдомене 2.

Этот c симметричная, блочно диагональная матрица с различными коэффициентами в каждом блоке. Таким образом, естественно представлять c как Вектор-столбец 3N-элемента c, 2D Системы:

(c(1)c(2)00⋯00c(2)c(3)00⋯0000c(4)c(5)⋯0000c(5)c(6)⋯00⋮⋮⋮⋮⋱⋮⋮0000⋯c(3N−2)c(3N−1)0000⋯c(3N−1)c(3N))

Для той формы следующая функция является соответствующей.

function cmatrix = ccoeffunction(location,state)

n1 = 9;
nr = numel(location.x);
cmatrix = zeros(n1,nr);
cmatrix(1,:) = ones(1,nr);
cmatrix(2,:) = 2*ones(1,nr);
cmatrix(3,:) = 8*ones(1,nr);
cmatrix(4,:) = 1+location.x.^2 + location.y.^2;
cmatrix(5,:) = state.u(2,:)./(1 + state.u(1,:).^2 + state.u(3,:).^2);
cmatrix(6,:) = cmatrix(4,:);
cmatrix(7,:) = 5*location.subdomain;
cmatrix(8,:) = -ones(1,nr);
cmatrix(9,:) = cmatrix(7,:);

Включать эту функцию как ваш c коэффициент, передайте указатель на функцию @ccoeffunction:

specifyCoefficients(model,'c',@ccoeffunction,...

Похожие темы