Sperimentazioni per le matrici di compagnia

Faremo qui vedere alcuni esempi che riguardano l'utilizzo delle matrici di compagnia.

Matlab fornisce alcune funzioni che ci sono utili per ottenere una matrice di compagnia: la funzione ``poly'', che riceve un vettore contenente gli autovalori, restituisce un vettore contenente i coefficienti del polinomio che ha come radici i valori contenuti nel vettore di input; la funzione ``compan'' genera la matrice di compagnia utilizzando i valori del vettore in ingresso per calcolare il valore degli elementi della prima riga.

Vediamo un utilizzo:

» v=poly([17;3;12])

v =

     1   -32   291  -612

» A=compan(v)

A =

    32  -291   612
     1     0     0
     0     1     0

» eig(A)

ans =

  16.99999999999995
  12.00000000000003
   3.00000000000000

» [l,i]=potenze(A, rand(3,1), 10e-15, 2000)

l =

  17.00000000000039


i =

    88

»

Quello che abbiamo fatto è stato generare il vettore ``v'' dei coefficienti del polinomio avente come radici tramite la funzione ``poly'', dopo di che abbiamo costruito la matrice di compagnia con la funzione ``compan''; per essere certi che gli autovalori della matrice $A$ fossero proprio gli elementi del vettore parametro di ``poly'' abbiamo richiamato nuovamente la funzione ``eig'' che ci ha confermato la bontà delle operazioni svolte fin ora; infine abbiamo eseguito il nostro codice ottenendo il risultato desiderato. Si vuol far notare anche come l'algoritmo, eseguito numerose volte sullo stesso esempio, abbia mantenuto praticamente sempre lo stesso comportamento: converge verso la medesima soluzione in un numero costante di passi, , anche con valori del vettore iniziale sempre diversi.

Ora vogliamo evidenziare una ben precisa caratteristica delle matrici, ma per fare questo proponiamo prima due esempi per poi trarne le conclusione solo dopo un loro esame:

Primo esempio:

» v=poly([-1,2,-4,3,1+i,1])

v =

  Columns 1 through 2

  1.00000000000000                     -2.00000000000000 - i

  Columns 3 through 4

-14.00000000000000 + 1.00000000000000i 40.00000000000000 + 15i

  Columns 5 through 6

-11.00000000000000 -25.00000000000000i-38.00000000000000 -14i

  Column 7

 24.00000000000000 +24.00000000000000i

» A=compan(v)

A =

  Columns 1 through 2

  2.00000000000000 + 1.00000000000000i 14.00000000000000 - i
  1.00000000000000                                     0
                 0                      1.00000000000000
                 0                                     0
                 0                                     0
                 0                                     0

  Columns 3 through 4

-40.00000000000000 -15.00000000000000i 11.00000000000000 +25i
                 0                                     0
                 0                                     0
  1.00000000000000                                     0
                 0                      1.00000000000000
                 0                                     0

  Columns 5 through 6

 38.00000000000000 +14.00000000000000i-24.00000000000000 -24i
                 0                                     0
                 0                                     0
                 0                                     0
                 0                                     0
  1.00000000000000                                     0

» [l,i]=potenze(A, rand(6,1), 10e-15, 2000)

l =

 -4.00000000000001 + 0.00000000000001i


i =

   121

»

Il secondo esempio:

» v=poly([-1,2,-4,3,1+i,1-i])

v =

     1    -2   -13    40   -26   -28    48

» A=compan(v)

A =

     2    13   -40    26    28   -48
     1     0     0     0     0     0
     0     1     0     0     0     0
     0     0     1     0     0     0
     0     0     0     1     0     0
     0     0     0     0     1     0

» [l,i]=potenze(A, rand(6,1), 10e-15, 2000)

l =

  -3.99999999999998


i =

   113

»

Tralasciando la brutta forma del primo esempio, veniamo a quanto ci interessa: se si guarda con attenzione il vettore che contiene gli autovalori nel primo esempio si nota un numero complesso, mentre nel secondo ce ne sono due; di più, i due numeri complessi del secondo esempio non sono slegati tra di loro, ma anzi, sono uno il complesso coniugato dell'altro. Se si riguarda ancora la matrice del primo esempio si nota come questa sia una matrice complessa, mentre la matrice del secondo esempio è una matrice reale. In ogni caso l'algoritmo converge alla soluzione attesa. Quello che si voleva far notare è che la presenza di valori complessi, uniti ai loro complessi coniugati, tra gli autovalori rende la matrice reale, mentre la presenza di numeri complessi senza i coniugati rende la matrice complessa.

Abbiamo utilizzato le matrici di compagnia per verificare quello che può essere formulato come

Teorema 1   Se $A$ è reale e $\lambda$ è un suo autovalore, allora

Morpheus 2004-01-04