On Mon, Jul 15, 2013 at 5:13 PM, Ted Dunning <[email protected]> wrote:

> It sounds like you missed the part of the API contract that says that you
> have to fix the bugs before using the code.
>
> :-)
>
> More seriously, with pivot=true, the result can be hard to understand
> because they are permuted.  Could that be the problem?
>

ok, but solveLeft() in this case should still work as expected? or not ? I
don't understand the "permuted" part -- i guess it is some sort of indexing
overlay over L matrix -- but whatever solution is, shouldn't the api be
agnostic of the method used?


>
>
> On Mon, Jul 15, 2013 at 5:11 PM, Dmitriy Lyubimov <[email protected]>
> wrote:
>
> > Hm.
> >
> > if i specify pivoted=false, everything works.
> > In addition it seems i have created singular input by chance, but making
> it
> > non-singular
> >
> >
> >  val a = dense((1, 2, 3), (2, 3, 4), (3, 4, 5.5))
> >
> >  still doesn't help with pivoted=true (which is default) , my test fails.
> >
> > do pivoted results require some special handling?
> >
> >
> >
> >
> > On Mon, Jul 15, 2013 at 5:03 PM, Dmitriy Lyubimov <[email protected]>
> > wrote:
> >
> > > should read
> > >
> > > val axmb = (a %*% x) - b
> > >
> > > of course but it doesn't make difference, the Cholesky output doesn't
> > make
> > > sense to me even before that
> > >
> > >
> > > On Mon, Jul 15, 2013 at 5:00 PM, Dmitriy Lyubimov <[email protected]
> > >wrote:
> > >
> > >> Hi Ted,
> > >>
> > >> I am getting Cholesky test failures when trying to solve of Ax=B
> > >>
> > >> The L matrix and solveLeft() output do not make much sense to me. For
> > >> once, L doesn't even have the expected L-shape:
> > >>
> > >> Do you have an idea where i go wrong? (the test is wrapped into scala
> > DSL
> > >> but it is Mahout's cholesky underwraps) .
> > >>
> > >> test code:
> > >>
> > >>   test("chol") {
> > >>
> > >>     // try to solve Ax=b with cholesky:
> > >>     // this requires
> > >>     // (LL')x = B
> > >>     // L'x= (L^-1)B
> > >>     // x=(L'^-1)(L^-1)B
> > >>
> > >>     val a = dense((1, 2, 3), (2, 3, 4), (3, 4, 5))
> > >>
> > >>     // make sure it is symmetric for a valid solution
> > >>     a := a.t %*% a
> > >>
> > >>     printf("A= \n%s\n", a)
> > >>
> > >>     val b = dense((9, 8, 7)).t
> > >>
> > >>     printf ("b = \n%s\n", b)
> > >>
> > >>     val ch = chol(a)
> > >>
> > >>     printf ("L = \n%s\n", ch.getL)
> > >>
> > >>     printf ( "(L^-1)b =\n%s\n", ch.solveLeft(b))
> > >>
> > >>     val x = ch.solveRight(diag(1,3)) %*% ch.solveLeft(b)
> > >>
> > >>     printf("x = \n%s\n", x.toString)
> > >>
> > >>     val axmb = (a %*% b) - b
> > >>
> > >>     printf("AX - B = \n%s\n", axmb.toString)
> > >>
> > >>     assert(axmb.norm < 1e-10)
> > >>
> > >>   }
> > >>
> > >>
> > >>
> > >> Output:
> > >>
> > >> A=
> > >> {
> > >>   0  => {0:14.0,1:20.0,2:26.0}
> > >>   1  => {0:20.0,1:29.0,2:38.0}
> > >>   2  => {0:26.0,1:38.0,2:50.0}
> > >> }
> > >> b =
> > >> {
> > >>   0  => {0:9.0}
> > >>   1  => {0:8.0}
> > >>   2  => {0:7.0}
> > >> }
> > >>
> > >> L =
> > >> {
> > >>   0  => {0:0.6928203230275511,2:3.676955262170047}
> > >>   1  => {0:0.3464101615137781,2:5.374011537017761}
> > >>   2  => {2:7.0710678118654755}
> > >> }
> > >> (L^-1)b =
> > >> {
> > >>   0  => {0:1.2727922061357855}
> > >>   1  => {0:11.547005383792511}
> > >>   2  => {}
> > >> }
> > >> X =
> > >> {
> > >>   0  => {0:0.18}
> > >>   1  => {0:5.119661282874144}
> > >>   2  => {}
> > >> }
> > >> AX - B =
> > >> {
> > >>   0  => {0:459.0}
> > >>   1  => {0:670.0}
> > >>   2  => {0:881.0}
> > >> }
> > >>
> > >> org.scalatest.exceptions.TestFailedException was thrown.
> > >>
> > >>
> > >
> >
>

Reply via email to