<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    &gt;&gt; Could you explain more about the task you're trying to do.
    <br>
    <br>
    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>
    <br>
    Regards,<br>
    Alexander<br>
    <br>
    <br>
    On 16.06.2011 14:55, Jed Brown wrote:
    <blockquote
      cite="mid:BANLkTim9AR+YVojdrykFhMQ3iKqi2Tj4ig@mail.gmail.com"
      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">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>
  </body>
</html>