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:hivemall.utils.math.StatsUtils.java

/**
 * @param observed means non-negative vector
 * @param expected means positive vector
 * @return chi2 value//from   w ww.j a  v  a 2 s .  c  om
 */
public static double chiSquare(@Nonnull final double[] observed, @Nonnull final double[] expected) {
    if (observed.length < 2) {
        throw new DimensionMismatchException(observed.length, 2);
    }
    if (expected.length != observed.length) {
        throw new DimensionMismatchException(observed.length, expected.length);
    }
    MathArrays.checkPositive(expected);
    for (double d : observed) {
        if (d < 0.d) {
            throw new NotPositiveException(d);
        }
    }

    double sumObserved = 0.d;
    double sumExpected = 0.d;
    for (int i = 0; i < observed.length; i++) {
        sumObserved += observed[i];
        sumExpected += expected[i];
    }
    double ratio = 1.d;
    boolean rescale = false;
    if (FastMath.abs(sumObserved - sumExpected) > 10e-6) {
        ratio = sumObserved / sumExpected;
        rescale = true;
    }
    double sumSq = 0.d;
    for (int i = 0; i < observed.length; i++) {
        if (rescale) {
            final double dev = observed[i] - ratio * expected[i];
            sumSq += dev * dev / (ratio * expected[i]);
        } else {
            final double dev = observed[i] - expected[i];
            sumSq += dev * dev / expected[i];
        }
    }
    return sumSq;
}

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

/**
 * @param x Sample values of the x-coordinate, in increasing order.
 * @param y Sample values of the y-coordinate, in increasing order.
 * @param f Values of the function on every grid point.
 * @param dFdX Values of the partial derivative of function with respect
 * to x on every grid point./*www . java2  s.c  o  m*/
 * @param dFdY Values of the partial derivative of function with respect
 * to y on every grid point.
 * @param d2FdXdY Values of the cross partial derivative of function on
 * every grid point.
 * @throws DimensionMismatchException if the various arrays do not contain
 * the expected number of elements.
 * @throws NonMonotonicSequenceException if {@code x} or {@code y} are
 * not strictly increasing.
 * @throws NoDataException if any of the arrays has zero length.
 */
public BicubicSplineInterpolatingFunction(double[] x, double[] y, float[][] f, double[][] dFdX, double[][] dFdY,
        double[][] d2FdXdY) throws DimensionMismatchException, NoDataException, NonMonotonicSequenceException {
    final int xLen = x.length;
    final int yLen = y.length;

    if (xLen == 0 || yLen == 0 || f.length == 0 || f[0].length == 0) {
        throw new NoDataException();
    }
    if (xLen != f.length) {
        throw new DimensionMismatchException(xLen, f.length);
    }
    if (xLen != dFdX.length) {
        throw new DimensionMismatchException(xLen, dFdX.length);
    }
    if (xLen != dFdY.length) {
        throw new DimensionMismatchException(xLen, dFdY.length);
    }
    if (xLen != d2FdXdY.length) {
        throw new DimensionMismatchException(xLen, d2FdXdY.length);
    }

    MathArrays.checkOrder(x);
    MathArrays.checkOrder(y);

    xval = x.clone();
    yval = y.clone();

    final int lastI = xLen - 1;
    final int lastJ = yLen - 1;
    splines = new BicubicSplineFunction[lastI][lastJ];

    for (int i = 0; i < lastI; i++) {
        if (f[i].length != yLen) {
            throw new DimensionMismatchException(f[i].length, yLen);
        }
        if (dFdX[i].length != yLen) {
            throw new DimensionMismatchException(dFdX[i].length, yLen);
        }
        if (dFdY[i].length != yLen) {
            throw new DimensionMismatchException(dFdY[i].length, yLen);
        }
        if (d2FdXdY[i].length != yLen) {
            throw new DimensionMismatchException(d2FdXdY[i].length, yLen);
        }
        final int ip1 = i + 1;
        for (int j = 0; j < lastJ; j++) {
            final int jp1 = j + 1;
            final double[] beta = new double[] { f[i][j], f[ip1][j], f[i][jp1], f[ip1][jp1], dFdX[i][j],
                    dFdX[ip1][j], dFdX[i][jp1], dFdX[ip1][jp1], dFdY[i][j], dFdY[ip1][j], dFdY[i][jp1],
                    dFdY[ip1][jp1], d2FdXdY[i][j], d2FdXdY[ip1][j], d2FdXdY[i][jp1], d2FdXdY[ip1][jp1] };

            splines[i][j] = new BicubicSplineFunction(computeSplineCoefficients(beta));
        }
    }
}

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

public BicubicSplineInterpolatingFunction interpolate(final double[] xval, final double[] yval,
        final double[][] fval) throws NoDataException, DimensionMismatchException,
        NonMonotonicSequenceException, NumberIsTooSmallException {
    if (xval.length == 0 || yval.length == 0 || fval.length == 0) {
        throw new NoDataException();
    }/*from   ww w .  j a  va2  s  .co m*/
    if (xval.length != fval.length) {
        throw new DimensionMismatchException(xval.length, fval.length);
    }

    MathArrays.checkOrder(xval);
    MathArrays.checkOrder(yval);

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

    // Samples (first index is y-coordinate, i.e. subarray variable is x)
    // 0 <= i < xval.length
    // 0 <= j < yval.length
    // fX[j][i] = f(xval[i], yval[j])
    final double[][] fX = new double[yLen][xLen];
    for (int i = 0; i < xLen; i++) {
        if (fval[i].length != yLen) {
            throw new DimensionMismatchException(fval[i].length, yLen);
        }

        for (int j = 0; j < yLen; j++) {
            fX[j][i] = fval[i][j];
        }
    }

    final SplineInterpolator spInterpolator = new SplineInterpolator();

    // For each line y[j] (0 <= j < yLen), construct a 1D spline with
    // respect to variable x
    final PolynomialSplineFunction[] ySplineX = new PolynomialSplineFunction[yLen];
    for (int j = 0; j < yLen; j++) {
        ySplineX[j] = spInterpolator.interpolate(xval, fX[j]);
    }

    // For each line x[i] (0 <= i < xLen), construct a 1D spline with
    // respect to variable y generated by array fY_1[i]
    final PolynomialSplineFunction[] xSplineY = new PolynomialSplineFunction[xLen];
    for (int i = 0; i < xLen; i++) {
        xSplineY[i] = spInterpolator.interpolate(yval, fval[i]);
    }

    // Partial derivatives with respect to x at the grid knots
    final double[][] dFdX = new double[xLen][yLen];
    for (int j = 0; j < yLen; j++) {
        final UnivariateFunction f = ySplineX[j].derivative();
        for (int i = 0; i < xLen; i++) {
            dFdX[i][j] = f.value(xval[i]);
        }
    }

    // Partial derivatives with respect to y at the grid knots
    final double[][] dFdY = new double[xLen][yLen];
    for (int i = 0; i < xLen; i++) {
        final UnivariateFunction f = xSplineY[i].derivative();
        for (int j = 0; j < yLen; j++) {
            dFdY[i][j] = f.value(yval[j]);
        }
    }

    // Cross partial derivatives
    final double[][] d2FdXdY = new double[xLen][yLen];
    for (int i = 0; i < xLen; i++) {
        final int nI = nextIndex(i, xLen);
        final int pI = previousIndex(i);
        for (int j = 0; j < yLen; j++) {
            final int nJ = nextIndex(j, yLen);
            final int pJ = previousIndex(j);
            d2FdXdY[i][j] = (fval[nI][nJ] - fval[nI][pJ] - fval[pI][nJ] + fval[pI][pJ])
                    / ((xval[nI] - xval[pI]) * (yval[nJ] - yval[pJ]));
        }
    }

    // Create the interpolating splines
    return new BicubicSplineInterpolatingFunction(xval, yval, fval, dFdX, dFdY, d2FdXdY);
}

From source file:com.clust4j.utils.VecUtils.java

final private static void dimAssess(final int a, final int b) {
    if (a != b)/* w w  w.ja va2s . c om*/
        throw new DimensionMismatchException(a, b);
    dimAssess(a);
}

From source file:com.bolatu.gezkoncsvlogger.GyroOrientation.RotationKalmanFilter.java

/**
 * Creates a new Kalman filter with the given process and measurement
 * models./*from w ww  . j  a va  2  s  .co m*/
 *
 * @param process
 *            the model defining the underlying process dynamics
 * @param measurement
 *            the model defining the given measurement characteristics
 * @throws NullArgumentException
 *             if any of the given inputs is null (except for the control
 *             matrix)
 * @throws NonSquareMatrixException
 *             if the transition matrix is non square
 * @throws DimensionMismatchException
 *             if the column dimension of the transition matrix does not
 *             match the dimension of the initial state estimation vector
 * @throws MatrixDimensionMismatchException
 *             if the matrix dimensions do not fit together
 */
public RotationKalmanFilter(final ProcessModel process, final MeasurementModel measurement)
        throws NullArgumentException, NonSquareMatrixException, DimensionMismatchException,
        MatrixDimensionMismatchException {

    MathUtils.checkNotNull(process);
    MathUtils.checkNotNull(measurement);

    this.processModel = process;
    this.measurementModel = measurement;

    transitionMatrix = processModel.getStateTransitionMatrix();
    MathUtils.checkNotNull(transitionMatrix);
    transitionMatrixT = transitionMatrix.transpose();

    // create an empty matrix if no control matrix was given
    if (processModel.getControlMatrix() == null) {
        controlMatrix = new Array2DRowRealMatrix();
    } else {
        controlMatrix = processModel.getControlMatrix();
    }

    measurementMatrix = measurementModel.getMeasurementMatrix();
    MathUtils.checkNotNull(measurementMatrix);
    measurementMatrixT = measurementMatrix.transpose();

    // check that the process and measurement noise matrices are not null
    // they will be directly accessed from the model as they may change
    // over time
    RealMatrix processNoise = processModel.getProcessNoise();
    MathUtils.checkNotNull(processNoise);
    RealMatrix measNoise = measurementModel.getMeasurementNoise();
    MathUtils.checkNotNull(measNoise);

    // set the initial state estimate to a zero vector if it is not
    // available from the process model
    if (processModel.getInitialStateEstimate() == null) {
        stateEstimation = new ArrayRealVector(transitionMatrix.getColumnDimension());
    } else {
        stateEstimation = processModel.getInitialStateEstimate();
    }

    if (transitionMatrix.getColumnDimension() != stateEstimation.getDimension()) {
        throw new DimensionMismatchException(transitionMatrix.getColumnDimension(),
                stateEstimation.getDimension());
    }

    // initialize the error covariance to the process noise if it is not
    // available from the process model
    if (processModel.getInitialErrorCovariance() == null) {
        errorCovariance = processNoise.copy();
    } else {
        errorCovariance = processModel.getInitialErrorCovariance();
    }

    // sanity checks, the control matrix B may be null

    // A must be a square matrix
    if (!transitionMatrix.isSquare()) {
        throw new NonSquareMatrixException(transitionMatrix.getRowDimension(),
                transitionMatrix.getColumnDimension());
    }

    // row dimension of B must be equal to A
    // if no control matrix is available, the row and column dimension will
    // be 0
    if (controlMatrix != null && controlMatrix.getRowDimension() > 0 && controlMatrix.getColumnDimension() > 0
            && controlMatrix.getRowDimension() != transitionMatrix.getRowDimension()) {
        throw new MatrixDimensionMismatchException(controlMatrix.getRowDimension(),
                controlMatrix.getColumnDimension(), transitionMatrix.getRowDimension(),
                controlMatrix.getColumnDimension());
    }

    // Q must be equal to A
    MatrixUtils.checkAdditionCompatible(transitionMatrix, processNoise);

    // column dimension of H must be equal to row dimension of A
    if (measurementMatrix.getColumnDimension() != transitionMatrix.getRowDimension()) {
        throw new MatrixDimensionMismatchException(measurementMatrix.getRowDimension(),
                measurementMatrix.getColumnDimension(), measurementMatrix.getRowDimension(),
                transitionMatrix.getRowDimension());
    }

    // row dimension of R must be equal to row dimension of H
    if (measNoise.getRowDimension() != measurementMatrix.getRowDimension()) {
        throw new MatrixDimensionMismatchException(measNoise.getRowDimension(), measNoise.getColumnDimension(),
                measurementMatrix.getRowDimension(), measNoise.getColumnDimension());
    }
}

From source file:gamlss.utilities.WLSMultipleLinearRegression.java

/**
 * Add a column with 1s for the Intercept. 
 * @param X the design matrix//  ww w  .java2  s.  c  om
 */
private void setDesignMatrix(RealMatrix X) {
    double[][] x = X.getData();
    final int nVars = x[0].length;
    final double[][] xAug = new double[x.length][nVars + 1];
    for (int i = 0; i < x.length; i++) {
        if (x[i].length != nVars) {
            throw new DimensionMismatchException(x[i].length, nVars);
        }
        xAug[i][0] = 1.0d;
        System.arraycopy(x[i], 0, xAug[i], 1, nVars);
    }
    this.X = new Array2DRowRealMatrix(xAug, false);
}

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

public PolynomialSplineFunction interpolate(double x[], float y[])
        throws DimensionMismatchException, NumberIsTooSmallException, NonMonotonicSequenceException {
    if (x.length != y.length) {
        throw new DimensionMismatchException(x.length, y.length);
    }/*  w  ww.j  a va 2 s.  c om*/

    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);
}

From source file:com.clust4j.utils.VecUtils.java

final private static void dimAssessPermitEmpty(final int a, final int b) {
    if (a != b)/*from  www. j ava  2s. c  o m*/
        throw new DimensionMismatchException(a, b);
    dimAssessPermitEmpty(a);
}

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

/**
 * Build an instance from all its derivatives.
 * //from  w w  w  .  ja v a 2s. co m
 * @param parameters
 *          number of free parameters
 * @param order
 *          derivation order
 * @param derivatives
 *          derivatives sorted according to {@link IDSCompiler#getPartialDerivativeIndex(int...)}
 * @throws DimensionMismatchException
 *           if derivatives array does not match the {@link IDSCompiler#getSize() size} expected by the compiler
 * @see #getAllDerivatives()
 */
public DerivativeStructure(final int parameters, final int order, final double... derivatives)
        throws DimensionMismatchException {
    this(parameters, order);
    if (derivatives.length != data.length) {
        throw new DimensionMismatchException(derivatives.length, data.length);
    }
    System.arraycopy(derivatives, 0, data, 0, data.length);
}

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

/**
 * Build an instance from all its derivatives.
 * /*from www  .  j  a v a  2 s .c o  m*/
 * @param parameters
 *          number of free parameters
 * @param order
 *          derivation order
 * @param derivatives
 *          derivatives sorted according to {@link IDSCompiler#getPartialDerivativeIndex(int...)}
 * @throws DimensionMismatchException
 *           if derivatives array does not match the {@link IDSCompiler#getSize() size} expected by the compiler
 * @see #getAllDerivatives()
 */
public DerivativeStructureOnlyCompose(final int parameters, final int order, final double... derivatives)
        throws DimensionMismatchException {
    this(parameters, order);
    if (derivatives.length != data.length) {
        throw new DimensionMismatchException(derivatives.length, data.length);
    }
    System.arraycopy(derivatives, 0, data, 0, data.length);
}