# Minimal Surface Problem

This example shows how to solve the minimal surface equation

`$-\nabla \cdot \left(\frac{1}{\sqrt{1+{|\nabla \mathit{u}|}^{2}}}\nabla \mathit{u}\right)=0$`

on the unit disk $\Omega =\left\{\left(\mathit{x},\mathit{y}\right)|{\mathit{x}}^{2}+{\mathit{y}}^{2}\le 1\right\}$, with $\mathit{u}\left(\mathit{x},\mathit{y}\right)={\mathit{x}}^{2}$ on the boundary $\partial \Omega$. An elliptic equation in the toolbox form is

$-\nabla \cdot \left(\mathit{c}\nabla \mathit{u}\right)+\mathit{au}=\mathit{f}$.

Therefore, for the minimal surface problem, the coefficients are as follows:

$\mathit{c}=\frac{1}{\sqrt{1+{|\nabla \mathit{u}|}^{2}}},\text{\hspace{0.17em}}\text{\hspace{0.17em}}\mathit{a}=0,\text{\hspace{0.17em}}\text{\hspace{0.17em}}\mathit{f}=0$.

Because the coefficient c is a function of the solution u, the minimal surface problem is a nonlinear elliptic problem.

To solve the minimal surface problem using the programmatic workflow, first create a PDE model with a single dependent variable.

`model = createpde;`

Create the geometry and include it in the model. The `circleg` function represents this geometry.

`geometryFromEdges(model,@circleg);`

Plot the geometry with the edge labels.

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

Specify the coefficients.

```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);```

Specify the boundary conditions using the function $\mathit{u}\left(\mathit{x},\mathit{y}\right)={\mathit{x}}^{2}$.

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

Generate and plot a mesh.

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

Solve the problem by using the `solvepde` function. Because the problem is nonlinear, `solvepde` invokes a nonlinear solver. Observe the solver progress by setting the `SolverOptions.ReportStatistics` property of the model to `'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;`

Plot the solution.

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