2017-08-02 4 views

Répondre

0

Pour un pur numpy/mise en œuvre scipy (que la dupe ne donne pas), simplement je recommande de faire quelque chose comme:

from scipy.sparse import dia_matrix 
def JordanForm(a, thr = 10**-5): 
    data = np.zeros((2, a.shape[0])) 
    data[0] = scipy.linalg.eigh(a)[0] 
    data[1,:-1] = (np.diff(data[0]) < thr).astype(int) 
    return dia_matrix((data, np.arange(2)), shape = a.shape) 
+0

Il y a une parenthèse manquante dans la dernière ligne. Si la valeur renvoyée est 'dia_matrix ((data, np.arange (2)), shape = a.shape)'? –

+0

Cette fonction ne calcule pas correctement la forme normale de Jordan. Essayez-le avec, disons 'a = np.eye (4)'. Il devrait retourner la même matrice d'identité, mais à la place il crée un bloc Jordan de taille 3. –