Установите начальные условия

Что такое начальные условия?

Термин 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 уравнения:

2ut2·(u)=[3+x4xy]u(0)=[4+x2+y20]ut(0)=[0sin(xy)]

Эта проблема имеет m = 1, c = 1, и f = [3+x4xy]. Поскольку 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)

Похожие темы