[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
Here is yet another LAPACK function doing totally different condition
numbers than what we saw above:
http://www.netlib.org/lapack/single/sgeesx.f
quote:
* 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'.
>
> http://books.google.com/books?id=3DGv4pCVyoUVYC&pg=3DPA462&lpg=3DPA462&dq=
=3Dstrang+condition+number&source=3Dbl&ots=3DSVf4gZC6WK&sig=3DgXUXnq2Iossfb=
UyIXZ7ogDrDm8I&hl=3Den&ei=3DucdBTJOoOZWC4Qbw-5icDg&sa=3DX&oi=3Dbook_result&=
ct=3Dresult&resnum=3D5&ved=3D0CCgQ6AEwBA#v=3Donepage&q=3Dcondition%20number=
&f=3Dfalse
>
> It is also offered in
>
> NumPy
> http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.cond.htm=
l
>
> MATLAB
> http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cond.html
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.
Cheers,
Benoit
>
> 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). =
=A0Yes, I should upgrade but that's a little inconvenient in quite a large =
software system. =A0Doable, and will be done!
>>>
>>>>
>>>> determinant !=3D 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 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
>> 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
>>
>>>
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
=A0 =A0R
>>>
>>>
>>>
>>>
>>
>>
>>
>
>
>