It is an old topic and until today I finally implemented it. On a heterogeneous 2D disk, we consider geodesics in phase space according to Hamiltonian as which depicts the movement of a point billiard traveling inside the disk, can be seen as some mountains for potential.
To fully recover the information of speed , we will need the scatter relation , which is a tuple of input phase coordinate, output phase coordinate and traveltime. In theory, and do not need to be located on the boundary, but in practice, we set sources are equi-spaced located on circle, with equi-spaced angles of input, and we record traveltime and output location, angle on the boundary.
So the data we have is described by a matrix, each row containns information about a ray. Numerically, the disk is discretized on grid, so we need to let each grid passed by at least one ray. And it is quite easy to see that error will accumulate exponentially (Since it is simply a time integral).
For reconstruction of speed , once we use linearization, we will arrive at a linear system, but time integral related. We have to solve a non-coupled time integral.
where . And Jacobian satisfies
which of course forms a one-parameter group. We immediately get
where is linear operator in , for each phase coordinate . Thus by trapezoid rule and take matrix form of ,
are weights. And using all scattering pairs, we have a linear system as
As we have seen from previous discussion, matrix has rank ordering property, which means some pairs involves less unknowns, some pairs are involving more unknowns of . So we can reorder the measurement and according to the rank nnz(A(k, :))
, in MATLAB, just use colperm(A')
to get the ordering. It is not a surprise that, the longest ray maybe involve almost all unknowns.
Foliation
We can show the continuity of dependence of on , which is trivial. We need to take small input angle to make sure dependence is minimal, i.e. ray only passes through a minimal number of grids, although, passing through one grid will automatically involve 12 grid points due to gradient in . Thus, it is not numerically possible to do the problem on fine grid, therefore, fine resolution is not doable.
Roughly speaking, for boundary grids, there are 12 values involved for one grid, thus, the safe option for angular discretization is use at least 24 rays at each boundary point to recover boundary values. For interior, it depends, the most central grid needs to be resolved by rays, i.e. strongly/weakly passing through.
Foliation should be done automatically if we have the matrix , rearranged as
Where are smaller sparse matrices and of low rank, means corresponding is possible to solve for some values of . This process is called “Foliation”.
The algorithm can be stated easily (noiseless).
- Consider index set, and , put all non-dependent grid values in , since they are known.
- only consider grids, rearrange by
nnz
of each row, ordering is . - solve part of the problem for a selected , and move this part of index from to .
- Run forward problem and get new data.
- If is non-empty, goto 2.
Complexity
The linear scheme can give at most first order convergence, all timing should be linear. Most time cost are spent on solving the rays, which is a 20-dimensional problem. A fast parallel solver is required for 1000 measurement or above.
In MATLAB, ode45
or ode23
can be used as time integrator, but it kills flexibility if we need to calculate matrix at the same time without memorizing everything, one should implement rk4
for this purpose.
It will be quite slow for sure, the matrix manipulation are not simple ones.