Um amigo pediu-me se o ajudava a construir um programa que fizesse o seguinte: dada uma lista de números inteiros distintos construir uma matriz dois por dois com entradas nessa lista; calcular o valor do raio espectral de cada uma dessas matrizes e construir uma lista com esses valores e, finalmente, contar quantos diferentes existem. Disse-lhe que isso se fazia em 10 minutos em Octave. E fez-se. O resultado não foi este:

function retval=maxeig(a)
  n=length(a);
  retval=[];
  for niter=1:n
    lambda=[];
    for i=1:niter
      for j=1:niter
        for k=1:niter
          for l=1:niter
            b=[a(i) a(j);a(k) a(l)];
            meig=floor(10^6*max(eig(b)))/10^6;
            if 1-ismember(meig,lambda)
              lambda=[lambda meig];
            else;
            endif;
          endfor;
        endfor;
      endfor;
    endfor;
    retval=[retval length(lambda)];
  endfor;
endfunction;

Há de facto algumas coisas estranhas sobre os resultados que se obtêm. Por exemplo as progressões geométricas 2 4 8 16 23 ... e 3 9 27 81 243 ... dão a mesma sequência de valores para o número de raios espectrais diferentes

octave> n=[1:4];maxeig(2.^n)
ans =

    1    7   24   58

octave> n=[1:4];maxeig(5.^n)
ans =

    1    7   24   58

Aparentemente as progressões geométricas são aquelas para os quais os elementos dessa lista são os mais pequenos. O facto dessa lista ser esta coisa Diagonal in array of n-gonal numbers A081422 é também um mistério para mim. Note-se que apenas dei 4 valores na sequência de valores dos raios espectrais diferentes, o código anterior é numérico e por isso para valores grandes das progressões os resultados estão errados. Talvez uma versão do mesmo programa em Maxima resolva o problema com manipulação simbólica.

Created: NaN

Last updated: 16-02-2026 [16:02]


For attribution, please cite this page as:

Charters, T., "Brincadeiras com matrizes": https://nexp.pt/maxeigx.html (16-02-2026 [16:02])


(cc-by-sa) Tiago Charters - tiagocharters@nexp.pt