Ciò è utile perché ogni matrice circolante $C$ di ordine n e a valori reali può essere a sua volta decomposta in $C=F^{H}ΛF$, dove $F$ è la matrice di Fourier di ordine $n$, $F^{H}$ la sua trasposta coniugata e $Λ=diag(λ_0,λ_1,...,λ_{n-1})$ la matrice contenente gli autovalori di $C$, i quali possono essere calcolati usando $λ_j=sum_{k=0}^{n-1} c_k*e^(-2*pi*i*j*k/n)$, con $j=0,...,n-1$, $i$ unità immaginaria e $c_k$ l'elemento k-esimo della prima riga $c$ di $C$, ossia $c=[c_0,c_1,...,c_(n-1)]$.
Inoltre, una matrice $W$ di ordine $n$ è chiamata matrice {ω}-circolante se ha la decomposizione $W=Ω^HF^HΛFΩ$, dove $H$ indica la trasposta coniugata, $F$ la matrice di Fourier, $Λ$ la matrice diagonale contenente gli autovalori di $W$, e $Ω=diag{1,ω^(-1/n),ω^(-2/n),...,ω^(-(n-1)/n)}$ dove $ω=e^(i*θ)$ con $θ in [-pi,pi]$. Nel nostro caso si ha $ω=1$ per $U$ e $ω=-1$ per $V$.
Dato che, come ho detto, $T$ è simmetrica, è facile costruire $U$ e $V$. Detto $t=(t_0,t_1,...,t_(n-1))$ il vettore che genera $T$, ossia $T=$toeplitz$(t)$, si ha $U=$toeplitz$([t_0,t_1+t_(n-1),t_2+t_(n-2),...,t_(n-1)+t_1])$ e $V=$toeplitz$([t_0,t_1-t_(n-1),t_2-t_(n-2),...,t_(n-1)-t_1])$.
Ho provato a decomporre in questo modo una piccola matrice su matlab, sono riuscito a:
- creare $U$ e $V$
- verificare che $U+V=T$
- calcolare gli autovalori di $U$ usando la formula di cui sopra
- decomporre $U$ e verificare che la decomposizione coincide con $U$
Non sono riuscito a:
- calcolare gli autovalori corretti di $V$ (quelli da me calcolati sono diversi da quelli calcolati usando il comando di default $eig(V)$)
- verificare che la decomposizione di $V$ coincide con $V$ (nemmeno usando gli autovalori calcolati con il comando di default esse risultano uguali)
Quindi deve esserci un errore da qualche parte, ecco il codice che ho usato, qualcuno sa aiutarmi?
- Codice:
A = magic(3);
t = A(1,:);
n = length(t);
T = toeplitz(t);
% creating the Fourier matrix ------------
F = ones(n);
f = zeros(n-1);
w = exp(-2*pi*1i/n);
for i = 1:n-1
for j = i:n-1
f(i,j) = w^(i*j);
end
end
F(2:end,2:end) = f - diag(diag(f)) + f.';
F = 1/sqrt(n)*F;
% creating U and V ------------
u = zeros(1,n);
u(1) = 1/2*t(1);
v = zeros(1,n);
v(1) = 1/2*t(1);
for i = 2:n
u(i) = 1/2*(t(i) + t(n-(i-2)));
v(i) = 1/2*(t(i) - t(n-(i-2)));
end
U = toeplitz(u);
V = toeplitz(v);
% U+V==T
% eigenvalues of U ------------
eigU = zeros(1,n);
for j = 1:n
for k = 0:n-1
eigU(j) = eigU(j) + u(k+1)*exp(-2*pi*1i*(j-1)*k/n);
end
end
% F'*diag(eigU)*F
% U
% eigenvalues of V ------------
eigV = zeros(1,n);
omega = zeros(1,n);
w = -1;
for j = 1:n
for k = 0:n-1
eigV(j) = eigV(j) + v(k+1)*exp(-2*pi*1i*(j-1)*k/n);
end
omega(j) = w^(-(j-1)/n);
end
diag(omega)'*F'*diag(eigV)*F*diag(omega)
F'*diag(eigV)*F
V