next up previous print clean
Next: CAUSAL INTEGRATION RECURSION Up: DERIVATIVE AND INTEGRAL Previous: DERIVATIVE AND INTEGRAL

Adjoint derivative

Given a sampled signal, its time derivative can be estimated by convolution with the filter $(1,-1)/\Delta t$.This could be done with any convolution program. For example if we choose to ignore end effects we might select convin() [*]. This example arises so frequently that I display the matrix multiply below:

 
 \begin{displaymath}
\left[ \begin{array}
{c}
 y_1 \  y_2 \  y_3 \  y_4 \  y_...
 ..._1 \  x_2 \  x_3 \  x_4 \  x_5 \  x_6
 \end{array} \right]\end{displaymath} (22)

The filter impulse response is seen in any column in the middle of the matrix, namely (1,-1). In the transposed matrix the filter impulse response is time reversed to (-1,1). So, mathematically, we can say that the adjoint of the time derivative operation is the negative time derivative. This corresponds also to the fact that the complex conjugate of $-i\omega$ is $i\omega$.We can also speak of the adjoint of the boundary conditions: we might say the adjoint of ``no boundary condition'' is ``specified value'' boundary conditions.

Banded matrices like in (21) and (22) arise commonly, and subroutines like convin() [*] are awkward and over-general because they sum with a do loop where a mere statement of the two terms is enough. This is illustrated in subroutine ruffen1(). Notice the adjoint calculation resembles that in spot1() [*].  

subroutine ruffen1( adj,    n, xx, yy     )
integer i,          adj,       n
real                        xx(n), yy( n-1)
call adjnull(       adj, 0, xx,n,  yy, n-1)
do i= 1, n-1 {
        if( adj == 0 )
                yy(i) = yy(i) + xx(i+1) - xx(i)
        else {
                xx(i+1) = xx(i+1) + yy(i)
                xx(i  ) = xx(i  ) - yy(i)
                }
        }
return; end


next up previous print clean
Next: CAUSAL INTEGRATION RECURSION Up: DERIVATIVE AND INTEGRAL Previous: DERIVATIVE AND INTEGRAL
Stanford Exploration Project
10/21/1998