Re: [eigen] Problem inverting a Matrix4f with Eigen 2.0.0 |

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]

*To*: eigen@xxxxxxxxxxxxxxxxxxx*Subject*: Re: [eigen] Problem inverting a Matrix4f with Eigen 2.0.0*From*: Aron Ahmadia <aja2111@xxxxxxxxxxxx>*Date*: Sat, 17 Jul 2010 18:16:53 +0300*Dkim-signature*: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:sender:received :in-reply-to:references:date:x-google-sender-auth:message-id:subject :from:to:content-type:content-transfer-encoding; bh=gr7AMnbZmLvRBFUdnKhpaZjg0yYaIPMrqfAU3KXH8G0=; b=JHK5DnrQ1Rr0XIAfWpY5veFaCXy1CRiQq6XcgKSHBe43JV6/lGyadhGtUvMx4slw1R 2acOOuJ7w9JpkXJT0xdJL/6cF6VzqtLFS2SEKTO0BPQ3mCrm+HnH1ejEIgo+RBoW5coi EsKOni3ysczdn0mgA7ud7Zcs5HwaBVv1uZ8XM=*Domainkey-signature*: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:content-type :content-transfer-encoding; b=tKgWRne7qUXVUK+ABGvBN3MvpOmpdAuEyh3Ylv7/+qyjONZw/dnqr87U03SI4q1zBX NLqtQImo4R9I/9vSqstEH+adVtadF1ut/DoQ0pEM5DeYnXpwSW3StC7NINpbjwXXpVVK lNxdDam7iUOpD1sFknqyKUxMlLg70HqT7+IRU=

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") http://books.google.com/books?id=Gv4pCVyoUVYC&pg=PA462&lpg=PA462&dq=strang+condition+number&source=bl&ots=SVf4gZC6WK&sig=gXUXnq2IossfbUyIXZ7ogDrDm8I&hl=en&ei=ucdBTJOoOZWC4Qbw-5icDg&sa=X&oi=book_result&ct=result&resnum=5&ved=0CCgQ6AEwBA#v=onepage&q=condition%20number&f=false 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 >> >> >> >> > > >

**Follow-Ups**:**Re: [eigen] Problem inverting a Matrix4f with Eigen 2.0.0***From:*Benoit Jacob

**References**:**[eigen] Problem inverting a Matrix4f with Eigen 2.0.0***From:*Robert Lupton the Good

**Re: [eigen] Problem inverting a Matrix4f with Eigen 2.0.0***From:*Christoph Hertzberg

**Re: [eigen] Problem inverting a Matrix4f with Eigen 2.0.0***From:*Gael Guennebaud

**Re: [eigen] Problem inverting a Matrix4f with Eigen 2.0.0***From:*Robert Lupton the Good

**Re: [eigen] Problem inverting a Matrix4f with Eigen 2.0.0***From:*Benoit Jacob

**Messages sorted by:**[ date | thread ]- Prev by Date:
**Re: [eigen] Problem inverting a Matrix4f with Eigen 2.0.0** - Next by Date:
**Re: [eigen] Problem inverting a Matrix4f with Eigen 2.0.0** - Previous by thread:
**Re: [eigen] Problem inverting a Matrix4f with Eigen 2.0.0** - Next by thread:
**Re: [eigen] Problem inverting a Matrix4f with Eigen 2.0.0**

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