/// <summary> /// Deviations squared sum. Сумма ошибок отклонений аппроксимирующей функции от известных значений /// </summary> /// <param name="dvDataValues">The data values. Значения аппроксимируемой функции</param> /// <param name="dvSpace">The space. Значения независимой переменной</param> /// <param name="approxFunc">The approximation function. Аппроксимирующая функция с фиксированными параметрами, заданными вектором параметров. /// Значения вычисляются над пространством независимой переменной</param> /// <param name="currentParametersSpacePoint">The current parameters space point. /// Тот самый фиксированный вектор параметров, используемый для вычисления значений аппроксимирующей функции над пространсовм независимой переменной</param> /// <returns>System.Double. Значение абсолютного </returns> private static double DeviationsSquaredSumRelative( DenseVector dvDataValues, DenseVector dvSpace, Func <DenseVector, double, double> approxFunc, DenseVector currentParametersSpacePoint, DenseVector dvWeights) { double distanceRelative = 0.0d; if (dvWeights == null) { DenseVector dvApproxFuncValues = DenseVector.Create(dvSpace.Count, ix => { return(approxFunc(currentParametersSpacePoint, dvSpace[ix])); }); DenseVector dvDistanceAbs = dvApproxFuncValues - dvDataValues; distanceRelative = dvDistanceAbs.Abs() / dvDataValues.Abs(); } else { DenseVector dvApproxFuncValues = DenseVector.Create(dvSpace.Count, ix => { return(approxFunc(currentParametersSpacePoint, dvSpace[ix])); }); DenseVector dvDistanceAbs = dvApproxFuncValues - dvDataValues; dvDistanceAbs.MapInplace(d => Math.Abs(d)); DenseVector dvDistanceRelative = (DenseVector)(dvDistanceAbs / dvDataValues.Map(Math.Abs)); dvDistanceRelative = (DenseVector)dvDistanceRelative.PointwiseMultiply(dvWeights); distanceRelative = dvDistanceRelative.Abs(); } return(distanceRelative); }
public static DenseVector sigmoid(DenseVector x) { return((DenseVector)x.Map(sigmoid)); }