[SciPy-User] qr decompostion gives negative q, r ?
Charles R Harris
charlesr.harris at gmail.com
Thu Nov 22 15:12:14 EST 2012
On Thu, Nov 22, 2012 at 8:10 AM, Pauli Virtanen <pav at iki.fi> wrote:
> Virgil Stokes <vs <at> it.uu.se> writes:
> [clip]
> > Of course you are correct Jason, and I have not checked every QR
> decomposition
> > in MATLAB and numpy. However, for my particular application I do know
> that the
> > R returned from MATLAB always has diagonal elements > 0, while this is
> not the
> > case for my installation of numpy.
>
> It is incorrect to assume this. Also Matlab does not guarantee
> that R is PD. That you get it is just due to lucky choice
> of matrices and the MATLAB version/platform.
>
> Compare (these are on the same machine!):
>
> MATLAB(R) Version 7.10.0.499 (R2010a) 64-bit (glnxa64) February 5, 2010
>
> >> A=[707.106781, 0.000549702852, 1.66675481e-19;-35.3553391, 70.7104659,
> 1.66675481e-19;0.0, -3.97555166, 0.00707106781;-707.106781,
> -0.000648214647,
> 1.66675481e-19;35.3553391, -70.7104226, 1.66675481e-19;0.0, 3.97560687,
> -0.00707106781;0.0, 0.0, 0.0;0.0, 0.0, 0.0;0.0, 0.0, 0.0]; [Q,R]=qr(A,0); R
>
> R =
>
> 1.0e+03 *
>
> 1.0012 -0.0050 0.0000
> 0 0.1000 -0.0000
> 0 0 0.0000
>
>
> MATLAB(R) R2012a (7.14.0.739) 64-bit (glnxa64) February 9, 2012
>
> >> A=[707.106781, 0.000549702852, 1.66675481e-19;-35.3553391, 70.7104659,
> 1.66675481e-19;0.0, -3.97555166, 0.00707106781;-707.106781,
> -0.000648214647,
> 1.66675481e-19;35.3553391, -70.7104226, 1.66675481e-19;0.0, 3.97560687,
> -0.00707106781;0.0, 0.0, 0.0;0.0, 0.0, 0.0;0.0, 0.0, 0.0]; [Q,R]=qr(A,0); R
>
> R =
>
> 1.0e+03 *
>
> -1.0012 0.0050 0.0000
> 0 -0.1000 0.0000
> 0 0 -0.0000
>
>
> These, and the results returned by Numpy/Scipy are all correct QR
> decompositions. There are several signs in QR that can be freely
> chosen, and in general there is no particular reason to stick with
> a given choice.
>
>
The term 'positive definite' doesn't really apply either. Just making the
diagonals of r come positive in the qr factorization of a covariance
doesn't make the quadratic form associated with r PD:
In [17]: m[0]
Out[17]:
array([[ 1. , -0.9],
[-0.9, 1. ]])
In [18]: eigvalsh(m[0])
Out[18]: array([ 0.1, 1.9])
In [19]: rp[0]
Out[19]:
array([[ 1.3453624 , -1.33792946],
[ 0. , 0.14122589]])
In [20]: eigvalsh(.5*(rp[0].T + rp[0]))
Out[20]: array([-0.15670585, 1.64329415])
Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20121122/bc569916/attachment.html>
More information about the SciPy-User
mailing list