exponenta event banner

Решите УЧП с начальными условиями

Примечание

ЭТОТ ПЭЙДЖ ОПИСЫВАЕТ УСТАРЕВШИЙ РАБОЧИЙ ПРОЦЕСС. Новые возможности не могут быть совместимы с устаревшим рабочим процессом. Для соответствующего шага в рекомендуемом рабочем процессе смотрите Установленные Начальные условия.

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

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. Текстовые выражения представляют векторы в узлах, так используйте .* для умножения, ./ для деления и .^ для возведения в степень.

Например, если у вас есть начальное условие

u(x,y)=xyпотому что(x)1+x2+y2

затем можно использовать это выражение для начального условия.

'x.*y.*cos(x)./(1 + x.^2 + y.^2)'

Для системы N > 1 уравнение, используйте текстовый массив с одной строкой для каждого компонента, такой как

char('x.^2 + 5*cos(x.*y)',...
    'tanh(x.*y)./(1 + z.^2)')

Начальные условия в узлах Mesh

Передайте 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 как начальное условие.