ecdif.mws

Ecuaciones Diferenciales

> restart;

Instrucciones.

dsolve

La instrucción que resuelve ecuaciones diferenciales es ( dsolve ), cuya sintaxis es:

Peculiaridades:

x(t[0]) = x[0], D(x)(t[0]) = dx[0]

Las opciones son varios tipos (ver hoja de ayuda [ dsolve ]). Las que mas usaremos son de la forma:

odeplot

Para graficar soluciones numéricas usamos la instrucción ( odeplot ) que pertence al paquete plots.

La sintaxis es:

odeplot(F,[x, y(x)],x[1] .. x[2],opciones)

donde F es un nombre asignado a la solución numérica, x[1], x[2] son valores numéricos del rango de la variable independiente, las opciones son las de plot.

paquete DEtools

Es un paquete de graficación de soluciones numéricas de ecuaciones diferenciales, campos de pendientes (isoclinas), espacios de fase, etc. Se recomienda consultar la hoja de ayuda ( DEtools )

>

Solucion simbólica.

Maple V puede resolver analiticamente una gran cantidad de ecuaciones diferenciales

> ecd1:=diff(x(t),t$2)+u*diff(x(t),t)+k*x(t)=1;

ecd1 := diff(x(t),`$`(t,2))+u*diff(x(t),t)+k*x(t) =...

Solucion general:

> sol1:=dsolve(ecd1);

sol1 := x(t) = 1/k+_C1*exp(1/2*(-u+sqrt(u^2-4*k))*t...

Para comprobar la solución, sustituimos y evaluamos

> eval(subs(x(t)=rhs(sol1),ecd1));

_C1*(-1/2*u+1/2*sqrt(u^2-4*k))^2*exp(1/2*(-u+sqrt(u...
_C1*(-1/2*u+1/2*sqrt(u^2-4*k))^2*exp(1/2*(-u+sqrt(u...
_C1*(-1/2*u+1/2*sqrt(u^2-4*k))^2*exp(1/2*(-u+sqrt(u...
_C1*(-1/2*u+1/2*sqrt(u^2-4*k))^2*exp(1/2*(-u+sqrt(u...

La instrucción map , simplifica en ambas miembros

> map(simplify,%);

1 = 1

Condiciones iniciales

> ci_1:=x(0)=1, D(x)(0)=0;

ci_1 := x(0) = 1, D(x)(0) = 0

> sol1_ptc:=dsolve({ecd1,ci_1}, x(t));

sol1_ptc := x(t) = 1/k+1/2*(-sqrt(u^2-4*k)-u+k*u+sq...
sol1_ptc := x(t) = 1/k+1/2*(-sqrt(u^2-4*k)-u+k*u+sq...

Nota: es posible introducir condiciones iniciales simbólicas (intentarlo...)

Ejercicio

Graficar la solución obtenida, para los valores u = 2, k = 1

Solucion aproximada

La opción type=series da la solución en series de potencias

> ecd1; ci_1;

diff(x(t),`$`(t,2))+u*diff(x(t),t)+k*x(t) = 1

x(0) = 1, D(x)(0) = 0

> sol1_apr:=dsolve({ecd1,ci_1}, x(t), type=series);

sol1_apr := x(t) = series(1+(-1/2*k+1/2)*t^2+(1/6*k...
sol1_apr := x(t) = series(1+(-1/2*k+1/2)*t^2+(1/6*k...

Ejercicio

Comparar la solución analítica y la aproximada, para los valores u = 2, k = 1 , en el rango x = 0 .. 2 . TIP: es necesario convertir la serie en polinomio para poder graficar la serie truncada

Solucion numerica.

La opción type=numeric lleva a la solución numérica, sin embargo esta opción no acepta parámetros simbólicos (como k, u ). Por lo tanto, asignaremos valores numéricos a estos parámetros

> ecd2:=subs(u=2, k=1, ecd1);

ecd2 := diff(x(t),`$`(t,2))+2*diff(x(t),t)+x(t) = 1...

Las condiciones iniciales deben ser puramente numéricas

> ci_2:=x(0)=0,D(x)(0)=1;

ci_2 := x(0) = 0, D(x)(0) = 1

> S:=dsolve({ecd2,ci_2}, x(t), type=numeric);

S := proc (rkf45_x) local i, rkf45_s, outpoint, r1,...

S es una función numérica

> S(0); S(0.5); S(0.7);

[t = 0, x(t) = 0., diff(x(t),t) = 1.]

[t = .5, x(t) = .393469341486001489, diff(x(t),t) =...

[t = .7, x(t) = .503414698166184671, diff(x(t),t) =...

La gráfica de la solución numérica se obtiene con la instrucción odeplot , del paquete plots .

> plots[odeplot](S,[t,x(t)],-1..1);

[Maple Plot]

Ejercicio

Trazar las gráficas de la solución exacta y la aproximada en series junto con la gráfica de la solución numérica. Asignar un color o estilo diferente a cada curva.

Una forma muy útil para examinar una solucion numérica es pedir el resultado en forma de un arreglo de n valores iniciales. Esto se logra con la opcion display=array([t1, t2......., tn]) , donde t1......tn son n valores de t.

> SS:=dsolve({ecd2,ci_2}, x(t), type=numeric,value=array([0,0.1,0.3,0.5]));

SS := matrix([[vector([t, x(t), diff(x(t),t)])], [m...

Los valores del arreglo los podemos introducir como una lista que depende de

> IN:=(t1,tn,n)->[seq(t1+i*(tn-t1)/(n-1),i=0..n-1)];

IN := proc (t1, tn, n) options operator, arrow; [se...

Por ejemplo, 6 valores de t en el rango t = 2 .. 4

> IN(2,4,6);

[2, 12/5, 14/5, 16/5, 18/5, 4]

> SS:=dsolve({ecd2,ci_2}, x(t), type=numeric,value=array(IN(2,4,6)));

SS := matrix([[vector([t, x(t), diff(x(t),t)])], [m...

Ejercicio

Usar los resultados numéricos de la derivada de x(t) para trazar la gráfica de diff(x(t),t) vs t

> restart;

Sistemas.

Maple V tambien puede manejar sistemas de ecuaciones diferenciales.

Soluciones analiticas

> e1:=diff(x(t),t)=t+y(t); e2:=diff(y(t),t)=t-x(t);

e1 := diff(x(t),t) = t+y(t)

e2 := diff(y(t),t) = t-x(t)

Solución general

> dsolve({e1,e2},{x(t),y(t)});

{y(t) = 1+_C1*cos(t)-_C2*sin(t)-t, x(t) = 1+t+_C1*s...

Condiciones iniciales

> ci:=x(0)=1, y(0)=0;

ci := x(0) = 1, y(0) = 0

> dsolve({e1,e2,ci}, {x(t),y(t)});

{x(t) = 1+t-sin(t), y(t) = 1-cos(t)-t}

En particular, toda ecuación diferencial de segundo orden es equivalente a dos ecuaciones diferenciales de primer orden acopladas. Por ejemplo, la ecuacion que estudiamos anteriormente:

> ecd:=diff(x(t),t$2)+2*diff(x(t),t)+x(t)=1;

ecd := diff(x(t),`$`(t,2))+2*diff(x(t),t)+x(t) = 1

es equivalente a

> ec1:=diff(v(t),t)+2*v(t)+x(t)=1; ec2:=diff(x(t),t)=v(t);

ec1 := diff(v(t),t)+2*v(t)+x(t) = 1

ec2 := diff(x(t),t) = v(t)

> SS:=dsolve({ec1,ec2},{x(t),v(t)});

SS := {x(t) = 1+exp(-t)*(_C1+_C2*t), v(t) = -exp(-t...

Condiciones iniciales

> ci:=x(0)=5, v(0)=0;

ci := x(0) = 5, v(0) = 0

> SS:=dsolve({ec1,ec2,ci},{x(t),v(t)});

SS := {v(t) = -4*exp(-t)*t, x(t) = 1+exp(-t)*(4+4*t...

Ejercicios

Soluciones numéricas

> restart;

Veamos la solución numérica de la ecuación de movimiento de un péndulo simple:

* diff(theta(t),`$`(t,2))+g*sin(theta(t))/L = 0

para valores numéricos de g, L . Esta ecuación diferencial tiene solución analítica, en términos de integrales elípticas. Sin embargo, la estudiaremos numericamente como un sistema de dos ecuaciones acopladas de primer orden. Consideremos g = 9.8 mts/(seg^2) , L = 5 mts

Las ecuaciones son:

> ec1:=diff(v(t),t)+(9.8/5)*sin(theta(t));
ec2:=v(t)=diff(theta(t),t);

ec1 := diff(v(t),t)+1.960000000*sin(theta(t))

ec2 := v(t) = diff(theta(t),t)

Condiciones iniciales

> ci:=theta(0)=Pi/6,v(0)=0;

ci := theta(0) = 1/6*Pi, v(0) = 0

Solucion numérica

> S:=dsolve({ec1,ec2, ci}, {theta(t),v(t)}, type=numeric);

S := proc (rkf45_x) local i, rkf45_s, outpoint, r1,...

Valores particulares

> S(1); S(1.5); S(8.9);

[t = 1, v(t) = -.710526284271175368, theta(t) = .10...

[t = 1.5, v(t) = -.635798489073467032, theta(t) = -...

[t = 8.9, v(t) = .224122860433346671, theta(t) = .4...

Despliegue de 10 valores en el rango t = 0 .. 4*Pi

> IN:=(t1,tn,n)->[seq( evalf(t1+i*(tn-t1)/(n-1)),i=0..n-1)];

IN := proc (t1, tn, n) options operator, arrow; [se...

> IN(0,4*Pi,10);

[0., 1.396263402, 2.792526804, 4.188790204, 5.58505...
[0., 1.396263402, 2.792526804, 4.188790204, 5.58505...

> SS:=dsolve({ec1,ec2, ci}, {theta(t),v(t)}, type=numeric, value=array(IN(0,4*Pi,10)));

SS := matrix([[vector([t, v(t), theta(t)])], [matri...

Gráficas con odeplot

> plots[odeplot](S,[t,theta(t)], 0..4*Pi, numpoints=300);

[Maple Plot]

Comparar las gráficas de odeplot para S y SS

> p1:=plots[odeplot](S,[t,theta(t)],0..4*Pi,color=black):
p2:=plots[odeplot](SS,[t,theta(t)],0..4*Pi, color=red): plots[display]({p1,p2});

[Maple Plot]

Para entender bien que sucede, veamos los puntos graficados. En la grafica de SS, solo se grafican los puntos escogidos en el arreglo.

> p1:=plots[odeplot](S,[t,theta(t)],0..4*Pi,color=black, style=point,symbol=cross):
p2:=plots[odeplot](SS,[t,theta(t)],0..4*Pi, color=red, style=point, symbol=box): plots[display]({p1,p2});

[Maple Plot]

Para graficas de sistemas, odeplot permite trazar varias graficas interesantes

Gráfica de [t, v(t)]

> plots[odeplot](S, [t,v(t)], 0..4*Pi);

[Maple Plot]

Gráfica de [theta(t), v(t)] (espacio de fase)

> plots[odeplot](S, [theta(t),v(t)], 0..4*Pi);

[Maple Plot]

Gráfica 3dim [t, theta(t), v(t)]

> plots[odeplot](S, [t,theta(t),v(t)], 0..4*Pi, axes=boxed,labels=[t,"theta(t)","v(t)"]);

[Maple Plot]

>