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("判断矩阵错误,无法计算权重!"); } }
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(); }
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)); }