Matrice inversa


# Codice Python per inversa
# (non ottimizzato)

import numpy as np

def invgauss(m):
    n=m.copy()
    t=np.matrix(np.eye(len(n)))*1.
    # itera su tutte le posizioni
    for i in range(len(n)):
        # Riduzione righe
        k=np.nonzero(n[:,i])[0]
        if len(k)==0:
            return False
        k=min([ a for a in k if a>= i ])
        if k>i:
            print("Scambio riga ",k+1," e riga ",i+1,"\n")
            n[[i,k]]=n[[k,i]]
            t[[i,k]]=t[[k,i]]
            print("mat=",n)
            print("\nt=",t)
        print("Divisione riga ",i+1,"\n")
        t[i,:] /= n[i,i]
        n[i,:] /= n[i,i]
        print("mat=",n)
        print("t=",t,"\n")
        for j in range(len(n)):
            print("Riduzione riga ",j+1,"\n")
            if j==i:
                continue
            coeff=n[j,i]
            t[j,:] -=  coeff*t[i,:]
            n[j,:] -=  coeff*n[i,:]
            print("mat=",n)
            print("t=",t,"\n")
    print("\n")
    return t

# Esempi
m=np.matrix('0,0,1;1,0,0;0,3,5')*1.
s=invgauss(m)

m1=np.matrix(np.random.randint(0,high=10,size=(10,10)))*1.