Capitolo 3: Calcolo vettoriale.

Come definire un comando per disegnare Vettori nello spazio
(leggere ed eseguire quanto richiesto).

Cosa bisogna fare subito. Prima di utilizzare il comando Arrow3D[...] è necessario scaricare dall'indirizzo:
            http://www.di.unito.it/~stefano/MathMacro.txt
il file MathMacro.txt. Copiatelo nello stessa cartella delle dispense, quindi eseguite il comando:
                                  SetDirectory["AttualeIndirizzoMathMacro"];
                                  <<MathMacro.txt

In[328]:=

(* al posto di C :/MyDocuments voi dovete inserire l ' indirizzo di MathMacro . txt nella VOSTRA home *)<br />SetDirectory["C:/MyDocuments"] ; <<MathMacro.txt

SetDirectory :: cdir : Cannot set current directory to C:/MyDocuments.  More…

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

Il comando Arrow3D. Nel file "MathMacro.txt", contenuto nel sito del corso, viene tra l'altro definito un comando
               Arrow3D[{x1,y1,z1},  {x2,y2,z2},  "etichetta"]
per disegnare un vettore da (x1,y1,z1) a (x2,y2,z2) come un segmento con punta conica, e una certa etichetta (che deve essere scritta tra virgolette). Il raggio del cono vale 0.1; per modificarlo, è sufficiente dare il comando:
                      ConeRadius = nuovovalore;
Arrow3D disegna il vettore nullo come una punta rivolta (arbitrariamente) verso l'alto, e priva di asta. L'etichetta si può omettere.

Casi particolari. Nel caso il vettore parta dall'origine (nel caso siano x1=y1=z1=0), si possono omettere {x1,y1,z1}. E' sufficiente scrivere:
                               Arrow3D[{x2,y2,z2}, etichetta]
  Di nuovo, l'etichetta si può omettere. I vettori così ottenuti vanno visualizzati con il comando Show:
    Show[
             Arrow3D[{x1,y1,z1},{x2,y2,z2}],
            Arrow3D[{x1,y1,z1},{x2,y2,z2}],
            ...]

Provate alcuni esempi di uso di Arrow3D (se volete inserire un'etichetta, ricordatevi di scriverla tra virgolette: il testo deve essere inserito tra virgolette nei comandi di Mathematica).

In[329]:=

Show[<br />    Arrow3D[{-1, -1, -1}, "A"], <br />  &nb ... sp;ImageSize->500, <br />    Boxed->False<br />    ]

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

Out[329]=

⁃Graphics3D⁃

Esercizi di calcolo vettoriale

Esercizio 1, Capitolo 3 (Abbena-Gianella). Indichiamo con  a×x, a.b, i prodotti vettoriali e scalari di a, b (vettori in 3D). Dati i vettori a = (h,-1,3), b=(1,-h,1), c= (-2,0,k), trovare due valori reali per h,k e un vettore X = (x1,x2,x3) tale che:
                                a×x + b×x = c

Suggerimenti. Ripulire (comando Clear) le variabili h,k. Definire a,b,c,X (come liste), e=(a×x+b×x). Il prodotto vettoriale di a, b si indica con Cross[a,b], il prodotto scalare con a.b. Infine, risolvere il sistema (e = c) rispetto alle variabili:
                               x1,x2,x3,k,h
  E' necessario introdurre i parametri k, h tra le variabili. Se si cerca una soluzione rispetto alle sole variabili x1,x2,x3, si cerca una soluzione valida
per tutti i k, h, che non esiste (il problema è risolubile solo per particolari k, h).

In[330]:=

Clear[k, h]

In[331]:=

a = {h, -1, 3} b = {1, -h, 1} c = {-2, 0, k} X = {x1, x2, x3}

Out[331]=

{h, -1, 3}

Out[332]=

{1, -h, 1}

Out[333]=

{-2, 0, k}

Out[334]=

{x1, x2, x3}

In[335]:=

e = Cross[a, X] + Cross[b, X] ; MatrixForm[Simplify[e]]

Out[336]//MatrixForm=

( -4 x2 - x3 - h x3 )            4 x1 - (1 + h) x3            (1 + h) (x1 + x2)

In[337]:=

Solve[e == c, {x1, x2, x3, h, k}] Reduce[e == c, {x1, x2, x3, h, k}]

Solve :: svars : Equations may not give solutions for all \"solve\" variables.  More…

Out[337]=

{{k (1 + h)/2, x11/4 (1 + h) x3, x21/4 (2 - x3 - h x3)}}

Out[338]=

x10&&x21/2&&x30&&k (1 + h)/2 || x2> ... 1/2 (1 - 2 x1) &&x3≠0&&h (4 x1 - x3)/x3&&k (1 + h)/2

Esercizio 4. (i) I vettori a = (1,2,0) e b = (0,1,1) possono determinare i lati di un rettangolo? (ii) Determinare un vettore  v che rappresenti l'altezza rispetto ad a del parallelogramma individuato da a, b.
E' utile usare il comando Show[Arrow3D[a],Arrow3D[b]] per visualizzare a, b.

In[339]:=

a = {1, 2, 0} ; b = {0, 1, 1} ; a . b

Out[341]=

2

Osserviamo subito che a.b (=a scalare b) non è nullo. a,b non sono dunque ortogonali. Sia  a×x il prodotto vettoriale di a, b.

Metodo 1. Definire un vettore incognita V = {v1,v2,v3}. Un sistema nelle variabili v1,v2,v3 la cui unica soluzione è l'altezza, si può ottenere esprimendo certe condizioni di ortogonalità e parallelismo in termini di prodotto scalare e vettoriale. Le condizioni da usare sono:
(1) a è ortogonale a V (Spiegazione: l'altezza V di a è ortogonale ad a);
(2) (b×V) è ortogonale ad a (Spiegazione: (b×V) è ortogonale al piano di b e di V, quindi ad a, che si trova nello stesso piano).
(3) (b-V) è parallelo ad a (Spiegazione: se percorriamo b, e  poi dalla punta di b risaliamo all'indietro l'altezza V relativa ad a, arriviamo in un punto del vettore a).

In[342]:=

Clear[v1, v2, v3]

In[343]:=

V = {v1, v2, v3}

Out[343]=

{v1, v2, v3}

In[344]:=

Solve[{<br />    a . V == 0,        &nb ... * b - V parall . a *)<br />    }, <br />     {v1, v2, v3}]

Out[344]=

{{v1 -2/5, v21/5, v31}}

In[345]:=

h = {-2/5, 1/5, 1}

Out[345]=

{-2/5, 1/5, 1}

Controlliamo il risultato disegnando tutti i vettori.

In[346]:=

Show[<br />    Arrow3D[a, "a"], <br />    Ar ... row3D[b, a + b], <br />    Arrow3D[h, "h"], <br />ImageSize->500]

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

Out[346]=

⁃Graphics3D⁃

Metodo 2. Riprendiamo il sistema precedente in v1,v2,v3, ma sostituiamo la condizione (3) con:
    V.V = norma dell'altezza di b rispetto ad a.
Tale norma si ottiene con la formula:
                     b . b - (a . b)^2/(a . a)

In[347]:=

NormaAltezza = b . b - (a . b)^2/(a . a)

Out[347]=

6/5

Il sistema ottenuto aggiungendo la condizione:
                              V.V=NormaAltezza
è di secondo grado. Una soluzione è l'altezza h, l'altra è (-h) (infatti (-h) ha la stessa norma di h, e quindi soddisfa anch'essa le condizioni del sistema).

In[348]:=

Solve[{<br />        a . V == 0, <br />  &nb ... V . V == NormaAltezza<br />    }, <br />     {v1, v2, v3}]

Out[348]=

{{v3 -1, v12/5, v2 -1/5}, {v31, v1 -2/5, v21/5}}

Metodo 3. Dalla definizione di prodotto vettoriale possiamo dedurre che
                                 k = (a×b)×a
è parallelo all'altezza (per convincersene, è utile disegnare a×b e k).

In[349]:=

RowBox[{RowBox[{RowBox[{RowBox[{ConeRadius,  , =,  , 0.3}], ;,  , (* ingrandiamo il raggio del ... amo il raggio alle sue dimensioni originarie *)}] RowBox[{RowBox[{ConeRadius,  , =,  , 0.1}], ;}]

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

Out[349]=

⁃Graphics3D⁃

Basta calcolare ora il versore associato a k, quindi moltiplicarlo per la lunghezza del vettore-altezza (è uguale alla radice quadrata della norma dell'altezza, già calcolata).

In[351]:=

LunghezzaAltezza = Sqrt[NormaAltezza]

Out[351]=

6/5^(1/2)

In[352]:=

k = Cross[Cross[a, b], a]

Out[352]=

{-2, 1, 5}

In[353]:=

VersoreAltezza = k/Sqrt[k . k]

Out[353]=

{-2/15^(1/2), 1/30^(1/2), 5/6^(1/2)}

In[354]:=

h = VersoreAltezza * LunghezzaAltezza

Out[354]=

{-2/5, 1/5, 1}


Created by Mathematica  (August 4, 2004)