Ejemplo n.º 1
0
        /// Returns a finder to find the next largest eigen value of the receiver's matrix.
        /// @return DhbMatrixAlgebra.LargestEigenvalueFinder
        public LargestEigenvalueFinder NextLargestEigenvalueFinder()
        {
            double    norm = 1.0 / _eigenvector.SecureProduct(_transposedEigenvector);
            DhbVector v1   = _eigenvector * norm;

            return(new LargestEigenvalueFinder(this.DesiredPrecision,
                                               _matrix.SecureProduct(SymmetricMatrix.IdentityMatrix(v1.Dimension)
                                                                     .SecureSubtract(v1.TensorProduct(_transposedEigenvector)))));
        }
Ejemplo n.º 2
0
        /// Iterate matrix product in eigenvalue information.
        public override double EvaluateIteration()
        {
            double oldEigenvalue = _eigenvalue;

            _transposedEigenvector  = _transposedEigenvector.SecureProduct(_matrix);
            _transposedEigenvector *= (1.0 / _transposedEigenvector[0]);
            _eigenvector            = _matrix.SecureProduct(_eigenvector);
            _eigenvalue             = _eigenvector[0];
            _eigenvector           *= (1.0 / _eigenvalue);
            return(double.IsNaN(oldEigenvalue)
                            ? 10 * this.DesiredPrecision
                            : Math.Abs(_eigenvalue - oldEigenvalue));
        }