This example shows how to solve a nonlinear elliptic problem.
A nonlinear problem is one whose coefficients not only depend on spatial coordinates, but also on the solution itself. An example of this is the minimal surface equation
on the unit disk, with
on the boundary. To express this equation in toolbox form, note that the elliptic equation in toolbox syntax is
The PDE coefficient
c is the multiplier of
is a function of the solution , so the problem is nonlinear. In toolbox syntax, you see that the and coefficients are 0.
Create a PDE Model with a single dependent variable, and include the geometry of the unit disk. The
circleg function represents this geometry. Plot the geometry and display the edge labels.
numberOfPDE = 1; model = createpde(numberOfPDE); 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);
Create a function that represents the boundary condition .
bcMatrix = @(region,~)region.x.^2; applyBoundaryCondition(model,'dirichlet','Edge',1:model.Geometry.NumEdges,'u',bcMatrix);
generateMesh(model,'Hmax',0.1); figure; pdemesh(model); axis equal
Because the problem is nonlinear, solvepde invokes nonlinear solver. Observe the solver progress by setting the
SolverOptions.ReportStatistics property of
model.SolverOptions.ReportStatistics = 'on'; result = solvepde(model); u = result.NodalSolution;
Iteration Residual Step size Jacobian: Full 0 2.7254e-02 1 3.5437e-04 1.0000000 2 1.1057e-06 1.0000000
figure; pdeplot(model,'XYData',u,'ZData',u); xlabel 'x' ylabel 'y' zlabel 'u(x,y)' title 'Minimal surface'