solvepde

Решение УЧП, заданное в PDEModel

Описание

пример

result = solvepde(model) возвращает решение стационарному УЧП, представленному в model. Стационарный УЧП имеет свойство model.IsTimeDependent = false. То есть, производные по времени коэффициенты m и d в model.EquationCoefficients должен быть 0.

пример

result = solvepde(model,tlist) возвращает решение зависящего от времени УЧП, представленного в model в то время tlist. По крайней мере, один коэффициент производной по времени m или d в model.EquationCoefficients должно быть ненулевым.

Примеры

свернуть все

Создайте модель УЧП и включите геометрию L-образной мембраны.

model = createpde();
geometryFromEdges(model,@lshapeg);

Просмотрите геометрию с метками ребер.

pdegplot(model,'EdgeLabels','on')
ylim([-1.1,1.1])
axis equal

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

Установите нулевые условия Дирихле на всех ребрах.

applyBoundaryCondition(model,'dirichlet','Edge',1:model.Geometry.NumEdges,'u',0);

Уравнение Пуассона

-u=1.

Решатели Тулбокса адресуют уравнения вида

m2ut2+dut-(cu)+au=f.

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

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

Создайте сетку модели и решите УЧП.

generateMesh(model,'Hmax',0.25);
results = solvepde(model);

Просмотрите решение.

pdeplot(model,'XYData',results.NodalSolution)

Figure contains an axes. The axes contains an object of type patch.

Создайте модель с 3-D прямоугольной геометрией блоков.

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

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

gfun = @(region,state)-state.u.^3*1e-6;
applyBoundaryCondition(model,'neumann','Face',1:model.Geometry.NumFaces,'g',gfun);

Коэффициенты модели не имеют исходного условия.

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

Блок начинается с постоянной температуры 350.

setInitialConditions(model,350);

Сетка геометрии и решение модели для времени от 0 до 20.

generateMesh(model);
tlist = 0:20;
results = solvepde(model,tlist);

Постройте график решения на поверхности блока в моменты времени 1 и 20.

pdeplot3D(model,'ColorMapData',results.NodalSolution(:,2))

figure
pdeplot3D(model,'ColorMapData',results.NodalSolution(:,21))

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

свернуть все

Модель PDE, заданная как PDEModel объект. Модель содержит геометрию, mesh и коэффициенты задачи.

Пример: model = createpde(1)

Время решения, заданное как вектор действительных чисел. tlist должен быть монотонным вектором (увеличивающимся или уменьшающимся).

Пример: 0:20

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

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

свернуть все

Результаты УЧП, возвращенные как StationaryResults объект или как TimeDependentResults объект. Тип result зависит от того, model представляет стационарную задачу (model.IsTimeDependent = false) или зависящая от времени задача (model.IsTimeDependent = true).

Совет

  • Если итерация Ньютона не сходится, solvepde отображает сообщение об ошибке Too many iterations или Stepsize too small.

  • Если начальное предположение создает матрицы, содержащие NaN или Inf элементы, solvepde отображает сообщение об ошибке Unsuitable initial guess U0 (default: U0 = 0).

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

Введенный в R2016a