O Quadrado Mágico de Dirichlet

Johann Peter Gustav Lejeune Dirichlet foi um matemático alemão - 13 de fevereiro de 1805 - 5 de maio de 1859 que fez profundas contribuições à teoria dos números. Criou, inclusive o campo de Teoria Analítica de Números, e à teoria da Série de Fourier e outros tópicos em mathematical analysis. Ele tem o crédito de ser o primeiro matemático a dar uma definição formal moderna do que é uma função.

Os quadrados mágicos de Dirichlet são bem descritos nas apresentações de Olivier Druet. Seu primeiro exemplo é mostrada à esquerda. Ele consiste de uma matriz rodeada por números aleatórios cujos números interiores são iguais a média aritimética dos seus vizinhos. Assim, se são dados os números exteriores da matriz, o primeiro elemento da matriz, por exemplo, é a média aritimética de (5 + 7 + 7 + 5)/4 = 6. O terceiro elemento diagonal, 8 = ( 6 + 10 + 10 + 6)/4 etc.

O problema consiste em: Dados os elementos exteriores, como determinar todos os elementos interiores

Para verificar uma prova do método, por favor, entre uma dimensão desejada da matriz (por favor não exagere):

Primeira tentativa

A primeira tentativa consistiria em escrever as equações para todas as definições, considerando uma matriz A com n×n elementos. Para o exemplo acima, temos que resolver uma matrix de 4×4, de forma que a matriz de trabalho seria de 6×6, n = 6.
a00 a01 a02 . . . a0n
a10 a11 a12 . . . a1n
. . .
an0 an1 an2 . . . ann

Para o exemplo acima vemos que podemos construir 16 equações lineares de primeira ordem com 16 colunas. Assim, para o exemplo, nós teríamos

a11 = (a10 + a01 + a12 + a21)/4 ou -4a11 + a12 + a21 = -(a01 + a10) ( 1)
a12 = (a11 + a02 + a13 + a22)/4 ou a11 - 4a12 + a13 + a22 = -a02 ( 2)
a13 = (a12 + a03 + a14 + a23)/4 ou a12 - 4a13+ a14 + a23 = -a03 ( 3)
a14 = (a13 + a04 + a15 + a24)/4 ou a13 + a15 - 4a14+ a24 = -a04 ( 4)
. . . . . . . . . .
a44 = (a43 + a34 + a45 + a54)/4 ou a43 + a34 - 4a44 = -(a45 + a5) (16)

Isto pode ser representado como um sistema de equações lineares da forma
| A | × | x | = | k |, cuja solução é
| x | = | A |-1 × | k |.
Isto é, os valores internos são vetores resultantes da multiplicação da matriz inversa de A com as constantes externas.

0 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44         
  | -4 10010000 000000 0 |   | a11 |   | -a01 - a10 |
  | 1 -4 1 0 0 1 00000000 0 0 |   | a12 |   | -a02 |
  | 0 1 -4 1 0 0 10000000 0 0 |   | a13 |   | -a03 |
  | 0 0 1 -4 0 0 0 1000000 0 0 |   | a14 |   | -a04 - a15 |
  | 1 0 0 0 -4 1 0 0 1 00000 0 0 |   | a21 |   | -a20 |
  | 0 1 0 0 1 -4 10 0 10000 0 0 |   | a22 |   | 0 |
  | 0 0 1 0 0 1 -4 1 0 0 1 00 0 0 0 |   | a23 |   | 0 |
  | 0 0 0 1 0 0 1 -4 00 0 100 0 0 |   | a24 |   | -a25 |
  | 0 0 0 0 1 0 0 0 -4 10 0 10 0 0 | x | a31 | = | -a30 |
  | 0 0 0 0 0 1 0 0 1 -4 10 0 1 0 0 |   | a32 |   | 0 |
  | 0 0 0 0 0 0 1 0 0 1 -4 10 0 1 0 |   | a33 |   | 0 |
  | 0 0 0 0 0 0 0 1 00 1 -4 00 0 1 |   | a34 |   | -a35 |
  | 0 0 0 0 0 0 0 0 1 00 1 -4 1 0 0 |   | a41 |   | -a40 - a51 |
  | 0 0 0 0 0 0 0 0 0 100 1 -4 1 0 |   | a42 |   | -a52 |
  | 0 0 0 0 0 0 0 0 00 100 1 -4 1 |   | a43 |   | -a53 |
  | 0 0 0 0 0 0 0 0 000 100 1 -4 |   | a44 |   | -a45 - a54 |

Note que a00, a0n, an0, ann não são usados e a0x, ax0 e axn são constantes dadas. Assim, temos que resolver (n-2) equações com (n-2) variáveis. Então, se uma matriz A tem uma inversa, existe uma solução para o quadrado mágico de Dirichlet. Note também que A aparenta ser uma matriz esparsa, de forma que o seu processo de inversão deve ser rápído, sabendo escolher o algorítimo de inversão apropriado.

Valores para o exemplo de Druet são mostrados abaixo. Estas matrizes pode ser selecionadas, copiadas e coladas em qualquer resolvedor de equações lineares disponíveis na internet para encontrar o resultado. Por exemplo, você pode usar BlueBit - Linear Equations Solver.

Segunda tentativa

Outra solução, mais adequada e simples já que inversão de matrizes pode ser desgastante em programação de computadores é resolver as equações por aproximação sucessiva. Se lembrarmos que zero é a média aritimética se todos seus termos são nulos e que a média é sempre menor que o menor número que a compõe, não importando se usamos números negativos, inteiros, reais, etc, Podemos começar preenchendo a matriz com zeros, calculando a média de cada um, substituindo cada um deles e continuando a calcular até que a variação entre dois valores calculados seja menor que um valor de erro previamente escolhido. Assim, podemos calcular até atingirmos o número de casas decimais com a precisão selecionada que nos agrade. Você pode também limpar a matriz com um click sobre "Limpar matriz".


Você pode mudar os valores externos da matriz. Caso contrário, os números externos são gerados aleatoriamente entre -100 a +100. Você pode alterar a precisão de cálculo alterando o valor do "Erro máximo". Não é aconselhável utilizar matrizes com dimensões muito altas (acimade 20). É interessantes também notar que o número de iterações necessárias para conseguir uma solução adequada raramente é grande. Você poderá, por favor, gerar uma matriz quadrada 4x4 aleatória, inserir os dados de Olivier do exemplo acima e executar uma tentativa. O número máximo de iterações deste serviço foi limitado a 10.000. Esperamos que você não chegue a tanto. Aproveite.

   © Daniel Martins