Gram-Schmidt: un metodo per generare una base ortonormale data  una lista di vettori.

    Il metodo Gram-Schmidt consente di prendere un qualunque insieme L di vettori linearmente indipendenti, e di generare una base ortonormale equivalente ad L. Il comando in Mathematica è GramSchmidt, nel pacchetto LinearAlgebra`Orthogonalization`.
    Nel file MathMacro.txt, nel sito del corso, potete trovare il comando BaseOrt[ListaVettori], che prende una lista L di vettori qualunque, e genera una base ortonormale dello spazio vettoriale generato da L, stampando i calcoli svolti ad ogni passo. I vettori linearmente dipendenti dai vettori precedenti vengono scartati.
     Il comando GramSchimdt è più veloce ma richiede dei vettori linearmenti indipendenti. Il comando BaseOrt è pi lento ma si applica anche liste di vettori linearmente dipendenti.

    GramSchmidt. Iniziamo a sperimentare GramSchmidt. Ricordatevi di scaricare prima il pacchetto relativo.

In[450]:=

<<LinearAlgebra`Orthogonalization`

In[451]:=

L = {{0, 1, 1}, {2, 3, 5}, {0, 1, 0}} Dimensions[L]

Out[451]=

{{0, 1, 1}, {2, 3, 5}, {0, 1, 0}}

Out[452]=

{3, 3}

In[453]:=

GramSchmidt[L]

Out[453]=

{{0, 1/2^(1/2), 1/2^(1/2)}, {2/3^(1/2), -1/6^(1/2), 1/6^(1/2)}, {1/3^(1/2), 1/3^(1/2), -1/3^(1/2)}}

Se la lista L è linearmente dipende il comando GramSchmidt[L] può fallire.

In[454]:=

L = {{0, 1, 1}, {2, 3, 5}, {0, 1, 0}, {7, 3, 4}, {0, 1, 2}} Dimensions[L] GramSchmidt[L]

Out[454]=

{{0, 1, 1}, {2, 3, 5}, {0, 1, 0}, {7, 3, 4}, {0, 1, 2}}

Out[455]=

{5, 3}

GramSchmidt :: zeromag : The magnitude of  {0, 0, 0} was zero under the inner product Dot. This suggests that the vectors are linearly dependent.

Out[456]=

{{0, 1/2^(1/2), 1/2^(1/2)}, {2/3^(1/2), -1/6^(1/2), 1/6^(1/2)}, {1/3^(1/2), 1/3^(1/2), -1/3^(1/2)}, {0, 0, 0}, {0, 0, 0}}

    BaseOrt. Per scaricare BaseOrt, usate SetDirectory["path"] per dare l'indirizzo del file MacroMath.txt di macro del corso. Quindi scrivere MathMacro.txt.

In[457]:=

(* Un comando che mette in grassetto un testo *)<br />BoldFace[s_] := StyleForm[s,, FontWeight->"Bold"] ;

In[458]:=

BaseOrt[L_] := Block[<br />        <br />  & ...  ottenuta la base ortonormale"] ; <br />        base]

Sperimentiamo BaseOrt su una lista di vettori L linearmente dipendenti.

In[459]:=

L = {{0, 1, 1}, {2, 3, 5}, {0, 1, 0}, {7, 3, 4}, {0, 1, 2}} Dimensions[L]

Out[459]=

{{0, 1, 1}, {2, 3, 5}, {0, 1, 0}, {7, 3, 4}, {0, 1, 2}}

Out[460]=

{5, 3}

In[461]:=

BaseOrt[L]

Passo n.1 :

Vettore L[[1]] =  {0, 1, 1}  trasformato in: \n {0, 1/2^(1/2), 1/2^(1/2)}

Passo n.2 :

Vettore L[[2]] =  {2, 3, 5}  trasformato in: \n {2/3^(1/2), -1/6^(1/2), 1/6^(1/2)}

Passo n.3 :

Vettore L[[3]] =  {0, 1, 0}  trasformato in: \n {1/3^(1/2), 1/3^(1/2), -1/3^(1/2)}

Passo n.4 :

Vettore L[[4]] =  {7, 3, 4}  scartato

Passo n.5 :

Vettore L[[5]] =  {0, 1, 2}  scartato

Risultato:si è ottenuta la base ortonormale

Out[461]=

{{0, 1/2^(1/2), 1/2^(1/2)}, {2/3^(1/2), -1/6^(1/2), 1/6^(1/2)}, {1/3^(1/2), 1/3^(1/2), -1/3^(1/2)}}


Created by Mathematica  (August 4, 2004)