You are on page 1of 8

Pregunta 1

La ecuación diferencial a resolver es la siguiente


𝑥̈ = −𝑥 − 𝜀(𝑥 2 − 1)𝑥̇ (1)
La ecuación diferencial es de la forma 𝑦 ′′ = 𝑓(𝑥, 𝑦, 𝑦 ′ ), el cual admite el método
numérico de Runge-Kutta de orden 4 para dos sistemas de ecuaciones
acoplados. Para una ecuación diferencial de segundo orden se debe realizar un
cambio variable para obtener un sistema de ecuaciones diferenciales de orden
1 y el aplicar el método. Lo primero es identificar f
𝑓(𝑡, 𝑥, 𝑥̇ ) = 𝑓(𝑥, 𝑥̇ ) = −𝑥 − 𝜀(𝑥 2 − 1)𝑥̇
El cambio de variable será
𝑥̇ = 𝑢
𝑢̇ = −𝑥 − 𝜀(𝑥 2 − 1)𝑢
Donde la solución al sistema anterior, viene dado por los siguientes sistemas de
ecuaciones donde h es el paso o espaciado en el eje independiente:
 Para la posición
𝑥̇ = 𝑢
1
𝑥𝑛+1 = 𝑥𝑛 + 6(𝑘1 + 2𝑘2 + 2𝑘3 + 𝑘4 )

donde
𝑘1 = ℎ ∙ 𝑢
1
𝑘2 = ℎ ∙ (𝑢 + 2𝑙1 )

1
𝑘3 = ℎ ∙ (𝑢 + 2𝑙2 )

𝑘4 = ℎ ∙ (𝑢 + 𝑙3 )
Los 𝑙𝑖 vienen dados para las ecuaciones de 𝑢 que siguen
 Para la velocidad
𝑢̇ = −𝑥 − 𝜀(𝑥 2 − 1)𝑢
1
𝑢𝑛+1 = 𝑢𝑛 + 6(𝑙1 + 2𝑙2 + 2𝑙3 + 𝑙4 )

con
𝑙1 = ℎ ∙ 𝑓(𝑥, 𝑢)
1 1
𝑙2 = ℎ ∙ 𝑓(𝑥 + 2𝑘1 , 𝑢 + 2𝑙1 )
1 1
𝑙3 = ℎ ∙ 𝑓(𝑥 + 2𝑘2 , 𝑢 + 2𝑙2 )
1 1
𝑙4 = ℎ ∙ 𝑓(𝑥 + 2𝑘3 , 𝑢 + 2𝑙3 )

Donde los 𝑘𝑖 vienen de las ecuaciones para la posición.


El código del programa es el siguiente

format short
syms x u E
tn=0; %tiempo inicial
Xn=0.5; %valor inicial de la posición
Un=0; %valor inicial para la derivada
h=0.1; %paso
tf=0.2; %tiempo para el cual quiero conocer las soluciones
e=1; %e en la ecuación
T=[]; %Vector tiempo
Y=[]; %Vector posición
V=[]; %Vector derivada(velocidad)
t=1; %t es el rotulador del vector tiempo
y=1; %y es el rotulador del vector posición
v=1; %v rotulador del vector derivada
T(1,t)=tn; %se guarda el tiempo inicial
Y(1,y)=Xn; %se guarda la posición inicial
V(1,v)=Un; %se guarda el valor de la derivada inicial
f=-x-E*((x^2)-1)*u;
f=subs(f,E,e);
while tn<tf
k1=h*Un;
K1=vpa(k1,5);
l1=h*subs(f,{x,u},{Xn,Un});
L1=vpa(l1,5);
k2=h*(Un+0.5*L1);
K2=vpa(k2,5);
l2=h*subs(f,{x,u},{Xn+0.5*k1,Un+0.5*L1});
L2=vpa(l2,5);
k3=h*(Un+0.5*L2);
K3=vpa(k3,5);
l3=h*subs(f,{x,u},{Xn+0.5*k2,Un+0.5*L2});
L3=vpa(l3,5);
k4=h*(Un+L3);
K4=vpa(k4,5);
l4=h*subs(f,{x,u},{Xn+k3,Un+L3});
L4=vpa(l4,5);
Xn = Xn + (1/6)*(K1 + 2*K2 + 2*K3 + K4);
Un = Un + (1/6)*(L1 + 2*L2 + 2*L3 + L4);
tn=tn+h; %Se define el siguiente punto correspondiente
y=y+1; %Se hace correr el rotulador de y
v=v+1; %Se hace correr el rotulador de v
t=t+1; %Se hace correr el rotulador de t
Y(1,y)=Xn; %Se guardan los datos
V(1,v)=Un;
T(1,t)=tn;
end

plot(Y,V,'r.'),title('velocidad vs. posición'),xlim([0 60])


En el cuadro siguiente se muestra la resolución de la ecuación diferencial (1)
para distintos valores de 𝜀 en 20 segundos.

a) b)

c) d)

f)
e)
Figura 1: graficas de la solución de la EDO para distintos valores de 𝜀. a) 𝜀 = 0, b) 𝜀 = 0.1, c)
𝜀 = 0.5, d) 𝜀 = 0.8, e) 𝜀 = 1, f) 𝜀 = 5
Las soluciones graficada en la figura 1, se hizo con las condiciones iniciales de
𝑥(0) = 0.5
𝑥̇ (0) = 0
En la figura 1.a para 𝜀 = 0 se tiene el oscilador armónico. Para distintos 𝜀 la solución se
modifica, como lo podemos ver para 𝜀 = 5 en comparación con las demás. Para 𝜀 > 0
la solución en el tiempo creciente, la posición tiende a modificar la condición inicial de
posición, y “parece” estabilizar la oscilación en el tiempo. Esto se verifica en la figura 2,
donde se graficó la solución para 𝜀 = 1 en 100[s], y se ve claramente que la oscilación
se estabiliza en el tiempo.

Figura 2: Solución de la EDO para 𝜀 = 1 en 100[s]. Se ve la estabilidad de la


oscilación en el tiempo.

La grafica 3 es la solución de la ecuación tato para la posición y velocidad entre


el intervalo 𝜀 = 1 entre 0 y 8𝜋 ≈ 26[𝑠]. Se compara con la herramienta de Matlab
ODE45 que soluciona la ecuación diferencial a través de librerías del programa. Vemos
que tanto para nuestro código como para ODE45, las soluciones están bastantes
cercanas, esto es solo con ver la figura y percatarse que los puntos están uno arriba de
otro. Es excelente Runge-Kutta 4 comparado con ODE45.
figura 3: Comparación de las soluciones tanto para ODE45 como para Runge-
Kutta 4.
En la figura 4 hemos graficado el espacio de fase para la solución de la EDO
para 3 distintas condiciones iniciales de posición en un intervalo de tiempo de 60
[s] con 𝜀 = 1. Si se ve bien, las tres soluciones parten en su condición inicial,
pero al pasar un tiempo empiezan a recorrer los mismos estados en el espacio
de fase. Entonces el límite de la solución de la EDO para t muy grande es
independiente de la condición inicial, todas llegan al mismo comportamiento. Es
similar a lo que veíamos con la estabilidad de la oscilación en la figura 2.

Figura 4: Espacio de fase de la solución de la EDO (Velocidad vs posición)


Pregunta 2:
Se pide resolver la siguiente EDO de segundo orden
𝑦 ′′ − 5𝑦 ′ + 10𝑦 = 10𝑥 (2)
Con las condiciones de borde
𝑦(0) = 0
𝑦(1) = 100
Utilizando diferencia finita, y eligiendo backward difference, se llega a la siguiente
ecuación de diferencias
10𝑥ℎ2 − 𝑦𝑛+1 − 𝑦𝑛−1 (5ℎ + 1)
𝑦𝑛 = (3)
10ℎ2 − 5ℎ − 2
Un estudio de una convergencia más rápida, es la sobrerelajación (SOR) que
sigue de la siguiente forma
𝑦𝑛𝑛𝑒𝑤 = 𝑦𝑛𝑜𝑙𝑑 + 𝜔 ∙ (𝑦𝑛𝑛𝑒𝑤 − 𝑦𝑛𝑜𝑙𝑑 )
Con 𝜔 = 1, el método sigue como (2)
El Código de iteración del método es el siguiente

ecuacion de iteración
Xi=0; %punto donde se encuentra la condición de borde izquierda
Yi=0; % valor del borde izquierdo
Xf=1; %punto donde se encuentra la condición de borde derecho
Yf=100; %valor del borde derecho
h=0.1; %espaciado
w=1.62; %factor de SOR
N=ceil((Xf-Xi)/h)+1; %número de nodos
X=Xi:h:Xf; %vector de nodos
Ynew=100*(X.*X); %vector solución o iteración nueva
Yold=ones(1,N); %vector iteración anterior
Ynew(1,1)=Yi; %Se guarda en el primer término la condición de borde
y(0)=0
Ynew(1,N)=Yf; %Se guarda en el ultimo termino la condición de borde
y(1)=100
y_sig=0; %Se define arbitrariamente el valor del nodo siguiente al
nodo en estudio
y_ant=0; %Se define arbitrariamente el valor del nodo anterior al
nodo en estudio
Iter=0; %Se define la variable iteración, la cual me dirá cuantas
veces tuvo que recorrer la grilla
while max(abs(Ynew-Yold))>(10^-4)
Yold=Ynew;
r=N-1;
while r>1
x=X(1,r);
y_sig=Ynew(1,r+1);
y_ant=Ynew(1,r-1);
y_n=Ynew(1,r);
y_n=y_n+w*(((10*(h^2)*x-(y_ant)*(5*h+1)-y_sig)/(10*(h^2)-5*h-2))-y_n);
Ynew(1,r)=y_n;
r=r-1;
end
Iter=Iter+1;
end
Iter
plot(X,Ynew,'*'),xlabel('x'),ylabel('y')

El código anterior se escribió comenzando con la condición de borde de la


derecha hacia la otra condición de la izquierda, usando método de Gauss-Seidel.
La figura 5, muestra la solución del método numérico para un h=0.1,w=1, ,y un
vector inicial de puros ceros en su interior, y las componentes de los costados
las condiciones iniciales, esto es
(0 0 0 … … … 0 0 100)

Figura 5: Solución de la EDO, para h=0.1 y vector inicial puros ceros en el


interior.
Tabla 1: tabla que muestra el número de iteración necesarios para conseguir
una tolerancia de 10−4 con distintas grid y distintos vectores iniciales. a) con un
vector inicial de puros ceros en el interior b) con un vector inicial de forma
cuadrática
Tolerancia grid Iteraciones
0.005 26730
0.010 9008
10−4 0.050 588
0.100 172
0.250 30
a)
Tolerancia grid Iteraciones
0.005 2997
0.010 4057
10−4 0.050 470
0.100 151
0.250 28
b)
Como ya hemos visto en la figura 5, tiene la imagen o la forma de un polinomio
la solución. Como para acelerar procesos, podríamos elegir un vector inicial de
solución de la forma polinomial. En la tabla 1 se muestra, el número de
iteraciones que debe llegar a una solución de tolerancia 10−4 con distintos
vectores iniciales. La parte b) de la tabla se hizo con un vector inicial cuadrático,
y claramente en comparación con la parte a) se acelera el proceso, esto por estar
un poco más cerca de la solución inicialmente.
Estudiando ahora la aceleración de la convergencia cambiando los valores 𝜔, se
tienen los resultados de la tabla 2 para diferentes resultados de 𝜔. Y vemos que
el método de SOR es muy ventajoso para ahorrar tiempo de convergencia. Por
ejemplo en la parte a) de la tabla 2, para una grid de 0.01, se pasa de 4057
iteraciones a solo 255, cambiando solamente el factor de relajación. O por
ejemplo en la parte b) de la tabla 2, para una grid de 0.1, se pasa de 151
iteraciones a solamente 28.
Tabla 2: Tabla con el número de iteraciones para distintos factores de
sobrerelajación, con un vector inicial de forma cuadrático. a) con una grid de
0.01, b) con una grid de 0.1
Tolerancia 𝜔 Iteraciones
1 4057
1.2 3173
10−4 1.6 1634
1.8 905
1.9 510
1.95 255
a)
Tolerancia 𝜔 Iteraciones
1 151
1.2 105
10−4 1.4 69
1.5 52
1.6 34
1.62 28
b)

You might also like