-
GMatl#Iforks.
-
ECUAGIONESDIFERENGIALES
CON MATLAB
Ejemplos y ejerciciosresueltos
CESAR PREZ LPEZ
-
INDICE
MilTRODUCCIN PRCTICA A MATLABMT,TCTONES DIFERENCIALES DE PRIMER ORDEN. ECUACIONESm[,{cTAS, EN VARIABLES SEPARADAS, HOMOGENEAS Y LINEALES........25
1l EcuACIoNES DIFERENCIALES DE PRIMER oRDEN ...............25]JECUACIONESENVARIABLESSEPARADAS.................. ...............28]j ECUACIONES DIFERENCIALES HOMOGNEAS ............... ........... 30:' 4 ECUACIONES DIFERENCIALES EXACTAS... ............ 331,i ECUACIONES DIFERENCIALES LINEAIES .................... 35
]I TACIONES DIFERENCIALES DE ORDEN SUPEROR. TRANSFORMADA DEI,PLACEYTIPOSESPECIALESDEECUACIONES...... ...................37
3.I ECUACIONES ORDINARIAS DE ORDEN SUPERIOR. .....,.,..,...,...37J l ECUACIONES LINEALES DE ORDEN SUPERIORHOMOGNEAS ENCOEFICIENTES CONSTANTES. ..................39]S ECUACIONES NO HOMOGNEAS CON COEFICIENTES CONSTANTES,\-ARTACIN DE PARMETROS........... ....,.,41J.+ ECUACIONES NO HOMOGNEAS CON COEFICIENTES VARIABLES.ECL]ACIONES DE CAUCHY-EULER.... ,.,....443*i TRANSFORMADA DE LAPLACE .................. .............45
-1.6 POLINOMTOS ORTOGONALES ............. 483.6.1 Polinomios de Chebychev de primera y segunda especie.....................'........... 483.6.2 Polinomios de Legendre................... ........................493.6.3 Polinomios asociados de Legendre ..........................493.6.4 Polinomios de Hermite................... ..........................49
-
4 ECUACIONES DIFERENCIALES CON M 50
1iilll"-:i:::T'"r;::i:::'""": so3.6'7 Polinomios de Jacobi ""'1""""""'
""""""""""""" 50
3.6.8 Polinomios de Gegenbauer """"""' """"""""""""'
50
3.7 FLTNCIONES DE AIRY Y BESSEL .."...".
51
ECUACIONESDIFERENCIALESponITroDoSAPRoXIMADOS...................534.lEcuAcIoNEs"o*"o*o*'***AI-lNo'un{EArEsYNoI.lN{FAtrs'rrtooosepnoxnranos """""534.2 Er- MroDo DE LAS sERIES DE TAYLoR """""""
""""""' 53
4.3 Er-MroDoDERtrNGE-Kurre"""" """""'
56
srsrEMAs DE EcuAcroNEs DIFERENcIALEs Y EcuAcIoi::.::................ se
DIFERENCIAS FTN TTAS"""""""""'5.lSISTEMAS,"u**io*II.IEALES;OMoGENEASCoNCoEFICIENTESCONSTA\TTES
........59
s2 STSTEMAS OE*oo*"^*r*ono*oo^t* coN CoEFICIENTES
CONSTANTES ........60
53EcuAcloNEs'*u**'FINnAs"""' """"""""'
61
cl,cut o NuunTco EN MATLAB' APLIcAcroNEs A LAs EcuAcroNrs
6.1 MATLAB Y LA PRoGRAMactN """"" """
65
6.2 EotronoE rExro"""" """""'
65
6.3 ScuPrs" """""'67
6.4Ft-lNctoNesyM-rtcrrenos.FLINCTI0N,EVALYFEVAL...'.....................686.5 Verueelss LocALES Y GLoBALEs
"""""""'73
6.6TtposDEDAros """"""""""'75
6.7 Corrn.ot-t';;;;;'BucLEsFoR'wHILErIFELSEIF ....'..""" "' "'' ""''' ""2
-
INDICE 5
6.9.1 Mtodo de Euler....... ...............:..... ...... 866.9.2 Mtodo de Heun....... ......816.9.3 Mtodo de las series de Taylor...... ...... 88
ECUACIONES EN DIFERENCIAS CON VALORES INICIALES, VALORES ENLA FRONTERA Y EN DERIVADAS PARCIALES ....................... 95
7.I SOLUCIN NUMRICADEECUACIONES DIFERENCIALES .........................957.2 ECUACIoNES DIFERENCIALES oRDINARIAS CON VALORES INICIALES ......................... 957.3 EcUACToNES DTFERENCTALES oRDINARIAS coN vALoRES EN LA FRoNTERA.............. 997.4 EcUACtoNES DIFERENCTALES EN DERTvADAS pARCIALES... ................. 102
-
Captulo 1
INTRODUCCION PRACTICA A MATLAB
ClCuT,O NUMRICO CON MATLABPodemos usar Matlab como una computadora numrica de gran
poEncia. La mayora de las calculadoras manejan nmeros slo con ungrdo de precisin prefijado, sin embargo Matlab realiza clculos exactosGrn la precisin que sea necesaria. Adems, a diferencia de las*ladoras, podemos realizar operaciones no slo con nmerosivftJuales, sino tambin con objetos tales como las matrices.
La mayora de los temas del clculo numrico clsico, son tratadosei este software. Soporta clculo matricial, estadstica, interpolacin, ajustepr mnimos cuadrados, integracin numrica, minimizacin de funciones,pgramacin lineal, resolucin numrica de ecuaciones algebraicas yfrrenciales y un largo etctera de procesos de anlisis numrico quehrrrc viendo altratar los sucesivos temas de este libro.
Veamos algunos ejemplos de clculo numrico con Matlab. (Comop sabemos, para obtener los resultados es necesario teclear Enter una vezffiritas las expresiones correspondientes al lado del prompt ">>")
1) Podemos calcular sencillamente 4+3 y obtener como resultado 7.
r*+3
-
8 ECUACIONES DIFERENCIALES CON MATLAB
ans =
7
2) Tambin podemos obtener el valor de 3 elevado a 100, sin haberfijado antes la precisin, basta para ello teclear 3^100. 3^100
ans =
5.1538e+047
3) Tambin podemos utilizar el comando "format long e" para pasarel resultado de la operacin anterior a notacin cientfica con 16 dgitos msexponente.
format long e 3^100
ans =
5.1 537 7 5207 3201 1 5e +0 47
4) Tambin podemos trabajar con nmeros complejos. Obtendremosel resultado de la operacin (2+3i) elevado a 10, tecleando la expresin(2+3i)^10,
(2 + 3)^10
ans =
-1.41 5249999999998e+005 -1 .456680000000000e+005i
5) El resultado anterior tambin se puede obtener en formato corto,utilizando el comando "format short".
format short (2 + 3)^10
ans =
-1 .41 52e+005- I .4567e+005
{I
"j{tI
II
f,m
llI
-
b,
I
r
:
I
CAPTULo 1. INTRoDUCCIN PRCTICA A MATLAB 9
6) Tambin podemos calcular el valor de la funcin de Bessel en elpunto 11.5 . Para ello teclearemos Besselj(0,11.5).
Besselj(O, 11.5)
ans =
0.2150
7) Tambin podemos realizar integrales numricas. Para calcular laintegral entre 0 y n de la funcin Seno(Seno(x)) teclearemos la expresinint(sin(sin('x')), 0, pi).
int(sin(sin('x')), 0, pi)ans =
1235191 1 62052677 122517 9981 3685248*pi
Estos temas sern tratados ms a fondo en sucesivos captulos a lolargo del libro.
cr,cur.o SIMBLICO coN MATLABMatlab maneja perfectamente el clculo matemtico simblico,
manipula con facilidad y rapidez las frmulas y expresiones algebraicas ypuede realizar la mayora de operaciones con las mismas. Puede expandir,factorizar y simplificar polinomios y expresiones racionales y trigonomtricas,puede encontrar soluciones algebraicas de ecuaciones polinmicas ysistemas de ecuaciones, puede evaluar derivadas e integralessimblicamente y encontrar funciones solucin de ecuaciones diferenciales,puede manipular series de potencias, lmites y muchas otras facetas de lamatemtica algebraica.
Para realizar esta tarea, Matlab requiere que todas las variables (oexpresiones algebricas) se escriban entre comillas simples. Cuando Matlabrecibe una variable o expresin entre comillas, considera que es simblica.
Veamos algunos ejemplos de clculo simblico con Matlab.
-
,,
ii:lflt,i
[lrlrt,1
I
10 ECUACIONES DIFERENCIALES CON MNTLqg
1)Podemoselevaralcubolasiguienteexpresinalgebraica:(x+1)(x+2)- (x+2) 2. Esto se consigue tedendo la siguiente expresin:li-pJro tr(-* r 1x*Zxrzrg;l El iesultado ser otra expresin al gebraica:
> expand('((x + 1).(x + 2)'(x + 2)1243',
ans =
-x^3-6*x^2'12"x'8
2)Podemosfactorizarelresultadodelclculodelejemploanteriortecleand: factor('((x + 1)*(x + 2)-(x + 2)"2)^3')
factor('(( + 1)*(x + 2)'(x + 2)42n'',
ans =
-(x+2)^33)Podemosresolverlaintegralindefinidadelafuncin
(x^2)Sen'o(x)^2 tecleando: i nt('x^2*sin(x)^2"'x')
int('x^2*sin(x)^2','x')ans =
x^2*(-112*cos(x)*sin(x)+1t2*x|.1l2*x*cos(x)^2+1/4*cos(x)*sin(x)+1/4*x.l/3*x^3
4) Podemos simplificar el resultado anterior:
> simplify(int('x^2*sin(x)^2','x'))ans =
-112*x^2*cos(x)*sin(x)+l/6*x^3-l/2*x*cos(x)^2+1l4"cos(x)*sin(x)+114*x5)Podemosexpresarelresultadoanteriorconnotacinmatemtica
ms elegante:
pretty(simplify(int('x^2*sin(x)^2','x')
fl;E
-
a-
n:al-
fxr
ETII
Tca
cnpruLo 1. rNTRoDUcclru pncrlcn A MATLAB 11
7.12x cos(x) sin(x) +L/6x -L/2 xcos(x)1/4 cos(x) sin(x) + L/4 x
6) Podemos desarrollar en serie de potencias de orden 12 la funcin)^2, presentando el resultado en forma elegante:
^2*sin(x)^2',12))68I
,. -Llg
10 L2+ o(x )x +2/45x -L|3LSx
7) Podemos resolver la ecuacin 3ax-7x^2+x^3=0 (a, es un
a*x-7*x^2+ x^3 = 0.,'x')
0lLl2* (49-L2*al n (L/211L/2* (49-L2*al n lL/2) 18) Podemos hallar las cinco soluciones de la ecuacin x^5+2x+1=0:
rS+2*x+1 ,,,x')
z 5+2*_2+11
Como el resultado obtenido no expresa explcitamente las cincoaplicamos el comando "allvalues":
solve('x^5+2*x+1','x'))
-=
I--?01873568855861 9- . 87 96 97 L97 9298240* i):--7018735688558 61 9+ . 87 9697L97 9298240*il
-.48638903s934s4301
-
-L
12 ECUACIONES DIFERENCIALES CON MATLAB
I . 9450680868231334- . 8545175L44390459*ilI . 94s0680868231334+. 8s45175t44390459*il
Por otra parte, Matlab puede utilizar las libreras del programa MapleV, para trabajar con matemtica simblica y poder extender as su campo de,"in. De eita forma, se puede usar Matlab para trabajar en temas comolas formas diferenciales, la geometra eucldea, la geometra proyectiva, laestadstica, etc.
A su vez, tambn se pueden ampliar temas del clculo numri@,utilizano las libreras desde Matlab las libreras de Maple (combinatori4optimizacin, teora de nmeros, etc')
MATLAB Y MAPLE
Matlab se apoya en las libreras del programa Maple . Siempre qtrsea necesario acudir cualquier comado o funcin de Maple desde Matlah'se utiliza el comando "mapl" seguido de la sintaxis correspondiente en dentorno Maple. Hay que constatai que esta disponibilidad solo es posible sise ha instaiado el ;'Tolbox" de clculo simblico "Extended Symbolic MillToolbox".
Para utilizar un comando Maple desde Matlab, Ia sintaxis es hsiguiente:
maple('si ntaxis-del-comando-en-entorno-Maple')o tambin:
m dpl e's i ntaxis-d e l-co man d o-en-e nto rn o-M a p I e'
Para utilizar una funcin Maple con N argumentos desde Matlab bsintaxis es la siguiente:
maple('sintaxis-de-la-funcin-en-entorno-Maple', argumentol,argumento2, ..., argumentoN)
Veamos algunos ejemplos al respecto.
1) Podemos calcular el lmite de la funcin (x^3-1)/(x-1) cuando ,--
maple('limit((x^3'1 )/(x'1),x=l )')
-
ee0h
cApruLo 1. tNTRoDUccrrrr pRcrtca A MATLAB 13
ans =
3
Tambin podra haberse utilizado la siguiente sintaxis:
r maple'limit((x^3-l )/(x-1 ),x=1 )';ans =
3
2) Podemos calcular el mximo comn divisor entre 10.000 y 5.000:r maple('gcd', 10000, 5000)lfls =
5{n0
CNTTCOS CON MATLABMatlab produce grficos de dos y tres dimensiones, as como
mntornos y grficos de densidad. Se pueden representar los grficos y listarbs datos, permite el control de colores, sombreados y otras caractersticasde los grficos, tambin soporta grficos animados. Los grficos producidospor Matlab son portables a otros programas.
Veamos algunos ejemplos de grficos con Matlab't) Podemos representar la funcin xSeno(1/x) para x variando
efitre -xl4 y ru/4, tomando 300 puntos equidistantes del intervalo. Ver figura1.1
r r=linspace(-pi/4,pi/4,300) ; y=x.r'sin(1./x)' plot(x,y)
o,a,
ueb,el
rsirth
la
l, la
->1:
-
74 ECUACIONES DIFERENCIALES CON MATLAB
Figura 1.1
2) Podemos dotar al grfico anterior de las opciones de marco yrejilla, as como de ttulo para el propio grfico y etiquetas para sus ejes. Verfigura 1.2.
x=l i nspa ce(-pil 4,pil 4,300) ; y=x.*sn(1./x); plot(x,y); grid; xlabel('Variable independiente X'); ylabel('Variables dependientes Y, Z'); title('Funciones Seno y Coseno sobre los mismos ejes')
FuncioFe6 EEno y Coso sohre los mismas ejeE
Figura 1.2
3) Podemos generar un grfico de superficie paru laz=Sen(sqrt(yt')+y^2)lsqrt(x^2+y^2), haciendo variar x e y en el inte-.
=
valores (-7.5,7.5), tomando puntos equidistantes en 5 dcimas . Ver flq--.
o.E
-E
-
4-q
E n,:g
-.2
-,4r0 E A.6 .il.{- -A_2 tr_: [.4 0.5 O.EVarisble independaeIe X
-
CAPTULo 1. INTRoDUCCIN PRCTICA A MATLAB 15
v!r
x=-7.5:.5:7.5; Y=x; [X,Y]=ss h g rid(x,y) ; Z=sin(sqrt(X.^2+Y.^2))./sqrt(x. ^2+Y .^21:' surf(X,Y,Z)
Estos grficos tridimensionales permiten a la perfeccin hacerse unaidea de las figuras en el espacio, y son muy tiles a la hora de determinarvisualmente intersecciones entre distintos cuerpos, generacin devolmenes de revolucin y desarrollos de todo tipo.
4) Podemos generar un grfico tridimensional, correspondiente a lahlice en coordenadas paramtricas: x=Sen(t), y=Cos(t), z=t. Ver figura 1.4.
t=0:pi/50:1O*pi; plot3(si n(t),cos(t),t)
)nb
Figura 1.3
Figura 1.4
-
16 ECUACIONES DIFERENCIALES CON MATLAB
Podemos representar una curva plana dada por sus coordenadrepolares r= Cos(2t).Sen(2t) paratvariandoentre 0yn, tomando puntcequidistantes una centsima en el intervalo considerado. ver figura 1.5.
t=0:.1:2*pi; r=sin(2*t).*cos(2*t); polar(t,r)
Figura 1.5
6) Podemos realizar un grfico de una funcin considerada comosimblica, utilizando el comando "ezplot". Ver figura 1-6
},=',131tn2-11';r ezplot(y,[-5,5])
1
0
-1rt
x"3t{x^2- 1 )
'5 I
En elconceptos.
Figura 1-6
correspondiente captulo de grficos ampliaremos estos
-
AS
OS
no
tos
cnpiruro 1. rNrRoDuccrru pnclrca A MATLAB 17
}IOTACION GENERALSiempre que se utiliza un programa, es necesario conocer las
caractersticas generales sobre notacin, con la finalidad de introducirnos enla prctica con el mismo. La mejor forma de aprender Matlab es utilizar elprograma. Cada ejemplo consiste en el input del usuario encabezado con elprompt "" y la respuesta de Matlab en la lnea siguiente. Ver figura 1-7.
En otras ocasiones, y dependiendo del tipo de entrada (input deusuario) que se le proponga a Matlab, devuelve la respuesta utilizando laexpresin "ans= n'. Verfigura 1-8
:- 2*2
lt
Es necesario poner atencin en la diferencia entre maysculas yminsculas, eltipo de parntesis o corchetes, la cantidad de espacios y en Iapuntuacin (comas, puntos y comas).
mBads to qet started: intro, dmo, help hetpomnands fop nore inforntion: help, uhatsneu, info, subscribe
A:[123;456;7ACl
Figura 1-7
Figura 1-8
-
18 ECUACIONES DIFERENCIALES CON MATLAB
AYUDAS CON COMAI\DOSYa hemos visto en el captulo anterior cmo se obtena ayuda
utilizando los mens desplegables de Matlab.
Pero, adems, la ayuda tambin puede obtenerse a travs decomandos (instrucciones o funciones), implementados como objetos deMatlab.
Se puede utilizar la ayuda de acceso inmediato para acceder adiversa infor-macin utilizando el comando help.
helpHELP topics:
matlab\qeneraJmatTab\opsnatlab\lanqmatlab\elmatmatfab\effunmatlab\ specfunmatlab\natfunmatfab\datafunmatfab\pofyfunmatlab\ funfunmatTab\sparfunmatTab\graph2dmatlab\graph3dnatlab\ specqraphmatTab\qraphicsnatfab\uitoolsmatfab\strfunmatfab\iofunmatlab\tinefunmat fab\datatypesmatfab\winfun(DDE/ActiveX)matlab\demostooJbox\ syrnl:o 11ctoolbox\tourtoofbox\locaf
GeneraL purpose commands.Operators and speciaf characters,Proqramminq Tanquage constructs.Elementary matrices and matrlx manipulation.Elementary math functions.Specialized nath functions.Matrix functions
- numericaf finear algebra.Data anafysis and Fourier transforms.Interpofation and poTynomials.Function functions and ODE sofvers.Sparse matrices.Two dimensi onaJ graphs.Three dimensional graphs.Specialized qraphs.Handle Graphics.GraphicaT user interface toofs.Character strings.File input/output.Time and dates.Data types and structures.- ttlindows Operating System Interface Fr,ie-.trxamples and demonstrations.SynboLic Math Toofbox.MATLAB TourPreferences.
For more help on directory/topic, type ,,help topic,,.como vemos, el comando help muestra una lista de los directori:_-
del programa y de su contenido. Tambin se puede pedir ayuda sob.=cualquer tema del contenido utilizando el comando help tema. help nv
-
CAPTULO 1. INTRODUCCIN PRCTICA A MATLAB 19
ideide
ruda
era
ctonossobre
:iilii- l.larrix inverse.-',-.''Y) is the inve,se-
,.,::ning messaqe -is:-==::i y sinqular.-:== a-so SLASH, PINV,
j,=-''^ded methods:-=- p sym/inv.m
r lrclp matlab\elfun!-=:=::tary math functions.!:-::::cmetric.
of the square matrix X.prin' if X is badJv scafed ot
COND, CONDEST, NNLS, LSCOV.
Szne.Hyperbolic sine.Inverse sine.rnverse hyperbolic sine.Cos ine .Hyperbollc cosine.Inverse cosine.I nverse hypet bol i c cosine.tattYL!1L.
HyperboTic tanqent.Inverse tangent.Four quadranL inverse tanqenL.Inverse hyperbolic tanqent.Secant.Hyperbolic secant.Inverse secant.Inverse hyperbolic secant.Cosecant.Hyperbolic casecant.Inverse casecant.Inverse hyperbolic casecant.Cotangent.HyperboTic cotanqent.Inverse catangent.Inverse hyperboTic cotanqent.
Exponential.Naturaf loqarithm.Common (base 70) loqartthm.
- Base 2 loqarlthn and dissect floating point
Base 2 povrer and scafe floating point number.Square raot.Next higher power of 2.
-
2A ECUACIONES DIFERENCIALES CON MATLAB
abs
conjimagreal-unwrapisrealcpTxpair
Roundinq and
fixf foorceifroundmodremstqn
- Alcsofute vafue.
- Phase angle.-
Complex conlugate.-
Complex imaqinary part.-
Complex reaT part.- Unwrap phase angJe.-
True for reaf array.-
Sort numbers into complex conjuqate pairs.remainder.
- Round tawards zero.- Round towards minus infinity.- Round towards plus lnfinlty.-
Round towards nearest integer.- Modulus (siqned remainder after division)- Remainder after division.- Siqnum.
Existe un comando de ayuda sobre una determinada secuencia decaracteres (lookfor secuencia) que permite encontrar todas aquellasfunciones o comandos que se refieren a dicha secuencia o la contienen.Este comando es muy til, bien cuando no se dispone de ayuda directa parala secuencia especificada, o bien para ver la ayuda de todos los comandosque contienen la secuencia. Por ejemplo, si buscamos ayuda para todos loscomandos que contienen la secuencia complex, podemos usar el comandolookfor complex para ver en qu comandos Matlab ofrece informacin alrespecto.
lookfor complexctranspose.m: Z' Complex conjuqate transpose.CONJ Complex conluqate.CPLXPAIR Sort numbers into complex conjuqate pairs.IMAG Complex imaqinary part.REAL Complex real part.CDF2RDF Complex diagonal form to reaf bfock dlaqonaL form.RSF2CStr Real bfock diagonal form to complex diaqonal form.B5ODE Stiff problem, linear with complex eigenvalues (85 of EHL) .CPLXDEMO Maps of functions of a complex variabfe.CPLXGRID Polar coordinate complex qrid.CPLXMAP Plot a function of a complex variabfe.GRAFCPLX Demonstrates complex function pJots in MATLAB.ctranspose.m: *TRANSPOSE Syml:olic matrix complex conjuq_ __transpose.SMOKE Complex matrix wlth a ,,smoke rinq,, pseudospectrum.
-
ldellasnen.parardoss losndoin al
capruro 1. TNTRoDUCcTru pnclcnA MATLAB 21
COMANDOS DE ESCAPE Y SALIDA AL ENTORNO DOSExisten tres formas de salir desde la ventana de comandos de
lilaab al entorno del sistema operativo MS-DOS para ejecutar tareastsrnporales.
El comando lorden_dos introducido en la ventana de comandos,rerrnite ejecutar la orden de DOS especificada en ambiente Matlab. Por{prnplo:r ldir:- -clumen de fa unidad D no tiene etiquetal- ::fmero de serie def vcfumen es 145C-72P2l-:=ctorio de D : \MATLAB52\bin
=,- -
ta"S BAT:-: _10 DLL:3E-Z BAT::W-)OL BAT:':
-:?TS BAT;I;: DLL:Tr-- DLL.}E{ BAT-
_-t- _1;sE DATm,_:_,:-
-
22 ECUACIONES DIFERENCIALES CON MATLAB
r,},,t;
i.r
ir;i..*;B
Li:
Figura 1-9
El comando orden_dos I se utiliza para ejecutar la orden del Doscon pantalla de Matlab.
con los tres comandos anteriores, no slo pueden ejecutarsecomandos del DOS, sino tambin todo tipo de ficheros ejecutables o tareasbatch.
El comando dos orden-dos se utiliza tambin para ejecutar la ordendel DOS en modo automtico sobre la ventana de comandos de Matlab.
Para salir definitivamente de Matlab, basta con teclear quit en laventana de comandos y, a continuacin, pulsar Enter.
MATLAB Y LA PROGRAMACINCombinando adecuadamente todos los objetos definidos en Matlab,
adecuados a las reglas de trabajo definidas en el programa, se puedeconstruir un cdigo de programacin muy til en la investigacin matemtica'Los programas consisten habitualmente en una serie de instrucciones en lasque Se calculan valores, se les asigna un nombre y se reutilizan en clculosposteriores.
-
EI DOS
cutiarser tareas
a ordenab.
It en Ia
Madab,puede
mca. en laslculm
cnprulo 1. rNTRoDUcclru pncrca A MATLAB 23
Al igual que en lenguajes de programacin como C o Fortran, ense pueden escribir programas con bucles, control de flujo e
condicionales. En Matlab se pueden escribir programastales, es decir, definir una secuencia de pasos estndar a
Como en C o en Pascal, se puede realizar un clculo repetitivoDo, For o While. El lenguaje de Matlab tambin incluye
iones condicionales como lf Then Else. Matlab tambin soportafunciones lgicas, como And, Or, Not y Xor.
Matlab soporta la programacin procedimental (con procesosrecursivos, bucles...), la programacin funcional y la
in orientada al objeto. Veamos dos ejemplos sencillos deras. El primero genera lamafriz de Hilbert de orden n ,y el segundoIos nmeros de Fibonacci.
ndo la matriz de Hilbert de orden n'ttfr+j-f )';
= l:nftri ='la(ii) = eval(t);
cnd
los nmeros de Fibonacci$ll;i=l;(i)+f(-r)
-
Captulo 2
ECUACIONES DIFERENCIALES DER ORDEN. ECUACIONES EXACTAS,
EN VARIABLES SEPARADAS,HOMOGENEAS Y LINEALES
MUACIONES DIFERENCTALES DE PRIMER ORDENEtr nmero de comandos que implementa Matlab relativos a este tema
rrry elevado, pero s muy eficiente. De todas formas, es posible seguirFo{lzrma los mtodos algebricos de resolucin ya conocidos para
fro de ecuacin diferencial. Tambin se implementan mtodos deaproximados de ecuaciones y sistemas de ecuaciones diferenciales.
E comando bsico para resolucin de ecuaciones diferenciales esEste comando computa soluciones simblicas de ecuaciones
ordinarias y sistemas. Las ecuaciones son especificadas porsimblicas conteniendo la letra D para denotar diferenciacin, o
D2, D3,...,etc, para denotar diferenciacin de orden 2,3,...,etc. Aln de la letra D se sita la variable dependiente (que suele ser y),
letra no precedida por D es un candidato a variable. Si no se especifica la variable independiente, por defecto es
se especifica como variable dependiente, la variable independiente esr es la variable independiente por defecto, y en segundo lugar t.
-
26 ECUACIONES DIFERENCIALES CON MATLAB
Se pueden especificar condiciones iniciales en ecuacionesadicionales, mediante la forma y(a)=b o Dy(a)=b,...,etc. Si las condicionesiniciales no se especifican, las soluciones de las ecuaciones diferencialescontienen constantes de integracin C1 , C2, ..., etc. Los comandos msimportantes de Matlab que resuelven ecuaciones diferenciales son lossiguientes:
dsolve('ecuacin','v')Resuelve la ecuacin diferencial siendo v lavariable independiente (si no se especifica 'v', lavariable independiente es x). Solo devuelvesoluciones explcitas
dsolve('ecuacin','condicin_inicial',...,'v')Resuelve la ecuacin diferencial sujeta a !acondicin inicial especificada
dsolve('ecuacin','cond1','cond2',...,'condn','v')Resuelve Ia ecuacin diferencial sujeta a lascondiciones iniciales especificadas
dsolve('ecuacin', 'cond1, cond2,..., condn' , 'v')Resuelve la ecuacin diferencial sujeta a lascondiciones iniciales especificadas
dsolve('ec1' r'ec?' r..,r'ecn','condl','cond2'r...,'condn','v')Resuelve el sistema diferencial sujeto a lascondiciones iniciales especificadas (explcitas)
dsolve('ec1, ec2,..., ecn', 'cond1, cond2,..., condn' , 'v')Resuelve el sistema diferencial sujeto a lascondiciones iniciales especificadas
maple('dsolve(ecuacin, func(var))')Resuelve la ecuacin diferencial, considerando varcomo variable independiente y func como variabledependiente (devuelve soluciones implcitas)
maple('dsolve({ecuacin, cond1,cond2, ....condn}, func(var))')
-
-leS]esilesnslos
t, l?
io varriable
s)
CAP|TULO 2. ECUACIONES DIFERENCIALES DE PRIMER ORDEN 27
Resuelve la ecuacin diferencial sujeta a lascondiciones iniciales especificadas
maple('dsolve({ec1, ec2,..,ecn}, {func1(var), func2(var),...,funcn(var)})')Resuelve el sistema de ecuaciones diferencialesespecificado (devuelve soluciones implcitas)
maple('dsolve(ecuacin, func(var),'explicit')')Resuelve la ecuacin diferencial, ofreciendo lasolucin en forma explcita, si es posible
A continuacin se mostrarn algunos ejemplos.
Resolvemos en primer lugar ecuaciones diferenciales de primeroreden y primer grado, sin y con valores iniciales.
pretty(dsolve('Dy = a*y'))exp(a x) Cl
pretty(dsolve('Df = f + sin(t)'))- l/2 cos(t) - l/2 sin(t) + exp(t) Cl
Las dos ecuaciones anteriores tambin pueden resolverse de lasuiente forma:r pretty(maple('dsolve(d iff(y(x),x)= a*y,y(x))'))
y(x) : exp(a x) _Cl
pretty(maple('dsolve(diff(f(t),t)=f+si n(t),f(t))'))f(t): - 1/2 cos(t) - I/2 sin(t) + exp(t) _Cl
r pretty(dsolve('Dy = a*Y', 'y(0) = b'))exp(a x) b
r pretty(dsolve('Df = f + sin(t)','f(pi/2) = g'exp(t)
- l/2 cos(t) - 1/2 sin(f) + 1/2 **-----exp(l/2 pi)
Ahora resolvemos una ecuacin de segundo grado y primer orden.
-
28 ECUACIONES DIFERENfCIALES CON MATLAB
1 = 6lssre('(Dy)^2 + yn2 = 1', 'y(0) = 0', 's')
I sin(s)]l-sin(s)lque tambin puede resolverse de la siguiente forma:
pretty(maple('dsolve({diff(y(s),s)^2 + y(s)"2 = l, y(0) = 0}, y(s))'))y(s)
- sin(s), y(s) : - sin(s)
Ahora resolvemos una ecuacin de segundo orden y prmer grado'
pretty(dsolve('D2y ='an2ny', 'y(0) = 1, Dy(pi/a) = 0'))cos(a x)
A continuacin resolvemos sistemas sin y con valores iniciales.
pretty(dsolve('Dx = Y','DY ='x'))x(t) : Cl sin(t) + C2 cos(t), y(t) - Cl cos(t) - C2 sin(t)
pretty(dsolve('Df = 3*f+4*9', 'Dg = '4*f+3*g'))S6) : - C2 exp(3 x) sin(4 x) + Cl exp(3 x) cos(4 x),
f(x) : Cl exp(3 x) sin(4 x) + C2 exp(j x) cos(4 x) pretty(dsolve('Df = 3*f+4*9, Dg = {*f+$*g', 'f(0)=0, g(0)=1'))
S(x) : exp(i x) cos(4 x),f(x) - exp(3 x) sin(4 x)Este ltimo sistema puede resolverse tambin de la siguienE
forma:
pretty(maple('dsolve({diff(f(x),x)= 3*f(x)+4*g(x), diff(g(x),x)=4*f(x)+3*9fiLf(0)=0, g(Q)=l ), ff(x), g(x)))'))
{f(x) : exp(3 x) sin(4 x), g(x) - exp(3 x) cos(4 x)}
2.2 E,CUACIONES El\ VARIABLES SBPARADASUna ecuacin diferencial en variables separadas presenta la fonna
f(x)dx = g(y)dy. La resolucin de este tipo de ecuaciones es inmediataponendo it(x)Ox = J g1ydy +C.
-
ado.
uiente
99(x)"
a fonnanediata
CAPITULO 2. ECUACIONES DIFERENCIALES DE PRIMER ORDEN 29
Si Matlab no resuelve directamente la ecuacin diferencial conffimcin dsolve, entonces se sigue el mtodo algebrico usual, quep'esenta dificultades especiales para el programa, dada su versatilidadd clculo simblico.
lanoen
En primer lugar intentamos resolverla directamente. La ecuacinplede ponerse de la forma:
Cos Ix] y Ix]j
-^j2
1 + y[x]r dsolve('Dy=y*cos(x)/(l +y^2)')'".' Error using ::> tor"@{fuir solution could not befound.
Luego la ecuacin diferencial no es resoluble con dso/ye.
Aplicaremos el mtodo algebrico usual de resolucin de lasesuaciones diferenciales en variables separadas (separando variables).r pretty(solve('i nt(cos(x),x)= nt(( 1 +y ^2) ly,y)'l)
asin(Joqy +1/2v)La funcin solucin ser x=asin(log(y)+112 y2), o lo que es lo
msmo:
sir(x)=log(y)+112 y2 + CAhora hallamos el valor C para x=0 e y=1.
r C=simple('solve(subs(x=0,y=l,sin(x)=l6g ly)+l l2*y^2+G),C)')ra-
--t lLa funcin solucin ser sin(x)=log(y)+1t2y' - 112
-
30 ECUACIONES DIFERENCIALES CON MATLAB
De la misma forma se puede resolver cualquier otra ecuacindiferencial en variables separadas.
Esta ecuacin diferencial tambin es resoluble directamenEutilizando:
pretty(maple('dsolve(diff(y(x),x)=y(x)ncos(x)/(1 +y(x)"2),y(x))'))
loq (y (x) ) + 1/2 y (r)2 - sin (x) : -
C7
2.3 BCUACIONES DIFERENCIALES HOMOCXNTSConsideremos una ecuacin diferencial general de primer grado y
primer orden puesta en la forma M(x,y)dx=N(x,y)dy. Esta ecuacin se dieque es homognea de grado n, si lo son a lavez lasfunciones M y N, esdecir, si se cumple simultneamente:
M(tx,tY)=t n M(x,Y)N(tx,tY)=t n N(x,Y)
Para este tipo de ecuaciones, el cambio de la variable x por lavariable v tal que x=vy, transforma Ia ecuacin diferencial inicial (devariables x e y) en otra de variables separadas (de variables u e y). Seresuelve la ecuacin en variables separadas y posteriormente se deshaceel cambio.
Vamos a resolver la ecuacin por el mtodo algebrico ordinariopara ecuaciones diferenciales homogneas. En primer lugar comprobamossi la ecuacin es homognea
maple('m ;=(x,y)-)x^ 2-y n2'l;> maple('n =(x,y)->x*y') ; facto('m(t*x,t*y)')
t^2*(x-y)*(x+y)
factor('n(t*x,t*y)')
L
-
on
CAPTULO 2. ECUACIONES DIFERENCIALES DE PRIMER ORDEN 31
t"2*x*y
Luego la ecuacin es homognea de grado 2. Para resolverlaaplicamos el cambio de variable x=vy.
Antes de realizar las operaciones del cambio de variable, esconveniente cargar la librera difforms, mediante el comandomaple('with(difforms)'), que nos permitir trabajar con formasdiferenciales. Una vez cargada esta librera tambin es conveniente utilizarel comando maple('defform(v=0,x=0,y=Q)', que permite declarar todaslas variables que no van a ser constantes o parmetros en ladiferenciacin.
maple('with(difforms)');r maple('defform(v=0,x=0,y=Q)')'
Ahora realizamos ya el cambio de variable x=vy, y agrupamostrminos en d(v) y d(y).
:rrsrm
e fy('su bs(x=v*y,m(x,y)*d (x)+n(x,y)*d(y))')
v^2 *y^ 3 * d(v) +v^3 *y" 2 * d (y) -y"3 * d (v)
pretty(maple('collect(v^2*y^3*d(v)+v^3*y^2*d(y)-y^3*d(v),{d(v),d(V)})'))233 32(v y -y)d(v)+v y d(y)
Si dividimos la expresin anterior por v3 y3 , y agrupamos trminosen d(v) y d(y), tenemos ya una ecuacin en variables separadas. pretty(maple('collect(((v^2*y^3-y^3)*d(v)+v^3*y^2*d(y))/(v^3*y^3),{d(v),d(y)})'))
23
Ahora obtenemossimplificados totalmente.
(v y -y)d(v) d(y)
--- + ----33vvy
la expresin anterior con todos sus trminos
'rte
oyliceCS
rla(deSe
are
ffiariomos
-
32 ECUACIONES DIFERENCIALES CON MATLAB
pretty(maple('convert(collect(((v^2*y^3-y^3)*d(v)+v^3*y^2*d(y)/(v^3*y^3),{d(v),d(y)}), parfrac,y)'))
2
!: _ _ _ _1_'_ _1!Y'_ . 1!u_',_
,tYAhora resolvemos la ecuacin en variables separadas
pretty(simple('i nt((v^ 2-1llv ^3,v1+ nt(1 /y,y)'))1
loq(v) +----+loq(y)2u2
Ahora deshacemos el cambio de variable
pretty(simple('subs(v=ly,log (v)+1 l2lv "2+log(y))'))2
-Los (x) * tlz -!--*'
Ya estamos en condiciones de escribir la solucin general de laecuacin diferencial inicial.
2v
log(x) + 112 ----- = C2
X
Ahora se representan grficamente las soluciones de esta ecuacindlferencial. Para ello nos basamos en que el grfico de la familia desoluciones con parmetro c, es equivalente al grfico de las curvas denivel correspondiente a la ecuacin sin constante (figura 18-1) [x,y]=mes hgrid(0. I
=0.05:1 12,-1 : 0.05 : I ) ;y 2=y.^2 J (2*x. ^2)+l og () ; contour(2,65)
-
y^3),
de la
uaclonilia devas de
cnprulo 2. EcuActoNEs DtFERENctALEs DE pRtMER oRDEN 33
4rl
J5
30
lq
2U
15
1
5
Figura 2-1
2.4 ECTJ ACIONES DIFEREI\CIALES EXACTASLa ecuacin diferencial M(x,y)dx+N(x,y)dy=0 es exacta si se cumple
que N/x = 1Mly.Si una ecuacin diferencial es exacta, existe unafuncin F tal que su diferencial total dF coincide con la ecuacin, o sea:
dF=M(x,y)dx+N(x,y)dypor lo tanto F(x,y)=c ser la familia de soluciones de la ecuacindiferencial.
A continuacin se muestra un ejercicio que sigue el mtodoalgebrico normal de resolucin de este tipo de ecuaciones.
En primer lugar intentamos resolver la ecuacin con dso/ye maple('m ; =(x,y)->'l +y*exp(x*y)+y*cos(x*y)') ; maple('n : =(x,y)->1 +x*exp(x*y)+xncos(x*y)') ; dsolve('m(x,y)+n(x,y)*Dy=Q')??? Error using::> tornExplicit solution could not be found.
Se observa que la funcin dsolve nopropuesta. Vamos a intentarlo por el mtodoresolucin de ecuaciones diferenciales exactas.
resuelvealgebrico
Ia ecuacinclsico de
-
34 ECUACIONES DIFERENCIALES CON MATLAB
En primer lugar comprobamos si la ecuacin diferencial propuestaes realmente exacta
pretty(si mple(d iff('m(x,y)','y')))exp(y x) + x y exp(y x) + cos(y x) - x sin(y x) y
pretty(simple(diff('n(x,y)','x')))exp(y x) + x y exp(y x) + cos(y x) - x sin(y x) y
Por ser exacta, su solucin se puede hallar de la siguiente forma:
sol ucion I =simplify('i nt(m(x,y),x)+g(y)')solucionl :
-x + exp (y *x) 1 s in (y*x) + g(y)
Ahora calculamos la expresin de la funcin g(y), bajo la siguientecondicin : diff(int(m(x,y),x)+g(y),y)=n(x,y)
pretty(simpl ify('i nt(m(x,y),x)+g(y)'))- x + exp(y x) + sin(y x) + g(y)
pretty(simplify('diff(-x+exp(y*x)+sin(y*x)+g(y),y)'))d
x exp(y x) + x cos(y x) * -;rfrr,
simplify('solve(x*exp(y*x)+x*cos(y*x)+dff(g(y),y)=n(x,y),diff(g(y),y))')ans :
I
Luego 9'(y)=1, con lo que la solucin final ser, salvo constante: pretty(simplify('subs(g(y)=int(l,y),-x+exp(y*x)+sin(y.x)+g(y))'))
- x + exp(y x) + sin(y x) + yPara representar grficamente la familia de soluciones, graficamos
las curvas de nivel de la solucin sin constante (figura 18-2) [x,y]=meshgrid('2*pil3:.2:2* pilSl:'r z=-X+XP(y.*x)+s n(y.*x)+y; contour(2,100)
-
CAPTULO 2. ECUACIONES DIFERENCIALES DE PRIMER ORDEN 35
Ha
fite
Figura 2-2
De la misma forma se puede resolver cualquier ecuacin diferencialreducible a exacta mediante un factor integrante.
2.5 ECUACTONES DIFERENCIALES LINEALESUna ecuacin diferencial lineal de primer orden es deltipo:
dy/dx + P(x)y = Q(x) con P(x) y a(x) polinomios.Las ecuaciones diferenciales de este tipo se transforman en
exactas mediante el factor integrante:
J P(x)oxe
y su solucin general viene dada por la expresin:
J p(x)ox I e1xox(e )(le Q(x)dx)Matlab implementa estas soluciones de las ecuaciones
diferenciales lineales, y las ofrece siempre y cuando la integral del factorintegrante sea evaluable para el programa.
pretty(s i m ple(dsolve('x*Dy+t*y=x*s i n (x)')))sin (x) cos (x) C1
- 6 sin (x)
- cos(x) + 3 ------ + 6 -----* + --------x23
hr
I
18
.18
,14
lr1D
I
-
36 ECUACIONES DIFERENCIALES CON MATLAB
Otra forma ms eficiente de resolucin de la ecuacin diferencial,que incluye soluciones implcitas, es la siguiente:
pretty(simplify('dsolve(x*diff(y(x),x)+3*y1x)=x*si n(x),y(x))'))32'
x cos(x) - 3 x sin(x) + 6 sin(x) - 6 x cos(x) - _C7
Y l"/ -
---------;
-
al,
Captulo 3
ECUACIONES DIFERENCIALES DE ORDENST]PEROR TRANSFORMADADE LAPLACE Y
TIPOS ESPECIALES DE ECUACIOI{ES
3.1 ECUACIONES ORDINARIAS DE ORDEN SUPERIORLas ecuaciones diferenciales lineales ordinarias de orden n
tienen la siguiente forma general:
n (k) (n)I ak(x) y (x)=a0(x)y(x)+a1 (x)y'(x)+l(x)y"(x)+....+ an(x)y (x)=f(x)
k=0
Si la funcin f(x) es idnticamente nula la ecuacin se llamahomognea y si f(x) no es Ia funcin cero, la ecuacin se llama nohomognea. Si las funciones ai(x) (i=1...n) son constantes, la ecuacin sedenomina en coeficientes constantes.
Un concepto de gran inters aqu va a ser el de conjunto defunciones linealmente independientes. if1(x), f2(x),....,fn(x)) es unconjunto de funciones linealmente independientes si para algn x delintervalo comn de definicin, el determinante wronskiano de las funcioneses no nulo. El determinante wronskiano de las funciones, en cualquierpunto x de su campo de definicin comn, se define de la siguiente forma:
-
38 ECUACIONES DIFERENCIALES CON MATLAB
f1(x)f1'(x)f1"(x)
f2(x) f3(x).......,............,.fn(x)f2' (x) f3'(x).....................fn'(x)f2" (x) f3"(x)....................fn"(x)
= W(x)(n-1) (n-1) (n-1) (n-1)f1 (x) f2 (x) f3 (x).................fn (x)
Matlab dispone del comando maple('Wronskian') que permitecalcular la matriz wronskiana de un conjunto de funciones. Su sintaxis es:maple('Wronskian(V,variable)')
Calcula la matriz wronskiana correspondiente alvector de funciones V de variable independiente x
Un conjunto S = {f1(x),.....,fn(x)} linealmente independiente desoluciones no triviales de la ecuacin lineal homognea de orden n:
(n)a0(x)y(x)+1 (x)y'(x)+2(x)y"(x)+....+ an(x)y (x) = 0se llama conjunto fundamental de soluciones de la ecuacin.
Si las funciones ai(x) (i=1....n) son continuas en un intervalo abiertol, entonces la ecuacin homognea tiene un conjunto fundamental desoluciones = {fi(x)} en i.
Adems, la solucin general de la ecuacin homognea venddada por la funcin:
n
f(x) = ci fi(x) donde {ci} es un conjunto de constantes arbitrariasi=0
La ecuacin:2nni
a0+a1 m+a2m + ...... +anm =I ai m=0i=0
se denomina ecuacin caracterstica de la ecuacin diferencidhomognea en coeficientes constantes. Las soluciones de esta ecuacincaracterstica van a determinar las soluciones de la ecuacin diferencidlineal homognea general en coeficientes constantes.
t-
-
CAPTULO 3. ECUACIONES DIFERENCIALES DE ORDEN SUPERIOR 39
lite;t-I
i
talEx,deIi
Prtold"I
ldr
funciones=maple('vector([exp(x),xnexp(x), x^2*exp(x)])')funciones
I up (*), x*exp (x), x^2 * exp (x)J
>r W=maple('Wronskian(funciones,x)')W:
k*p6), x*exp(x), x"2*exp(x)l[exp(x), exp(x)+x*exp(x), 2*x*exp(x)+x"2*exp(x)Jkxp (x), 2 *exp (x) +x*exp(x), 2 *exp(x) + 4*x*exp (x) +x"2 *"*p (*)l pretty(determ(W))
32 exp(x)
Ya tenemos el valor del wronskiano, que evidentemente es siempredistinto de 0, luego el conjunto de funciones es linealmente independiente.
3.2 ECUACIONES LINEALES DE ORDEN SUPERIORHOMOGENEAS EN COEFTCIENTES CONSTAITES.
La ecuacin diferencial lineal homognea de orden n:(n)
aO(x)y(x)+a1 (x)y'(x)+2(x)y"(x)+....+ an(x)y (x) = 0se dice que es de coeficientes constantes cuando las funciones ai(x)(i=1,..,n) son todas constantes (no dependen da la variable x).
La ecuacin:2
a0+a1 m+a2m + ...... +anm
se denomina ecuacin caracterstica de la ecuacin diferencialhomognea en coeficientes constantes. Las soluciones de esta ecuacincaracterstica (m1 , fr2, ...mn) van a determinar las soluciones de laecuacin diferencial lineal homognea general en coeficientes constantes.
nt=I ai m=0
i=0hcialErcNit*rl
-
40 ECUACIONES DIFERENCIALES CON MATLAB
Si los mi (i=1..n) son todos distintos, una solucin general de laecuacin homognea en coeficientes constantes es:
m1 x m2x mnxy(x) =c1 e + c2e + ...... +cn ec1, c2,...., cfl son constantes arbitrarias que determinan la familia desoluciones de la ecuacin diferencial.
Si algn mi es una raz de multiplicidad k de la ecuacincaracterstica, determina los siguientes k trminos de la solucin:
mix mix 2 mix k mixcie +c(i+1)xe +c(i+2)x e +........ +c(i+k)x e
Si existe alguna raz compleja mj= a+bi de la ecuacincaracterstica, entonces tambin existe la raz compleja conjugada a-bi.
Estas dos races determinan simultneamente el siguiente par detrminos de la solucin generalde la ecuacin homognea:
cj e Cos(bx)+c(i+1)e Sen(bx)Matlab aplica directamente este mtodo de obtencin de las
soluciones de las ecuaciones lineales homogneas en coeficientesconstantes, al utilizar el comando dsolve o maple('dsolve').
pretty(dsolve('3*D2y+2*Dy-5*y=0'))Cl exp(x) + C2 exp( 5/j x)
pretty(dsolve('2*D2y+5*Dy+5*y=0','y(0)=0, Dy(Q)=l /!'t/2 1/2 1/2 1/2
2/15 3 5 exp( 5/4 x) sin(l/4 3 5 x)
pretty(simple(dsolve('9*D4y-6*D3y+46*D2y-6*Dy+37*y=g'
-
rmilia &
ecracilim
ecuacIlftgada a{"nte Par
cnprulo 3. EcuActoNES DtFERENctALES DE oRDEN supERtoR 41
I l) sin(2x) + C2 exp(l/i x) cos(2 x) + C3 sin(x) + C4 cos(x)Si nos fijamos en la solucin, es evidente que la ecuacin
tiene dos pares de soluciones complejas conjugadas.
^4-6kx^ 3+46*x^2 -6*x+37=0')
Tambin puede resolverse la ecuacin de la forma siguiente:
ple('dso Ive(9.d iff(y(x),x$4) -6*d iff(y(x),x$3)+46.d iff(y(x),x$2)-,x)+37*y(x)=0,y(x))'))
3 xt sin(2 x)+ _C2 exp(l/3 x) cos(2 x)+ _C3 sin(x)+ C4 cos(x)
ACIONES 1\O HOMOGNEAS CON COEFICM,NTESIONSTAI\TES, VARIACION DE PARAMETROS
Dada la ecuacin lineal no homognea en coeficientes constantes:(k) (n)y (x)=a0(x)y(x)+at (x)y'(x)+l(x)y"(x)+....+ an(x)y (x)=f(x)
1(x), y2(x),.....,yn(x)) un conjunto de soluciones linealmentede la correspondiente ecuacin homognea:
n
)+a1 (x)y'(x)+a2(x)y"(x)+....+ an(x)y (x)= 0Una solucin particular de la ecuacin no homognea viene
pot.n
I ui(x) yi(x) donde las funciones ui(x) se obtienen como sigue:1
f(x) Wi (y1 (x), y2(x),.....,yn(x))
W (y1 (x), y2(x),.....,yn(x))
-
42 ECUACIONES DIFERENCIALES CON MATLAB
Wi (y1(x), y2(x),....,yn(x)) es el determinante de la matriz que resulta alsustituir la i-sima columna del Wronskiano W(y1(x), y2(x),.....,yn(x)), por eltranspuesto del vector (0,0,.....,0, 1 ).
La solucin general de la ecuacin no homognea viene dadapor la solucin de la homognea ms la solucin particular de la nohomognea, y tendr la forma:
m1 x m2x mnxy(x)=c1 e +c2e+......+cne + Yp(x)supuestas las races mi de la ecuacin caracterstica de la homogneatodas distintas. Si no lo fueran, nos remitimos a la forma general de lasolucin de una ecuacin homognea, que ya hemos estudiado antes.
Vamos a seguir el camino algebrico del mtodo de variacin deparmetros para resolver la primera ecuacin. Consideramos la ecuacincaracterstica de la homognea para obtener un conjunto de solucionelinealmente independientes.
r solve('ma24*+1 3=0')ans :
[-2+i*t-2-3*vl
maple('f :=x->x*cos(3*x)^2') ; maple('y1 :=x->exp(-2*x)*cos(3*x)');> maple('y2 : =x-)xp(-2*x)*si n(3*x)') ; maple('W=-)Wrorskian([yl (x),y2(x)],x)') ; pretty(si mplify(maple('det(W(x))')))
j exp( 4 x)Ya tenemos el wronskiano no nulo, lo que indica que las
son linealmente independientes. Ahora calculamos las funcionesi=1,2
> maple('Wl :=x->array([[0,y2(x)],[1,diff((y2Xx),x)]l)'); pretty(simplify(maple('det(W1 (x))')))
\-
-
EFIF: ,IW,LiE-:- |E:I&Jrdecinnes
ta alor el
Jadalno
ineabla
nesi(x)
cnpruro 3. EcUACtoNES DtFERENCIALES DE oRDEN supERtoR 43
- exp( 2 x) sin(3 x) maple('W2:=x>array(tly1 (x),01,[diff((y1 )(x),x), 1 ]l)'); pretty(si m pl ify(maple('det(W2(x))')))
exp( 2 x) cos(3 x)Ahora calculamos la solucin particular de la ecuacin no
homognea.r maple('ul:=x->factor(simplify(int(f(x).det(Wf (x))/det(W(x)),x)))'); maple('ul(x)')
I 14652300*exp(2*x)*(129285*cos(9*x)*x-6084*cos(9*x)-28730*sin(9*x)*x-I 30 1 3*sin(9*x)+28 I 775*cos(3*x)*x-86700*cos(3*x)- I 87850*sin(3*x)*x-361 25*sin(3*x))
maple('u2:=x->factor(simplify(int(f(x).det(W2(x))/det(W(x)),x)))'); maple('u2(x)')
l.' I 4 6 5 2 3 00*exp(2 *x) * ( 5 6 3 5 5 O*cos (3 *x) *x+ I 08 3 7 5 *cos (3 *x) + B 4 5 3 2 5 *s in(3 *x) *x-)60100*sin(3*x)+287j0*cos(9*x)*x+13013*cos(9*x)+ 129285*sin(9*x)*x-6084*sin(9*x))
> maple('yp :=x-)factor(si mpl ify(y1 (x)*u 1 (x)+y2(x)*u2(x)))') ; maple('yp(x)')
- 2 3 / 1 1 0 5 *x*cos (3 *x)"2 + 1 3 4 3 6/ I 2 2 I 0 2 5 *cos (3 *x)"2 + 2 4/ I I 0 5 *cos (3 *x) *sin(3 *x) *x+ 3 8 5 2 / I 2 2 I 0 2 5 *cos (3 *x) *sin(3 *x) + 5 4/ I I 05 *x- 2 I I 68/ I 2 2 I 02 5
Luego ya podemos escribir la solucin general de la no homognea
m a p I e ('y : =x .> s m p I ify( c I *y 1 (xl+ c2* y 2{x) +yp (x} }' ) ;
:,: 0,",'"om b i ne(y(x),tris)')
c 1 *exp (- 2 *x) *cos (3 *x) + c2 *exp(2 *x) *sin(j *x)-2 3 /2 2 I 0*x*cos (6*x) +1/26*x+6718/1221025*cos(6*x)-2/169+12/1105*x*sin(6*x)+ 1926/1221025*sin(6*x)
Ahora representamos grficamente un conjunto de soluciones, paradeterminados valores de c1 y c2 (figura 18-3) fplot(simpl ify('su bs(c1 =-5,c2=-4,y(x))'), [-1, I ]) hold on fplot(si mpl ify('s ubs(c1 =-5,c2=4,y(x))'), [-1, I ]) fplot(simplify('subs(c1 =-5,c2=2,y(x))'),[-1, I ])
-
44 ECUACIONES DIFERENCIALES CON MATLAB
fplot(simplify('subs(cl =-5,c2='2,y(x))'),['1,1 ]) fplot(simplify('subs(c1 =-5,c2=-l,y(x))'),['1,1]) fplot(simplify('subs(cl =-5,c2=1,y(x))'),[-1,1 ]) fp lot(s i m pl ify('su bs (c1 =5,c2='l,y(x))'), [-1, 1 ]) fplot(simplify('subs(c1 =5,c2=-1,y(x))'),['1,1])> f pl ot(s i m pl ify('s u bs(c I =5, c2=-2,y(x))'), ['1, 1 ]) fp lot(si m pl ify('s u bs (c1 =5,c2=2,y(x))'), ['1, 1 ]) fp lot(s i m p ! ify('s u bs (c1=5,c2=4,y(x))'), ['1, 1 ]) f plot(s i m pl ify('s u bs (c1 =5,c2=4,y(x))'), [-1, 1 ] ) fplot(simplify('subs(c1 =0,c2='4,y(x))'),['1, I ]) fp lot(s i m pl ify('s u bs (c1 =0,c2=4,y(x))'), ['1, 1 ]) f p I ot(s i m p I ify('s u bs (c1 =0,c2=2, y(x) )' ), [-1, I ] ) fplot(simplify('su bs(c1 =0,c2='2,y(x))'), ['1, I ]) fplot(simpl ify('subs(c1 =0,c2=-1,y(x))'), ['1, 1 ]) fplot(si mplify('subs(c1 =0,c2=1,y(x))'), ['1, I ])
Figura 3-1
Para la segunda ecuacin diferencial aplicamos directamenteDSolve y tenemos la solucin.
pretty(si mple(dsolve('D2y-2*Dy+y=sxr(x).log(x)')))22
1/4exp(x) (2 log(x)x *3x +4C7+4C2x)
3.4 ECUACIONES NO HOMOCXNAS CON COEFICM,NTESVARIABLES. ECUACIOI{ES DB CAUCI{Y.EULER
-
CAPTULO 3. ECUACIONES DIFERENCIALES DE ORDEN SUPERIOR 45
La ecuacinn k(k)
lineal no homognea en coeficientes variables:
I ak x y(x)=a0y(x)+a1 x y'(x)+a2 x y"(x)+....+ an x y (x)=f(x)k=0se denomina ecuacin de Cauchy-Euler.
Matlab resuelve directamente este tipo de ecuaciones con elcomando dsolve o maple('dsolve').
pretty(simple(dsolve('x^3*D3y+1 6*x^2*D2y +f $*a*Dy+1 25*y=0'))C1 + C2 sin(3 log(x)) x + C3 cos(3 log(x)) x
,t
3.5 TRANSFORMADA DE LAPLACESea una funcin f(t) una funcin definida en el intervalo [0,co). La
transformada de Laplace de f(t) es la funcin de variable s:*oo _St
L{f}(s)=i e f(t)dt,0
Decimos que f(t) es la transformada inversa de Laplace de F(s) sise cumple:
-1L{fXs) = F(s) y escribimos L {F(s)i (t) = f(t)
Matlab aporta los comand os maple('laplace') y maple('invlaplace)que permiten calcular la transformada de Laplace de una expresinrespecto a una variable y la transformada inversa. su sintaxis es lasiguiente:maple('laplace(expresin, t, s)')
Calcula la transformada de Laplace de la expresincon respecto a t. La transformada es de variable s
maple('invlaplace(expresin,s,t)')
n (n)
,mente
iTES
-
46 ECUACIONES DIFERENCIALES CON MATLAB
Calcula la transformada inversa de Laplce de laexpresin con respecto a s. La transformadainversa es de variable t
Veamos algunos ejemplos. pretty(maple('laplace(t^(3/2)-exp(t)+sinh(a*t), t, s)')) ;
1/2piTa3/4 ----- + -------5/2 s-7 2 2
pretty(maple('invlaplace(s^2/(s^2+an2n(3/2), s, t)'))- t BesselJ(l, a t) a + BesselJ(0, a t)
La transformada de Laplace y su inversa se utilizan para resolverdeterminadas ecuaciones diferenciales. El mtodo a seguir es calcular lastransformada de Laplace de cada trmino de la ecuacin para obtener unaecuacn diferencial en transformadas de Laplace y resolverla en funcnde las transformadas de Laplace. Finalmente se halla la solucin de Iaecuacin inicial calculando la transformada inversa de Laplace de lasolucin de la ecuacin en transformadas de Laplace.
No obstante, Matlab aporta la opcin 'laplace' en el comandomaple('dsolve'), que tuerza al programa a resolver la ecuacin diferencialutilizando transformadas de Laplace. La sintaxis es la siguiente:
maple('dsolve(ecuacin, func(var),'laplace')
En primer lugar calculamos las funciones transformadas de Laplacede los dos miembros de la ecuacin diferencial, y aplicamos lascondiciones iniciales.
> maple('L:=s->laplace(d iff(y(x),x$2)+2*d iff(y(x),x)+4*y(x),x,s)') ; pretty(simplify('subs(y(O)=',(D(y))(0)=r,L(s))'))
2Japlace(y(x), x, s) s - s - 3 + 2 Taplace(y(x), x, s) s
+ 4 laplace(y(x), x, s)
-
CAPTULO 3, ECUACIONES DIFERENCIALES DE ORDEN SUPERIOR 47
maple('Ll : =s->laplace(x-exp(-x),x,s)') ; pretty(simpl ify('Ll (s)'))
s-7+s
"' ," * ,,
A continuacin integramos la ecuacin diferencial en transformadasde Laplace
pretty(simplify(maple('solve(L(s)=1 1", laplace(y(x),x,s))')))33
y(0)+3s y(A)+D(y) (0) s +D(y)(A)s
"' ,"*r, ("2 *2s+4)
Ahora sustitumos en la solucin las condciones iniciales dadas.
maple('TL: =s-)solve(L(s)=11 1s),laplace(y(x),x,s))') ; pretty(si mpl ify('su bs(y(0)={,(D(y))(0)=1,TL(s))'))
32+4s +2s +s+7
u' ,"*r, ("2 *2s+4)Ya hemos obtenido la transformada de Laplace de la solucin de la
ecuacin diferencial inicial. Para calcular la solucin de la ecuacin inicialcalcularemos la transforma inversa de Laplace de la funcin obtenida en elpso anterior.n maple('TL0 :=s->simpl ify('subs(y(0)=1,(D(y))(0)=l,TL(s))')') ;r solucion=simple(maple('i nvlaplace(TL0(s),s,x)')) ;n petty(solucion)
2+ 2 y(A) s + s + 1
solverhr laser unauncindelade la
manxencid
r[3Plmsnos t
It
1/2 1/2sin (3 x) 3 1/235 cos (3 x)7
7/4 x - 7/8 - -------- + 5/B3 exp (x) exp (x) 24 exp (x)
Ya tenemos la solucin de la ecuacin diferencial inicial.
Tambin se poda haber resuelto directamente mediante:
pretty(s i m ple(m aple('dsolve({d iff(y(x),x$2)+2.d iff(y(x),x)+4*y()=),y(0)=1, D(y)(0)=1 ),y(x), laplace)')))
-
48 ECUACIONES DIFERENCIALES CON MATLAB
1/2 1/21 sin(3 x) 3
y(x) :7/4 x - 1/8 - -------- + 5/8 ----- +3 exp (x) exp (x)
1/2_:: _ "_"_:_ !:_ _ _ _ _:)_ _24 exp (x)
3.6 POLINONIIOS ORTOGOI\ALESDos funciones distintas f(x) y g(x) se dce que son ortogonales en un
intervalo [a,b] si su producto interno es 0, es decir silnJ f1x)g(x):0'
,n ejemplo de familia ortogonal pueden ser las funcionesfn(x)=sen(nx) y g"(x)=cos(nx), n=1,2,3,... en el intervalo [-rc,r].
Matlab aporta una amplia lista de polinomios ortogonales, que van aser muy tiles a la hora de resolver ciertas ecuaciones diferenciales nolineales de orden superior. Las funciones simblicas que permiten el trabajocon estos polinomios son las siguientes:
T(n,x)U(n,x)P(n,x)H(n,x)L(n,x)L(n,a,x)P(n,a,b,x)G(n,m,x)
Polinomios de Chebychev de primera especie.Polinomios de Ghebychev de segunda especie.Polinomios de LegendrePolinomios de Hermite.Polinomios de Laguerre.Polinomios generalizados de Laguerre.Polinomios de Jacobi.Polinomios de Gegenbauer.
Veamos ahora su relacin con las ecuaciones diferenciales-Precisamente esta relacin es la que permite hallar soluciones dedeterminadas ecuaciones no lineales de orden superior. Para usar estrefunciones es necesario ejecutar antes maple('with orthopoly').
3.6.1 Polinomios de Chebychev de primera y segunda especicLos polinomios de Chebychev de primera especie son las soluciones
de la ecuacin diferencial:
lL
-
CAPIULO 3. ECUACIONES DIFERENCIALES DE ORDEN SUPERIOR 49
T.(x)T,(x)-'
(1- ^') y'-x'y-t r'y : 0 n: 0,1,2,...
Su ortogonalidad viene dada por:
dx:0 m+n
Los polinomios de Chebychev de segunda especie cumplen larelacin de ortogonalidad :
1
?J unlxum(x)(1-x2)1/2 dx=g m+n-1
3.6.2 Polinomios de LegendreSon soluciones de la ecuacin diferencial de Legendre:
(1 - ^') y'-2x'yt n(n+ 1) y : 0 1
Su ortogonalidad viene dada por la relacin I pn(r)pr(x)dx=0 m*n3.6.3 Polinomios asociados de Legendre
Las soluciones de la ecuacin diferencial:
(l-*') y'-2x'y+{n(n+f t 9tv:Ol-x-son las llamadas funciones asociadas de Legendre
3.6.4 Polinomios de HermiteLas soluciones de la ecuacin diferencial de Hermite:
y'-2x'y*2ny: OError! Argumento de modilicador no especificado.se conocen como polinomios de Hermite.
., _*
Su ortogonalidad viene dada por, I Hn(x)Hm(x)e dx=0 m+n-1 Error! Argumento de modilicador no especificado.
a
D
o
les.de
stas
BCre
ones
-
50 ECUACIONES DIFERENCIALES CON MATLAB
3.6.5 Polinomios generalizados de LaguerreLas soluciones de la ecuacin diferencial general de Laguerre:
xy"+(a+1-x)Y'+oY=0se conocen como polinomios generalizados de Laguerre.
Su ortogonalidad viene dada
3.6.6 Polinomios de LaguerreLas soluciones de la ecuacin diferencial de Laguerre:
x'y+(1-x)y'iny:0Se conocen como polinomios de Laguerre. Se trata del caso particular a=0de los polinomios generalizados de Laguerre
3.6.7 Polinomios de Jacobi1
Su ortogonalidad viene dada por: I pn(r)prn(x)(1-x)" (1+x)b dx=O m+n-1
3.6.8 Polinomios de Gegenbauer
Su estructura es la siguiente:
(-2 )" n!r(2 a)r(a+ r+ ]Xr - *')^)
1
Ipor: J Ln(x)Lm(x) x" e-'dx=o m+n-1
t9l" (1 - 2)"*"-idx
I
I
I
I
t_
1f(a+ ;)r(n+2a)G(n,a,x):
pretty(simple(maple('T(7,x)')))7
64x -772x3
+56x -7x
-
CAPiTULO 3. ECUACIONES DIFERENCIALES DE ORDEN SUPERIOR 51
pretty(smple(maple('P(6,x)')))23t 6 315---x-*--xt6 16
pretty(simple(maple('H(5,x)')))53
32x -16Ax +720x pretty(si m ple(maple('L(5,x)')))
2341-5x+5x -5/3x +5/24x -7/720x
3.7 FIINCIONIES DE AIRY Y BESSELReciben el nombre de funciones de Airy las soluciones
linealmente independientes de la ecuacin diferencial lineal de segundoorden:
Y" - xY = 0 (ecuacin deAirY)Reciben el nombre de funciones de Bessel las soluciones
linealmente independientes de la ecuacin diferencial:
y" + y'lx * (k' - n2 lx2 y = g (ecuacin de Bessel)Reciben el nombre de funciones de Bessel modificadas las
soluciones linealmente independientes de la ecuacin diferencial:y" + y'lx- (k' * n2 /x) y = 0 (ecuacin de Bessel modificada)
Matlab implementa al respecto las siguientes funciones simblicas:
Ai(z) y Bi(z) Dan soluciones independientes de Ia ecuacindiferencial de Airy.
BesselJ(n,z) y BesselY(n,z)Dan soluciones independientes de !a ecuacindiferencial de Bessel.
Bessell(n,z) y BesselK(n,z)Dan soluciones independientes de la ecuacindiferencial de Bessel modificada.
105 2+---x -5/16
16
{
-
52 ECUACIONES DIFERENGIALES CON MATLAB
Se trata de la ecuacin diferencial de Bessel para n=112. Obtendremosdos soluciones linealmente independientes de la siguiente forma:
pretty(simple(maple('BesselJ (1 /2,x)')))
2 sin (x)1/2 1/2pix
pretty(simple(maple('BesselY(1 /2,x)')))1/2
2 cos (x)1/2 1/2
-
MGS
Captulo 4
ECUACIONES DIFERENCIALES PORMETODOSAPROKMADOS
4.1 BCUACIONES DE ORDEN Y GRADO SUPERIOR A UNO,LINEALES YNO LINEALES, NMTONOS APRO)ilMADOS
Cuando los mtodos conocidos de resolucin de de ecuacionesdiferenciales y sistemas no ofrecen solucin, se suele recurrir a mtodosde aproximacin. Dentro de los mtodos aproximados los hay simblicos ynumricos. Los simblicos permiten obtener soluciones algebricasaproximadas, y el ms representativo es el de la series de Taylor. Losnumricos permiten obtener conjuntos de puntos de las soluciones, queposteriormente pueden ajustarse por cualquier mtodo algebrico(interpolacin, regresin,....) a la curva que mejor les aproxime. Dichacurva ser una solucin aproximada de la ecuacin diferencial. Entre delos mtodos numricos ms comunes se halla el mtodo de Runge Kuta.
El uso ms corriente de los mtodos aproximativos es la resolucinde ecuaciones y sistemas de ecuaciones diferenciales no lineales de ordeny grado superiores a uno, siempre que la solucin exacta no sea posible deobtener mediante otros mtodos.
4.2 EL VTTOOO DE LAS SERIES DB TAYLOREste mtodo ofrece soluciones polinmicas aproximadas de
ecuaciones diferenciales generales, y se basa en el desarrolo de funciones
-
54 ECUACIONES DIFERENCIALES CON MATLAB
en series de potencias de Taylor. Matlab ofrece la opcin 'series' delcomando maple('dsdve'), que permite obtener este tipo de soluciones. Susintaxis es la siguiente:
maple('dsolve(ecuacin, func(var),'series')Adems existe el comando maple('powsolve') que resuelve
ecuaciones diferenciales lineales por series de potencias, y cuya sintaxises la siguiente:
maple('powseries[powsolve](ecuacin, condl,....,condn)')Con el comando maple('conve(polynom)') se puede convertir una
solucin complicada a polinomio ordenado en potencias de la variable.
pretty(s i mp le(m apl e('dsolve(4*x^2*d iff(y(x),x$2)+4*x*d iff(y(x),x)+(x^2-1 )*Y(x)=0,Y(x),series)')))
t/2 2y(x) : Cl x (1 - 1/24 x
6
1/2 1/2
pretty(simplify(maple('convert(_C1*x^(112).1-1124"x^2+111920*x^4+o(x^6))+-G2*(1lx^(112)*!og(x)*(o(x^6))+'llr(112).(1''ll8*x^2+11384*x^4+O(x^6))),polynom)')))
46+ 7/1920 x + O(x ))
31/7920 (7920
_C1 x - 80 _C1 x + _C16
+ 192A _C2 1og(x) o(x ) + 1920
6 1/2+ 7920
_C2 o(x )) / x
5x + 1920
_C1
_c2 - 240 _c2
5x O(x )2
x +5 C2x
pretty(maple('dsolve({y(x).d iff(y(x),x$2)+diff(y(x),x)^2+ I =0,Y(0)=1,D(y)(0)=1 ),y(x),series)'))
-
CAPTULO 4. ECUACIONES DIFERENCIALES POR MTODOS APROXIMADOS 55
*
u
eb
2y(x) :7+x-x +x 4
-3/2x +5/2x6
+ A(x )
tl pretty(smple(maple('dsolve({diff(x(t),t$2)+diff(y(t),t)a*x+12=0,diff(y(t),t$2)-l0.diff(x(t),t)-y(t)+/=0,x(0)=1 ,Y(0)=1 ,D(x)(0)=l ,D(y)(0)=1),{x(t),y(t)},series)')))
2 i 4 387 5 6{y(t) :7 + t + 2 t + (- 43/2 + 20,/3 x) t - 3/2 t + (--- - 3 x) t + A(t ),456
x(t) :1 + t + (- 13/2 + 2 x) t - 2/3 t +(43/8 - 5/3 x) t + 3/1A t + O(t)] pretty(simple(maple('dsolve({diff(x(t),t$2)+2*diff(x(t),t)+2*diff(y(t),t)+3*diff(z(t),t)+x(t)=1,diff(y(t),t)+diff(z(t),t)-x(t)=0,diff(x(t),t)+z(t)=g),{x(t),y(t),2(t)}, series)')))
{x(t) = x(0) + D(x) (0) t + (- D(x) (a) - 1/2 x(A) + 1/2) t3
+ (1/2 D(x) (0) + 7/3 x(0) - 1/3) t + (- 1/6 D(x) (0) - 1/8 x(A) + 1/8) t56
+ (1/24 D(x) (0) + 7/30 x(0) -
1/30) t + o(t ),2
z(t): z(0) +x(0) t +7/2 D(x)(0) t + (- 7/3D(x)(0) - 1/6x(0) + 1/6) t4
+ (7/8 D(x) (0) + 1/12 x(A) - 1/12) t56
+ (- 1/30 D(x) (0) - 1/40 x(0) + 1/40) t + o(t ),2
y(t):y(0) +x(0) t+ 1/2 D(x)(0) t + (- 1/3 D(x)(0) - 7/6 x(0) + 1/6) t
tr
I
)._:
4+,4+
4+ (1/8 D(x) (0) + 1/12 x(0)
- 7/72) t
+ (- 1/3A D(x) (0) - 1/40 x(0) + 7/40) t 6+ a(t )
-
56 ECUACIONES DIFERENCIALES CON MATLAB
4.3 EL vrroo DE RUNGE-KUTTAEl mtodo de Runge-Kutta permite obtener un conjunto de puntos
de la solucin aproximada de una ecuacin diferencial. Maple aporta laopcin numeric del comando maple('solve') que posibilita el clculo desoluciones numricas aproximadas de ecuaciones diferenciales. susintaxis es:
maple('dsolve(ecuacin, func(var),'numeric')
maple('f := dsolve({3*diff(y(x),x$2)^2 = diff(y(x),x$3)*diff(y(x),x),W''',o(yX0)=r,(o@@2XvX0)=1 ), v(x), numeric)')
f : : proc (x)' dsolve/numeric/result 2' (x, 3 B 7 9004, I j | ) endAhora calculamos varios puntos de la funcin solucin, para hacer
una representacin grfica de la misma (figura 18-4). [maple('f(-O.3)'),maple('f(-0.2)'),maple('f(-O.1)'),maple('f(0)'),maple('f(0. I )'), maple('f(0.2)'),maple('f(0.3)')lan:{x: -.j,y(x) : .23s08893s9260396}{y(x) - .3167840433732281, x: -.2} {y(x) -.4045548849869109, x: - l){y(*) : .5000000000000000, x - 0} {x - .1, y(*) :.605s728090006967j{y(x) : .7254033307s97474, x: .z} {y(x) : .A675444679682489, x -.3000400000000000j
> y=1.2350889359260396,.31 67 8404337 32281,.4045548849869i 09,.S,.6055728090006967,.7254033307 597 47 4,.867 544467 9682a5il; plot((-0.3:.1 :0.3),y)
-
CAPTULO 4. ECUACIONES DIFERENCIALES POR MTODOS APROXIMADOS 57
tcrladeSu
Ilx),
D)),
Figura 4-1
Se observa que la figura es de tipo parablico, con lo que podemoaajustar la nube de puntos a una parbola. Dicha parbola ser la solucinsimblica aproximada de la ecuacin diferencial.
pretty(vpa(poly2sym(polyfit((-O.3:. 1 : 0.3),y,2))))2
.5747427827483573 x + 1.041293962469090 x + .4991457846921903
Ya tenemos la funcin polinmica y(x) solucin de la ecuacin
D,-5,
u.9
0,a
0.7
0.6
0,5
0.4
D:
O,?L{: .1 nl t:1 03
-
Captulo 5
SISTEIUAS DE ECUACIONES DIFERENCIALESY ECUACION{ES EI\ DIFERENCIAS FIMTAS
5.1 SISTEMAS DE BCUACIONBS LINEALES HOMOCWNASCOI{ COEFICM,NTES CONSTANTES
Matlab resuelve directamente este tipo de sistemas sin ms queutilizar el comando dsolve o maple('dsolve') con la sintaxis ya conocida
Un sistema de ecuaciones diferenciales escrito como X'(t) = A X(t),presenta una solucin general de la forma:
x(t)= ciVie
siendo i7,k) los autovalores correspondientes a los autovectores {Vk} dematriz A del sistema (k=1 ,2,...n) y todos los i,k distintos.
Si existiese algun )"k =ak+bki, nmero complejo, genera lasiguiente componente de la solucin general:
)"i tnTi=1
ck1
wk1
)"k t .k tWk1 e +Ck2Wk2e donde:= % (vk + Vk)cos(bkt) + i2 (Vk - vk)sen(bk t)
-
60 ECUACIONES DIFERENCIALES CON MATLAB
Wk2 = itz (ik- Vk)Cos(bkt) - 1t2 (Vk + Vk)Sen(bk t)Vk es el autovector correspondiente al utovalor ik y Vk es su conjugado'
si existe un fui de multiplicidad m>1, genera una parte de la solucingeneral, de la forma:
),it ).it 2 Xil kci e Vi +c(i+1)te V(i+1)+c(i+2)t e V(i+Z+.'..+c(i+k)t e
pretty(dsolve('Dx='5*x+3*y,Dy=-2*x'1 0*y','t'))y(t) : Ct exP( 7 0 + C2 exP( 8 t),
*(t) : - 3/2 Cl exP( 7 r) - C2 exP( 8 t)
Tambin se puede usar la siguiente sintaxis:
pretty(maple('dsolve({diff(x(t),t)=-5*x(t)+3*y(t),diff(y(t),t)=-2*x(t}-10.y(t)), {x(t),Y(t)})'))
{y(t) : -Cl exP( 7 t) + -C2 exP( 8 t)'
x(t) : - i/2 -Cl exp( 7 t) - -C2 exp( I t))
5.2 SISTEMAS DE ECUACIONES LINIEALES 1\O HOMO'CNSAS CON COEF'ICM,NTES CONSTANTES
Ahora vamos a considerar sistemas de ecuaciones diferenciales nohomogneas con coeficientes constantes de la forma X' = A X + F(t)'
sea X = o(t)c la solucin general del sistema homogneo X',=AX-Una solucin particular del sistema no homogneo es:
-1Xp =o(t)J o(t) F(t) dt
La solucin general del sistema no homogneo ser X=O(t)c+Xp,con lo que tendremos la solucin general:
}.i tVK
-
CAPTULO 5. SISTEMAS DE ECUACIONES DIFERENCIALES 61
-1X = o(t)c + o(t)j o(t) F(0 dt
Este mtodo es la generalizacin a sistemas de ecuaciones delmtodo de variacin de parmetros para las ecuaciones simples.
Matlab ofrece directamente la solucin de estos sistemas con elcomando dsolve o maple('dsolve'), siempre y cuando pueda obtener laforma algebrica de las soluciones de las integrales que aparecen en lasolucin.
pretty(simple(dsolve('Dx-Dy=sp(-t), Dy+*+l*y=5i (t+[)','x(0)=xs,r1g=yo','t')))
y(t) : 7/50 sin(3) cos(t) + 7/50 cos(3) sin(t) + 5/6 exp( t)+ l/50 sin(3) sin(t) - 1/50 cos(3) cos(t) - 5/7 + 5/7 yo - 5/7 xo
+ (- 7/50 sin(3) + 2/7 yo + 1/50 cos(3) - 5/42 + 5/7 xo) exp(7f)
5.3 ECUACIONI-ES EN DIFERENCIAS FIMTASMatlab habilita la funcin maple('rsolve'), que permite resolver
ecuaciones en diferencias finitas y recurrentes en general. Su sintaxis es:
maple('rsolve({ecuacin, condiciones_iniciales}, funcin)')
pretty(maple('rsolve({y(m+l )=m*y(m)+(m+1 )!,y(1 )=2},y)'))1/2GAMaA(m) (n +m+2)
pretty(maple('rsolve({y(2*n)={*y(n)+5,y(1 )=a},y)'))
o
(
p,
-
62 ECUACIONES DIFERENCIALES CON MATLAB
loq (n)______ + 7
2 2 log(2)a n + n (- 20/3 (1/4) + 5/3)
pretty(maple('rsolve({y(n+2)-3*y(n+1)+!*y(n)=4^n,y(0)=1 ,y({ )=1},y)'))4/3-1/22 +1/64
pretty(maple('rsolve({x(n)-n*x(n)*x(n+l )=x(n+1 ),x(0)=l },x)'))2
n+2
maple('rsolve({x(n+2)-2*x(n+l )+5*()=cos(3*n),x(0)=1,(l )=1 },x)')ans :
1 /2*(1 -2*/'tt+ 1 /2+(l +2*i)/Yt+(-39+cos(n-2)n3+22*cos(n-5)^3- I 9*cos(n-4)"3 +32*cos(n-3)^3-25*cos(n-2)^3 *cos(l)-25*cos(n-2)^3*cos(j)+100*cos(n-2)"3*cos(1)n2+100*co,t(n-2)^3*cos(3)^2 +10*cos(n-3)/'3+cos(1)^2+10*cos(n-3)^3*cos(3)n2-72*cos(n-3)n3 *cos(3)-7 2*cos (n-3)^3 *cos (l )-49*cos (n-4)^3 xcos( I ) + I 20*cos (n-4)^3 *cos (3)^2 + I 20*cos (n-1)"3*cos( I )^2-49*cos(n-4)^3*cos(3) -60*cos(n-5)^3acos(3)-60+cos(n-5)^3*cos(l)+l69acos(n-2)^3+cos(l)*cos(3)-120+cos(n-2)^3 *cos(3)*cos(l)^2-120*cos(n-2)n3*cos(3)^2*cos(1)-290*cos(n-3)^3*cos(3)"2*cos(l) +200*cos(n-3)^'3*cos(3)"2*cos(l)"2+208*cos(n-3)^3*cos(1)acos(3)-290*cos(n-3)^3*cos(3)* cos(l)"2-100*cos(n-4)n3+cos(3)*cos(1)^2+265+cos(n-4)"3*cos(l)*cos(3)-100*cos(n-4)"3 *cos(3)n2*cos(1)+50*cos(n-5)^3*cos(l)*cos(3)+100*cos(n-2)^3+cos(3)^2*cos(l)^2)/(2 5*cos(3)"2 + 36*cos (l )+cos(3)-3 0*cos (3)-3 0*cos(3)"24cos( I ) + 2 5 *cos ( l)"2-30*cos( I )-30*cos(3)*cos(1)"2+25+25*cos(3)^2*cos(l)^2)+l/4+(-30*i*(l+2*r^n-35+(l-2*i)^n*cos(3)^2 +27a(l-2*i)^n*cos(1)-25*(1-2*i)^n*cos(l)^2-3 5 *(l +2*i)^nacos(3)^2-37+i*(l -2*i)^n*cos(3)-25*(l +2*i)^n*cos(l)^'2+ 2 I *(l-2*i)^n*cos(3)^2*cos(1 )+23*(1 -2*i)^n*cos(3)*cos(112-20*(1 -2+i)^nacos(3)^Z*cos(1)^2+25*i+( I -2*i)^n*cos(3)^2+ I 5 *i+(l -2*i)^n*cos(l)^2-20*(l +2*r^n*cos(3)^2*cos(l )"2- I 5**(l +2*i)^n*cos(1)"2+374i*(l +2+i)t'n*cos(3)+39*i*(l + 2*i)^n*cos(l)-t9*+( I -2*i)nn*cos(l )+ 2 I * (1 + 2*i)^n*cos(3)^ 2*cos( I )+4 + 1 2 *i)^n*cos (3)+ 2 7 + (l +2 *i)^n *cos( I ) +48*i*( l -2+i))t*cos(l )*cos(3)+ I 0*i*(l -2*i)^n*cos(3)^2*cos(l )^2-25*i*(l +2*i)^n*cos(3)"2+ 19*i*(l +2+i)^n*cos(3)*cos(l )^2-48*i*(l+2*i)nnacos(1)*co.t(3) +33*i*(l+2*i)"n*cos(3)^2+cos(l)-24*(1+2*i)^n*cos(l)*cos(3)+23+(l+2*i)^n*cos(3)*cos(l)^2-40*(1 -2*i)^rt-40*(1 +2*i)^n+4 I *(1 -2*i)^nacos(3)-l 0*i*(1 +2*i)^n*cos(3)^2*cos(1)"2-3 3*i+( I -2*i)"n*cos(3)^2*cos(t )+30*i*(1 -2*i)^n-24*(l-2*r^n+cos(l)*cos(3)-19*i*(1-2*)"n*cos(3) *cos(l)"2)/(5*cos(l)"2-6*cos(l)+5)/(5-6+cos(3)+5*cos(3)^2)-3/2+C2*cos(n-2)*cos(l )-2*cos(n-2)'r I O*cct.s(n-2)*cos(1 )^2-5*cos(n-3)*cos(l )+cos(n-3))/(5*cos(l )^2-6*cos(1 )+ 5)-3/8*(*(1 -2*i)^n+cos(l )"2-2*(l -2*i)^n*cos(l )^2-4*i*(l -2*i)^n*cos(l)+ 3*i*(l -2*i)^n-4*(1 -2*i)^n+2*(l -2*i)^n*cos(l )-2*(1 +2*i)^n*cos(1 )^2-*(l +2*i)^n*cos(1 )^2+4*i*(l +2*i)^n+cos(l )-4*(l +2*i)^n-3 *i* ( I + 2+ )/'n+ 2*( I + 2*i)^n+cos(1 ))/(5 *cos (l )^ 2-6*co,s( I )+ 5)
Ahora intentamos simplificar el resultado no trivial.
pretty(simple(maple('evalf(rsolve({x(n +2)-2*x(n+1)+5*1=cos(3*n),x(0)=1,11 =1 ),x))')))
.4373424522418379 (1. - 2. i) + .4373424522418384 (1. + 2. i)
-
-CAPTULO 5. SISTEMAS DE ECUACIONES DIFERENCIALES 63
9418421 760747166 cos (n)
4405817940094277 cos(n) sin(n) - .7714545418874307 sin(n)
- .2069717398607332 cos(n)2
sin (n)
3
.0626567574570487 i (1. +
. 8765270805583898 cos (n)
n
i) t .0626567574514487 i (1. - 2. i)180378847j807544 sin(n)
2.
-
Captulo 6
CALCULO I{LMERICO EN MATLAB.APLICACIONES A LAS ECUACTONES
DIFERENCIALES
6.1 MATLAB Y LA PROGRAMACIONMATLAB puede utilizarse como un lenguaje de programacin de alto
nivel que incluye estructuras de datos, funciones, instrucciones de controlde flujo, manejo de entradas/salidas e incluso programacin orientada aobjetos.
Los programas de MATLAB suelen escribirse en ficherosdenominados M-ficheros. Un M-fichero no es ms que cdigo MATLAB(scripts) que simplemente ejecuta una serie de comandos o funciones queaceptan argumentos y producen una salida. Los M-ficheros se creanutilizando el editor de texto, tal y como ya se vio en el Captulo 2.
6.2 BDITOR DE TEXTOPara crear un nuevo M-fichero se utiliza el Editor/Debugger, que se
activa haciendo clic en el botn D de la barra de herramientas de MATLABo mediante File+ New-+ M-file en el escritorio de MATLAB (Figura 6-1) oen la ventana de comandos (Figura 6-2). El Editor/Debugger se abre conun fichero en blanco en el cual crearemos el M-fichero, es decir, un ficherocon cdigo de programacin MATLAB (Figura 6-3). Cuando se trate de
-
66 ECUACIONES DIFERENCIALES CON MATLAB
abrir un M-fichero ya existente se utiliza File-+ Open en el escritorio deMATLAB (Figura 6-1) o, alternativamente, se puede utilizar el comandoOpen en la ventana de comandos (Figura 6-2). Tambin se puede abrir elEditor/Debugger haciendo clic con el botn derecho del ratn en el interiorde la ventana Current Directory y eligiendo New -+ M-file en el menemergente resultante (Figura 6-4). La opcin Open de este men abre unM-fichero existente. Se pueden abrir varios M-ficheros simultneamente,en cuyo caso aparecern en ventanas diferentes.
fr-#rrummf * couuicarions ror-$cnnt.ar stscet rdiWii;$nuo aE$ieil.iutr 'j lenffie+'],out*.e" ToIbo* : otld'
Figura 6-l
I Dr\...12\worklmatri1,trc2 Dr\,..ltinnnEelBtrubond.mI D:\,..\Finan.elsudsr,m4 Dit.,,llinihEeldmrtiz,m
Figura 6-2
Figura 6-3
w
r*#W;*itiJiiit : tu
Figura 6-4
-
CAPULO 6 CALCULO NUMERICO EN MATLAB. APLICACIONES A LAS ECUACIONES... 67
La Figura 6-5 muestra las funciones de los iconos delEditor/Debugger.
,{}ru ruete trf-ehe*o *ubAhrir E-$iah*ro v. sxiitsat*
*rer&-i*hsrcs,,rqqfi+zg:+d-tei*s ee rn S;[-s&ereA X!*i& E&et*l
Empriroir l{-e&.ero
6.3 SCRIPTS
Los scripts son el tipo de M-fichero ms sencillo posible. Un script notiene argumentos de entrada ni de salida. sencillamente est formado porinstrucciones MATLAB que se ejecutan secuencialmente y que podransubmitirse igualmente en serie en la ventana de comandos. Los scriptsoperan con datos existentes en el espacio de trabajo o con nuevos datoscreados por el propio script. cualquier variable que se cree mediante unscript permanecer en el espacio de trabajo y podr utilizarse en clculosposteriores despus de finalizar el script.
A continuacin se presenta un ejemplo de script que genera variascurvas en polares representando ptalos de flores. Una vez escrita lasintaxis del script en el editor (Figura 6-6), se guarda en la librera detrabajo (work) y simultneamente se ejecuta, haciendo clic en er botn JEo utilizando la opcin save and run del men Debug (o presionando FS).Para pasar de un grfico al siguiente basta con pulsar ENTER.
+tusr pr:uto d* esrt* p*re de*lggs flrec'fulerfttJIEI;"'li*n paato de mrt*I F1*m*u liaee e*Ml d+ h{-ieheroI I
'
&so d* eiecueioa e Es fuaeieI I I .Peuae*reaF;ireiarI I I t 1Ei**rahs**nrs*errarmrt*!* #*\.e@* **6:1*;' ;
Fe:Et*.{**et
=i*;'ta; ir iFigura 6-5
Figura 6-6
-
68 ECUACIONES DIFERENCIALES CON MATLAB
Figra6-7 Figura 6-8
Figura 6-9 Figura 6-10
6.4 FUNCIONES Y M.FICHEROS. FUI{CTION, BVAL YFEVAL
Ya sabemos que MATLAB dispone de gran variedad de funcionespara usar en el trabajo cotidiano con el programa. Pero, adems, elprograma ofrece la posibilidad de definir funciones a medida. El caminoms usual para definir una funcin a medida es escribir su definicin en unfichero texto, denominado M-fichero, que ser permanente y que, por lotanto, permitir el uso posterior de la funcin siempre que se requiera.
MATLAB es habitualmente utilizado en modo comando (ointeractivo), en cuyo caso se submite un comando que se escribe en una
-
CAPTULO 6 CALCULO NUMERICO EN MATLAB. APLICACIONES A LAS ECUACIONES... 69
nica lnea sobre la ventana de comandos y se procesa de inmediato. peroMATLAB tambin permite la ejecucin de conjuntos de comandos en modobatch, en cuyo caso se submiten secuencialmente un conjunto decomandos escritos previamente en un fichero. Este fichero (M-fichero) hade ser almacenado en disco con la extensin ".m" en el camino desubdirectorios de MATLAB, utilizando cualquier editor ASCII o Ia subopcinM-file de Ia opcin New del men File de ra barra superior de mens, lacual nos lleva a un editor de texto que permitir escribir las lneas decomandos y guardar el fichero con un determinado nombre. La opcinopen M-File del men File de la barra superior de mens permite editarcualquier M-fichero preexistente.
Para ejecutar un M-fichero basta con teclear su nombre (sinextensin) en modo interactivo sobre la ventana de comandos y pulsarEnter. MATLAB interpreta secuencialmente todos los comandos osentencias incluidos en las diferentes lneas del M-fichero y los ejecuta.Normalmente no aparecen en pantalla los riterales de los comands queMATLAB va interpretando, salvo que se active er comando echo on, y slose van viendo los resultados de las ejecuciones sucesivas de loscomandos interpretados. Normalmente, el trabajo en modo batch es tilcuando se procesan conjuntos muy largos de comandos de escrituratediosa y con propensin a cometer errores, pero la mayor utilidad sepresenta en Ia automatizacin de procesos. Adems, en las lneas de unM-fichero se pueden introducir textos explicativos y comentarios,empezando cada lnea al efecto por el smbolo %. con el comando Help seaccede al texto explicativo de un M-fichero.
El comando function permite la definicin de funciones a medida enMATLAB, constituyendo una de la aplicaciones ms tiles de los M-ficheros. La sintaxis de este comando es la siguiente:
fu nction pa rmetros_sa I ida = nom bre_fu ncin (pa rmetros_e ntrada )cuerpo de la funcin
una vez que la funcin ha sido definida, se guarda en un M-ficheropara su uso posterior. Es til tambin introducir algn texto explicativo en lasintaxis de la funcin (entre o/o), al cual se acceder con el comando deayuda Help.
cuando los parmetros de salida son ms de uno, se sitan entrecorchetes y separados por comas. Si los parmetros de entrada son msde uno, se separan por comas. El cuerpo de la funcin es la sintaxis que la
-
7O ECUACIONES DIFERENCIALES CON MATLAB
define, y debe incluir comandos o instrucciones que asignen valores a losparmetros de salida. Cada comando o instruccin del cuerpo suele ir enuna lnea que finaliza con una coma o con un punto y coma en caso deque se definan variables (para evitar repeticiones en las salidas al ejecutarla funcin). La funcin se guarda en el M-fichero de nombrenombre_funcin.m.
A continuacin vamos a definir la funcin funl(x)=n3-2x+cosx,creando el correspondiente M-fichero de nombre fun1.m. Para introducirdicha sintaxis en MATLAB se selecciona la subopcin M-file de la opcinNew del men File de la barra superior de mens (o se hace clic en elbotn D Oe la barra de herramientas de MATLAB), la cual nos lleva aleditor de texto MATLAB Editor/Debugger que permitir escribir las lneasde comandos relativas a la sintaxis de la funcin, tal y como se indica en laFigura 6-11.
?.T:.rlt i.:ie e s1B fu.ri* Biepltp=x^3-:*x+cqE (xi
;;::;t:Figura 6-11
Para guardar de forma definitiva dicha sintaxis en MATLAB seselecciona la opcin Save del men File de la barra superior de mens delMATLAB Editor/Debugger, la cual nos lleva a la caja de dilogo Guardar dela Figura 6-12, mediante la cual podemos guardar nuestra funcin con elnombre deseado y en el subdirectorio que se indique como ruta en elcampo Nombre de archivo. Tambin puede hacerse clic en el botn 'l outilizar la opcin Save and run del men Debug.
Se recomienda guardar las funciones como ficheros de nombre igualal nombre de la funcin y en el subdirectorio de trabajo por defecto deMATLAB C :\MATLAB6pI\work. Precisamente es la situacin que presentael programa por defecto al intentar guardar cualquier funcin a medida y alutilizar el icono JE o la opcin Save and run del men Debug para ejecutary guardar simultneamente el M-fichero actual del editor.
-
eatr
leelol
o
alletaalar
cnplulo 6 cAlcuLo NUMERtco EN MATLAB. ApLtcActoNEs A LAS EcuActoNEs... 71
Figurra6-12
Una vez definida y guardada la funcin anterior en un M-fichero, sepuede utilizar desde la ventana de comandos. Por ejemplo, para hallar elvalor de la funcin en 3nl2 escribimos sobre la ventana de comandos usualde MATLAB:
) funl (3*p/2)ans
-
95.2274
Para pedir ayuda sobre la funcin anterior (suponiendo que fuepreviamente introducida como comentario al elaborar el M-fichero que Iadefine) se utiliza el comando help, como sigue:>) heJ-p funlDefinicin de una funcin simple
La evaluacin de una funcin en sus argumentos (o parmetros deentrada) tambin puede realizarse a travs del comando feval, cuyasintaxis es la siguiente:
Evala lafuncin F (M-fichero F.m) en losargumentos especificados argl , arg2,...,argn
-
72 ECUACIONES DIFERENCIALES CON MATLAB
Como ejemplo construimos un M-fichero de nombreque contiene la funcin ecuacion2, cuyos argumentoscoeficientes de la ecuacin de segundo grado ax2+bx+csalidas son sus dos soluciones (Figura 6-13)'
ecuacion2.mson los tres- 0 y cuyas
Si ahora queremos resolver la ecuacin x2+2x+3 = 0 utilizando feval'escribimos en la ventana de comandos lo siguiente:
>> [x1 rx2]=sr"J-('ecuaciorr2',1,2,31x7:
-1.0000 + 7.4742i
x2:-1.0000 - 1.4142i
Tambin se Puede resolversigue:
>> [x1 ,x2] =ssr"cion2 (l ,2,31x7:
-1.0000 + 1.4742i.-a
-
-1.0000 - 7.4742i
la ecuacin de segundo grado como
-
CAPIULO 6 CALCULO NUMERICO EN MATLAB. APLICACIONES A LAs ECUACIONES... 73
Si pedimos ayuda sobre la funcin ecuacin2 tenemos lo siguiente:
>> help ecuacion2
Esta funcin resuefveax^2+bx+c:0
cuyos coeficientes son a,y cuyas sofuciones son x7
fa ecuacin de segundo qrado
b y c (parmetros de entrada)y x2 (parmetros de salida)
La evaluacin de una funcin en sus argumentos (o parmetros deentrada) cuando son cadenas se realiza a travs del comando eval, cuyasintaxis es la siguiente:
eval(expresin) Ejecuta la expresin cuando es una cadena
Como ejemplo evaluamos una expresin carcter que define lamatiz mgica de orden 4.
>> n=4;)) eval ( ['M' num2str (n) ' = magic (n) ' ] )M4:
6.5 VARIABLES LOCALES Y GLOBALESNormalmente, cada funcin de MATLAB definida como un M-fichero
contiene sus variables como variables locales, es decir, como variablesque tienen su efecto en el interor del M-fichero, separadamente de otrosM-ficheros y del espacio de trabajo base. No obstante, es posble definirvarables en el interior de M-ficheros de modo que tengan efectosimultneamente en el interior de otros M-ficheros y en el propio espaciode trabajo base. Para ello es preciso definir las variables como globalescon el comando GLOBAL, cuya sintaxis es la siguiente:
GLOBAL xy 2... Define las vqriables x, y, 2... como globales
Cualquier variable definida como global en el interior de una funcines accesible separadamente para el resto de las funciones y para elespacio de trabajo base lnea de comandos. Si la variable global no existe,la primera vez que se define en la sentencia GLOBAL, se inicializar como
16231351110897672474757
-
74 ECUACIONES DIFERENCIALES CON MATLAB
la matriz vaca. Si ya existe una variable con el mismo nombre que la quese est definiendo como global, MATLAB emite un mensaje de peligro ycambia el valor de la variable a enlazar como global. Es convenientedeclarar una variable como global en cada funcin que necesite acceso aella, y tambin en la lnea de comandos, para tener acceso a ella desde elespacio de trabajo base. En el interior de las funciones el comandoGLOBAL se sita al principio (antes de cualquier ocurrencia de la variable).
Como ejemplo, supongamos que se quiere estudiar el efecto de loscoeficientes de interaccin cr y B en el modelo de Lotka-Volterra:
t1 = 3'1-a}r3t,i z = -j z+ P-u1J2
Para ello creamos la funcin lotka en el M-fichero lotka.m de laFigura 6-14.
Si posteriormente sobre la lnea de comandos escribimos losiguiente:)) global ALPIA BETAALPHA = 0.01BETA = 0.02
ya se podrn utilizar estos valores globales para o y B en el interiordel M-fichero lotka.m (sin tener que volver a especificarlos). por ejempro,podr realizarse una representacin (Figura 6-15) con la sintaxis siguiente:>> [t,y] = ode23('lotka',0,10, [1; 1]); plot(t,y
Figura 6-14
-
cAPrruLo 6 CALCULO NUMERTCO EN MATLAB. APLTCACTONES A LAS ECUACTONES... 7s
Figura 6-156.6 TIPOS DE DATOS
En MATLAB hay 14 tipos de datos diferentes que se representan enla Figura 6-'16.
ARFIAY
funetion handle
int8. uint,intl , uintl Snint33, uint32
srngJ-e doubl-eI
Epar
Figura 6-16
A continuacin se detallan los distintos tipos de datos:
Tioo de dato Eiemplo Descripcinsingle 3*10^38 Precisin numrica simple. Requiere
menor almacenamiento que la dobleprecisin, pero es menor. Este tipo dedatos no debe usarse en operacionesmatemticas.
double 3*10^3005+6i
Doble precisin numrica. Es el tipo devariable ms comn en MATLAB
-
76 ECUACIONES DIFERENCIALES CON MATLAB
sparse speye (5) Matriz disoersa con doble precisin.int8, uint8,int16,uint16,int32. uint32
uintS (nagic (3) ) Enteros con y sin signo y con 8, 16, y 32bits de longitud. Posibilitan usarcantidades enteras con manejo eficienfede memoria. Este tipo de datos no debeus ars e en ooeraciones matemtic as.
char 'HeIIo' Caracteres (cada carcter tiene unalonsitud de 16 bits).
ce11 {17 'heI1o' ef'e(2)} Celda kontiene datos de similar tamao)structure a.daY = L2
a.color = 'Red'a.mat = maqic(3)
Esfructura (contiene celdas de similartamao)
user class inline ('sin (x) ') Clase MATLAB (creada con funciones)java class java. awt. Erame Clase Jwa (defrnida en API o propia con.Iava)
functionhandle
@humps Maneja funciones MATLAB. Puede serpasada en una lista de argumentos Yevaluada con fevaf.
6.7 CONTROL DE FLUJO: BUCLES FOR, WHILE E IFELSETF
El uso de funciones recursivas, condcionales y definidas a trozoses muy habitual en matemticas. Para la definicin de este tipo defunciones eS necesario el manejo de bucles. Como eS natural, la definicinde las funciones se har a travs de M-ficheros.
6.7.1El bucle FORMATLAB dispone de su propia versin de la sentencia DO (definida
en la sintaxis de la mayora de los lenguajes de programacin). Estasentencia permite ejecutar de forma repetitiva un comando o grupo decomandos varias veces. Por ejemplo:
': *r i=1:3, x(i)=O, end
-
CAPIULO 6 CALCULO NUMERICO EN MATLAB. APLICACIONES A LAS ECUACIONES... 77
La forma general de un bucle FOR es la siguiente:
for variable : expresincomandos
end
El bucle siempre empieza con la clusula for y termina con laclusula end, e incluye en su interior todo un conjunto de comandos que seseparan por comas. Si algn comando define una variable, se finaliza conpunto y coma para evitar repeticiones en la salida. Normalmente, losbucles se utilizan en la sintaxis de M-ficheros. Veamos un ejemplo (Figura6-17):
Figtra 6-17
En este bucle hemos definido la matriz de Hilbert de orden (m,n). Siguardamos su contenido como un M-fichero de nombre matriz.m,podremos construir cualquier matriz de Hilbert posteriormente ejecutandoel M-fichero y especificando los valores para las variables m y n(dimensiones de la matriz) como se indica a continuacin:)) M=matrz(4,51M-
7 - 00000.50000.33330.2500
0 . s0000.33330.25000.2000
0.33330 .2s000.20000.1567
0-2500 0-20000.2000 0.16670.1667 0.74290.1429 0.7250
-
78 ECUACIONES DIFERENCIALES CON MATLAB
6.7.2 El bucle WHILEMATLAB dispone de su propia versin de la sentencia WHILE
definida en la sintaxis de la mayora de los lenguajes de programacin.Esta sentencia permite ejecutar de forma repetitiva un comando o grupo decomandos un nmero determinado de veces mientras se cumple unacondicin lgica especificada. La sintaxis general de este bucle es lasiguiente:
while condicincomandos
end
El bucle siempre empieza con la clusula while seguida de unacondicin, y termina con la clusula end, e incluye en su interior todo unconjunto de comandos que se separan por comas y que se ejecutanmientras se cumple la condicin. Si algn comando define una variable, sefinaliza con punto y coma para evitar repeticiones en la salida. Comoejemplo escribimos un M-fichero (Figura 6-18) que se guarda con elnombre while1.m, cuya ejecucin permite calcular el mayor nmero cuyofactorial no excede a 10100.
Figura 6-18
Ahora ejecutamos el M-fichero.) whi1e1
70
-
CAPTULO 6 CALCULO NUMERICO EN MATLAB. APLICACIONES A LAS ECUACIONES... 79
6.7.3 El bucle IF ELSEIF ELSE ENDMATLAB, al igual que la mayora de los lenguajes de programacin
estructurada, tambin incorpora la estructura lF-ELSEIF-ELSE-END.Mediante esta estructura, se pueden ejecutar secuencias de comandos sise cumplen determinadas condiciones. La sintaxis del bucle es lasiguiente:
if condicincomandos
end
En este caso se ejecutan los comandos si la condicin es cierta.Pero la sintaxis de este bucle puede ser ms general.
if condicincomandosl
elsecomandos2
end
En este caso se ejecutan los comandosl si la condicin es cierta, yse ejecutan los comandos2 si la condicin es falsa.
Las sentencias lF, al igual que las sentencias FOR, pueden seranidadas. Cuando se anidan varias sentencias lF se utiliza la sentenciaELSEIF, cuya sintaxis general es la siguiente:
if condicinlcomandosl
elseif condicin2comandos2
elseif condicin3comandos3
En este caso se ejecutan los comandosl si condicin1 es cierta, seejecutan los comandos2 si condicin1 es falsa y condicin2 es cierta, seejecutan los comandos3 si condicin'l y condicin2 son falsas y condicin3es cierta, y as sucesivamente.
'else
end
-
80 ECUACIONES DIFERENCIALES CON MATLAB
La sintaxis anidada anterior es equivalente, pero ms rpida deejecucin, a la sintaxis sin anidar siguiente:
if condicinlcomandosl
elseif condicin2
comandos2else
if condicin3comandos3
else
endend
end
Veamos como ejemplo (Figura 6-19) el M-fichero de nombreelsel.m siguiente:
Figura 6-19
Al ejecutarlo obtendremos el tipo de nmero (negativo, par o impar)para un valor de n especificado:)) else1 (8) , elsel (5) , else1 (-10)
n es par
-
CAPTUIO 6 CALCULO NUMERICO EN MATLAB. APLICACIONES A LAS ECUACIONES... 81
n es imparA:n es neqativo
6.7.4 SWITCH Y CASELa instruccin switch ejecuta ciertas sentencias basadas en el valor
de una variable o expresin. su sintaxis bsica es la siguiente:
switch expresin (escalar o cadena)case valorl
sentencias % Ejecttasi expresin esvalorlcase valor2
sentencias '% Ejectta si expresin es valor2
otherwisesentenciass %o Ejeatta si expression no cumple
end %o ningn caso
A continuacin se Presentadevuelve -1, 0, 1 u otro nmero segn
un ejemplo de una funcin quesea la entrada (Figura 6-20).
Figura 6-20
-
82 ECUACIONES DIFERENCIALES CON MATLAB
Despus ejecutamos el ejemplo anterior.>> casel (25)otro vafor>> casel (-1)menos uno
6.7.5 COI{TINUELa instruccin continue pasa el control a la iteracin sguiente en un
bucle for o while en el cual aparece ignorando las restantes instruccionesen el cuerpo del bucle. A continuacin se muestra el M-fichero continue.m(Figura 6-21) que cuenta las lneas de cdigo en el fichero magig.mignorando las lneas blancas y los comentarios.
Seguidamente ejecutamos el M-fichero.)) continuel25 fineas
6.7.6 BREAKLa instruccin break finaliza la ejecucin de un bucle for o while en
el cual aparece continuando la ejecucin en la siguiente instruccin fueradel bucle. A continuacin se muestra el M-fichero breakl.m (Figura 6-22)que lee las lneas de cdigo en el fichero fft.m saliendo del bucle cuandose encuentre Ia primera lnea vaca.
Figura6-21
-
CAPTULO 6 CALCULO NUMERICO EN MATLAB. APLICACIONES A LAS ECUACIONES... 83
Figra6-22
Despus ejecutamos el M-fichero.>> b