MATH-854: populate the throws clause in package o.a.c.m.linear.

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@1380122 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Sebastien Brisard 2012-09-03 03:54:23 +00:00
parent 9e933debcb
commit 56a22909a1
7 changed files with 343 additions and 230 deletions

View File

@ -25,6 +25,7 @@ import org.apache.commons.math3.Field;
import org.apache.commons.math3.FieldElement;
import org.apache.commons.math3.exception.DimensionMismatchException;
import org.apache.commons.math3.exception.NoDataException;
import org.apache.commons.math3.exception.NotPositiveException;
import org.apache.commons.math3.exception.OutOfRangeException;
import org.apache.commons.math3.exception.NumberIsTooSmallException;
import org.apache.commons.math3.exception.NotStrictlyPositiveException;
@ -72,7 +73,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
*/
protected AbstractFieldMatrix(final Field<T> field,
final int rowDimension,
final int columnDimension) {
final int columnDimension)
throws NotStrictlyPositiveException {
if (rowDimension <= 0) {
throw new NotStrictlyPositiveException(LocalizedFormats.DIMENSION,
rowDimension);
@ -93,7 +95,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
* @throws NullArgumentException if the array is {@code null}.
* @throws NoDataException if the array is empty.
*/
protected static <T extends FieldElement<T>> Field<T> extractField(final T[][] d) {
protected static <T extends FieldElement<T>> Field<T> extractField(final T[][] d)
throws NoDataException, NullArgumentException {
if (d == null) {
throw new NullArgumentException();
}
@ -114,7 +117,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
* @return the field to which the array elements belong.
* @throws NoDataException if array is empty.
*/
protected static <T extends FieldElement<T>> Field<T> extractField(final T[] d) {
protected static <T extends FieldElement<T>> Field<T> extractField(final T[] d)
throws NoDataException {
if (d.length == 0) {
throw new NoDataException(LocalizedFormats.AT_LEAST_ONE_ROW);
}
@ -177,7 +181,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
public abstract FieldMatrix<T> copy();
/** {@inheritDoc} */
public FieldMatrix<T> add(FieldMatrix<T> m) {
public FieldMatrix<T> add(FieldMatrix<T> m)
throws MatrixDimensionMismatchException {
// safety check
checkAdditionCompatible(m);
@ -194,7 +199,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public FieldMatrix<T> subtract(final FieldMatrix<T> m) {
public FieldMatrix<T> subtract(final FieldMatrix<T> m)
throws MatrixDimensionMismatchException {
// safety check
checkSubtractionCompatible(m);
@ -240,7 +246,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public FieldMatrix<T> multiply(final FieldMatrix<T> m) {
public FieldMatrix<T> multiply(final FieldMatrix<T> m)
throws DimensionMismatchException {
// safety check
checkMultiplicationCompatible(m);
@ -262,14 +269,16 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public FieldMatrix<T> preMultiply(final FieldMatrix<T> m) {
public FieldMatrix<T> preMultiply(final FieldMatrix<T> m)
throws DimensionMismatchException {
return m.multiply(this);
}
/** {@inheritDoc} */
public FieldMatrix<T> power(final int p) {
public FieldMatrix<T> power(final int p) throws NonSquareMatrixException,
NotPositiveException {
if (p < 0) {
throw new IllegalArgumentException("p must be >= 0");
throw new NotPositiveException(p);
}
if (!isSquare()) {
@ -340,7 +349,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
/** {@inheritDoc} */
public FieldMatrix<T> getSubMatrix(final int startRow, final int endRow,
final int startColumn, final int endColumn) {
final int startColumn, final int endColumn)
throws NumberIsTooSmallException, OutOfRangeException {
checkSubMatrixIndex(startRow, endRow, startColumn, endColumn);
final FieldMatrix<T> subMatrix =
@ -357,7 +367,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
/** {@inheritDoc} */
public FieldMatrix<T> getSubMatrix(final int[] selectedRows,
final int[] selectedColumns) {
final int[] selectedColumns)
throws NoDataException, NullArgumentException, OutOfRangeException {
// safety checks
checkSubMatrixIndex(selectedRows, selectedColumns);
@ -382,7 +393,9 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
/** {@inheritDoc} */
public void copySubMatrix(final int startRow, final int endRow,
final int startColumn, final int endColumn,
final T[][] destination) {
final T[][] destination)
throws MatrixDimensionMismatchException, NumberIsTooSmallException,
OutOfRangeException{
// safety checks
checkSubMatrixIndex(startRow, endRow, startColumn, endColumn);
final int rowsCount = endRow + 1 - startRow;
@ -423,7 +436,9 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public void copySubMatrix(int[] selectedRows, int[] selectedColumns, T[][] destination) {
public void copySubMatrix(int[] selectedRows, int[] selectedColumns, T[][] destination)
throws MatrixDimensionMismatchException, NoDataException,
NullArgumentException, OutOfRangeException {
// safety checks
checkSubMatrixIndex(selectedRows, selectedColumns);
if ((destination.length < selectedRows.length) ||
@ -444,8 +459,13 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public void setSubMatrix(final T[][] subMatrix, final int row, final int column) {
/**
* {@inheritDoc}
*
*/
public void setSubMatrix(final T[][] subMatrix, final int row, final int column)
throws DimensionMismatchException, NoDataException, NullArgumentException,
OutOfRangeException {
if (subMatrix == null) {
throw new NullArgumentException();
}
@ -478,7 +498,7 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public FieldMatrix<T> getRowMatrix(final int row) {
public FieldMatrix<T> getRowMatrix(final int row) throws OutOfRangeException {
checkRowIndex(row);
final int nCols = getColumnDimension();
final FieldMatrix<T> out = createMatrix(1, nCols);
@ -491,7 +511,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public void setRowMatrix(final int row, final FieldMatrix<T> matrix) {
public void setRowMatrix(final int row, final FieldMatrix<T> matrix)
throws OutOfRangeException {
checkRowIndex(row);
final int nCols = getColumnDimension();
if ((matrix.getRowDimension() != 1) ||
@ -507,7 +528,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public FieldMatrix<T> getColumnMatrix(final int column) {
public FieldMatrix<T> getColumnMatrix(final int column)
throws OutOfRangeException {
checkColumnIndex(column);
final int nRows = getRowDimension();
@ -521,7 +543,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public void setColumnMatrix(final int column, final FieldMatrix<T> matrix) {
public void setColumnMatrix(final int column, final FieldMatrix<T> matrix)
throws OutOfRangeException {
checkColumnIndex(column);
final int nRows = getRowDimension();
if ((matrix.getRowDimension() != nRows) ||
@ -542,7 +565,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public void setRowVector(final int row, final FieldVector<T> vector) {
public void setRowVector(final int row, final FieldVector<T> vector)
throws OutOfRangeException {
checkRowIndex(row);
final int nCols = getColumnDimension();
if (vector.getDimension() != nCols) {
@ -561,7 +585,9 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public void setColumnVector(final int column, final FieldVector<T> vector) {
public void setColumnVector(final int column, final FieldVector<T> vector)
throws OutOfRangeException {
checkColumnIndex(column);
final int nRows = getRowDimension();
if (vector.getDimension() != nRows) {
@ -575,7 +601,7 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public T[] getRow(final int row) {
public T[] getRow(final int row) throws OutOfRangeException {
checkRowIndex(row);
final int nCols = getColumnDimension();
final T[] out = buildArray(field, nCols);
@ -588,7 +614,7 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public void setRow(final int row, final T[] array) {
public void setRow(final int row, final T[] array) throws OutOfRangeException {
checkRowIndex(row);
final int nCols = getColumnDimension();
if (array.length != nCols) {
@ -601,7 +627,7 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public T[] getColumn(final int column) {
public T[] getColumn(final int column) throws OutOfRangeException {
checkColumnIndex(column);
final int nRows = getRowDimension();
final T[] out = buildArray(field, nRows);
@ -614,7 +640,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public void setColumn(final int column, final T[] array) {
public void setColumn(final int column, final T[] array)
throws OutOfRangeException {
checkColumnIndex(column);
final int nRows = getRowDimension();
if (array.length != nRows) {
@ -665,7 +692,7 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
public abstract int getColumnDimension();
/** {@inheritDoc} */
public T getTrace() {
public T getTrace() throws NonSquareMatrixException {
final int nRows = getRowDimension();
final int nCols = getColumnDimension();
if (nRows != nCols) {
@ -679,7 +706,7 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public T[] operate(final T[] v) {
public T[] operate(final T[] v) throws DimensionMismatchException {
final int nRows = getRowDimension();
final int nCols = getColumnDimension();
@ -700,7 +727,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public FieldVector<T> operate(final FieldVector<T> v) {
public FieldVector<T> operate(final FieldVector<T> v)
throws DimensionMismatchException {
try {
return new ArrayFieldVector<T>(field, operate(((ArrayFieldVector<T>) v).getDataRef()), false);
} catch (ClassCastException cce) {
@ -724,7 +752,7 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public T[] preMultiply(final T[] v) {
public T[] preMultiply(final T[] v) throws DimensionMismatchException {
final int nRows = getRowDimension();
final int nCols = getColumnDimension();
@ -745,7 +773,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
}
/** {@inheritDoc} */
public FieldVector<T> preMultiply(final FieldVector<T> v) {
public FieldVector<T> preMultiply(final FieldVector<T> v)
throws DimensionMismatchException {
try {
return new ArrayFieldVector<T>(field, preMultiply(((ArrayFieldVector<T>) v).getDataRef()), false);
} catch (ClassCastException cce) {
@ -859,7 +888,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
/** {@inheritDoc} */
public T walkInColumnOrder(final FieldMatrixChangingVisitor<T> visitor,
final int startRow, final int endRow,
final int startColumn, final int endColumn) {
final int startColumn, final int endColumn)
throws NumberIsTooSmallException, OutOfRangeException {
checkSubMatrixIndex(startRow, endRow, startColumn, endColumn);
visitor.start(getRowDimension(), getColumnDimension(),
startRow, endRow, startColumn, endColumn);
@ -876,7 +906,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
/** {@inheritDoc} */
public T walkInColumnOrder(final FieldMatrixPreservingVisitor<T> visitor,
final int startRow, final int endRow,
final int startColumn, final int endColumn) {
final int startColumn, final int endColumn)
throws NumberIsTooSmallException, OutOfRangeException{
checkSubMatrixIndex(startRow, endRow, startColumn, endColumn);
visitor.start(getRowDimension(), getColumnDimension(),
startRow, endRow, startColumn, endColumn);
@ -1001,7 +1032,7 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
* @param row Row index to check.
* @throws OutOfRangeException if {@code index} is not valid.
*/
protected void checkRowIndex(final int row) {
protected void checkRowIndex(final int row) throws OutOfRangeException {
if (row < 0 || row >= getRowDimension()) {
throw new OutOfRangeException(LocalizedFormats.ROW_INDEX,
row, 0, getRowDimension() - 1);
@ -1014,7 +1045,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
* @param column Column index to check.
* @throws OutOfRangeException if {@code index} is not valid.
*/
protected void checkColumnIndex(final int column) {
protected void checkColumnIndex(final int column)
throws OutOfRangeException {
if (column < 0 || column >= getColumnDimension()) {
throw new OutOfRangeException(LocalizedFormats.COLUMN_INDEX,
column, 0, getColumnDimension() - 1);
@ -1034,7 +1066,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
* {@code endColumn < startColumn}.
*/
protected void checkSubMatrixIndex(final int startRow, final int endRow,
final int startColumn, final int endColumn) {
final int startColumn, final int endColumn)
throws NumberIsTooSmallException, OutOfRangeException {
checkRowIndex(startRow);
checkRowIndex(endRow);
if (endRow < startRow) {
@ -1060,7 +1093,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
* @throws NoDataException if the arrays have zero length.
* @throws OutOfRangeException if row or column selections are not valid.
*/
protected void checkSubMatrixIndex(final int[] selectedRows, final int[] selectedColumns) {
protected void checkSubMatrixIndex(final int[] selectedRows, final int[] selectedColumns)
throws NoDataException, NullArgumentException, OutOfRangeException {
if (selectedRows == null ||
selectedColumns == null) {
throw new NullArgumentException();
@ -1085,7 +1119,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
* @throws MatrixDimensionMismatchException if the matrix is not
* addition-compatible with instance.
*/
protected void checkAdditionCompatible(final FieldMatrix<T> m) {
protected void checkAdditionCompatible(final FieldMatrix<T> m)
throws MatrixDimensionMismatchException {
if ((getRowDimension() != m.getRowDimension()) ||
(getColumnDimension() != m.getColumnDimension())) {
throw new MatrixDimensionMismatchException(m.getRowDimension(), m.getColumnDimension(),
@ -1100,7 +1135,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
* @throws MatrixDimensionMismatchException if the matrix is not
* subtraction-compatible with instance.
*/
protected void checkSubtractionCompatible(final FieldMatrix<T> m) {
protected void checkSubtractionCompatible(final FieldMatrix<T> m)
throws MatrixDimensionMismatchException {
if ((getRowDimension() != m.getRowDimension()) ||
(getColumnDimension() != m.getColumnDimension())) {
throw new MatrixDimensionMismatchException(m.getRowDimension(), m.getColumnDimension(),
@ -1115,7 +1151,8 @@ public abstract class AbstractFieldMatrix<T extends FieldElement<T>>
* @throws DimensionMismatchException if the matrix is not
* multiplication-compatible with instance.
*/
protected void checkMultiplicationCompatible(final FieldMatrix<T> m) {
protected void checkMultiplicationCompatible(final FieldMatrix<T> m)
throws DimensionMismatchException {
if (getColumnDimension() != m.getRowDimension()) {
throw new DimensionMismatchException(m.getRowDimension(), getColumnDimension());
}

View File

@ -118,9 +118,11 @@ public class ConjugateGradient
* @param delta the &delta; parameter for the default stopping criterion
* @param check {@code true} if positive definiteness of both matrix and
* preconditioner should be checked
* @throws NullArgumentException if {@code manager} is {@code null}
*/
public ConjugateGradient(final IterationManager manager,
final double delta, final boolean check) {
final double delta, final boolean check)
throws NullArgumentException {
super(manager);
this.delta = delta;
this.check = check;
@ -136,12 +138,20 @@ public class ConjugateGradient
return check;
}
/** {@inheritDoc} */
/**
* {@inheritDoc}
*
* @throws NonPositiveDefiniteOperatorException if {@code a} or {@code m} is
* not positive definite
*/
@Override
public RealVector solveInPlace(final RealLinearOperator a,
final RealLinearOperator m, final RealVector b, final RealVector x0)
throws NullArgumentException, NonSquareOperatorException,
DimensionMismatchException, MaxCountExceededException {
final RealLinearOperator m,
final RealVector b,
final RealVector x0)
throws NullArgumentException, NonPositiveDefiniteOperatorException,
NonSquareOperatorException, DimensionMismatchException,
MaxCountExceededException, NonPositiveDefiniteOperatorException {
checkParameters(a, m, b, x0);
final IterationManager manager = getIterationManager();
// Initialization of default stopping criterion

View File

@ -111,7 +111,8 @@ public class EigenDecomposition {
* @throws MathArithmeticException if the decomposition of a general matrix
* results in a matrix with zero norm
*/
public EigenDecomposition(final RealMatrix matrix) {
public EigenDecomposition(final RealMatrix matrix)
throws MathArithmeticException {
if (isSymmetric(matrix, false)) {
transformToTridiagonal(matrix);
findEigenVectors(transformer.getQ().getData());
@ -127,12 +128,15 @@ public class EigenDecomposition {
* @param matrix Matrix to decompose.
* @param splitTolerance Dummy parameter (present for backward
* compatibility only).
* @throws MathArithmeticException if the decomposition of a general matrix
* results in a matrix with zero norm
* @throws MaxCountExceededException if the algorithm fails to converge.
* @deprecated in 3.1 (to be removed in 4.0) due to unused parameter
*/
@Deprecated
public EigenDecomposition(final RealMatrix matrix,
final double splitTolerance) {
final double splitTolerance)
throws MathArithmeticException {
this(matrix);
}
@ -761,7 +765,8 @@ public class EigenDecomposition {
* @param schur the schur transformation of the matrix
* @throws MathArithmeticException if the Schur form has a norm of zero
*/
private void findEigenVectorsFromSchur(final SchurTransformer schur) {
private void findEigenVectorsFromSchur(final SchurTransformer schur)
throws MathArithmeticException {
final double[][] matrixT = schur.getT().getData();
final double[][] matrixP = schur.getP().getData();

View File

@ -20,6 +20,14 @@ package org.apache.commons.math3.linear;
import org.apache.commons.math3.Field;
import org.apache.commons.math3.FieldElement;
import org.apache.commons.math3.exception.DimensionMismatchException;
import org.apache.commons.math3.exception.NoDataException;
import org.apache.commons.math3.exception.NotPositiveException;
import org.apache.commons.math3.exception.NotStrictlyPositiveException;
import org.apache.commons.math3.exception.NullArgumentException;
import org.apache.commons.math3.exception.NumberIsTooSmallException;
import org.apache.commons.math3.exception.OutOfRangeException;
import org.apache.commons.math3.exception.ZeroException;
/**
* Interface defining field-valued matrix with basic algebraic operations.
@ -45,11 +53,12 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param rowDimension the number of rows in the new matrix
* @param columnDimension the number of columns in the new matrix
* @return a new matrix of the same type as the instance
* @throws org.apache.commons.math3.exception.NotStrictlyPositiveException
* if row or column dimension is not positive.
* @throws NotStrictlyPositiveException if row or column dimension is not
* positive.
* @since 2.0
*/
FieldMatrix<T> createMatrix(final int rowDimension, final int columnDimension);
FieldMatrix<T> createMatrix(final int rowDimension, final int columnDimension)
throws NotStrictlyPositiveException;
/**
* Make a (deep) copy of this.
@ -63,20 +72,20 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
*
* @param m Matrix to be added.
* @return {@code this} + {@code m}.
* @throws MatrixDimensionMismatchException
* if {@code m} is not the same size as this matrix.
* @throws MatrixDimensionMismatchException if {@code m} is not the same
* size as {@code this} matrix.
*/
FieldMatrix<T> add(FieldMatrix<T> m);
FieldMatrix<T> add(FieldMatrix<T> m) throws MatrixDimensionMismatchException;
/**
* Subtract {@code m} from this matrix.
*
* @param m Matrix to be subtracted.
* @return {@code this} - {@code m}.
* @throws MatrixDimensionMismatchException
* if {@code m} is not the same size as this matrix.
* @throws MatrixDimensionMismatchException if {@code m} is not the same
* size as {@code this} matrix.
*/
FieldMatrix<T> subtract(FieldMatrix<T> m);
FieldMatrix<T> subtract(FieldMatrix<T> m) throws MatrixDimensionMismatchException;
/**
* Increment each entry of this matrix.
@ -99,32 +108,34 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
*
* @param m Matrix to postmultiply by.
* @return {@code this} * {@code m}.
* @throws IllegalArgumentException
* if columnDimension(this) != rowDimension(m)
* @throws DimensionMismatchException if the number of columns of
* {@code this} matrix is not equal to the number of rows of matrix
* {@code m}.
*/
FieldMatrix<T> multiply(FieldMatrix<T> m);
FieldMatrix<T> multiply(FieldMatrix<T> m) throws DimensionMismatchException;
/**
* Premultiply this matrix by {@code m}.
*
* @param m Matrix to premultiply by.
* @return {@code m} * {@code this}.
* @throws org.apache.commons.math3.exception.DimensionMismatchException
* if the number of columns of {@code m} differ from the number of rows
* of this matrix.
* @throws DimensionMismatchException if the number of columns of {@code m}
* differs from the number of rows of {@code this} matrix.
*/
FieldMatrix<T> preMultiply(FieldMatrix<T> m);
FieldMatrix<T> preMultiply(FieldMatrix<T> m) throws DimensionMismatchException;
/**
* Returns the result multiplying this with itself <code>p</code> times.
* Depending on the type of the field elements, T,
* instability for high powers might occur.
* @param p raise this to power p
* @return this^p
* @throws IllegalArgumentException if p < 0
* NonSquareMatrixException if the matrix is not square
* Depending on the type of the field elements, T, instability for high
* powers might occur.
*
* @param p raise this to power p
* @return this^p
* @throws NotPositiveException if {@code p < 0}
* @throws NonSquareMatrixException if {@code this matrix} is not square
*/
FieldMatrix<T> power(final int p);
FieldMatrix<T> power(final int p) throws NonSquareMatrixException,
NotPositiveException;
/**
* Returns matrix entries as a two-dimensional array.
@ -141,12 +152,13 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param endRow Final row index (inclusive)
* @param startColumn Initial column index
* @param endColumn Final column index (inclusive)
* @return the matrix containing the data of the
* specified rows and columns.
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the indices are not valid.
* @return the matrix containing the data of the specified rows and columns.
* @throws NumberIsTooSmallException is {@code endRow < startRow} of
* {@code endColumn < startColumn}.
* @throws OutOfRangeException if the indices are not valid.
*/
FieldMatrix<T> getSubMatrix(int startRow, int endRow, int startColumn, int endColumn);
FieldMatrix<T> getSubMatrix(int startRow, int endRow, int startColumn, int endColumn)
throws NumberIsTooSmallException, OutOfRangeException;
/**
* Get a submatrix. Rows and columns are indicated
@ -156,10 +168,14 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param selectedColumns Array of column indices.
* @return the matrix containing the data in the
* specified rows and columns.
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if row or column selections are not valid.
* @throws NoDataException if {@code selectedRows} or
* {@code selectedColumns} is empty
* @throws NullArgumentException if {@code selectedRows} or
* {@code selectedColumns} is {@code null}.
* @throws OutOfRangeException if row or column selections are not valid.
*/
FieldMatrix<T> getSubMatrix(int[] selectedRows, int[] selectedColumns);
FieldMatrix<T> getSubMatrix(int[] selectedRows, int[] selectedColumns)
throws NoDataException, NullArgumentException, OutOfRangeException;
/**
* Copy a submatrix. Rows and columns are indicated
@ -171,12 +187,17 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param endColumn Final column index (inclusive).
* @param destination The arrays where the submatrix data should be copied
* (if larger than rows/columns counts, only the upper-left part will be used).
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the indices are not valid.
* @throws MatrixDimensionMismatchException if the dimensions of
* {@code destination} do not match those of {@code this}.
* @throws NumberIsTooSmallException is {@code endRow < startRow} of
* {@code endColumn < startColumn}.
* @throws OutOfRangeException if the indices are not valid.
* @exception IllegalArgumentException if the destination array is too small.
*/
void copySubMatrix(int startRow, int endRow, int startColumn, int endColumn,
T[][] destination);
void copySubMatrix(int startRow, int endRow, int startColumn, int endColumn,
T[][] destination)
throws MatrixDimensionMismatchException, NumberIsTooSmallException,
OutOfRangeException;
/**
* Copy a submatrix. Rows and columns are indicated
@ -186,11 +207,17 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param selectedColumns Array of column indices.
* @param destination Arrays where the submatrix data should be copied
* (if larger than rows/columns counts, only the upper-left part will be used)
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the indices are not valid.
* @exception IllegalArgumentException if the destination array is too small
* @throws MatrixDimensionMismatchException if the dimensions of
* {@code destination} do not match those of {@code this}.
* @throws NoDataException if {@code selectedRows} or
* {@code selectedColumns} is empty
* @throws NullArgumentException if {@code selectedRows} or
* {@code selectedColumns} is {@code null}.
* @throws OutOfRangeException if the indices are not valid.
*/
void copySubMatrix(int[] selectedRows, int[] selectedColumns, T[][] destination);
void copySubMatrix(int[] selectedRows, int[] selectedColumns, T[][] destination)
throws MatrixDimensionMismatchException, NoDataException, NullArgumentException,
OutOfRangeException;
/**
* Replace the submatrix starting at {@code (row, column)} using data in
@ -224,7 +251,9 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* if {@code subMatrix} is {@code null}.
* @since 2.0
*/
void setSubMatrix(T[][] subMatrix, int row, int column);
void setSubMatrix(T[][] subMatrix, int row, int column)
throws DimensionMismatchException, MatrixDimensionMismatchException,
NullArgumentException, ZeroException;
/**
* Get the entries in row number {@code row}
@ -232,10 +261,9 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
*
* @param row Row to be fetched.
* @return a row matrix.
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the specified row index is invalid.
* @throws OutOfRangeException if the specified row index is invalid.
*/
FieldMatrix<T> getRowMatrix(int row);
FieldMatrix<T> getRowMatrix(int row) throws OutOfRangeException;
/**
* Set the entries in row number {@code row}
@ -244,12 +272,12 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param row Row to be set.
* @param matrix Row matrix (must have one row and the same number
* of columns as the instance).
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the specified row index is invalid.
* @throws OutOfRangeException if the specified row index is invalid.
* @throws MatrixDimensionMismatchException
* if the matrix dimensions do not match one instance row.
*/
void setRowMatrix(int row, FieldMatrix<T> matrix);
void setRowMatrix(int row, FieldMatrix<T> matrix)
throws MatrixDimensionMismatchException, OutOfRangeException;
/**
* Get the entries in column number {@code column}
@ -257,10 +285,9 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
*
* @param column Column to be fetched.
* @return a column matrix.
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the specified column index is invalid.
* @throws OutOfRangeException if the specified column index is invalid.
*/
FieldMatrix<T> getColumnMatrix(int column);
FieldMatrix<T> getColumnMatrix(int column) throws OutOfRangeException;
/**
* Set the entries in column number {@code column}
@ -269,12 +296,12 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param column Column to be set.
* @param matrix column matrix (must have one column and the same
* number of rows as the instance).
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the specified column index is invalid.
* @throws MatrixDimensionMismatchException
* if the matrix dimensions do not match one instance column.
* @throws OutOfRangeException if the specified column index is invalid.
* @throws MatrixDimensionMismatchException if the matrix dimensions do
* not match one instance column.
*/
void setColumnMatrix(int column, FieldMatrix<T> matrix);
void setColumnMatrix(int column, FieldMatrix<T> matrix)
throws MatrixDimensionMismatchException, OutOfRangeException;
/**
* Get the entries in row number {@code row}
@ -282,10 +309,9 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
*
* @param row Row to be fetched
* @return a row vector.
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the specified row index is invalid.
* @throws OutOfRangeException if the specified row index is invalid.
*/
FieldVector<T> getRowVector(int row);
FieldVector<T> getRowVector(int row) throws OutOfRangeException;
/**
* Set the entries in row number {@code row}
@ -294,12 +320,12 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param row Row to be set.
* @param vector row vector (must have the same number of columns
* as the instance).
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the specified row index is invalid.
* @throws MatrixDimensionMismatchException
* if the vector dimension does not match one instance row.
* @throws OutOfRangeException if the specified row index is invalid.
* @throws MatrixDimensionMismatchException if the vector dimension does not
* match one instance row.
*/
void setRowVector(int row, FieldVector<T> vector);
void setRowVector(int row, FieldVector<T> vector)
throws MatrixDimensionMismatchException, OutOfRangeException;
/**
* Returns the entries in column number {@code column}
@ -307,10 +333,9 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
*
* @param column Column to be fetched.
* @return a column vector.
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the specified column index is invalid.
* @throws OutOfRangeException if the specified column index is invalid.
*/
FieldVector<T> getColumnVector(int column);
FieldVector<T> getColumnVector(int column) throws OutOfRangeException;
/**
* Set the entries in column number {@code column}
@ -319,22 +344,21 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param column Column to be set.
* @param vector Column vector (must have the same number of rows
* as the instance).
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the specified column index is invalid.
* @throws MatrixDimensionMismatchException
* if the vector dimension does not match one instance column.
* @throws OutOfRangeException if the specified column index is invalid.
* @throws MatrixDimensionMismatchException if the vector dimension does not
* match one instance column.
*/
void setColumnVector(int column, FieldVector<T> vector);
void setColumnVector(int column, FieldVector<T> vector)
throws MatrixDimensionMismatchException, OutOfRangeException;
/**
* Get the entries in row number {@code row} as an array.
*
* @param row Row to be fetched.
* @return array of entries in the row.
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the specified row index is not valid.
* @throws OutOfRangeException if the specified row index is not valid.
*/
T[] getRow(int row);
T[] getRow(int row) throws OutOfRangeException;
/**
* Set the entries in row number {@code row}
@ -343,22 +367,21 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param row Row to be set.
* @param array Row matrix (must have the same number of columns as
* the instance).
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the specified row index is invalid.
* @throws MatrixDimensionMismatchException
* if the array size does not match one instance row.
* @throws OutOfRangeException if the specified row index is invalid.
* @throws MatrixDimensionMismatchException if the array size does not match
* one instance row.
*/
void setRow(int row, T[] array);
void setRow(int row, T[] array) throws MatrixDimensionMismatchException,
OutOfRangeException;
/**
* Get the entries in column number {@code col} as an array.
*
* @param column the column to be fetched
* @return array of entries in the column
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the specified column index is not valid.
* @throws OutOfRangeException if the specified column index is not valid.
*/
T[] getColumn(int column);
T[] getColumn(int column) throws OutOfRangeException;
/**
* Set the entries in column number {@code column}
@ -366,12 +389,12 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
*
* @param column the column to be set
* @param array column array (must have the same number of rows as the instance)
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the specified column index is invalid.
* @throws MatrixDimensionMismatchException
* if the array size does not match one instance column.
* @throws OutOfRangeException if the specified column index is invalid.
* @throws MatrixDimensionMismatchException if the array size does not match
* one instance column.
*/
void setColumn(int column, T[] array);
void setColumn(int column, T[] array) throws MatrixDimensionMismatchException,
OutOfRangeException;
/**
* Returns the entry in the specified row and column.
@ -379,10 +402,9 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param row row location of entry to be fetched
* @param column column location of entry to be fetched
* @return matrix entry in row,column
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the row or column index is not valid.
* @throws OutOfRangeException if the row or column index is not valid.
*/
T getEntry(int row, int column);
T getEntry(int row, int column) throws OutOfRangeException;
/**
* Set the entry in the specified row and column.
@ -390,11 +412,10 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param row row location of entry to be set
* @param column column location of entry to be set
* @param value matrix entry to be set in row,column
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the row or column index is not valid.
* @throws OutOfRangeException if the row or column index is not valid.
* @since 2.0
*/
void setEntry(int row, int column, T value);
void setEntry(int row, int column, T value) throws OutOfRangeException;
/**
* Change an entry in the specified row and column.
@ -403,11 +424,10 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param column Column location of entry to be set.
* @param increment Value to add to the current matrix entry in
* {@code (row, column)}.
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the row or column index is not valid.
* @throws OutOfRangeException if the row or column index is not valid.
* @since 2.0
*/
void addToEntry(int row, int column, T increment);
void addToEntry(int row, int column, T increment) throws OutOfRangeException;
/**
* Change an entry in the specified row and column.
@ -416,11 +436,10 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param column Column location of entry to be set.
* @param factor Multiplication factor for the current matrix entry
* in {@code (row,column)}
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the row or column index is not valid.
* @throws OutOfRangeException if the row or column index is not valid.
* @since 2.0
*/
void multiplyEntry(int row, int column, T factor);
void multiplyEntry(int row, int column, T factor) throws OutOfRangeException;
/**
* Returns the transpose of this matrix.
@ -434,46 +453,51 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* trace</a> of the matrix (the sum of the elements on the main diagonal).
*
* @return trace
* @throws NonSquareMatrixException
* if the matrix is not square.
* @throws NonSquareMatrixException if the matrix is not square.
*/
T getTrace();
T getTrace() throws NonSquareMatrixException;
/**
* Returns the result of multiplying this by the vector <code>v</code>.
* Returns the result of multiplying this by the vector {@code v}.
*
* @param v the vector to operate on
* @return this*v
* @throws IllegalArgumentException if columnDimension != v.size()
* @return {@code this * v}
* @throws DimensionMismatchException if the number of columns of
* {@code this} matrix is not equal to the size of the vector {@code v}.
*/
T[] operate(T[] v);
T[] operate(T[] v) throws DimensionMismatchException;
/**
* Returns the result of multiplying this by the vector <code>v</code>.
* Returns the result of multiplying this by the vector {@code v}.
*
* @param v the vector to operate on
* @return this*v
* @throws IllegalArgumentException if columnDimension != v.size()
* @return {@code this * v}
* @throws DimensionMismatchException if the number of columns of
* {@code this} matrix is not equal to the size of the vector {@code v}.
*/
FieldVector<T> operate(FieldVector<T> v);
FieldVector<T> operate(FieldVector<T> v) throws DimensionMismatchException;
/**
* Returns the (row) vector result of premultiplying this by the vector <code>v</code>.
* Returns the (row) vector result of premultiplying this by the vector
* {@code v}.
*
* @param v the row vector to premultiply by
* @return v*this
* @throws IllegalArgumentException if rowDimension != v.size()
* @return {@code v * this}
* @throws DimensionMismatchException if the number of rows of {@code this}
* matrix is not equal to the size of the vector {@code v}
*/
T[] preMultiply(T[] v);
T[] preMultiply(T[] v) throws DimensionMismatchException;
/**
* Returns the (row) vector result of premultiplying this by the vector <code>v</code>.
* Returns the (row) vector result of premultiplying this by the vector
* {@code v}.
*
* @param v the row vector to premultiply by
* @return v*this
* @throws IllegalArgumentException if rowDimension != v.size()
* @return {@code v * this}
* @throws DimensionMismatchException if the number of rows of {@code this}
* matrix is not equal to the size of the vector {@code v}
*/
FieldVector<T> preMultiply(FieldVector<T> v);
FieldVector<T> preMultiply(FieldVector<T> v) throws DimensionMismatchException;
/**
* Visit (and possibly change) all matrix entries in row order.
@ -529,8 +553,7 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param endRow Final row index (inclusive)
* @param startColumn Initial column index
* @param endColumn Final column index
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the indices are not valid.
* @throws OutOfRangeException if the indices are not valid.
* @see #walkInRowOrder(FieldMatrixChangingVisitor)
* @see #walkInRowOrder(FieldMatrixPreservingVisitor)
* @see #walkInRowOrder(FieldMatrixPreservingVisitor, int, int, int, int)
@ -546,7 +569,8 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* of the walk
*/
T walkInRowOrder(FieldMatrixChangingVisitor<T> visitor,
int startRow, int endRow, int startColumn, int endColumn);
int startRow, int endRow, int startColumn, int endColumn)
throws OutOfRangeException;
/**
* Visit (but don't change) some matrix entries in row order.
@ -558,8 +582,7 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param endRow Final row index (inclusive)
* @param startColumn Initial column index
* @param endColumn Final column index
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the indices are not valid.
* @throws OutOfRangeException if the indices are not valid.
* @see #walkInRowOrder(FieldMatrixChangingVisitor)
* @see #walkInRowOrder(FieldMatrixPreservingVisitor)
* @see #walkInRowOrder(FieldMatrixChangingVisitor, int, int, int, int)
@ -575,7 +598,8 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* of the walk
*/
T walkInRowOrder(FieldMatrixPreservingVisitor<T> visitor,
int startRow, int endRow, int startColumn, int endColumn);
int startRow, int endRow, int startColumn, int endColumn)
throws OutOfRangeException;
/**
* Visit (and possibly change) all matrix entries in column order.
@ -631,8 +655,9 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param endRow Final row index (inclusive)
* @param startColumn Initial column index
* @param endColumn Final column index
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the indices are not valid.
* @throws NumberIsTooSmallException if {@code endRow < startRow} or
* {@code endColumn < startColumn}.
* @throws OutOfRangeException if the indices are not valid.
* @see #walkInRowOrder(FieldMatrixChangingVisitor)
* @see #walkInRowOrder(FieldMatrixPreservingVisitor)
* @see #walkInRowOrder(FieldMatrixChangingVisitor, int, int, int, int)
@ -648,7 +673,8 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* of the walk
*/
T walkInColumnOrder(FieldMatrixChangingVisitor<T> visitor,
int startRow, int endRow, int startColumn, int endColumn);
int startRow, int endRow, int startColumn, int endColumn)
throws NumberIsTooSmallException, OutOfRangeException;
/**
* Visit (but don't change) some matrix entries in column order.
@ -660,8 +686,9 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param endRow Final row index (inclusive)
* @param startColumn Initial column index
* @param endColumn Final column index
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the indices are not valid.
* @throws NumberIsTooSmallException if {@code endRow < startRow} or
* {@code endColumn < startColumn}.
* @throws OutOfRangeException if the indices are not valid.
* @see #walkInRowOrder(FieldMatrixChangingVisitor)
* @see #walkInRowOrder(FieldMatrixPreservingVisitor)
* @see #walkInRowOrder(FieldMatrixChangingVisitor, int, int, int, int)
@ -677,7 +704,8 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* of the walk
*/
T walkInColumnOrder(FieldMatrixPreservingVisitor<T> visitor,
int startRow, int endRow, int startColumn, int endColumn);
int startRow, int endRow, int startColumn, int endColumn)
throws NumberIsTooSmallException, OutOfRangeException;
/**
* Visit (and possibly change) all matrix entries using the fastest possible order.
@ -730,8 +758,9 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param endRow Final row index (inclusive)
* @param startColumn Initial column index
* @param endColumn Final column index (inclusive)
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the indices are not valid.
* @throws NumberIsTooSmallException if {@code endRow < startRow} or
* {@code endColumn < startColumn}.
* @throws OutOfRangeException if the indices are not valid.
* @see #walkInRowOrder(FieldMatrixChangingVisitor)
* @see #walkInRowOrder(FieldMatrixPreservingVisitor)
* @see #walkInRowOrder(FieldMatrixChangingVisitor, int, int, int, int)
@ -747,7 +776,8 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* of the walk
*/
T walkInOptimizedOrder(FieldMatrixChangingVisitor<T> visitor,
int startRow, int endRow, int startColumn, int endColumn);
int startRow, int endRow, int startColumn, int endColumn)
throws NumberIsTooSmallException, OutOfRangeException;
/**
* Visit (but don't change) some matrix entries using the fastest possible order.
@ -758,8 +788,9 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* @param endRow Final row index (inclusive)
* @param startColumn Initial column index
* @param endColumn Final column index (inclusive)
* @throws org.apache.commons.math3.exception.OutOfRangeException
* if the indices are not valid.
* @throws NumberIsTooSmallException if {@code endRow < startRow} or
* {@code endColumn < startColumn}.
* @throws OutOfRangeException if the indices are not valid.
* @see #walkInRowOrder(FieldMatrixChangingVisitor)
* @see #walkInRowOrder(FieldMatrixPreservingVisitor)
* @see #walkInRowOrder(FieldMatrixChangingVisitor, int, int, int, int)
@ -775,5 +806,6 @@ public interface FieldMatrix<T extends FieldElement<T>> extends AnyMatrix {
* of the walk
*/
T walkInOptimizedOrder(FieldMatrixPreservingVisitor<T> visitor,
int startRow, int endRow, int startColumn, int endColumn);
int startRow, int endRow, int startColumn, int endColumn)
throws NumberIsTooSmallException, OutOfRangeException;
}

View File

@ -26,7 +26,6 @@ import java.util.Arrays;
import org.apache.commons.math3.Field;
import org.apache.commons.math3.FieldElement;
import org.apache.commons.math3.exception.MathArithmeticException;
import org.apache.commons.math3.exception.MathIllegalArgumentException;
import org.apache.commons.math3.exception.OutOfRangeException;
import org.apache.commons.math3.exception.NoDataException;
import org.apache.commons.math3.exception.NumberIsTooSmallException;
@ -122,9 +121,12 @@ public class MatrixUtils {
* @throws NoDataException if a row or column is empty.
* @throws NullArgumentException if either {@code data} or {@code data[0]}
* is {@code null}.
* @throws DimensionMismatchException if {@code data} is not rectangular.
* @see #createRealMatrix(int, int)
*/
public static RealMatrix createRealMatrix(double[][] data) {
public static RealMatrix createRealMatrix(double[][] data)
throws NullArgumentException, DimensionMismatchException,
NoDataException {
if (data == null ||
data[0] == null) {
throw new NullArgumentException();
@ -152,7 +154,8 @@ public class MatrixUtils {
* @see #createFieldMatrix(Field, int, int)
* @since 2.0
*/
public static <T extends FieldElement<T>> FieldMatrix<T> createFieldMatrix(T[][] data) {
public static <T extends FieldElement<T>> FieldMatrix<T> createFieldMatrix(T[][] data)
throws DimensionMismatchException, NoDataException, NullArgumentException {
if (data == null ||
data[0] == null) {
throw new NullArgumentException();
@ -244,7 +247,8 @@ public class MatrixUtils {
* @throws NoDataException if {@code data} is empty.
* @throws NullArgumentException if {@code data} is {@code null}.
*/
public static RealVector createRealVector(double[] data) {
public static RealVector createRealVector(double[] data)
throws NoDataException, NullArgumentException {
if (data == null) {
throw new NullArgumentException();
}
@ -261,7 +265,8 @@ public class MatrixUtils {
* @throws NullArgumentException if {@code data} is {@code null}.
* @throws ZeroException if {@code data} has 0 elements
*/
public static <T extends FieldElement<T>> FieldVector<T> createFieldVector(final T[] data) {
public static <T extends FieldElement<T>> FieldVector<T> createFieldVector(final T[] data)
throws NoDataException, NullArgumentException, ZeroException {
if (data == null) {
throw new NullArgumentException();
}
@ -280,7 +285,8 @@ public class MatrixUtils {
* @throws NoDataException if {@code rowData} is empty.
* @throws NullArgumentException if {@code rowData} is {@code null}.
*/
public static RealMatrix createRowRealMatrix(double[] rowData) {
public static RealMatrix createRowRealMatrix(double[] rowData)
throws NoDataException, NullArgumentException {
if (rowData == null) {
throw new NullArgumentException();
}
@ -303,7 +309,8 @@ public class MatrixUtils {
* @throws NullArgumentException if {@code rowData} is {@code null}.
*/
public static <T extends FieldElement<T>> FieldMatrix<T>
createRowFieldMatrix(final T[] rowData) {
createRowFieldMatrix(final T[] rowData)
throws NoDataException, NullArgumentException {
if (rowData == null) {
throw new NullArgumentException();
}
@ -327,7 +334,8 @@ public class MatrixUtils {
* @throws NoDataException if {@code columnData} is empty.
* @throws NullArgumentException if {@code columnData} is {@code null}.
*/
public static RealMatrix createColumnRealMatrix(double[] columnData) {
public static RealMatrix createColumnRealMatrix(double[] columnData)
throws NoDataException, NullArgumentException {
if (columnData == null) {
throw new NullArgumentException();
}
@ -350,7 +358,8 @@ public class MatrixUtils {
* @throws NullArgumentException if {@code columnData} is {@code null}.
*/
public static <T extends FieldElement<T>> FieldMatrix<T>
createColumnFieldMatrix(final T[] columnData) {
createColumnFieldMatrix(final T[] columnData)
throws NoDataException, NullArgumentException {
if (columnData == null) {
throw new NullArgumentException();
}
@ -375,7 +384,8 @@ public class MatrixUtils {
* a valid index.
*/
public static void checkMatrixIndex(final AnyMatrix m,
final int row, final int column) {
final int row, final int column)
throws OutOfRangeException {
checkRowIndex(m, row);
checkColumnIndex(m, column);
}
@ -387,7 +397,8 @@ public class MatrixUtils {
* @param row Row index to check.
* @throws OutOfRangeException if {@code row} is not a valid index.
*/
public static void checkRowIndex(final AnyMatrix m, final int row) {
public static void checkRowIndex(final AnyMatrix m, final int row)
throws OutOfRangeException {
if (row < 0 ||
row >= m.getRowDimension()) {
throw new OutOfRangeException(LocalizedFormats.ROW_INDEX,
@ -402,7 +413,8 @@ public class MatrixUtils {
* @param column Column index to check.
* @throws OutOfRangeException if {@code column} is not a valid index.
*/
public static void checkColumnIndex(final AnyMatrix m, final int column) {
public static void checkColumnIndex(final AnyMatrix m, final int column)
throws OutOfRangeException {
if (column < 0 || column >= m.getColumnDimension()) {
throw new OutOfRangeException(LocalizedFormats.COLUMN_INDEX,
column, 0, m.getColumnDimension() - 1);
@ -424,7 +436,8 @@ public class MatrixUtils {
*/
public static void checkSubMatrixIndex(final AnyMatrix m,
final int startRow, final int endRow,
final int startColumn, final int endColumn) {
final int startColumn, final int endColumn)
throws NumberIsTooSmallException, OutOfRangeException {
checkRowIndex(m, startRow);
checkRowIndex(m, endRow);
if (endRow < startRow) {
@ -457,7 +470,8 @@ public class MatrixUtils {
*/
public static void checkSubMatrixIndex(final AnyMatrix m,
final int[] selectedRows,
final int[] selectedColumns) {
final int[] selectedColumns)
throws NoDataException, NullArgumentException, OutOfRangeException {
if (selectedRows == null) {
throw new NullArgumentException();
}
@ -484,9 +498,11 @@ public class MatrixUtils {
*
* @param left Left hand side matrix.
* @param right Right hand side matrix.
* @throws MatrixDimensionMismatchException if the matrices are not addition compatible.
* @throws MatrixDimensionMismatchException if the matrices are not addition
* compatible.
*/
public static void checkAdditionCompatible(final AnyMatrix left, final AnyMatrix right) {
public static void checkAdditionCompatible(final AnyMatrix left, final AnyMatrix right)
throws MatrixDimensionMismatchException {
if ((left.getRowDimension() != right.getRowDimension()) ||
(left.getColumnDimension() != right.getColumnDimension())) {
throw new MatrixDimensionMismatchException(left.getRowDimension(), left.getColumnDimension(),
@ -499,9 +515,11 @@ public class MatrixUtils {
*
* @param left Left hand side matrix.
* @param right Right hand side matrix.
* @throws MatrixDimensionMismatchException if the matrices are not addition compatible.
* @throws MatrixDimensionMismatchException if the matrices are not addition
* compatible.
*/
public static void checkSubtractionCompatible(final AnyMatrix left, final AnyMatrix right) {
public static void checkSubtractionCompatible(final AnyMatrix left, final AnyMatrix right)
throws MatrixDimensionMismatchException {
if ((left.getRowDimension() != right.getRowDimension()) ||
(left.getColumnDimension() != right.getColumnDimension())) {
throw new MatrixDimensionMismatchException(left.getRowDimension(), left.getColumnDimension(),
@ -514,9 +532,12 @@ public class MatrixUtils {
*
* @param left Left hand side matrix.
* @param right Right hand side matrix.
* @throws DimensionMismatchException if matrices are not multiplication compatible.
* @throws DimensionMismatchException if matrices are not multiplication
* compatible.
*/
public static void checkMultiplicationCompatible(final AnyMatrix left, final AnyMatrix right) {
public static void checkMultiplicationCompatible(final AnyMatrix left, final AnyMatrix right)
throws DimensionMismatchException {
if (left.getColumnDimension() != right.getRowDimension()) {
throw new DimensionMismatchException(left.getColumnDimension(),
right.getRowDimension());
@ -832,19 +853,23 @@ public class MatrixUtils {
* </p>
* @param rm RealMatrix which is lower triangular
* @param b RealVector this is overwritten
* @exception IllegalArgumentException if the matrix and vector are not conformable
* @exception ArithmeticException there is a zero or near zero on the diagonal of rm
* @throws DimensionMismatchException if the matrix and vector are not
* conformable
* @throws NonSquareMatrixException if the matrix {@code rm} is not square
* @throws MathArithmeticException if the absolute value of one of the diagonal
* coefficient of {@code rm} is lower than {@link Precision#SAFE_MIN}
*/
public static void solveLowerTriangularSystem( RealMatrix rm, RealVector b){
public static void solveLowerTriangularSystem(RealMatrix rm, RealVector b)
throws DimensionMismatchException, MathArithmeticException,
NonSquareMatrixException {
if ((rm == null) || (b == null) || ( rm.getRowDimension() != b.getDimension())) {
throw new MathIllegalArgumentException(LocalizedFormats.DIMENSIONS_MISMATCH_SIMPLE,
throw new DimensionMismatchException(
(rm == null) ? 0 : rm.getRowDimension(),
(b == null) ? 0 : b.getDimension());
}
if( rm.getColumnDimension() != rm.getRowDimension() ){
throw new MathIllegalArgumentException(LocalizedFormats.DIMENSIONS_MISMATCH_2x2,
rm.getRowDimension(),rm.getRowDimension(),
rm.getRowDimension(),rm.getColumnDimension());
throw new NonSquareMatrixException(rm.getRowDimension(),
rm.getColumnDimension());
}
int rows = rm.getRowDimension();
for( int i = 0 ; i < rows ; i++ ){
@ -872,19 +897,24 @@ public class MatrixUtils {
* </p>
* @param rm RealMatrix which is upper triangular
* @param b RealVector this is overwritten
* @exception IllegalArgumentException if the matrix and vector are not conformable
* @exception ArithmeticException there is a zero or near zero on the diagonal of rm
* @throws DimensionMismatchException if the matrix and vector are not
* conformable
* @throws NonSquareMatrixException if the matrix {@code rm} is not
* square
* @throws MathArithmeticException if the absolute value of one of the diagonal
* coefficient of {@code rm} is lower than {@link Precision#SAFE_MIN}
*/
public static void solveUpperTriangularSystem( RealMatrix rm, RealVector b){
public static void solveUpperTriangularSystem(RealMatrix rm, RealVector b)
throws DimensionMismatchException, MathArithmeticException,
NonSquareMatrixException {
if ((rm == null) || (b == null) || ( rm.getRowDimension() != b.getDimension())) {
throw new MathIllegalArgumentException(LocalizedFormats.DIMENSIONS_MISMATCH_SIMPLE,
throw new DimensionMismatchException(
(rm == null) ? 0 : rm.getRowDimension(),
(b == null) ? 0 : b.getDimension());
}
if( rm.getColumnDimension() != rm.getRowDimension() ){
throw new MathIllegalArgumentException(LocalizedFormats.DIMENSIONS_MISMATCH_2x2,
rm.getRowDimension(),rm.getRowDimension(),
rm.getRowDimension(),rm.getColumnDimension());
throw new NonSquareMatrixException(rm.getRowDimension(),
rm.getColumnDimension());
}
int rows = rm.getRowDimension();
for( int i = rows-1 ; i >-1 ; i-- ){

View File

@ -640,7 +640,7 @@ public class OpenMapRealVector extends SparseRealVector
/** {@inheritDoc} */
@Override
public OpenMapRealVector unitVector() {
public OpenMapRealVector unitVector() throws MathArithmeticException {
OpenMapRealVector res = copy();
res.unitize();
return res;
@ -648,7 +648,7 @@ public class OpenMapRealVector extends SparseRealVector
/** {@inheritDoc} */
@Override
public void unitize() {
public void unitize() throws MathArithmeticException {
double norm = getNorm();
if (isDefaultValue(norm)) {
throw new MathArithmeticException(LocalizedFormats.ZERO_NORM);

View File

@ -321,7 +321,7 @@ public abstract class RealVector {
* @throws DimensionMismatchException if the dimensions of {@code this} and
* {@code v} do not match
*/
public double cosine(RealVector v) {
public double cosine(RealVector v) throws MathArithmeticException {
final double norm = getNorm();
final double vNorm = v.getNorm();
@ -664,11 +664,11 @@ public abstract class RealVector {
* @param v vector onto which instance must be projected.
* @return projection of the instance onto {@code v}.
* @throws MathArithmeticException if {@code this} or {@code v} is the null
* vector
* @throws org.apache.commons.math3.exception.DimensionMismatchException
* if {@code v} is not the same size as this vector.
* vector
* @throws DimensionMismatchException if {@code v} is not the same size as
* this vector.
*/
public RealVector projection(final RealVector v) {
public RealVector projection(final RealVector v) throws MathArithmeticException {
final double norm2 = v.dotProduct(v);
if (norm2 == 0.0) {
throw new MathArithmeticException(LocalizedFormats.ZERO_NORM);
@ -710,9 +710,9 @@ public abstract class RealVector {
* The instance is not changed by this method.
*
* @return a unit vector pointing in direction of this vector.
* @throws ArithmeticException if the norm is {@code null}.
* @throws MathArithmeticException if the norm is zero.
*/
public RealVector unitVector() {
public RealVector unitVector() throws MathArithmeticException {
final double norm = getNorm();
if (norm == 0) {
throw new MathArithmeticException(LocalizedFormats.ZERO_NORM);
@ -724,10 +724,9 @@ public abstract class RealVector {
* Converts this vector into a unit vector.
* The instance itself is changed by this method.
*
* @throws org.apache.commons.math3.exception.MathArithmeticException
* if the norm is zero.
* @throws MathArithmeticException if the norm is zero.
*/
public void unitize() {
public void unitize() throws MathArithmeticException {
final double norm = getNorm();
if (norm == 0) {
throw new MathArithmeticException(LocalizedFormats.ZERO_NORM);
@ -1351,7 +1350,7 @@ public abstract class RealVector {
/** {@inheritDoc} */
@Override
public double cosine(RealVector w) {
public double cosine(RealVector w) throws MathArithmeticException {
return v.cosine(w);
}
@ -1393,7 +1392,7 @@ public abstract class RealVector {
/** {@inheritDoc} */
@Override
public RealVector unitVector() {
public RealVector unitVector() throws MathArithmeticException {
return v.unitVector();
}