<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    On 16.06.2011 16:07, Matthew Knepley wrote:
    <blockquote
      cite="mid:BANLkTiknQ0kWzJ92LPHRFs_5cX39N0DpNg@mail.gmail.com"
      type="cite">On Thu, Jun 16, 2011 at 1:43 PM, Alexander Grayver <span
        dir="ltr">&lt;<a moz-do-not-send="true"
          href="mailto:agrayver@gfz-potsdam.de">agrayver@gfz-potsdam.de</a>&gt;</span>
      wrote:<br>
      <div class="gmail_quote">
        <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
          0.8ex; border-left: 1px solid rgb(204, 204, 204);
          padding-left: 1ex;">
          <div bgcolor="#ffffff" text="#000000">
            <div class="im"> &gt;&gt; Could you explain more about the
              task you're trying to do. <br>
              <br>
            </div>
            Well, I can try. That is pretty specific task, I wouldn't
            like to go deep into details. <br>
            <br>
            Let's say we have a discretized model of some physical
            parameter m (say acoustic velocity). Number of model
            parameters is N. We need to take M measurements d within
            model (say time traveling of acoustic wave) based on M
            different sets of receiver/source positions.<br>
            In our case N &gt;&gt; M (e.g. 10^7 &gt;&gt; 10^3).<br>
            We have operator F (which might linear or not) that defines
            relationship between m and d:<br>
            d=F(m)<br>
            <br>
            The operator F is just a system of equations actually. I
            have no problem now to solve it for any m.<br>
            <br>
            What I need now is to compute the variation of this
            operator:<br>
            <br>
            A = \frac{\partial d_i}{\partial m_j}, for all i=1..M,
            j=1..N<br>
            <br>
            After some maths this calculation could be reformulated as a
            triple product:<br>
            <br>
            A_i = C*F(m)^-1*v<br>
            <br>
            Where C some sparse matrix.<br>
            <br>
            Once the A is computed I want to solve another problem:<br>
            <br>
            (A'*A)b=A'*r<br>
            <br>
            Which is a Gauss-Newton system now, <br>
            A'*A is truncated Hessian, <br>
            A'*r is gradient, <br>
            r = d - d_obs, where d_obs is the real observed data.<br>
            b -- model change which have to applied to original model m
            in order to explain your observed data better<br>
            <br>
            The latter problem I want to solve using petsc matrix-free
            formulation and some iterative solver (haven't decided yet
            which, could you advice one?).<br>
            <br>
            But the POINT here is that the latter problem must be solved
            not in the original m-space, but in transformed x-space. For
            that we need another A:<br>
            <br>
            A_tr = \frac{\partial d_i}{\partial x_j}<br>
            <br>
            However, using chain rule you can represent A_tr in terms of
            A:<br>
            <br>
            A = \frac{\partial d_i}{\partial m_j} * \frac{\partial
            m_j}{\partial x_j} <br>
            <br>
            \frac{\partial m_j}{\partial x_j} - is the exactly
            transformation I want to apply to matrix A. It's a simple
            scalar expression, but has to be applied to each element of
            A.<br>
            <br>
            Did it help? :)<br>
          </div>
        </blockquote>
        <div><br>
        </div>
        <div>Do you ever actually use A? If not, why not just build the
          transformed operator directly?</div>
      </div>
    </blockquote>
    <br>
    Two reasons:<br>
    1. It's wrong from the architectural point view. At the point where
    I compute A I prefer know nothing about transformation, just working
    with original physical parameters is much more natural.<br>
    2. This original A might be used in the future. <br>
    <br>
    I really suggested that would be easier to apply this transformation
    to the whole matrix. If it's impossible than I have to find another
    way. Just want to be sure of that. <br>
    <br>
    <blockquote
      cite="mid:BANLkTiknQ0kWzJ92LPHRFs_5cX39N0DpNg@mail.gmail.com"
      type="cite">
      <div class="gmail_quote">
        <div><br>
        </div>
        <div>&nbsp; &nbsp;Matt</div>
        <div>&nbsp;</div>
        <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
          0.8ex; border-left: 1px solid rgb(204, 204, 204);
          padding-left: 1ex;">
          <div bgcolor="#ffffff" text="#000000"> Regards,<br>
            <font color="#888888"> Alexander</font>
            <div>
              <div class="h5"><br>
                <br>
                <br>
                On 16.06.2011 14:55, Jed Brown wrote:
                <blockquote type="cite">
                  <div class="gmail_quote">On Thu, Jun 16, 2011 at
                    14:48, Alexander Grayver <span dir="ltr">&lt;<a
                        moz-do-not-send="true"
                        href="mailto:agrayver@gfz-potsdam.de"
                        target="_blank">agrayver@gfz-potsdam.de</a>&gt;</span>
                    wrote:<br>
                    <blockquote class="gmail_quote" style="margin: 0pt
                      0pt 0pt 0.8ex; border-left: 1px solid rgb(204,
                      204, 204); padding-left: 1ex;"> by the grid I
                      meant that this matrix is 2d array, not a real
                      grid of some physical parameters or whatever and
                      it's also not a linear operator itself.</blockquote>
                  </div>
                  <div><br>
                  </div>
                  <div>Could you explain more about the task you're
                    trying to do. Pseudocode or Matlab for the whole
                    process would be useful. There might be a better way
                    to do this without using Mat to store something that
                    is not a linear operator.</div>
                </blockquote>
                <br>
              </div>
            </div>
          </div>
        </blockquote>
      </div>
      <br>
      <br clear="all">
      <br>
      -- <br>
      What most experimenters take for granted before they begin their
      experiments is infinitely more interesting than any results to
      which their experiments lead.<br>
      -- Norbert Wiener<br>
    </blockquote>
    <br>
  </body>
</html>