solvepde

Решите УЧП, заданный в PDEModel

Описание

пример

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

пример

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

Примеры

свернуть все

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

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

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

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

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

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)

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