Simulation Numérique

Programming, Math · lab

Voir tous les documents en programmation

Simulation Numérique

03/05/2021

Les bibliothèques numpy/scripy/matplotlib (SIMULATION NUMERIQUE)

Présenté par BOUZIDI Houssem Eddine [email protected]

B.H

INTRODUCTION

(numpy)

1

2

 numpy: est une extension du langage de programmation Python, destinée à manipuler tableaux ou des multidimensionnels ainsi que des fonctions mathématiques opérant sur ces tableaux

matrices

des

Avant d’utiliser la bibliothèque numpy il faut faire l’importation de la bibliotheque numpy qu’on l’appelera np par convention

>>> import numpy as np

B.H

1

2

B.H

1

Simulation Numérique

03/05/2021

3

4

NUMPY

 Différence entre numpy et math:

(numpy)

import math as M

import numpy as np

>>> a=2.5 >>> M.sin(a) 0.5984721441039564

>>>L=[1.5,7,8.5] >>> M.sin(L) ERREUR

>>>M.sqrt(L) erreur

3

>>> a=2.5 >>> np.sin(a) 0.59847214410395644

>>>L=[1.5,7,8.5]

>>> np.sin(L) array([ 0.997494, 0.65698 , 0.798487])

>>>np.sqrt(L) array([ 1.22474487, 2.64575131, 2.91547595])

B.H

Les vecteurs

(numpy)

Création d’un tableau à une seule dimension

Création d’un vecteur à partir d’une liste

Création d’un vecteur à partir d’un tuple

Crée d’un vecteur de valeurs régulièrement espacées

Nom_v=np.array(liste)

Nom_v=np.array(tuple)

>>>v=np.array([3,7,8,9]) array([3, 7, 8, 9])

>>>V4=np.array((5,8,9)) array([5, 8, 9])

Nom_v=np.linspace(bi,bs,n b_elem)

>>>v1=np.linspace(5,10,4) array([ 5.,6.66,8.33,10.])

Création d’un vecteur nul

Nom_v=np.zeros(nb_elem)

Création d’un vecteur avec des uns

Nom_v=np.ones(nb_elem)

>>>V2=np.zeros(5) array([ 0., 0., 0., 0., 0.])

>>>V3=np.ones(5) array([ 1., 1., 1., 1., 1.])

arange joue le même rôle que range

Nom_v=np.arange(bi,bs)

B.H

>>>V5=np.arange(1,10) array([1,2,3,4,5,6,7,8, 9])

4

B.H

2

Simulation Numérique

03/05/2021

5

6

Les vecteurs

(numpy)

Création d’un vecteur à partir d’une fonction

Nom_v=np.fromfunction(nom_f,(nb_elem,))

>>>def f(x):

Il faut que la fonction admet un seul paramètre array([ f(0),f(1), f(2), f(3), f(4)])

return (x**2) >>>F=np.vectorize(f) >>>V=np.fromfunction(F,(5,)) array([ 0., 1., 4., 9., 16.])

Trouver le nombre d’éléments d’un vecteur

Trouver la dimension d’un vecteur

Calculer le produit scalaire

5

Méthode utile pour les vecteurs

np.size(vecteur) np.shape(vecteur) len(vecteur)

np.ndim(vecteur)

B.H np.dot(vecteur1,vecteur2)

>>>np.size(v) 5 >>>np.shape(v) (5,)

>>>np.ndim(v) 1

>>>np.dot(v,v) 354.0

Les vecteurs

(numpy)

Les opérations classiques de python

>>>L1=[3,7,8] >>>L2=[4,8,1]

>>>L1+L2 [3, 7, 8, 4, 8, 1]

>>>L1*2 [3, 7, 8, 3, 7, 8]

>>>L1-L2 ERREUR

>>>L1+2 ERREUR

>>>L1**2 ERREUR

>>>L1<5 ERREUR

6

>>>V1=np.array([3,7,8]) >>>V2=np.array([4,8,1])

>>>V1+V2 array([ 7, 15, 9], dtype=int32)

>>>V1*2 array([ 6, 14, 16], dtype=int32)

>>>V1-V2 array([-1, -1, 7], dtype=int32)

>>>V1+2 array([ 5, 9, 10], dtype=int32)

>>>V1**2 array([ 9, 49, 64], dtype=int32)

B.H >>>V1<5 array([ True, False, False],dtype=bool)

B.H

3

Simulation Numérique

03/05/2021

7

Les vecteurs

ACCEDER à un élément du tableau (le même principe que la liste)

(numpy)

>>>V[0] 12

>>>V[[0]] array([12])

>>>V[len(V)-1] 7

>>>V[-1] 7

>>>V[-len(V)] 12

>>>V[2:5] array([ 8, 9, 11])

V=np.array([12,5,8,9,11,-8,7])

>>>V[:5] array([ 12,5,8, 9, 11])

>>>V[[0,5,2]] array([12, -8, 8])

>>>V[4:] array([11,-8,7])

>>>V[1]=25

>>>print(V) array([12,25,8,9,11,-8,7])

>>>V[3]=5.88 array([12,25,8,5,11,-8,7])

>>>V[::-1] array([ 7, -8, 11, 9, 8, 2, 12])

>>>V[4]=[1,2] B.H ERREUR(les éléments d’un tableau doivent être de même type)

7

Les vecteurs

ACCEDER à un élément du tableau

V=np.array([12,5,8,9,11,-8,7])

8

>>>V<7 array([False,True,False,False,False,True, False)

>>>V[[False,True,False,False,False,True,False]] array([ 5, -8])

comparer chaque élément de V

retourner un vecteur rempli par les éléments de V qui les correspendent True

Retourner un vecteur par les éléments >10 du vecteur V

Autre méthode utile

Retourner la valeur maximale dans le vecteur V

Retourner la valeur minimale dans le vecteur V

B.H

Retourner la somme des éléments du vecteur

>>>V[V>10] array([12, 11])

Publicité

>>>V.max() 12

>>>V.min() -8

>>>V.sum() 44

8

B.H

4

Simulation Numérique

03/05/2021

9

LES MATRICES

(numpy)

CREATION D’un tableau à deux dimensions(Matrice)

Création d’une matrice à partir d’une liste de liste

Nom_v=np.array(liste)

1 5 6 2 3 9 >>>M=np.array([[1,5,6],[2,3,9]])

Création d’une matrice nul

Nom_v=np.zeros((nbL,nbC))

Création une matrice avec des uns

Nom_v=np.ones((nbL,nbC))

Création de la matrice identité

Nom_v=np.identity(ordre) Ou Nom_v=np.eye(ordre)

Création d’une matrice diagonale

Nom_v=np.diag(list)

B.H

0 0 0 0 0 0

>>>M1=np.zeros((3,2))

1 1 1 1 1 1

>>>M2=np.ones((2,3))

1 0 0 0 1 0 0 0 1

>>>M3=np.identity(3)

2 0 0 0 6 0 0 0 3

>>>M4=np.diag([2,6,3])

9

10

LES MATRICES

CREATION D’un tableau avec des éléments aléatoire

Création d’un vecteur avec des entiers aléatoires entre deux bornes

Création d’une matrice avec des entiers aléatoires entre deux bornes

Création d’un vecteur avec des réels aléatoires entre 0 et 1

Création d’une matrice avec des réels aléatoires entre 0 et 1

10

Nom_v=np.random.randint(bi,bs,nb_ele)

>>>np.random.randint(-5,9,5) array([ 5, -5, 4, -5, -1])

Nom_v=np.random.randint(bi,bs,(nbL,nbC))

>>>np.random.randint(-5,9,(2,3)) array([[6,3,1],[-5, -2, -2]])

Nom_v=np.random.random(nb_elem)

>>>np.random.random(3) array([ 0.304,0.659, 0.766])

Nom_v=np.random.random((nbL,nbC))

B.H

>>>np.random.random((3,5)) array([[ 0.04,0.09,0.64,0.61,0.86],[0.78,0 .22,0.11,0.32,0.90],[0.27,0.524,0 .81,0.47,0.41]])

B.H

5

Simulation Numérique

03/05/2021

LES MATRICES

(numpy)

ACCEDER à un élément du tableau à deux dimensions

11

>>>M[0][0] M[0,0] 2

>>>M[1] array([ 1, 0, 6, 16])

>>>M[-1] array([ 1, 9, 3, 11])

>>>M[-1,-1] 11

>>>M[1:3,2] array([6, 3])

>>>M[1:3,1:3] array([[0, 6],[9, 3]]) 11

>>>M[1:3,1:2] array([[0],[9]])

>>>M[:,0] array([2, 1, 1])

>>>M[[1,2]] → M[[1,2],:] array([[ 1, 0, 6, 16],[ 1, 9, 3, 11]])

>>>M[:,[1,3]] array([[ 5, 5],[ 0, 16],[ 9, 11]])

>>>M<1 array([[False,False,False,False],[False,True, False,False],[False, False, False, False]])) B.H >>>M[1]<1 array([False, True,False,False])

12

LES MATRICES

(numpy)

Les opérations classiques de python

>>>M1=np.array([3,7,8],[2,1,3]]) >>>M2=np.array([0,1,-1],[1,0,13]]) >>>V=np.array([1,2,6])

>>>M1+[2,3,4] array([[ 5, 10, 12],[ 4, 4, 7]])

>>>M1+M2 array([[ 3, 8, 7],[ 3, 1, 16]])

>>>M1[:,0]+[2,13] array([ 5, 15])

>>>M1*2 array([[ 6, 14, 16],[ 4, 2, 6]])

>>>M1*M2 array([[ 0, 7, -8],[ 2, 0, 39]], dtype=int32)

>>>M1-M2 array([[ 3, 6, 9],[ 1, 1, -10])

>>>M1<5 array([[True,False,False],[True,True,True]])

>>>M1+2 array([[ 5, 9, 10],[ 4, 3, 5])

>>>M1+V array([[ 4, 9, 14],[ 3, 3, 9])

>>>M1[M1<5] array([3, 2, 1, 3])

Les opérations se font élément par élément

B.H

np.dot(M1,M2) Pour calculer le produit matricielle

12

B.H

6

Simulation Numérique

03/05/2021

LES MATRICES

(numpy)

Méthodes utiles pour les matrices

13

matrice.reshape((nbL,nbC)) >>>M.reshape((4,3))

Trouver le nombre d’éléments d’une matrice

np.size(matrice) np.shape(matrice) len(matrice)

np.ndim(Matrice)

Trouver les dimensions d’une matrice

Modifier les dimensions d’une matrice

Calculer la trace d’une matrice

np.trace(matrice)

Calculer le transposé d’une matrice

np.transpose(matrice)

B.H

13

>>>np.size(M) 12 >>>np.shape(M) (3, 4)

np.ndim(M) 2

array([[2,5,6],[5,1,0],[6,16,1],[ 9, 3, 11]])

>>>np.trace(np.array([[1,2],[5 ,6]]) 7

>>>np.transpose(np.arrray([[ 1,2],[5,6]]) array([[1, 5],[2, 6]])

14

LES MATRICES

Méthode du module numpy.linalg

Calculer le déterminant d’une matrice

M=np.array([[4, 7],[-4, 8]])

np.linalg.det(matrice)

>>> np.linalg.det(M) 59.999

Calculer le rang d’une matrice

np.linalg.matrix_rank(Matr ice)

np.linalg.matrix_rank(M) 2

Calculer les valeurs propres d’une matrice

Calculer le vecteur propre d’une matrice

np.linalg.eigvals(matrice)

np.linalg.eig(matrice)

>>>np.linalg.eigvals(M) array([ 6.+4.89j,6.-4.89j])

>>>np.linalg.eig (M) (array([ 6.+4.89j,6.-4.89j]), array([[ 0.79+0.j,0.79+0.j],

[0.22+0.55j,0.22-0.55j]]))

Calculer l’inverse d’une matrice

np.linalg.inv(matrice)

B.H

>>>np.linalg.inv(M) array([[0.13,-0.11], [0.06,0.06]])

14

B.H

7

Simulation Numérique

03/05/2021

15

LES MATRICES

Publicité

Méthode utiles pour les matrices

Trouver la valeur maximum dans une matrice

np.max(matrice) Ou Matrice.max()

Trouver la valeur maximale dans une ligne d’une matrice

np.max(matrice[ligne]) Ou Matrice[ligne].max()

Trouver la valeur minimale dans une matrice

np.min(matrice) Ou Matrice.min()

>>>np.max(M) 8 >>>M.max(M) 8

>>>np.max(M[0]) 7 >>>M.max(M[0]) 7

>>>np.min(M) -4 >>>M.min(M) -4

Calculer la somme des éléments d’une matrice

np.sum(matrice) ou Matrice[ligne].sum()

>>>np.sum(np.arrray([[1,2],[5,6]]) 7

Calculer le transposé d’une matrice 15

np.transpose(matrice) >>>np.transpose(np.arrray([[1,2],[5

B.H

,6]])

16

LES MATRICES

(numpy)

 Résolution d’un système linéaire à l’aide de la sous bibliothèque de

linalg de numpy

 np.linalg.solve (A,B) permet de résoudre le système linéaire tel que

A.X=B

 A: est une matrice d’ordre n  B: est un vecteur Exemple:

2(cid:1876) + 3(cid:1878) = 9 (cid:1876) + 2(cid:1877) − (cid:1878) = 1 (cid:1876) + (cid:1877) + 5(cid:1878) = 2

On veut résoudre le système linéaire suivant:

>>> import numpy as np >>>A=np.array([[2,0,3],[1,2,-1],[1,1,5]]) >>>B=np.array([9,1,2]) >>>X=np.linalg.solve(A,B) ou x=np.dot(np.linalg.inv(A),B) >>>print(X) array([ 4.73684211, -1.94736842, -0.15789474])

B.H

16

B.H

8

Simulation Numérique

03/05/2021

Application d’une fonction sur les éléments d’un tableau

(numpy)

Définir une fonction lambda

Définir une fonction def

Rendre une fonction applicable sur les éléments d’un tableau

Appliquer une fonction sur les éléments d’un tableau

Nom_f=lambda parametres: expression Nom_F=lambda parametres: expr1 if condition else expr2

def nom_f(parametres): Traitements return (resultat)

>>>f=lambda x: x**2 >>>f1=lambda x: x**3 if x>0 else x**2

>>>def f(x):

return(x**2)

Nom_F1=np.vectorize(Nom_F) >>>F=np.vectorize(f)

Nom_F(tableau) Erreur Nom_F1=np.vectorize(nom_F) Nom_F1(tableau)

>>>g(V) ERREUR >>>F(V) array([F(V[0]),F(V[1]),F(V[2])]

B.H

17

17

18

EXERCICE:(concours 2012)

(numpy)

On considère la matrice carrée A=(ai,j) d’ordre 5 tel que :

1 − (

1 )(cid:2873)(cid:2879)(cid:3036) (cid:1871)(cid:1861) (cid:1861) = (cid:1862) (cid:1857)(cid:1872) (cid:1861) < 5 2 1 (cid:1871)(cid:1861) (cid:1861) = 5 (cid:1857)(cid:1872) (cid:1862) = 5

(cid:2873)(cid:2879)(cid:3037)

1 2

(cid:1871)(cid:1861) (cid:1861) = (cid:1862) + 1

(cid:1853)(cid:3036),(cid:3037) =

0 (cid:1871)(cid:1861)(cid:1866)(cid:1867)(cid:1866)

Répondre en python aux questions suivantes : 1) Définir la fonction f à deux variables i et j tel que f(i,j)=ai,j 2) Définir A, en utilisant f 3) Calculer d, le déterminant de A 4) Déterminer L, la liste des valeurs propres de A 5) Déterminer AI, la matrice inverse de A 6) Définir I5, la matrice identité d’ordre 5

7) Résoudre le système linéaire A.x=b avec b=

B.H

1 0 0 0 0

18

B.H

9

Simulation Numérique

03/05/2021

19

20

EXERCICE:(concours 2012)

(numpy)

Correction :

>>> import numpy as np 1) def f(i,j):

if i==j and i<5:

return(1-(1/2)**(5-j))

elif i==5 and j==5:

return (1)

elif i==j+1:

return((1/2)**(5-j))

else:

return (0)

2) F=np.vectorize(f)

A=np.fromfunction(F,(5,5))

3) d=np.linalg.det(A) 4) L=list(np.linalg.eigvals(A)) 5) AI=np.linalg.inv(A) 6) I5=np.identity(5) 7) b=np.array([1]+[0]*4)

x=np.linalg.solve(A,b)

B.H

Traçage des courbes

(matplotlib)

 matplotlib : est une bibliothèque qui permet de faire le traçage des

courbes à l’aide des tableaux  Tableau des abscisses  Tableau des ordonnées

 On doit faire l’importation de la bibliothèque matplotlib.pylab

>>> import matplotlib.pylab as plt

 La méthode qui permet de tracer la courbe plot

>>>plt.plot(vecteur_abscisse,vecteur_ordonnée)

 La méthode qui permet de visualiser la courbe show()

>>> plt.show()

B.H

19

20

B.H

10

Simulation Numérique

03/05/2021

21

22

Traçage des courbes

(matplotlib)

Exemple: On veut faire le traçage de la courbe de la fonction f(x)=x3+2x-1 dans l’intervalle [-5,10] 1ère étape: définir la fonction 2ème étape: importation de la bibliothèque numpy et matplotlib 3ème étape: définir un vecteur qui contient des valeurs dans l’intervalle [-5 , 10]

4ème étape: appliquer la fonction f sur le vecteur défini précédemment 5ème étape : faire le traçage de la courbe 6ème étape : voir la courbe

B.H

Traçage des courbes

(matplotlib)

Exemple: On veut faire le traçage de la courbe de la fonction f(x)=(cid:1876)(cid:2871) + 2(cid:1876) + 1 dans l’intervalle [-5,10]

>>> def f(x):

return (x**3+2*x+1)

>>>import numpy as np >>>import matplotlib.pylab as plt >>>VA=np.linspace(-5,10,100) >>>FV=np.vectorize(f) >>>VO=FV(VA) >>>plt.plot(VA,VO) >>>plt.show()

B.H

21

22

B.H

11

Simulation Numérique

03/05/2021

23

Traçage des courbes

(matplotlib)

Des méthodes pour modifier les caractéristiques de la figure affichant la courbe

Modifier le nom de l’axe des abscisses

plt.xlabel(nom_de_l’axe)

Modifier le nom de l’axe des ordonnées

plt.ylabel(nom_de_laxe)

Modifier le titre de la figure

plt.title(nom_figure)

B.H

23

24

Traçage des courbes

Publicité

(matplotlib)

Exemple:

On veut tracer les courbes des deux fonctions, f(x)=sin(x) et g(x)=1/tg(x) sur le même graphique pour x ϵ [-π,π]

>>>plt.plot(a,of) >>>plt.plot(a,og) >>>plt.xlabel("axe des abscise") >>>plt.ylabel("axe des ordonnés") >>> plt.title("courbes de la fonction f et g") >>>plt.show()

>>>import numpy as np >>>import matplotlib.pylab as plt >>>def f(x):

return(np.sin(x))

>>>def g(x):

return(1/np.tan(x)) >>>a=np.linspace(-np.pi,np.pi,1000) >>>f1=np.vectorize(f) >>>g1=np.vectorize(g) >>>of=f1(a) >>>og=g1(a)

B.H

24

B.H

12

Simulation Numérique

03/05/2021

25

26

scipy

 scipy: contient de nombreuses boîtes à outils sur les méthodes d'informatique scientifique. Ses différents sous-modules correspondent à différentes applications scientifiques, telles méthodes d'interpolation, que les les l'optimisation, l'imagerie, l'intégration, statistiques, les fonctions mathématiques spéciales.

B.H

scipy

Dans la librairie scipy existe plusieurs modules tel que:  scipy.special (fonction de bessel, erf, gamma, etc)  scipy.integrate(intégration numérique ou d’équation différentielles)  scipy.optimize (minimisation, moindres-carrées, zéros d’une

fonction)

 scipy.interpolate  scipy.signal(convolution,filtrage,ondelettes)  scipy.linalg (pour l’algèbre linéaire)  scipy.stats (fonctions et distribution statistiques)  scipy.ndimage ( pour le traitement d’images)

B.H

25

26

B.H

13

Simulation Numérique

03/05/2021

Résolution d’équation

Pour résoudre les équations, on utilise le module scipy.optimize Exemple: On veut chercher les racines de la fonction: F(x)=x3+6x2-3x+1 dans l’intervalle [-10,10] Pour vérifier les résultats on va tracer la courbe de la fonction F sur l’intervalle pour voir les résultats

>>> def F(x):

return (x**3+6*x-3*x+1)

>>>import numpy as np >>>import matplotib.pylab as plt >>>VA=np.linspace(-10,10,10000) >>>FV=np.vectorize(F) >>>VO=FV(VA) >>>plt.plot(VA,VO) >>>plt.show()

B.H

27

27

28

Résolution d’équation

Résolution: F(x)=x3+6x2-3x+1 dans l’intervalle [-10,10]

explication

code

1 Définir la fonction F

>>>def F(x):

return(x**3+6*x**2-3*x+1)

Ou >>>F=lambda x: x**3+6*x**2-3*x+1

2 Importation du module optimize de scipy

>>>import scipy.optimize as op

3 Résolution avec la méthode newton

4 Résolution avec la méthode dichotomique

5 Résolution avec des algorithmes hybrid

>>>op.newton(F,-10) -0.32218535462618547

>>>op.bisect(F,-10,10) -0.32218535462608555

>>>op.fsolve(F,-10) array([-0.32218535])

B.H

28

B.H

14

Simulation Numérique

03/05/2021

29

30

Résolution d’équation

explication

code

6 Résolution avec la méthode hybride

aussi (Sol:La solution représentait un objet `` Result`)`. Les attributs importants sont: x:la solution array, success: Indicateur booléen indiquant si l'algorithme est sorti avec succès Message: qui décrit la cause de la terminaison.

>>>sol=op.root(F,-10) status: 1 success: True qtf: array([ 5.51154809e-07]) nfev: 10 r: array([-45.38049125]) fun: array([ -3.37507799e-12]) x: array([-0.32218535462618547]) message: 'The solution converged.'

fjac: array([[-1.]])

B.H

29

Calcul de l’intégrale

Pour calculer l’intégrale on utilisera le sous module scipy.integrate

import scipy.integrate as SI

Des méthodes pour le calcul de l’intégrale

SI.trapz(Y,X)

Applique la méthode des trapèzes à une liste des points dont les abscisses sont dans X et les ordonnées dans Y

SI.simps(Y,X)

Applique la méthode de Simpson

SI.quad(function,bi,bs)

Renvoie un couple (x,eps) x:est une valeur approchée de l’intégrale de la fonction sur l’intervalle ]bi,bs[ eps: majoration de l’erreur commise

SI.quad(function,np.inf,np.inf)

B.H

30

B.H

15

Simulation Numérique

03/05/2021

Calcul de l’intégrale

 Soit la fonction f(x)=x**2+x-1

31

 Calculer ∫ (cid:1858)((cid:1876))

dx

(cid:2873) (cid:2868)

INSTRRUCTIONS

EXPLICATION

>>>import scipy.integrate as SI

Importation de la bibliothèque

>>>f=lambda x : x**2+x+1

>>>import numpy as np >>> X=np.linspace(0,5,1000) >>> Y=f(X)

>>>SI.trapz(Y,X) 59.166687541729274

>>>SI.simps(Y,X) 59.166666687562625

Définition de la fonction f

Préparation des deux tableaux pour l’utilisation des deux méthodes de calcul de l’intégrale

Utilisation de la méthode trapz

Utilisation de la méthode simps

>>>SI.quad(f,0,5) (59.16666666666666, 6.568819562365509e-13)

B.H

Utilisation de la méthode quad

31

32

Résolution d’équation différentielle

32

Pour résoudre une équation différentielle numériquement, on utilisera aussi le sous module: scipy.integrate

import scipy.integrate as SI SOL=SI.odeint(function,Y0,TX)

 Function: c’est une fonction à deux paramètres Y ET X  Y0: la condition initiale  TX: un vecteur qui contient les abscisses des points qui appartiennent à

l’intervalle dans lequel on veut trouver les solutions

 SOL: est le résultat de la méthode odeint qui sera une matrice d’une seule colonne et le nombre de lignes est égale au nombre des éléments de TX

B.H

B.H

16

Simulation Numérique

03/05/2021

Résolution d’équation différentielle

33

 EXEMPLE:  On veut résoudre l’équation différentielle du premier ordre suivante :

y’=y*sin(y) + sin(t) avec y(0) = 2 pour t=[0…20]

>>>import scipy.integrate as SI >>>import numpy as np >>>def deriv (y , t ) :

return (y∗np.sin (y) +np.sin (t))

>>>TX = np.linspace(0,20,1000) >>>Y0 = 2 >>>sol=SI.odeint(deriv,Y0,TX)

 Tracer la courbe de la solution trouvée

>>>import matplotlib.pylab as plt >>>plt.plot(TX,sol[:,0]) >>>plt.show()

B.H

33

B.H

17