コード例 #1
0
ファイル: TestUtilities.cs プロジェクト: cureos/metanumerics
        public static bool IsNearlyEigenpair(AnySquareMatrix A, Complex[] v, Complex a)
        {
            int d = A.Dimension;

            // compute products
            Complex[] Av = new Complex[d];
            for (int i = 0; i < d; i++)
            {
                Av[i] = 0.0;
                for (int j = 0; j < d; j++)
                {
                    Av[i] += A[i, j] * v[j];
                }
            }
            Complex[] av = new Complex[d];
            for (int i = 0; i < d; i++)
            {
                av[i] = a * v[i];
            }

            // compute tolorance
            double N = MatrixNorm(A);
            double n = 0.0;

            for (int i = 0; i < d; i++)
            {
                n += ComplexMath.Abs(v[i]);
            }
            double ep = TargetPrecision * (N * n / d + ComplexMath.Abs(a) * n);

            // compare elements within tollerance
            for (int i = 0; i < d; i++)
            {
                if (ComplexMath.Abs(Av[i] - av[i]) > ep)
                {
                    return(false);
                }
            }
            return(true);
        }
コード例 #2
0
ファイル: TestUtilities.cs プロジェクト: cureos/metanumerics
        public static bool IsNearlyEigenpair(AnySquareMatrix A, ColumnVector v, double a)
        {
            // compute products
            ColumnVector Av = A * v;
            ColumnVector av = a * v;

            // compute tolorance
            int    d  = v.Dimension;
            double N  = MatrixNorm(A);
            double n  = MatrixNorm(v);
            double ep = TargetPrecision * (Math.Abs(N * n) / d + Math.Abs(a * n));

            // compare elements within tolorance
            for (int i = 0; i < d; i++)
            {
                if (Math.Abs(Av[i] - av[i]) > ep)
                {
                    return(false);
                }
            }
            return(true);
        }
コード例 #3
0
ファイル: TestUtilities.cs プロジェクト: zyzhu/metanumerics
        public static bool IsNearlyEigenpair(AnySquareMatrix A, ComplexColumnVector v, Complex a)
        {
            int d = A.Dimension;

            // compute products

            /*
             * Complex[] Av = new Complex[d];
             * for (int i=0; i<d; i++) {
             *  Av[i] = 0.0;
             *  for (int j=0; j<d; j++) {
             *      Av[i] += A[i,j]*v[j];
             *  }
             * }
             */
            ComplexColumnVector Av = A * v;
            ComplexColumnVector av = a * v;

            // compute tolerance
            double N = A.MaxNorm();
            double n = 0.0;

            for (int i = 0; i < d; i++)
            {
                n += ComplexMath.Abs(v[i]);
            }
            double ep = TargetPrecision * (N * n / d + ComplexMath.Abs(a) * n);

            // compare elements within tolerance
            for (int i = 0; i < d; i++)
            {
                if (ComplexMath.Abs(Av[i] - av[i]) > ep)
                {
                    return(false);
                }
            }
            return(true);
        }