# Exercice 1, interro n°19
import numpy as np
import numpy.linalg as alg
import numpy.random as rd

def Mat(A):
    n = A.shape[0]
    I = np.eye(n)
    return alg.inv(I-A).dot(I+A)

def test(M):
    return np.transpose(M).dot(M)

B = rd.randint(0,10,(4,4))
A = B - np.transpose(B)
print(A)
print(test(Mat(A)))
print(np.round(test(Mat(A)),5))
print(alg.det(Mat(A)))


a = np.array([3,12,-4])
A = np.array([np.cross(a,[1,0,0]),np.cross(a,[0,1,0]),np.cross(a,[0,0,1])]).T
R = Mat(A)
print(np.round(test(R),5))

vp = alg.eig(R)
print(np.round(vp[0],4))
# l'angle est donné par les vp complexes
a2 =  np.vdot(a,a)
print((1-a2)/(1+a2))

print(np.round(vp[1],4))
# (pour vérifier que l'axe est dirigé par a

##
# Exercice 1, interro n°20
import numpy as np
from numpy.linalg import eig
from numpy.random import random

def M(n):
    m = random((n,n))
    return (m + m.T)/2

for n in [3,4,5]:
    for k in range(2):
        S = M(n)
        print('matrice :')
        print(S)
        print('valeurs propres :')
        print(np.round(eig(S)[0],3))
        print('vecteurs propres :')
        print(np.round(eig(S)[1],3))


