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.

Deixar uma Resposta