Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Multiplicação de matrizes em Js

Olá, então, estou estudando criptografia em minha escola e achei legal a ideia de criar um programa Js para criar um exemplo sobre o assunto. Pesquisei na internet alguns códigos para me basear e acabei achando nesse link https://stackoverflow.com/questions/27205018/multiply-2-matrices-in-javascript. Analisei o código e alterei alguns valores para ele se tornar útil pra mim, mas deu a seguinte mensagem de erro: "Uncaught TypeError: Cannot read property '0' of undefined at multiply (trabalho.mat.html:17) at trabalho.mat.html:39"

JS:

<!DOCTYPE html>
<head>

</head>

<body>
    <script type="text/javascript">
function multiply(a, b) {
  var aNumRows = a.length, aNumCols = a[0].length,
      bNumRows = b.length, bNumCols = b[0].length,
      m = new Array(aNumRows);  // initialize array of rows
  for (var r = 0; r < aNumRows; ++r) {
    m[r] = new Array(bNumCols); // initialize the current row
    for (var c = 0; c < bNumCols; ++c) {
      m[r][c] = 0;             // initialize the current cell
      for (var i = 0; i < aNumCols; ++i) {
        m[r][c] += a[r][i] * b[i][c];
      }
    }
  }
  return m;
}

function display(m) {
  for (var r = 0; r < m.length; ++r) {
    document.write('  '+m[r].join(' ')+'<br />');
  }
}

var a = [[1, 27, 1, 22, 5, 14, 20, 18], [1, 27, 5, 19, 20, 28, 27, 12], [28, 27, 6, 15, 18, 1, 30, 32]],

    b = [[1, 2, 3], [0, 1, 4], [0, 0, 1]];

document.write('matrix a:<br />');
display(a);
document.write('matrix b:<br />');
display(b);
document.write('a * b =<br />');
display(multiply(a, b));
</script>
</body>
</html>

Além disso, uma observação que eu tive é que se você substituir o "a" pelo "b" o código funciona:

<!DOCTYPE html>
<head>

</head>

<body>
    <script type="text/javascript">
function multiply(a, b) {
  var aNumRows = a.length, aNumCols = a[0].length,
      bNumRows = b.length, bNumCols = b[0].length,
      m = new Array(aNumRows);  // initialize array of rows
  for (var r = 0; r < aNumRows; ++r) {
    m[r] = new Array(bNumCols); // initialize the current row
    for (var c = 0; c < bNumCols; ++c) {
      m[r][c] = 0;             // initialize the current cell
      for (var i = 0; i < aNumCols; ++i) {
        m[r][c] += a[r][i] * b[i][c];
      }
    }
  }
  return m;
}

function display(m) {
  for (var r = 0; r < m.length; ++r) {
    document.write('  '+m[r].join(' ')+'<br />');
  }
}

var b = [[1, 27, 1, 22, 5, 14, 20, 18], [1, 27, 5, 19, 20, 28, 27, 12], [28, 27, 6, 15, 18, 1, 30, 32]],

    a = [[1, 2, 3], [0, 1, 4], [0, 0, 1]];

document.write('matrix a:<br />');
display(a);
document.write('matrix b:<br />');
display(b);
document.write('a * b =<br />');
display(multiply(a, b));
</script>
</body>
</html>
1 resposta
solução!

Eu acabei conseguindo resolver dps. O problema está nesta linha: que basicamente aborda a lei de formação de uma matriz:

        m[r][c] += a[r][i] * b[i][c];

ou seja, o problema estava na quantidade de linhas e colunas na matriz A c/ a B. A partir disso deixei ambas as matrizes com o 5x5 e o código rodou sem problemas!