package matrix;
import static matrix.Utils.*;
import lto.libinfo.Cost;
public class DefaultMatrix implements Matrix
{
private final double[][] data;
public DefaultMatrix(int n)
{
this.data = new double[n][n];
}
public DefaultMatrix(double[][] data)
{
this.data = getCopy(data);
}
public DefaultMatrix(Matrix mA)
{
this.data = mA.getAsArray();
}
@Override
public DefaultMatrix copy()
{
return new DefaultMatrix(data);
}
@Override
public double[][] getAsArray()
{
return getCopy(data);
}
@Override
public double getElement(int row, int col)
{
return data[row - 1][col - 1];
}
@Override
public int getNumColumns()
{
return data[0].length;
}
@Override
public int getNumRows()
{
return data.length;
}
@Cost(10000)
public static double[] eigenvalues(DefaultMatrix A) {
return (new Jama.Matrix(A.data)).eig().getRealEigenvalues();
}
@Cost(1000)
public static DefaultMatrix multiply(DefaultMatrix mA, DefaultMatrix mB) {
double[][] mAB = new double[mA.getNumRows()][mB.getNumColumns()];
for (int r = 1; r <= mAB.length; r++)
for (int c = 1; c <= mAB[0].length; c++)
for (int n = 1; n <= mA.getNumColumns(); n++)
mAB[r-1][c-1] += mA.getElement(r, n) * mB.getElement(n, c);
return new DefaultMatrix(mAB);
}
@Cost(10000)
public static DefaultMatrix power(DefaultMatrix mA, int k)
{
DefaultMatrix mP = mA.copy();
for (int i = 1; i < k; i++)
mP = multiply(mP, mA);
return mP;
}
}