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]

>