List of usage examples for org.apache.commons.math3.exception DimensionMismatchException DimensionMismatchException
public DimensionMismatchException(int wrong, int expected)
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); }