Sie sind auf Seite 1von 10

UNIVERSIDAD DE BUENOS AIRES

FACULTAD DE INGENIERA
DEPARTAMENTO DE COMPUTACIN

ASIGNATURA: ANLISIS NUMRICO I CDIGOS: 75.12, 95.04, 95.13


AO: 2017 2 CUATRIMESTRE

PROFESORA: LIC. MIRYAM SASSANO

INTEGRANTES:

Ramn, Facundo PADRN N - - - - -


Lpez Carbonaro, Martn Alejo PADRN N 9 2 8 0 1
PADRN N
PADRN N

TRABAJO PRCTICO N 2

SISTEMA DE ECUACIONES DIFERENCIALES

FECHA DE PRESENTACIN: 30/11/2017

OBSERVACIONES FECHA

NOTA:

FIRMA DEL DOCENTE:



Anlisis Numrico - TP2 Ramn - Lpez Carbonaro

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)

Donde h es el paso de la iteracin y los coeficiente kn se definen en base a la funcin diferencial


evaluada en los puntos indicados.

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)

De este modo es posible plantear la resolucin del sistema de la siguiente manera.

(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.

2.1 Desarrollo de cdigo de mquina


Se comienza por solicitar al usuario el ingreso de los valores fsicos del problema junto con las
condiciones iniciales. Se utiliza la funcin input para mostrar las instrucciones en pantalla y
permitir que el usuario defina las variables m, l, b y h que responden a los parmetros fsicos
explicados en la seccin anterior. Las variables theta_0 y deriv_theta_0 definen las
condiciones iniciales del problema mientras que t_0 y t_f definen el intervalo temporal para el
cual se desea aproximar la solucin.
Luego, se define un objeto f del tipo function_handle que representa la ecuacin (1) de
forma explcita y utiliza los parmetros definidos por el usuario. Las variables independientes son
tres: una variable temporal t, la posicin angular theta y la velocidad angular deriv_theta
del pndulo.

Pg. 2 de 9

Anlisis Numrico - TP2 Ramn - Lpez Carbonaro

f = @(t,theta,deriv_theta) (A*deriv_theta + B*theta);

Para simplificar la notacin, previamente se define A=-b/m y B=-g/l.


El siguiente paso se desarrolla en una funcin auxiliar llamada rk_4 que entrega la solucin de f
para el intervalo de tiempo definido por el usuario resolviendo mediante el mtodo de
Runge-Kutta 4. Los parmetros de entrada son el objeto f, los lmites del intervalo temporal (t_0,
t_f), las condiciones iniciales (theta_0, deriv_theta_0) y el paso temporal h.

[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;

Mediante un loop for, se resuelve el sistema planteado en la ecuacin 6.

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

El resultado de cada iteracin es guardado en los vectores previamente inicializados y, al finalizar,


son entregados al cdigo principal.

Pg. 3 de 9

Anlisis Numrico - TP2 Ramn - Lpez Carbonaro

Posteriormente se realiza el clculo de energa del sistema utilizando la ecuacin (2).

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.

2.2.1 Sistema no amortiguado


Para esta simulacin se definen: m = 1 [kg]; l = 1 [m]; b = 0 [Ns/ m]; h = 0.2 [s]; 0 = 0.523599
[rad]; d/dt0 = 0 [rad/s]. Y se resuelve para un intervalo de 20 segundos.

Figura 1: Grfico de posicin angular, velocidad angular y energa Vs. tiempo para sistema no amortiguado

Tabla 1: primeros y ltimos 6 resultados numricos 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

19.00000 -0.48888 -0.38523 1.22336


19.20000 -0.46811 0.58434 1.22604
19.40000 -0.27004 1.33180 1.24236
19.60000 0.03015 1.57422 1.24354
19.80000 0.31868 1.22018 1.23834
20.00000 0.48627 0.40425 1.21888

2.2.2 Sistema con amortiguamiento crtico


Para esta simulacin se definen: m = 1 [kg]; l = 1 [m]; b = 0.5 [Ns/ m]; h = 0.2 [s]; 0 = 0.523599
[rad]; d/dt0 = 1.74533 [rad/s]. Y se resuelve en un intervalo de 20 segundos.

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

2.3 Anlisis de Energa


En el caso no amortiguado, por tratarse de un sistema cerrado la energa debera permanecer
constante a lo largo del tiempo debido a que no existen elementos disipativos. Sin embargo, el
valor en t=20 es 7% menor que el valor inicial en t=0 (ver tabla 1). Esto se puede adjudicar a la
discretizacin temporal de la solucin y al mtodo numrico aplicado.
La solucin analtica de la ecuacin 1 es una funcin armnica. En la figura 1 se puede observar
que la solucin aproximada tiene forma senoidal, sin embargo, tambin es visible la discretizacin
temporal. Entonces, sucede que los mximos de la solucin analtica no estn exactamente en los
puntos discretos ti = t0 + ih . Al tratarse de un mtodo recurrente (ver ec. 3), se acumula el error de
discretizacin y la energa calculada se reduce.
Se proponen las siguientes alternativas para minimizar el error.
Reducir el salto temporal h a valores ms pequeos para minimizar el error de
discretizacin.
En este caso puntual, se puede utilizar un h pequeo y mltiplo del perodo de la
oscilacin, de este modo, el valor en los mximos se mantendra constante y la energa no
decrecera. Es una solucin compleja debido a que es necesario calcular la frecuencia del
sistema, la cual es parte de la solucin buscada.
Reducir el intervalo sobre el cual se realiza la aproximacin reducira, porcentualmente, la
diferencia entre valor inicial y final.

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.

5.1 Cdigo principal


%TP ANALISIS NUMERICO
%2017 - 2do cuat
%Lpez Carbonaro - Ramn

clc; close all; clear all;

%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]:');

%Ingreso de condiciones iniciales


theta_0 = input('ngulo inicial [rad]: ');
deriv_theta_0 = input('Velocidad angular inicial [rad/s]: ');

%Ingreso parametros d e resolucin


t_0 = 0;
t_f = input('Tiempo f inal [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);

%Solucin numrica del pndulo usando la funcin rk_4


[t, theta, deriv_theta] = rk_4(f, t_0, t_f , theta_0, deriv_theta_0,
h);

%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

tabla = [t', theta, deriv_theta, E];

%salida por pantalla ( opcional)


%disp(" x_i // t heta // theta' // E")
%disp(tabla)

%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);

5.2 Funciones auxiliares


%%Implementacin del mtodo Runge Kutta para resolucin de EDOs

function [t,theta,deriv_theta] =
rk_4(f,t_0,t_f,theta_0,deriv_theta_0,h)

% Clculo d e cantidad de iteraciones


n = (t_f - t_0)/h

% Vector tiempo
t = t_0:h:t_f;

%Inicializacin de vectores para no cambiar dimensin dentro del


for

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

Das könnte Ihnen auch gefallen