Forme bilineari

L'applicazione lineare \(F: V \times W \to \mathbb{K}\) è detta bilineare se è lineare sia in \(V\) che in \(W\). Vale a dire se valgono le seguenti proprietà (con \(\alpha,\beta \in \mathbb{K}\) e \(v,v_1,v_2 \in V\) e \(w, w_1, w_2 \in W\)):

  • additività e omogeneità risp. prima componente: \(F(\alpha v_1 + \beta v_2, w) = \alpha F(v_1, w) + \beta F(v_2, w)\)
  • additività e omogeneità risp. seconda componente: \(F(v, \alpha w_1 + \beta w_2) = \alpha F(v, w_1) + \beta F(v, w_2)\)
  • Se \(V=W\) allora è forma bilinare su \(V\). La maggior parte della teoria sulle forme bilineari si sviluppa su questi spazi
  • Se la preimmagine contiene il vettore nullo allora lo è anche l'immagine: \(F(0_V, w) = 0*F(v, 0_w) = 0\)

Matrice associata a una forma bilineare

La matrice associata ad \(F\) rispetto alla base \(\beta = \{v_1, v_2, v_n\}\) (\(A_F^{\beta}\)) è formata dalle immagini delle coppie di vettori (\(v_i, v_j\)) tramite \(F\) (con \(i, j\) in \(\{1,2,..,n\}\)

\(A_F^{\beta} = \begin{bmatrix}v_{11}&v_{12}&..&v{1n} \\ v_{21}&v_{22}&..&v_{2n} \\ ..&..&..&.. \\ v_{n1} & v_{n2} & .. & v_{nn} \end{bmatrix}\)

Dati i vettori colonna \(v_{\beta}\) e \(w_{\beta}\) le coordinate rispetto alla base \(\beta\) di due vettori \(v,w \in V\), allora l'immagine mediante \(F\) della coppia (\(v,w\)) si individua tramite la matrice associata:

\(F(v, w) = (v_{\beta})^T A_F^{\beta} w_V\)

Viceversa ad ogni matrice \(A\) si può associare una forma bilineare rispetto a \(\beta\)

\(F(v, w) = x^T A y\)

Formula del cambiamento di base per forme bilineari

La matrice \(A'\) associata alla forma bilineare \(F\) rispetto alla base \(\beta'\) è data da:

\(A' = M^T A M\)

(dove \(M\) è la matrice di cambiamento di base \(\beta' \to \beta\) ed \(A\) è la matrice associata rispetto alla base \(\beta\)).

Le matrici \(A\) e \(A'\) (\(A_F^{\beta '}\) e \(A_F^{\beta}\)) sono matrici congruenti.

Forma bilineare degenere

\(\exists v \in V, v \ne 0_v \quad t.c. \quad \forall w \in W: \quad F(v, w) = 0\)

Forma bilineare non degenere

\(F(v,w) = 0 \quad \iff \quad v = 0_V \quad oppure \quad w = 0_V\)

  • Il nucleo o radicale della forma bilineare è l'insime delle \(v\) che verificano la forma bilineare degenere (incluso \(0_V\))
  • ne consegue che una forma bilineare è non degenere solo se il nucleo corrisponde a \(\{0_V\}\)

In soldoni: una forma bilineare è degenere se la determinante della matrice associata (rispetto a qualsiasi base) è 0 (poichè il rango è massimo).

Forma bilineare simmetrica

\(F(v,w) = F(w,v)\). Le matrici associate a questa forma bilineare sono simmetriche.

Funzione riassumibile - Matrice associata di forma bilineare

def matriceAssociataDiFormaBilineare(forma_bilineare, definizione, base):
    matrice_associata = sp.zeros(base.shape[0], base.shape[1])

    tupla1 = forma_bilineare[0]
    for i, incognita1 in enumerate(tupla1):
        tupla2 = forma_bilineare[1]
        for j, incognita2 in enumerate(tupla2):

            elemento = prodottoScalareVettori(forma_bilineare, definizione, base.row(i), base.row(j))

            matrice_associata[i, j] = elemento

    return matrice_associata

Esempio 1

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

forma_bilineare = [(x1, x2), (y1,y2)]
definizione = x1*y1 + 2*x1*y2 - 3*x2*y1 + x2*y2

base = sp.eye(2)
A = matriceAssociataDiFormaBilineare(forma_bilineare, definizione, base)
print(sp.latex(A))

b_2 = sp.Matrix([[1,2], [3,-1]])
A = matriceAssociataDiFormaBilineare(forma_bilineare, definizione, b_2)
print(sp.latex(A))

\(\left[\begin{matrix}1 & 2\\-3 & 1\end{matrix}\right]\) \(\left[\begin{matrix}3 & -19\\16 & 13\end{matrix}\right]\)

Come da esercizio.

Esempio 2 - Caso con funzioni, esercizio svolto con gli spazi polinomiali. Riferimento per futuri casi di utilizzo di funzioni polinomiali

_x,a1,b1,c1,a2,b2,c2 = sp.symbols("x a1 b1 c1 a2 b2 c2")

def p(x):
    return a1+b1*x+c1*x**2

def q(x):
    return a2+b2*x+c2*x**2

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

def p1(x):
    return p_der().subs(_x, x)

def q1(x):
    return q_der().subs(_x, x)

print(p(0), q(0), p1(0), q1(0))

forma_bilineare = [(a1,b1,c1), (a2,b2,c2)]
definizione = 2*p(0)*q(0) + p1(0)*q(1) + 3*p(1)*q1(0)

base = sp.eye(3)
A = matriceAssociataDiFormaBilineare(forma_bilineare, definizione, base)
print(sp.latex(A))

\(\left[\begin{matrix}2 & 3 & 0\\1 & 4 & 1\\0 & 3 & 0\end{matrix}\right]\)

Come da esercizio.

Esempio - Matrice di cambiamento di base

matrice_associata_beta = sp.Matrix([[1,-1],[0,1]])
beta_1 = sp.Matrix([[1,-1], [0, 2]])
matrice_cambiamento_base_beta_1 = sp.Matrix([[1,0],[-1,2]])

"""Matrice associata beta1 A ′=M T AM"""
matrice_associata_beta_1 = matrice_cambiamento_base_beta_1.T*matrice_associata_beta*matrice_cambiamento_base_beta_1
print(matrice_associata_beta_1)

Matrix([[3, -4], [-2, 4]])

Come da esercizio.

Funzione riassumibile - Forma degenere / non degenere

def isFormaBilineareDegenere(forma_bilineare, definizione, base):
    matrice_associata = matriceAssociataDiFormaBilineare(forma_bilineare, definizione, base)
    print("Matrice associata", matrice_associata)
    return int(sp.det(matrice_associata)) is 0

Esempio

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

forma_bilineare = [(x1, x2, x3), (y1,y2,y3)]
definizione = x1*(y1+2*y2) + x2*(y2-y3) + x3*(y1-y2+3*y3)
base = sp.eye(3)

print(isFormaBilineareDegenere(forma_bilineare, definizione, base))

Matrice associata Matrix([[1, 2, 0], [0, 1, -1], [1, -1, 3]]) True

Come da esercizio.

Riferimenti

  • https://www.youmath.it/lezioni/algebra-lineare/applicazioni-lineari/3968-forme-bilineari.html