Definizione di applicazione lineare

L'applicazione lineare dallo spazio vettoriale \(V\) (dominio) allo spazio vettoriale \(W\) (codominio) deve soddisfare:

  • additività: \(F({\textbf v}_1 + {\textbf v}_2) = F({\textbf v}_1) + F({\textbf v}_2)\)
  • omogeneità: \(F(\lambda{\textbf v}) = \lambda F({\textbf v})\)

riassumbili nella condizione di linearità:

\(F(\lambda_1{\textbf v}_1) + F(\lambda_2{\textbf v}_2) = \lambda_1F({\textbf v}_1) + \lambda_2F({\textbf v}_2)\)

è condizione necesaria che: \(F(0_V) = F(0_W)\).

Se dominio e codominio corrispondono l'applicazione è un endomorfismo.

Un modo veloce per capire se un'applicazione è lineare è verificare che tutti i componenti del vettore della funzione non abbiano termini noti non nulli e non abbiano polinomi di grado > 1.

Funzione riassumibile

Non è applicabile sulle applicazioni lineari definite da immagini di vettori. Per quello vedere sezione "Applicazioni lineare definite da immagini di vettori".

def isApplicazioneLineare(applicazione, param):
    """
    Non è applicabile sulle applicazioni lineari definite da immagini di vettori.
    """
    scalari = dict()
    incognite = dict()
    size = len(param)

    for i in range(size):
        scalari["l" +  str(i)] = sp.symbols("l" +  str(i))
        for j in range(size):
            incognite[str(param[i])+str(j)] = sp.symbols(str(param[i])+str(j))

    """first member"""
    first_member_expr = sp.zeros(1, size)
    for i in range(size):
        expr = 0
        for j in range(size):
            expr += scalari["l" +  str(j)]*incognite[str(param[i])+str(j)]
        first_member_expr[0, i] = applicazione[i].subs(param[i], expr)

    second_member_expr = sp.zeros(1, size)
    for i in range(size):
        v = sp.zeros(1, size)
        for j in range(size):
            v[0, j] = applicazione[j].subs(param[j], scalari["l"+str(i)]*incognite[str(param[j])+str(i)])
        second_member_expr += v

    return first_member_expr == second_member_expr

Esempi

x,y,z = sp.symbols("x y z")
applicazione = [4*x]
print(isApplicazioneLineare(applicazione, [x]))

True

x,y,z = sp.symbols("x y z")
applicazione = [2*x+y, 3*y, z+5]
print(isApplicazioneLineare(applicazione, [x,y,z]))

False

x,y,z = sp.symbols("x y z")
applicazione = [x, 3*y]
print(isApplicazioneLineare(applicazione, [x,y]))

True

applicazione = [x**2 + y, 0*y]
print(isApplicazioneLineare(applicazione, [x, y]))

False

Riferimenti