/** * Generalised least square with penalty on (higher-order) finite differences of weights. * @param <T> The type of the independent variables (e.g. Double, double[], DoubleArray etc) * @param x independent variables * @param y dependent (scalar) variables * @param sigma (Gaussian) measurement error on dependent variables * @param basisFunctions set of basis functions - the fitting function is formed by these basis functions times a set of weights * @param lambda strength of penalty function * @param differenceOrder difference order between weights used in penalty function * @return the results of the least square */ public <T> GeneralizedLeastSquareResults<T> solve( List<T> x, List<Double> y, List<Double> sigma, List<Function<T, Double>> basisFunctions, double lambda, int differenceOrder) { ArgChecker.notEmpty(x, "empty measurement points"); ArgChecker.notEmpty(y, "empty measurement values"); ArgChecker.notEmpty(sigma, "empty measurement errors"); ArgChecker.notEmpty(basisFunctions, "empty basisFunctions"); int n = x.size(); ArgChecker.isTrue(n > 0, "no data"); ArgChecker.isTrue(y.size() == n, "y wrong length"); ArgChecker.isTrue(sigma.size() == n, "sigma wrong length"); ArgChecker.isTrue(lambda >= 0.0, "negative lambda"); ArgChecker.isTrue(differenceOrder >= 0, "difference order"); return solveImp(x, y, sigma, basisFunctions, lambda, differenceOrder); }
/** * Generalised least square with penalty on (higher-order) finite differences of weights. * @param <T> The type of the independent variables (e.g. Double, double[], DoubleArray etc) * @param x independent variables * @param y dependent (scalar) variables * @param sigma (Gaussian) measurement error on dependent variables * @param basisFunctions set of basis functions - the fitting function is formed by these basis functions times a set of weights * @param lambda strength of penalty function * @param differenceOrder difference order between weights used in penalty function * @return the results of the least square */ public <T> GeneralizedLeastSquareResults<T> solve( T[] x, double[] y, double[] sigma, List<Function<T, Double>> basisFunctions, double lambda, int differenceOrder) { ArgChecker.notNull(x, "x null"); ArgChecker.notNull(y, "y null"); ArgChecker.notNull(sigma, "sigma null"); ArgChecker.notEmpty(basisFunctions, "empty basisFunctions"); int n = x.length; ArgChecker.isTrue(n > 0, "no data"); ArgChecker.isTrue(y.length == n, "y wrong length"); ArgChecker.isTrue(sigma.length == n, "sigma wrong length"); ArgChecker.isTrue(lambda >= 0.0, "negative lambda"); ArgChecker.isTrue(differenceOrder >= 0, "difference order"); List<T> lx = Lists.newArrayList(x); List<Double> ly = Lists.newArrayList(Doubles.asList(y)); List<Double> lsigma = Lists.newArrayList(Doubles.asList(sigma)); return solveImp(lx, ly, lsigma, basisFunctions, lambda, differenceOrder); }
ArgChecker.isTrue(differenceOrder[i] >= 0, "difference order"); return solveImp(x, y, sigma, basisFunctions, sizes, lambda, differenceOrder);