JSci.maths.matrices.AbstractComplexSquareMatrix.vm Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jsci Show documentation
Show all versions of jsci Show documentation
JSci is a set of open source Java packages. The aim is to encapsulate scientific methods/principles in the most natural way possible. As such they should greatly aid the development of scientific based software.
It offers: abstract math interfaces, linear algebra (support for various matrix and vector types), statistics (including probability distributions), wavelets, newtonian mechanics, chart/graph components (AWT and Swing), MathML DOM implementation, ...
Note: some packages, like javax.comm, for the astro and instruments package aren't listed as dependencies (not available).
The newest version!
/* AUTO-GENERATED */
package JSci.maths.matrices;
import JSci.GlobalSettings;
import JSci.maths.${classType};
import JSci.maths.${classType}Mapping;
import JSci.maths.ArrayMath;
import JSci.maths.LinearMath;
import JSci.maths.MaximumIterationsExceededException;
import JSci.maths.vectors.Abstract${classType}Vector;
import JSci.maths.groups.AbelianGroup;
import JSci.maths.algebras.*;
import JSci.maths.fields.*;
/**
* The AbstractComplexSquareMatrix class provides an object for encapsulating square matrices containing complex numbers.
* @version 2.3
* @author Mark Hale
*/
public abstract class AbstractComplexSquareMatrix extends AbstractComplexMatrix implements CStarAlgebra.Member, SquareMatrix {
protected transient ComplexLUCache luCache;
/**
* Constructs a matrix.
*/
protected AbstractComplexSquareMatrix(final int size) {
super(size, size);
}
/**
* Returns the real part of this complex matrix.
* @return a double matrix
*/
public AbstractDoubleMatrix real() {
final double ans[][]=new double[numRows][numCols];
for(int i=0;i* norm.
*/
public double norm() {
try {
return operatorNorm();
} catch(MaximumIterationsExceededException e) {
throw new RuntimeException(e);
}
}
/**
* Returns the operator norm.
* @exception MaximumIterationsExceededException If it takes more than 50 iterations to determine an eigenvalue.
*/
public double operatorNorm() throws MaximumIterationsExceededException {
return Math.sqrt(ArrayMath.max(LinearMath.eigenvalueSolveHermitian((AbstractComplexSquareMatrix)(this.hermitianAdjoint().multiply(this)))));
}
//============
// OPERATIONS
//============
/**
* Returns the negative of this matrix.
*/
public AbelianGroup.Member negate() {
final double arrayRe[][]=new double[numRows][numCols];
final double arrayIm[][]=new double[numRows][numCols];
for(int i=0;imax) {
max=tmp;
pivotrow=i;
}
}
// swap row j with pivotrow
if(pivotrow!=j) {
double[] tmprow = arrayURe[j];
arrayURe[j] = arrayURe[pivotrow];
arrayURe[pivotrow] = tmprow;
tmprow = arrayUIm[j];
arrayUIm[j] = arrayUIm[pivotrow];
arrayUIm[pivotrow] = tmprow;
int k=pivot[j];
pivot[j]=pivot[pivotrow];
pivot[pivotrow]=k;
// update parity
pivot[N]=-pivot[N];
}
// divide by pivot
double tmpRe=arrayURe[j][j];
double tmpIm=arrayUIm[j][j];
if(Math.abs(tmpRe)