Минимальная поверхностная проблема

В этом примере показано, как решить минимальное поверхностное уравнение

-(11+|u|2u)=0

на единичном диске Ω={(x,y)|x2+y21}, с u(x,y)=x2 на контуре Ω. Эллиптическое уравнение в форме тулбокса

-(cu)+au=f.

Поэтому для минимальной поверхностной проблемы, коэффициенты следующие:

c=11+|u|2,a=0,f=0.

Поскольку коэффициент c функция решения u, минимальной поверхностной проблемой является нелинейная эллиптическая проблема.

Чтобы решить минимальную поверхностную задачу с помощью программируемого рабочего процесса, сначала создайте модель PDE с одной зависимой переменной.

numberOfPDE = 1;
model = createpde(numberOfPDE);

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

geometryFromEdges(model,@circleg);

Постройте геометрию, отображающую метки ребра.

pdegplot(model,'EdgeLabels','on'); 
axis equal
title 'Geometry with Edge Labels';

Задайте коэффициенты.

a = 0;
f = 0;
cCoef = @(region,state) 1./sqrt(1+state.ux.^2 + state.uy.^2);
specifyCoefficients(model,'m',0,'d',0,'c',cCoef,'a',a,'f',f);

Задайте граничные условия с помощью функции u(x,y)=x2.

bcMatrix = @(region,~)region.x.^2;
applyBoundaryCondition(model,'dirichlet',...
                             'Edge',1:model.Geometry.NumEdges,...
                             'u',bcMatrix);

Сгенерируйте mesh.

generateMesh(model,'Hmax',0.1);
figure; 
pdemesh(model); 
axis equal

Решите задачу при помощи solvepde функция. Поскольку проблема нелинейна, solvepde вызывает нелинейный решатель. Наблюдайте прогресс решателя путем установки SolverOptions.ReportStatistics свойство модели к 'on'.

model.SolverOptions.ReportStatistics = 'on';
result = solvepde(model);
Iteration     Residual     Step size  Jacobian: Full
   0          1.8540e-02
   1          2.8715e-04   1.0000000
   2          1.2144e-06   1.0000000
u = result.NodalSolution;

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

figure; 
pdeplot(model,'XYData',u,'ZData',u);
xlabel 'x'
ylabel 'y'
zlabel 'u(x,y)'
title 'Minimal Surface'