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

В этом разделе описывается записать коэффициенту f в уравнении

m2ut2+dut·(cu)+au=f

или в подобных уравнениях. Вопрос состоит в том, как записать коэффициенту f для включения в модель PDE через specifyCoefficients.

N является количеством уравнений, смотрите уравнения, которые Можно Решить Используя Тулбокс УЧП. Дайте f как любое из следующего:

  • Если f является постоянным, дайте вектор-столбец с компонентами N. Например, если N = 3, f мог быть:

    f = [3;4;10];
  • Если f не является постоянным, дайте указатель на функцию. Функция должна иметь форму

    fcoeff = fcoeffunction(location,state)

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

    specifyCoefficients(model,'f',@fcoeffunction,...)

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

    fcoeff = ...
    @(location,state) myfunWithAdditionalArgs(location,state,arg1,arg2...)
    specifyCoefficients(model,'f',fcoeff,...
    • 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-by-Nr, где Nr является числом точек в месте это solvepde передачи. Nr равен длине location.x или любой другой location поле . Функция должна оценить f в этих точках.

Например, если N = 3, f мог быть:

function f = fcoeffunction(location,state)

N = 3; % Number of equations
nr = length(location.x); % Number of columns
f = zeros(N,nr); % Allocate f

% Now the particular functional form of f
f(1,:) = location.x - location.y + state.u(1,:);
f(2,:) = 1 + tanh(state.ux(1,:)) + tanh(state.uy(3,:));
f(3,:) = (5 + state.u(3,:)).*sqrt(location.x.^2 + location.y.^2);

Это представляет коэффициентную функцию

f=[xy+u(1)1+tanh(u(1)/x)+tanh(u(3)/y)(5+u(3))x2+y2]

Похожие темы