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}\)
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: 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
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()
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.
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.
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
def vettoreNormalizzato(forma_bilineare, definizione, vettore, valori_sostitutivi):
norma = normaProdottoScalare(forma_bilineare, definizione, valori_sostitutivi)
normalizzato = (1/norma)*vettore
return normalizzato.expand()
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.
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]])
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}\)