0% encontró este documento útil (0 votos)
12 vistas34 páginas

6 OsciladorForzado Informe Terminado

La práctica se centró en estudiar el efecto de resonancia en un muelle forzado mediante un motor y un generador de funciones, además de cuantificar el efecto del rozamiento. Se utilizó un móvil conectado a un portátil para registrar datos de oscilación y se aplicó un freno electromagnético para observar el movimiento. Los resultados mostraron que la amplitud de oscilación se maximiza cuando la frecuencia del motor se aproxima a la frecuencia natural del sistema.

Cargado por

lolohjeje27
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
12 vistas34 páginas

6 OsciladorForzado Informe Terminado

La práctica se centró en estudiar el efecto de resonancia en un muelle forzado mediante un motor y un generador de funciones, además de cuantificar el efecto del rozamiento. Se utilizó un móvil conectado a un portátil para registrar datos de oscilación y se aplicó un freno electromagnético para observar el movimiento. Los resultados mostraron que la amplitud de oscilación se maximiza cuando la frecuencia del motor se aproxima a la frecuencia natural del sistema.

Cargado por

lolohjeje27
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 34

6.

- Oscilador Amortiguado y Forzado -


Resonancia
H echo por, M anuel L ópez P érez y Raf ael M ayoral H ernández

-Información general

·Fecha: 04/03/2025

·Lugar: Laboratorio de física

·Temperatura: 18.9°C

·Humedad: 54 %

·Presión: 1019.6 HPa

·Grupo 2

Resumen

En esta práctica hemos hecho principalmente dos cosas, comprobar el


ef ecto de resonancia en un muelle forzado mediante un motor, al que habiamos
conectado un generador de funciones (con el que controlabamos la frecuencia de
oscilación); y por otra parte hemos comprobado y cuantificado el efecto del rozamiento en
la resonancia.

En la primera parte de la práctica, pusimos un móvil con la aplicación "phyphox",


anteriormente conectado con nuestro portatil para poder controlarlo remotamente. Con ello
fuimos descargando los datos que ibamos obteniendo con las diferentes frecuencias.

En la segunda parte de la práctica, pusimos un imán en la parte baja de la cesta metálica,


este imán en cada oscilación atravesaba una bobina de cobre, lo que provocaba una
inducción electromagnética (que como ya sabemos produce un campo eléctrico que se
opone al magnético que lo ha generado anteriormente), de esta manera conseguíamos un
freno electromagnético.

T eor a í
Considérese un muelle de masa despreciable, del cual cuelga una masa m. El muelle está
sujeto a un motor, el cual le aplica una fuerza periódica F(t) = FH cos(ωt) de frecuencia
angular ω = 2πv , siendo ν la frecuencia de oscilación del motor. La masa oscilante sufre
además una fuerza de fricción con el medio circundante (por ejemplo, con el aire), que será
proporcional a su velocidad, F f ric = −λv . Teniendo en cuenta la fuerza recuperadora del
muelle, F H ooke
= −kx (siendo x el desplazamiento con respecto a la posición de equilibrio
x0 = 0 ), el movimiento de la masa se rige por la ecuación:

2
d x dx
2
+ 2γ + w x = F0 cos(wt) (1)
0
2
dt dt

donde 2γ = λ/m yw 2
0
= k/m es la frecuencia angular propia de oscilación de la masa,
siendo v 0
= w0 /(2π) la recuencia propia del sistema.

Como resultado, la masa oscilarña siguiendo la ecuación x(t) = A ⋅ sin(wt − δ) . Nótese


que la frecuencia de este movimiento es la que impone el motor, w, y no la natural del
sistema, w . La amplitud de este movimiento viene dada por [véase Alonso y Finn, Física, Vol.
0

1 Mecánica (Fondo Educativo Interamericano, 1970), secciones 12.12 y 12.13, pp. 387-393]:

F0 /m A0
A = = (2)
2 2 2 2 2 1/2 2 2 2 2 2 1/2
[(w − w ) + 4γ w ] [(w − w ) + 4γ w ]
0 0

donde hemos llamado A 0


= F0 /m . Para cierto valor de la frecuencia del motor, próximo a
la frecuencia natural del sistema, w = wmax ≈ w0 , la amplitud de oscilación presentará un
máximo muy pronunciado. Se dice que el sistema ha estado en resonancia. La
representación de A frente a w presentará un pico muy estrecho. Cuanto menor sea el
efecto del rozamiento (cuanto menor sea γ), más afilado será este máximo (tratándose de
una divergencia en el límite γ → 0 ).

Pueden obtenerse la velocidad y la aceleración de la masa oscilante derivando la ecuación


de la posición con respecto al tiempo, v ya . De aquí podemos deducir la
dx dH x
= =
dt dtH

aceleración:
2
a(t) = −Aw sin(wt − δ) = a0 sin(2πvt − δ) (3)

que presenta una amplitud dada por:

2 2
w ⋅ (F0 /m) A0 ⋅ (2πv)
A = = (4)
2 2 2 2 2 1/2 2 2 2 2 2 1/2
[(w − w ) + 4γ w ] [((2πv) − (2πv0 ) ) + 4γ (2πv) ]
0

que también presentará un máximo a una frecuencia w = wmax ≈ w0

El objetivo de la práctica consiste en forzar el movimiento de un muelle (del que cuelga un


teléfono móvil) mediante un motor de frecuencia regulable, para observar el fenómeno de
resonancia. El acelerómetro del móvil registra su aceleración en función del tiempo, lo que
permite cuantificar el fenómeno. La experiencia se realiza con el rozamiento casi inapreciable
del aire, así como con la fricción proporcionada por un freno electromagnético.
Librerías y funciones necesarias
In [1]: from __future__ import print_function
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
from scipy.optimize import curve_fit

Función sinusoidal para la aceleración en función del tiempo, a(t), ec. (3) del guion:

In [2]: # Función seno


def Seno(x, A, nu, delta, y0):
y = A*np.sin(2.0*np.pi*nu*x + delta) + y0
# y = A*np.sin(2*3.1415*nu*x + delta) + y0
return y

Función para la amplitud (en aceleración) del oscilador en función de la frecuencia, a 0


(ν) , ec.
(4) del guion. Nótese la dependencia con la frecuencia y no con la frecuencia angular, ω:

In [3]: # Función resonancia


def Resonancia(x, A0, nu0, gamma):
y = A0*(2.0*np.pi*x)**2/(((2.0*np.pi*x)**2-(2.0*np.pi*nu0)**2)**2+4*gamma**2*(
return y

Inicialización de vectores para las frecuencias ν , las amplitudes a y sus incertidumbres:


0

In [4]: nus = []
As = []
nu_err = []
A_err = []

Experiencia 1

Frecuencia 1.05 Hz
In [5]: datax = np.loadtxt('Raw Data 1.1.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 1.1.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.050, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)


fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.03498 +/- 0.00066 Hz


Amplitud: 0.02704 +/- 0.00033 m/s**2

In [6]: nus = np.append(nus, fit_nu)


As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecuencia 1.10 Hz
In [7]: # Carga del fichero correspondiente de Phyphox. Nótese que está preparado para salt

datax = np.loadtxt('Raw Data 1.2.csv', usecols=0, skiprows=1)


datay = np.loadtxt('Raw Data 1.2.csv', usecols=2, skiprows=1)

# Estimación de la línea base y de la amplitud

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

# Propuesta de parámetros iniciales para el ajuste no lineal

param_inicial = [Ainic, 1.10, 0.0, y0inic]

# Ajuste no lineal por mínimos cuadrados a la ec. (3) del guion

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)

fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

# Representación gráfica

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

# Escritura de resultados "medidos"

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.08157 +/- 0.00076 Hz


Amplitud: 0.036782 +/- 0.00050 m/s**2
In [8]: nus = np.append(nus, fit_nu)
As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

In [9]: nus = np.append(nus, fit_nu)


As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecuencia 1.15 Hz
In [10]: datax = np.loadtxt('Raw Data1.3.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data1.3.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.150, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)

fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.13224 +/- 0.00050 Hz


Amplitud: 0.04962 +/- 0.00046 m/s**2

Frecuencia 1.20 Hz
In [11]: datax = np.loadtxt('Raw Data 1.4.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 1.4.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.20, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)


fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.17670 +/- 0.00034 Hz


Amplitud: 0.07087 +/- 0.00045 m/s**2

In [12]: nus = np.append(nus, fit_nu)


As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecuencia 1.25 Hz
In [13]: datax = np.loadtxt('Raw Data 1.5.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 1.5.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.2500, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)

fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.22538 +/- 0.00017 Hz


Amplitud: 0.12122 +/- 0.00036 m/s**2
In [14]: nus = np.append(nus, fit_nu)
As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecuencia 1.27 Hz
In [15]: datax = np.loadtxt('Raw Data 1.8.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 1.8.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.27, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)

fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.24915 +/- 0.00010 Hz


Amplitud: 0.18769 +/- 0.00035 m/s**2

In [16]: nus = np.append(nus, fit_nu)


As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

A_err

Out[16]: array([0.0003267 , 0.0004986 , 0.0004986 , 0.0004486 , 0.00036267,


0.0003454 ])

In [17]: nus = np.append(nus, fit_nu)


As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecuencia 1.30 Hz
In [18]: datax = np.loadtxt('Raw Data 2.6.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 2.6.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.300, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)

fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.27762 +/- 0.00005 Hz


Amplitud: 0.90370 +/- 0.00078 m/s**2
In [19]: nus = np.append(nus, fit_nu)
As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecuencia 1.40 Hz
In [20]: datax = np.loadtxt('Raw Data 1.7.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 1.7.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.40, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)

fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.37269 +/- 0.00009 Hz


Amplitud: 0.18622 +/- 0.00032 m/s**2

Amplitud frente a frecuencia


In [21]: plt.plot(nus, As, 'o', label='Medidas experimentales')
plt.xlabel("frecuencia (Hz)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

Out[21]: <matplotlib.legend.Legend at 0x224bafa8050>


Propuesta de parámetros iniciales para el ajuste no lineal por mínimos cuadrados a la ec. (4)
del guion:

In [22]: param_inicial = [0.4, 1.3, 0.1]

In [65]: parameters_reso, covariance_reso = curve_fit(Resonancia, nus, As, p0=param_inicial

In [24]: parameters_reso

Out[24]: array([1.15387301e-02, 1.28575780e+00, 3.07045025e-08])

In [25]: covariance_reso

Out[25]: array([[inf, inf, inf],


[inf, inf, inf],
[inf, inf, inf]])

In [26]: A0 = parameters_reso[0]
nu0 = parameters_reso[1]
gamma = parameters_reso[2]
A0_u = covariance_reso[0,0]
nu0_u = covariance_reso[1,1]
gamma_u = covariance_reso[2,2]

In [27]: nu_fit = np.arange(0.75, 2.25, 0.001)


y_fit = Resonancia(nu_fit, A0, nu0, gamma)
#plt.errorbar(nus, As, xerr=nu_err, yerr=A_err, linestyle='None', marker='o', label
plt.plot(nus, As, 'o', label='Medidas experimentales')
plt.plot(nu_fit, y_fit, '-', label='Mínimos cuadrados')
plt.xlabel("frecuencia (Hz)")
plt.ylabel("Aceleración (m/s^2)")
plt.yscale("log")
plt.legend()

Out[27]: <matplotlib.legend.Legend at 0x224b9980ce0>

In [28]: print(f"A0: {A0:.8f} +/- {A0_u:.8f} (m/s^2)")


print(f"Frecuencia de resonancia: {nu0:.7f} +/- {nu0_u:.7f} Hz")
print(f"Gamma: {gamma:.8f} +/- {gamma_u:.8f} (s^-2)")

A0: 0.01153873 +/- inf (m/s^2)


Frecuencia de resonancia: 1.2857578 +/- inf Hz
Gamma: 0.00000003 +/- inf (s^-2)

V (Hz) a 0 (m/s )
2

1.05 0.03

1.10 0.04

0.15 0.05

1.20 0.07

1.25 0.1

1.27 0.19

1.30 0.64
V (Hz) a 0 (m/s )
2

1.40 0.19

Experiencia 2

In [29]: # Función seno


def Seno(x, A, nu, delta, y0):
y = A*np.sin(2.0*np.pi*nu*x + delta) + y0
# y = A*np.sin(2*3.1415*nu*x + delta) + y0
return y

In [30]: # Función resonancia


def Resonancia(x, A0, nu0, gamma):
y = A0*(2.0*np.pi*x)**2/(((2.0*np.pi*x)**2-(2.0*np.pi*nu0)**2)**2+4*gamma**2*(
return y

In [31]: nus = []
As = []
nu_err = []
A_err = []

Frecuecia 1.00 Hz
In [32]: datax = np.loadtxt('Raw Data 2.1.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 2.1.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 0.95, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)

fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 0.98560 +/- 0.00195 Hz


Amplitud: 0.02238 +/- 0.00081 m/s**2

In [33]: nus = np.append(nus, fit_nu)


As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecuencia 1.10 Hz
In [34]: datax = np.loadtxt('Raw Data 2.2.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 2.2.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.05, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)

fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.08101 +/- 0.00157 Hz


Amplitud: 0.03872 +/- 0.00114 m/s**2

In [35]: nus = np.append(nus, fit_nu)


As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecuencia 1.20 Hz
In [36]: datax = np.loadtxt('Raw Data 2.3.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 2.3.csv', usecols=2, skiprows=1)
y0inic = (datay.max() + datay.min()) / 2
Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.15, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)

fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.17765 +/- 0.00028 Hz


Amplitud: 0.08898 +/- 0.00046 m/s**2
In [37]: nus = np.append(nus, fit_nu)
As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecuencia 1.25 Hz
In [38]: datax = np.loadtxt('Raw Data 2.4.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 2.4.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.20, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)

fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.22896 +/- 0.00009 Hz


Amplitud: 0.21598 +/- 0.00035 m/s**2
In [39]: nus = np.append(nus, fit_nu)
As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecencia 1.27 Hz
In [40]: datax = np.loadtxt('Raw Data 2.5.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 2.5.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.25, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)

fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.24653 +/- 0.00005 Hz


Amplitud: 0.42882 +/- 0.00043 m/s**2

In [41]: nus = np.append(nus, fit_nu)


As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecuencia 1.30 Hz
In [42]: datax = np.loadtxt('Raw Data 1.6.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 1.6.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.27, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)


fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.28155 +/- 0.00005 Hz


Amplitud: 0.63557 +/- 0.00054 m/s**2

In [43]: nus = np.append(nus, fit_nu)


As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecuencia 1.35 Hz
In [44]: datax = np.loadtxt('Raw Data 2.7.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 2.7.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.30, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)

fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.32352 +/- 0.00007 Hz


Amplitud: 0.22522 +/- 0.00029 m/s**2
In [45]: nus = np.append(nus, fit_nu)
As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecuencia 1.40 Hz
In [46]: datax = np.loadtxt('Raw Data 2.8.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 2.8.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.35, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)

fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.37335 +/- 0.00017 Hz


Amplitud: 0.11482 +/- 0.00035 m/s**2

In [47]: nus = np.append(nus, fit_nu)


As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecuencia 1.45 Hz
In [48]: datax = np.loadtxt('Raw Data 2.9.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 2.9.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.40, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)


fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.42062 +/- 0.00021 Hz


Amplitud: 0.08072 +/- 0.00031 m/s**2

In [49]: nus = np.append(nus, fit_nu)


As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

Frecuencia 1.50 Hz
In [50]: datax = np.loadtxt('Raw Data 2.10.csv', usecols=0, skiprows=1)
datay = np.loadtxt('Raw Data 2.10.csv', usecols=2, skiprows=1)

y0inic = (datay.max() + datay.min()) / 2


Ainic = (datay.max() - datay.min()) / 2

param_inicial = [Ainic, 1.45, 0.0, y0inic]

parameters, covariance = curve_fit(Seno, datax, datay, p0=param_inicial)

fit_A = parameters[0]
fit_nu = parameters[1]
fit_delta = parameters[2]
fit_y0 = parameters[3]
u_A = np.sqrt(np.diag(covariance)[0])
u_nu = np.sqrt(np.diag(covariance)[1])
u_delta = np.sqrt(np.diag(covariance)[2])
u_y0 = np.sqrt(np.diag(covariance)[3])

fit_y = Seno(datax, fit_A, fit_nu, fit_delta, fit_y0)


plt.plot(datax, datay, '-o', label='Medidas experimentales')
plt.plot(datax, fit_y, '-', label='Ajuste no lineal')
plt.xlabel("t (s)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

print(f"Frecuencia: {fit_nu:.5f} +/- {u_nu:.5f} Hz")


print(f"Amplitud: {np.absolute(fit_A):.5f} +/- {u_A:.5f} m/s**2")

Frecuencia: 1.47092 +/- 0.00030 Hz


Amplitud: 0.06256 +/- 0.00035 m/s**2
In [51]: nus = np.append(nus, fit_nu)
As = np.append(As, np.absolute(fit_A))
nu_err = np.append(nu_err, u_nu)
A_err = np.append(A_err, u_A)

In [52]: plt.plot(nus, As, 'o', label='Medidas experimentales')


plt.xlabel("frecuencia (Hz)")
plt.ylabel("Aceleración (m/s^2)")
plt.legend()

Out[52]: <matplotlib.legend.Legend at 0x224bc34e900>


In [53]: param_inicial = [0.4, 1.3, 0.1]

In [54]: parameters_reso, covariance_reso = curve_fit(Resonancia, nus, As, p0=param_inicial

In [55]: parameters_reso

Out[55]: array([0.01658309, 1.26872155, 0.06720339])

In [56]: covariance_reso

Out[56]: array([[7.28980157e-07, 4.44641979e-07, 1.05738479e-05],


[4.44641979e-07, 6.99360610e-07, 8.88324960e-06],
[1.05738479e-05, 8.88324960e-06, 1.82304608e-04]])

In [57]: A0 = parameters_reso[0]
nu0 = parameters_reso[1]
gamma = parameters_reso[2]
A0_u = covariance_reso[0,0]
nu0_u = covariance_reso[1,1]
gamma_u = covariance_reso[2,2]

In [58]: nu_fit = np.arange(0.75, 2.25, 0.001)


y_fit = Resonancia(nu_fit, A0, nu0, gamma)
#plt.errorbar(nus, As, xerr=nu_err, yerr=A_err, linestyle='None', marker='o', label
plt.plot(nus, As, 'o', label='Medidas experimentales')
plt.plot(nu_fit, y_fit, '-', label='Mínimos cuadrados')
plt.xlabel("frecuencia (Hz)")
plt.ylabel("Aceleración (m/s^2)")
plt.yscale("log")
plt.legend()

Out[58]: <matplotlib.legend.Legend at 0x224bc385160>

In [59]: print(f"A0: {A0:.8f} +/- {A0_u:.8f} (m/s^2)")


print(f"Frecuencia de resonancia: {nu0:.7f} +/- {nu0_u:.7f} Hz")
print(f"Gamma: {gamma:.8f} +/- {gamma_u:.8f} (s^2)")

A0: 0.01658309 +/- 0.00000073 (m/s^2)


Frecuencia de resonancia: 1.2687215 +/- 0.0000007 Hz
Gamma: 0.06720339 +/- 0.00018230 (s^2)

V (Hz) a 0 (m/s )
2

1.00 0.02

1.10 0.04

0.20 0.09

1.25 0.22

1.27 0.43

1.30 0.64

1.35 0.23

1.40 0.11

1.45 0.08
V (Hz) a 0 (m/s )
2

1.50 0.06

Conclusi ón
Conocidas las ecuaciones:

k
2
w = (1)
0
m

w0 = 2π ⋅ v0

de donde sacamos que

w0
v0 = (2)

Según fabricante k = 20 N /m , y nosotros medimos experimentalmente el muelle y el imán.


mmuelle = 303.23 ± 0.01 g ym im n á = 10.83 ± 0.01 g .

In [60]: k = 20
m = 0.30323
m_iman = 0.01083

Usaremos también la fórmula de siempre para hallar el error:

V alor te órico + V alor experimental


Error =
V alor te órico

- Experiencia 1
Frecuencia de resonancia v 0 = 1.2857578

Valor de gamma γ
−8 −2
= 3 ⋅ 10 s

In [61]: w02_experiencia_1 = k/m #(1)

w0_experiencia_1 = np.sqrt(w02_experiencia_1)

v0_experiencia_1 = w0_experiencia_1/(2*np.pi) #(2)

print(f"Frecuencia de resonancia teórica primera experiencia: {v0_experiencia_1:.5f

Frecuencia de resonancia teórica primera experiencia: 1.29256


In [62]: error_experiencia_1 = (v0_experiencia_1+1.2857578)/v0_experiencia_1
error_experiencia_1

Out[62]: 1.9947412349992308

Con esto vemos que hemos tenido un error de tan solo el 2 % al hallar la frecuencia de
resonancia.

Este escaso error es debido a no haber prácticamente frición con el aire, por ello y al no
haber otra resistencia que pudiese alterar la frecuencia de resonancia, los datos nos salen
tan cerca del valor teórico.

- Experiencia 2
Frecuencia de resonancia v 0 = 1.2687215

Valor de gamma γ = 0.06720339 s


−2

In [63]: w02_experiencia_2 = k/(m+m_iman) #(1)

w0_experiencia_2 = np.sqrt(w02_experiencia_2)

v0_experiencia_2 = w0_experiencia_2/(2*np.pi) #(2)

print(f"Frecuencia de resonancia teórica segunda experiencia: {v0_experiencia_2:.5f

Frecuencia de resonancia teórica segunda experiencia: 1.27007

La amplitud de resonancia en un sistema amortiguado debe ser menor que en un sistema no


amortiguado debido a la presencia de fuerzas que disipan (absorben) energía del sistema. En
este caso vemos que 1.27007 < 1.29256.

In [64]: error_experiencia_2 = (v0_experiencia_2+1.2687215)/v0_experiencia_2


error_experiencia_2

Out[64]: 1.9989355827654953

Aunque nos sale un error prácticamente igual (del 2 %), sabemos que este es algo mayor
debido a que en este caso hay más fuerzas disipadoras (el campo que se opone al
movimiento debido a la corriente que induce el imán de la base de la cesta al atravesar la
bobina).

También podría gustarte