My guess is that it's a precision issue in mpmath. Perhaps it orders the
computations in a way that causes cancellation. The range in magnitudes
between 5e-12 1.9e11 is greater than the precision of a 64 bit floating
point number (roughly 1e16). It's not surprising that software fails or
that results vary in this regime.

SymPy's matrix handles this fine by the way

In [14]: Matrix(m3).det()
Out[14]: 3.46387068230212⋅ⅈ


On Sun, Aug 19, 2012 at 12:02 PM, Ondřej Čertík <[email protected]>wrote:

> On Fri, Aug 17, 2012 at 5:56 AM, Sameer Grover
> <[email protected]> wrote:
> > I have a complex 2X2 matrix for which I'd like to calculate the
> determinant.
> > Consider the following code:
> >
> > #========================
> > from __future__ import division
> > import numpy as np
> > import sympy.mpmath as mpmath
> >
> > m3 = np.matrix([[  5.18895807e-12 +0.00000000e+00j,
> >            1.92716917e+11 +0.00000000e+00j],
> >         [  0.00000000e+00 -1.93643371e-11j,
> >            0.00000000e+00 -5.16413237e+10j]])
> > m = mpmath.matrix(m3)
> > print np.linalg.det(m3)
> > print mpmath.det(m)
> > print m[0,0]*m[1,1]- m[1,0]*m[0,1]
> > #========================
> >
> > The output is :
> > 3.4638706823j
> > 0
> > (0.0 + 3.46387068230212j)
> >
> > mpmath's det function gives a determinant of zero even though the matrix
> is
> > non-singular. We get the correct value by multiplying term-by-term.
> >
> > Can somebody confirm this bug?
>
> Seems that I am getting the same as you are:
>
> >>> from __future__ import division
> >>> import numpy as np
> >>> import sympy.mpmath as mpmath
> >>>
> >>> m3 = np.matrix([[  5.18895807e-12 +0.00000000e+00j,
> ...            1.92716917e+11 +0.00000000e+00j],
> ...         [  0.00000000e+00 -1.93643371e-11j,
> ...            0.00000000e+00 -5.16413237e+10j]])
> >>> m = mpmath.matrix(m3)
> >>> print np.linalg.det(m3)
> 3.4638706823j
> >>> print mpmath.det(m)
> 0
> >>> print m[0,0]*m[1,1]- m[1,0]*m[0,1]
> (0.0 + 3.46387068230212j)
>
>
> I am using SymPy a35203f.
>
> Ondrej
>
> --
> You received this message because you are subscribed to the Google Groups
> "sympy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/sympy?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to