Pergunta

Isto é o que eu tenho até agora, mas eu não acho que isso é certo.

for (int i = 0 ; i < 5; i++)
{
    for (int j = 0;  j < 5; j++)
    {
        matrix[i][j] += matrix[i][j] * matrix[i][j];
    }
}
Foi útil?

Solução

Eu não acho que você pode multiplicar uma matriz por si só no local.

for (i = 0; i < 5; i++) {
    for (j = 0; j < 5; j++) {
        product[i][j] = 0;
        for (k = 0; k < 5; k++) {
            product[i][j] += matrix[i][k] * matrix[k][j];
        }
    }
}

Mesmo se você usar uma multiplicação de matrizes menos ingênuo (ou seja, algo que não seja este o (n 3 ) algoritmo), você ainda precisa de armazenamento extra.

Outras dicas

Sugestão:., Se não é uma lição de casa não escrever suas próprias rotinas de álgebra linear, use qualquer uma das muitas bibliotecas revisados ??por pares que estão lá fora

Agora, sobre seu código, se você quer fazer um termo pelo termo produto, então você está fazendo errado, o que está fazendo é atribuir a cada valor é quadrado mais o valor original (n*n+n ou (1+n)*n, qualquer que seja você gosta melhor)

Mas se você quer fazer uma multiplicação de matrizes autêntica no sentido algébrico, lembre-se que você tinha que fazer o produto escalar das primeiras linhas da matriz pelas segunda colunas de matriz (ou o contrário, eu não estou muito certo agora ) ... algo como:

for i in rows:
    for j in cols:
        result(i,j)=m(i,:)·m(:,j)

e o produto escalar "·"

v·w = sum(v(i)*w(i)) for all i in the range of the indices.

Claro que, com este método você não pode fazer o produto no lugar, porque você vai precisar os valores que você está substituindo nas próximas etapas.

Além disso, explicar um pouco o comentário de mais Tyler McHenry, como um consecuence de ter de linhas multiplicar por colunas, o " dimensões internas " (não tenho certeza se essa é a terminologia correta) de as matrizes devem coincidir (se A é m x n, B é n x o e A*C é m x o), então no seu caso, uma matriz pode ser quadrado só se for quadrada (he he he).

E se você só quer jogar um pouco com matrizes, então você pode tentar Octave, por exemplo; quadratura uma matriz é tão fácil como M*M ou M**2.

Isso não é qualquer definição de multiplicação de matrizes que eu já vi. A definição padrão é

for (i = 1 to m)
   for (j = 1 to n)
      result(i, j) = 0
      for (k = 1 to s)
         result(i, j) += a(i, k) * b(k, j)

para dar o algoritmo em uma espécie de pseudo-código. Neste caso, é uma matriz de m x s e b é um s x n, o resultado é um m x n, e os subscritos começar com uma ..

Note que multiplicar uma matriz no lugar está indo para obter a resposta errada, uma vez que vai ser substituir valores antes de usá-los.

Tem sido muito tempo desde que eu fiz a matemática matriz (e eu só fiz um pouco dele, em cima), mas o operador += assume o valor de matrix[i][j] e acrescenta-lhe o valor de matrix[i][j] * matrix[i][j], o que eu don 't acho que é o que você quer fazer.

Bem, parece que o que está fazendo é a quadratura do linha / coluna, em seguida, adicioná-lo à linha / coluna. É isso que você quer que ele faça? Se não, então alterá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top