ЭТОТ ПЭЙДЖ ОПИСЫВАЕТ УСТАРЕВШИЙ РАБОЧИЙ ПРОЦЕСС. Новые возможности не могут быть совместимы с устаревшим рабочим процессом. Для соответствующего шага в рекомендуемом рабочем процессе смотрите Установленные Начальные условия.
Initial conditions имеет два значения:
Для parabolic и решателей hyperbolic, начальное условие u0 является решением u в начальное время. Необходимо задать начальное условие для этих решателей. Передайте начальное условие в первом аргументе или аргументах.
u = parabolic(u0,... or u = hyperbolic(u0,ut0,...
Для решателя hyperbolic необходимо также задать ut0, который является значением производной u относительно времени в начальное время. ut0 имеет ту же форму как u0.
Для нелинейных эллиптических проблем начальное условие u0 является предположением или приближением решения u в начальной итерации pdenonlin нелинейный решатель. Вы передаете u0 в паре "имя-значение" 'U0'.
u = pdenonlin(b,p,e,t,c,a,f,'U0',u0)Если вы не задаете начальные условия, pdenonlin использует нулевую функцию для начальной итерации.
Можно задать начальные условия как константу путем передачи скаляра или вектора символов.
Для скалярных проблем или систем уравнений, дайте скаляр как начальное условие. Например, установите u0 на 5 для начального условия 5 в каждом компоненте.
Для систем уравнений N дайте условие начальной буквы вектора символов со строками N. Например, если существует N = 3 уравнения, можно дать начальным условиям u0 = char('3','-3','0').
Можно задать текстовые выражения для начальных условий. Начальные условия являются функциями x и одного только y, и, для 3-D проблем, z. Текстовые выражения представляют векторы в узлах, так используйте .* для умножения, ./ для деления и .^ для возведения в степень.
Например, если у вас есть начальное условие
затем можно использовать это выражение для начального условия.
'x.*y.*cos(x)./(1 + x.^2 + y.^2)'Для системы N > 1 уравнение, используйте текстовый массив с одной строкой для каждого компонента, такой как
char('x.^2 + 5*cos(x.*y)',... 'tanh(x.*y)./(1 + z.^2)')
Передайте u0 как вектор-столбец значений в узлах mesh. Узлами является или model.Mesh.Nodes или данные p из initmesh или meshToPet. Смотрите Данные о Mesh.
Для надежности начальные условия и граничные условия должны быть сопоставимыми.
Размер вектор-столбца u0 зависит от количества уравнений, N, и на количестве узлов в mesh, Np.
Для скалярного u задайте вектор-столбец длины Np. Значение элемента k соответствует узлу p(k).
Для системы уравнений N задайте вектор-столбец N *Np элементы. Первые элементы Np содержат значения 1 компонента, где значение элемента k соответствует узлу p(k). Следующие точки Np содержат значения 2 компонента и т.д. Может быть удобно сначала представлять начальные условия u0 как Np-by-N матрица, где первый столбец содержит записи для 1 компонента, второй столбец содержит записи для 2 компонента и т.д. Итоговым представлением начальных условий является u0(:).
Например, предположите, что у вас есть функциональный myfun(x,y), который вычисляет значение начального условия u0(x,y) как вектор - строка из длины N для 2D проблемы. Предположим, что p является обычными данными об узле mesh (см. Данные о Mesh). Вычислите начальные условия для всех узлов mesh p.
% Assume N and p exist; N = 1 for a scalar problem np = size(p,2); % Number of mesh points u0 = zeros(np,N); % Allocate initial matrix for k = 1:np x = p(1,k); y = p(2,k); u0(k,:) = myfun(x,y); % Fill in row k end u0 = u0(:); % Convert to column form
Задайте u0 как начальное условие.