exponenta event banner

Задайте 3-D коэффициенты УЧП в функциональной форме

Примечание

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

Обычно, самый простой способ дать коэффициенты как результат программы состоит в том, чтобы использовать символьное выражение. Для этого подхода смотрите, Задают Скалярные Коэффициенты УЧП в символьной Форме. Для более подробного управления коэффициентами, тем не менее, можно написать коэффициенты в функциональной форме.

Коэффициент в функциональной форме для 3-D геометрии использует этот синтаксис:

coeff = myfun(location,state)

coeff представляет любой коэффициент: c, a, f или d. Решатели Partial Differential Equation Toolbox™ передают location и данные state к вашей функции.

  • location является структурой с этими полями:

    • location.x

    • location.y

    • location.z

    Поля представляют x - y - и z - координаты точек, для которых ваша функция вычисляет содействующие значения. Поля местоположения являются векторами - строками.

  • state является структурой с этими полями:

    • state.u

    • state.ux

    • state.uy

    • state.uz

    • state.t

    Поле state.u представляет текущее значение решения u. state.ux, state.uy и поля state.uz являются оценками частных производных решения (∂u / ∂ x, ∂u / ∂ y и ∂u / ∂ z) в соответствующих точках структуры местоположения. Решение и оценки градиента являются векторами - строками. Поле state.t является скалярным временем представления для решателей hyperbolic и parabolic.

coeff вывод вашей функции является NC-by-M матрица, где

  • NC является длиной содействующего вектор-столбца.

  • M является длиной любого из полей location. Это - также длина полей state.u.

Ваша функция должна вычислить векторизованным способом. Другими словами, это должно возвратить матрицу значений для каждой точки в location. Например, в N = 1 проблема, где коэффициент f равняется 1 + x 2, одна возможная функция:

function fcoeff = ffunction(location,state)

fcoeff = 1 + location.x.^2;

Чтобы передать этот коэффициент решателю parabolic, установите коэффициент на @ffunction. Например:

f = @ffunction;
% Assume the other inputs are defined
u = parabolic(u0,tlist,model,c,a,f,d);

Если вам нужно постоянное значение, используйте размер location.x как количество столбцов матрицы. Для N = 3 проблемы:

function fcoeff = ffunction(location,state)

fcoeff = ones(3,length(location.x));