# 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.