fcaprile / practica-resonancia

0 stars 1 forks source link

graficar y ajuste #1

Open fcaprile opened 6 years ago

fcaprile commented 6 years ago

import math as m from matplotlib import pyplot as plt import numpy as np from scipy.optimize import curve_fit plt.figure(1) plt.figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k') plt.rcParams['font.size']=12

''' Asumimos que el archivo presenta tres columnas Columna1:frecuencias Columna2: V input Columna3: V output '''

cargo ambos archivos

carpeta='C:/Users/ferchi/.spyder-py3/labo/Mediciones/piezo/Cooked Data/' archivo1 = np.loadtxt(carpeta+'campana50Khz.txt')

carpeta='C:/Users/ferchi/.spyder-py3/labo/Mediciones/piezo/Raw Data/'

archivo2 = np.loadtxt(carpeta+'campana150khz.txt') archivo1[:,0] /= 1000 archivo2[:,0] /= 1000 archivo2[:,2] = 1000 archivo1[:,2] = 1000

x=archivo1[:,0]
y=archivo1[:,2]

f=lambda x,x0,A,y0: A/(((x-x0)2+(A)2)*np.pi)+y0 f = lambda x,x0,A,a,y0: A/(1+((x0-x)/(a/2))2)+y0 f = lambda x,x0,A,a: A/(1+((x0-x)/(a/2))2)

iniciales=np.array([x[np.argmax(y)],540,0.01,80]) iniciales=np.array([x[np.argmax(y)],540,0.01])

iniciales=np.array([50.098,416.931,-0.01,80])

ey=y*0.02 popt, pcov = curve_fit(f,x,y,p0=iniciales,sigma = ey,absolute_sigma=True) #calcula el fiteo y devuelve los sigmas y los valores de las variables que dan el fiteo, el sigma es el error del eje y. la parte del absolute_sigma es para que la matriz de error dependa del error de y, si es false depende de cuanto se dispersan del ajuste xx=np.linspace(x[0],x[-1],1000)

divido el plot en 2 columnas, 1 fila, elijo primera subdivision

plt.subplot(2, 1, 1) plt.plot(x,y,'r*')

plt.plot(xx,f(xx, popt[0], popt[1],popt[2],popt[3]), 'g-', label = 'Ajuste')#los popt son los valores de las variables fiteadas que usara la funcion f

plt.plot(xx,f(xx, popt[0], popt[1],popt[2]), 'g-', label = 'Ajuste')#los popt son los valores de las variables fiteadas que usara la funcion f

ajusto escala a kHz

plt.ylabel('rms(mV)') plt.xlabel('frecuencia (kHz)') plt.grid(True) # Para que quede en hoja cuadriculada plt.title('Temperatura en funcion del tiempo') x=archivo2[:,0]
y=archivo2[:,2]
iniciales=np.array([x[np.argmax(y)] ,416.931,0.005,180])
iniciales=np.array([x[np.argmax(y)] ,416.931,0.005])

ey=y*0.02 popt, pcov = curve_fit(f,x,y,p0=iniciales,sigma = ey,absolute_sigma=True) #calcula el fiteo y devuelve los sigmas y los valores de las variables que dan el fiteo, el sigma es el error del eje y. la parte del absolute_sigma es para que la matriz de error dependa del error de y, si es false depende de cuanto se dispersan del ajuste xx=np.linspace(x[0],x[-1],1000)

elijo segunda subdivision

plt.subplot(2, 1, 2) plt.plot(x, y,'b*') #ajusto escala a kHz

plt.plot(xx,f(xx, popt[0], popt[1],popt[2],popt[3]), 'g-', label = 'Ajuste')#los popt son los valores de las variables fiteadas que usara la funcion f

plt.plot(xx,f(xx, popt[0], popt[1],popt[2]), 'g-', label = 'Ajuste')#los popt son los valores de las variables fiteadas que usara la funcion f
plt.ylabel('rms(V)') plt.xlabel('frecuencia (KHz)') plt.grid(True) # Para que quede en hoja cuadriculada plt.title('Temperatura en funcion del tiempo')

plt.show()