public Triangular(IDistribution d) { this._distribution = d; _sampling = _distribution.GetSampling(); Center = (Xmax + Xmin) / 2; DeltaX = (Xmax - Xmin) / 2; }
/// <summary> /// Вычисление градиента только для ядра гаусса /// </summary> /// <param name="distribution"></param> public static double Grad(IDistribution distribution, GaussianKernal kernal) { double min = distribution.GetSampling().Min(); double max = distribution.GetSampling().Max(); double x0 = new Random().Next((int)min, (int)max); double xi = x0; double step = 0.0; double YMin = kernal.getDerivative(xi); double xNext = xi - EPSSILON * kernal.getDerivative(xi); while (kernal.getDerivative(xNext) - kernal.getDerivative(xi) > C) { step = xi - EPSSILON * kernal.getDerivative(xi) + xi; YMin = kernal.getDerivative(xi); xi = xNext; xNext = xi + step; } return YMin; }
/// <summary> /// Применить корректировку)(getWeight) и поработать с нормой . /// </summary> /// <param name="distribution"></param> /// <param name="kernal"></param> public void Learm(IDistribution distribution, IKernal kernal) { double norma = 0.0; List<double> ErrFunctionValues = new List<double>(); LearmSampling = distribution.GetSampling().ToList(); Signals = new List<double>(); List<double> faktOj = new List<double>();//Подать на выход новой сети разность между фактическим и ошидаемым значениями do { foreach (double sample in LearmSampling) { Signals.Add(kernal.getDensityFunctionValue(sample));//выходные сигналы сети ска } for (int i = 0; i < LearmSampling.Count; i++) { ErrFunctionValues.Add(this.ErrFunction(LearmSampling.ElementAt(i), Signals.ElementAt(i))); } List<double> BaskSignals = new List<double>();//Замена функций их производными for (int i = 0; i < Signals.Count; i++)//2 { BaskSignals.Add(kernal.getDerivative(LearmSampling.ElementAt(i))); } // DeltaWeight = -N*GetGradirnt() } while (norma > C); //Weights//вектор весов }
public EpanichnikovKernal(IDistribution distributiob) { this._distribution = distributiob; _sampling = _distribution.GetSampling(); r = new Random(); }
public GaussianKernal(IDistribution distibution) { this._distribution = distibution; _sampling = _distribution.GetSampling(); }
public QuarticKernal(IDistribution distr) { this._distribution = distr; _sampling = _distribution.GetSampling(); }