Ici, nous visons à déterminer les paramètres en ajustant les données expérimentales à partir de l'état obtenu dans le fichier txt ou le fichier dat. Afin d'utiliser la fonction indépendamment du fait qu'elle soit linéaire ou non linéaire, nous utilisons un module appelé curve_fit, qui fait partie du module scipy.optimize inclus dans le package Python scipy.
Commencez par charger le module requis.
#Nécessaire pour le montage
from scipy.optimize import curve_fit
import numpy as np
#Requis pour l'illustration
import matplotlib.pyplot as plt
Essayez d'ajuster les données suivantes.
x = np.asarray([1,2,4,6,7])
y = np.asarray([1,3,3,5,4])
plt.scatter(x, y, c='k')
plt.show()
Définissez la forme fonctionnelle à ajuster et effectuez effectivement l'ajustement.
#Définissez l'expression de fonction que vous souhaitez adapter. Voici une fonction linéaire.
def linear_fit(x, a, b):
return a*x + b
#Effectuer l'ajustement.
#prameter_initial = np.array([1,2])← Définissez la valeur initiale ici, mais sautez-la ici.
popt, pcov = curve_fit( linear_fit, x, y)#, p0= prameter_initial)
L'ajustement a été effectué jusqu'à présent et les résultats des paramètres a et b sont stockés dans la première valeur de retour popt. Cette fois, les deux paramètres de la pente a et de la section b de la fonction linéaire sont inclus dans popt comme [a, b] = [popt [0], popt [1]]. Vérifiez quelle est la valeur.
print (popt[0],popt[1])
Peut-être que vous pouvez trouver a = 0,4999 ..., b = 1,2000 ... Tracez la superposition pour voir si cette valeur est valide. Ça n'a pas l'air bien.
c=popt[0]
d=popt[1]
f = c*x + d #f = linear_fit(x,popt[0],popt[1])Ou f= linear_fit(x,*popt)Mais d'accord.
plt.scatter(x, y, c='k')
plt.plot(x, f, c='r')
plt.show()
De même, chargez le module requis.
#Nécessaire pour le montage
from scipy.optimize import curve_fit
import numpy as np
#Requis pour l'illustration
import matplotlib.pyplot as plt
Essayez d'ajuster les données suivantes.
x = np.asarray([1,2,2.5,4,5,6,7,8,9,10])
y = np.asarray([10,8,5,2,1,1.2,2.5,5,7,10])
plt.scatter(x, y, c='k')
plt.show()
Définissez la forme fonctionnelle à ajuster et effectuez effectivement l'ajustement.
#Définissez l'expression de fonction que vous souhaitez adapter. Voici une fonction quadratique.
def two_fit(x,a,b):
return a*(x-b)**2
#Effectuer l'ajustement. La valeur initiale est également définie.
prameter_initial = np.array([1,5])
popt, pcov = curve_fit(two_fit, x, y, p0= prameter_initial)
L'ajustement a été effectué jusqu'à présent et les résultats des paramètres a et b sont stockés dans la première valeur de retour popt. Cette fois, les deux paramètres de la pente a et de la section b de la fonction linéaire sont inclus dans popt comme [a, b] = [popt [0], popt [1]]. Vérifiez quelle est la valeur.
print (popt[0],popt[1])
Peut-être que vous pouvez trouver a = 0.5404046977156955, b = 5.48472528172034. Tracez la superposition pour voir si cette valeur est valide. Bien que cela ne soit pas expliqué dans la fonction linéaire, il existe actuellement deux méthodes de tracé. Tout d'abord, essayez la même méthode que pour la fonction linéaire.
c=popt[0]
d=popt[1]
f = c*(x-d)**2 #f = two_fit(x,popt[0],popt[1])#Tu peux écrire comme ça, f= two_fit(x,*popt)Mais d'accord.
plt.scatter(x, y, c='k')
plt.plot(x, f, c='r')
plt.show()
Je ne savais pas quand c'était une fonction linéaire, mais vous pouvez voir que c'est saccadé. S'il y a beaucoup de données, cela ne me dérange pas, mais je n'aime pas son apparence, alors je vais l'écrire en douceur comme deuxième méthode.
#Spécification de la plage de dessin
# x1 = np.arange(axe x minimum,Valeur maximale sur l'axe des x,Cranté)
x1 = np.arange(1, 10, 0.000001)
c=popt[0]
d=popt[1]
f = c*(x1-d)**2
plt.scatter(x, y, c='k')
plt.plot(x1, f, c='r')
plt.show()
C'est agréable et lisse. Créez x1 comme plage de dessin et affinez les étapes. Maintenant que nous connaissons la méthode d'ajustement de base et la méthode de dessin, nous allons enfin lire les données expérimentales du fichier txt et du fichier dat et effectuer l'ajustement.
Enfin, sur la base de ce qui précède, lisez les données du fichier txt et du fichier dat, effectuez l'ajustement et déterminez les paramètres. Je mettrai tout le code à la toute fin.
Recommended Posts