public double DifParamSimplex(ParamObjPH param) { double[] llk; double outProc = 0; int countIteration = 0; if (param.paramSimplex.Length > paramSimplex.Length) { countIteration = paramSimplex.Length; llk = param.procentParamSimplex; } else { countIteration = param.paramSimplex.Length; llk = procentParamSimplex; } for (int i = 0; i < countIteration; i++) { outProc += Otnoshenie(paramSimplex[i], param.paramSimplex[i]) * llk[i]; } return(outProc * 25); }
public double DifParamHoleEps(ParamObjPH param) { double outProc = 0; int countIteration = 0; if (param.paramHole.Length > paramHole.Length) { countIteration = paramHole.Length; } else { countIteration = param.paramHole.Length; } for (int i = 0; i < countIteration; i++) { outProc += Math.Pow(Math.Abs(paramHole[i] - param.paramHole[i]), 3); } outProc = Math.Pow(outProc, 1.0 / 3.0); return(outProc); }
public double DifParamHole(ParamObjPH param) { double outProc = 0; double[] llk; double[] llk1; int countIteration = 0; if (param.paramHole.Length > paramHole.Length) { countIteration = paramHole.Length; llk = param.procentParamHole; llk1 = param.paramHole; } else { countIteration = param.paramHole.Length; llk = procentParamHole; llk1 = paramHole; } if (llk1.Length == 1 && llk1[0] == 0) { return(0.5); } for (int i = 0; i < countIteration; i++) { outProc += Otnoshenie(paramHole[i], param.paramHole[i]) * llk[i]; } return(outProc * 75); }
/// <summary> /// Возвращает наилучший процент по схожести дыр /// </summary> /// <param name="param">Объект поступивший в систему</param> /// <returns></returns> public double ComparisonBetti(ParamObjPH param) { double outProcent = 0, tempOutProcent = 0; int indexBest = 0; double prov = 0; double[] outDebag = new double[paramHole.Length]; for (int i = 0; i < param.paramHole2.Length; i++) { prov += param.paramHole2[i]; } for (int i = 0; i < paramHole.Length; i++) { List <double> tempParamHole1 = new List <double>(); List <double> tempParamHole2 = new List <double>(); for (int y = 0; y < paramHole.Length; y++) { tempParamHole1.Add((paramHole[y] - paramHole[i]) / paramHole2[i]); } for (int y = 0; y < paramHole2.Length; y++) { tempParamHole2.Add(paramHole2[y] / paramHole2[i]); } //если хоть в одном дыра 1 а в другом от одной то 100% if ((param.paramHole.Length == 1 && tempParamHole2.Count >= 1)) { return(100); } if ((param.paramHole.Length >= 1 && tempParamHole2.Count == 0)) { return(0); } tempOutProcent = CalculetRecursion(tempParamHole1, tempParamHole2, param.paramHole, param.paramHole2); tempParamHole1.RemoveAt(i); tempParamHole2.RemoveAt(i); outDebag[i] = tempOutProcent; if (outProcent < tempOutProcent) { outProcent = tempOutProcent; indexBest = i; } } return(outProcent / prov * 100); }
public void Normalized(ParamObjPH param) { double a = param.paramHole[0] / paramHole[0]; double b = param.paramSimplex[0] / paramSimplex[0]; for (int i = 0; i < paramHole.Length; i++) { paramHole[i] *= a; } for (int i = 0; i < paramSimplex.Length; i++) { paramSimplex[i] *= b; } }
/// <summary>Возвращает наилучший процент по схожести компонент (нужно было сделать универсальную функцию но я ленив)</summary> public double ComparisonBettiKomponenta(ParamObjPH param) { double outProcent = 0, tempOutProcent = 0; int indexBest = 0; double prov = 0; double[] outDebag = new double[paramSimplex.Length]; for (int i = 1; i < param.paramSimplex2.Length; i++) { prov += param.paramSimplex2[i]; } for (int i = 0; i < paramSimplex.Length; i++) { List <double> tempparamSimplex1 = new List <double>(); List <double> tempparamSimplex2 = new List <double>(); for (int y = 0; y < paramSimplex.Length; y++) { tempparamSimplex1.Add((paramSimplex[y] - paramSimplex[i]) / paramSimplex2[i]); } for (int y = 0; y < paramSimplex2.Length; y++) { tempparamSimplex2.Add(paramSimplex2[y] / paramSimplex2[i]); } //если хоть в одном дыра 1 а в другом от одной то 100% //if ((param.paramSimplex.Length == 1 && tempparamSimplex2.Count >= 1)) // return 100; tempparamSimplex1.RemoveAt(i); tempparamSimplex2.RemoveAt(i); tempOutProcent = CalculetRecursion(tempparamSimplex1, tempparamSimplex2, param.paramSimplex, param.paramSimplex2); outDebag[i] = tempOutProcent; if (outProcent < tempOutProcent) { outProcent = tempOutProcent; indexBest = i; } } return(outProcent / prov * 100); }