exponenta event banner

solvepde

Определение PDE, указанного в PDEModel

Описание

пример

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

пример

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

Примеры

свернуть все

Создайте модель PDE и включите геометрию 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.

Решатели панели инструментов адресуют уравнения формы

m∂2u∂t2+d∂u∂t-∇ (c∇u) + au = f.

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

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

Выполните сетку модели и решите PDE.

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 объект. Модель содержит геометрию, сетку и коэффициенты проблем.

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

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

Пример: 0:20

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

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

свернуть все

Результаты PDE, возвращенные как 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 может не сойтись или может сойтись к неверному решению. В этом случае можно получить лучшие результаты путем масштабирования коэффициентов или геометрических размеров порядка 1.

Представлен в R2016a