public void CalculateEigenVector()
 {
     var evd = JudgementMatrix.Evd();
     var eigenVectors = evd.EigenVectors;
     var eigenValues = evd.EigenValues;
     DenseVector weight = new DenseVector(eigenValues.Count);
     for (int i = 0; i < eigenValues.Count;i++ )
     {
         weight[i] = eigenValues[i].Real;
     }
         weight = weight / (weight.Sum());
     WeightVector = weight;
     maxEigenValue = WeightVector.AbsoluteMaximum();
     if(WeightVector==null)
     {
         MessageBox.Show("判断矩阵错误,无法计算权重!");
     }
 }
示例#2
0
        public static double Covariance(DenseVector x, DenseVector y)
        {
            var cov = new DenseVector(x.Count);
            double xMean = x.Mean();
            double yMean = y.Mean();

            if (xMean.Equals(double.NaN) || yMean.Equals(double.NaN))
                return double.NaN;

            for (int i = 0; i < x.Count; i++)
            {
                cov[i] = (x[i] - xMean)*(y[i] - yMean);
            }

            return ((double) 1/(x.Count - 1))*cov.Sum();
        }
示例#3
0
        public static double Kurtosis(this double[] data)
        {
            var d = new DenseVector(data);
            var num = new DenseVector(d.Count);
            var denom = new DenseVector(d.Count);
            d.CopyTo(num);
            d.CopyTo(denom);

            for (int i = 0; i < num.Count; i++)
            {
                num[i] = Math.Pow(d[i] - d.Mean(), 4);
                denom[i] = Math.Pow(d[i] - d.Mean(), 2);
            }

            return (num.Sum()*num.Count)/(Math.Pow(denom.Sum(), 2));
        }