[ Thread Index |
| More lists.tuxfamily.org/eigen Archives
Here is yet another LAPACK function doing totally different condition
numbers than what we saw above:
* SENSE (input) CHARACTER*1
* Determines which reciprocal condition numbers are computed.
* =3D 'N': None are computed;
* =3D 'E': Computed for average of selected eigenvalues only;
* =3D 'V': Computed for selected right invariant subspace only;
* =3D 'B': Computed for both.
* If SENSE =3D 'E', 'V' or 'B', SORT must equal 'S'.
> It is also offered in
Hm, these aren't very big authorities in numerical linear algebra,
compared to LAPACK...
> 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".
The problem is that even "condition number of matrix inversion" is
very vague, because there are different ways to invert a matrix, and
depending one the one that you use, different notions of condition
number are relevant. For example, if you invert a matrix using LU,
what matters is to avoid having near-zero coefficients on the diagonal
of U. If you invert a matrix using SVD, what matters is the ratio of
max/min singular values. If you invert using cofactors, what matters
is the ratio between the determinnat and the cofactors.
> Hope this helps,
> On Sat, Jul 17, 2010 at 6:01 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> =
>> 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). =
=A0Yes, I should upgrade but that's a little inconvenient in quite a large =
software system. =A0Doable, and will be done!
>>>> determinant !=3D condition:
>>>> 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 wh=
ether 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
>> 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
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=