Negocio

Multiplicando matrizes em Java

Matrizes

Uma matriz é uma tabela de números organizados em linhas e colunas. Pense em criar uma tabela no Microsoft Word. Você pode criar qualquer combinação de linhas e colunas. Uma matriz é descrita em termos do número de linhas vezes o número de colunas. Por exemplo, 3 x 3 é uma matriz com três linhas e três colunas.

Matriz básica

Matrizes de multiplicação

Ao multiplicar matrizes, há algumas coisas a lembrar. A multiplicação da matriz não é comutativa. Para poderem multiplicar matrizes, eles devem atender a um requisito. O número de colunas na primeira matriz deve ser igual ao número de linhas na segunda matriz. O tamanho da matriz resultante será determinado pelo número de linhas na primeira matriz e pelo número de colunas na segunda matriz. Neste exemplo, a matriz inicial possui 3 colunas e a segunda matriz possui 3 linhas, para que possam ser multiplicadas. A matriz resultante será 3 x 3.

método de ponto de multiplicação de matriz

Para multiplicar matrizes, encontramos o produto escalar . Multiplicamos cada um dos termos na primeira linha (3, 5, 7) pelos termos correspondentes na primeira coluna (1, 7, 13) da segunda matriz e, em seguida, somamos esses números. Se parece com isso:

(3 * 1) + (5 * 7) + (7 * 13) = 129

Continuamos a fazer isso para cada termo na matriz resultante. Agora, poderíamos fazer tudo isso manualmente, mas temos uma ferramenta poderosa à nossa disposição, o Java. Com um pouco de esforço de codificação, podemos escrever uma rotina que multiplicará nossas matrizes.

Multiplicando matrizes em Java

Primeiro, vamos revisar como Java verá nossas matrizes. Em Java, criamos arrays bidimensionais (linhas / colunas) para armazenar nossos dados. As linhas e colunas serão referenciadas da seguinte maneira. Lembre-se de que o Java começa a contar do zero!

Exemplo de matriz Java

Agora podemos definir a matriz que abordamos anteriormente em nosso código. Para criar uma matriz, usamos um array bidimensional, int [] [] myMatrix. Para pré-preencher a matriz, toda a matriz é denotada por colchetes. Cada linha tem seu próprio conjunto de chaves.

int [] [] minhaMatrizA = { 
  {3,5,7},
  {9,17,12},
  {32,21,5}
};
int [] [] minhaMatrizB = {
  {1,3,5},
  {7,9,11},
  {13,15,17}
};

Agora vem a parte complicada. Teremos TRÊS loops aninhados que percorrem as linhas da primeira matriz e, em seguida, descem pelas colunas da segunda matriz. Esses loops cuidarão da matemática, mas temos que configurá-los corretamente.

Primeiro, vamos reservar um momento para configurar alguns contadores para nossos loops. Em seguida, criamos variáveis ​​para contar as linhas e colunas de cada matriz. Precisamos deles para saber quando parar o processamento (não podemos ir além do final do array ou haverá mensagens de erro desagradáveis). Finalmente, processamos a multiplicação do array. O código segue a mesma lógica matemática que descrevemos acima.

Nota: Este código funcionará SOMENTE para uma matriz 2 x 3. Se você inverter para uma matriz 3 x 2, terá erros. Em outras palavras, o número de colunas na Matriz A deve ser igual ao número de linhas na Matriz B.

// contadores 
int i, j, k, m, n;
// linhas e colunas para cada matriz
int rowsA = myMatrixA.length;
int colsA = myMatrixA [0] .length;
int rowsB = myMatrixB.length;
int colsB = myMatrixB [0] .length;
// nova matriz para conter o resultado
int [] [] minhaMatrizC = new int [rowsA] [colsB];
// começa nas linhas de A
para (i = 0; i <linhasA; i ++) {
  // trabalha nas colunas de B
// o loop for só funciona para a matriz 2 x 3
  para (j = 0; j <colsB; j ++) {
   // agora complete a adição e multiplicação
   para (k = 0; k <colsA; k ++) {
    minhaMatrizC [i] [j] + = minhaMatriz [i] [k] * minhaMatrizB [k] [j];
   }
  }
}

A seguir, queremos mostrar o resultado do nosso trabalho. Mais uma vez, vamos precisar de um loop ‘for’ para percorrer cada linha / coluna da nova matriz. O loop final completa o cálculo que discutimos anteriormente (o sinal + = adiciona o produto final da multiplicação de linha / coluna). Pode parecer estranho ter um terceiro loop, já que estamos multiplicando apenas duas matrizes, mas temos que fazer as funções de multiplicação e adição E criar uma terceira matriz!

System.out.println ("Multiplicando A e B é igual a:"); 
  para (m = 0; m <myMatrixC.length; m ++) {
   para n = 0; n <myMatrixC [0] .length; n ++) {
    System.out.print (myMatrixC [m] [n] + "");
   }
    System.out.println ();
  }

Quando executamos a saída, o seguinte é exibido. Lembre-se de que o primeiro valor que determinamos foi 129:

Saída de multiplicação de matrizes Java

Java nos salvou muitos cálculos manuais, embora a etapa original possa parecer complicada. Apenas lembre-se de começar na primeira linha da primeira matriz e, em seguida, trabalhar na primeira coluna da segunda matriz e multiplicar. Isso requer vários loops for aninhados. Pode ajudar a rotular suas variáveis ​​de contador como linhaA ou colunaB.

Em nosso exemplo, fornecemos os valores para as matrizes. Em seus programas Java, você solicitará que o usuário insira o valor ou receberá os valores de outra função no programa. Se você fizer isso, você precisará verificar se há matrizes inválidas.

Matrizes Inválidas

Uma matriz não é tecnicamente inválida, mas há duas questões a serem consideradas ao tentar multiplicá-las. Você deve ter o mesmo número de colunas na primeira matriz e de linhas na segunda. Além disso, a matriz resultante (o produto) corresponderá ao número de linhas da primeira e das colunas à segunda.

Pode parecer confuso, mas lembre-se do problema original de matemática que resolvemos antes. Atravessamos as linhas e descemos as colunas.

Para verificar matrizes válidas, poderíamos adicionar uma instrução ‘if’. Aqui está um exemplo, adicionado ao nosso código anterior:

int rowsA = myMatrixA.length; 
int colsA = myMatrixA [0] .length;
int rowsB = myMatrixB.length;
int colsB = myMatrixB [0] .length;
// teste para igualdade
if (colsA! = rowsB) {
  System.out.println ("Matrizes incompatíveis!");
}

Resumo da lição

Vamos revisar rapidamente o que aprendemos sobre a multiplicação de matrizes em Java.

Uma matriz é uma tabela de valores organizados em linhas e colunas. Multiplicar matrizes em Java envolve a criação de matrizes bidimensionais e loops for aninhados para atravessar as matrizes e concluir a matemática. Ao multiplicar uma matriz, você começa na primeira linha da primeira matriz e desce na primeira coluna da segunda, e então repete para todos os demais valores. Cada par (linha / coluna) é multiplicado e adicionado ao total desse par linha / coluna.