Package com.mvohm.quadmatrix
Class DoubleMatrix
java.lang.Object
com.mvohm.quadmatrix.Matrix
com.mvohm.quadmatrix.DoubleMatrix
An implementation of the abstract class
Matrix
that uses an array of primitive
double
values to store the matrix elements and standard double
arithmetic
to perform calculations.
- Author:
- M.Vokhmentsev
-
Constructor Summary
ConstructorsConstructorDescriptionDoubleMatrix
(double[][] source) Creates a newDoubleMatrix
with a copy of the data of the givensource
array and the default value of theneedToScale
flag.DoubleMatrix
(double[][] source, boolean needToScale) Creates a newDoubleMatrix
with a copy of the data of the givensource
array and the value of theneedToScale
flag that is passed in as theneedToScale
argument.DoubleMatrix
(Matrix source) Creates a newDoubleMatrix
with a copy of the data of the givensource
matrix and the default value of theneedToScale
flag.DoubleMatrix
(Matrix source, boolean needToScale) Creates a newDoubleMatrix
with a copy of the data of the givensource
matrix and the value of theneedToScale
flag that is passed in as theneedToScale
argument.DoubleMatrix
(Number[][] source) Creates a newDoubleMatrix
with a copy of the data of the givensource
array and the default value of theneedToScale
flag.DoubleMatrix
(Number[][] source, boolean needToScale) Creates a newDoubleMatrix
with a copy of the data of the givensource
array and the value of theneedToScale
flag that is passed in as theneedToScale
argument. -
Method Summary
Modifier and TypeMethodDescriptionadd
(double[][] matrixB) Adds the givenmatrixB
passed in as a two-dimentional array ofdouble
s to this matrix and returns the sum.Adds the givenmatrixB
to this matrix and returns the sum.Adds the givenmatrixB
passed in as a two-dimentional array of Number to this matrix and returns the sum.double
cond()
Computes the condition number of the matrix, ║A║•║A-1║, and returns its value as adouble
value.Computes the determinant of the matrix and returns its value as a Number value.Computes the determinant of the matrix and returns its value as a BigDecimal value.double
Computes the determinant of the matrix and returns its value as adouble
value.Computes the determinant of the matrix and returns its value as a Quadruple value.boolean
Indicates whether the otherMatrix
is equal to this one.BigDecimal[][]
Returns a two-dimentional array ofBigDecimal
instances containing the values of the corresponding matrix elements.BigDecimal[][]
Returns the last of the previously found matrix solutions, X, to a matrix equation of form AX = B, as a two-dimentional array of BigDecimals.Returns the last of the previously found vector solutions, x, to a system of linear equations of form Ax = b, as an array of BigDecimals.Number[][]
getData()
Returns a two-dimentional array ofNumber
containing the values of the corresponding matrix elements.static boolean
Returns the value of the static#scaleByDefault
flag that is used to set corresponding instance flags when creating a new instances by constructors withoutneedToScale
parameter.double[][]
Returns a two-dimentional array of primitivedouble
values containing the values of the corresponding matrix elements, perhaps rounded.double[][]
Returns the last of the previously found matrix solutions, X, to a matrix equation of form AX = B, as a two-dimentional array of primitivedouble
s.double[]
Returns a copy of the last previously found vector solutions, x, to a system of linear equations of form Ax = b, as an array ofdouble
s.Returns a string designation of the error code if an error has occurred during the solving or inversion of the matrix.Returns the last of the previously found matrix solutions, X, to a matrix equation of form AX = B, as aMatrix
.Number[][]
Returns the last of the previously found matrix solutions, X, to a matrix equation of form AX = B, as a two-dimentional array of Number.Quadruple[][]
Returns a two-dimentional array ofQuadruple
instances containing the values of the corresponding matrix elements, perhaps rounded.Quadruple[][]
Returns the last of the previously found matrix solutions, X, to a matrix equation of form AX = B, as a two-dimentional array of Quadruples.Returns the last of the previously found vector solutions, x, to a system of linear equations of form Ax = b, as an array of Quadruples.boolean
Returns the value of an internal flag that defines whether row scaling will be applied while solving a system by this instance of Matrix.Number[]
Returns a copy of the last previously found vector solutions, x, to a system of linear equations of form Ax = b, as an array of Numbers.int
hashCode()
Returns a hash code value for theMatrix
.inverse()
Creates and returns a new Matrix instance containing the inversion of this instance.Creates and returns a new Matrix instance containing the inversion of this instance.multiply
(double scalar) Multiplies this instance ofMatrix
by a scalar factorscalar
passed in as adouble
parameter, and creates and returns a new matrix containing the product.Number[]
multiply
(double[] vector) Multiplies this instance ofMatrix
by a vector passed in as an array ofdouble
s, and returns an array of Number values containing the product.multiply
(double[][] factor) Multiplies this instance ofMatrix
by thefactor
passed in as a two-dimentional double array, and creates and returns a new matrix containing the product.Multiplies this instance ofMatrix
by the matrix passed in as thefactor
argument, creates and returns a new matrix containing the product.Multiplies this instance ofMatrix
by a scalar factorscalar
passed in as a Number parameter, and creates and returns a new matrix containing the product.Number[]
Multiplies this instance ofMatrix
by thefactor
passed in as a two-dimentional array ofNumber
s, and creates and returns a new matrix containing the product.norm()
Computes the row-based norm of the matrix, ║A║∞, and returns its value as a Number value.Computes the row-based norm of the matrix, ║A║∞, and returns its value as a BigDecimal value.double
Computes the row-based norm of the matrix, ║A║∞, and returns its value as adouble
value.Computes the row-based norm of the matrix, ║A║∞, and returns its value as a Quadruple value.static void
setDefaultScaling
(boolean scaleByDefault) Sets the value of the staticscaleByDefault
flag that is used to set corresponding instance flags when creating a new instances by constructors withoutneedToScale
parameter.Number[]
solve
(double[] vector) Solves a system of linear equations of form Ax = b and returns the found solution.solve
(double[][] matrixB) Solves a matrix equation of form AX = B and returns the found solution.Solves a matrix equation of form AX = B and returns the found solution.Number[]
Solves a system of linear equations of form Ax = b and returns the found solution.Solves a matrix equation of form AX = B and returns the found solution.Number[]
solveAccurately
(double[] vector) Solves a system of linear equations of form Ax = b with increased accuracy and returns the found solution.solveAccurately
(double[][] matrixB) Solves a matrix equation of form AX = B and returns the found solution.solveAccurately
(Matrix matrixB) Solves a matrix equation of form AX = B and returns the found solution.Number[]
solveAccurately
(Number[] vector) Solves a system of linear equations of form Ax = b with increased accuracy and returns the found solution.solveAccurately
(Number[][] matrixB) Solves a matrix equation of form AX = B and returns the found solution.Number[]
solveSPD
(double[] vector) Solves a system of linear equations of form Ax = b for a symmetric positively-defined matrix of coefficients and returns the found solution.Number[]
Solves a system of linear equations of form Ax = b for a symmetric positively-defined matrix of coefficients and returns the found solution.Number[]
solveSPDAccurately
(double[] vector) Solves a system of linear equations of form Ax = b for a symmetric positively-defined matrix of coefficients, using an iterative refinement algorithm to achieve higher solution accuracy, and returns the found solution.Number[]
solveSPDAccurately
(Number[] vector) Solves a system of linear equations of form Ax = b for a symmetric positively-defined matrix of coefficients, using an iterative refinement algorithm to achieve higher solution accuracy, and returns the found solution.subtract
(double[][] matrixB) Subtracts the givenmatrixB
passed in as a two-dimentional array ofdouble
s from this matrix and returns the difference.Subtracts the givenmatrixB
from this matrix and returns the difference.Subtracts the givenmatrixB
passed in as a two-dimentional array of Number from this matrix and returns the difference.Creates and returns a new Matrix instance containing the transposition of this instance.unity()
Creates and returns a new Matrix instance containing a unity matrix of the same size as the source matrix.
-
Constructor Details
-
DoubleMatrix
Creates a newDoubleMatrix
with a copy of the data of the givensource
matrix and the default value of theneedToScale
flag.
Uses static scaleByDefault value to set the new matrix'sneedToScale
flag designating necessity to scale matrix rows before solving equation systems and inverting.- Parameters:
source
- a matrix whose data get copied into the new Matrix's internal storage.- See Also:
-
DoubleMatrix
Creates a newDoubleMatrix
with a copy of the data of the givensource
matrix and the value of theneedToScale
flag that is passed in as theneedToScale
argument.
Uses the givenneedToScale
value to set the new matrix'sneedToScale
flag designating necessity to scale matrix rows while solving equation systems and inverting. The value of this flag can be obtained viagetScaling()
instance method.- Parameters:
source
- a matrix whose data get copied into the new Matrix's internal storage.needToScale
- the value defining necessity to scale rows while solving equation systems and inverting.- See Also:
-
DoubleMatrix
public DoubleMatrix(double[][] source) Creates a newDoubleMatrix
with a copy of the data of the givensource
array and the default value of theneedToScale
flag.
Uses static scaleByDefault value to set the new matrix'sneedToScale
flag designating necessity to scale matrix rows before solving equation systems and inverting.
Throws IllegalArgumentException if thesource
argument is a non-square or empty array, or contains non-numeric values,Double.NaN
,Double.NEGATIVE_INFINITY
, orDouble.POSITIVE_INFINITY
.- Parameters:
source
- a two-dimentional square array ofdouble
s to be copied into the internal storage of this instance.- See Also:
-
setDefaultScaling(boolean)
scaleByDefault
-
DoubleMatrix
public DoubleMatrix(double[][] source, boolean needToScale) Creates a newDoubleMatrix
with a copy of the data of the givensource
array and the value of theneedToScale
flag that is passed in as theneedToScale
argument.
Uses the givenneedToScale
value to set the new matrix'sneedToScale
flag designating necessity to scale matrix rows while solving equation systems and inverting. The value of this flag can be obtained viagetScaling()
instance method.
Throws IllegalArgumentException if thesource
argument is a non-square or empty array, or contains non-numeric values,Double.NaN
,Double.NEGATIVE_INFINITY
, orDouble.POSITIVE_INFINITY
.- Parameters:
source
- a two-dimentional square array ofdouble
s to be copied into the internal storage of this instance.needToScale
- the value defining necessity to scale rows while solving equation systems and inverting.- See Also:
-
DoubleMatrix
Creates a newDoubleMatrix
with a copy of the data of the givensource
array and the default value of theneedToScale
flag.
Translates the values of the givensource
array intodouble
values using their Number.doubleValue() methods.
Uses static scaleByDefault value to set the new matrix'sneedToScale
flag designating necessity to scale matrix rows before solving equation systems and inverting.
Throws IllegalArgumentException if thesource
argument is a non-square or empty array, or contains non-numeric values,Double.NaN
,Double.NEGATIVE_INFINITY
orDouble.POSITIVE_INFINITY
), ornull
.- Parameters:
source
- a two-dimentional square array of Number values to be copied into the internal storage of this instance.- See Also:
-
DoubleMatrix
Creates a newDoubleMatrix
with a copy of the data of the givensource
array and the value of theneedToScale
flag that is passed in as theneedToScale
argument.
Translates the values of the givensource
array intodouble
values using their Number.doubleValue() methods.
Uses the givenneedToScale
value to set the new matrix'sneedToScale
flag designating necessity to scale matrix rows while solving equation systems and inverting. The value of this flag can be obtained viagetScaling()
instance method.
Throws IllegalArgumentException if thesource
argument is a non-square or empty array, or contains non-numeric values,Double.NaN
,Double.NEGATIVE_INFINITY
orDouble.POSITIVE_INFINITY
), ornull,
.- Parameters:
source
- a two-dimentional square array of Number values to be copied into the internal storage of this instance.needToScale
- the flag defining necessity to scale rows while solving equation systems and inverting.- See Also:
-
-
Method Details
-
setDefaultScaling
public static void setDefaultScaling(boolean scaleByDefault) Sets the value of the staticscaleByDefault
flag that is used to set corresponding instance flags when creating a new instances by constructors withoutneedToScale
parameter.
This flag determines the need to scale the rows of the matrix before LU-decomposing it so that the values of their norms are close enough to each other. This may increase the accuracy of the solution and the inversion, especially for matrices with a significantly non-uniform distribution of element values, at the cost of a insignificant increase in computation time.- Parameters:
scaleByDefault
- the value ofneedToScale
flag to set for new matrices created with constructors withoutneedToScale
parameter.
-
getDefaultScaling
public static boolean getDefaultScaling()Returns the value of the static#scaleByDefault
flag that is used to set corresponding instance flags when creating a new instances by constructors withoutneedToScale
parameter.- Returns:
- the value of static
scaleByDefault
flag - See Also:
-
getScaling
public boolean getScaling()Returns the value of an internal flag that defines whether row scaling will be applied while solving a system by this instance of Matrix.
Scaling of the rows of the matrix may be used while solving systems of linear equations. When an internal flag controlling the scaling is set totrue
, the rows of the matrix along with the corresponding elements of the vector b or the matrix B are scaled so that the norms of the rows are all be 1.0. In most cases this improves the accuracy of the solution, especially for matrices including both very large and very small elements. The default value of the flag signifying the necessity of the scaling for a certain subclass may be set via a static methodsetScaling()
of the subclass, and the necessity of the scaling for a newly-created instance of Matrix may be controlled via the corresponding parameter of a constructor.- Specified by:
getScaling
in classMatrix
- Returns:
- the value of the flag that defines whether the scaling will be applied while solving a system by this instance of Matrix
-
getData
Returns a two-dimentional array ofNumber
containing the values of the corresponding matrix elements.
The exact type of the array elements depends on the particular subclass of this instance (it is Double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
The returned array is a copy of the corresponding internal array and can be safely modified. There is no loss of precision when copying, so the returned values are exactly equal to the values of the corresponding elements of the internal storage.
DoubleMatrix returns a copy of the internal matrix data as a two-dimentional array ofDouble
. -
getDoubleData
public double[][] getDoubleData()Returns a two-dimentional array of primitivedouble
values containing the values of the corresponding matrix elements, perhaps rounded.
If the type of the internal data of the particular class enables for higher precision than that provided bydouble
, the values get rounded to the nearest possibledouble
value.
If the value of an internal data element exceeds the range ofdouble
values, it gets converted to Double.POSITIVE_INFINITY or Double.NEGATIVE_INFINITY, depending on its sign.
DoubleMatrix returns a copy of the internal matrix data containing exact values of the corresponding elements of the internal storage.- Specified by:
getDoubleData
in classMatrix
- Returns:
- a two-dimentional array of primitive
double
values containing exact copy of the internal data array
-
getQuadrupleData
Returns a two-dimentional array ofQuadruple
instances containing the values of the corresponding matrix elements, perhaps rounded.
If the type of the internal data of the particular class enables for higher precision than that provided byQuadruple
, the values get rounded to the nearest possibleQuadruple
value.
If the value of an internal data element exceeds the range ofQuadruple
values, it gets converted to Quadruple.POSITIVE_INFINITY or Quadruple.NEGATIVE_INFINITY, depending on its sign.
DoubleMatrix returns an array containing the exact values of the corresponding elements of the internal storage, expanded to Quadruple values, without precision loss.- Specified by:
getQuadrupleData
in classMatrix
- Returns:
- a two-dimentional array of
Quadruple
values containing the values of the corresponding matrix elements, perhaps rounded.
-
getBigDecimalData
Returns a two-dimentional array ofBigDecimal
instances containing the values of the corresponding matrix elements.
If the type of the internal data of the particular class isdouble
then the correspondingBigDecimal
values are obtained using BigDecimal.valueOf(double) method. If the type of the internal data of the particular class isQuadruple
then the correspondingBigDecimal
values are obtained using Quadruple.bigDecimalValue() method. If an internal data element is not convertible toBigDecimal
(i.e. it is NaN or Infinity), throwsNumberFormatException
.
DoubleMatrix returns an array containing the values of the corresponding elements of the internal storage, translated to BigDecimal values using BigDecimal.valueOf(double).- Specified by:
getBigDecimalData
in classMatrix
- Returns:
- a two-dimentional array of
BigDecimal
values containing the values of the corresponding matrix elements translated toBigDecimal
instances.
-
equals
Indicates whether the otherMatrix
is equal to this one.
Matrices are considered to be equal if they belong to the same subtype, and their internal arrays containing the elements of the matrices are equal, and theirneedToScale
flags are equal.
Under those condition, the matrices yield equal results for all operations performed on them. -
hashCode
public int hashCode()Returns a hash code value for theMatrix
.
It is guaranteed, that for two matrices returning different hashcodes theirMatrix.equals(Object)
methods returnfalse
, and two matrices considered to be equal return equal hashcodes. For two different matrices, the probability of the equality of their hashcodes is reasonably low. -
solve
Solves a system of linear equations of form Ax = b and returns the found solution.
Solves the system Ax = b, formed by the inner matrix data A and the vector b passed in as thevector
argument, using LU decomposition.
The exact type of the elements of the returned array depends on the particular subclass of this instance (it is Double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
In case of an inconsistent or underdefined matrix throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode().
If the length of thevector
does not match the size of the matrix, or the argument contains non-numeric values (NaN or Infinity), throwsIllegalArgumentException
with a relevant message.- Specified by:
solve
in classMatrix
- Parameters:
vector
- the column vector b of the equation to be solved, Ax = b, as an array ofdouble
s- Returns:
- the found solution x to the equation Ax = b as an array of
Number instances. The particular type of the elements of the array returned by
DoubleMatrix
isDouble
. - Throws:
IllegalArgumentException
- if the length of thevector
does not match the size of the matrix,, or the system has no solution or has infinitely many solutions, or the argument contains non-numeric values (NaN or Infinity).NullPointerException
- if the argument isnull
- See Also:
-
solve
Solves a system of linear equations of form Ax = b and returns the found solution.
Solves the system Ax = b, formed by the inner matrix data A and the vector b passed in as thevector
argument, using LU decomposition. Before solving, the given vector gets translated to an array of values of the type that is used to store internal matrix data (double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
The exact type of the elements of the returned array depends on the particular subclass of this instance (it is Double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
In case of an inconsistent or underdefined matrix throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode().
If the length of thevector
does not match the size of the matrix, orvector
contains non-numeric values (NaN
orInfinity
) ornull
, throwsIllegalArgumentException
with a relevant message. Before solving the equation, the values of thevector
argument get rounded to the nearestdouble
values.- Specified by:
solve
in classMatrix
- Parameters:
vector
- the column vector b of the equation to be solved, Ax = b, as an array ofNumber
s- Returns:
- the found solution x to the equation Ax = b as an array of
Number instances. The particular type of the elements of the array returned by
DoubleMatrix
isDouble
. - Throws:
IllegalArgumentException
- if the length of thevector
does not match the size of the matrix, or the system has no solution or has infinitely many solutions, or the argument contains invalid values (NaN, Infinity, or null).NullPointerException
- if the argument isnull
- See Also:
-
solveSPD
Solves a system of linear equations of form Ax = b for a symmetric positively-defined matrix of coefficients and returns the found solution.
Solves the system Ax = b, formed by the inner matrix data A and the vector b passed in as thevector
argument, using Cholesky decomposition. The exact type of the elements of the returned array depends on the particular subclass of this instance (it is Double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
In case of an asymmetric or non-positively-defined matrix throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode().
If the length of thevector
does not match the size of the matrix, or the argument contains non-numeric values (NaN or Infinity), throwsIllegalArgumentException
with a relevant message.- Specified by:
solveSPD
in classMatrix
- Parameters:
vector
- the column vector b of the equation to be solved, Ax = b, as an array ofNumber
s- Returns:
- the found solution x to the equation Ax = b as an array of
Number instances. The particular type of the elements of the array returned by
DoubleMatrix
isDouble
. - Throws:
IllegalArgumentException
- if the length of thevector
does not match the size of the matrix, or the matrix is asymmetric or not positively-defined, or the argument contains non-numeric values (NaN or Infinity).NullPointerException
- if the argument isnull
- See Also:
-
solveSPD
Solves a system of linear equations of form Ax = b for a symmetric positively-defined matrix of coefficients and returns the found solution.
Solves the system Ax = b, formed by the inner matrix data A and the vector b passed in as thevector
argument, using Cholesky decomposition. Before solving, the given vector gets translated to an array of values of the type that is used to store internal matrix data (double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc). The exact type of the elements of the returned array depends on the particular subclass of this instance (it is Double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
In case of an asymmetric or non-positively-defined matrix throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode().
If the length of thevector
does not match the size of the matrix, orvector
contains non-numeric values (NaN
orInfinity
) ornull
, throwsIllegalArgumentException
with a relevant message. Before solving the equation, the values of thevector
argument get rounded to the nearestdouble
values.- Specified by:
solveSPD
in classMatrix
- Parameters:
vector
- the column vector b of the equation to be solved, Ax = b, as an array ofNumber
s- Returns:
- the found solution x to the equation Ax = b as an array of
Number instances. The particular type of the elements of the array returned by
DoubleMatrix
isDouble
. - Throws:
IllegalArgumentException
- if the length of thevector
does not match the size of the matrix, or the matrix is asymmetric or not positively-defined, or the argument contains invalid values (NaN, Infinity, or null)NullPointerException
- if the argument isnull
- See Also:
-
solveAccurately
public Number[] solveAccurately(double[] vector) throws IllegalArgumentException, NullPointerException Solves a system of linear equations of form Ax = b with increased accuracy and returns the found solution.
Solves the system Ax = b, formed by the inner matrix data A and the vector b passed in as thevector
argument, using LU decomposition. Uses an iterative refinement to find a more accurate solution. The exact type of the elements of the returned array depends on the particular subclass of this instance (it is Double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
In case of an inconsistent or underdefined matrix throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode().
If the length of thevector
does not match the size of the matrix, orvector
contains non-numeric values (NaN or Infinity), throwsIllegalArgumentException
with a relevant message.
The execution time is about twice longer than that of the simple solve(double[]). In a typical case, the result error is reduced, compared to the simplesolve()
, by a factor from several units to several tens or a few hundreds, depending on the properties of the specific matrix data.
For matrices 500 x 500 with uniformly-distributed random values, average square root of MSE is reduced by approximately 50 times, from about 2.0e-13 down to 4.0e-15.- Specified by:
solveAccurately
in classMatrix
- Parameters:
vector
- the column vector b of the equation to be solved, Ax = b, as an array ofdouble
s- Returns:
- the found solution x to the equation Ax = b as an array of
Number instances. The particular type of the elements of the array returned by
DoubleMatrix
isDouble
. - Throws:
IllegalArgumentException
- if the length of thevector
does not match the size of the matrix, or the system has no solution or has infinitely many solutions, or the argument contains non-numeric values (NaN or Infinity).NullPointerException
- if the argument isnull
- See Also:
-
solveAccurately
public Number[] solveAccurately(Number[] vector) throws IllegalArgumentException, NullPointerException Solves a system of linear equations of form Ax = b with increased accuracy and returns the found solution.
Solves the system Ax = b, formed by the inner matrix data A and the vector b passed in as thevector
argument, using LU decomposition. Before solving, the given vector gets translated to an array of values of the type that is used to store internal matrix data (double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
Uses an iterative refinement to find a more accurate solution. The exact type of the elements of the returned array depends on the particular subclass of this instance (it is Double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
In case of an inconsistent or underdefined matrix throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode().
If the length of thevector
does not match the size of the matrix, orvector
contains non-numeric values (NaN
orInfinity
) ornull
, throwsIllegalArgumentException
with a relevant message.
Before solving the equation, the values of thevector
argument get rounded to the nearestdouble
values.
The execution time is about twice longer than that of the simple solve(double[]). In a typical case, the result error is reduced, compared to the simplesolve()
, by a factor from several units to several tens or a few hundreds, depending on the properties of the specific matrix data.
For matrices 500 x 500 with uniformly-distributed random values, average square root of MSE is reduced by approximately 50 times, from about 2.0e-13 down to 4.0e-15.- Specified by:
solveAccurately
in classMatrix
- Parameters:
vector
- the column vector b of the equation to be solved, Ax = b, as an array ofNumber
s- Returns:
- the found solution x to the equation Ax = b as an array of
Number instances. The particular type of the elements of the array returned by
DoubleMatrix
isDouble
. - Throws:
IllegalArgumentException
- if the length of thevector
does not match the size of the matrix, or the system has no solution or has infinitely many solutions, or the argument contains invalid values (NaN, Infinity, or null)NullPointerException
- if the argument isnull
- See Also:
-
solveSPDAccurately
public Number[] solveSPDAccurately(double[] vector) throws IllegalArgumentException, NullPointerException Solves a system of linear equations of form Ax = b for a symmetric positively-defined matrix of coefficients, using an iterative refinement algorithm to achieve higher solution accuracy, and returns the found solution.
Solves the system Ax = b, formed by the inner matrix data A and the vector b passed in as thevector
argument, using Cholesky decomposition. Uses an iterative refinement to find a more accurate solution. The exact type of the elements of the returned array depends on the particular subclass of this instance (it is Double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
In case of an asymmetric or non-SPD matrix throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode().
If the length of thevector
does not match the size of the matrix, orvector
contains non-numeric values (NaN or Infinity), throwsIllegalArgumentException
with a relevant message.
The execution time is about 70% longer than that of the simple solveSPD(double[]). In a typical case, the result error is reduced, compared to the simple solveSPD(), by a factor of 6-8 times, depending on specific values of the matrix elements.- Specified by:
solveSPDAccurately
in classMatrix
- Parameters:
vector
- the column vector b of the equation to be solved, Ax = b, as an array ofdouble
s- Returns:
- the found solution x to the equation Ax = b as an array of
Number instances. The particular type of the elements of the array returned by
DoubleMatrix
isDouble
. - Throws:
IllegalArgumentException
- if the length of thevector
does not match the size of the matrix, or the matrix is asymmetric or not positively-defined, or the argument contains non-numeric values (NaN or Infinity).NullPointerException
- if the argument isnull
- See Also:
-
solveSPDAccurately
public Number[] solveSPDAccurately(Number[] vector) throws IllegalArgumentException, NullPointerException Solves a system of linear equations of form Ax = b for a symmetric positively-defined matrix of coefficients, using an iterative refinement algorithm to achieve higher solution accuracy, and returns the found solution.
Solves the system Ax = b, formed by the inner matrix data A and the vector b passed in as thevector
argument, using Cholesky decomposition. Uses an iterative refinement to find a more accurate solution. The exact type of the elements of the returned array depends on the particular subclass of this instance (it is Double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
In case of an asymmetric or non-SPD matrix throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode(). If the length of thevector
does not match the size of the matrix, orvector
contains non-numeric values (NaN
orInfinity
) ornull
throwsIllegalArgumentException
with a relevant message.
Before solving the equation, the values of thevector
argument get rounded to the nearestdouble
values.
The execution time is about 70% longer than that of the simple solveSPD(double[]). In a typical case, the result error is reduced, compared to the simple solveSPD(), by a factor of 6-8 times, depending on specific values of the matrix elements.- Specified by:
solveSPDAccurately
in classMatrix
- Parameters:
vector
- the column vector b of the equation to be solved, Ax = b, as an array ofdouble
s- Returns:
- the found solution x to the equation Ax = b as an array of
Number instances. The particular type of the elements of the array returned by
DoubleMatrix
isDouble
. - Throws:
IllegalArgumentException
- if the length of thevector
does not match the size of the matrix, or the matrix is asymmetric or not positively-defined, or the argument contains invalid values (NaN, Infinity, or null)NullPointerException
- if the argument isnull
- See Also:
-
getSolution
Returns a copy of the last previously found vector solutions, x, to a system of linear equations of form Ax = b, as an array of Numbers.
The exact type of the elements of the returned array depends on the particular subclass of this instance (it is Double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
If no system was solved with this instance of theMatrix
, returnsnull
.- Specified by:
getSolution
in classMatrix
- Returns:
- the last of the previously found vector solutions, x, to a system of of linear equations
of form Ax = b, as an array of
Double
s, ornull
, if no system was solved with the matrix.
-
getDoubleSolution
public double[] getDoubleSolution()Returns a copy of the last previously found vector solutions, x, to a system of linear equations of form Ax = b, as an array ofdouble
s.
If the particular subtype of the instance stores internal data with higher precision than that provided bydouble
, the values of the elements of the returned vector get rounded to the nearestdouble
values.
If no system was solved with this instance of theMatrix
, returnsnull
.DoubleMatrix
returns the exact values that was found by the corresponding solution method.- Specified by:
getDoubleSolution
in classMatrix
- Returns:
- the last of the previously found vector solutions, x, to a system of linear equations
of form Ax = b, as an array of primitive
double
s. ornull
, if no system was solved with the matrix.
-
getQuadrupleSolution
Returns the last of the previously found vector solutions, x, to a system of linear equations of form Ax = b, as an array of Quadruples.
If the particular subtype of the instance stores internal data with higher precision than that provided byQuadruple
, the values of the elements of the returned vector get rounded to the nearestdouble
values.
If no system was solved with this instance of theMatrix
, returnsnull
.DoubleMatrix
translates double values of the internally stored solution to exactly equalQuadruple
values.- Specified by:
getQuadrupleSolution
in classMatrix
- Returns:
- the last of the previously found vector solutions, x, to a system of
linear equations of form Ax = b, as an array of Quadruples,
or
null
, if no system was solved with the matrix.
-
getBigDecimalSolution
Returns the last of the previously found vector solutions, x, to a system of linear equations of form Ax = b, as an array of BigDecimals.
If no system was solved with this instance of theMatrix
, returnsnull
.
If the solution contains values that can't be translated toBigDeciaml
(NaN
orInfinity
), throwsNumberFormatException
.DoubleMatrix
translates double values of the internally stored solution toBigDecimal
values, usingBigDecimal.valueOf(double)
method.- Specified by:
getBigDecimalSolution
in classMatrix
- Returns:
- the last of the previously found vector solutions, x, to a system of linear equations
of form Ax = b, as an array of BigDecimals.
or
null
, if no system was solved with the matrix.
-
getErrorCode
Returns a string designation of the error code if an error has occurred during the solving or inversion of the matrix.
This method can return the following values:"OK"
-- The last solution or inversion was successful;"ASYMMETRIC"
-- There was an attempt to solve or inverse the matrix using Cholesky decomposition, but the matrix is asymmetric;"NON_SPD"
-- There was an attempt to solve or inverse the matrix using Cholesky decomposition, but the matrix is not positively-defined;"NON_INVERTIBLE"
-- There was an attempt to solve or inverse the matrix using LU decomposition, but the matrix is inconsistent or underdetermined
- Specified by:
getErrorCode
in classMatrix
- Returns:
- a string designation of the error code if an error has occurred during the solving or inversion of the matrix, or "OK" in case of success.
- See Also:
-
Matrix.ErrorCodes
-
solve
Solves a matrix equation of form AX = B and returns the found solution.
Solves a matrix equation of form AX = B formed by the inner matrix data A and the matrix B passed in as theMatrix matrixB
argument, using LU decomposition.
In case of an inconsistent or underdefined matrix throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode(). If the size of thematrixB
does not match the size of this instance of the matrix, throwsIllegalArgumentException
with a relevant message.- Specified by:
solve
in classMatrix
- Parameters:
matrixB
- the matrix B of the equation to be solved, AX = B- Returns:
- the found solution X to the equation AX = B
as a new instance of
DoubleMatrix
. - Throws:
IllegalArgumentException
- if the size of thematrixB
does not match the size of this instance or the system has no solution or has infinitely many solutions.NullPointerException
- if the argument isnull
- See Also:
-
solve
Solves a matrix equation of form AX = B and returns the found solution.
Solves a matrix equation of form AX = B formed by the inner matrix data A and the matrix B passed in as thedouble[][] matrixB
argument, using LU decomposition.
In case of an inconsistent or underdefined matrix throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode().
If the passed-in array is non-square, or its size does not match the size of this instance of the matrix, or the argument contains non-numeric values (NaN or Infinity), throwsIllegalArgumentException
with a relevant message.- Specified by:
solve
in classMatrix
- Parameters:
matrixB
- the matrix B of the equation to be solved, AX = B, as a two-dimentional array of primitivedouble
s- Returns:
- the found solution X to the equation AX = B
as a new instance of
DoubleMatrix
. - Throws:
IllegalArgumentException
- if the passed-in array is non-square, or its size does not match the size of this instance, or the system has no solution or has infinitely many solutions, or the argument contains non-numeric values (NaN
orInfinity
).NullPointerException
- if the argument isnull
- See Also:
-
solve
Solves a matrix equation of form AX = B and returns the found solution.
Solves a matrix equation of form AX = B formed by the inner matrix data A and the matrix B passed in as theNumber[][] matrixB
argument, using LU decomposition.
Before solving, the givenmatrixB
array gets translated to an array of values of the type that is used to store internal matrix data (double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
In case of an inconsistent or underdefined matrix throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode().
If the passed-in array is non-square, or its size does not match the size of this instance of the matrix, ormatrixB
contains non-numeric values (NaN
orInfinity
) ornull
, throwsIllegalArgumentException
with a relevant message.- Specified by:
solve
in classMatrix
- Parameters:
matrixB
- the matrix B of the equation to be solved, AX = B, as a two-dimentional array of Number- Returns:
- the found solution X to the equation AX = B
as a new instance of
DoubleMatrix
. - Throws:
IllegalArgumentException
- if the passed-in array is non-square, or its size does not match the size of this instance, or the system has no solution or has infinitely many solutions, or the argument contains invalid values (NaN, Infinity, or null).NullPointerException
- if the argument isnull
- See Also:
-
solveAccurately
Solves a matrix equation of form AX = B and returns the found solution.
Solves a matrix equation of form AX = B formed by the inner matrix data A and the matrix B passed in as thematrixB
argument, using LU decomposition.
Uses an iterative refinement to find a more accurate solution.
In case of an inconsistent or underdefined matrix throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode().
If the size of thematrixB
does not match the size of this instance of the matrix, throwsIllegalArgumentException
with a relevant message.
The execution time is about 70 times longer than that of the simple solve(Matrix). In a typical case, the result error is reduced, compared to the simplesolve()
, by a factor from several units to several tens, depending on specific values of the matrix elements. For matrices 200 x 200 with uniformly-distributed random values, average square root of MSE is reduced by approximately 30 times, from about 7.5e-14 down to about 2.5e-15- Specified by:
solveAccurately
in classMatrix
- Parameters:
matrixB
- the matrix B of the equation to be solved, AX = B- Returns:
- the found solution X to the equation AX = B
as a new instance of
DoubleMatrix
. - Throws:
IllegalArgumentException
- if the size of thematrixB
does not match the size of this instance or the system has no solution or has infinitely many solutions.NullPointerException
- if the argument isnull
- See Also:
-
solveAccurately
public Matrix solveAccurately(double[][] matrixB) throws IllegalArgumentException, NullPointerException Solves a matrix equation of form AX = B and returns the found solution.
Solves a matrix equation of form AX = B formed by the inner matrix data A and the matrix B passed in as thedouble[][] matrixB
argument, using LU decomposition.
Uses an iterative refinement to find a more accurate solution. In case of an inconsistent or underdefined matrix throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode().
If the passed-in array is non-square, or its size does not match the size of this instance of the matrix, or the argument contains non-numeric values (NaN or Infinity), throwsIllegalArgumentException
with a relevant message.
The execution time is about 70 times longer than that of the simple solve(Matrix). In a typical case, the result error is reduced, compared to the simplesolve()
by a factor from several units to several tens, depending on specific values of the matrix elements. For matrices 200 x 200 with uniformly-distributed random values, average square root of MSE is reduced by approximately 30 times, from about 7.5e-14 down to about 2.5e-15- Specified by:
solveAccurately
in classMatrix
- Parameters:
matrixB
- the matrix B of the equation to be solved, AX = B, as a two-dimentional array of primitivedouble
s- Returns:
- the found solution X to the equation AX = B
as a new instance of
DoubleMatrix
. - Throws:
IllegalArgumentException
- if the size of thematrixB
does not match the size of this instance or the system has no solution or has infinitely many solutions, or the argument contains non-numeric values (NaN or Infinity).NullPointerException
- if the argument isnull
- See Also:
-
solveAccurately
public Matrix solveAccurately(Number[][] matrixB) throws IllegalArgumentException, NullPointerException Solves a matrix equation of form AX = B and returns the found solution.
Solves a matrix equation of form AX = B formed by the inner matrix data A and the matrix B passed in as theNumber[][] matrixB
argument, using LU decomposition.
Before solving, the givenmatrixB
array gets translated to an array of values of the type that is used to store internal matrix data (double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
Uses an iterative refinement to find a more accurate solution. In case of an inconsistent or underdefined matrix throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode().
If the passed-in array is non-square, or its size does not match the size of this instance of the matrix, ormatrixB
contains non-numeric values (NaN
orInfinity
) ornull
, throwsIllegalArgumentException
with a relevant message.
The execution time is about 70 times longer than that of the simple solve(Matrix). In a typical case, the result error is reduced, compared to the simplesolve()
by a factor from several units to several tens, depending on specific values of the matrix elements. For matrices 200 x 200 with uniformly-distributed random values, average square root of MSE is reduced by approximately 30 times, from about 7.5e-14 down to about 2.5e-15- Specified by:
solveAccurately
in classMatrix
- Parameters:
matrixB
- the matrix B of the equation to be solved, AX = B, as a two-dimentional array of Number- Returns:
- the found solution X to the equation AX = B
as a new instance of
DoubleMatrix
. - Throws:
IllegalArgumentException
- if the size of thematrixB
does not match the size of this instance or the system has no solution or has infinitely many solutions, or the argument contains invalid values (NaN, Infinity, or null).NullPointerException
- if the argument isnull
- See Also:
-
getMatrixSolution
Returns the last of the previously found matrix solutions, X, to a matrix equation of form AX = B, as aMatrix
. If no matrix equation was solved with this instance of theMatrix
, returnsnull
.- Specified by:
getMatrixSolution
in classMatrix
- Returns:
- the last of the previously found matrix solution X, to a system of
linear equations of form AX = B, as a
DoubleMatrix
, ornull
, if no matrix equation was solved with the matrix.
-
getNumberMatrixSolution
Returns the last of the previously found matrix solutions, X, to a matrix equation of form AX = B, as a two-dimentional array of Number.
The particular type of the elements of the returned vector depends on the particular subtype ofMatrix
(it is Double for DoubleMatrix, Quadruple for QuadrupleMatrix, etc).
If no matrix equation was solved with this instance of theMatrix
, returnsnull
.DoubleMatrix#getNumberMatrixSolution()
returns the exact values of the elements of the matrix solution found by the call to one of theDoubleMatrix#solve()
orDoubleMatrix#solveAccurately()
methods without rounding or any other conversion.- Specified by:
getNumberMatrixSolution
in classMatrix
- Returns:
- the last of the previously found matrix solution X, to a system of
linear equations of form AX = B, as a two-dimentional array of Number,
or
null
, if no matrix equation was solved with the matrix.
-
getDoubleMatrixSolution
public double[][] getDoubleMatrixSolution()Returns the last of the previously found matrix solutions, X, to a matrix equation of form AX = B, as a two-dimentional array of primitivedouble
s.
If no matrix equation was solved with this instance of theMatrix
, returnsnull
.
The returned array contains the exact values of the elements of the matrix solution found by a call to one of theDoubleMatrix#solve()
orDoubleMatrix#solveAccurately()
methods, without rounding or any other conversion.- Specified by:
getDoubleMatrixSolution
in classMatrix
- Returns:
- the last of the previously found matrix solution X, to a system of linear equations
of form AX = B, as two-dimentional array of
double
s, ornull
, if no matrix equation was solved with the matrix.
-
getQuadrupleMatrixSolution
Returns the last of the previously found matrix solutions, X, to a matrix equation of form AX = B, as a two-dimentional array of Quadruples.
If no matrix equation was solved with this instance of theMatrix
, returnsnull
.
The returned array contains the exact values of the elements of the matrix solution found by a call to one of theDoubleMatrix#solve()
orDoubleMatrix#solveAccurately()
methods, translated into correspondingQuadruple
values, without any precision loss.- Specified by:
getQuadrupleMatrixSolution
in classMatrix
- Returns:
- the last of the previously found matrix solution X, to a system of linear equations
of form AX = B, as two-dimentional array of Quadruples, or
null
, if no matrix equation was solved with the matrix.
-
getBigDecimalMatrixSolution
Returns the last of the previously found matrix solutions, X, to a matrix equation of form AX = B, as a two-dimentional array of BigDecimals.
If no matrix equation was solved with this instance of theMatrix
, returnsnull
.
The returned array contains the exact values of the elements of the matrix solution found by a call to one of theDoubleMatrix#solve()
orDoubleMatrix#solveAccurately()
methods, translated to BigDecimal values using BigDecimal.valueOf(double). If the internal storage contains element that can't be translated to BigDecimal values (NaN or Infinity), throws NumberFormatException.- Specified by:
getBigDecimalMatrixSolution
in classMatrix
- Returns:
- the last of the previously found matrix solution X, to a system of linear equations
of form AX = B, as two-dimentional array of BigDecimal, or
null
, if no matrix equation was solved with the matrix.
-
inverse
Creates and returns a new Matrix instance containing the inversion of this instance.
Computes the inversion of the matrix by solving the equation AX = E, creates and returns a newMatrix
containing the found inversion. The exact subtype of the returned matrix is the same as that of this instance. If the matrix is not invertible (i.e. inconsistent or underdefined), throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode().
The particular subtype ofMatrix
returned byDoubleMatrix#inverse()
isDoubleMatrix
.- Specified by:
inverse
in classMatrix
- Returns:
- a new
Matrix
containing the inversion of the given matrix. - Throws:
IllegalArgumentException
- if the matrix is not invertible (i.e. inconsistent or underdefined)
-
inverseAccurately
Creates and returns a new Matrix instance containing the inversion of this instance.
Computes the inversion of the matrix by solving the equation AX = E, creates and returns a newMatrix
containing the found inversion. Uses an iterative refinement to achieve a more accurate solution to the equation. The exact subtype of the returned matrix is the same as that of this instance. If the matrix is not invertible (i.e. inconsistent or underdefined), throwsIllegalArgumentException
with a relevant message and sets internal variableerrorCode
, whose value can be obtained using method Matrix.getErrorCode().
The execution time is about 70 times longer than that of the simple inverse(). In a typical case, the result error is reduced, compared to the simpleinverse()
by a factor from several units to several tens, depending on specific values of the matrix elements. For matrices 200 x 200 with uniformly-distributed random values, average square root of MSE is reduced by approximately 30 times, from about 1.2e-14 down to about 4.0e-16- Specified by:
inverseAccurately
in classMatrix
- Returns:
- a new
DoubleMatrix
containing the inversion of the given matrix. - Throws:
IllegalArgumentException
- if the matrix is not invertible (i.e. inconsistent or underdefined)
-
transpose
Creates and returns a new Matrix instance containing the transposition of this instance.
Computes the transposition of the matrix, creates and returns a newMatrix
containing the found transposition.
The exact subtype of the returned matrix is the same as that of this instance. -
unity
Creates and returns a new Matrix instance containing a unity matrix of the same size as the source matrix.
The exact subtype of the returned matrix is the same as that of this instance. -
multiply
Multiplies this instance ofMatrix
by the matrix passed in as thefactor
argument, creates and returns a new matrix containing the product. The exact subtype of the returned matrix is the same as that of this instance. If the size of thefactor
does not match the size of the source matrix, throwsIllegalArgumentException
with a relevant message.- Specified by:
multiply
in classMatrix
- Parameters:
factor
- a matrix to multiply this instance by- Returns:
- a new
DoubleMatrix
representing the product - Throws:
IllegalArgumentException
- if the size of the argument does not match the size of this instanceNullPointerException
- if the argument isnull
-
multiply
Multiplies this instance ofMatrix
by thefactor
passed in as a two-dimentional double array, and creates and returns a new matrix containing the product. The exact subtype of the returned matrix is the same as that of this instance.
If the passed-in array is non-square, or its size does not match the size of this instance of the matrix, ormatrixB
contains non-numeric values (NaN
orInfinity
), throwsIllegalArgumentException
with a relevant message.- Specified by:
multiply
in classMatrix
- Parameters:
factor
- two-dimentional double array representing a matrix to multiply this instance by- Returns:
- a new
DoubleMatrix
representing the product - Throws:
IllegalArgumentException
- if the passed-in array is non-square, or its size does not match the size of this instance of the matrix, ormatrixB
contains non-numeric values (NaN
orInfinity
)NullPointerException
- if the argument isnull
-
multiply
Multiplies this instance ofMatrix
by thefactor
passed in as a two-dimentional array ofNumber
s, and creates and returns a new matrix containing the product. The exact subtype of the returned matrix is the same as that of this instance.
If the passed-in array is non-square, or its size does not match the size of this instance of the matrix, ormatrixB
contains non-numeric values (NaN
orInfinity
) ornull
, throwsIllegalArgumentException
with a relevant message.- Specified by:
multiply
in classMatrix
- Parameters:
factor
- two-dimentional array of Number representing the matrix to multiply this instance by- Returns:
- a new
DoubleMatrix
representing the product - Throws:
IllegalArgumentException
- if the passed-in array is non-square, or its size does not match the size of this instance of the matrix, ormatrixB
contains non-numeric values (NaN
orInfinity
) ornull
NullPointerException
- if the argument isnull
-
multiply
Multiplies this instance ofMatrix
by a vector passed in as an array ofdouble
s, and returns an array of Number values containing the product. The exact type of the elements of the returned array depends on the particular subtype of theMatrix
.
If the length of thevector
does not match the size of the source matrix, or the argument contains non-numeric values (NaN or Infinity), throwsIllegalArgumentException
with a relevant message.- Specified by:
multiply
in classMatrix
- Parameters:
vector
- the vector to multiply the matrix by.- Returns:
- an array of Double values containing the product.
- Throws:
IllegalArgumentException
- if the length of the array does not match the size of the matrix, or the argument contains non-numeric values (NaN or Infinity).NullPointerException
- if the argument isnull
-
multiply
Multiplies this instance ofMatrix
by a vector passed in as an array of Number values and returns an array of Number values containing the product. The exact type of the elements of the returned array depends on the particular subtype of theMatrix
.
If the length of thevector
does not match the size of the source matrix, or the argument contains non-numeric values (NaN or Infinity) ornull,
throwsIllegalArgumentException
with a relevant message.- Specified by:
multiply
in classMatrix
- Parameters:
vector
- the vector to multiply the matrix by.- Returns:
- an array of Double values containing the product.
- Throws:
IllegalArgumentException
- if the length of the array does not match the size of the matrix, or the argument contains non-numeric values (NaN or Infinity) ornull
NullPointerException
- if the argument isnull
-
multiply
Multiplies this instance ofMatrix
by a scalar factorscalar
passed in as adouble
parameter, and creates and returns a new matrix containing the product. The exact subtype of the returned matrix is the same as that of this instance. If the argument is a non-numeric value (NaN
orInfinity
), throws IllegalArgumentException.- Specified by:
multiply
in classMatrix
- Parameters:
scalar
- adouble
value to multiply this matrix by.- Returns:
- a new
DoubleMatrix
containing the product of the source matrix and the given scalar. - Throws:
IllegalArgumentException
- if the argument isNaN
orInfinity
.
-
multiply
Multiplies this instance ofMatrix
by a scalar factorscalar
passed in as a Number parameter, and creates and returns a new matrix containing the product. The exact subtype of the returned matrix is the same as that of this instance.
If the argument is a non-numeric value (NaN
orInfinity
) or null, throws IllegalArgumentException. Before the multiplication, the value of the argument is translated into the correspondingdouble
value by Number.doubleValue() method.- Specified by:
multiply
in classMatrix
- Parameters:
scalar
- a Number value to multiply this matrix by.- Returns:
- a new
DoubleMatrix
containing the product of the source matrix and the given scalar. - Throws:
IllegalArgumentException
- if the argument isNaN
,Infinity
or null.NullPointerException
- if the argument isnull
-
add
Adds the givenmatrixB
to this matrix and returns the sum.
Computes the sum of this matrix and theMatrix
passed in, and creates and returns a newMatrix
containing the found sum. The exact subtype of the returned matrix is the same as that of this instance. If the size of thematrixB
does not match the size of this instance of the matrix, throwsIllegalArgumentException
with a relevant message.- Specified by:
add
in classMatrix
- Parameters:
matrixB
- the matrix to add to the source matrix.- Returns:
- a new
DoubleMatrix
containing the sum of the two matrices. - Throws:
IllegalArgumentException
- if the size of thematrixB
does not match the size of this instance.NullPointerException
- if the argument isnull
-
add
Adds the givenmatrixB
passed in as a two-dimentional array ofdouble
s to this matrix and returns the sum.
Computes the sum of this matrix and the matrix passed in, and creates and returns a newMatrix
containing the found sum. The exact subtype of the returned matrix is the same as that of this instance.
If the passed-in array is non-square, or its size does not match the size of this instance of the matrix, or the argument contains non-numeric values (NaN or Infinity), throwsIllegalArgumentException
with a relevant message.- Specified by:
add
in classMatrix
- Parameters:
matrixB
- the matrix to add to the source matrix.- Returns:
- a new
DoubleMatrix
containing the sum of the two matrices. - Throws:
IllegalArgumentException
- if the passed-in array is non-square, or its size does not match the size of this instance, or the argument contains non-numeric values (NaN
orInfinity
).NullPointerException
- if the argument isnull
-
add
Adds the givenmatrixB
passed in as a two-dimentional array of Number to this matrix and returns the sum.
Computes the sum of this matrix and the matrix passed in, and creates and returns a newMatrix
containing the found sum. The exact subtype of the returned matrix is the same as that of this instance.
If the passed-in array is non-square, or its size does not match the size of this instance of the matrix, or the argument contains non-numeric values (NaN or Infinity) ornull
, throwsIllegalArgumentException
with a relevant message.- Specified by:
add
in classMatrix
- Parameters:
matrixB
- the matrix to add to the source matrix.- Returns:
- a new
DoubleMatrix
containing the sum of the two matrices. - Throws:
IllegalArgumentException
- if the passed-in array is non-square, or its size does not match the size of this instance, or the argument contains non-numeric values (NaN
orInfinity
), ornull
.NullPointerException
- if the argument isnull
-
subtract
Subtracts the givenmatrixB
from this matrix and returns the difference.
Computes the difference of this matrix and theMatrix
passed in, and creates and returns a newMatrix
containing the found difference. The exact subtype of the returned matrix is the same as that of this instance. If the size of thematrixB
does not match the size of this instance of the matrix, throwsIllegalArgumentException
with a relevant message.- Specified by:
subtract
in classMatrix
- Parameters:
matrixB
- the matrix to subtract from the source matrix.- Returns:
- a new
DoubleMatrix
containing the difference of the two matrices. - Throws:
IllegalArgumentException
- if the size of thematrixB
does not match the size of this instance.NullPointerException
- if the argument isnull
-
subtract
Subtracts the givenmatrixB
passed in as a two-dimentional array ofdouble
s from this matrix and returns the difference.
Computes the difference of this matrix and the matrix passed in, creates and returns a newMatrix
containing the found difference. The exact subtype of the returned matrix is the same as that of this instance.
If the passed-in array is non-square, or its size does not match the size of this instance of the matrix, or the argument contains non-numeric values (NaN or Infinity), throwsIllegalArgumentException
with a relevant message.- Specified by:
subtract
in classMatrix
- Parameters:
matrixB
- the matrix to subtract from the source matrix.- Returns:
- a new
DoubleMatrix
containing the difference of the two matrices. - Throws:
IllegalArgumentException
- if the passed-in array is non-square, or its size does not match the size of this instance, or the argument contains non-numeric values (NaN
orInfinity
).NullPointerException
- if the argument isnull
-
subtract
Subtracts the givenmatrixB
passed in as a two-dimentional array of Number from this matrix and returns the difference.
Computes the difference of this matrix and the matrix passed in, creates and returns a newMatrix
containing the found difference. The exact subtype of the returned matrix is the same as that of this instance.
If the passed-in array is non-square, or its size does not match the size of this instance of the matrix, or the argument contains non-numeric values (NaN or Infinity) ornull
, throwsIllegalArgumentException
with a relevant message.- Specified by:
subtract
in classMatrix
- Parameters:
matrixB
- the matrix to subtract from the source matrix.- Returns:
- a new
DoubleMatrix
containing the difference of the two matrices. - Throws:
IllegalArgumentException
- if the passed-in array is non-square, or its size does not match the size of this instance, or the argument contains non-numeric values (NaN
orInfinity
) ornull
.NullPointerException
- if the argument isnull
-
determinant
Computes the determinant of the matrix and returns its value as a Number value.
The particular type of the returned Number depends on the exact subtype of this instance ofMatrix
(it isdouble
for DoubleMatrix, Quadruple for QuadrupleMatrix, and BigDecimal for BigDecimalMatrix).- Specified by:
determinant
in classMatrix
- Returns:
- the value of the determinant of the given
Matrix
as an instance of classDouble
-
determinantAsDouble
public double determinantAsDouble()Computes the determinant of the matrix and returns its value as adouble
value.DoubleMatrix#determinantAsDouble()
returns the exact result of the corresponding computations without any type conversions.- Specified by:
determinantAsDouble
in classMatrix
- Returns:
- the value of the determinant of the given
Matrix
-
determinantAsQuadruple
Computes the determinant of the matrix and returns its value as a Quadruple value. The precision of the result depends on the particular subtype of the instance.DoubleMatrix#determinantAsQuadruple()
returns aQuadruple
value exactly equal to the internally calculated double value, with no loss or increase in precision.- Specified by:
determinantAsQuadruple
in classMatrix
- Returns:
- the value of the determinant of the given
Matrix
-
determinantAsBigDecimal
Computes the determinant of the matrix and returns its value as a BigDecimal value. The precision of the result depends on the particular subtype of the instance. ForDoubleMatrix
, it is limited to the precision provided by calculations withdouble
s.- Specified by:
determinantAsBigDecimal
in classMatrix
- Returns:
- the value of the determinant of the given
Matrix
-
norm
Computes the row-based norm of the matrix, ║A║∞, and returns its value as a Number value.
The particular type of the returned Number depends on the exact subtype of this instance ofMatrix
(it isdouble
for DoubleMatrix, Quadruple for QuadrupleMatrix, and BigDecimal for BigDecimalMatrix). -
normAsDouble
public double normAsDouble()Computes the row-based norm of the matrix, ║A║∞, and returns its value as adouble
value.DoubleMatrix#normAsDouble()
returns the exact result of the corresponding computations without any type conversions.- Specified by:
normAsDouble
in classMatrix
- Returns:
- the value of the norm of the given
Matrix
-
normAsQuadruple
Computes the row-based norm of the matrix, ║A║∞, and returns its value as a Quadruple value. The precision of the result depends on the particular subtype of the instance.DoubleMatrix#normAsQuadruple()
returns aQuadruple
value exactly equal to the internally calculated double value, with no loss or increase in precision.- Specified by:
normAsQuadruple
in classMatrix
- Returns:
- the value of the norm of the given
Matrix
-
normAsBigDecimal
Computes the row-based norm of the matrix, ║A║∞, and returns its value as a BigDecimal value. The precision of the result depends on the particular subtype of the instance. ForDoubleMatrix
, it is limited to the precision provided by calculations withdouble
s.- Specified by:
normAsBigDecimal
in classMatrix
- Returns:
- the value of the norm of the given
Matrix
-
cond
public double cond()Computes the condition number of the matrix, ║A║•║A-1║, and returns its value as adouble
value.
For non-invertible matrices returnsDouble.POSITIVE_INFINITY
.
-