public class DenseMatrix extends Matrix
Matrix
with no restrictions on element values.Modifier | Constructor and Description |
---|---|
protected |
DenseMatrix(DenseMatrix existingInstance,
CopyContext context)
Initializes a new instance as a copy of an existing instance.
|
|
DenseMatrix(double[][] array)
Initializes a new instance from a two-dimensional array of values.
|
|
DenseMatrix(double[][] array,
int rowDimension,
int columnDimension)
Construct a matrix without copying the given array.
|
|
DenseMatrix(double[] elements,
int rowDimension)
Initializes a new instance from a one-dimensional packed array.
|
|
DenseMatrix(int rowDimension,
int columnDimension)
Initializes a new instance with the specified row and column dimensions.
|
|
DenseMatrix(int rowDimension,
int columnDimension,
double elementValue)
Initializes a new instance with the specified row and column dimensions.
|
|
DenseMatrix(Matrix matrix)
Initializes a new
DenseMatrix from an existing Matrix . |
|
DenseMatrix(Matrix3By3 matrix)
Initializes a new instance from an existing
Matrix3By3 . |
|
DenseMatrix(Matrix6By6 matrix)
Initializes a new instance from an existing
Matrix6By6 . |
Modifier and Type | Method and Description |
---|---|
protected boolean |
checkForSameDefinition(DenseMatrix other)
Checks to determine if another instance has the same definition as this instance and
returns
true if it does. |
protected boolean |
checkForSameDefinition(Matrix other)
Checks to determine if another instance has the same definition as this instance and
returns
true if it does. |
void |
clear()
Sets the value of every value in the matrix to zero.
|
Object |
clone(CopyContext context)
Clones this object using the specified context.
|
protected int |
computeCurrentDefinitionHashCode()
Computes a hash code based on the current properties of this object.
|
boolean |
equals(Object obj)
Indicates whether another object is exactly equal to this instance.
|
double |
get(int rowIndex,
int columnIndex)
Gets the value at the specified location in the matrix.
|
int |
hashCode()
Returns a hash code for this instance, which is suitable for use in hashing algorithms and data structures like a hash table.
|
static DenseMatrix |
identity(int rowDimension,
int columnDimension)
Generates an identity matrix.
|
static double[] |
multiply(DenseMatrix matrix,
double[] vector)
Returns the result of the multiplication of a matrix and a vector.
|
Matrix |
multiply(double factor)
Creates a new
Matrix which has the value of the current matrix multiplied by the given factor. |
double[] |
multiply(double[] vector)
Returns the result of the multiplication of this matrix and a vector.
|
DenseMatrix |
multiplyAssign(double s)
Multiply a matrix by a scalar in place, A = s*A
|
void |
set(int rowIndex,
int columnIndex,
double value)
Sets the value at the specified location in the matrix.
|
double[] |
solve(double[] vectorB)
Solve A*X = B
|
Matrix |
transpose()
Creates a new
Matrix which is the transpose of the current matrix. |
add, add, add, add, add, addAssign, checkForSameDefinition, elementDivide, elementDivide, elementDivide, elementDivide, elementDivide, elementDivideAssign, elementMultiply, elementMultiply, elementMultiply, elementMultiply, elementMultiply, elementMultiplyAssign, equals, equalsEpsilon, getColumnDimension, getFrozenCopy, getMatrix, getMatrix, getMatrix, getMatrix, getMatrix, getMatrix, getMatrix, getMatrix, getRowDimension, multiply, multiply, multiply, multiply, multiply, multiply, multiply, multiplyAssign, setMatrix, setMatrix, setMatrix, setMatrix, setMatrix, subtract, subtract, subtract, subtract, subtract, subtractAssign, toString
areSameDefinition, areSameDefinition, areSameDefinition, areSameDefinition, areSameDefinition, collectionItemsAreSameDefinition, collectionItemsAreSameDefinition, collectionItemsAreSameDefinition, dictionaryItemsAreSameDefinition, enumerateDependencies, freeze, freezeAggregatedObjects, getCollectionHashCode, getCollectionHashCode, getCollectionHashCode, getDefinitionHashCode, getDefinitionHashCode, getDefinitionHashCode, getDefinitionHashCode, getDefinitionHashCode, getDefinitionHashCode, getDictionaryHashCode, getIsFrozen, isSameDefinition, throwIfFrozen
public DenseMatrix(int rowDimension, int columnDimension)
rowDimension
- The number of rows in the matrix.columnDimension
- The number of columns in the matrix.ArgumentOutOfRangeException
- Thrown when rowDimension
or columnDimension
are less than zero.public DenseMatrix(int rowDimension, int columnDimension, double elementValue)
rowDimension
- The number of rows in the matrix.columnDimension
- The number of columns in the matrix.elementValue
- The value that all elements in the matrix will be set to.ArgumentOutOfRangeException
- Thrown when rowDimension
or columnDimension
are less than zero.public DenseMatrix(@Nonnull double[][] array)
array
- A two-dimensional array of doubles.IllegalStateException
- Thrown when all rows are not the same length.ArgumentNullException
- Thrown when array
is null
.public DenseMatrix(@Nonnull double[][] array, int rowDimension, int columnDimension)
array
- Rectangular two-dimensional array of doubles.rowDimension
- Number of rows, this must match the first dimension of the given array.columnDimension
- Number of columns, this must match the second dimensions of the given array.ArgumentNullException
- Thrown when array
is null
.ArgumentOutOfRangeException
- Thrown when rowDimension
or columnDimension
are less than zero.public DenseMatrix(@Nonnull double[] elements, int rowDimension)
elements
- A one-dimensional array of doubles containing the values of all of the elements.rowDimension
- The number of rows in the matrix.ArgumentOutOfRangeException
- Thrown when rowDimension
is less than zero.ArgumentException
- Thrown when the length of elements
is not a multiple of the column dimension.ArgumentNullException
- Thrown when elements
is null
.public DenseMatrix(@Nonnull Matrix3By3 matrix)
Matrix3By3
.matrix
- The existing Matrix3By3
to copy.public DenseMatrix(@Nonnull Matrix6By6 matrix)
Matrix6By6
.matrix
- The existing Matrix6By6
to copy.ArgumentNullException
- Thrown when matrix
is null
.public DenseMatrix(@Nonnull Matrix matrix)
DenseMatrix
from an existing Matrix
.matrix
- The existing Matrix
to copy.ArgumentNullException
- Thrown when matrix
is null
.protected DenseMatrix(@Nonnull DenseMatrix existingInstance, @Nonnull CopyContext context)
See ICloneWithContext.clone(CopyContext)
for more information about how to implement this constructor
in a derived class.
existingInstance
- The existing instance to copy.context
- A CopyContext
that controls the depth of the copy.ArgumentNullException
- Thrown when existingInstance
or context
is null
.public Object clone(CopyContext context)
This method should be implemented to call a copy constructor on the class of the
object being cloned. The copy constructor should take the CopyContext
as a parameter
in addition to the existing instance to copy. The copy constructor should first call
CopyContext.addObjectMapping(T, T)
to identify the newly constructed instance
as a copy of the existing instance. It should then copy all fields, using
CopyContext.updateReference(T)
to copy any reference fields.
A typical implementation of ICloneWithContext
:
public static class MyClass implements ICloneWithContext {
public MyClass(MyClass existingInstance, CopyContext context) {
context.addObjectMapping(existingInstance, this);
someReference = context.updateReference(existingInstance.someReference);
}
@Override
public final Object clone(CopyContext context) {
return new MyClass(this, context);
}
private Object someReference;
}
In general, all fields that are reference types should be copied with a call to
CopyContext.updateReference(T)
. There are a couple of exceptions:
If one of these exceptions applies, the CopyContext
should be given an opportunity
to update the reference before the reference is copied explicitly. Use
CopyContext.updateReference(T)
to update the reference. If CopyContext.updateReference(T)
returns
the original object, indicating that the context does not have a replacement registered,
then copy the object manually by invoking a Clone method, a copy constructor, or by manually
constructing a new instance and copying the values.
alwaysCopy = context.updateReference(existingInstance.alwaysCopy);
if (existingInstance.alwaysCopy != null && alwaysCopy == existingInstance.alwaysCopy) {
alwaysCopy = (AlwaysCopy) existingInstance.alwaysCopy.clone(context);
}
If you are implementing an evaluator (a class that implements IEvaluator
), the
IEvaluator.updateEvaluatorReferences(agi.foundation.infrastructure.CopyContext)
method shares some responsibilities with the
copy context constructor. Code duplication can be avoided by doing the following:
CopyContext.updateReference(T)
. You should still call CopyContext.updateReference(T)
on any references to
non-evaluators.
IEvaluator.updateEvaluatorReferences(agi.foundation.infrastructure.CopyContext)
as the last line in the constructor and pass it the
same CopyContext
passed to the constructor.
IEvaluator.updateEvaluatorReferences(agi.foundation.infrastructure.CopyContext)
as normal. See the reference documentation for
IEvaluator.updateEvaluatorReferences(agi.foundation.infrastructure.CopyContext)
for more information on implementing that method.
public MyClass(MyClass existingInstance, CopyContext context) {
super(existingInstance, context);
someReference = context.updateReference(existingInstance.someReference);
evaluatorReference = existingInstance.evaluatorReference;
updateEvaluatorReferences(context);
}
@Override
public void updateEvaluatorReferences(CopyContext context) {
evaluatorReference = context.updateReference(evaluatorReference);
}
@Override
public Object clone(CopyContext context) {
return new MyClass(this, context);
}
private Object someReference;
private IEvaluator evaluatorReference;
clone
in interface ICloneWithContext
clone
in class DefinitionalObject
context
- The context to use to perform the copy.protected final boolean checkForSameDefinition(Matrix other)
true
if it does. Derived classes MUST override this method and check
all new fields introduced by the derived class for definitional equivalence. It is NOT necessary
to check base class fields because the base class will already have done that. When overriding this method,
you should NOT call the base implementation because it will return false
for all derived-class instances.
Derived classes should check the type of other
to preserve the symmetric nature of IEquatableDefinition.isSameDefinition(java.lang.Object)
.checkForSameDefinition
in class Matrix
other
- The other instance to compare to this one.true
if the two objects are defined equivalently; otherwise false
.protected boolean checkForSameDefinition(DenseMatrix other)
true
if it does. Derived classes MUST override this method and check
all new fields introduced by the derived class for definitional equivalence. It is NOT necessary
to check base class fields because the base class will already have done that. When overriding this method,
you should NOT call the base implementation because it will return false
for all derived-class instances.
Derived classes should check the type of other
to preserve the symmetric nature of IEquatableDefinition.isSameDefinition(java.lang.Object)
.other
- The other instance to compare to this one.true
if the two objects are defined equivalently; otherwise false
.protected int computeCurrentDefinitionHashCode()
DenseMatrix.checkForSameDefinition(agi.foundation.coordinates.Matrix)
method.computeCurrentDefinitionHashCode
in class Matrix
public double get(int rowIndex, int columnIndex)
get
in class Matrix
rowIndex
- The row index of the element being queried.columnIndex
- The column index of the element being queried.IndexOutOfBoundsException
- Thrown when rowIndex
is greater than RowDimension
(get
),
or when columnIndex
is greater than ColumnDimension
(get
),
or when either are less than zero.public void set(int rowIndex, int columnIndex, double value)
set
in class Matrix
rowIndex
- The row index of the element being queried.columnIndex
- The column index of the element being queried.IndexOutOfBoundsException
- Thrown when rowIndex
is greater than RowDimension
(get
),
or when columnIndex
is greater than ColumnDimension
(get
),
or when either are less than zero.public boolean equals(Object obj)
equals
in class Object
obj
- The object to compare to this instance.true
if obj
is an instance of this type and represents the same value as this instance; otherwise false
.Object.hashCode()
,
HashMap
public int hashCode()
hashCode
in class Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public final void clear()
public Matrix multiply(double factor)
Matrix
which has the value of the current matrix multiplied by the given factor.@Nonnull public final DenseMatrix multiplyAssign(double s)
s
- The scalar.@Nonnull public final double[] multiply(@Nonnull double[] vector)
vector
- The vector to be multiplied.public static double[] multiply(DenseMatrix matrix, double[] vector)
matrix
- The matrix to multiply by the vector.vector
- The vector being multiplied.public final double[] solve(double[] vectorB)
vectorB
- right hand side@Nonnull public static DenseMatrix identity(int rowDimension, int columnDimension)
rowDimension
- Number of rows.columnDimension
- Number of columns.