exponenta event banner

setInitialConditions

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

Описание

пример

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

Примечание

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

пример

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

пример

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

пример

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

пример

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

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

Примеры

свернуть все

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

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

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

Создайте модель 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

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

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

% 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.

  • Скаляр (Scalar) - используется для представления постоянного начального значения для всех компонентов решения в домене.

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

  • Дескриптор функции (Function handle) - используется для представления начальных условий как функции положения. Функция должна иметь вид

    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. Необходимо указать ut0 при наличии ненулевого коэффициента производной по времени второго порядка m.

  • Скаляр (Scalar) - используется для представления постоянного начального значения для всех компонентов решения в домене.

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

  • Дескриптор функции (Function handle) - используется для представления начальных условий как функции положения. Функция должна иметь вид

    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