Python et valeurs exactes

Voilà mon problème, j'ai une matrice, par exemple : $\begin{bmatrix}
1/2 & 2/3\\
1/2& 1/3
\end{bmatrix}$

Je veux que Python me calcule les valeurs propres et la matrice de passage
avec Numpy, ça donne ça :

np.linalg.eigvals(A)
Out[13]: array([ 1.        , -0.16666667])

np.linalg.eig(A)[1]
Out[14]: 
array([[ 0.8       , -0.70710678],
       [ 0.6       ,  0.70710678]])

Moi je voudrais :

$\begin{bmatrix}
1 & -1/6
\end{bmatrix}$ et $\begin{bmatrix}
4/5 & -\sqrt{2}/2\\
3/5& \sqrt{2}/2
\end{bmatrix}$

Voilà les bidouillages que j'ai fait, mais c'est loin d'être satisfaisant
from fractions import Fraction
def transfo2(matrice): #(transforme la matrice en mat de fractions)
    mat = np.zeros(matrice.shape, dtype=Fraction)
    
    for i in range (matrice.shape[0]):
        for j in range (matrice.shape[1]):
            mat[i,j]=Fraction(matrice[i,j]).limit_denominator()
    return (mat)

Qui me donne :
Out[16]: 
array([[Fraction(4, 5), Fraction(-665857, 941664)],
       [Fraction(3, 5), Fraction(470832, 665857)]], dtype=object)


et après pour plus de mise en forme , je la passe en sympy

et j'arrive là :
Matrix([
[4/5, -665857/941664],
[3/5,  470832/665857]])


Donc, c'est bon pour les fractions (après beaucoup de circonvolutions), mais les racines carrées ne sont pas reconnues.

A noter, numpy ne veut pas travailler avec les objets fractions

Tout ça c'est pas très satisfaisant, mais malgré mes recherches, j'ai rien trouvé que du bricolage.

Réponses

Connectez-vous ou Inscrivez-vous pour répondre.