This page contains the computational Matlab files related to the book *Linear and Nonlinear Inverse Problems with Practical Applications*

written by **Jennifer Mueller** and **Samuli Siltanen** and published by SIAM in 2012.

You can order the book at the SIAM webshop.

This page is related to a smooth and rotationally symmetric conductivity.

The D-bar method is a reconstruction method for the nonlinear inverse conductivity problem arising from

Electrical Impedance Tomography. This page contains Matlab routines implementing the D-bar method

for a smooth and rotationally symmetric conductivity.

Note carefully that although we use the rotational symmetry of the conductivity to speed up some computations,

the reconstruction process including the solution of the D-bar equation is two-dimensional, not one-dimensional.

Please download the Matlab routines below to your working directory and run them in the order they appear.

The first example concerns a rotationally symmetric and smooth conductivity that equals one near the unit circle.

Outside the unit disc the conductivity has value 1.

The following file defines a rotationally symmetric and smooth conductivity in the unit disc: sigma.m.

Furthermore, this file implements the Schrödinger potential related to the conductivity: poten.m.

The Laplace operator appearing in the definition of the potential is implemented by finite differences in poten.m.

The following routines plot the conductivity and the potential, respectively: sigma_plot.m, poten_plot.m.

Please run the plot commands before continuing to make sure that everything is working properly.

You should see something like this:

Next we define a set of points in the k-plane for evaluating the scattering transform t(k).

Because of the rotational symmetry of this example, it is enough to choose k-values along the positive real axis:

the scattering transform is known in this case to be rotationally symmetric and real-valued. Why? See proof.

So please download and run this file: kvec_comp.m.

The above file *kvec_comp.m* defines a set of k-points and saves them to a file called 'data/kvec.mat'.

(Note that *kvec_comp.m* creates a subdirectory called 'data'. If you already created it before, Matlab will show

a warning. However, you don't need to care about the warning.)

When running the example for the first time you might just use the file kvec_comp.m as it is.

Later you might want to modify it to choose a different set of k-values.

Now that we have decided on the k-points, it's time to evaluate the scattering transform. Here we do it first by

'cheating', or by knowing the actual conductivity, because then there are no ill-posed steps involved.

Later we will compute the scattering transform also honestly from (simulated) EIT measurements.

This is the file that evaluates the scattering transform t(k) at the k-points: tLS_comp.m.

The result will be saved to a file called 'data/tLS.mat'. Here 'LS' refers to the use of the Lippmann-Schwinger

equation in the computation of the complex geometric optics solutions. *tLS_comp.m* needs these files:

green_faddeev.m, g1.m, GV_grids.m, GV_LS.m, GVLS_solve.m, GV_project.m, GV_prolong.m

In the names of the above files, 'GV' refers to Gennadi Vainikko, a numerical analyst who invented

the periodization-based algorithm used here for solving Lippmann-Schwinger type equations.

It is interesting to compare the linear and nonlinear Fourier transform. To that end, we compute the Fourier

transform of the potential q using the routines Fq_comp.m and gaussint.m.

After running the files tLS_comp.m and Fq_comp.m, you can plot the results using tLS_plot.m.

You should see something like this:

In the above image, the scattering transform is not quite approaching the value t(0)=0 as k tends to zero,

although we know from theoretical results that this should be the case. Why such an error at zero?

This is because we only used the value M=7 for constructing the grid, which was then of size 128x128.

The Faddeev fundamental solution has a log(|k|) singularity at the origin, and the Lippmann-Schwinger

type approach has always difficulties near the origin. You can either use as big M value as your patience

and computer memory allows, or you can use the boundary integral equation approach below to compute

t(k) for k near zero.

The rule of thumb is: The Lippmann-Schwinger approach for computing t(k) is good for k somewhat

away from the origin, and the boundary integral approach for computing t(k) is good (only) for k near zero.

Since the conductivity is rotationally symmetric, the Dirichlet-to-Neumann map can be approximated by

a diagonal matrix in the Fourier basis. Why? See proof.

The diagonal elements have been precomputed and are simply given as a data file DN1eigs.mat.

The DN matrix is constructed by the routine DN_comp.m.

For details of the computation of the matrix elements, see **Mueller J L and Siltanen S 2003**, *Direct reconstructions of conductivities from boundary measurements*,

SIAM Journal of Scientific Computation **24**(4), pp. 1232-1266. PDF (617 KB)

We need to build matrices for the single layer operators S_k parametrized by the complex number k.

This is done by the routines Hk_comp.m and H1.m.

Here *Hk_comp.m* computes the matrices and *H1.m* is an auxiliary function. Note that the order Ntrig

of trigonometric approximation (in other words, the number of basis functions used) has been chosen

in the routine *DN_comp.m* above and saved to disc for later reference. The routine Hk_comp.m loads

Ntrig from file.

Running the routine *Hk_comp.m* is computationally the most demanding task on this page.

Do not be surprised if it takes 10 minutes or more.

Note that we save time by not running *Hk_comp.m* for too large values of |k|. Namely, the ill-posedness

of the EIT problem has the effect that the boundary integral equation cannot be solved for |k| exceeding

a certain threshold value R; for k values satisfying |k|>R the computation will produce numerical garbage.

Once Hk_comp.m has been run, we can solve the boundary integral equation for the traces of the

complex geometric optics solutions. This is done by the routine psi_BIE_comp.m, and the result is saved

to a file in the subdirectory 'data'. The next step is to evaluate the scattering transform by integration over

the boundary using the routine tBIE_comp.m.

We are now ready to plot the result and compare it to the scattering transform computed using the

Lippmann-Schwinger equation approach. Run the file t_plot.m, and you should see something like this: