setInitialConditions

Дайте начальные условия или начальное решение

Описание

пример

setInitialConditions(model,u0) устанавливает начальные условия в model. Используйте этот синтаксис для стационарных нелинейных задач или зависящих от времени задач, где производная по времени является первым порядком.

Примечание

Включите геометрию в model перед использованием setInitialConditions.

пример

setInitialConditions(model,u0,ut0) используйте этот синтаксис для зависящих от времени задач, где производная по времени является вторым порядком, таких как гиперболическая задача.

пример

setInitialConditions(___,RegionType,RegionID) устанавливает начальные условия для геометрической области, используя любой из аргументов в предыдущих синтаксисах.

пример

setInitialConditions(model,results) устанавливает начальное предположение для стационарных нелинейных задач с помощью решения results из предыдущего анализа на той же геометрии и mesh. Начальная производная для стационарных задач 0.

пример

setInitialConditions(model,results,iT) устанавливает начальные условия для зависящих от времени задач, используя решение results соответствующий индексу времени решения iT. Если вы не задаете индекс времени iT, setInitialConditions использует время последнего решения в results.

ic = setInitialConditions(___) возвращает указатель на объект начальных условий.

Примеры

свернуть все

Создайте модель УЧП, импортируйте геометрию и установите начальное условие 50 на всей геометрии.

model = createpde();
importGeometry(model,'BracketWithHole.stl');
setInitialConditions(model,50);

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

Создайте модель УЧП для системы с пятью компонентами. Импортируйте Block.stl геометрия.

model = createpde(5);
importGeometry(model,'Block.stl');

Установите начальные условия для каждого компонента в два раза больше, чем номер компонента.

u0 = [2:2:10]';
setInitialConditions(model,u0)
ans = 
  GeometricInitialConditions with properties:

           RegionType: 'cell'
             RegionID: 1
         InitialValue: [5x1 double]
    InitialDerivative: []

Установите различные начальные условия на каждом фрагменте L-образной мембранной геометрии.

Создайте модель, установите функцию геометрии и просмотрите метки поддомена.

model = createpde();
geometryFromEdges(model,@lshapeg);
pdegplot(model,'FaceLabels','on')
axis equal
ylim([-1.1,1.1])

Figure contains an axes. The axes contains 4 objects of type line, text.

Установите субдомен 1 на начальное значение -1, субдомен 2 на начальное значение 1 и субдомен 3 на начальное значение 5.

setInitialConditions(model,-1);
setInitialConditions(model,1,'Face',2);
setInitialConditions(model,5,'Face',3);

Начальная настройка применяется ко всей геометрии. Последующие настройки переопределяют начальные настройки для областей 2 и 3.

Установите начальные условия для L-образной мембранной геометрии, чтобы быть x2+y2, за исключением нижнего левого квадрата, где это x2-y4.

model = createpde();
geometryFromEdges(model,@lshapeg);
pdegplot(model,'FaceLabels','on')
axis equal
ylim([-1.1,1.1])

Figure contains an axes. The axes contains 4 objects of type line, text.

Установите начальные условия равными x2+y2.

initfun = @(location)location.x.^2 + location.y.^2;
setInitialConditions(model,initfun);

Установите начальные условия для области 2 в x2-y4. Этот параметр переопределяет первый параметр, поскольку он применяется после первого параметра.

initfun2 = @(location)location.x.^2 - location.y.^4;
setInitialConditions(model,initfun2,'Face',2);

Гиперболические уравнения имеют ненулевые m коэффициент, поэтому вы должны задать оба u0 и ut0 аргументы.

Импортируйте Block.stl к модели PDE с N = 3 компонентами.

model = createpde(3);
importGeometry(model,'Block.stl');

Установите начальное значение условия равным 0 для всех компонентов. Установите начальную производную.

ut0=[4+xx2+y2+z25-tanh(z)10yx2+y2+z2]

Чтобы создать этот начальный градиент, запишите файл функции и убедитесь, что функция находится в вашем пути MATLAB.

function ut0 = ut0fun(location)

M = length(location.x);

ut0 = zeros(3,M);

denom = location.x.^2+location.y.^2+location.z.^2;

ut0(1,:) = 4 + location.x./denom;

ut0(2,:) = 5 - tanh(location.z);

ut0(3,:) = 10*location.y./denom;

end

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

setInitialConditions(model,0,@ut0fun)
ans = 
  GeometricInitialConditions with properties:

           RegionType: 'cell'
             RegionID: 1
         InitialValue: 0
    InitialDerivative: @ut0fun

Установите начальные условия с помощью решения предыдущего анализа на той же геометрии и mesh.

Создайте и просмотрите геометрию: квадрат с круговым поддоменом.

% Square centered at (1,1), circle centered at (1.5,0.5).
rect1 = [3;4;0;2;2;0;0;0;2;2];
circ1 = [1;1.5;.75;0.25];
% Append extra zeros to the circle;
circ1 = [circ1;zeros(length(rect1)-length(circ1),1)];
gd = [rect1,circ1];
ns = char('rect1','circ1');
ns = ns';
sf = 'rect1+circ1';
[dl,bt] = decsg(gd,sf,ns);
pdegplot(dl,'EdgeLabels','on','FaceLabels','on')
axis equal
ylim([-0.1,2.1])

Figure contains an axes. The axes contains 11 objects of type line, text.

Включите геометрию в модель PDE, установите граничные и начальные условия и задайте коэффициенты.

model = createpde();
geometryFromEdges(model,dl);

% Set boundary conditions that the upper and left edges are at temperature 10.
applyBoundaryCondition(model,'dirichlet','Edge',[2,3],'u',10);

% Set initial conditions that the square region is at temperature 0,
% and the circle is at temperature 100.
setInitialConditions(model,0);
setInitialConditions(model,100,'Face',2);

specifyCoefficients(model,'m',0,...
                          'd',1,...
                          'c',1,...
                          'a',0,...
                          'f',0);

Решите задачу от 0 до 1/2 раз в шагах 0,01.

generateMesh(model,'Hmax',0.05);
tlist = 0:0.01:0.5;
results = solvepde(model,tlist);

Постройте график решения для времени 0.02, 0.04, 0.1 и 0.5.

sol = results.NodalSolution;

subplot(2,2,1)
pdeplot(model,'XYData',sol(:,3))
title('Time 0.02')
subplot(2,2,2)
pdeplot(model,'XYData',sol(:,5))
title('Time 0.04')
subplot(2,2,3)
pdeplot(model,'XYData',sol(:,11))
title('Time 0.1')
subplot(2,2,4)
pdeplot(model,'XYData',sol(:,51))
title('Time 0.5')

Figure contains 4 axes. Axes 1 with title Time 0.02 contains an object of type patch. Axes 2 with title Time 0.04 contains an object of type patch. Axes 3 with title Time 0.1 contains an object of type patch. Axes 4 with title Time 0.5 contains an object of type patch.

Теперь возобновите анализ и решите задачу за время от 1/2 до 1. Используйте ранее полученное решение для времени 1/2 в качестве начального условия. Поскольку 1/2 является последним элементом в tlist, вам не нужно указывать временной индекс решения. По умолчанию setInitialConditions использует последний индекс решения.

setInitialConditions(model,results)
ans = 
  NodalInitialConditions with properties:

         InitialValue: [7289x1 double]
    InitialDerivative: []

Решите задачу для времени от 1/2 до 1 с шагом 0,01.

tlist1 = 0.5:0.01:1.0;
results1 = solvepde(model,tlist1);

Постройте график решения для раз 0,5, 0,7, 0,9 и 1.

sol1 = results1.NodalSolution;

figure

subplot(2,2,1)
pdeplot(model,'XYData',sol1(:,1))
title('Time 0.5')
subplot(2,2,2)
pdeplot(model,'XYData',sol1(:,21))
title('Time 0.7')
subplot(2,2,3)
pdeplot(model,'XYData',sol1(:,41))
title('Time 0.9')
subplot(2,2,4)
pdeplot(model,'XYData',sol1(:,51))
title('Time 1.0')

Figure contains 4 axes. Axes 1 with title Time 0.5 contains an object of type patch. Axes 2 with title Time 0.7 contains an object of type patch. Axes 3 with title Time 0.9 contains an object of type patch. Axes 4 with title Time 1.0 contains an object of type patch.

Чтобы использовать ранее полученное решение для определенного времени решения вместо последнего, задайте индекс времени решения как третий параметр setInitialConditions. Например, используйте решение в момент 0.2, которое является 21-м элементом в tlist.

setInitialConditions(model,results,21)
ans = 
  NodalInitialConditions with properties:

         InitialValue: [7289x1 double]
    InitialDerivative: []

Решите задачу за время от 0.2 до 1 с шагом 0.01.

tlist2 = 0.2:0.01:1.0;
results2 = solvepde(model,tlist2);

Входные параметры

свернуть все

Модель PDE, заданная как PDEModel объект.

Пример: model = createpde

Начальные условия, заданные как скаляр, вектор-столбец длины N или указатель на функцию. N - размер системы PDE. См. Уравнения, которые можно решить с помощью PDE Toolbox.

  • Скаляр - Использует его, чтобы представлять постоянное начальное значение для всех компонентов решения во всей области.

  • Вектор-столбец - Используйте его, чтобы представлять постоянное начальное значение для каждого из N компонентов решения во всей области.

  • Указатель на функцию - Используйте его, чтобы представлять начальные условия как функцию от положения. Функция должна иметь вид

    u0 = initfun(location)

    Решатели передают location как структура с полями location.x, location.yи, для 3-D задач, location.z. initfun необходимо вернуть матрицу u0 размера N -by- M, где M = length(location.x).

Пример: setInitialConditions(model,10)

Типы данных: double | function_handle
Поддержка комплексного числа: Да

Начальное условие для производной по времени, заданное как скаляр, вектор-столбец с N длины или указатель на функцию. N - размер системы PDE. См. Уравнения, которые можно решить с помощью PDE Toolbox. Вы должны задать ut0 когда существует ненулевой коэффициент производной по времени второго порядка m.

  • Скаляр - Использует его, чтобы представлять постоянное начальное значение для всех компонентов решения во всей области.

  • Вектор-столбец - Используйте его, чтобы представлять постоянное начальное значение для каждого из N компонентов решения во всей области.

  • Указатель на функцию - Используйте его, чтобы представлять начальные условия как функцию от положения. Функция должна иметь вид

    u0 = initfun(location)

    Решатели передают location как структура с полями location.x, location.yи, для 3-D задач, location.z. initfun необходимо вернуть матрицу u0 размера N -by- M, где M = length(location.x).

Пример: setInitialConditions(model,10,@initfun)

Типы данных: double | function_handle
Поддержка комплексного числа: Да

Тип геометрической области, заданный как 'Face', 'Edge', 'Vertex', или 'Cell'.

Когда существует несколько начальных назначений условий, решатели используют следующие правила приоритета для определения начального условия.

  • Если существует несколько назначений одной и той же геометрической области, решатели используют последнюю примененную настройку.

  • При наличии отдельных назначений геометрической области и контурам этой области решатели используют указанное назначение области и выбирают назначение на контуре следующим образом. Решатели дают 'Edge' приоритет назначения над 'Face' назначение, даже если вы задаете 'Face' назначение после 'Edge' назначение. Уровни приоритета 'Vertex (наивысший приоритет), 'Edge', 'Face', 'Cell' (наименьший приоритет).

  • Если существует назначение, выполненное с results объект, решатели используют это назначение вместо всех предыдущих назначений.

Пример: setInitialConditions(model,10,'Face',1:4)

Типы данных: char | string

Идентификатор геометрической области, заданный как вектор положительных целых чисел. Поиск идентификаторов областей при помощи pdegplot.

Пример: setInitialConditions(model,10,'Face',1:4)

Типы данных: double

PDE решение, заданное как StationaryResults объект или TimeDependentResults объект. Создание results использование solvepde или createPDEResults.

Пример: results = solvepde(model)

Индекс времени, заданный как положительное целое число.

Пример: setInitialConditions(model,results,21)

Типы данных: double

Выходные аргументы

свернуть все

Указатель на начальное условие, возвращенный как объект. ic связывает начальное условие с геометрической областью в случае геометрического назначения или с узлами в случае основанного на результатах назначения.

Совет

  • Чтобы убедиться, что модель имеет правильную TimeDependent настройка свойств, по возможности задайте коэффициенты перед установкой начальных условий.

  • Чтобы избежать назначения начальных условий неправильной области, убедитесь, что вы используете правильные геометрические идентификаторы областей путем построения графика и визуального просмотра геометрии.

Введенный в R2016a