Você está na página 1de 111

GMatl#Iforks.

ECUAGIONES
DIFERENGIALES
CON MATLAB
Ejemplos y
ejercicios
resueltos
CESAR PREZ LPEZ
INDICE
MilTRODUCCIN PRCTICA A MATLAB
MT,TCTONES DIFERENCIALES DE PRIMER ORDEN. ECUACIONES
m[,{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... ............ 33
1,i ECUACIONES DIFERENCIALES LINEAIES .................... 35
]I
TACIONES DIFERENCIALES DE ORDEN SUPEROR. TRANSFORMADA DE
I,PLACEYTIPOSESPECIALESDEECUACIONES......
...................37
3.I ECUACIONES ORDINARIAS DE ORDEN SUPERIOR. .....,.,..,...,...37
J l ECUACIONES LINEALES DE ORDEN SUPERIORHOMOGNEAS EN
COEFICIENTES CONSTANTES. ..................39
]S ECUACIONES NO HOMOGNEAS CON COEFICIENTES CONSTANTES,
\-ARTACIN DE PARMETROS........... ....,.,41
J.+ ECUACIONES NO HOMOGNEAS CON COEFICIENTES VARIABLES.
ECL]ACIONES DE CAUCHY-EULER.... ,.,....44
3*i TRANSFORMADA DE LAPLACE .................. .............45
-1.6
POLINOMTOS ORTOGONALES ............. 48
3.6.1 Polinomios de Chebychev de primera y segunda especie.....................'........... 48
3.6.2 Polinomios de Legendre................... ........................49
3.6.3 Polinomios asociados de Legendre ..........................49
3.6.4 Polinomios de Hermite................... ..........................49
4 ECUACIONES
DIFERENCIALES
CON M
50
1iilll"-:i:::T'"r;::i:::'""":
so
3.6'7
Polinomios
de Jacobi ""'1""""""'
"""""""""""""
50
3.6.8
Polinomios
de Gegenbauer """"""'
""""""""""""'
50
3.7 FLTNCIONES
DE AIRY
Y BESSEL
.."...".
51
ECUACIONESDIFERENCIALESponITroDoSAPRoXIMADOS...................53
4.lEcuAcIoNEs"o*"o*o*'***AI-lNo'un{EArEsYNoI.lN{FAtrs'
rrtooosepnoxnranos
"""""53
4.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;OMoGENEASCoNCoEFICIENTES
CONSTA\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...'.....................68
6.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....... ...............:..... ...... 86
6.9.2 Mtodo de Heun....... ......81
6.9.3 Mtodo de las series de Taylor...... ...... 88
ECUACIONES EN DIFERENCIAS CON VALORES INICIALES, VALORES EN
LA FRONTERA Y EN DERIVADAS PARCIALES ....................... 95
7.I SOLUCIN NUMRICADEECUACIONES DIFERENCIALES .........................95
7.2 ECUACIoNES DIFERENCIALES oRDINARIAS CON VALORES INICIALES ......................... 95
7.3 EcUACToNES DTFERENCTALES oRDINARIAS coN vALoRES EN LA FRoNTERA.............. 99
7.4 EcUACtoNES DIFERENCTALES EN DERTvADAS
pARCIALES...
................. 102
Captulo 1
INTRODUCCION PRACTICA A MATLAB
ClCuT,O NUMRICO CON MATLAB
Podemos usar Matlab como una computadora numrica de gran
poEncia. La mayora de las calculadoras manejan nmeros slo con un
grdo de precisin prefijado, sin embargo Matlab realiza clculos exactos
Grn la precisin que sea necesaria. Adems, a diferencia de las
*ladoras, podemos realizar operaciones no slo con nmeros
ivftJuales, sino tambin con objetos tales como las matrices.
La mayora de los temas del clculo numrico clsico, son tratados
ei este software. Soporta clculo matricial, estadstica, interpolacin, ajuste
pr mnimos cuadrados, integracin numrica, minimizacin de funciones,
pgramacin lineal, resolucin numrica de ecuaciones algebraicas y
frrenciales y un largo etctera de procesos de anlisis numrico que
hrrrc viendo altratar los sucesivos temas de este libro.
Veamos algunos ejemplos de clculo numrico con Matlab. (Como
p
sabemos, para obtener los resultados es necesario teclear Enter una vez
ffiritas 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 haber
fijado 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 pasar
el resultado de la operacin anterior a notacin cientfica con 16 dgitos ms
exponente.
format long e
3^100
ans
=
5.1 537 7 5207 3201 1 5e
+0 47
4) Tambin podemos trabajar con nmeros complejos. Obtendremos
el 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
{
t
I

I
I
f,
m

l
I
b,

I
r
:
I
CAPTULo 1. INTRoDUCCIN PRCTICA A MATLAB 9
6) Tambin podemos calcular el valor de la funcin de Bessel en el
punto 11.5 . Para ello teclearemos Besselj(0,11.5).
Besselj(O, 11.5)
ans
=
0.2150
7) Tambin podemos realizar integrales numricas. Para calcular la
integral entre 0 y n de la funcin Seno(Seno(x)) teclearemos la expresin
int(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 lo
largo del libro.
cr,cur.o SIMBLICO coN MATLAB
Matlab maneja perfectamente el clculo matemtico simblico,
manipula con facilidad y rapidez las frmulas y expresiones algebraicas y
puede 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 y
sistemas de ecuaciones, puede evaluar derivadas e integrales
simblicamente y encontrar funciones solucin de ecuaciones diferenciales,
puede manipular series de potencias, lmites y muchas otras facetas de la
matemtica algebraica.
Para realizar esta tarea, Matlab requiere que todas las variables (o
expresiones algebricas) se escriban entre comillas simples. Cuando Matlab
recibe una variable o expresin entre comillas, considera que es simblica.
Veamos algunos ejemplos de clculo simblico con Matlab.
,,
ii
:l
fl
t,i
[l
rl
rt
,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)Podemosfactorizarelresultadodelclculodelejemploanterior
tecleand:
factor('((x
+
1)*(x
+ 2)-(x
+
2)"2)^3')
factor('((
+ 1)*(x
+ 2)'(x
+ 2)42n'',
ans
=
-(x+2)^3
3)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*x
5)Podemosexpresarelresultadoanteriorconnotacinmatemtica
ms elegante:
pretty(simplify(int('x^2*sin(x)^2','x')
fl;E
a-
n:
al-
fxr
ETII
T
ca
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))
68 I
,.
-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')
0l
Ll2* (49-L2*al
n
(L/211
L/2* (49-L2*al
n
lL/2) 1
8) 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 cinco
aplicamos 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*il
I
. 94s0680868231334+.
8s45175t44390459*il
Por otra
parte, Matlab
puede utilizar las libreras del
programa Maple
V, para trabajar con matemtica simblica
y poder extender as su campo de
,"in. De eita forma, se puede usar Matlab
para trabajar en temas como
las formas diferenciales,
la geometra eucldea, la geometra proyectiva, la
estadstica, etc.
A su vez, tambn se
pueden ampliar temas del clculo numri@,
utilizano las libreras desde Matlab las libreras de Maple (combinatori4
optimizacin,
teora de nmeros, etc')
MATLAB Y MAPLE
Matlab se apoya en las libreras del programa Maple . Siempre
qtr
sea necesario acudir cualquier comado o funcin de Maple desde Matlah'
se utiliza el comando
"mapl" seguido de la sintaxis correspondiente
en d
entorno Maple. Hay
que constatai
que esta disponibilidad solo es posible si
se ha instaiado el
;'Tolbox"
de clculo simblico
"Extended Symbolic Mill
Toolbox".
Para utilizar un comando Maple desde Matlab, Ia sintaxis es h
siguiente:
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 b
sintaxis 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 )')
e
e
0
h
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 MATLAB
Matlab produce grficos de dos y tres dimensiones, as como
mntornos y grficos de densidad. Se pueden representar los grficos y listar
bs datos, permite el control de colores, sombreados y otras caractersticas
de los grficos, tambin soporta grficos animados. Los grficos producidos
por 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 figura
1.1
r r=linspace(-pi/4,pi/4,300)
;
y=x.r'sin(1./x)'
plot(x,y)
o,
a,
ue
b,
el
rsi
rth
la
l, la
->1:
74 ECUACIONES DIFERENCIALES CON MATLAB
Figura 1.1
2) Podemos dotar al grfico anterior de las opciones de marco y
rejilla, as como de ttulo para el propio grfico y etiquetas para sus ejes. Ver
figura 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 la
z=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
-,4
r0
E A.6 .il.{- -A_2 tr_: [.4 0.5 O.E
Varisble 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 una
idea de las figuras en el espacio, y son muy tiles a la hora de determinar
visualmente intersecciones entre distintos cuerpos, generacin de
volmenes de revolucin y desarrollos de todo tipo.
4) Podemos generar un grfico tridimensional, correspondiente a la
hlice 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)
)n
b
Figura 1.3
Figura 1.4
16 ECUACIONES DIFERENCIALES CON MATLAB
Podemos representar una curva plana dada por sus coordenadre
polares r= Cos(2t).Sen(2t) paratvariandoentre
0yn, tomando puntc
equidistantes 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 como
simblica, 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 el
conceptos.
Figura 1-6
correspondiente captulo de grficos
ampliaremos estos
AS
OS
no
tos
cnpiruro 1. rNrRoDuccrru
pnclrca
A MATLAB 17
}IOTACION GENERAL
Siempre que se utiliza un programa, es necesario conocer las
caractersticas generales sobre notacin, con la finalidad de introducirnos en
la prctica con el mismo. La mejor forma de aprender Matlab es utilizar el
programa. Cada ejemplo consiste en el input del usuario encabezado con el
prompt "" y la respuesta de Matlab en la lnea siguiente. Ver figura 1-7.
En otras ocasiones, y dependiendo del tipo de entrada (input de
usuario) que se le proponga a Matlab, devuelve la respuesta utilizando la
expresin "ans=
n'.
Verfigura 1-8
:-
2*2
lt
Es necesario poner atencin en la diferencia entre maysculas y
minsculas, eltipo de parntesis o corchetes, la cantidad de espacios y en Ia
puntuacin (comas, puntos y comas).
mBads to qet started: intro, dmo, help hetp
omnands 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\DOS
Ya 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 de
comandos (instrucciones o funciones), implementados como objetos de
Matlab.
Se puede utilizar la ayuda de acceso inmediato para acceder a
diversa infor-macin utilizando el comando help.
help
HELP topics:
matlab\qeneraJ
matTab\ops
natlab\lanq
matlab\elmat
matfab\effun
matlab\ specfun
matlab\natfun
matfab\datafun
matfab\pofyfun
matlab\ funfun
matTab\sparfun
matTab\graph2d
matlab\graph3d
natlab\ specqraph
matTab\qraphics
natfab\uitools
matfab\strfun
matfab\iofun
matlab\tinefun
mat fab\datatypes
matfab\winfun
(DDE/ActiveX)
matlab\demos
tooJbox\ syrnl:o 11c
toolbox\tour
toofbox\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 Tour
Preferences.
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
ide
ide
ruda
era
ctonos
sobre
: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
conj
imag
real-
unwrap
isreal
cpTxpair
Roundinq and
fix
f foor
ceif
round
mod
rem
stqn
-
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 de
caracteres (lookfor secuencia) que permite encontrar todas aquellas
funciones o comandos que se refieren a dicha secuencia o la contienen.
Este comando es muy til, bien cuando no se dispone de ayuda directa para
la secuencia especificada, o bien para ver la ayuda de todos los comandos
que contienen la secuencia. Por ejemplo, si buscamos ayuda para todos los
comandos que contienen la secuencia complex, podemos usar el comando
lookfor complex para ver en qu comandos Matlab ofrece informacin al
respecto.
lookfor complex
ctranspose.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.
lde
llas
nen.
para
rdos
s los
ndo
in al
capruro 1. TNTRoDUCcTru
pnclcnA
MATLAB 21
COMANDOS DE ESCAPE Y SALIDA AL ENTORNO DOS
Existen tres formas de salir desde la ventana de comandos de
lilaab al entorno del sistema operativo MS-DOS para ejecutar tareas
tsrnporales.
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 etiqueta
l- ::fmero de serie def vcfumen es 145C-72P2
l-:=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 DAT
m,_:_,:-<i DLL
<DIR>
<DIR>
1.872
219.136
) 27
i4.992
1.973
25.ABB
16.896
2.274
470
66.560
10 archivo (s)
2 directorio (s)
13/A3/98 0:76
13/03/98 0:76 ..
19/01/98 14:14 bccopts.bat
21/08/97 22:24 cLbs770.dJf
L3/03/98 0:28 cnex.bat
19/01/98 14:14 conptool.bat
19/01/98 74:74 df50opts.bat
1B/12/97 16:34 fenq.dll
1B/12/97 15:34 fnat.dfl
13/03/98 0:28 fmex.bat
13/03/98 0:27 license.dat
02/05/97 B:34 w32ssi. dff
11.348.865 bytes
159.383.552 bytes fibres
El comando lorden_dos & se utiliza para ejecutar la orden del DOS
especifcada en modo background. La orden se ejecuta abriendo una
rentana de ambiente DOS sobre la ventana de trabajo de Matlab tal y como
se indica en la figura 1-9. Para volver a ambiente Matlab basta con pulsar
Eri el ratn en cualquier zona de la ventana de comandos, en cuyo caso se
cierra automticamente la ventana de ambiente DOS. Se puede volver a la
uentana del DOS en cualquier momento para ejecutar cualquier orden del
sbtema operativo pulsando el icono etiquetado Simbolo de MS-DOS situado
en la parte inferior de la pantalla.
22 ECUACIONES DIFERENCIALES CON MATLAB
r
,},
,t;
i.r
ir

;
i..
*
;
B
L
i:
Figura 1-9
El comando orden_dos
I
se utiliza
para ejecutar la orden del Dos
con pantalla de Matlab.
con los tres comandos anteriores, no slo
pueden ejecutarse
comandos del DOS, sino tambin todo tipo de ficheros ejecutables o tareas
batch.
El comando dos orden-dos se utiliza tambin
para ejecutar la orden
del DOS en modo automtico sobre la ventana de comandos de Matlab.
Para salir definitivamente de Matlab, basta con teclear
quit en la
ventana de comandos
y, a continuacin,
pulsar Enter.
MATLAB Y LA PROGRAMACIN
Combinando adecuadamente todos los objetos definidos en Matlab,
adecuados a las reglas de trabajo definidas en el programa, se puede
construir un cdigo de programacin muy til en la investigacin matemtica'
Los programas consisten habitualmente en una serie de instrucciones en las
que Se calculan valores, se les asigna un nombre y se reutilizan en clculos
posteriores.
EI DOS
cutiarse
r tareas
a orden
ab.
It en Ia
Madab,
puede
mca.
en las
lculm
cnprulo 1. rNTRoDUcclru
pncrca
A MATLAB 23
Al igual que en lenguajes de programacin como C o Fortran, en
se pueden escribir programas con bucles, control de flujo e
condicionales. En Matlab se pueden escribir programas
tales, es decir, definir una secuencia de pasos estndar a
Como en C o en Pascal, se puede realizar un clculo repetitivo
Do, For o While. El lenguaje de Matlab tambin incluye
iones condicionales como lf Then Else. Matlab tambin soporta
funciones lgicas, como And, Or, Not y Xor.
Matlab soporta la programacin procedimental (con procesos
recursivos, bucles...), la programacin funcional y la
in orientada al objeto. Veamos dos ejemplos sencillos de
ras. El primero genera lamafriz de Hilbert de orden n
,y
el segundo
Ios nmeros de Fibonacci.
ndo la matriz de Hilbert de orden n
'ttfr+j-f
)';
=
l:n
ftri
='l
a(ii)
=
eval(t);
cnd
los nmeros de Fibonacci
$ll;i=l;
(i)+f(-r)<1000
{i+2)=f(i)+f(i+l);
i=i+l
Captulo 2
ECUACIONES DIFERENCIALES DE
R ORDEN. ECUACIONES EXACTAS,
EN VARIABLES SEPARADAS,
HOMOGENEAS Y LINEALES
MUACIONES DIFERENCTALES DE PRIMER ORDEN
Etr nmero de comandos que implementa Matlab relativos a este tema
rrry elevado, pero s muy eficiente. De todas formas, es posible seguir
Fo{lzrma
los mtodos algebricos de resolucin ya conocidos para
fro
de ecuacin diferencial. Tambin se implementan mtodos de
aproximados de ecuaciones y sistemas de ecuaciones diferenciales.
E comando bsico para resolucin de ecuaciones diferenciales es
Este comando computa soluciones simblicas de ecuaciones
ordinarias y sistemas. Las ecuaciones son especificadas por
simblicas conteniendo la letra D para denotar diferenciacin, o
D2, D3,...,etc, para denotar diferenciacin de orden 2,3,...,etc. A
ln 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 es
r es la variable independiente por defecto, y en segundo lugar t.
26 ECUACIONES DIFERENCIALES CON MATLAB
Se pueden especificar condiciones iniciales en ecuaciones
adicionales, mediante la forma y(a)=b o Dy(a)=b,...,etc. Si las condiciones
iniciales no se especifican, las soluciones de las ecuaciones diferenciales
contienen constantes de integracin C1
,
C2, ..., etc. Los comandos ms
importantes de Matlab que resuelven ecuaciones diferenciales son los
siguientes:
dsolve('ecuacin','v')
Resuelve la ecuacin diferencial siendo v la
variable independiente (si no se especifica 'v', la
variable independiente es x). Solo devuelve
soluciones explcitas
dsolve('ecuacin','condicin_inicial',...,'v')
Resuelve la ecuacin diferencial sujeta a !a
condicin inicial especificada
dsolve('ecuacin','cond1','cond2',...,'condn','v')
Resuelve Ia ecuacin diferencial sujeta a las
condiciones iniciales especificadas
dsolve('ecuacin', 'cond1, cond2,..., condn'
,
'v')
Resuelve la ecuacin diferencial sujeta a las
condiciones iniciales especificadas
dsolve('ec1'
r'ec?' r..,r'ecn','condl','cond2'r...,'condn','v')
Resuelve el sistema diferencial sujeto a las
condiciones iniciales especificadas (explcitas)
dsolve('ec1, ec2,..., ecn', 'cond1, cond2,..., condn'
,
'v')
Resuelve el sistema diferencial sujeto a las
condiciones iniciales especificadas
maple('dsolve(ecuacin, func(var))')
Resuelve la ecuacin diferencial, considerando var
como variable independiente y func como variable
dependiente (devuelve soluciones implcitas)
maple('dsolve({ecuacin, cond1,cond2, ....condn}, func(var))')
-
leS
]es
iles
ns
los
t,
l?
io var
riable
s)
CAP|TULO 2. ECUACIONES DIFERENCIALES DE PRIMER ORDEN 27
Resuelve la ecuacin diferencial sujeta a las
condiciones iniciales especificadas
maple('dsolve({ec1, ec2,..,ecn},
{func1(var),
func2(var),...,funcn(var)})')
Resuelve el sistema de ecuaciones diferenciales
especificado (devuelve soluciones implcitas)
maple('dsolve(ecuacin, func(var),'explicit')')
Resuelve la ecuacin diferencial, ofreciendo la
solucin en forma explcita, si es posible
A continuacin se mostrarn algunos ejemplos.
Resolvemos en primer lugar ecuaciones diferenciales de primer
oreden 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 la
suiente 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)l
que 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*9fiL
f(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 SBPARADAS
Una ecuacin diferencial en variables separadas presenta la fonna
f(x)dx
=
g(y)dy. La resolucin de este tipo de ecuaciones es inmediata
ponendo
it(x)Ox = J
g1ydy +C.
ado.
uiente
99(x)"
a fonna
nediata
CAPITULO 2. ECUACIONES DIFERENCIALES DE PRIMER ORDEN 29
Si Matlab no resuelve directamente la ecuacin diferencial con
ffimcin dsolve, entonces se sigue el mtodo algebrico usual, que
p'esenta
dificultades especiales para el programa, dada su versatilidad
d clculo simblico.
la
no
en
En primer lugar intentamos resolverla directamente. La ecuacin
plede ponerse de la forma:
Cos
Ix]
y
Ix]
j
-^j
2
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 las
esuaciones 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 +
C
Ahora 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 l
La funcin solucin ser sin(x)=log(y)+1t2y' - 112
30 ECUACIONES DIFERENCIALES CON MATLAB
De la misma forma se puede resolver cualquier otra ecuacin
diferencial en variables separadas.
Esta ecuacin diferencial tambin es resoluble directamenE
utilizando:
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 HOMOCXNTS
Consideremos 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 die
que es homognea de grado n, si lo son a lavez lasfunciones M y N, es
decir, 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 la
variable v tal que x=vy, transforma Ia ecuacin diferencial inicial (de
variables x e y) en otra de variables separadas (de variables u e y). Se
resuelve la ecuacin en variables separadas y posteriormente se deshace
el cambio.
Vamos a resolver la ecuacin por el mtodo algebrico ordinario
para ecuaciones diferenciales homogneas. En primer lugar comprobamos
si 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 resolverla
aplicamos el cambio de variable x=vy.
Antes de realizar las operaciones del cambio de variable, es
conveniente cargar la librera difforms, mediante el comando
maple('with(difforms)'), que nos permitir trabajar con formas
diferenciales. Una vez cargada esta librera tambin es conveniente utilizar
el comando maple('defform(v=0,x=0,y=Q)',
que permite declarar todas
las variables que no van a ser constantes o parmetros en la
diferenciacin.
maple('with(difforms)');
r maple('defform(v=0,x=0,y=Q)')'
Ahora realizamos ya el cambio de variable x=vy, y agrupamos
trminos 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 trminos
en 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 obtenemos
simplificados totalmente.
(v y
-y)d(v) d(y)
--- +
----
33v
vy
la expresin anterior con todos sus trminos
'rte
oy
lice
CS
rla
(de
Se
are
ffi
ario
mos
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_',_
,tY
Ahora 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 la
ecuacin diferencial inicial.
2
v
log(x)
+
112 -----
=
C
2
X
Ahora se representan grficamente las soluciones de esta ecuacin
dlferencial. Para ello nos basamos en que el grfico de la familia de
soluciones con parmetro c, es equivalente al grfico de las curvas de
nivel 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
uaclon
ilia de
vas 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 EXACTAS
La 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 una
funcin F tal que su diferencial total dF coincide con la ecuacin, o sea:
dF=M(x,y)dx+N(x,y)dy
por lo tanto F(x,y)=c ser la familia de soluciones de la ecuacin
diferencial.
A continuacin se muestra un ejercicio que sigue el mtodo
algebrico 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::> torn
Explicit solution could not be
found.
Se observa que la funcin dsolve no
propuesta. Vamos a intentarlo por el mtodo
resolucin de ecuaciones diferenciales exactas.
resuelve
algebrico
Ia ecuacin
clsico de
34 ECUACIONES DIFERENCIALES CON MATLAB
En primer lugar comprobamos si la ecuacin diferencial propuesta
es 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 siguiente
condicin : 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) + y
Para 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 diferencial
reducible a exacta mediante un factor integrante.
2.5 ECUACTONES DIFERENCIALES LINEALES
Una 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)ox
e
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 factor
integrante 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
lr
1D
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 ORDEN
ST]PEROR TRANSFORMADADE LAPLACE Y
TIPOS ESPECIALES DE ECUACIOI{ES
3.1 ECUACIONES ORDINARIAS DE ORDEN SUPERIOR
Las 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 llama
homognea y si f(x) no es Ia funcin cero, la ecuacin se llama no
homognea. Si las funciones ai(x) (i=1...n) son constantes, la ecuacin se
denomina en coeficientes constantes.
Un concepto de gran inters aqu va a ser el de conjunto de
funciones linealmente independientes.
if1(x),
f2(x),....,fn(x)) es un
conjunto de funciones linealmente independientes si para algn x del
intervalo comn de definicin, el determinante wronskiano de las funciones
es no nulo. El determinante wronskiano de las funciones, en cualquier
punto
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 permite
calcular la matriz wronskiana de un conjunto de funciones. Su sintaxis es:
maple('Wronskian(V,variable)')
Calcula la matriz wronskiana correspondiente al
vector de funciones V de variable independiente x
Un conjunto S
= {f1(x),.....,fn(x)}
linealmente independiente de
soluciones 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)
=
0
se llama conjunto fundamental de soluciones de la ecuacin.
Si las funciones ai(x) (i=1....n) son continuas en un intervalo abierto
l, entonces la ecuacin homognea tiene un conjunto fundamental de
soluciones
= {fi(x)}
en i.
Adems, la solucin general de la ecuacin homognea vend
dada por la funcin:
n
f(x)
= ci fi(x) donde
{ci}
es un conjunto de constantes arbitrarias
i=0
La ecuacin:
2nni
a0+a1 m+a2m
+
......
+anm
=I
ai m=0
i=0
se denomina ecuacin caracterstica de la ecuacin diferencid
homognea en coeficientes constantes. Las soluciones de esta ecuacin
caracterstica van a determinar las soluciones de la ecuacin diferencid
lineal homognea general en coeficientes constantes.
t-
CAPTULO 3. ECUACIONES DIFERENCIALES DE ORDEN SUPERIOR 39
lite
;
t-
I
i
tal
Ex
,de
I
i
Prto
ld"
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)J
kxp
(x), 2
*exp
(x) +x*exp(x), 2
*exp(x)
+ 4*x*exp (x) +x"2
*"*p
(*)l
pretty(determ(W))
3
2 exp(x)
Ya tenemos el valor del wronskiano, que evidentemente es siempre
distinto de 0, luego el conjunto de funciones es linealmente independiente.
3.2 ECUACIONES LINEALES DE ORDEN SUPERIOR
HOMOGENEAS 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)
=
0
se 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 diferencial
homognea en coeficientes constantes. Las soluciones de esta ecuacin
caracterstica (m1
,
fr2, ...mn) van a determinar las soluciones de la
ecuacin diferencial lineal homognea general en coeficientes constantes.
nt
=I ai m=0
i=0
hcial
ErcN
i
t*rl
40 ECUACIONES DIFERENCIALES CON MATLAB
Si los mi (i=1..n) son todos distintos, una solucin general de la
ecuacin homognea en coeficientes constantes es:
m1 x m2x mnx
y(x)
=c1
e
+
c2e
+
......
+cn
e
c1, c2,...., cfl son constantes arbitrarias que determinan la familia de
soluciones de la ecuacin diferencial.
Si algn mi es una raz de multiplicidad k de la ecuacin
caracterstica, determina los siguientes k trminos de la solucin:
mix mix 2 mix k mix
cie
+c(i+1)xe +c(i+2)x
e
+........ +c(i+k)x
e
Si existe alguna raz compleja mj= a+bi de la ecuacin
caracterstica, entonces tambin existe la raz compleja conjugada a-bi.
Estas dos races determinan simultneamente el siguiente par de
trminos 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 coeficientes
constantes, 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
ecuacIlft
gada 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,NTES
IONSTAI\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 linealmente
de la correspondiente ecuacin homognea:
n
)+a1
(x)y'(x)+a2(x)y"(x)+....+ an(x)y (x)= 0
Una 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 al
sustituir la i-sima columna del Wronskiano W(y1(x), y2(x),.....,yn(x)), por el
transpuesto del vector (0,0,.....,0, 1
).
La solucin
general de la ecuacin no homognea viene dada
por la solucin de la homognea ms la solucin particular de la no
homognea, y tendr la forma:
m1 x m2x mnx
y(x)=c1 e
+c2e+......+cne +
Yp(x)
supuestas las races mi de la ecuacin caracterstica de la homognea
todas distintas. Si no lo fueran, nos remitimos a la forma general de la
solucin de una ecuacin homognea,
que ya hemos estudiado antes.
Vamos a seguir el camino algebrico del mtodo de variacin de
parmetros para resolver la primera ecuacin. Consideramos la ecuacin
caracterstica de la homognea para obtener un conjunto de solucione
linealmente 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 funciones
i=1,2
> maple('Wl :=x->array([[0,y2(x)],[1,diff((y2Xx),x)]l)');
pretty(simplify(maple('det(W1 (x))')))
\-
EFI
F: ,I
W,Li
E-:- |
E:I
&J
rde
cin
nes
ta al
or el
Jada
lno
inea
bla
nes
i(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, para
determinados 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 directamente
DSolve 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,NTES
VARIABLES. ECUACIOI{ES DB CAUCI{Y.EULER
CAPTULO 3. ECUACIONES DIFERENCIALES DE ORDEN SUPERIOR 45
La ecuacin
n 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=0
se denomina ecuacin de Cauchy-Euler.
Matlab resuelve directamente este tipo de ecuaciones con el
comando 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 LAPLACE
Sea 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) si
se cumple:
-1
L{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 expresin
respecto a una variable y la transformada inversa. su sintaxis es la
siguiente:
maple('laplace(expresin, t, s)')
Calcula la transformada de Laplace de la expresin
con 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 la
expresin con respecto a s. La transformada
inversa es de variable t
Veamos algunos ejemplos.
pretty(maple('laplace(t^(3/2)-exp(t)+sinh(a*t), t, s)'))
;
1/2
piTa
3/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 resolver
determinadas ecuaciones diferenciales. El mtodo a seguir es calcular las
transformada de Laplace de cada trmino de la ecuacin para obtener una
ecuacn diferencial en transformadas de Laplace y resolverla en funcn
de las transformadas de Laplace. Finalmente se halla la solucin de Ia
ecuacin inicial calculando la transformada inversa de Laplace de la
solucin de la ecuacin en transformadas de Laplace.
No obstante, Matlab aporta la opcin
'laplace'
en el comando
maple('dsolve'), que tuerza al programa a resolver la ecuacin diferencial
utilizando transformadas de Laplace. La sintaxis es la siguiente:
maple('dsolve(ecuacin, func(var),'laplace')
En primer lugar calculamos las funciones transformadas de Laplace
de los dos miembros de la ecuacin diferencial, y aplicamos las
condiciones 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))'))
2
Japlace(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 transformadas
de 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 inicial
calcularemos la transforma inversa de Laplace de la funcin obtenida en el
pso
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
solver
hr
las
er
una
uncin
dela
de
la
man
xencid
r[3Plm
snos
t
It
1/2 1/2
sin (3 x) 3
1/2
35 cos (3 x) 7
7/4 x - 7/8 - --------
+ 5/B
3 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/2
1 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\ALES
Dos 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 si
ln
J
f1x)g(x):0
'
,n ejemplo de familia ortogonal pueden ser las funciones
fn(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 a
ser muy tiles a la hora de resolver ciertas ecuaciones diferenciales no
lineales de orden superior. Las funciones simblicas que permiten el trabajo
con 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 Legendre
Polinomios 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 de
determinadas ecuaciones no lineales de orden superior. Para usar estre
funciones es necesario ejecutar antes maple('with orthopoly').
3.6.1 Polinomios de Chebychev de primera y segunda especic
Los polinomios de Chebychev de primera especie son las soluciones
de la ecuacin diferencial:
l
L
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 la
relacin de ortogonalidad :
1
?
J
unlxum(x)(1-x2)1/2 dx=g m+n
-1
3.6.2 Polinomios de Legendre
Son 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*n
3.6.3 Polinomios asociados de Legendre
Las soluciones de la ecuacin diferencial:
(l-*') y'-2x'y+{n(n+f
t 9tv:O
l-x-
son las llamadas funciones asociadas de Legendre
3.6.4 Polinomios de Hermite
Las 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 Laguerre
Las soluciones de la ecuacin diferencial
general de Laguerre:
xy"+(a+1-x)Y'+oY=0
se conocen como
polinomios generalizados de Laguerre.
Su ortogonalidad viene dada
3.6.6 Polinomios de Laguerre
Las soluciones de la ecuacin diferencial de Laguerre:
x'y+(1-x)y'iny:0
Se conocen como polinomios de Laguerre. Se trata del caso
particular a=0
de los polinomios generalizados de Laguerre
3.6.7 Polinomios de Jacobi
1
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
I
por:
J
Ln(x)Lm(x) x" e-'dx=o m+n
-1
t9l"
(1 - 2)"*"-i
dx
I
I
I
I
t_
1
f(a+
;)r(n+2a)
G(n,a,x):
pretty(simple(maple('T(7,x)')))
7
64x -772x
3
+56x -7x
CAPiTULO 3. ECUACIONES DIFERENCIALES DE ORDEN SUPERIOR 51
pretty(smple(maple('P(6,x)')))
23t 6 315
---x-*--x
t6 16
pretty(simple(maple('H(5,x)')))
53
32x -16Ax
+720x
pretty(si m ple(maple('L(5,x)')))
234
1-5x+5x -5/3x
+5/24x
-7/720x
3.7 FIINCIONIES DE AIRY Y BESSEL
Reciben el nombre de funciones de Airy las soluciones
linealmente independientes de la ecuacin diferencial lineal de segundo
orden:
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 ecuacin
diferencial de Airy.
BesselJ(n,z) y BesselY(n,z)
Dan soluciones independientes de !a ecuacin
diferencial de Bessel.
Bessell(n,z) y BesselK(n,z)
Dan soluciones independientes de la ecuacin
diferencial 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. Obtendremos
dos soluciones linealmente independientes de la siguiente forma:
pretty(simple(maple('BesselJ (1 /2,x)')))
2 sin
(x)
1/2 1/2
pix
pretty(simple(maple('BesselY(1 /2,x)')))
1/2
2 cos (x)
1/2 1/2
MGS
Captulo 4
ECUACIONES DIFERENCIALES POR
METODOSAPROKMADOS
4.1 BCUACIONES DE ORDEN Y GRADO SUPERIOR A UNO,
LINEALES YNO LINEALES, NMTONOS APRO)ilMADOS
Cuando los mtodos conocidos de resolucin de de ecuaciones
diferenciales y sistemas no ofrecen solucin, se suele recurrir a mtodos
de aproximacin. Dentro de los mtodos aproximados los hay simblicos y
numricos. Los simblicos permiten obtener soluciones algebricas
aproximadas, y el ms representativo es el de la series de Taylor. Los
numricos permiten obtener conjuntos de puntos de las soluciones, que
posteriormente pueden ajustarse por cualquier mtodo algebrico
(interpolacin, regresin,....) a la curva que mejor les aproxime. Dicha
curva ser una solucin aproximada de la ecuacin diferencial. Entre de
los mtodos numricos ms comunes se halla el mtodo de Runge Kuta.
El uso ms corriente de los mtodos aproximativos es la resolucin
de ecuaciones y sistemas de ecuaciones diferenciales no lineales de orden
y grado superiores a uno, siempre que la solucin exacta no sea posible de
obtener mediante otros mtodos.
4.2 EL VTTOOO DE LAS SERIES DB TAYLOR
Este 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'
del
comando maple('dsdve'),
que permite obtener este tipo de soluciones. Su
sintaxis 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 sintaxis
es 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 2
y(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 ))
3
1/7920 (7920
_C1
x - 80
_C1
x +
_C1
6
+ 192A
_C2
1og(x) o(x )
+ 1920
6 1/2
+ 7920
_C2
o(x )) / x
5
x + 1920
_C1
_c2
- 240
_c2
5
x 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
e
b
2
y(x)
:7+x-x
+x
4
-3/2x
+5/2x
6
+ 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) t
3
+ (1/2 D(x) (0) + 7/3 x(0) - 1/3) t + (- 1/6 D(x) (0)
- 1/8 x(A) + 1/8) t
56
+ (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) t
4
+ (7/8 D(x) (0) + 1/12 x(A) - 1/12) t
56
+ (- 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-KUTTA
El mtodo de Runge-Kutta permite obtener un conjunto de puntos
de la solucin aproximada de una ecuacin diferencial. Maple aporta la
opcin numeric del comando maple('solve') que posibilita
el clculo de
soluciones numricas aproximadas de ecuaciones diferenciales. su
sintaxis 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
| )
end
Ahora 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)')l
an:
{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
tc
rla
de
Su
I
lx),
D)),
Figura 4-1
Se observa que la figura es de tipo parablico, con lo que podemoa
ajustar la nube de puntos a una parbola. Dicha parbola ser la solucin
simblica 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 DIFERENCIALES
Y ECUACION{ES EI\ DIFERENCIAS FIMTAS
5.1 SISTEMAS DE BCUACIONBS LINEALES HOMOCWNAS
COI{ COEFICM,NTES CONSTANTES
Matlab resuelve directamente este tipo de sistemas sin ms que
utilizar 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}
de
matriz A del sistema (k=1
,2,...n)
y todos los i,k distintos.
Si existiese algun )"k
=ak+bki,
nmero complejo, genera la
siguiente componente de la solucin general:
)"i t n
T
i=1
ck1
wk1
)"k t .k t
Wk1 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 solucin
general, de la forma:
),it
).it
2 Xil
k
ci 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
no
homogneas 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:
-1
Xp
=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 t
VK
CAPTULO 5. SISTEMAS DE ECUACIONES DIFERENCIALES 61
-1
X
=
o(t)c
+
o(t)j o(t) F(0 dt
Este mtodo es la generalizacin a sistemas de ecuaciones del
mtodo de variacin de parmetros para las ecuaciones simples.
Matlab ofrece directamente la solucin de estos sistemas con el
comando dsolve o maple('dsolve'), siempre y cuando pueda obtener la
forma algebrica de las soluciones de las integrales que aparecen en la
solucin.
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 FIMTAS
Matlab 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+C
2*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 PROGRAMACION
MATLAB puede utilizarse como un lenguaje de programacin de alto
nivel que incluye estructuras de datos, funciones, instrucciones de control
de flujo, manejo de entradas/salidas e incluso programacin orientada a
objetos.
Los programas de MATLAB suelen escribirse en ficheros
denominados M-ficheros. Un M-fichero no es ms que cdigo MATLAB
(scripts) que simplemente ejecuta una serie de comandos o funciones que
aceptan argumentos y producen una salida. Los M-ficheros se crean
utilizando el editor de texto, tal y como ya se vio en el Captulo 2.
6.2 BDITOR DE TEXTO
Para 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 MATLAB
o mediante File+ New-+ M-file en el escritorio de MATLAB (Figura 6-1) o
en la ventana de comandos (Figura 6-2). El Editor/Debugger se abre con
un fichero en blanco en el cual crearemos el M-fichero, es decir, un fichero
con 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 de
MATLAB (Figura 6-1) o, alternativamente, se puede utilizar el comando
Open en la ventana de comandos (Figura 6-2). Tambin se puede abrir el
Editor/Debugger haciendo clic con el botn derecho del ratn en el interior
de la ventana Current Directory y eligiendo New -+ M-file en el men
emergente resultante (Figura 6-4). La opcin Open de este men abre un
M-fichero existente. Se pueden abrir varios M-ficheros simultneamente,
en cuyo caso aparecern en ventanas diferentes.
fr-#rrumm
f * couuicarions ror
-$cnnt.ar stscet rdiW
ii;$nuo aE$ieil.iutr 'j
lenffie
+'],out*.e" ToIbo* :
otld'
Figura 6-l
I Dr\...12\worklmatri1,trc
2 Dr\,..ltinnnEelBtrubond.m
I D:\,..\Finan.elsudsr,m
4 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 del
Editor/Debugger.
,{}ru ruete trf-ehe*o *ub
Ahrir E-$iah*ro v. sxiitsat*
*rer&-i*hsrc
s,,rqqfi+zg:+d-tei*s ee rn S;[-s&ere
A 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 no
tiene argumentos de entrada ni de salida. sencillamente est formado por
instrucciones MATLAB que se ejecutan secuencialmente y que podran
submitirse igualmente en serie en la ventana de comandos. Los scripts
operan con datos existentes en el espacio de trabajo o con nuevos datos
creados por el propio script. cualquier variable que se cree mediante un
script permanecer
en el espacio de trabajo y podr utilizarse en clculos
posteriores
despus de finalizar el script.
A continuacin se presenta
un ejemplo de script que genera varias
curvas en polares representando ptalos
de flores. Una vez escrita la
sintaxis del script en el editor (Figura 6-6), se guarda en la librera de
trabajo (work) y simultneamente se ejecuta, haciendo clic en er botn
JE
o 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'fulerfttJ
IEI;"'li*n
paato de mrt*
I F1*m*u
liaee e*Ml d+ h{-iehero
I I
'
&so d* eiecueioa e Es fuaeie
I I I .Peuae*reaF;ireiar
I I I t 1Ei**rahs**nrs*errarmrt*
!*
#*\.e@*
**6:1*;'
;
Fe:Et*.{**et
=i*;'ta;
ir i
Figura 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 Y
FEVAL
Ya sabemos que MATLAB dispone de gran variedad de funciones
para usar en el trabajo cotidiano con el programa. Pero, adems, el
programa ofrece la posibilidad de definir funciones a medida. El camino
ms usual para definir una funcin a medida es escribir su definicin en un
fichero texto, denominado M-fichero, que ser permanente y que, por lo
tanto, permitir el uso posterior de la funcin siempre que se requiera.
MATLAB es habitualmente utilizado en modo comando (o
interactivo), 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.
pero
MATLAB tambin permite
la ejecucin de conjuntos de comandos en modo
batch, en cuyo caso se submiten secuencialmente un conjunto de
comandos escritos previamente
en un fichero. Este fichero (M-fichero)
ha
de ser almacenado en disco con la extensin ".m"
en el camino de
subdirectorios de MATLAB, utilizando cualquier editor ASCII o Ia subopcin
M-file de Ia opcin New del men File de ra barra superior de mens, la
cual nos lleva a un editor de texto que permitir
escribir las lneas de
comandos y guardar el fichero con un determinado nombre. La opcin
open M-File del men File de la barra superior de mens permite
editar
cualquier M-fichero preexistente.
Para ejecutar un M-fichero basta con teclear su nombre (sin
extensin) en modo interactivo sobre la ventana de comandos y pulsar
Enter. MATLAB interpreta secuencialmente todos los comandos o
sentencias incluidos en las diferentes lneas del M-fichero y los ejecuta.
Normalmente no aparecen en pantalla los riterales de los comands que
MATLAB va interpretando, salvo que se active er comando echo on, y slo
se van viendo los resultados de las ejecuciones sucesivas de los
comandos interpretados. Normalmente, el trabajo en modo batch es til
cuando se procesan
conjuntos muy largos de comandos de escritura
tediosa y con propensin
a cometer errores, pero la mayor utilidad se
presenta
en Ia automatizacin de procesos.
Adems, en las lneas de un
M-fichero se pueden
introducir textos explicativos y comentarios,
empezando cada lnea al efecto por
el smbolo %. con el comando Help se
accede al texto explicativo de un M-fichero.
El comando function permite la definicin de funciones a medida en
MATLAB, 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-fichero
para su uso posterior.
Es til tambin introducir algn texto explicativo en la
sintaxis de la funcin (entre
o/o),
al cual se acceder con el comando de
ayuda Help.
cuando los parmetros
de salida son ms de uno, se sitan entre
corchetes y separados por
comas. Si los parmetros
de entrada son ms
de 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 los
parmetros de salida. Cada comando o instruccin del cuerpo suele ir en
una lnea que finaliza con una coma o con un punto y coma en caso de
que se definan variables (para evitar repeticiones en las salidas al ejecutar
la funcin). La funcin se guarda en el M-fichero de nombre
nombre_funcin.m.
A continuacin vamos a definir la funcin funl(x)=n3-2x+cosx,
creando el correspondiente M-fichero de nombre fun1.m. Para introducir
dicha sintaxis en MATLAB se selecciona la subopcin M-file de la opcin
New del men File de la barra superior de mens (o se hace clic en el
botn D Oe la barra de herramientas de MATLAB), la cual nos lleva al
editor de texto MATLAB Editor/Debugger
que permitir escribir las lneas
de comandos relativas a la sintaxis de la funcin, tal y como se indica en la
Figura 6-11.
?.T:.rlt i.:ie e s1B fu.ri* Bieplt
p=x^3-:*x+cqE (xi

;;::;t:
Figura 6-11
Para guardar de forma definitiva dicha sintaxis en MATLAB se
selecciona la opcin Save del men File de la barra superior de mens del
MATLAB Editor/Debugger, la cual nos lleva a la caja de dilogo Guardar de
la Figura 6-12, mediante la cual podemos guardar nuestra funcin con el
nombre deseado y en el subdirectorio
que se indique como ruta en el
campo Nombre de archivo. Tambin puede hacerse clic en el botn
'l
o
utilizar la opcin Save and run del men Debug.
Se recomienda guardar las funciones como ficheros de nombre igual
al nombre de la funcin y en el subdirectorio de trabajo por defecto de
MATLAB C :\MATLAB6pI\work. Precisamente es la situacin
que presenta
el programa por defecto al intentar guardar cualquier funcin a medida y al
utilizar el icono
JE
o la opcin Save and run del men Debug para ejecutar
y guardar simultneamente el M-fichero actual del editor.
e
atr
le
el
ol
o
al
le
ta
al
ar
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, se
puede utilizar desde la ventana de comandos. Por ejemplo, para hallar el
valor de la funcin en 3nl2 escribimos sobre la ventana de comandos usual
de MATLAB:
) funl (3*p/2)
ans
-
95.2274
Para pedir ayuda sobre la funcin anterior (suponiendo que fue
previamente introducida como comentario al elaborar el M-fichero que Ia
define) se utiliza el comando help, como sigue:
>) heJ-p funl
Definicin de una funcin simple
La evaluacin de una funcin en sus argumentos (o parmetros
de
entrada) tambin puede realizarse a travs del comando feval, cuya
sintaxis es la siguiente:
Evala lafuncin F (M-fichero F.m) en los
argumentos especificados argl
,
arg2,...,argn
72 ECUACIONES DIFERENCIALES CON MATLAB
Como ejemplo construimos un M-fichero de nombre
que contiene la funcin ecuacion2, cuyos argumentos
coeficientes de la ecuacin de segundo
grado ax2+bx+c
salidas son sus dos soluciones
(Figura 6-13)'
ecuacion2.m
son 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,31
x7:
-1.0000
+ 7.4742i
x2:
-1.0000 -
1.4142i
Tambin se
Puede
resolver
sigue:
>>
[x1 ,x2] =ssr"cion2
(l
,2,31
x7:
-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 resuefve
ax^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 de
entrada) cuando son cadenas se realiza a travs del comando eval, cuya
sintaxis es la siguiente:
eval(expresin) Ejecuta la expresin cuando es una cadena
Como ejemplo evaluamos una expresin carcter que define la
matiz mgica de orden 4.
>> n=4;
)) eval (
['M'
num2str (n)
' =
magic (n)
' ] )
M4:
6.5 VARIABLES LOCALES Y GLOBALES
Normalmente, cada funcin de MATLAB definida como un M-fichero
contiene sus variables como variables locales, es decir, como variables
que tienen su efecto en el interor del M-fichero, separadamente de otros
M-ficheros y del espacio de trabajo base. No obstante, es posble
definir
varables en el interior de M-ficheros de modo que tengan efecto
simultneamente en el interior de otros M-ficheros y en el propio espacio
de trabajo base. Para ello es preciso definir las variables como globales
con 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 funcin
es accesible separadamente para el resto de las funciones y para el
espacio 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
162313
511108
97672
474757
74 ECUACIONES DIFERENCIALES CON MATLAB
la matriz vaca. Si ya existe una variable con el mismo nombre que la que
se est definiendo como global, MATLAB emite un mensaje de peligro y
cambia el valor de la variable a enlazar como global. Es conveniente
declarar una variable como global en cada funcin que necesite acceso a
ella, y tambin en la lnea de comandos, para tener acceso a ella desde el
espacio de trabajo base. En el interior de las funciones el comando
GLOBAL se sita al principio (antes de cualquier ocurrencia de la variable).
Como ejemplo, supongamos que se quiere estudiar el efecto de los
coeficientes 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 la
Figura 6-14.
Si posteriormente
sobre la lnea de comandos escribimos lo
siguiente:
)) global ALPIA BETA
ALPHA
=
0.01
BETA
=
0.02
ya se podrn utilizar estos valores globales para
o y
B
en el interior
del 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-15
6.6 TIPOS DE DATOS
En MATLAB hay 14 tipos de datos diferentes que se representan en
la Figura 6-'16.
ARFIAY
funetion handle
int8. uint,
intl , uintl Sn
int33, uint32
srngJ-e doubl-e
I
Epar
Figura 6-16
A continuacin se detallan los distintos tipos de datos:
Tioo de dato Eiemplo Descripcin
single 3*10^38 Precisin numrica simple. Requiere
menor almacenamiento que la doble
precisin, pero es menor. Este tipo de
datos no debe usarse en operaciones
matemticas.
double 3*10^300
5+6i
Doble precisin numrica. Es el tipo de
variable 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 32
bits de longitud. Posibilitan usar
cantidades enteras con manejo eficienfe
de memoria. Este tipo de datos no debe
us ars e en ooeraciones matemtic as.
char 'HeIIo' Caracteres (cada carcter tiene una
lonsitud 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 similar
tamao)
user class inline
('sin (x)
') Clase MATLAB
(creada con
funciones)
java class
java. awt. Erame Clase Jwa (defrnida en API o propia con
.Iava)
function
handle
@humps Maneja
funciones
MATLAB. Puede ser
pasada en una lista de argumentos
Y
evaluada con fevaf.
6.7 CONTROL DE FLUJO: BUCLES FOR, WHILE E IF
ELSETF
El uso de funciones recursivas, condcionales
y definidas a trozos
es muy habitual en matemticas. Para la definicin de este tipo de
funciones eS necesario el manejo de bucles. Como eS natural, la definicin
de las funciones se har a travs de M-ficheros.
6.7.1El bucle FOR
MATLAB dispone de su propia versin de la sentencia DO (definida
en la sintaxis de la mayora de los lenguajes de programacin). Esta
sentencia
permite ejecutar de forma repetitiva un comando o grupo de
comandos 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
:
expresin
comandos
end
El bucle siempre empieza con la clusula for y termina con la
clusula end, e incluye en su interior todo un conjunto de comandos que se
separan por comas. Si algn comando define una variable, se finaliza con
punto y coma para evitar repeticiones en la salida. Normalmente, los
bucles se utilizan en la sintaxis de M-ficheros. Veamos un ejemplo (Figura
6-17):
Figtra 6-17
En este bucle hemos definido la matriz de Hilbert de orden (m,n). Si
guardamos su contenido como un M-fichero de nombre matriz.m,
podremos construir cualquier matriz de Hilbert posteriormente ejecutando
el M-fichero y especificando los valores para las variables m y n
(dimensiones de la matriz) como se indica a continuacin:
)) M=matrz(4,51
M-
7 - 0000
0.5000
0.3333
0.2500
0 . s000
0.3333
0.2500
0.2000
0.3333
0 .2s00
0.2000
0.1567
0-2500 0-2000
0.2000 0.1667
0.1667 0.7429
0.1429 0.7250
78 ECUACIONES DIFERENCIALES CON MATLAB
6.7.2 El bucle WHILE
MATLAB 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 de
comandos un nmero determinado de veces mientras se cumple una
condicin lgica especificada. La sintaxis general de este bucle es la
siguiente:
while condicin
comandos
end
El bucle siempre empieza con la clusula while seguida de una
condicin, y termina con la clusula end, e incluye en su interior todo un
conjunto de comandos que se separan por comas y que se ejecutan
mientras se cumple la condicin. Si algn comando define una variable, se
finaliza con punto y coma para evitar repeticiones en la salida. Como
ejemplo escribimos un M-fichero (Figura 6-18) que se guarda con el
nombre while1.m, cuya ejecucin permite calcular el mayor nmero cuyo
factorial 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 END
MATLAB, 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 si
se cumplen determinadas condiciones. La sintaxis del bucle es la
siguiente:
if condicin
comandos
end
En este caso se ejecutan los comandos si la condicin es cierta.
Pero la sintaxis de este bucle puede ser ms general.
if condicin
comandosl
else
comandos2
end
En este caso se ejecutan los comandosl si la condicin es cierta, y
se ejecutan los comandos2 si la condicin es falsa.
Las sentencias lF, al igual que las sentencias FOR, pueden ser
anidadas. Cuando se anidan varias sentencias lF se utiliza la sentencia
ELSEIF, cuya sintaxis general es la siguiente:
if condicinl
comandosl
elseif condicin2
comandos2
elseif condicin3
comandos3
En este caso se ejecutan los comandosl si condicin1 es cierta, se
ejecutan los comandos2 si condicin1 es falsa y condicin2 es cierta, se
ejecutan los comandos3 si condicin'l y condicin2 son falsas y condicin3
es cierta, y as sucesivamente.
'else
end
80 ECUACIONES DIFERENCIALES CON MATLAB
La sintaxis anidada anterior es equivalente, pero ms rpida de
ejecucin, a la sintaxis sin anidar siguiente:
if condicinl
comandosl
else
if condicin2
comandos2
else
if condicin3
comandos3
else
end
end
end
Veamos como ejemplo (Figura 6-19) el M-fichero de nombre
elsel.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 impar
A:
n es neqativo
6.7.4 SWITCH
Y
CASE
La 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 esvalorl
case valor2
sentencias
'%
Ejectta si expresin es valor2
otherwise
sentenciass %o Ejeatta si expression no cumple
end
%o ningn caso
A continuacin se
Presenta
devuelve -1, 0, 1 u otro nmero segn
un ejemplo de una funcin
que
sea 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{TINUE
La instruccin continue
pasa el control a la iteracin sguiente en un
bucle for o while en el cual aparece ignorando las restantes instrucciones
en 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.m
ignorando las lneas blancas y los comentarios.
Seguidamente ejecutamos el M-fichero.
)) continuel
25 fineas
6.7.6 BREAK
La instruccin break finaliza la ejecucin de un bucle for o while en
el cual aparece continuando la ejecucin en la siguiente instruccin fuera
del 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 cuando
se 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.
>> breakl
';FFT Discrete Fourier transforn.
2; FFT(X) is the discrete Fourier transform
(DFT) of vector X. For
Z matrices, the FFT operation is appTied to each column. For N-D
* arrays, the FtrT operation operates on the fitst non-singleton
Z dlmension.
6
* FFT(X,N) is the N-po1nt FFT, padded with zeros 1f X as
-ess
3 than N points and truncated if it has more.
z
Z FFT(X,[],DIM) or trFT(X,N,DIM) applies the FFT operation across the
3 dlmension DIM.
z
& tror Tenqth N input vector x, the DET is a length N vector X,
Z with efements
ZN
Z X(k)
:
sum x(n)*expr-i*2*pi*(k-1)*(n-7)/N), 1 <:k <:N.
& n:7
* The inverse DFT (conpted by IFFT) is qiven by
ZN
& x(n)
: (1/N) sun X(k)*exp(
j*2*pi*(<-1)*n-1)/N), 7
(:
n <: N.
Z k:1
Z
* See afso IFFT, FFT2. IFtrT2, FETSHIFT.
84 ECUACIONES
DIFERENCIALES.CON
MATLAB
tty,
instruccin,
instruccin,
catch,
instruccin,
.. .,
instruccin.
end
6.7.8 RETURN
La instruccin
return finaliza la secuencia actual de comandos
y
devuelve el control a la funcin invocada o al teclado' A continuacin
se
pl""'"ntu un ejemplo
(Figura 6-23)
que calcula el determinante
de una
matizque
no es vaca. Si-la matriz es vaca Se obtene el valor 1'
Posteriormente
ejecutamos
la funcin
para una matriz no vaca'
[=[-1,-1,! ;L,0,L;L,L,Ll
6.7.7 TRY ... CATCH
Las instrucciones
entre try
y catch se ejecutan mientras no ocurra un
error. La instruccin
lasterr s utiliza
para ver loa causa del error' La
sintaxis
general de la instruccin es la siguiente:
Figura6-23
A:
CAPTLO 6 CALCULO NUMERICO EN MATLAB. APLICACIONES A LAS ECUACIONES... 85
-7-71
707
117
>> detl (A)
ans
-
2
Ahora aplicamos la funcin a una malriz vaca.
>> F[]
D-
tl
>> detl (B)
ans
:
.L
6.8 SUBFUNCIONES
Las funciones definidas mediante M-ficheros pueden contener cdigo
para ms de una funcin. La funcin principal en el M-fichero se denomina
funcin primaria, que es precisamente la funcin que invoca el M-fichero. Pero
adicionalmente puede haber subfunciones colgando de la funcin primaria y
que slo son visibles para dicha funcin primaria o para otra subfuncin dentro
del mismo M-fichero. Cada subfuncin comienza con su propia lnea de
definicin de funcin. En la Figura 6-24 se presenta un ejemplo.
Figtra6-24
86 ECUACIONES DIFERENCIALESCON MATLAB
Las subfunciones mean y median calculan la media y la mediana de
la lista de entrada. La funcin primaria newstats determina la longitud de la
lista y llama a las subfunciones
pasndoles la lista de longitud n. A la hora
de ejecutar la funcin principal, basta darle su entrada correspondiente
(una lista de valores para los que se calcular su media y su mediana) y
las llamadas a las subfunciones Se realizan automticamente tal y como se
ve a continuacin.
>>
[media,
mediana]
=
neytstats (
[10 ,20,3,4,5,67)
media
:
I
mediana
:
5.5000
6.9 ECUACIONES DIFERENCIALES ORDINARIAS
MEDIANTE MTODOS DE CLCULO I{UMRICO
Obtener soluciones exactas de ecuaciones diferenciales ordinarias
no eS una tarea sencilla. Existen diferentes mtodos para obtener
resultados numricos aproximados
para las soluciones de ecuaciones
diferenciales ordinarias, entre los que destacan el mtodo de Euler, el
mtodo de Heun, el mtodo de las series de Taylor, los mtodos de
Runge-Kutta (implementados en el mdulo bsico de MATLAB), el mtodo
de Adams-Bashforth-Moulton, el mtodo de Milne y el mtodo de
Hamming.
6.9.1Mtodo de Euler
Sea
[a,b]
el intervalo en el que queremos resolver la ecuacin
diferencial y'=f(t,y) con y(a)=y0. Dividimos el intervalo
[a,b]
en M
subintervalos del mismo tamao usando la particin dada por los puntos tk
=a+kh
k=0,1, ..., M
"on
=(b-ayM. El mtodo de Euler obtiene las
aproximaciones a la solucin de la ecuacin diferencial mediante la
iteracin yk+1
=
yk+hf(tk, yk) k=0,1, ..., M-1.
El mtodo de Euler puede implementarse mediante el M-fichero de
laFigura6-24.
i
I
I
l
L
CAPTULO 6 CALCULO NUMERICO EN MATLAB. APLICACIONES A LAS ECUACIONES... 87
Figwa6-24
6.9.2 Mtodo de Heun
Sea
[a,b]
el intervalo en el que queremos resolver la ecuacin
diferencial y'=f(t,y) con y(a)=yO. Dividimos el intervalo
[a,b]
en M
subintervalos del mismo tamao usando la particin dada por los puntos tk
=a+kh
k=0,1, ..., M con h=(b-a)/M.
El mtodo de Heun obtiene las aproximaciones a la solucin de la
ecuacin diferencial mediante la iteracin yk+1
=
yk+h(f(tk, yk)+ f(tk+1, y[+
f(tk, yk)))/2 k=0,'1, ..., M-1.
El mtodo de Heun puede implementarse mediante el M-fichero de
la Figura 6-25.
88 ECUACIONES DIFERENCIALESCON MATLAB
Figlora6-25
6.9.3 Mtodo de las series de Taylor
sea
[a,b]
el intervalo en el que queremos resolver la ecuacin
diferencial
y'=f(i,y) con y(a)=y0. Dividimos el intervalo
[a,b]
en M
subintervaloi Oel mismo tamao usando la particin dada
por los puntos tk
=a+kh
k=0,1, ..., M con =(b-a)/M.
El mtodo de las series de Taylor (vamos a considerarlo de orden 4)
obtiene las aproximaciones a la solucin de la ecuacin diferencial
evaluando
y',
Y",
y"' e y"" mediante sus respectivos desarrollos en series
de Taylor de orden 4.
El mtodo de las series de Taylor puede implementarse mediante el
M-fichero de la Figura6-26.
t-
CAPTULO 6 CALCULO NUMERICO EN MATLAB. APLICACIONES A LAS ECUACIONES.., 89
Figxa6-26
Como ejemplo resolvemos la ecuacin diferencial y'(t)
=
(t-y)12 en
[0,3]
con y(0)=1 mediante los mtodos de Euler, Heun y series de Taylor.
Comenzaremos definiendo la funcin f(t,y) mediante el M-fichero de
la Figura 6-27 .
Figxa6-27
La solucin de la ecuacin por el mtodo de Euler en
calcular como sigue:
)) E=euler('dif1',O,3,1,100)
100 pasos se
90 ECUACIONES DIFERENCIALES CON MATLAB
E_
0
0 . 0 3 0 0 0 0 0 0 0 0 0 0 0 0
0 . 0 6 0 0 0 0 0 0 0 0 0 0 0 0
0 . 0 9 0 0 0 0 0 0 0 0 0 0 0 0
0.12400000000000
0.15000000000000
0.18000000000000
,. ttooooo0000000
2.88000000000000
2.91000000000000
2.94000000000000
2.97004000000000
3.00000000000000
1.00000000000000
0.98500000000000
0.97067s00000000
0.95707487500000
0 . 9 4 4 0 0 9 6 s 1 B 7 5 0 0
0 . 9 3 1 6 4 9 5 0 7 0 9 6 B I
0.97992476449042
7.56377799005970
1 .58307732020827
7. 60252525040509
7. 62213737764907
7.64790537107428
1.66182673140876
Esta solucin puede graficarse (Figura 6-28) como sigue:
>> plot (E ( :
,2) )
La solucin de la
calcular como sigue:
Figura 6-28
ecuacin por el mtodo de Heun en 100 pasos se
CAPruLO 6 CALCULO NUMERICO EN MATLAB. APLICACIONES A LAS ECUACIONES... 91
)) H=heun('dif1'
r0r3r1,100)
n-
0
0 . 0 3 0 0 0 0 0 0 0 0 0 0 0 0
0 . 0 6 0 a 0 0 0 0 0 0 0 0 0 0
0 . 0 9 0 0 0 0 0 0 0 0 0 0 0 0
0.12000000000000
2.88000000000000
2.91000000000000
2.94000000000000
2.97000000000000
3 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1.00000000000000
0 . 9 B 5 3 3 7 5 0 0 0 0 0 0 0
0.97133997296875
0.95799734007443
0 - 94530002967496
1 . 5 9 0 8 2 2 0 9 3 7 9 4 5 4
7.67023972987327
7.62987497089478
7.64954529740884
1 . 6 6 9 4 2 I 5 6 0 I B 2 9 9
1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0.98533581882813
0.971i366006828i
0 . 957 9924455544i
0 - 94529360082516
1.59078327648360
1.61020109213866
La solucin mediante el mtodo de las series de Taylor exige definir
previamente la funcin df
= [y'
y" y"' y""] mediante el M-fichero de la
Figura 6-29.
Figtura6-29
La ecuacin diferencial se resolver por Taylor mediante la sintaxis:
>> T=taylor (
'df ' ,0 ,3,
1
,100)
0
0 . 0 3 0 0 0 0 0 0 0 0 0 0 0 0
0.06000000000000
0 . 0 9 0 0 0 0 0 0 0 0 0 0 0 0
2 - 88000000000000
2.91000000000000
92 ECUACIONES DIFERENCIALE CON MATLAB
Comenzamos definiendo la funcin f(t,y) mediante el M-fichero de la
Figura 6-30.
Figura 6-30
A continuacin resolvemos la ecuacin diferencial
Euler en 20 pasos mediante la sintaxis siguiente:
)> E=eu]-er ('df2
' ,0,0
.8
,L ,201
L-
por el mtodo de
2.94000000000000
2.97000000000000
3.00000000000000
0
0.04000000000000
0.08000000000000
0.12000000000000
0.16000000000000
0.20000000000000
0.2400000000a000
0 .28000000000000
0. s2000000000000
0.36000000000000
0.40000000000000
0.44400000000000
0.48000000000000
0.52000000000a00
0.56000000000000
0.60000000000000
1.
7.
1.
62977645599332
64950702245046
66939048087422
1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1.04000000000000
1.08332800000000
7.73052798222336
7.78222772296696
1.23915821852503
7.30217874274655
7.372309s2120649
7.45077485808625
1.53906076564045
1.63899308725380
7 .75284502085643
7 . 8 8 3 4 B 7 6 4 7 5 4 2 0 I
2 - 03460467627982
2 .27100532382941
2.419097105s0949
CAPIULO 6 CALCULO NUMERICO EN MATLAB. APLICACIONES A LAS ECUACIONES.,. 93
0 . 6 4 0 0 0 0 0 0 0 0 0 0 0 0
0 . 6 8 0 0 0 0 0 0 0 0 0 0 0 0
0 . 7 2 0 0 0 0 0 0 0 0 0 0 0 0
0.76000000000000
0.80000000000000
2.66757777657970
2.96859267586445
3.339590s006230s
s.8064408s566367
4 . 4 0 9 1 0 4 5 0 9 0 7 9 9 9
La solucin puede graficarse (Figura 6-31) como sigue:
plot (E (:
,21I
Figura 6-31
Captulo 7
ECUACIONES EN DIFERENCIAS CON
VALORES IMCIALES, VALORES EN LA
FRONTERA Y EN DERIVADAS PARCIALES
7.1 SOLUCIN NUMRICA DE ECUACIONES
DIFERENCTALES
MATLAB dispone de comandos en su mdulo bsico que permiten
resolver numricamente ecuaciones diferenciales ordinarias (ODEs),
ecuaciones diferenciales algebraicas (DAEs) y resolucin de problemas
con valores en la frontera oDEs. Tambin es posible la resolucin de
sistemas de ecuaciones diferenciales con valores en la frontera y
ecuaciones diferenciales en derivadas parciales parablicas y elpticas.
7 .2 ECU ACIONES DTFERENCIALBS ORDINARIAS
CON VALORES INICIALES
Una ecuacin diferencial ordinaria contiene una o ms derivadas de
la variable dependiente y respecto a la variable independiente t. una
ecuacin diferencial ordinaria de primer
orden con valores iniciales para la
variable independiente puede representarse como:
96 ECUACIONES DIFERENCIALE CON MATLAB
.3': f(,3)
y(f6l:
3,n
Se puede generalizar el problema anterior para el caso de que y
sea un vector y
=
(y1
, Y2,
..., yn).
Los comandos del mdulo bsico de MATLAB relativos a ecuaciones
diferenciales ordinarias y algebraicas con valores iniciales se presentan en
la tabla siguiente:
La sintaxis comn para los 7 comandos anteriores es la siguiente:
IT,
Y]
:
solver (odefun, tspan, y0)
IT,Y]
:
solver (odefun,tspan, y0, opciones)
IT,Y]
:
sofver (odefun,tspan, y0ropciones,p1,p2. . .)
ITrYrTEYE,
IE]
:
solver (odefun,tspanry0ropciones)
En la sintaxis anterior solver puede ser cualquiera de los comandos
ode45, ode23, odel 13, ode15s, ode23s, ode23t u ode23tb.
El argumento odefun evala el lado derecho de la ecuacin
diferencial o sistema escrita en la forma y'=f(t,y) o M(t,y)y'=f(t,y), donde
M(t,y) se denomina matriz de masa. El comando ode23s slo puede
resolver ecuacones con matriz de masa constante. Los comandos ode15s
y ode23t pueden resolver ecuaciones con matriz de masas singular y
ecuaciones diferenciales algebraicas. El argumento tspan es un vector que
especifica el intervalo
[10,
tf] de integracin (para obtener soluciones en
valores especficos de t, todos crecientes o decrecientes, se usa tspan =
[10,
t1, .,., tfl).El argumento y0 especifica un vector de condiciones
iniciales. Los argumentos p1, p2,... son parmetros
opcionales que se
Comando Clase de
problema que
resuelve. mtodo numrico v sintaxis
ode45 Ecuaciones diferenciales comunes
por
el mtodo de Runse-Kutta
ode23 Ecuaciones diferenciales comunes
por
el mtodo de Runse-Kutta
odel13 Ecuaciones diferenciales comunes
por
el mtodo de Adams
odel5s Ecuaciones diferenciales ordinarias y algebraicas mediante NDFs
BDFs)
ode23s Ecuaciones diferenciales ordinarios
por
el mtodo de Rosenbrock
ode23t Ecuaciones diferenciales ordinarias y algebraicas por la regla
trapezoidal
ode23tb E cuaciones diferenciales ordinarias mediante TR-B DF 2
CAPTULO 7. ECUACIONES DIFERENCIALES CON VALORES INICIALES... 97
pasan a odefun. El argumento opciones especifica opciones adicionales de
integracin mediante el comando odeset que pueden encontrarse en el
manual del programa. Los vectores T e Y presentan los valores numricos
de las variables independiente y dependiente encontrados para las
soluciones.
Como primer ejemplo hallamos las soluciones en el intervalo
10,121
del sistema de ecuaciones diferenciales ordinarias siguiente:
., ,^\ fi
/
rr- -,2-, 1 -vr(O)=0
.?'o
:
-3,r
J'r J2(0) =
I
- t*
3'*
:
-0"51srse ss(l =
1
Para ello definimos una funcin de nombre sistemal en un M-
fichero, con la finalidad de almacenar en ella las ecuaciones del sistema.
La forma de definir esta funcin es partir de un vector columna con tres
filas vaco, para asignarle posteriormente tres componentes que
constituyen la sintaxis de las tres ecuaciones (FiguraT-1).
Figura 7-l
A continuacin resolvemos el sistema tecleando en la ventana
comandos lo siguiente:
>>
[T,Y] =
ode45(Gsistemal,lO L2),[0 1 1])
de
98 ECUACIONES DIFERENCIALES CON MATLAB
0 .0001
0.0001
0.0002
0.0002
0.0005
17.6736
71-7424
77 - 8772
12.0000
Y-
0
0 .0007
0 .0001
0 .0002
0 - 0002
0.0005
0 .0007
0.0070
0 .0012
0 .002s
0.0037
0.0050
0.0062
0 .0725
0.0188
0 - 0257
0 - 0313
0..0627
0.8594
0.7257
0.5228
0 .2695
-0 - 0778
-0
.29i6
-0 - 4098
-0.5769
-0.6735
-0.6987
1.0000 1.0000
1 .0000 7.0000
1 .0000 1.0000
1.0000 1.0000
1 .0000 7.0000
1 .0000 7.0000
1.0000 1.0000
1.0000 1.0000
1.0000 1.0000
7.0000 1.0000
1.0000 1.0000
1.0000 7-0000
1 .0000 1.0000
0.9999 1.0000
0.9998 0.9999
0.9997 0.9998
0.9995 0.9997
0.9980 0 - 9990
-0.5705
0.7894
-0.6876
0.8552
-0.8524
0.9287
-0.96i1
0.9815
-0.9990
0.9992
-0.9540
0.976i
-0.9702
0 - 9548
-0.85s9
0.9279
-0.7874
0.8974
-0-7128
0.8650
Para interpretar mejor los resultados, la solucin numrica anterior
puede graficarse (Figura 7-2) mediante la siguiente sintaxis:
CAPiTULO 7. ECUACIONES DIFERENCIALES CON VALORES INICIALES... 99
FiguraT-2
7.3 ECUACIOI\ES DIFERENCIALES ORDINARIAS CON
VALORES EN LA FRONTERA
MATLAB tambin permte resolver ecuaciones diferenciales
ordinarias con valores en la frontera. Los valores en la frontera no son ms
que condiciones que especifican una relacin entre los valores de Ia
solucin en los puntos inicial y final de la variable independiente. El
problema ms sencillo de este tipo es el sistema de ecuaciones
.y'
:
f{s,y}
donde x es la variable independiente, y es la variable dependiente e
y' es la derivada de y respecto a x (y'=dy/dx). Adems la solucin en el
intervalo
[a,
b] ha de satisfacer:
sLY{n},}i&}J
:

Una forma ms general de este tipo de ecuaciones diferenciales


puede expresarse como sigue:
1OO ECUACIONES DIFERENCIALES CON MATL,AB
.y"
:
f{:,:,3,,p}
stv(s],"v(3,s)
:

donde el vector p est formado por parmetros que han de ser


determinados simultneamente con la solucin a travs de las condiciones
de valores en la frontera.
El comando que resuelve estos problemas es bvp4c, cuya sintaxis
es la siguiente:
dydx
dydx
dydx
dydx
soI
sol
sol
res
res
res
res
bwp4c (odefun, bcfun, solinit)
bvp4c (odefun, bcfun, solinlt, options)
bvp4c (odefun, bcfun, solinit, options
,p7,p2.
odefun (x, y)
odefun (x, y,p1
,p2,
. . .)
odefun (x, y. parametros
)
odefun (x, y.parametros,p7,p2, . . .)
bcfun (ya, yb)
bcfun (ya, yb,pL,p2, . . .)
bcfun (ya, yb, parametros
)
bcfun (ya, yb, parametro s, p1-, p2,
En la sintaxis anterior odefun es una funcin que evala las
ecuaciones diferenciales f(x,y) y que puede tener la forma siguiente:
En la sintaxis de bvp4c el argumento bcfun es una funcin que
computa el residuo en las condiciones en la frontera. Su forma es la
siguiente:
El argumento solinit es una estructura con los campos x (nodos
ordenados de la malla inicial de modo que las condiciones en la frontera
son impuestas mediante a
=
solinit.x(1) y b=solinit.x(end) e y
(suposiciones iniciales para la solucin de modo que a
= solinit.x(1) y
b = solinit.x(end) es una suposicin para la solucin en el nodo solinit.x(i).
El comando vpint fija solinit con la sintaxis solinit
=
vpinit(x,y).
Como ejemplo resolvemos la ecuacin diferencial de segundo
orden:
y"+
L?l =

CAPIULO 7. ECUACIONES DIFERENCIALES CON VALORES INICIALES,.. 101


cuyas soluciones han de satisfacer las condiciones en la frontera:
"y{t}}
=
*'{4} =
El problema anterior es equivalente al siguiente:
3'r' = #E
ss,
:
-lsrl
Consideramos como suposicin inicial una malla de 5 puntos
igualmente espaciados en
[0,4]
y valores constantes y1(x)=0 e y2(x)=Q.
sintaxis siguiente recoge estas suposiciones:
>> so]-init
=
bwpinit(linspace(0,4,5),
t1
0]);
Codificaremos en MATLAB la funcin y las condiciones en la
frontera mediante los M-ficheros de las Figuras 7-3 y 7-4.
La solucin de la ecuacin la ofrece la sintaxis siguiente:
)) sol
=
bwp4c(Gtroode,Gtwobc,solinit) ,'
que puede graficarse (Figura 7-5) usando el comando bvpval como
sigue:
))y
=
brpval (so1
,linspace
(0
,4) I ;
>>plot(x,y(1
,:)) ;

-
FiguraT-3 FiguraT-4
702 ECUACIONES DIFERENCIALES CON MATLAB
r
"*
Figura 7-5
7 .4 E,CU ACIONES DIFERENCIALES EN DERIVADAS
PARCIALES
El mdulo bsico de MATLAB dispone de funciones que permiten
resolver ecuaciones y sistemas de ecuaciones diferenciales en derivadas
parciales con valores iniciales en la frontera. La funcin bsica para el
clculo de las soluciones es pedepe, y la funcin bsica para evaluar
dichas soluciones es pdeval.
La sintaxis de la funcin pedepe es la siguiente:
sol
:
pdepe (m, pdefun, icfun, bcfun, xmesh, tspan)
sol
:
pdepe (m,pdefun, icfun,bcfun,xmesh, tspan, options)
sol
:
pdepe (m, pdefun, icfun, bcfun, >nesh, tspan, options, p1, p2 . . .
)
El parmetro m vale 0, 1 o 2 segn la naturaleza de la simetra
(bloque, cilndrica o esfrica, respectivamente). El argumento pdefun es la
funcin que define las componentes de la ecuacin diferencial, icfun es la
funcin que define las condiciones iniciales, bcfun es la funcin que define
las condiciones frontera, xmesh y tspan son los vectores
[x0,
x1,...,xn] y
[t0,
t1,...,tf] que especifican los puntos en los cuales se requiere la solucin
(n,f>3), options especifica las opciones de clculo de las soluciones
(RelTol, AbsTol, NormControl, lnitialStep, y MaxStep para especificar
tolerancia relativa, tolerancia absoluta, tolerancia en norma, paso inicial y
paso mximo, respectivamente) y p1,p2,...
son parmetros
a pasar a las
funciones pdefun, icfun y bcfun.
La forma de la ecuacin diferencial en derivadas parciales es:
CAPTULO 7. ECUACIONES DIFERENCIALES CON VALORES INICIALES... 1.03
:r*a
x
-
l.T
d:\
donde alxlb y t0<t< tf. Adems, para t
=
t0 y para todo x las
componentes solucin satisfacen las condiciones iniciales:
u{x, t6}
:
tsn{s}
y para todo t y cada x=a o x=b, Ias componentes solucin satisfacen
ecuaciones frontera de la forma:
F{n,
f, r*} + g{r, f}d'*,r, u,
}J =
O
L
dx!
Adems, se tiene que xmesh(1)=a, xmesh(end)=b, tspan(1)= t0 y
tspan(end)= tf. Por otra parte pdfun halla los trminos c, f y s de la
ecuacin diferencial en derivadas parciales,
de modo que:
Ic,
frs]
:
pdefun(x,tru,dudx)
De modo similiar icfun evala las condiciones iniciales mediante
u
:
icfun (x)
Por ltimo, bcfun evala los valores b y c de las condiciones en la
frontera mediante:
Ip1,ql,pr,er]
:
bcfun (x1,u1,xr,ur,t)
Como primer
ejemplo resolveremos la ecuacin en derivadas
parciales (xe[0,1] y t>0) siguiente:
9Eu
,L.-=
dt
satisfaciendo la condicin inicial :
ax(r, fi!
:
sjfin
y las condiciones en la frontera :
"f",
r,
",
*]
\
"dr/
u
r
m u\\ f u\
r{.r,
r, H,
-.,
JJ
+ 8f f,, f, il,
1-
j
,
cllr
\
xr
/Eu\
-t
_ I
s
\drl
104 ECUACIONES DIFERENCIALFJ CON MATLAB
r*[0, *]
=

-+ du-
tt
-+-11,f):0
ds'
definiendo las funciones en M-ficheros de las figura Comenzamos
7-6 a7-8.
Figura 7-6
Figura 7-8
Una vez definidas las funciones de apoyo, se define la funcin que
resuelve el problema mediante el M-fichero de la FiguraT-9.
FiguraT-7
CAPTULO 7. ECUACIONES DIFERENCIALES CON VALORES INICIALES... 105
FigraT-9
Para ejecutar la solucin (Figuras 7-10 y T-11), en la ventana de
comandos de MATLAB se utiliza la sintaxis:
)) pdexl
Figura 7-10 Figura 7-11
106 ECUACIONES DIFERENCIALES CON MATLAB
Como segundo ejemplo resolvemos el sistema de ecuaciones
diferenciales en derivadas parciales (xe[0,1] y t>0) siguiente:
--2
du, da
+
:
.pa
i]
-F6r-u2\
o[
d'
__
dtn e)-tt
"#
=
.t7o
*_'.f;
+Fqur-a2)
ox.
F(v
) =
expi5.?3]
-
exp{-11.4$3}
satisfaciendo las condiciones iniciales:
ur(r,0)= 1
ug(r,0)= 0
y las condiciones en la frontera:
dra.,
=+(0,
f)
=
0
dx
rcg{f}, f}
=
0
ur(1, f)
=
I
P,r,
r): o
(,.tr
Para utilizar convenientemente la funcin pdepe,
el sistema puede
escribirse como:
r'1
lil _
ul,,J_ afo.m+a,,rraxi]
.[-rru,-u2r'l
Lrl
,rl"rl
-
aTlo.rrotaurrar{
-
[^r't*,
-,,rr]
La condicin izquierda en la frontera puede
escribirse como:
Irl - lr] * [o.m+{a*,rr"il
=
lo]
LIrJ LrJ fo.lzotaul,rartl Lrl
y la condicin derecha en la frontera puede
escribirse como:
h, -
,'l
lo] fo"m+1aur.a.fl fol
L
,
J- LrJ'. lo.rzotar,rra,{
=
t-l
Comenzamos definiendo las funciones en M-ficheros de las Figuras
8-39 a 8-41.
CAPITULO 7. ECUACIONES DIFERENCIALES CON VALORES INICIALES... 107
FiguraT-12
FigwaT-14
Una vez definidas las funciones de apoyo, se define la funcin que
resuelve el problema mediante el M-fichero de la Figura 7-15.
Figura 7-13
108 ECUACIONES DIFERENCIALES CON MATLAB
Figura 7-15
Para ejecutar la solucin (Figuras 7-16 y 7-17), en la ventana de
comandos de MATLAB se utiliza la sintaxis:
>> pdex4
FigluraT-16 FigxaT-17
CAPTULO 7. ECUACIONES DIFERENCIALES CON VALORES INICIALES... 109
(
Comenzamos definiendo una funcin de nombre vdp100 en un M-
fichero, con la finalidad de almacenar en ella las ecuaciones del sistema.
La forma de definir esta funcin es partir de un vector columna con dos
filas vaco, para asignarle posteriormente tres componentes que
constituyen la sintaxis de las tres ecuaciones (FiguraT-18).
Figura 7-18
A continuacin resolvemos el sistema y graficamos la soluci
!1
=
y1(t) relativa a la primera columna (Figura 7-19) de la salida tecleando lo
siguiente en la ventana de comandos:
>>
[T,Y] =
ode15s(0v$1000,
[0
3000]
,12
oll;
>> plot(T,Y(:,1),'-')
110 ECUACIONES DIFERENCIALES CON MATLAB
Figura 7-19
De forma similar graficamos
mediante la sintaxis:
)} plot(T,Yl:,2),'-')
FiguraT-20
la solucin y2
=
yZ(t) (Figura 7-20)
La ecuacin dada es equivalente al sistema de ecuaciones
diferenciales de primer orden siguiente:
-?1
=
-vZ
3g' = -{A -g
q ffiE
g"n}3t
con las siguientes condiciones en la frontera:
3r{}-1 =
0
rttl
:

}g(a) =
0
CAPTULO 7, ECUACIONES DIFERENCIALES CON VALORES INICIALES... 111
Para representar el sistema usamos la funcin del M-ficheros de la
Figura 7-21, para
representar las condiciones en Ia frontera usamos la
funcin del M-fichero de la Figura z-22, y mediante la funcin del M-fichero
de la FiguraT-23 realizamos suposiciones para la solucin inicial.
FigtraT-23
La solucin inicial para
l"=1s y 10 puntos
igualmente espaciados
en
[0,
n] se calcula mediante la sintaxis MATLAB siguiente:
>> Ianbda
=
15;
so].init
=
bwpinit(Iinspace (0,pi,LOl,Gmat4init,larnbda),.
La solucin numrica del sistema se calcula mediante la sintaxis
siguiente:
>> soI
=
bvp4c(Gnat4ode,Gmat4bc,solinit),.
Para graficar
su primera
componente
en 100 puntos
igualmente
espaciados en el intervalo
[0,
n] se utiliza la siguiente siniaxis:
)) xint
=
linspace(0,pi);
Sxint
=
bwpval_(sol
,xint),.
plot(xint,sxint(1,
:
) )
FiguraT-21
FigraT-22
T12 ECUACIONES DIFERENCIALE CON MATLAB
axis (
[0
pi
-1 1.1]
)
xJ-abe1 (
'x' )
ylabel('solucion y')
El resultado se presenta en la FiguraT-24.
La ecuacin general anterior es equivalente al sistema de
ecuaciones lineales de primer orden siguiente:
n,l
y
1
:
Y6
E)
3'E = P{1-3r-be--Yr
cuyas ecuaciones pueden definirse para p=1 mediante el M-fichero
de la Figura 7-25.
FigaraT-24
de
capirulo 7. EcuActoNES DtFERENcTALES coN vALoRES tNtcALES... 113
FigxaT-25
Si consideramos valores iniciales y1=2 e y2=0 en el intervalo
[0,20],
se puede resolver el sistema mediante la sintaxis MATLAB siguiente:
>>
[t,y] =
ode45(Gvdpl,
[0
20]
,f2;
071
L-
0
0.0000
0.0001
0.0001
0.0001
0.0002
0.0004
0.0005
0.0006
0.0.012
19.9559
19.9780
20.0000
2.0000
2.0000
2.0000
2.0000
2.0000
2.0000
0
-0.0001
-0.0001
-0.0002
-0.0002
-0.000s
7.8729 1.0366
1.9358 0.7357
TLA ECUACIONES DIFERENCIALES CON MATLAB
7.9787 0.4746
2.0046 0.2562
2.0096 0.1969
2.0133 0.7473
2.0158 0.0892
2.0172 0.0404
Podemos graficar las soluciones (Figura 7-26) mediante la sintaxis.
>> plot(t,y( i
,Ll ,'-' ,t,y
(:
,2) ,'--')
) xlabel('tiempo t')
>> yJ-abe1 ('solucion y'
)
>} legend('y_1 ' ,'y_2')
Para resolver el sistema general con el parmetro p se define el
sistema mediante el M-fichero de la FiguraT-27.
fuic,,iB: :drdt
='rdpa
(qyrmul
dydc = ty{2) ; uu+ {I-y{I) "2}
*y(2)
-y(l l,
:*
r,t'
r*
::=}I l
,tt
lt
i I i.
FiguraT-26
FigwaT-27
CAPTULO 7. ECUACIONES DIFERENCIALES CON VALORES INICIALES... 115
Ahora podemos graficar la primera solucin (Figura 7-28)
correspondiente a p=1000 en el intervalo
[0,1500]
para y1=2 e y2=O
mediante la sintaxis siguiente:
>>
[t,y] =
ode15s(0vdp2,
[0
1500],
[2;
0],
[],1000);
)) xIabel('tiempo t')
>> ylabeI ('solucion y_l')
Si queremos graficar la primera solucin para otro valor del
parmetro, por ejemplo p=100, en el intervalo
[0,1500]
para y1=2 e y2=0
(Figura 7-29), utilizaremos la sintaxis:
>>
[t,y] =
odelSs(Gvdp2,
[0
1500],
[2;
0],
il,100);
>> plot(t,y( |
,Ll ,'-') ;
FigwaT-28 FiguraT-29
tsBN 9781491271537
llffi[illllil]il[ililll
lilflfiflfltl

Você também pode gostar