On Thu, Jun 16, 2011 at 1:43 PM, Alexander Grayver <span dir="ltr"><<a href="mailto:agrayver@gfz-potsdam.de">agrayver@gfz-potsdam.de</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div bgcolor="#ffffff" text="#000000"><div class="im">
>> 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 >> M (e.g. 10^7 >> 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><br></div><div> Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div bgcolor="#ffffff" text="#000000">
Regards,<br><font color="#888888">
Alexander</font><div><div></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"><<a href="mailto:agrayver@gfz-potsdam.de" target="_blank">agrayver@gfz-potsdam.de</a>></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>