Está en la página 1de 3

>> % Programa para calcular la respuesta de un péndulo

>> %usando el método iterativo de Newton-Raphson modificado

>> % en combinación con el método de Newmark (Beta = 1/4)

>> % El productol*theta debe ser menor que pi.

>>

>> format compact

>> clear

>> g = 9.81; % Aceleración de la gravedad en m/s2

>> m = 1; % Masa concentrada de la masa del péndulo kg-s2/m

>> c = 0.1; % Coeficiente de amortiguamiento

>> L = 4; % Longitud del péndulo en m

>> w = sqrt(g/L); % Frecuencia circular, en radianes/s

>> f = w/(2*pi); % Frecuencia en Hertz

>> T = 1.0/f; % Periodo de vibrar en s

>> R = 0.0; % Fuerza para la masa (para todo tiempo t)

>> err_0 = 999.99; % Error relativo al inicio de las iteraciones

>> err = err_0; % Error relativo actual

>> RTOL = 0.000001; % Tolerancia de fuerza

>> theta_0 = 1.0; % Ángulo inicial del péndulo en radianes

>> theta_v_0 = 0.0; % Velocidad angular inicial del péndulo en rad/s

>> theta_a_0 = 0.0; % Aceleración angular inicial del péndulo en rad/s2

>> u_0 = theta_0 * L; % Posición de la masa del péndulo en m

>> v_0 = theta_v_0 * L; % Velocidad inicial de la masa del péndulo m/s

>> a_0 = theta_a_0 * L; % Acel. inicial de la masa del péndulo en m/s2

>> dt = 0.1; % Incremento de tiempo para el método de Newmark

>> t_max = 10.0; % Tiempo de respuesta total en segundos

>>

>> % Valores iniciales para t = 0.0:

>> u_tplus = u_0; % Despl de la masa al inicio del intervalo de tiempo


>> u_k1 = u_0; % Despl. de la masa en la iteración anterior

>> v_t = v_0; % Velocidad de la masa del inicio del intervalo de tiempo

>> a_t = a_0; % Aceleración de la masa al inicio del intervalo de tiempo

>> u_t = u_k1; % Desplazamiento de la masa al inicio de las iteraciones N-R

>> F_k1 = m*g*sin(u_t/L); % Fuerza al final del tiempo anterior

>> F_norm = F_k1; % Fuerza al inicio para calcular error relativo

>> i = 0;

>>

>> % Inicia variación del tiempo

>> for t = 0.0: dt: t_max

% Rigidez efectiva (N-R modificado):

K_t = m*g*(1.0/L)*cos(u_t/L) + (4.0/(dt*dt))*m + (2.0/dt)*c;

R = R; % Actualiza la carga para el siguiente intervalo

k = 0;

err = err_0;

while (err > RTOL)

k = k + 1;

% Fuerza efectiva

P_t = R - F_k1 - m*((4.0/(dt*dt))*(u_k1 - u_t)-(4.0/dt)*v_t - a_t);

P_t = P_t - c*((2.0/dt)*(u_k1 - u_t) - v_t);

delta_u = P_t/K_t; % Incremento de desplazamiento

u_tplus = u_k1 + delta_u;

v_tplus = (2.0/dt) * (u_tplus - u_t) - v_t;

a_tplus = (2.0/dt) * (v_tplus - v_t) - a_t;

err = abs(R- F_k1 - m*a_tplus - c*v_tplus)/sqrt(R*R+F_norm*F_norm);

u_k1 = u_tplus;

F_k1 = m*g*sin(u_tplus/L);
end

u_t = u_tplus;

v_t = v_tplus;

a_t = a_tplus;

i = i + 1;

Time(i) = t;

Theta(i) = u_tplus/L;

end

>> plot(Time,Theta,'k-s','LineWidth',2)

>> xlabel('Tiempo, s','FontSize',12)

>> ylabel('Ángulo, rad','Fontsize',12)

>> title('\fontname{Times New Roman}Respuesta del péndulo','Fontsize',12);

>>

También podría gustarte