示例#1
0
        private void CalculateInversionVectors(int i, T eta, T gamma)
        {
            var op = default(TOperations);

            var etaOverLambda   = new SN.Vector <T>(op.Divide(eta, _lambda));
            var gammaOverLambda = new SN.Vector <T>(op.Divide(gamma, _lambda));

            var ev = new SN.Vector <T>(_e, 0);

            for (var j = 0; j < i; j += SN.Vector <T> .Count)
            {
                var gv = new SN.Vector <T>(_g, j);

                var gvNew = gv + gammaOverLambda * ev;
                var evNew = ev + etaOverLambda * gv;

                ev = new SN.Vector <T>(_e, j + SN.Vector <T> .Count);

                gvNew.CopyTo(_g, j);
                evNew.CopyTo(_e, j + 1);
            }

            _e[0] = etaOverLambda[0];
            _g[i] = gammaOverLambda[0];
        }
示例#2
0
        private void CalculateIntermediateResult(int i, TVector d, T[] s)
        {
            var iColumnCache = GetColumnCacheIndex(i);

            var theta = d[i];
            var op    = default(TOperations);

            for (var j = 0; j < i; j += SN.Vector <T> .Count)
            {
                var sv  = new SN.Vector <T>(s, j);
                var cv  = new SN.Vector <T>(_columnCache, iColumnCache + j);
                var sum = SN.Vector.Dot(sv, cv);
                theta = op.Subtract(theta, sum);
            }

            var thetaOverLambda = new SN.Vector <T>(op.Divide(theta, _lambda));

            for (var j = 0; j < i; j += SN.Vector <T> .Count)
            {
                var ev = new SN.Vector <T>(_e, j);
                var sv = new SN.Vector <T>(s, j);

                var r = sv + ev * thetaOverLambda;
                r.CopyTo(s, j);
            }
            s[i] = thetaOverLambda[0];
        }
示例#3
0
        private T CalculateEta(int i)
        {
            var op  = default(TOperations);
            var eta = op.Negate(_rowCache[0 + i]);

            for (var j = 0; j < i; j += SN.Vector <T> .Count)
            {
                var ev  = new SN.Vector <T>(_e, j);
                var rv  = new SN.Vector <T>(_rowCache, j);
                var sum = SN.Vector.Dot(ev, rv);

                eta = op.Subtract(eta, sum);
            }

            return(eta);
        }
示例#4
0
        private T CalculateGamma(int i)
        {
            var iColumnCache = GetColumnCacheIndex(i);
            var op           = default(TOperations);

            var gamma = op.Negate(_columnCache[iColumnCache - 1]);

            for (var j = 0; j < i; j += SN.Vector <T> .Count)
            {
                var gv  = new SN.Vector <T>(_g, j);
                var cv  = new SN.Vector <T>(_columnCache, iColumnCache + j);
                var sum = SN.Vector.Dot(gv, cv);

                gamma = op.Subtract(gamma, sum);
            }

            return(gamma);
        }