I guess A'A is always semi-positive-definite since x'(A'A)x = (x'A')(Ax) =
y'y >=0.

I also intuitively think that y'y = 0 when x != 0 in this case if and only
if A'A is rank-deficient, i.e. it is sufficient to test for rank deficiency
of A'A product to figure if QR is going less non-zero column than one
desires. (Yes i have a knowledge gap here :)


On Wed, Mar 5, 2014 at 7:17 PM, Dmitriy Lyubimov <[email protected]> wrote:

> Still though, it seems this code is too sensitive to the error margin.
>
> Even when i change the input so that the case is not degenerate, i still
> get  second norm of difference on Q of ~1e-5 between Cholesky and QR even
> on 3 x 4 input which is large-ish imo,
>
>
> On Wed, Mar 5, 2014 at 7:05 PM, Dmitriy Lyubimov <[email protected]>wrote:
>
>> oh, ok. So input is indeed still deficient. ok .
>>
>>
>> On Wed, Mar 5, 2014 at 7:04 PM, Dmitriy Lyubimov <[email protected]>wrote:
>>
>>> well the positive definite test is failing starting with row 2.  I
>>> stepped thru it. But i am at loss why.
>>>
>>>
>>> On Wed, Mar 5, 2014 at 6:55 PM, Andrew Musselman <
>>> [email protected]> wrote:
>>>
>>>> Just noticed it looks like some kind of rounding error since rows "2"
>>>> and
>>>> "3" in rControl have very small values in their elements.
>>>>
>>>>
>>>> On Wed, Mar 5, 2014 at 6:48 PM, Dmitriy Lyubimov <[email protected]>
>>>> wrote:
>>>>
>>>> > Hi,
>>>> >
>>>> > I am trying to put in Cholesky-based distributed thin QR and having
>>>> > troubles again (even with in-core). What am i doing wrong? I am
>>>> inclined to
>>>> > think there's definitely a bug in our Cholesky implementation, at this
>>>> > point.
>>>> >
>>>> > Here is the test code -- obviously results are different via
>>>> Householder QR
>>>> > and via Cholesky. Note that two rows of L' (R) matrix match the result
>>>> > exactly, and it looks like L is just loosing two of its columns
>>>> somehow.
>>>> >
>>>> > Could somebody perhaps review the CholeskyDecomposition in Mahout?
>>>> Because
>>>> > of this, tests in spark - QR and spark -SSVD are failing.
>>>> >
>>>> > here's the code for in-core only and output:
>>>> >
>>>> > -----------------
>>>> >
>>>> >     val inCoreA = dense(
>>>> >       (1, 2, 3, 40),
>>>> >       (2, 3, 4, 50),
>>>> >       (3, 4, 5, 60),
>>>> >       (4, 5, 6, 70),
>>>> >       (5, 6, 7, 80)
>>>> >     )
>>>> >
>>>> >     val (qControl, rControl) = qr(inCoreA)
>>>> >
>>>> >     printf("qControl=\n%s\n", qControl)
>>>> >     printf("rControl=\n%s\n", rControl)
>>>> >
>>>> >     // Validate with Cholesky
>>>> >     val ch = chol(inCoreA.t %*% inCoreA)
>>>> >     val rControl2 = (ch.getL cloned).t
>>>> >     val qControl2 = ch.solveRight(inCoreA)
>>>> >
>>>> >     printf("qControl2=\n%s\n", qControl2)
>>>> >     printf("rControl2=\n%s\n", rControl2)
>>>> >
>>>> >
>>>> >
>>>> > qControl=
>>>> > {
>>>> >   0  =>
>>>> >
>>>> >
>>>> {0:0.13483997249264842,1:0.7627700713964736,2:0.09950371902099892,3:-0.30053573339989126}
>>>> >   1  =>
>>>> >
>>>> >
>>>> {0:0.26967994498529685,1:0.4767312946227957,2:0.19900743804199783,3:0.34749444174362476}
>>>> >   2  =>
>>>> >
>>>> >
>>>> {0:0.40451991747794525,1:0.1906925178491178,2:0.39801487608399566,3:0.22070592921554588}
>>>> >   3  =>
>>>> >
>>>> >
>>>> {0:0.5393598899705937,1:-0.09534625892456007,2:0.39801487608399566,3:0.6949888834872495}
>>>> >   4  =>
>>>> >
>>>> >
>>>> {0:0.6741998624632421,1:-0.3813850356982384,2:0.7960297521679913,3:-0.5071540501123155}
>>>> > }
>>>> > rControl=
>>>> > {
>>>> >   0  =>
>>>> >
>>>> >
>>>> {0:7.416198487095663,1:9.43879807448539,2:11.461397661875116,3:134.83997249264843}
>>>> >   1  =>
>>>> {1:0.9534625892455925,2:1.906925178491185,3:28.603877677367773}
>>>> >   2  => {2:2.2315206618374916E-15,3:4.1360462167918654E-14}
>>>> >   3  => {3:1.8726762404185252E-15}
>>>> > }
>>>> > L:
>>>> > {
>>>> >   0  => {0:7.416198487095663}
>>>> >   1  => {0:9.43879807448539,1:0.953462589245576}
>>>> >   2  => {0:11.461397661875116,1:1.9069251784911967}
>>>> >   3  => {0:134.83997249264843,1:28.603877677367997}
>>>> > }
>>>> > qControl2=
>>>> > {
>>>> >   0  => {0:0.13483997249264842,1:0.7627700713964867}
>>>> >   1  => {0:0.26967994498529685,1:0.4767312946228039}
>>>> >   2  => {0:0.40451991747794525,1:0.19069251784912108}
>>>> >   3  => {0:0.5393598899705937,1:-0.09534625892456171}
>>>> >   4  => {0:0.674199862463242,1:-0.38138503569824406}
>>>> > }
>>>> > rControl2=
>>>> > {
>>>> >   0  =>
>>>> >
>>>> >
>>>> {0:7.416198487095663,1:9.43879807448539,2:11.461397661875116,3:134.83997249264843}
>>>> >   1  =>
>>>> {1:0.953462589245576,2:1.9069251784911967,3:28.603877677367997}
>>>> >   2  => {}
>>>> >   3  => {}
>>>> > }
>>>> >
>>>>
>>>
>>>
>>
>

Reply via email to