Capitolo 4: Sottospazi vettoriali.
Un programma che applica il metodo degli scarti.

Esercizi sui sottospazi.

Estrazione di una base da una lista di vettori usando il metodo degli scarti (lezione Prof. Else Abbena).

Supponiamo che abbiate già caricato il file MathMacro.txt (vedere sezione 3 qui sopra). MathMacro.txt contiene, tra gli altri, un programma Base[L], che prende una lista L={b1,...,bn} di vettori di ugual dimensione, e ne estra un sottoinsieme linearmente indipendente che li generi tutti, stampando ogni passo intermedio di calcolo.

Non è richiesto compredere il funzionamento di questo programma, ma solo di saperlo usare. Per curiosità, qui sotto, ma non nel file di testo, solo in quello delle soluzioni, includiamo il testo del programma. Per comprenderlo, è necessario sapere che:
- If[test,a,b] esegue il test, nel caso che il test sia vero esegue a, altrimenti esegue b. If[test,a] esegue il test, nel caso che il test sia vero esegue a, altrimenti non fa nulla.
- Do[body[i],{i,n}] esegue nell'ordine i comandi body[1], body[2], ..., body[n].

In[379]:=

Base[L_] := <br />    <br />    (* controlliamo che L  ... />        <br />Print["Risultato"] ; <br />base]

Sperimentiamo ora il programma Base[...] su alcuni esempi, presi in uno spazio 3D. L'argomento deve essere una lista L = {b1,...,bn} di vettori di ugual lunghezza. Come esempio, scegliamo:
     b1 = {1,1,0}; b2 = 2*b1; b3 = {3,-1,1}; b4 = b1+b3; b5 = {3,0,2}; L = {b1,b2,b3,b4,b5};

In[380]:=

B = Base[{{1}, {2, 3}}]

L'argomento non è una lista di vettori di uguale dimensione

In[381]:=

b1 = {1, 1, 0} ; b2 = 2 * b1 ; b3 = {3, -1, 1} ; b4 = b1 + b3 ; b5 = {3, 0, 2} ; L = {b1, b2, b3, b4, b5} ;

In[387]:=

B = Base[L]

Vett.Base

1     {{1, 1, 0}}

2     {{1, 1, 0}}

3     {{1, 1, 0}, {3, -1, 1}}

4     {{1, 1, 0}, {3, -1, 1}}

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

Risultato

Out[387]=

{{1, 1, 0}, {3, -1, 1}, {3, 0, 2}}

Il risultato consiste dei vettori  non scartati, ed è stato immagazzinato in B:

In[388]:=

B

Out[388]=

{{1, 1, 0}, {3, -1, 1}, {3, 0, 2}}

Per disegnare vettori di B in 3D scaricate (se non l'avete già fatto) il file MathMacro.txt contenente il comando
                    Arrow3D[{x,1,x2,x3},"etichetta"]
L'indirizzo è:
          http://www.di.unito.it/~stefano/MathMacro.txt
Fornite a Mathematica l'indirizzo del file, usando il comando SetDirectory["path_MathMacro.txt"]). Caricate il file con il comando entro Mathematica:
                                  <<MathMacro.txt

In[389]:=

<<MathMacro.txt

INDICE MATHMACRO.TXT            &n ... aseHelp, eccetera. Scrivere MathMacroHelp per leggere tutte le istruzioni in ordine alfabetico. \n

Disegnamo ora b1, b3, b5.

In[390]:=

RowBox[{RowBox[{ConeRadius,  , =,  , 0.2}], ;, a = Arrow3D[B[[1]], "b1"], ;}] b = Ar ... B[[2]], "b3"] ; c = Arrow3D[B[[3]], "b5"] ; Show[a, b, c, ImageSize->700 ]

[Graphics:../HTMLFiles/index_183.gif]

Out[393]=

⁃Graphics3D⁃

Sottraiamo ora gli elementi di B da L (comando Complement[L,B]), ottenendo i vettori "scartati" nella costruzione della base, e disegnamo un grafico g che contenga anch'essi.

In[394]:=

L2 = Complement[L, B]

Out[394]=

{{2, 2, 0}, {4, 0, 1}}

In[395]:=

d = Arrow3D[L2[[1]], "2*b1 (scartato)"] ; e = Arrow3D[L2[[2]], "b1+b3(scartato)"] ; g = Show[a, b, c , d, e, ImageSize->700]

[Graphics:../HTMLFiles/index_188.gif]

Out[397]=

⁃Graphics3D⁃

Alcuni dei vettori scartati di L appartengono al piano S generato da primi due vettori di B, siano essi b1, b3. Verifichiamolo disegnando tale piano come un grafico di nome g'.  
Per definizione, S = {l1*b1+l2*b3|l,mεR}. E' quindi sufficiente disegnare S come grafico 3D parametrico di (l1*b1+l2*b3), dipendente dai parametri l1, l2 (comando ParametricPlot3D[...]).

Suggerimenti. Ripulite prima l1,l2. Date ad l1, l2 un intervallo di valori che comprenda sia 0, 1, sia le soluzioni di b2 = l1*b1 + l2*b3 e di  b4 = l1*b1 + l2*b3 (altrimenti questi vettori spariranno dal grafico).

In[398]:=

Clear[l1, l2] Solve[b2 == l1 * b1 + l2 * b3, {l1, l2}] Solve[b4 == l1 * b1 + l2 * b3, {l1, l2}]

Out[399]=

{{l12, l20}}

Out[400]=

{{l11, l21}}

In[401]:=

g ' = ParametricPlot3D[l1 * b1 + l2 * b3, {l1, 0, 2}, {l2, 0, 1}, Boxed->False]

[Graphics:../HTMLFiles/index_194.gif]

Out[401]=

⁃Graphics3D⁃

Per disegnarei vettori ed il piano insieme, basterà infine sovrapporre il grafico g' di S al grafico g dei vettori b1, b2, b3, b4, b5 (il comando è Show[g,g']).

In[402]:=

Show[g, g ', <br />    Boxed->False, ImageSize->700]

[Graphics:../HTMLFiles/index_197.gif]

Out[402]=

⁃Graphics3D⁃


Created by Mathematica  (August 4, 2004)