# -*- coding: utf-8 -*- """ Created on Wed Apr 11 11:10:07 2018 @author: pc_box6 """ import numpy as np import matplotlib.pyplot as plt #Opción: usar el script de Ioni de la clase pasada para crear csv #data = np.genfromtxt('datos.csv', delimiter=",") #R = np.array(data[1:,0]) #I = np.array(data[1:,1]) #V = np.array(data[1:,2]) #Item i) Efuente = 15 #voltaje de la fuente R1 = np.array([1,2,3,4,5])*10 #resistencia variable I1 = np.array([ 1.15384615, 0.65217391, 0.45454545, 0.34883721, 0.28301887]) #mide amperímetro V1 = np.array([ 11.53846154, 13.04347826, 13.63636364, 13.95348837, 14.1509434 ]) #mide voltimetro en la resistencia errorI1 = 0.01*I1 # ver manual cual es la precisión del tester para medir corriente errorV1 = 0.02*V1 # ver manual cual es la precisión del tester para medir voltaje plt.figure() plt.errorbar(R1,I1,yerr=errorI1,fmt='ko',label='datos') plt.grid() plt.xlabel('R (ohm)') plt.ylabel('I(A)') plt.legend(loc='best') plt.show() #plt.savefig('figura1.jpg',dpi=400) plt.figure() plt.errorbar(I1,V1,xerr=errorI1,yerr=errorV1,fmt='ko',label='datos') plt.legend(loc='best') plt.xlabel('I (A)') plt.ylabel('V (V)') plt.show() #A continuación se realiza un ajuste lineal de V(voltaje medido sobre la resistencia variable) y la corriente I que circula por la malla. Asumo que la resistencia interna del voltimétro que mide V es mucho mas grande que las resistencias de la malla, por lo que toda la corriente que entrega la fuente continua circula por la resistencia variable, por la resistencia interna del amperimetro y por la resistencia interna de la fuente. #Efuente = Rfuente.I + Ramperimetro. I + V #V = Ef - (Rf+Ra).I #Ajuste lineal opcion 1 ajuste = np.polyfit(I1,V1,1,w=1/errorV1**2) # ajuste para polinomio de grado 1 (lineal), ordenada de origen: E, pendiente: -(Rf+Ra) x = np.linspace(min(I1),max(I1),10) #Ajuste lineal opcion 2 from scipy.optimize import curve_fit f = lambda xl, A, B: A*xl+B # la función modelo, con la que ajustamos popt, pcov = curve_fit(f, I1, V1, sigma = errorV1, absolute_sigma=True) sigmas = np.sqrt([pcov[0,0],pcov[1,1]]) pendiente = popt[0] ordenada = popt[1] for i in range(2): print("{:.2f}+-{:.2f}".format(popt[i], sigmas[i])) plt.figure() plt.plot(x,ajuste[0]*x + ajuste[1],'b-',label='ajuste lineal opcion 1') plt.plot(x,pendiente*x + ordenada,'r-',label='ajuste lineal opcion 2') plt.errorbar(I1,V1,xerr=errorI1,yerr=errorV1,fmt='ko',label='datos') plt.legend(loc='best') plt.xlabel('I (A)') plt.ylabel('V (V)') plt.show() #plt.savefig('figura2.jpg',dpi=400) #Item ii) Efuente = 15 #voltaje de la fuente R1 = np.array([1,2,3,4,5])*10 #resistencia variable R2 = 10 # resistencia de carga I = np.array([ 0.65, 0.45, 0.35, 0.28, 0.24]) #mide amperímetro Vr = np.array([ 6.52, 4.5, 3.5, 2.8, 2.4])#mide voltimetro en la resistencia de carga errorI = 0.01*I # ver manual cual es la precisión del tester para medir corriente errorVr = 0.02*Vr # ver manual cual es la precisión del tester para medir voltaje plt.figure() plt.errorbar(I,Vr,xerr=errorI,yerr=errorVr,fmt='ko',label='datos') plt.legend(loc='best') plt.xlabel('I (A)') plt.ylabel('V$_R$ (V)') plt.show() from scipy.optimize import curve_fit f = lambda xl, A, B: A*xl+B # la función modelo, con la que ajustamos popt, pcov = curve_fit(f, I, Vr, sigma = errorVr, absolute_sigma=True) sigmas = np.sqrt([pcov[0,0],pcov[1,1]]) pendiente = popt[0] ordenada = popt[1] for i in range(2): print("{:.2f}+-{:.2f}".format(popt[i], sigmas[i])) plt.figure() plt.plot(x,pendiente*x + ordenada,'r-',label='ajuste lineal') plt.errorbar(I,Vr,xerr=errorI,yerr=errorVr,fmt='ko',label='datos') plt.legend(loc='best') plt.xlabel('I (A)') plt.ylabel('Vr (V)') plt.show()