Accuracy of the Born Approximation

In this sequence of problems you will construct an experiment to verify the analytical results on the accuracy of the Born approximation that was developed in lecture.

Resources and Code Setup

These exercises are best solved using a single python script file, which I will call You can download a version of this file here, where there is space for you to code your solutions, without having to worry about the 'glue' code.

This problem is based on the 1D wave operators that you developed as part of the first three computer exercises. If you are not confident that your solutions are 100% correct, please use the provided solutions to computer problems 1-3 (;; Please note, the provided assumes that you are using these files.

I suggest you develop your solutions inside this file, and then run the script in an IPython console. This is accomplished by starting an IPython console, from an command prompt, with the command ipython --pylab.

Then, from the IPython console, you can run your script with the command:

%run cp5_sol

Velocity Model

For this problem, the velocity models \(c_0\) and \(c_\varepsilon\) are constant functions and step functions, respectively

\[ c_0(x) = 1\\ c_\varepsilon(x) = \left\{ \begin{array}{cc}c_0(x) & 0 \le x < \frac{1}{2} \\ c_0(x) + \varepsilon & \frac{1}{2} \le x \le 1\end{array} \right. . \]

The function build_step_model has been provided for you in and is called by

C, C0 = build_step_model(eps, config)

where eps is the scalar \(\varepsilon\).


Problem 1: On paper, sketch the perturbed velocity model \(c_\varepsilon\). Where will you see the reflected wave? The transmitted wave?

Problem 2: Assume that the input wavelet has a characteristic freuqency \(\nu_0=10\text{Hz}\).

From the notes, in the reflection regime, the Born approximation will be accurate if \(\varepsilon \ll 1\) and in the transmission regime, it will be accurate if \(\varepsilon \ll \min(1, \frac{\lambda}{\tilde x})\), where \(\tilde x\) is the distance to the reflector. For the purposes of this exercise, assume that \(a \ll b\) is equivalent to \(a < \alpha b\) for \(\alpha = \frac{1}{4}\).

For \(\varepsilon \in \{0.001, 0.01, 0.04, 0.1, 0.25, 0.5, 0.75,1.0\}\), predict whether the Born approximation will be accurate at each position \(x \in \{0, 0.45, 0.55,1\}\).

Problem 3: For each of the above positions and values of \(\varepsilon\), verify your prediction numerically by checking to see if

\[ \frac{||u_{sc}(\cdot,t) - u_1(\cdot,t)||^2_2}{||u_{sc}(\cdot,t)||^2_2} < \alpha, \]

where the \(\cdot\) symbol is the placeholder for a fixed spatial position.

You may use the provided forward_operator and linear_forward_operator routines, found in, which return the wavefields as an \((n_t, n_x)\) array, for this.

How do these results compare to the theoretical prediction? Is there a better measure of accuracy?

Problem 4: For some interesting combinations of \(\varepsilon\) and \(x\), use the provided plot_space_time_diagrams(u, u0, u1, config) function to compare the four relevant wavefields. Compare the diagrams to the ones in your notes and use the diagrams to understand where inaccuracy arrises.

Problem 5: For some interesting combinations of \(\varepsilon\) and \(x\), plot the traces of \(u_{sc}\) and \(u_1\) to see indeed how different the wavefields are in each regime. How will these differences impact the optimization/full waveform inversion process?

Are there areas that look fairly accurate but your metric says they are inaccurate? What about the opposite situation?