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