Example usage for org.apache.commons.math3.exception DimensionMismatchException DimensionMismatchException

List of usage examples for org.apache.commons.math3.exception DimensionMismatchException DimensionMismatchException

Introduction

In this page you can find the example usage for org.apache.commons.math3.exception DimensionMismatchException DimensionMismatchException.

Prototype

public DimensionMismatchException(int wrong, int expected) 

Source Link

Document

Construct an exception from the mismatched dimensions.

Usage

From source file:de.tuberlin.uebb.jbop.example.DSCompilerOnlyCompose.java

@Override
public int getPartialDerivativeIndex(final int... orders)
        throws DimensionMismatchException, NumberIsTooLargeException {

    // safety check
    if (orders.length != parameters) {
        throw new DimensionMismatchException(orders.length, parameters);
    }/*from  www. j  a  v a2 s  .  c o  m*/

    int index = 0;
    int m = order;
    int ordersSum = 0;
    for (int i = parameters - 1; i >= 0; --i) {

        // derivative order for current free parameter
        int derivativeOrder = orders[i];

        // safety check
        ordersSum += derivativeOrder;
        if (ordersSum > order) {
            throw new NumberIsTooLargeException(ordersSum, order, true);
        }

        while (derivativeOrder-- > 0) {
            // as long as we differentiate according to current free parameter,
            // we have to skip the value part and dive into the derivative part
            // so we add the size of the value part to the base index
            index += sizes[i][m--];
        }

    }

    return index;

}

From source file:de.tuberlin.uebb.jbop.example.DSCompiler.java

@Override
@Optimizable/*  w w w  .  ja va 2s  .c  o  m*/
public int getPartialDerivativeIndex(final int... orders)
        throws DimensionMismatchException, NumberIsTooLargeException {

    // safety check
    if (orders.length != parameters) {
        throw new DimensionMismatchException(orders.length, parameters);
    }

    int index = 0;
    int m = order;
    int ordersSum = 0;
    for (int i = parameters - 1; i >= 0; --i) {

        // derivative order for current free parameter
        int derivativeOrder = orders[i];

        // safety check
        ordersSum += derivativeOrder;
        if (ordersSum > order) {
            throw new NumberIsTooLargeException(ordersSum, order, true);
        }

        while (derivativeOrder-- > 0) {
            // as long as we differentiate according to current free parameter,
            // we have to skip the value part and dive into the derivative part
            // so we add the size of the value part to the base index
            index += sizes[i][m--];
        }

    }

    return index;

}

From source file:au.gov.ga.conn4d.utils.TricubicSplineInterpolator.java

/**
 * {@inheritDoc}// w  ww.j  av  a  2s  .  c  om
 */
public TricubicSplineInterpolatingFunction interpolate(final double[] zval, final double[] yval,
        final double[] xval, final double[][][] fval)
        throws NoDataException, DimensionMismatchException, NonMonotonicSequenceException {
    if (zval.length == 0 || yval.length == 0 || xval.length == 0 || fval.length == 0) {
        throw new NoDataException();
    }
    if (zval.length != fval.length) {
        throw new DimensionMismatchException(zval.length, fval.length);
    }

    MathArrays.checkOrder(zval);
    MathArrays.checkOrder(yval);

    final int zLen = zval.length;
    final int yLen = yval.length;
    final int xLen = xval.length;

    final double[] zzval;
    final double[][][] ffval = new double[zLen][][];

    if (zval[0] > zval[zLen - 1]) {
        zzval = VectorMath.selectionSort(zval);
        for (int i = 0; i < zLen; i++) {
            ffval[i] = fval[zLen - 1 - i];
        }
    } else {
        zzval = zval;
    }

    // Samples, re-ordered as (z, x, y) and (y, z, x) tuplets
    // fvalXY[k][i][j] = f(xval[i], yval[j], zval[k])
    // fvalZX[j][k][i] = f(xval[i], yval[j], zval[k])
    final double[][][] fvalXY = new double[xLen][zLen][yLen];
    final double[][][] fvalZX = new double[yLen][xLen][zLen];
    for (int i = 0; i < zLen; i++) {
        if (ffval[i].length != yLen) {
            throw new DimensionMismatchException(ffval[i].length, yLen);
        }

        for (int j = 0; j < yLen; j++) {
            if (ffval[i][j].length != xLen) {
                throw new DimensionMismatchException(ffval[i][j].length, xLen);
            }

            for (int k = 0; k < xLen; k++) {
                final double v = ffval[i][j][k];
                fvalXY[k][i][j] = v;
                fvalZX[j][k][i] = v;
            }
        }
    }

    final BicubicSplineInterpolator bsi = new BicubicSplineInterpolator();

    // For each line x[i] (0 <= i < xLen), construct a 2D spline in y and z
    final BicubicSplineInterpolatingFunction[] xSplineYZ = new BicubicSplineInterpolatingFunction[zLen];
    for (int i = 0; i < zLen; i++) {
        xSplineYZ[i] = bsi.interpolate(yval, xval, ffval[i]);
    }

    // For each line y[j] (0 <= j < yLen), construct a 2D spline in z and x
    final BicubicSplineInterpolatingFunction[] ySplineZX = new BicubicSplineInterpolatingFunction[yLen];
    for (int j = 0; j < yLen; j++) {
        ySplineZX[j] = bsi.interpolate(xval, zzval, fvalZX[j]);
    }

    // For each line z[k] (0 <= k < zLen), construct a 2D spline in x and y
    final BicubicSplineInterpolatingFunction[] zSplineXY = new BicubicSplineInterpolatingFunction[xLen];
    for (int k = 0; k < xLen; k++) {
        zSplineXY[k] = bsi.interpolate(zzval, yval, fvalXY[k]);
    }

    // Partial derivatives wrt x and wrt y
    final double[][][] dFdX = new double[zLen][yLen][xLen];
    final double[][][] dFdY = new double[zLen][yLen][xLen];
    final double[][][] d2FdXdY = new double[zLen][yLen][xLen];
    for (int k = 0; k < xLen; k++) {
        final BicubicSplineInterpolatingFunction f = zSplineXY[k];
        for (int i = 0; i < zLen; i++) {
            final double z = zzval[i];
            for (int j = 0; j < yLen; j++) {
                final double y = yval[j];
                dFdX[i][j][k] = f.partialDerivativeX(z, y);
                dFdY[i][j][k] = f.partialDerivativeY(z, y);
                d2FdXdY[i][j][k] = f.partialDerivativeXY(z, y);
            }
        }
    }

    // Partial derivatives wrt y and wrt z
    final double[][][] dFdZ = new double[zLen][yLen][xLen];
    final double[][][] d2FdYdZ = new double[zLen][yLen][xLen];
    for (int i = 0; i < zLen; i++) {
        final BicubicSplineInterpolatingFunction f = xSplineYZ[i];
        for (int j = 0; j < yLen; j++) {
            final double y = yval[j];
            for (int k = 0; k < xLen; k++) {
                final double x = xval[k];
                dFdZ[i][j][k] = f.partialDerivativeY(y, x);
                d2FdYdZ[i][j][k] = f.partialDerivativeXY(y, x);
            }
        }
    }

    // Partial derivatives wrt x and wrt z
    final double[][][] d2FdZdX = new double[zLen][yLen][xLen];
    for (int j = 0; j < yLen; j++) {
        final BicubicSplineInterpolatingFunction f = ySplineZX[j];
        for (int k = 0; k < xLen; k++) {
            final double x = xval[k];
            for (int i = 0; i < zLen; i++) {
                final double z = zzval[i];
                d2FdZdX[i][j][k] = f.partialDerivativeXY(x, z);
            }
        }
    }

    // Third partial cross-derivatives
    final double[][][] d3FdXdYdZ = new double[zLen][yLen][xLen];
    for (int i = 0; i < zLen; i++) {
        final int nI = nextIndex(i, zLen);
        final int pI = previousIndex(i);
        for (int j = 0; j < yLen; j++) {
            final int nJ = nextIndex(j, yLen);
            final int pJ = previousIndex(j);
            for (int k = 0; k < xLen; k++) {
                final int nK = nextIndex(k, xLen);
                final int pK = previousIndex(k);

                // XXX Not sure about this formula
                d3FdXdYdZ[i][j][k] = (ffval[nI][nJ][nK] - ffval[nI][pJ][nK] - ffval[pI][nJ][nK]
                        + ffval[pI][pJ][nK] - ffval[nI][nJ][pK] + ffval[nI][pJ][pK] + ffval[pI][nJ][pK]
                        - ffval[pI][pJ][pK])
                        / ((zzval[nI] - zzval[pI]) * (yval[nJ] - yval[pJ]) * (xval[nK] - xval[pK]));
            }
        }
    }

    // Create the interpolating splines
    return new TricubicSplineInterpolatingFunction(zzval, yval, xval, ffval, dFdX, dFdY, dFdZ, d2FdXdY, d2FdZdX,
            d2FdYdZ, d3FdXdYdZ);
}

From source file:com.clust4j.algo.preprocess.StandardScaler.java

@Override
public RealMatrix inverseTransform(RealMatrix X) {
    checkFit();/*from ww w  . j  a  v a 2 s. c om*/

    // This effectively copies, so no need to do a copy later
    double[][] data = X.getData();
    final int m = data.length;
    final int n = data[0].length;

    if (n != means.length)
        throw new DimensionMismatchException(n, means.length);

    for (int j = 0; j < n; j++) {
        for (int i = 0; i < m; i++) {
            data[i][j] *= stdevs[j]; // first re-scale
            data[i][j] += means[j]; // then add means
        }
    }

    return new Array2DRowRealMatrix(data, false);
}

From source file:MultivariateNormalDistribution.java

/**
 * Creates a multivariate normal distribution with the given mean vector and
 * covariance matrix./*from   ww  w  .j  a  v a2 s.  c o  m*/
 * <br/>
 * The number of dimensions is equal to the length of the mean vector
 * and to the number of rows and columns of the covariance matrix.
 * It is frequently written as "p" in formulae.
 *
 * @param rng Random Number Generator.
 * @param means Vector of means.
 * @param covariances Covariance matrix.
 * @throws DimensionMismatchException if the arrays length are
 * inconsistent.
 * @throws SingularMatrixException if the eigenvalue decomposition cannot
 * be performed on the provided covariance matrix.
 * @throws NonPositiveDefiniteMatrixException if any of the eigenvalues is
 * negative.
 */
public MultivariateNormalDistribution(RandomGenerator rng, final double[] means, final double[][] covariances)
        throws SingularMatrixException, DimensionMismatchException, NonPositiveDefiniteMatrixException {
    super(rng, means.length);

    final int dim = means.length;

    if (covariances.length != dim) {
        throw new DimensionMismatchException(covariances.length, dim);
    }

    for (int i = 0; i < dim; i++) {
        if (dim != covariances[i].length) {
            throw new DimensionMismatchException(covariances[i].length, dim);
        }
    }

    this.means = MathArrays.copyOf(means);

    covarianceMatrix = new Array2DRowRealMatrix(covariances);

    // Covariance matrix eigen decomposition.
    final EigenDecomposition covMatDec = new EigenDecomposition(covarianceMatrix);

    // Compute and store the inverse.
    covarianceMatrixInverse = covMatDec.getSolver().getInverse();
    // Compute and store the determinant.
    covarianceMatrixDeterminant = covMatDec.getDeterminant();

    // Eigenvalues of the covariance matrix.
    final double[] covMatEigenvalues = covMatDec.getRealEigenvalues();

    for (int i = 0; i < covMatEigenvalues.length; i++) {
        if (covMatEigenvalues[i] < 0) {
            throw new NonPositiveDefiniteMatrixException(covMatEigenvalues[i], i, 0);
        }
    }

    // Matrix where each column is an eigenvector of the covariance matrix.
    final Array2DRowRealMatrix covMatEigenvectors = new Array2DRowRealMatrix(dim, dim);
    for (int v = 0; v < dim; v++) {
        final double[] evec = covMatDec.getEigenvector(v).toArray();
        covMatEigenvectors.setColumn(v, evec);
    }

    final RealMatrix tmpMatrix = covMatEigenvectors.transpose();

    // Scale each eigenvector by the square root of its eigenvalue.
    for (int row = 0; row < dim; row++) {
        final double factor = FastMath.sqrt(covMatEigenvalues[row]);
        for (int col = 0; col < dim; col++) {
            tmpMatrix.multiplyEntry(row, col, factor);
        }
    }

    samplingMatrix = covMatEigenvectors.multiply(tmpMatrix);
}

From source file:com.clust4j.data.DataSet.java

public DataSet(Array2DRowRealMatrix data, int[] labels, String[] hdrz, MatrixFormatter formatter,
        boolean copyData) {

    /*// we should allow this behavior...
    if(null == labels)//from   w w w .  ja  va  2  s .  c  o  m
       throw new IllegalArgumentException("labels cannot be null");
    */

    if (null == data)
        throw new IllegalArgumentException("data cannot be null");
    if (null == hdrz)
        this.headers = genHeaders(data.getColumnDimension());
    else
        this.headers = VecUtils.copy(hdrz);

    // Check to make sure dims match up...
    if ((null != labels) && labels.length != data.getRowDimension())
        throw new DimensionMismatchException(labels.length, data.getRowDimension());
    if (this.headers.length != data.getColumnDimension())
        throw new DimensionMismatchException(this.headers.length, data.getColumnDimension());

    this.data = copyData ? (Array2DRowRealMatrix) data.copy() : data;
    this.labels = VecUtils.copy(labels);
    this.formatter = null == formatter ? DEF_FORMATTER : formatter;
}

From source file:com.itemanalysis.psychometrics.irt.estimation.JointMaximumLikelihoodEstimation.java

/**
 * The object is created with a set of data and array of item response models (See {@link ItemResponseModel}.
 * The data must be arranged such that each row respresents an examinee and each column represents an item.
 * All item responses must be zero or larger (i.e. nonnegative). Use an item response value of -1 to indicate
 * a missing item response. The length of the item response model array must equal the number of columns in
 * the data array.//from   www .j a v  a2 s  .  c o  m
 *
 * @param data a two-way array of item responses.
 * @param irm an array of item response model.
 * @throws DimensionMismatchException
 */
public JointMaximumLikelihoodEstimation(byte[][] data, ItemResponseModel[] irm)
        throws DimensionMismatchException {
    if (data[0].length != irm.length)
        throw new DimensionMismatchException(data[0].length, irm.length);
    this.irm = irm;
    this.nPeople = data.length;
    this.data = data;
    iterationHistory = new ArrayList<IterationRecord>();
    initializeCounts();
}

From source file:edu.ucsf.valelab.saim.calculations.SaimFunction.java

/**
 * Calculates the field intensity at a given angle, given the parameters
 * A, B, and height./* w  ww .  java 2 s .c  o  m*/
 * @param x - angle in radians
 * @param parameters - array of 3 values:
 *    A - scaling parameter
 *    B - offset parameter, accounting for background
 *    h - height in nm
 * @return - Calculated field intensity
 */
@Override
public double value(double x, double... parameters) {
    if (parameters.length != 3)
        throw new DimensionMismatchException(parameters.length, 3);
    sd_.A_ = parameters[0];
    sd_.B_ = parameters[1];
    angle_ = x;
    return value(parameters[2]);
}

From source file:com.wwidesigner.optimization.HolePositionObjectiveFunction.java

protected void setBore(double[] point) {
    if (point.length != nrDimensions) {
        throw new DimensionMismatchException(point.length, nrDimensions);
    }//from ww  w  .  j  a  v  a  2s . com

    SortedPositionList<BorePoint> boreList = new SortedPositionList<BorePoint>(
            calculator.getInstrument().getBorePoint());
    BorePoint endPoint = boreList.getLast();

    if (lengthAdjustmentMode == BoreLengthAdjustmentType.PRESERVE_BELL) {
        double netChange = point[0] - endPoint.getBorePosition();
        double priorBorePoint = boreList.get(bellIndex - 1).getBorePosition();
        for (int i = bellIndex; i < boreList.size(); ++i) {
            BorePoint borePoint = boreList.get(i);
            double oldPosition = borePoint.getBorePosition();
            if (oldPosition + netChange <= priorBorePoint + MINIMUM_BORE_POINT_SPACING) {
                // Squeeze bore points together if necessary.
                borePoint.setBorePosition(priorBorePoint + MINIMUM_BORE_POINT_SPACING);
            } else {
                borePoint.setBorePosition(oldPosition + netChange);
            }
            priorBorePoint = borePoint.getBorePosition();
        }
    } else {
        // Don't let optimizer delete a borePoint.
        // Instead, move them up the bore a bit.
        double newEndPosition = point[0];
        int lastPointIndex = boreList.size() - 1;
        for (int i = lastPointIndex - 1; i >= 0; i--) {
            BorePoint borePoint = boreList.get(i);
            double currentPosition = borePoint.getBorePosition();
            if (currentPosition >= newEndPosition) {
                newEndPosition -= MINIMUM_BORE_POINT_SPACING;
                borePoint.setBorePosition(newEndPosition);
            } else {
                break;
            }
        }

        // Extrapolate/interpolate the bore diameter of end point
        if (lengthAdjustmentMode == BoreLengthAdjustmentType.PRESERVE_TAPER) {
            double endDiameter = BorePoint.getInterpolatedExtrapolatedBoreDiameter(boreList, point[0]);
            endPoint.setBoreDiameter(endDiameter);
        }
        endPoint.setBorePosition(point[0]);
    }
}

From source file:au.gov.ga.conn4d.utils.SplineInterpolator.java

/**
 * Computes an interpolating function for the data set.
 * // w  ww.  j a v  a 2s  .  c  o  m
 * @param x
 *            the arguments for the interpolation points
 * @param y
 *            the values for the interpolation points
 * @return a function which interpolates the data set
 * @throws DimensionMismatchException
 *             if {@code x} and {@code y} have different sizes.
 * @throws NonMonotonicSequenceException
 *             if {@code x} is not sorted in strict increasing order.
 * @throws NumberIsTooSmallException
 *             if the size of {@code x} is smaller than 3.
 */
public PolynomialSplineFunction interpolate(double x[], double y[])
        throws DimensionMismatchException, NumberIsTooSmallException, NonMonotonicSequenceException {
    if (x.length != y.length) {
        throw new DimensionMismatchException(x.length, y.length);
    }

    if (x.length < 3) {
        throw new NumberIsTooSmallException(LocalizedFormats.NUMBER_OF_POINTS, x.length, 3, true);
    }

    // Number of intervals. The number of data points is n + 1.
    final int n = x.length - 1;

    MathArrays.checkOrder(x);

    // Differences between knot points
    final double h[] = new double[n];
    for (int i = 0; i < n; i++) {
        h[i] = x[i + 1] - x[i];
    }

    final double mu[] = new double[n];
    final double z[] = new double[n + 1];
    mu[0] = 0d;
    z[0] = 0d;
    double g = 0;
    for (int i = 1; i < n; i++) {
        g = 2d * (x[i + 1] - x[i - 1]) - h[i - 1] * mu[i - 1];
        mu[i] = h[i] / g;
        z[i] = (3d * (y[i + 1] * h[i - 1] - y[i] * (x[i + 1] - x[i - 1]) + y[i - 1] * h[i]) / (h[i - 1] * h[i])
                - h[i - 1] * z[i - 1]) / g;
    }

    // cubic spline coefficients -- b is linear, c quadratic, d is cubic
    // (original y's are constants)
    final double b[] = new double[n];
    final double c[] = new double[n + 1];
    final double d[] = new double[n];

    z[n] = 0d;
    c[n] = 0d;

    for (int j = n - 1; j >= 0; j--) {
        c[j] = z[j] - mu[j] * c[j + 1];
        b[j] = (y[j + 1] - y[j]) / h[j] - h[j] * (c[j + 1] + 2d * c[j]) / 3d;
        d[j] = (c[j + 1] - c[j]) / (3d * h[j]);
    }

    final PolynomialFunction polynomials[] = new PolynomialFunction[n];
    final double coefficients[] = new double[4];
    for (int i = 0; i < n; i++) {
        coefficients[0] = y[i];
        coefficients[1] = b[i];
        coefficients[2] = c[i];
        coefficients[3] = d[i];
        polynomials[i] = new PolynomialFunction(coefficients);
    }

    return new PolynomialSplineFunction(x, polynomials);
}