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
Поля x
Y
, и 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);
Это представляет коэффициентную функцию