Ignore:
Timestamp:
Mar 1, 2010, 4:34:48 PM (17 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
13f9a4e
Parents:
f77a89a
Message:

Using efficient grouping functions

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@2048 be4846ae-f051-483a-831f-b64e7d08527f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tol_pkg/MulVarFunAprox/DesignC2.Spheric.tol

    rf77a89a r77c938e  
    7272    SubRow(_.R,VCol2Set(Y.idx))
    7373  };
     74
     75  //////////////////////////////////////////////////////////////////////////////
     76    VMatrix build.obs(VMatrix X)
     77  //////////////////////////////////////////////////////////////////////////////
     78  {
     79    FunRn2R::@BaseC2.Eval.Function eval =
     80       FunRn2R::@BaseC2.Eval.Function::New(get.base(0));
     81    MatQuery::@KNN.Neighbourhood ngbh =
     82      _.ann::search(VMat2Mat(X),_.X.maxNeighbour);
     83    Real m = VRows(X);
     84    VMatrix dist = Mat2VMat(Sqrt(ngbh::_.distance2));
     85    VMatrix X.h = Mat2VMat(ngbh::_.neighbour);
     86    VMatrix X.idx = DifEq(1/(1-B),Constant(m,1,1));
     87    VMatrix triplet.all = Group("ConcatRows", For(1,_.X.maxNeighbour,VMatrix(Real k)
     88    {
     89      VMatrix X.h.k = SubCol(X.h,[[k]]);
     90      VMatrix dist.k = SubCol(dist,[[k]]);
     91      VMatrix R = get.radius(X.h.k);
     92      VMatrix tao = dist.k $/ R;
     93      VMatrix lambda = (-tao^2+1)^4;
     94      VMatrix match = LT(dist.k,R);
     95      SubRow(X.idx | X.h.k | dist.k | tao| lambda, MatQuery::SelectMatch(match))
     96    }));
     97    VMatrix x.idx = SubCol(triplet.all,[[1]]);
     98    VMatrix y.idx = SubCol(triplet.all,[[2]]);
     99    VMatrix xy.idx = x.idx | y.idx;
     100    VMatrix lambda.col = SubCol(triplet.all,[[5]]);
     101    VMatrix triplet.lambda = xy.idx | lambda.col;
     102    VMatrix lambda = Triplet(VMat2Mat(triplet.lambda),m,_.H);
     103    VMatrix sum.lambda = lambda*Constant(_.H,1,1);
     104    VMatrix sum.lambda.inv = Convert(sum.lambda,"Blas.R.Dense")^-1;
     105    VMatrix weight = Eye(m,m,0,sum.lambda.inv)*lambda;
     106    VMatrix dif =
     107      SubRow(  X,VCol2Set(SubCol(triplet.all,[[1]]))) -
     108      SubRow(_.Y,VCol2Set(SubCol(triplet.all,[[2]]))) ;
     109    VMatrix P.row = Group("ConcatRows", For(1,_.K,VMatrix(Real k)
     110    {
     111      x.idx
     112    }));
     113    VMatrix P.y = Group("ConcatRows", For(1,_.K,VMatrix(Real k)
     114    {
     115      y.idx
     116    }));
     117    VMatrix YnCum = DifEq(1/(1-B),_.Yn);
     118    VMatrix YnCumB = Sub(SetCol([[0]])<<YnCum,1,1,_.H,1);
     119    VMatrix P.YnCum  = SubRow(YnCum, VCol2Set(P.y));
     120    VMatrix P.YnCumB = SubRow(YnCumB,VCol2Set(P.y));
     121    VMatrix P.k = Group("ConcatRows", For(1,_.K,VMatrix(Real k)
     122    {
     123      y.idx*0+k
     124    }));
     125    VMatrix P.col = P.YnCumB + P.k;
     126    VMatrix P.match = LE(P.col,P.YnCum);
     127    Real eval::upgrade.cache(dif);
     128    VMatrix P.ev = Group("ConcatRows", For(1,_.K,VMatrix(Real k)
     129    {
     130      lambda.col $* eval::evaluate.v(k,dif)
     131    }));
     132    Matrix P.triplet = VMat2Mat(
     133      SubRow(P.row | P.col | P.ev, MatQuery::SelectMatch(P.match)));
     134    VMatrix Px = Pack(Convert(Triplet(P.triplet, m, _.N),"Cholmod.R.Sparse"));
     135    VMatrix Qx = Eye(m,m,0,sum.lambda.inv)*Px
     136  };
     137
    74138
    75139  ///////////////////////////////////////////////////////////////////////////
Note: See TracChangeset for help on using the changeset viewer.