Decomposizione di una matrice di Toeplitz come somma di due matrici Circolanti

Messaggioda Rabelais » 12/10/2017, 14:26

Salve, devo risolvere un sistema lineare $Tx=b$ in cui $T$ è una matrice di toeplitz simmetrica di ordine $n$. Ogni matrice di toeplitz può essere decomposta nella somma di una matrice circolante $U$ e una anti?(skew)-circolante $V$, ossia $T=U+V$.

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
Rabelais
Junior Member
Junior Member
 
Messaggio: 96 di 194
Iscritto il: 07/06/2016, 16:21

Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite