Integral de Duhamel

\begin{align*} u = \frac{1}{m \omega_{d}} \int_{0}^{t} F(\tau) \, e^{-\beta \omega \bigl( t - \tau \bigr)} \sin \big[ \omega_{d} \bigl( t - \tau \bigr) \bigr] \, d \tau &= e^{-\beta \omega t} \Biggl[ \int_{0}^{t} \frac{F(\tau)}{m \omega_{d}} \, e^{\beta \omega \tau} \cos \big( \omega_{d} \tau \bigr) \, d \tau \, \sin \big( \omega_{d} t \bigr) - \int_{0}^{t} \frac{F(\tau)}{m \omega_{d}} \, e^{\beta \omega \tau} \sin \big( \omega_{d} \tau \bigr) \, d \tau \, \cos \big( \omega_{d} t \bigr) \Biggr] \\ &= e^{-\beta \omega t} \Bigl[ A \sin \big( \omega_{d} t \bigr) + B \cos \big( \omega_{d} t \bigr) \Bigr] \end{align*}

Vibración amortiguada con carga impulsiva rectangular

Usando los datos de un ejemplo anterior

In [1]:
import numpy as np

beta = 0.05
omega = 15.6604597634
omega_damping = omega*np.power(1-beta**2,1.0/2.0)
m = 42.0/981
F0 = 2.0
t1 = 1.0

Definiendo el impulso y las constantes

In [2]:
import matplotlib.pyplot as plt
from scipy import integrate

def rectangular(tau,F0,t1):
    if tau <= t1:
        return F0
    else:
        return 0
    
def dA(tau,omega,omega_damping,F0,t1):
    return rectangular(tau,F0,t1)*np.exp(beta*omega*tau)*np.cos(omega_damping*tau)

def dB(tau,omega,omega_damping,F0,t1):
    return rectangular(tau,F0,t1)*np.exp(beta*omega*tau)*np.sin(omega_damping*tau)

def A(tau,m,omega,omega_damping,F0,t1):
    return integrate.quad(dA, 0, tau, args=(omega,omega_damping,F0,t1))[0]/(m*omega_damping)

def B(tau,m,omega,omega_damping,F0,t1):
    return -integrate.quad(dB, 0, tau, args=(omega,omega_damping,F0,t1))[0]/(m*omega_damping)

t = np.linspace(0,3,3000)
posicion = np.zeros(3000)
for i in range(3000):
    posicion[i] = np.exp(-beta*omega*t[i])*(A(t[i],m,omega,omega_damping,F0,t1)*np.sin(omega_damping*t[i]) \
                                            + B(t[i],m,omega,omega_damping,F0,t1)*np.cos(omega_damping*t[i])) 
    
plt.figure(figsize=(19,8.5))
plt.plot(t, posicion)
plt.xlabel(r'$t$  seg.')
plt.ylabel(r'$u$  cm.')
plt.grid(True)
plt.show()

Vibración amortiguada con carga impulsiva senoidal

Usando los datos de un ejemplo anterior

In [3]:
beta = 0.05
omega = 16.5734727803
omega_damping = omega*np.power(1-beta**2,1.0/2.0)
m = 25.0/981
F0 = 2.0
t1 = 0.5

Definiendo el impulso y las constantes

In [4]:
import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate

def sinoide(tau,F0,t1):
    if tau <= t1:
        return F0*np.sin(np.pi*tau/t1)
    else:
        return 0
    
def dA(tau,omega,omega_damping,F0,t1):
    return sinoide(tau,F0,t1)*np.exp(beta*omega*tau)*np.cos(omega_damping*tau)

def dB(tau,omega,omega_damping,F0,t1):
    return sinoide(tau,F0,t1)*np.exp(beta*omega*tau)*np.sin(omega_damping*tau)

def A(tau,m,omega,omega_damping,F0,t1):
    return integrate.quad(dA, 0, tau, args=(omega,omega_damping,F0, t1))[0]/(m*omega_damping)

def B(tau,m,omega,omega_damping,F0,t1):
    return -integrate.quad(dB, 0, tau, args=(omega,omega_damping,F0, t1))[0]/(m*omega_damping)

t = np.linspace(0,3,3000)
posicion = np.zeros(3000)
for i in range(3000):
    posicion[i] = np.exp(-beta*omega*t[i])*(A(t[i],m,omega,omega_damping,F0,t1)*np.sin(omega_damping*t[i]) \
                                            + B(t[i],m,omega,omega_damping,F0,t1)*np.cos(omega_damping*t[i])) 
    
plt.figure(figsize=(19,8.5))
plt.plot(t, posicion)
plt.xlabel(r'$t$  seg.')
plt.ylabel(r'$u$  cm.')
plt.grid(True)
plt.show()

Vibración amortiguada con carga impulsiva triangular simétrica

Usando los datos de un ejemplo anterior

In [5]:
beta = 0.05
omega = 9.90454441153
omega_damping = omega*np.power(1-beta**2,1.0/2.0)
m = 30.0/981
F0 = 4.5
t1 = 0.3
t2 = 0.6

Definiendo el impulso y las constantes

In [6]:
import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate

def triangular(tau,F0,t1,t2):
    if tau <= t1:
        return (F0*tau)/t1
    elif t1 < tau <= t2:
        return -(F0*(tau - t1))/(t2 - t1) + F0
    else:
        return 0
    
def dA(tau,omega,omega_damping,F0,t1,t2):
    return triangular(tau,F0,t1,t2)*np.exp(beta*omega*tau)*np.cos(omega_damping*tau)

def dB(tau,omega,omega_damping,F0,t1,t2):
    return triangular(tau,F0,t1,t2)*np.exp(beta*omega*tau)*np.sin(omega_damping*tau)

def A(tau,m,omega,omega_damping,F0,t1,t2):
    return integrate.quad(dA, 0, tau, args=(omega,omega_damping,F0,t1,t2))[0]/(m*omega_damping)

def B(tau,m,omega,omega_damping,F0,t1,t2):
    return -integrate.quad(dB, 0, tau, args=(omega,omega_damping,F0,t1,t2))[0]/(m*omega_damping)

t = np.linspace(0,3,3000)
posicion = np.zeros(3000)
for i in range(3000):
    posicion[i] = np.exp(-beta*omega*t[i])*(A(t[i],m,omega,omega_damping,F0,t1,t2)*np.sin(omega_damping*t[i]) \
                                            + B(t[i],m,omega,omega_damping,F0,t1,t2)*np.cos(omega_damping*t[i])) 
    
plt.figure(figsize=(19,8.5))
plt.plot(t, posicion)
plt.xlabel(r'$t$  seg.')
plt.ylabel(r'$u$  cm.')
plt.grid(True)
plt.show()