exponenta event banner

Задайте скалярные коэффициенты УЧП в символьной форме

Примечание

ЭТОТ ПЭЙДЖ ОПИСЫВАЕТ УСТАРЕВШИЙ РАБОЧИЙ ПРОЦЕСС. Новые возможности не могут быть совместимы с устаревшим рабочим процессом. Для соответствующего шага в рекомендуемом рабочем процессе смотрите рекомендуемые примеры на странице PDE Coefficients.

Запишите текстовое выражение с помощью этих соглашений:

  • 'x'x - координата

  • 'y'y - координата

  • 'z'z - координата (3-D геометрия)

  • U Решение уравнения

  • 'ux' — производная u в x - направление

  • 'uy' — производная u в y - направление

  • 'uz' — Производная u в z - направление (3-D геометрия)

  • T Время (параболические и гиперболические уравнения)

  • 'sd' — Номер субдомена (не используемый в 3-D геометрии)

Например, вы могли использовать этот вектор символов, чтобы представлять коэффициент:

'(x + y)./(x.^2 + y.^2 + 1) + 3 + sin(t)./(1 + u.^4)'

Примечание

Используйте .*, ./ и .^ для умножения, деления и операций возведения в степень. Текстовые выражения работают с векторами - строками, таким образом, операции должны быть целесообразными для векторов - строк. Для 2D геометрии векторы - строки являются значениями в треугольных центроидах в mesh.

Можно записать функции MATLAB® для выражений простого текста, а также коэффициентов. Например, предположите свой коэффициент, f дан файлом fcoeff.m:

function f = fcoeff(x,y,t,sd)

f = (x.*y)./(1 + x.^2 + y.^2); % f on subdomain 1
f = f + log(1 + t); % include time
r = (sd == 2); % subdomain 2
f2 = cos(x + y); % coefficient on subdomain 2 
f(r) = f2(r); % f on subdomain 2

Представляйте эту функцию в решателе parabolic, например:

u1 = parabolic(u0,tlist,b,p,e,t,c,a,'fcoeff(x,y,t,sd)',d)

Внимание

В функциональной форме t представляет треугольники, и time представляет время. В символьной форме t представляет время, и треугольники не вводят в форму.

Существует простой способ записать текстовое выражение для нескольких субдоменов, не используя 'sd' или функцию. Разделите формулы для различных субдоменов с символом '!'. Обычно используйте то же количество выражений как субдомены. Однако, если выражение не зависит от номера субдомена, можно дать всего одно выражение.

Например, выражение для входа (a, c, f или d) с тремя субдоменами:

'2 + tanh(x.*y)!cosh(x)./(1 + x.^2 + y.^2)!x.^2 + y.^2'

Коэффициент c является матрицей 2 на 2. Можно дать c в любой из следующих форм:

  • Скалярный или один вектор символов — программное обеспечение интерпретирует c как диагональную матрицу:

    (c00c)

  • Двухэлементный текстовый массив вектор-столбца или 2D строки — программное обеспечение интерпретирует c как диагональную матрицу:

    (c(1)00c(2))

  • Трехэлементный вектор-столбец или текстовый массив с тремя строками — программное обеспечение интерпретируют c как симметрическую матрицу:

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

  • Четырехэлементный вектор-столбец или текстовый массив с четырьмя строками — программное обеспечение интерпретируют c как полную матрицу:

    (c(1)c(3)c(2)c(4))

Например, c как симметрическая матрица с cos(xy) на недиагональных условиях:

c = char('x.^2+y.^2',...
    'cos(x.*y)',...
    'u./(1+x.^2+y.^2)')

Чтобы включать субдомены, разделенные '!', включайте '!' в каждую строку. Например,

c = char('1 + x.^2 + y.^2!x.^2 + y.^2',...
    'cos(x.*y)!sin(x.*y)',...
    'u./(1 + x.^2 + y.^2)!u.*(x.^2 + y.^2)')

Внимание

Не используйте пробелы при определении коэффициентов в приложении PDE Modeler. Синтаксический анализатор может неправильно истолковать пробел как векторный разделитель, как тогда, когда вектор MATLAB использует пространство, чтобы разделить элементы вектора.

Для эллиптических проблем, когда вы включаете 'u', 'ux', 'uy' или 'uz', необходимо использовать решатель pdenonlin вместо assempde. В приложении PDE Modeler выберите Solve > Parameters > Use nonlinear solver.