Larger commit, adding IPOP-ES and RankMuCMA mutator. Revs. 130-174 from MK-branch should be merged with this.

This commit is contained in:
Marcel Kronfeld
2008-08-29 14:04:32 +00:00
parent c2a3f06498
commit 68241a0dc0
39 changed files with 1593 additions and 404 deletions

View File

@@ -9,9 +9,9 @@ import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Locale;
import eva2.gui.BeanInspector;
import wsi.ra.math.Jama.util.Maths;
import eva2.gui.BeanInspector;
import eva2.tools.Pair;
/**
@@ -260,6 +260,17 @@ public class Matrix implements Cloneable, java.io.Serializable {
return vals;
}
/** Copy a column from the matrix.
@return Matrix elements packed in a one-dimensional array by columns.
*/
public double[] getColumn(int k) {
double[] vals = new double[m];
for (int i = 0; i < m; i++) {
vals[i] = A[i][k];
}
return vals;
}
/** Make a one-dimensional row packed copy of the internal array.
@return Matrix elements packed in a one-dimensional array by rows.
*/
@@ -764,6 +775,34 @@ public class Matrix implements Cloneable, java.io.Serializable {
return X;
}
/** Multiply a matrix by a vector, returning A*v.
*
@param v vector
@return result vector
*/
public double[] times (double[] v) {
// m: no rows
double[] result = new double[m];
times(v, result);
return result;
}
/** Multiply a matrix by a vector in place, result=A*v.
*
@param v vector
@param result
@return result vector
*/
public void times (double[] v, double[] result) {
// m: no rows
for (int i = 0; i < m; i++) {
result[i] = 0;
for (int j = 0; j < n; j++) {
result[i] += get(i,j)*v[j];
}
}
}
public String toString() {
StringBuffer sb = new StringBuffer();
for (int i=0; i<m; i++) {
@@ -976,6 +1015,25 @@ public class Matrix implements Cloneable, java.io.Serializable {
return A;
}
/**
* Return the minimum and maximum value on the diagonal
* as a pair.
*
* @return
*/
public Pair<Double,Double> getMinMaxDiag() {
if (m<1 || n<1) return null;
double v = get(0,0);
Pair<Double,Double> ret = new Pair<Double,Double>(v,v);
for (int i=1; i<Math.min(m,n); i++) {
v = get(i,i);
ret.head = Math.min(ret.head, v);
ret.tail = Math.max(ret.tail, v);
}
return ret;
}
/** Print the matrix to stdout. Line the elements up in columns
* with a Fortran-like 'Fw.d' style format.