specifyCoefficientsВ этом разделе описывается записать коэффициенту 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);
Это представляет коэффициентную функцию