В этом примере показано, как решить минимальное поверхностное уравнение
на единичном диске , с на контуре . Эллиптическое уравнение в форме тулбокса
.
Поэтому для минимальной поверхностной проблемы, коэффициенты следующие:
.
Поскольку коэффициент c является функцией решения u, минимальной поверхностной проблемой является нелинейная эллиптическая проблема.
Чтобы решить минимальную поверхностную задачу с помощью программируемого рабочего процесса, сначала создайте модель PDE с одной зависимой переменной.
model = createpde;
Создайте геометрию и включайте ее в модель. 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);
Задайте граничные условия с помощью функции .
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'