Forma quadratica associata a \(\varphi\) l'applicazione da \(V\) in \(\mathbb{R}\) che ad ogni vettore \(v \in V\) associa \(\varphi(v,v)\) dove \(\varphi\) è un prodotto scalare (forma bilineare simmetrica).
\(Q(v) = \varphi(v,v)\)
Es nel caso del prodotto scalare canonico \(\cdot\):
\(v=(v_1,v_2) \in \mathbb{R}^2\)
\(Q(v) = v \cdot v = v_1^2 + v_2^2\)
Data una base \(\beta\), la forma quadratica \(Q(v)\) associata a \(\varphi\) si esprime mediante un polinomio omogeneo di grado 2 nelle coordinate del vettore \(v\) rispetto alla base \(\beta\).
Esiste una corrispondenza biunivoca tra la forma quadratica e la forma bilineare che la definisce. Infatti (vedasi dimostrazione in riferimento):
\(\varphi(v+w) = \frac{1}{2}(Q(v+w) - Q(v) - Q(w))\)
Quella sopra è la formula di polarizzazione dove \(\varphi(v+w)\) è la forma polare di \(Q\).
def formaPolareDiFormaQuadratica(Q: Callable, inc: List[tuple]) -> sp.Expr:
q_x_y_args = [x + inc[1][i] for i,x in enumerate(inc[0])]
q_x_args = [x for x in inc[0]]
q_y_args = [y for y in inc[1]]
q_x_y = Q(*q_x_y_args)
q_x = Q(*q_x_args)
q_y = Q(*q_y_args)
return sp.Rational('1/2')*(sp.factor(q_x_y - q_x - q_y))
x1,x2,x3,y1,y2,y3 = sp.symbols("x1 x2 x3 y1 y2 y3")
def Q(_x1, _x2, _x3):
return _x1**2 + 2*_x1*_x2 + 3*_x2*_x3 - 2*_x3**2
gamma = formaPolareDiFormaQuadratica(Q, [(x1,x2,x3),(y1,y2,y3)])
print(sp.latex(gamma))
\(x_{1} y_{1} + x_{1} y_{2} + x_{2} y_{1} + \frac{3 x_{2} y_{3}}{2} + \frac{3 x_{3} y_{2}}{2} - 2 x_{3} y_{3}\)
Come da esercizio.