ECUACIONES DIFERENCIALES PRÁCTICA ECUACIONES DIFERENCIALES Contenido - EJEMPLOS DE ED Y SOLUCIONES. - EL COMANDO dsolve. RESOLUCIÓN DE PROBLEMAS DE CONDICIÓN INICIAL. - CAMPOS DE DIRECCIONES. - TRAYECTORIAS ISOCLINAS. - ED EN VARIABLES SEPARADAS. COMANDOS PARA LA DERIVACIÓN » syms x » diff(f,x) Halla la función derivada de f respecto a x. » diff(f,x,n) Halla la función derivada enésima de f respecto a x. » Df Representa simbólicamente la derivada de f. Para derivadas sucesivas D2, D3, etc. EJEMPLOS DE ED Y SOLUCIONES 1. Sea la ecuación m y´´ = -m g + k y´ Comprobar que y(t) = A + B exp(k t / m) + m g t / k es una solución de dicha ED SOLUCIÓN 1º. Definir simbólicamente y(t). 2º. Sustituir en la ED » syms t y k m g A B » y = A + B*exp(k*t/m) + m*g/k*t; » a=m*diff(y,t,2)-k*diff(y,t)+m*g a =1/m*B*k^2*exp(k*t/m)k*(B*k/m*exp(k*t/m)+m*g/k)+m*g » simplify(a) ans =0 2. Comprobar que la función u(x,t) = exp( -Π2 c2 t / l2 ) sen( Π x / l) es solución de la ecuación del calor ut(x,t)= c2 uxx(x,t) » syms u t c x l » u='exp(-pi^2*c^2*t/l^2)*sin(pi*x/l)'; » diff(u,t)-c^2*diff(u,x,2) ans =0 El comando dsolve. Resolución de PCI El comando dsolve permite resolver explícitamente algunas ED, incluso sin declarar simbólicas a las variables involucradas. -Resolver la ED y'=1+y^2 » dsolve('Dy=1+y^2') ans =tan(t+C1) -Obtener la solución local con la CI (0,1) » dsolve('Dy=1+y^2','y(0)=1') ans =tan(t+1/4*pi) -Representar dicha solución local » ezplot('tan(t+pi/4)',[-pi/4,pi/4]), hold on, plot(0,1,'*r') tan(t+ π/4) 9 8 7 6 5 4 3 2 1 0 -0.6 -0.4 -0.2 0 t 0.2 0.4 0.6 - Resolver la ED y' = - y - 2 t » dsolve('Dy=-y-2*t') ans =-2*t+2+exp(-t)*C1 - Obtener la solución local con la CI (-2,1) » dsolve('Dy=-y- 2*t','y(-2)=1') ans =-2*t+2-5*exp(-t)/exp(2) - Representar dicha solución local » ezplot('-2*t+2-5*exp(-t)/exp(2)',[-4,3]), hold on, plot (-2,1,'*g') -2 t+2-5 exp(-t)/exp(2) 2 0 -2 -4 -6 -8 -10 -12 -14 -16 -4 -3 -2 -1 0 t 1 2 3 Algunas ED resolubles no pueden ser resueltas por MATLAB. EJEMPLO. y'=-2t-y+cos(y) » dsolve('Dy=-2*t-y+cos(y)') Warning: Explicit solution could not be found. >In C:\MATLABR11\toolbox\symbolic\dsolve.m at line 326 ans = [ empty sym ] Si el comando dsolve no puede obtener explícitamente la solución, entonces el propio dsolve ofrece la solución en la forma implícita. EJEMPLO. y'=y^2(1-y) » dsolve('Dy=y^2*(1-y)') Warning: Explicit solution could not be found; implicit solution returned. > In C:\MATLABR11\toolbox\symbolic\dsolve.m at line 292 t+1/y-log(y)+log(-1+y)+C1=0 Resolver la ED con la CI y''=-y+ cos(2x) y(0)=1, y'(0)=0. » y=dsolve('D2y=-y+ cos(2*x) ','y(0)=1','Dy(0)=0','x') y = (1/2*sin(x)+1/6*sin(3*x))*sin(x)+(1/6*cos(3*x)1/2*cos(x))*cos(x)+4/3*cos(x) Notar el efecto del comando simplify » simplify(y) ans = -2/3*cos(x)^2+4/3*cos(x)+1/3 Significado geométrico de y'=f(x,y). Dada la ED y'=f(x,y), si y(x) es solución y (x0,y0) es un punto de la gráfica de y(x), entonces la pendiente de dicha solución en (x0,y0) es y' (x0) que es igual a f (x0,y0). Así pues, para conocer la pendiente de la solución que pasa por (x0,y0) no hace falta conocer dicha solución; basta con calcular f (x0,y0). Si esto se hace con todos los puntos del plano, tendremos las pendientes de las soluciones que pasan por cada punto del plano. Naturalmente, en la práctica es imposible hacer esto con todos los puntos del plano, pero nada nos impide hacerlo con tantos puntos como queramos, configurando un dibujo que se llama campo de direcciones de la ED. CAMPOS DE DIRECCIONES Sea n=1 y sea y'(x)=f(x,y(x)). Para construir el CAMPO DE DIRECCIONES de la ED, por cada punto (x,y) de una red de puntos de R^2 se dibuja un segmento o vector de pendiente f(x,y). Para el estudio gráfico de las soluciones de una ED sin haberla resuelto, usaremos un programa en el que intervienen los comandos meshgrid y quiver, que permite dibujar el campo de direcciones. Los vectores a considerar para obtener el campo de direcciones serán (1, y') . EJEMPLO. Construir el campo de direcciones de la ED y'=x » f=inline('x', 'x','y') » paso=0.5;iz=-3;der=3; » [x,y]=meshgrid(iz:paso:der,iz:paso:der) » [n,m]=size(x) » dx=ones(n,m) » z=f(x,y) » dy=z » quiver(x,y,dx,dy) 4 3 2 1 0 -1 -2 -3 -4 -3 -2 -1 0 1 2 3 4 Representar además la solución particular que cumple la CI y(0)=0. » hold on, quiver(x,y,dx,dy) » dsolve('Dy=x','y(0)=0', 'x') » ezplot('1/2*x^2',[-2.5,2.5]), hold on, plot(0,0,'*g') 1/2 x 2 3 2.5 2 1.5 1 0.5 0 -2.5 -2 -1.5 -1 -0.5 0 x 0.5 1 1.5 2 2.5 Ejercicio. 1. Construir el campo de direcciones de y'=-x/y 2. Representar además la solución particular que cumple la CI y(1)=1. 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0 -0.2 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 (-x 2+2)1/2 1.4 1.2 1 0.8 0.6 0.4 0.2 0 0.4 0.6 0.8 1 x 1.2 1.4 1.6 TRAYECTORIAS ISOCLINAS Dada la ED y'=f(x,y) , se llaman curvas de nivel o isoclinas a las obtenidas al imponer la condición y'=k Método de las isoclinas. Es una variante de las ideas antes descritas. Los puntos del plano por los que pasa una solución con pendiente k, son los puntos de la curva de ecuación f(x,y)=k (isoclina de pendiente k). Dibujando las distintas isoclinas se obtiene una representación similar a la del campo de direcciones. Puede tener interés identificar la isoclina para la pendiente 0 pues las soluciones tendrán generalmente un máximo o un mínimo al pasar por esta isoclina. Representar las isoclinas de la ED y' = x + y^2 Representar el gráfico de contorno (curvas de nivel o isoclinas) de la superficie z = x + y^2 » [x,y]=meshgrid(0:0.05:3,-2:0.05:2); » z=x+y.^2; » isoclinas=contour(x,y,z,20) 2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 0 0.5 1 1.5 2 2.5 3 Representar las isoclinas de la ED y' = x^2 + y^2 » [x,y]=meshgrid(-4:0.05:4); » z=x.^2+y.^2; » isoclinas=contour(x,y,z,20) 4 3 2 1 0 -1 -2 -3 -4 -4 -3 -2 -1 0 1 2 3 4 EJERCICIO. Representar las isoclinas de la ED y' = 2x- y ¿Qué tipo de curvas son dichas isoclinas? Representar las isoclinas correspondientes a k=0, y k=2. ¿Qué particularidad tiene la correspondiente a k=2? Construir el campo de direcciones y las curvas de nivel de la ED y'=sin(x)+y » f=inline('sin(x)+y', ‘x','y') » paso=0.5;iz=-3;der=3; » [x,y]=meshgrid(iz:paso:der,iz:paso:der) » [n,m]=size(x) » dx=ones(n,m) » z=f(x,y) » dy=z » hold on, contour(x,y,z,20),quiver(x,y,dx,dy) 4 3 2 1 0 -1 -2 -3 -4 -3 -2 -1 0 1 2 3 4 Ecuaciones en variables separadas y'=f(x)h(y) y(x0)=y0 dy/h(y)=f(x)dx , si 1/h=g, entonces g(y)dy=f(x)dx Integrando G(y)=F(x)+c (Solución general) c=G(y0)-F(x0) G(y)=F(x)+G(y0)-F(x0) (Solución particular) Resolver el siguiente PCI y' = -2 x y, y(0)=2 Representar la solución. f(x)=-2x, h(y)=y » syms F G x y c » f='-2*x'; g='1/y'; » x0=0;y0=2; » F=int(f); G=int(g); » sol=solve(G-F-c,y) solución general » c=solve(subs(sol,x0,'x')-y0,c); » y=subs(sol,c,'c') solución particular » ezplot(y,[-2,2]), hold on, plot (0,2,'+r') sol =exp(-x^2+2*c) solución general y =exp(-x^2+log(2)) solución particular exp(-x2+log(2)) 2 1.5 1 0.5 0 -2 -1.5 -1 -0.5 0 x 0.5 1 1.5 2 Resolver el siguiente PCI y' = -2 x y y(0) = 2 usando el comando dsolve. » dsolve('Dy=-2*x*y','y(0)=2','x') y =2*exp(-x^2) Resolver el PCI y'=sen(x)(y-1) y(0)=2 » syms F G x y X Y » f='sin(x)' » g='1/(y-1)' » F=int(f,x,0,X) » G=int(g,y,2,Y) » sol=solve(G-F,Y) solución particular » F =-cos(X)+1 » G =log(Y-1) » sol =exp(-cos(X)+1)+1 Resolver ycos(x)dx-(1+y^2)dy=0, y(0)=1. Despejando y'=ycos(x)/(1+y^2) » y= dsolve('Dy=y*cos(x)/(1+y^2) ', 'x') y =-i*(-lambertw(exp(2*sin(x)+2*C1)))^(1/2) Teniendo en cuenta que Lambertw(x)=w cumple que w*exp(w)=x, lo que se obtiene es y^2*exp(y^2)=K*exp(2*sin(x)) Resolver ycos(x)dx-(1+y^2)dy=0, y(0)=1. Separando las variables » solve('int(cos(x),x)-int((1+y^2)/y,y)') » ans =asin(1/2*y^2+log(y)), es decir, sin(x)=log(y)+1/2*y^2+c (solución general) » c=simple(sym('solve(subs(x=0,y=1,sin(x)= log(y)+1/2*y^2+ c),c)')) » c =-1/2, es decir, la solución particular es sen(x)=log(y)+1/2(y^2-1) Aplicar herramientas del MATLAB para resolver los siguientes ejercicios. a ) y' + y 2 sin (x) = 0 b) 4 xy dx + ( x 2 + 1)dy = 0 c) xy ' = y + ( x 2 − y 2) d ) ( x − y ) dy = ( x + 3 y ) dx e) ( x 2 + 1) dy = ( y 2 + 1) dx, y (0) = 1 / 2 f ) (1 + ex ) y y ' = ey, y (0) = 0 Nota. MATLAB se vale de una colección de “funciones básicas elementales” más amplia que la nuestra, con la cual nos puede dar una mayor cantidad de respuestas en forma cerrada. Una de estas funciones es w(z)=Lambertw(z) definida implícitamente por Lambertw(z)*exp(Lambertw(z))=z La definición de cualquier función especial MatLab puede ser consultada invocando en la línea de comandos help+nombre de función, por ejemplo >>help lambertw LAMBERTW Lambert's W function. W = LAMBERTW(X) is the solution to w*exp(w) = x. W = LAMBERTW(K,X) is the K-th branch of this multi-valued function. Reference: Robert M. Corless, G. H. Gonnet, D. E. G. Hare, D. J. Jeffrey, and D. E. Knuth, "On the Lambert W Function", Advances in Computational Mathematics, volume 5, 1996, pp. 329-359. Also available from: http://pineapple.apmaths.uwo.ca/~rmc/papers/LambertW/index.html Overloaded methods help sym/lambertw.m