Forum EduPython

Echanges autour d'EduPython.

Vous n'êtes pas identifié(e).

#1 2020-06-17 16:51:37

dada
Membre
Inscription : 2020-06-17
Messages : 1

Graphique / regression linéaire

Bonjour à tous,

Je n'ai aucune expérience en python...
Je souhaite tracer le graphe sin(i1) en fonction de sin(i2) puis faire une modélisation linéaire. (loi de Snell Descartes)

Expérimentalement, j'ai des valeurs des angles i1 et i2 en degré. Dans le programme ci-dessous, j'ai converti ces angles en radian puis déterminer leur sinus. Je veux modéliser ce graphe par une droite, j'ai donc utiliser np.polyfit.

Seule l'avant dernière ligne ne marche pas : j'aimerai superposer graphiquement la modélisation et les valeurs expériementale. Pouvez vous m'aider ?

Merci beaucoup !

from lycee import *
from matplotlib import pyplot as plt
import numpy as np
i1=np.array ([10,20,30,40,50,60])
i2=np.array ([6.6,13.2,19.5,25.4,30.7,35.3])
i1rad = [ ]
i2rad = [ ]
sini1 = [ ]
sini2 = [ ]
for i in range (0,6) :
    i1rad.append(np.pi*i1[i ]/180)
    i2rad.append(np.pi*i2[i ]/180)
    sini1.append(np.sin(i1rad[i ]))
    sini2.append(np.sin(i2rad[i ]))
plt.axis([0,0.6,0,1])
plt.title('Loi de Snell Descartes')
plt.xlabel('sin(i2)')
plt.ylabel('sin(i1)')
plt.grid('true')
plt.plot(sini2, sini1,'ro')

a,b = np.polyfit(sini2, sini1,1)
plt.plot(sini2, a*sini2+b,'b-')
plt.show ( )

Hors ligne

#2 2020-06-17 19:57:10

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 308

Re : Graphique / regression linéaire

Bonjour, voici une solution :

from lycee import *
from matplotlib import pyplot as plt
import numpy as np
i1=np.array([10,20,30,40,50,60])
i2=np.array([6.6,13.2,19.5,25.4,30.7,35.3])
i1rad = []
i2rad = []
sini1 = []
sini2 = []
for i in range (0,6) :
    i1rad.append(np.pi*i1[i]/180)
    i2rad.append(np.pi*i2[i]/180)
    sini1.append(np.sin(i1rad[i]))
    sini2.append(np.sin(i2rad[i]))
plt.axis([0,0.6,0,1])
plt.title('Loi de Snell Descartes')
plt.xlabel('sin(i2)')
plt.ylabel('sin(i1)')
plt.grid(True)
plt.plot(sini2, sini1,'ro')

a,b = np.polyfit(sini2, sini1,1)
plt.plot(sini2, a*np.array(sini2)+b,'b-')
plt.show()

Ligne 19, c'est mieux de mettre True sans guillemets (Un booléen et non une chaine)
Ligne 23, il faut des objets de type numpy (array) si vous voulez multiplier par un réel

Vincent

Hors ligne

Pied de page des forums