Norma indotta da un prodotto scalare

La norma indotta da un prodotto scalare si ha su un prodotto scalare definito positivo. \(|| . || : V \to \mathbb{R}^+ \cup \{0\}\) ed equivale a \(|| v || = \sqrt{\langle v,v \rangle}\)

Per esempio il prodotto scalare definito positivo su \(V=\mathbb{R}^3\):

\(\langle x,y\rangle = 2x_1y_1 - x_1y_2 - x_2y_1 + 2x_2y_2 + x_3y_3\)

ad ogni \(x = (x_1, x_2,x_3) \in \mathbb{R}^3\) associa lo scalare:

\(||x|| = \sqrt{\langle x,x \rangle} =\)

\(= \sqrt{2x_1x_1 - x_1x_2 - x_2x_1 + 2x_2x_2 + x_3x_3}\)

\(= \sqrt{2x_1^2 - 2x_1x_2 + 2x_2^2 + x_3^2}\)

Ad esempio se \(x=(1,0,1)\) abbiamo:

\(\sqrt{2x_1^2 - 2x_1x_2 + 2x_2^2 + x_3^2}\)

\(\sqrt{2(1)^2 - 2(1)(0) + 2(0)^2 +1^2} = \sqrt{2+1} = \sqrt{3}\)

Proprietà

  • \(||v|| = 0 \iff v = 0_V\)
  • \(\forall v \in V, v \ne 0_V: ||v|| > 0\)
  • \(\forall v \in V, \forall \lambda \in \mathbb{R}: ||\lambda v|| = |\lambda| ||v||\) dove \(|\lambda|\) è il valore assoluto dello scalare
  • Disuguaglianza di Cauchy-Schwartz, valore assoluto del prod. scal. di due vettori è minore o uguale al prodotto tra le norme dei due vettori: \(\forall v,w \in V: |\langle v,w \rangle| \le ||v|| \cdot ||w||\) Vale solo se \(v\) e \(w\) sono linearmente indipendenti tra di loro.
  • Disuguaglianza triangolare: la norma della somma di due vettori è \(\le\) della somma delle norme dei rispettivi vettori: \(\forall v,w \in V: ||v + w|| \le ||v|| + ||w||\)

Normalizzazione di un vettore

Passare da un vettore \(v\) con \(v \ne 0_V\) a un nuovo vettore \(u\) di norma 1 e linearmente dipendente a \(v\) (ossia differisca da v a meno di un multiplo scalare).

\(u := \frac{1}{||v||}v\)

Vettori ortonormali e base ortonormale

Vettori ortonormali: vettori tra loro ortogonali rispetto a un fissato prodotto scalare e con norma = 1

\(\langle v_i,v_j \rangle = 0, i \ne j\)

\(||v_i|| = 1\) \(\forall i \in \{1,2,..,n\}\)

Base ortonormale: base di \(V\) composta da vettori tra loro ortonormali

Funzione riassumibile - Norma prodotto scalare

def normaProdottoScalare(forma_bilineare, definizione, valori_sostitutivi):
    for i in range(len(forma_bilineare[1])):
        definizione = definizione.subs(forma_bilineare[1][i], forma_bilineare[0][i])
        definizione = definizione.subs(forma_bilineare[0][i], valori_sostitutivi[i])

    return sp.sqrt(definizione).simplify()

Esempio con vettore

x1,x2,x3,y1,y2,y3 = sp.symbols("x1 x2 x3 y1 y2 y3")

forma_bilineare = [(x1,x2,x3), (y1,y2,y3)]
definizione = 2*x1*y1 - x1*y2 - x2*y1 + 2*x2*y2 + x3*y3
valori_sostitutivi = [1,0,1]

norma = normaProdottoScalare(forma_bilineare, definizione, valori_sostitutivi)
print(sp.latex(norma))

\(\sqrt{3}\)

Come da esercizio.

Esempio con funzioni di polinomi

x1,x2,x3,y1,y2,y3 = sp.symbols("x1 x2 x3 y1 y2 y3")

def p(x):
    return 2-x-x**2

def q(y):
    return 2-y-y**2

forma_bilineare = [(x1,x2,x3), (y1,y2,y3)]
definizione = p(x1)*q(y1) + p(x2)*q(y2) + p(x3)*q(y3)

termini = [0,1,-1]

norma = normaProdottoScalare(forma_bilineare, definizione, termini)
print(sp.latex(norma))

\(2 \sqrt{2}\)

Come da esercizio.

Esempio in spazio di matrici

A = sp.MatrixSymbol('A', 2, 2)
B = sp.MatrixSymbol('B', 2, 2)

forma_bilineare = [(A,), (B,)]
definizione = sp.Trace(B.T * A)

valori_sostitutivi = [sp.Matrix([[1,2],[-1,0]])]

norma = normaProdottoScalare(forma_bilineare, definizione, valori_sostitutivi)
print(sp.latex(norma))

\(\sqrt{6}\)

Come da esercizio

Funzione riassumibile - Vettore normalizzato

def vettoreNormalizzato(forma_bilineare, definizione, vettore, valori_sostitutivi):
    norma = normaProdottoScalare(forma_bilineare, definizione, valori_sostitutivi)
    normalizzato = (1/norma)*vettore
    return normalizzato.expand()

Esempio 1 - Prodotto scalare euclideo

x1,x2,y1,y2 = sp.symbols("x1 x2 y1 y2")

forma_bilineare = [(x1,x2),(y1,y2)]
definizione = x1*y1 + x2*y2 # dot prodotto scalare euclideo
vettore = sp.Matrix([[3,-4]])

valori_sostitutivi = [3, -4]

normalizzato = vettoreNormalizzato(forma_bilineare, definizione, vettore, valori_sostitutivi)
print(normalizzato)

Matrix([[3/5, -4/5]])

Come da esercizio.

Esempio 2 - Prodotto scalare vettoriale

x1,x2,x3,y1,y2,y3 = sp.symbols("x1 x2 x3 y1 y2 y3")

forma_bilineare = [(x1,x2,x3),(y1,y2,y3)]
definizione = 2*x1*y1-x1*y2-x2*y1+2*x2*y2+x3*y3
vettore = sp.Matrix([[1,1,0]])

valori_sostitutivi = [1,1,0]

normalizzato = vettoreNormalizzato(forma_bilineare, definizione, vettore, valori_sostitutivi)
print(normalizzato)

Matrix([[sqrt(2)/2, sqrt(2)/2, 0]])

Esempio 3 - Prodotto scalare polinomiale

x1,x2,y1,y2 = sp.symbols("x1 x2 y1 y2")
_x = sp.symbols("x")

def p(x):
    return 1+x+x**2

def q(y):
    return 1+y+y**2

def p_der(x): return sp.diff(p(x), x)
def q_der(y): return sp.diff(q(y), y)

forma_bilineare = [(x1,x2),(y1,y2)]

definizione = 3*p(x1)*q(y1) + p_der(x1)*q(y2) + p(x2)*q_der(y1) + p_der(x2)*q_der(y2)

valori_sostitutivi = [0, 1]

normalizzato = vettoreNormalizzato(forma_bilineare, definizione, p(_x), valori_sostitutivi)
print(sp.latex(normalizzato))

\(\frac{\sqrt{2} x^{2}}{6} + \frac{\sqrt{2} x}{6} + \frac{\sqrt{2}}{6}\)

Riferimenti

  • https://www.youmath.it/lezioni/algebra-lineare/applicazioni-lineari/3973-come-normalizzare-un-vettore.html