#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Jan  5 14:14:37 2026

@author: tristan
"""

import numpy as np # numpy 
import matplotlib.pyplot as plt # pour dessiner
from scipy.integrate import odeint # solveur d'équa diff
 
import numpy.linalg as al



##############################
###### Code haut page 2 ######
##############################


# fonction f(X,t)
def fonc(X,t):
	A = ............ 
	# la matrice associée au système
	return ............ 
	# on renvoie le produit matriciel AX

# intervalle de résolution sous forme de linspace
T = ....

# calcul de la solution
sol = odeint( ............ , [....... , .......] , ...........)





########################
###### Exercice 2 ######
########################


A = np.array(....................................................)
# la matrice du système X'=AX

def fonc(X,t):
	return .............

T = np.linspace( ....................................... )
# dans ce qui suivra t0 est le premier élément de T

sol = odeint(............. , ............. , .............)
# le second argument contient la condition initiale
# de la forme [x(t0),y(t0),z(t0)]

x = .............
y = .............  
z = .............
# récupération des x(ti),y(ti),z(ti), cf exo 1

plt.plot(............. , ............. color='red', label='x(t)')
plt.plot(............. , ............. , color='blue', label='y(t)')
plt.plot(............. , ............. , color='green', label='z(t)')
plt.legend()
# tracé des trois courbes x(t),y(t),z(t) avec une légende

plt.show()
# affichage


D,P=al.eig([[-2,2,-2],[-2,0,-4],[2,-2,2]])
print(D)
print(P)




#######################
###### Section 2 ######
#######################

A = np.array( .... )
# la matrice du système X'=AX

def fonc(X,t):
	return np.dot(A,X)

T = np.linspace( ... )
# dans ce qui suit t0 est le premier élément de T

sol = odeint(fonc, ... ,T)
# les ... contiennent la condition initiale de la forme [x(t0),y(t0)]

x = ...
y = ...  
# récupération des x(ti) et y(ti), cf exo 1

plt.plot(... , ...)
# tracé de la courbe formée par les points (x(t),y(t))

plt.show()
# affichage





### matrices du tableau de la page 5

A1=np.array([[0,-1],[-2,1]])
A2=np.array([[-3/2,-1/2],[-1,-1]])
A3=np.array([[7/3,2/3],[4/3,5/3]])
A4=np.array([[1/3,1/6],[1/3,1/6]])
A5=np.array([[-1,1],[2,-2]])









#########################
###### Haut page 7 ######
#########################

A = np.array( .... )
# la matrice du système X'=AX

def fonc(X,t):
	return np.dot(A,X)

T = np.linspace( ... )

sol = odeint(fonc, ... ,T)
# les ... contiennent une condition initiale de la forme [x(t0),y(t0)]

x = ...
y = ...  
# récupération des x(ti) et y(ti), cf exo 1

plt.plot(... , ... ,linewidth=3,color='red')
# tracé en trait épais pour la visibilité

absc=np.linspace(-10,10,100)
ordo=np.linspace(-10,10,100)
X,Y=np.meshgrid(absc,ordo)
plt.streamplot(X, Y,A[0,0]*X+A[0,1]*Y,A[1,0]*X+A[1,1]*Y,arrowsize=2)
# superposition du champ de vecteurs

plt.show()
# affichage







### Matrices non diagonalisables

A6=np.array([[2,3],[-4,-4]])
A7=np.array([[1,-5],[2,3]])
A8=np.array([[0,-1],[1,0]])



