Re: [eigen] Problem inverting a Matrix4f with Eigen 2.0.0
• To: eigen@xxxxxxxxxxxxxxxxxxx
• Subject: Re: [eigen] Problem inverting a Matrix4f with Eigen 2.0.0
• Date: Sat, 17 Jul 2010 18:16:53 +0300

```Hi List,

Just responding to this discussion on condition number functions and
their availability in similar packages to Eigen..

LAPACK's expert driver routines do calculate the condition number of
the matrix (http://www.netlib.org/lapack/single/).  In Numerical
Linear Algebra, I would consider the condition number's definition
under the 2-norm as the largest singular value divided by the smallest
to be well-accepted (see Trefethen and Bau, "Numerical Linear
Algebra", Strang, "Introduction to Linear Algebra")

It is also offered in

NumPy
http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.cond.html

MATLAB
http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cond.html

I know that condition number refers to problems, not specific
operators, however the common parlance, at least in American textbooks
and numerical computing software, is to treat "condition number", as
an alias for "condition number of matrix inversion".

Hope this helps,
Aron

On Sat, Jul 17, 2010 at 6:01 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote:
> 2010/7/17 Robert Lupton the Good <rhl@xxxxxxxxxxxxxxxxxxx>:
>> Thanks for the quick response and analysis.
>>
>>> Your matrix is indeed not very well conditioned for floats. Are you
>>> using fixed size matrices (Matrix4f) or dynamically sized ones
>>> (MatrixXf) ? I'm asking because there is a special path to invert 4x4
>>> fixed size matrices, and as far as I remember there was bug for some
>>> special configurations in the early versions of Eigen 2.0, so I would
>>> recommend you to upgrade it to the latest.
>>
>> Fixed size, Matrix4f (I thought I included that in the post; sorry).  Yes, I should upgrade but that's a little inconvenient in quite a large software system.  Doable, and will be done!
>>
>>>
>>> determinant != condition:
>>> http://en.wikipedia.org/wiki/Condition_number
>>>
>>> Matlab says the condition of your matrix is 3.8e8, which is pretty bad. (btw: is there a way to calculate condition with Eigen?)
>>
>> I know that I wanted a condition number, and quoted the determinant as I couldn't find any eigen way of finding either the condition number, or whether it thinks that the inversion succeeded.
>
> Eigen doesn't offer any "conditionNumber()" function because there is
> no such thing as the "condition number" of a matrix in general. There
> are many mutually inequivalent things that are called "the condition
> number of a matrix" in different contexts.
>
> The most general notion of condition number, the only one to make
> sense for all matrices, is as the quotient of the biggest singular
> value over the smallest singular value.
>
> However, in the setting of LU/LLT decomposition and inverting
> matrices, this is NOT what is usually called the "condition number".
> Instead, in the context of LU, one usually calls "condition number"
> the quotient of the biggest absolute value of a diagonal coeff of U,
> over the smallest. Thus this "condition number" doesn't have a simple
> meaning in terms of the original matrix, and is only interesting to
> know in the context of LU (it indicates how instable LU decomposition
> is, without full pivoting).
>
> By the way, I don't think that LAPACK offers any "condition number"
> computation either.
>
> In short, it seems to be a case where it's best to let the user
> compute his own "condition number" for himself, which is easy from the
> decompositions, as that ensures that he understands what he's
> computing.
>
> All that being said, a condition number of 3e+8 for a float matrix
> (so, bigger than 1/epsilon) really means that you shouldn't try
> inverting it; it's true for both notions of condition number discussed
> above.
>
> Benoit
>
>>
>>                                        R
>>
>>
>>
>>
>
>
>

```

 Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/