Cálculo Matricial II
Seguindo a continuação do post anterior sobre cálculo matricial em Java vou acrescentar mais alguns métodos úteis à class Matrix.
Se quisermos saber se a matriz é quadrada:
/**
* @return boolean
*/
public boolean isSquare(){
return rows() == columns();
}
Multiplicar a matriz por um número:
/**
* @return Matrix produto da matriz por um numero fornecido
* @param a double multiplicando.
*/
public Matrix product(double a){
return new Matrix(productComponents(a));
}
onde o método productComponents(a) é dado por:
/**
* @return double[][]
* @param a double
*/
protected double[][] productComponents(double a){
int n = this.rows();
int m = this.columns();
double[][] newComponents = new double[n][m];
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++)
newComponents[i][j] = a * components[i][j];
}
return newComponents;
}
Outro método, também bastante útil em cálculo matricial, será obter a matriz transposta da matriz dada:
/**
* @return Matrix transposta da receptora
*/
public Matrix transpose(){
int n = rows();
int m = columns();
double[][] newComponents = new double[m][n];
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++)
newComponents[j][i] = components[i][j];
}
return new Matrix(newComponents);
}
E que tal se quisermos cálcular o produto da matriz por um vector
(vector no sentido matematico porque na realidade é um array)?
Será algo assim:
/**
* Computa o produto da matriz por um
* @return double[]
* @param v double[]
*/
public double[] product(double[] v) throws IllegalArgumentException
int n = this.rows();
int m = this.columns();
if(v.lenght != m)
throw new IllegalArgumentException("Erro no porduto: a matriz " + n +
" por " + m + "nao pode ser multiplicada por um vector " +
"de dimensao " + v.length));
return secureProduct(v);
}
onde secureProduct(v) é dado por
/**
* Computa o produto da matriz com um vector
* @return double[]
* @param v double[]
*/
protected double[] secureProduct(double[] v){
int n = this.rows();
int m = this.columns();
double[] vectorComponents = new double[n];
for(int i = 0; i < n; i++){
vectorComponents[i] = 0;
for(int j = 0; j < m; j++)
vectorComponents[i] += components[i][j] * v[j];
}
return vectorComponents;
}
Continuo a trabalhar em mais alguns métodos.