Beruflich Dokumente
Kultur Dokumente
FACULTAD DE INGENIERA
DEPARTAMENTO DE COMPUTACIN
INTEGRANTES:
TRABAJO PRCTICO N 2
OBSERVACIONES FECHA
NOTA:
1 Introduccin
Este trabajo tiene como objetivo analizar el comportamiento en dominio temporal de un pndulo
simple sumergido en un medio viscoso mediante la resolucin numrica de su ecuacin diferencial
asociada.
El sistema bajo anlisis se describe mediante la siguiente ecuacin diferencial ordinaria de
segundo orden:
(1)
En donde [rad] representa el ngulo conformado entre la posicin de equilibrio del pndulo y su
posicin instantnea, b [Ns/m] es el coeficiente de amortiguamiento del medio, m [kg] es el valor
de la masa suspendida, l [m] es el largo del hilo que la sujeta (cuya masa es despreciable) y g
[m/s2] es la aceleracin de la gravedad considerada constante e igual a 9.81 [m/s2].
Las caractersticas fsicas del sistema (l, m y b) junto con las condiciones iniciales ( y d dt
en
t=0) deben ser definidas por el usuario al ejecutar el cdigo propuesto para resolver el sistema. En
particular, se muestran los resultados para dos situaciones puntuales: pndulo con
amortiguamiento nulo y con amortiguamiento subcrtico.
Tambin se calcula la energa del sistema mediante la siguiente ecuacin:
(2)
De este modo, es posible detectar fallas en la solucin numrica si se observa energa creciente,
algo que contradecira los principios de conservacin de cantidad de movimiento.
Para resolver el sistema se recurre al mtodo de Runge-Kutta 4. Este es un mtodo iterativo capaz
de resolver ecuaciones diferenciales ordinarias de primer orden con valores iniciales. La definicin
del mtodo iterativo se muestra en la ecuacin 3.
(3)
Pg. 1 de 9
Anlisis Numrico - TP2 Ramn - Lpez Carbonaro
Para que el mtodo sea aplicable a ecuaciones diferenciales de segundo orden es necesario realizar
un cambio de variables (ec. 4) y replantear el problema como un sistema de ecuaciones
diferenciales de primer orden (ec. 5).
(4)
(5)
(6)
La resolucin de este sistema plantea un proceso recurrente donde coeficientes kn+1 y ln+1 se
obtienen a partir de los coeficientes kn y ln, siendo k1 y l1 calculables a partir de los valores iniciales
en t0 , o del valor obtenido en la iteracin anterior.
2 Desarrollo
Se plantea el desarrollo del cdigo de mquina en la plataforma Octave 4.2.1 y se presentan los
resultados para dos condiciones iniciales particulares. En base a estos ltimos, se compara la
energa del sistema obtenida mediante la aproximacin con su valor terico.
Pg. 2 de 9
Anlisis Numrico - TP2 Ramn - Lpez Carbonaro
[t,theta,deriv_theta] = rk_4(f,t_0,t_f,theta_0,deriv_theta_0,h);
Con el paso temporal y el intervalo de tiempo se definen la cantidad de puntos n sobre los cuales
se buscar una solucin. Tambin se define el vector t para tener una referencia temporal.
(
n = t_f - t_0)/h %
Clculo de cantidad de iteraciones
t = t _0:h:t_f; % Vector tiempo
Se inicializan los vectores theta y deriv_theta con n+1 espacios que sern completados a
medida que avance el clculo. Las posiciones iniciales de ambos vectores se corresponden con las
condiciones iniciales.
theta = zeros(n+1,1);
deriv_theta = zeros(n+1,1);
theta(1) = theta_0; deriv_theta(1) = deriv_theta_0;
for i = 1:n
k 1 = h*deriv_theta(i);
l1
= h*f(t(i), theta(i), deriv_theta(i));
k2
= h*(deriv_theta(i)+l1/2);
l2
= h*f(t(i)+h/2, theta(i)+k1/2, deriv_theta(i)+l1/2);
k3
= h*(deriv_theta(i)+l2/2);
l3
= h*f(t(i)+h/2,theta(i)+k2/2,deriv_theta(i)+l2/2);
k4
= h*(deriv_theta(i)+l3);
l4
= h*f(t(i)+h, theta(i)+k3, deriv_theta(i)+l3);
t heta(i+1) = theta(i)+(k1+2*k2+2*k3+k4)/6;
d eriv_theta(i+1) = deriv_theta(i)+(l1+2*l2+2*l3+l4)/6;
end
Pg. 3 de 9
Anlisis Numrico - TP2 Ramn - Lpez Carbonaro
E=(m*g*(l-l.*cos(theta)))+0.5*m.*(l*deriv_theta).*(l*deriv_theta);
Todos los valores calculados se exportan en una tabla con formato .csv y se grafican en pantalla
para que el usuario pueda visualizarlos.
2.2 Resultados
A continuacin se exponen los resultados obtenido luego de haber ejecutado el cdigo en dos
condiciones iniciales.
Figura 1: Grfico de posicin angular, velocidad angular y energa Vs. tiempo para sistema no amortiguado
[rad] d
t[s] dt [rad/s] E[J]
0.00000 0.52360 0.00000 1.31429
0.20000 0.42423 -0.96012 1.33050
0.40000 0.16425 -1.55580 1.34229
0.60000 -0.15773 -1.56172 1.34127
0.80000 -0.41971 -0.97610 1.32784
1.00000 -0.52251 -0.02123 1.30919
...
Pg. 4 de 9
Anlisis Numrico - TP2 Ramn - Lpez Carbonaro
Figura 2: Grfico de posicin angular, velocidad angular y energa Vs. tiempo para sistema con
amortiguamiento crtico
Tabla 2: Primeros y ltimos 6 resultados numricos para sistema con amortiguamiento crtico
[rad] d
t[s] dt [rad/s] E[J]
0.00000 0.52360 1.74533 2.83738
0.20000 0.73806 0.35620 2.61624
0.40000 0.66606 -1.02887 2.62606
0.60000 0.36087 -1.91105 2.45790
0.80000 -0.04529 -2.02034 2.05095
1.00000 -0.39640 -1.39104 1.72821
19.00000 -0.00181 -0.02011 0.00022
19.20000 -0.00505 -0.01148 0.00019
19.40000 -0.00617 0.00046 0.00019
19.60000 -0.00496 0.01110 0.00018
19.80000 -0.00207 0.01673 0.00016
20.00000 0.00128 0.01579 0.00013
Pg. 5 de 9
Anlisis Numrico - TP2 Ramn - Lpez Carbonaro
3 Conclusin
Result de mucha ayuda realizar una implementacin en cdigo de mquina para asentar los
conceptos aprendidos en clase. Es til, adems, haber trabajado con una funcin auxiliar que
utilice los mismos parmetros de entrada que las funciones intrnsecas de Octave ya que permite
comprender mejor su funcionamiento.
4 Bibliografa
[1] John W. Eaton (1996), GNU Octave User Manual: Terminal Output. Recuperado de
https://www.gnu.org/software/octave/doc/v4.0.3/Terminal-Output.html
Pg. 6 de 9
Anlisis Numrico - TP2 Ramn - Lpez Carbonaro
5 Anexo
Se presenta el cdigo principal junto con las funciones auxiliares.
%Ingreso de constantes
g = 9.81 %m/s^2
m = input('Masa [kg]: ');
l = input('Longitud de la c
uerda [m]: ');
b = input('Coeficiente de a mortiguamiento [Ns/m]: ');
h = input('Paso [s]:');
%{
Por prolijidad se definen los coeficientes que multiplican a
deriv_theta y theta
%}
A = -b/m;
B = -g/l;
%{
Se define la funcin f derivada temporal segunda de theta en lenguaje
simblico con las constantes definidas anteriormente
%}
f = @(t,theta,deriv_theta) (A*deriv_theta + B*theta);
%Clculo de energa
E = (m*g*(l-l.*cos(theta))) + 0.5*m.*(l*deriv_theta).*(l*deriv_theta);
Pg. 7 de 9
Anlisis Numrico - TP2 Ramn - Lpez Carbonaro
%Grfico posicin
figure, plot(t, theta, '
r'),
grid on, title('Angulo \ theta'), xlabel('tiempo [s]'),
ylabel('\theta[rad]');
%Grfico velocidad
figure, plot(t, deriv_theta, 'b'),
grid on, title('Velocidad angular d\theta/dt'), xlabel('tiempo [s]'),
ylabel('d\theta/dt[rad/s]');
%Grfico energa
figure, plot(t, E, 'm--'),
grid on, title('Energia E(t)'), xlabel('tiempo [s]'), ylabel('E[J]');
%Grficos superpuestos
figure, hold on, plot(t, theta, 'r'), plot(t, deriv_theta, 'b'),
plot(t, E, 'm--');
grid on, legend ('Angulo \theta', 'Velocidad angular d\theta/dt',
'Energia');
title('Graficos superpuestos'), xlabel('tiempo [s]'),
ylabel('\theta[rad], d\theta/dt[rad/s], Energia [J]');
csvwrite("salida_tp2.csv", tabla);
function [t,theta,deriv_theta] =
rk_4(f,t_0,t_f,theta_0,deriv_theta_0,h)
% Vector tiempo
t = t_0:h:t_f;
Pg. 8 de 9
Anlisis Numrico - TP2 Ramn - Lpez Carbonaro
theta = zeros(n+1,1);
deriv_theta = zeros(n+1,1);
theta(1) = theta_0;
deriv_theta(1) = deriv_theta_0;
% Iteraciones
f or i = 1:n
k 1 = h*deriv_theta(i);
l1
= h*f(t(i), theta(i), deriv_theta(i));
k2
= h*(deriv_theta(i)+l1/2);
l2
= h*f(t(i)+h/2, theta(i)+k1/2, deriv_theta(i)+l1/2);
k3
= h*(deriv_theta(i)+l2/2);
l3
= h*f(t(i)+h/2,theta(i)+k2/2,deriv_theta(i)+l2/2);
k4
= h*(deriv_theta(i)+l3);
l4
= h*f(t(i)+h, theta(i)+k3, deriv_theta(i)+l3);
t heta(i+1) = theta(i)+(k1+2*k2+2*k3+k4)/6;
d eriv_theta(i+1) = deriv_theta(i)+(l1+2*l2+2*l3+l4)/6;
end
end
Pg. 9 de 9