Термин 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.x
, location.y
и, для 3-D задач, location.z
. initfun
необходимо вернуть матрицу u0
размера N -by- M
, где N количество уравнений в вашем УЧП и M = length(location.x)
. Поля в location
являются векторы-строки.
Например, предположим, что у вас есть 2-D задача с N = 2 уравнениями:
Эта проблема m
= 1, c
= 1, и f
= . Потому что m
является ненулевым, задайте как начальное значение u, так и начальное значение производной u.
Запишите следующие файлы функции. Сохраните их в местоположении на MATLAB® путь.
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);
Можно использовать результаты предыдущего анализа как узловые начальные условия для текущей модели. Геометрия и mesh модели, которую вы использовали для получения результатов, и текущей модели должны быть одинаковыми. Для примера решите зависящую от времени УЧП задачу на время от 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)