Hi Simon,

To this end, I am solving n linear systems, where n is the number of parameters:
K * sensitivity[i] = rhs[i]    i=1,...,n
K is the (symmetric) tangent matrix which I already use to solve for the solution of my pde, that is,
I just assemble the rhs vectors anew.
The result is the Jacobian matrix
J = [ sensitivity[1] ;...; sensitivity[n] )
which has as many rows as my pde has degrees of freedom.
J has dimensions 320x8, that is,
my pde has 320 dofs and I want to optimise 8 parameters.
The solution of my pde (the dofs) are in the interval [0 to 1] and the parameters are in the interval [0 to 1e5] , i.e., the entries of J are rather small per nature (1e-6 to 1e-10). I evaluated the condition number of J in matlab: cond(J) = 1e13, which is too large given that the optimization algorithm works on J^t*J.

I might be missing something, but how do you define the condition number of a non-square matrix?

Separately, though: what is the relationship between the condition number of J and solving linear systems with K? If I understand you right...

Currently, I solve the above n linear systems using the direct solver UMFPACK. I know that there is no such thing like a preconditioner for direct solvers. Thus, I solved the linear systems using the iterative SolverCG with a preconditioner:
         const int solver_its = 1000
         const double tol_sol = 1e-15
         SolverControl solver_control(solver_its, tol_sol);
         GrowingVectorMemory<Vector<double> > GVM;
         SolverCG<Vector<double> > solver_CG(solver_control, GVM);
         PreconditionSSOR<> preconditioner;
         preconditioner.initialize(tangent_matrix, 1.2);
         //solve the linear systems...
However, the condition number of J is still around 1e13.


...then this is the code you use to solve with K. K being whatever it is, the preconditioner you use only affects *how* you solve the linear systems with K, but it has no effect on the *solution* of the linear systems, and so this piece of code has no influence on J: J is what it is, and the condition number of J is what it is independent of the code you use to *solve for J*.

My idea was to push the condition number of J at least some order of magnitudes when applying a preconditioner to my tangent matrix.
Is this consideration reasonable?

The condition number of J is determined by your choice of parameters. If I understand things right, your J^T J is 8x8, and if it is poorly conditioned, you need to choose the 8 parameters differently, for example (i) scaled in a different way, and (ii) as linear combinations of what you use right now.

Best
 W.

--
------------------------------------------------------------------------
Wolfgang Bangerth          email:                 bange...@colostate.edu
                           www: http://www.math.colostate.edu/~bangerth/

--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to dealii+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/998f5bc1-e755-282c-7eb6-504249f669b9%40colostate.edu.

Reply via email to