private MatrixVal[,] PerkalianMatrix(MatrixVal[,] value, int c, int r) { MatrixVal[,] MatrixPerkalian = new MatrixVal[c, r]; for (var x = 0; x < c; x++) { for (var y = 0; y < r; y++) { decimal result = 0; for (var k = 0; k < r; k++) { result = result + Math.Round((value[x, k].Nilai * value[k, y].Nilai) + 0.0000m, 4, MidpointRounding.ToEven); } var cell = new MatrixVal(); cell.Kode1 = value[x, y].Kode1; cell.Kode2 = value[x, y].Kode2; cell.Nilai = Math.Round(result + 0.0000m, 4, MidpointRounding.ToEven); MatrixPerkalian[x, y] = cell; } } return(MatrixPerkalian); }
public Matrix Create(List <SpPerbandinganKriteria_Result> model) { var matrix = new Matrix(); matrix.Kriterias = base.ctx.Set <Kriteria>().OrderBy(x => x.Kode).ToList(); List <MatrixVal> arr = new List <MatrixVal>(); int idxR, idxC, r, c = matrix.Kriterias.Count(); r = c; idxC = 0; MatrixVal[,] MatrixValue = new MatrixVal[c, r]; foreach (var kriteria in matrix.Kriterias) { idxR = 0; foreach (var item in model.Where(x => x.Kode1.Equals(kriteria.Kode))) { var matrixVal = new MatrixVal(); matrixVal.Kode1 = item.Kode1; matrixVal.Kode2 = item.Kode2; matrixVal.Nilai = Math.Round(((decimal)item.Nilai1 / (decimal)item.nilai2) + 0.0000m, 4, MidpointRounding.ToEven); MatrixValue[idxC, idxR] = matrixVal; arr.Add(matrixVal); idxR++; } idxC++; } matrix.PerbandinganKriteria = arr; matrix.MatrixPerbandingan = MatrixValue; var matrixPerkalian = PerkalianMatrix(MatrixValue, c, r); matrix.MatrixPerkalian = matrixPerkalian; matrix.EigenVector = CalEigenVector(matrixPerkalian, c, r); foreach (var item in model) { var perbandinganKriteria = base.ctx.Set <PerbandinganKriteria>().SingleOrDefault( x => x.Kode == item.Kode1 && x.Kode2 == item.Kode2); if (perbandinganKriteria == null) { perbandinganKriteria = new PerbandinganKriteria(); perbandinganKriteria.Kode = (int)item.Kode1; perbandinganKriteria.Kode2 = (int)item.Kode2; perbandinganKriteria.Nilai = item.Nilai1; perbandinganKriteria.Nilai2 = item.nilai2; base.ctx.Set <PerbandinganKriteria>().Add(perbandinganKriteria); } perbandinganKriteria.Kode = (int)item.Kode1; perbandinganKriteria.Kode2 = (int)item.Kode2; perbandinganKriteria.Nilai = item.Nilai1; perbandinganKriteria.Nilai2 = item.nilai2; } foreach (var krit in matrix.Kriterias) { var e = matrix.EigenVector.SingleOrDefault(u => u.Kode == krit.Kode); if (e != null) { krit.EigenvectorScore = (double)e.Nilai; } } var rest = base.ctx.SaveChanges() > 0; return(matrix); }