Термин initial condition имеет два значения:
Для зависящих от времени проблем начальным условием является решение u в начальное время, и также начальную производную времени если m
коэффициент является ненулевым. Установите начальное условие в использовании модели setInitialConditions
.
Для нелинейных стационарных проблем начальным условием является предположение или приближение решения u в начальной итерации нелинейного решателя. Установите начальное условие в использовании модели setInitialConditions
.
Если вы не задаете начальное условие для стационарной проблемы, solvepde
использует нулевую функцию для начальной итерации.
Для системы уравнений N можно дать постоянные начальные условия или как скаляр или как вектор с компонентами N. Например, если начальным условием является u = 15 для всех компонентов, используйте следующую команду.
setInitialConditions(model,15);
Если N = 3, и начальное условие 15 для первого уравнения, 0 для второго уравнения, и –3 для третьего уравнения, используйте следующие команды.
u0 = [15,0,-3]; setInitialConditions(model,u0);
Если m
коэффициент является ненулевым, дайте начальное условие для производной времени также. Установите эту начальную производную в той же форме как первое начальное условие. Например, если начальной производной решения является [4,3,0]
, используйте следующие команды.
u0 = [15,0,-3]; ut0 = [4,3,0]; setInitialConditions(model,u0,ut0);
Если ваши начальные условия не являются постоянными, установите их путем записи функции формы.
function u0 = initfun(location)
solvepde
вычисляет и заполняет данные в location
массив структур и передачи эти данные к вашей функции. Можно задать функцию так, чтобы ее выход зависел от этих данных. Можно использовать любое имя вместо location
. Чтобы использовать дополнительные аргументы в вашей функции, перенесите свою функцию (который берет дополнительные аргументы) с анонимной функцией, которая берет только location
аргумент. Например:
u0 = @(location) initfunWithAdditionalArgs(location,arg1,arg2...) setInitialConditions(model,u0)
location
массив структур с полями location.x
, location.y
, и, для 3-D проблем, location.z
. Ваша функция должна возвратить матричный u0
из размера N-by-M
, где N является количеством уравнений в вашем УЧП и M = length(location.x)
. Поля в location
векторы-строки.
Например, предположите, что у вас есть 2D проблема с N = 2 уравнения:
Эта проблема имеет m
= 1, c
= 1, и f
= . Поскольку m
является ненулевым, дайте и начальное значение u и начальное значение производной u.
Запишите следующие файлы функции. Сохраните их в местоположение на вашем MATLAB® path.
function uinit = u0fun(location)
M = length(location.x);
uinit = zeros(2,M);
uinit(1,:) = 4 + location.x.^2 + location.y.^2;
function utinit = ut0fun(location)
M = length(location.x);
utinit = zeros(2,M);
utinit(2,:) = sin(location.x.*location.y);
Передайте начальные условия своей модели PDE:
u0 = @u0fun; ut0 = @ut0fun; setInitialConditions(model,u0,ut0);
Можно использовать результаты предыдущего анализа как узловые начальные условия для текущей модели. Геометрия и сетка модели, вы раньше получали результаты и текущую модель, должны быть тем же самым. Например, решите зависящую от времени задачу УЧП в течение многих времен от t0
к t1
с временным шагом tstep
.
results = solvepde(model,t0:tstep:t1);
Если позже необходимо решить эту задачу УЧП в течение многих времен от t1
к t2
, можно использовать results
устанавливать начальные условия. Если вы явным образом не задаете временной шаг, setInitialConditions
использование results
соответствуя в прошлый раз решения, t1
.
setInitialConditions(model,results)
Использовать results
в течение конкретного времени решения вместо последнего задайте индекс времени решения как третий параметр setInitialConditions
. Например, чтобы использовать решение во время t0 + 10*tstep
, задайте 11
как третий параметр.
setInitialConditions(model,results,11)