# -*- coding: utf-8 -*- """ Created on Thu Apr 25 08:19:07 2019 @author: Publico """ import numpy as np import matplotlib.pyplot as plt import scipy.optimize as scop from scipy import signal def leermd(filename): from pandas import read_csv import numpy as np df = read_csv(filename, sep='\t', skiprows=3, decimal=',') nparray = df.as_matrix() result = nparray[~np.isnan(nparray).any(axis=1)] return result def calcperpendulo(datos): plt.figure() plt.plot(datos[:,0],datos[:,1]) #trazo datos dife=np.diff(datos[:,1]) #Nos quedamos con la diferecencia de voltaje entre mediciones consecutivas, porque nos interesan las transiciones entre destapado y obturación tiempos = datos[1:,0] #Sacamos los tiempos correspondientes a las diferencias plt.plot(tiempos,dife) #trazo diferencia tiempos_picos=tiempos[dife>2] #Nos quedamos con los tiempos correspondientes a esos saltos per=np.diff(tiempos_picos) #Calculamos diferencia entre tiempos de saltos consecutivos periodos=[] for i in range(len(per)-1): #Calculamos el salto de 2 en 2 periodos.append(per[i]+per[i+1]) periodo=np.mean(periodos) #Calculo promedio perDS=np.std(periodos) #Calculo desvío estándar result=[periodo,perDS] return result def periodoresorte(datos,nventana): plt.figure() plt.plot(datos[:,0],datos[:,1]) #trazo datos extrema = signal.argrelmax(x,order=nventana) tiempo_extrema=datos[extrema,0] plt.plot(datos[extrema,0],datos[extrema,1],'o') periodos=np.diff(tiempo_extrema) periodo=np.mean(periodos) #Calculo promedio perDS=np.std(periodos) #Calculo desvío estándar result=[periodo,perDS] return result def pos_max(datos,nventana): plt.figure() plt.plot(datos[:,0],datos[:,1]) #trazo datos extrema = signal.argrelmax(x,order=nventana) tiempo_extrema=datos[extrema,0] valor_extrema=datos[extrema,1] plt.plot(tiempo_extrema,valor_extrema,'o') result=[tiempo_extrema,valor_extrema] return result def funcion_lineal(x,a,b): return a*x + b #%% perfinal=[] e_per=[] longitud=np.array([]) e_long=np.array([]) perfinal.append(calcper(sasra)[0]) e_per.append(calcper(sasra)[1]) p_opt,cov = scop.curve_fit(data_x,data_y,sigma = errores_y) errores_parametros = np.sqrt(np.diag(cov)) plt.figure() plt.errobar(data_x,data_y,errores_y,'.') plt.plot(data_x,funcion_lineal(data_x,p_opt[0],p_opt[1]))