Introducción A Los Sistemas Dinámicos Con Matlab
Introducción A Los Sistemas Dinámicos Con Matlab
Introducción A Los Sistemas Dinámicos Con Matlab
DINÁMICA ECONÓMICA
INTRODUCCIÓN A LOS
SISTEMAS DINÁMICOS CON MATLAB.
GUÍA DE PRÁCTICAS
1
CONTENIDO
1 El entorno MATLAB
1.1 Introducción de matrices en MATLAB
1.2 Algebra matricial
1.3 Matrices especiales
1.4 Rescate de elementos a partir de una matriz
1.5 Resolución de sistemas lineales
2 Funciones en MATLAB
2.1 Funciones matemáticas elementales
2.2 Funciones estadísticas elementales
2.3 La función plot
2.4 Diversas funciones de cálculo numérico (roots, poly, polyval,
fval, polyfit,quad)
3 Creación de archivos . m
3.1 Archivos “script”
3.2 Archivos “function”
4 Algoritmos
4.1 El bucle for
4.2 El bucle while
4.3 La bifurcación if
2
INTRODUCCION DE MATRICES EN MATLAB
1 2 3
Dada una matriz A = 4 5 6 puede ser escrita en MATLAB de cualquiera de las formas
7 8 9
alternativas:
>>A=[1 2 3;4 5 6 ;7 8 9 ]
o bien
>>A=[1 , 2 , 3;4 , 5 , 6 ;7 , 8 , 9]
Obsérvese que con la introducción de punto y coma al final de una variable matricial , esta quedará
guardada en la memoria de trabajo pero no aparecerá explícitamente en la pantalla.
Ejercicio.
Escribir las siguientes matrices:
0 −1 3 3
1 3
B = 2 − 1 2 , C = , D = (2 3 9 − 1) , E = π .
2 4 3 2 4 − e
El número π se escribe en MATLAB simplemente como pi, mientras que el número e se representa por
medio de exp(1).
Suma de matrices :
>> A+B
Producto de matrices :
>> A*B
Potencia n-ésima :
>> A^n
Transpuesta:
>> A’
Determinante :
>> det(A)
3
Inversa :
>> inv(A)
División izquierda :
>> A\ B; (similar a inv(A)*B)
División derecha:
>> B/A; (similar a B*inv(A))
Potencia de los elementos de una matriz a los exponentes dados por otra:
>> A . ^B
Esta última instrucción da lugar a una matriz diagonal D formada por los autovalores y a una matriz V
−1
cuyas columnas son los autovectores, de modo que se verifica V XV =D.
proporciona un vector columna cuyos elementos son los de la diagonal principal de una matriz A.
proporciona un vector columna formado por los elementos de la k-ésima diagonal de la matriz A (k es un
entero positivo o negativo).
Matrices diagonales :
>>diag(v)
proporciona una matriz cuadrada, diagonal, cuya diagonal principal son los elementos del vector v. Para
obtener una matriz cuadrada cuya diagonal coincida con la de determinada matriz A emplearemos la
instrucción
>> diag(diag(A))
4
Matriz triangular inferior :
>> tril(A)
Obsérvese que a partir de las operaciones elementales anteriores es posible calcular otros conjuntos
elementos más complejos de una matriz. Por ejemplo, la norma de las columnas de una matriz A puede
calcularse como
>> sqrt( sum ( A.^2 ) )
Ejercicio.
Hallar la norma de las filas de una matriz A haciendo uso de las operaciones anteriores.
Ejercicio.
Calcular las matrices que se especifican a continuación a partir de la A, B, C, D.
3 1 2 − 1
2 − 2
A= 0 2 B= C= − 1 3 D= (2 1)
2 −1 1 3 0 1
a) DB 2
b) BC T
T
c) (CB) D
T
d) det( AC )
T −1
e) ( A C )
Ejercicio.
Dadas las matrices A y B calcular las matrices que se especifican en los diferentes apartados
1 3 2 3 1 1
A = 0 1 4 B = 1 − 2 0
1 − 2 0 2 1 1
a) A + B T , AT B , det( A 2 + B −1 )
b) 2 A + ( A + B )
2
−1 −1
c) A + 3I + B .
d) Autovalores de A+B
e) Autovectores de B
f) Matriz cuyos elementos se obtienen multiplicando los de A y B, elemento a elemento, es decir,
( ) (
cij = aij bij . )
g) Matriz cuyos elementos se obtienen dividiendo los de A y B, elemento a elemento, es decir,
( ) (
cij = aij / bij . )
5
h) Matriz cuyos elementos se obtienen multiplicando los cuadrados de los elementos A y por los
cuadrados de los elementos de B, elemento a elemento, es decir (c ) = (a
ij ij
2 2
bij . )
i) Matriz cuyos elementos se obtienen elevando los elementos de A a los exponentes de la matriz B,
( )
elemento a elemento, es decir (cij) = aij ij .
b
MATRICES ESPECIALES
El MATLAB es capaz de generar numerosas matrices especiales con gran facilidad, como se muestra a
continuación:
6
Matriz de unos de orden 4x2:
>> X11=ones(4,2)
Igualmente, siendo A la matriz definida inicialmente, MATLAB es capaz de generar otras matrices del
tamaño de la matriz A en cualquiera de las siguientes formas:
Ejemplo
Basándonos en el generador randn de números aleatorios Gaussianos N(0,1), es posible muestras
aleatorias de cualquier distribución normal. Por ejemplo, para generar números aleatorios muestreados de
una normal N ( µ , σ 2 ) bastará con realizar sucesivamente la operación µ + σ * randn , es decir,
>> mu+sigma*randn
donde mu = µ y sigma = σ .
Ejercicio.
Escribir una sucesión de 1000 números en los intervalos que se citan a continuación. Empleando la
función hist(x) , que veremos posteriormente, hallar sus correspondientes histogramas.
a) Numeros aleatorios uniformemente distribuidos entre –2 y 2.
b) Números aleatorios uniformemente distribuidos entre 0 y 5.
c) Números aleatorios gaussianos con media 2 y varianza 3.
d) Números aleatorios gaussianos con media 1 y varianza 0.1.
Ejemplo
Veamos una ilustración del teorema central del límite: Si tipificamos una suma de distribuciones
idénticas obtenemos, asintóticamente, una distribución normal. Para ello procedamos a sumar
distribuciones uniformes en el intervalo [0,1], tipifiquemos, y hallemos su histograma.
7
Si X es un determinado vector e I un conjunto de índices, X (I ) proporciona un nuevo vector que
contiene los elementos del vector X correspondientes a los índices I.
Por ejemplo, sea X=randn(1,30) y sea I=(5:2:20); X ( I ) proporciona los elementos de X comprendidos
entre el 5 y el 20 tomados de dos en dos.
Igualmente pueden considerarse subconjuntos de elementos de un vector X que verifiquen alguna relación
de desigualdad:
da lugar a un vector Y formado con los elementos menores o iguales que uno del vector X.
Si deseamos el conjunto de índices de los elementos de un vector que verifican determinada relación
acudiremos al comando:
>> I=find(X<1)
que proporciona el conjunto de índices donde la variable X toma valores menores que 1.
También es posible eliminar los elementos de un vector que cumplan determinada relación:
>> X ( X < 0) = [ ];
hace desaparecer los elementos negativos del vector X.
Ejercicio:
1. Dado el vector X=rand(20,1), comprobar que find ( X < 2 ) = X ( X < 2 ).
2. Hallar el conjunto de índices donde X<0.
Igualmente se pueden crear variables binarias que toman los valores 0 ó 1 según sea verdadera o falsa
determinada relación.
>> Y=X<4;
Crea un vector Y que toma el valor 1 donde el correspondiente elemento de X sea menos que 4 y 0 en
caso contrario.
>> A(1,3)=0.5
>> A(1,:)=[1 0 1]
8
RESOLUCION DE SISTEMA LINEALES DE ECUACIONES
Un sistema de ecuaciones lineales puede ser resuelto con MATLAB de varias formas.
→ → → →
Si escribimos el sistema en la forma matricial A X = b , donde A es una matriz nxn y X y b son
vectores columna n-dimensionales, la solución puede obtenerse de dos formas alternativas:
i) Empleando la matriz inversa de A:
→ →
−1
>> X = A b .
ii) Empleando un método más eficiente, de eliminación gaussiana, por medio de la
división izquierda:
→ →
>> X = A \ b .
2x-y=1 2 −1 x 1
, es decir, =
x+y=2 1 1 y 2
procederemos de la forma,
ans = 1 , 1
→ →
Si escribimos el sistema en la forma matricial X A = b , donde A es una matriz nxn y
→ →
X y b representan ahora vectores fila n-dimensionales, la solución puede obtenerse de dos formas
alternativas:
Ejercicio.
Hallar las soluciones de los siguientes conjuntos de ecuaciones lineales. Describir cada conjunto
→ → → →
empleando las dos formas de notación matricial A X = b y X A = b . Comparar los resultados
obtenidos según empleemos en el método de resolución la matriz inversa, la división izquierda o la
división derecha.
x+3y=1
a)
2x-y=3
3x+2y-z=10
b) -x+3y+2z=5
x-y-z=-1
9
x+y+z+t=4
2x-y+t=2
c)
x-2y-z-t=2
x-2y-3z+t=-3
Si A es una matriz, save A guarda, en el directorio desde donde ha sido llamado el MATLAB, una matriz
denominada A.mat.
save datos A B C;
de modo que la matriz A será guardada en formato ascii con el nombre de datos.dat, en doble densidad.
La instrucción load permite cargar al espacio de trabajo los ficheros previamente guardados en un
determinado directorio, siempre que dicho directorio se encuentre abierto:
10
ALGUNAS OPERACIONES DE INTERFACE CON EL ESPACIO
DE TRABAJO
La instrucción who ofrece un listado de las variables definidas en el espacio de trabajo.
La instrucción whos ofrece un listado de las variables definidas en el espacio de trabajo que incluye
información adicional sobre su tamaño y otras características.
La instrucción clear borra todas las variables previamente creadas en el espacio de trabajo.
El formato numérico que MATLAB muestra por defecto es un formato de cuatro cifras decimales.
Existen otros formatos numéricos disponibles. El más importante es un formato numérico de dieciséis
cifras decimales que es el número de cifras con el que MATLAB realiza las operaciones de cálculo. Para
acceder a este formato es suficiente con teclear en la pantalla format long. Para regresar al formato
habitual debe teclearse format short.
Trigonométricas
sin : seno.
asin : arco seno.
cos : coseno.
acos : arco coseno.
tan : tangente.
atan : arco tangente.
Exponenciales
exp : exponencial .
Complejas
11
Numéricas
La característica fundamental de cada una de estas funciones es que no solamente son aplicables a un
número real sino a un vector o a una matriz. En tal caso la función actuará sobre cada uno de los
elementos de la matriz o del vector.
a11 a12 a13
Por ejemplo, sea X = a 21 a 22 a 23 . Si calculamos el seno de la matriz X, el resultado será:
a a 32 a 33
31
Ejercicio.
Realizar las siguientes operaciones entre números reales.
5 3
a) 1+ +
e π2
23
b) + 2− 5
e
15
c)
1 e sen(π / 8)
+ + + ln(23)
3 2π 4
π + e2 + 2
d)
sen(3π / 4) + log10 (14)
cos(π 2 ) + tg(π / 5) 5
e) ( )
ln( 3 + 2π )
120 1
f) 3 π2 − +
π − 14 π
Media aritmética:
>> mean(X)
Desviación estándar:
>> std(X)
12
Mediana:
>> median(X)
Producto:
>> prod(X)
Suma:
>> sum(X)
Máximo:
>> max(X)
Mínimo:
>> min(X)
Otras funciones estadísticas importantes son cov y corrcoef que tienen una forma similar de actuación.
Si X es un vector
>> cov(X)
>> diag(cov(X))
>> cov(X,Y)
es igual a
Por último,
>> diff(X,n)
13
>> hist(X)
donde se supone que X es un vector numérico que representa una determinada muestra. Si queremos
precisar el número k de intervalos de clase que se consideran en el histograma, utilizaremos la instrucción
>> hist(X,k).
Para reordenar, de manera ascendente, los elementos de un determinado vector X emplearemos la función
>> sort(X)
Esta función permite igualmente recuperar el orden en que estaban situados inicialmente los elementos
en un determinado conjunto de índices I, de la forma:
>> [ Y , I ]=sort(X)
Ejercicio.
Para comprobar el funcionamiento de sort, realizar el siguiente conjunto de instrucciones:
>> X = rand(1:10);
>> sort(X');
>> [ Y , I ] = sort(X');
>> [ Y’ I’ X' ]
LA FUNCIÓN PLOT
Dados dos vectores X e Y de la misma longitud,
>> plot(X,Y)
>> plot(X)
>> plot(X)
>> plot(X , ' . ' ) que dibuja solamente los puntos de la gráfica.
>> plot(X , ' + ' ) que dibuja cruces en lugar de puntos en la gráfica.
>> plot(X , 'r - - ' ) que dibuja una gráfica en rojo con trazo discontinuo.
MATLAB permite dibujar simultáneamente varios vectores de la misma longitud pero con trazos y color
diferenciados. Para ello hay que especificar en cada caso el conjunto de índices, el vector y el formato de
color y unión entre puntos, tal como se muestra en el siguiente ejemplo:
14
>> plot( (1,50) , X, ' r - ' , (1,50) , Y, ' b - - ' )
Si escribimos previamente a una instrucción plot la instrucción grid la gráfica quedará dibujada dentro de
una rejilla.
Ejercicio.
Mírese en el sistema de ayudas del MATLAB las diferentes posibilidades de la función plot:
Ejemplo.
sen( x) 1
Dibujar las gráficas de las funciones y = sen( x) , y = x sen( x ) , y = , y = sen( ) .
x x
MATLAB dibuja la gráfica de una función obteniendo los valores que toma sobre un determinado
conjunto de índices. El primer paso, por lo tanto, para dibujar una gráfica es definir el conjunto de
índices. Para estas funciones trigonométricas resulta adecuado definir el siguiente conjunto de índices:
>> a = ( 1 : 200 ) ; b = a / pi ;
Ejemplo.
Dibujar la gráfica del polinomio y = x − 3x + 2 x − 1 .
3 2
>> x=-10:0.1:10;
>> y=x.^3-3*x.^2+2*x-1;
>>plot(x,y);
Ejercicios
x2 x2
• Dibujar la gráfica de las funciones y = , e y = en el intervalo [−10,10] .
1 − x2 1 + x2
• Dibujar la gráfica de la función y = tan(sen( x ) − sen(tan( x )) en el intervalo [− π , π ] .
Dibujar conjuntamente las gráficas de las funciones y = x − 3x + 2 x − 1 e y = sen (x ) .
3 2
•
Ejercicio
15
ax0
Dibujar la curva de crecimiento logístico x(t ) = , que corresponde a las
bx0 + (a − bx0 )e− (t −t0 )
dx
soluciones de la ecuación diferencial = ax − bx 2 , para diversos valores de los parámetros
dt
a, b, x0 , t0 . Dibujar conjuntamente varias soluciones.
roots :
Ejercicio
Hallar la tasa interna de rendimientos (TIR) de una inversión (un bono) cuyo precio es de 110 € y cuyo
valor facial es de 100 € y tiene tres periodos hasta la amortización, produciendo unos pagos de cupón de
10€ durante sus tres años de vida.
El precio de dicho bono viene dado por
c c c+ A
p= + +
1 + r (1 + r ) (1 + r )3
2
p (1 + r )3 − c(1 + r ) 2 − c(1 + r ) − c − A = 0
fzero :
Busca las raíces de cualquier función de una variable en torno a un determinado punto x0. Su sintaxis es
fzero( 'función' , x0 ) .
16
Ejemplos
Hallar el cero de la función y = sen( x) más cercano al punto x=2.
fzero( ' sin ', 2 )=3.1416
Cuando más adelante aprendamos a construir funciones arbitrarias en MATLAB podremos, por ejemplo,
1 1
hallar un cero de la función y = + − 6 próximo al valor 1.4.
( x − 0.3) + 0.01 ( x − 0.9) 2 + 0.04
2
poly :
Ejemplo.
1 4 − 2
Sea la matriz cuadrada A = 4 0 7 . Calcularemos su polinomio característico por aplicación
9 −1 5
de la instrucción poly, resultando :
Cuando V es un vector, poly(V) es un vector cuyos elementos son los coeficientes del polinomio que
tiene por raíces los elementos de V.
>> V=[ 2 5 3 8 ];
El polinomio buscado será λ4 − 18λ3 + 111λ2 − 278λ + 240 , según se obtiene mediante la
instrucción
Ejercicio.
Encontrar las raíces del polinomio cuyos coeficientes son los números naturales comprendidos entre 1 y
20.
Ejercicio.
1 4 − 2
Dada la matriz A = 4 0 7 calcular sus autovalores utilizando las instrucciones poly y roots.
9 −1 5
eig:
17
Calcula los valores propios o autovalores de una matriz A.
2 1 1
Sea la matriz A = 2 3 4
−1 −1 − 2
>> eig(A) = 3 1 -1
Igualmente es posible obtener los vectores propios o autovectores guardando las salidas de eig(A) en dos
nuevas matrices D y V de la forma :
>> [ V , D ]=eig(A) .
Esta instrucción da lugar a una matriz diagonal D formada por los autovalores y a una matriz V cuyas
−1
columnas son los autovectores, de modo que se verifica V X V = D . Concretamente:
>> [ V , D ]=eig(A)
polyval:
Permite evaluar el valor numérico de un polinomio.
Si V es un vector que contiene los coeficientes de un polinomio la función polyval(V, s) proporciona el
valor numérico de dicho polinomio en el número s.
Ejemplo.
Dado el polinomio p ( x ) = x − 4 x − 2 x + 1 , calcular el valor numérico de dicho polinomio en 5.
3 2
>> polyval(V,5) = 16
Si S es una matriz o vector el polinomio se evalúa en todos los números que forman S.
Ejercicio.
1 4 − 2
Consideremos una matriz cuadrada A, como por ejemplo A = 4 0 7 . Calcular su polinomio
9 −1 5
característico y hacer uso de la instrucción polyval para verificar el teorema de Cayley-Hamilton con la
matriz A: Toda matriz es raíz de su polinomio característico.
18
feval :
Evalúa el valor numérico de una función en un punto x0 . Su sintaxis es la siguiente
Ejemplo.
>> feval ( ' sin ', pi / 2 ) = 1
Observación:
En general, x0 puede ser un vector multidimensional.
Polyfit :
Permite realizar ajuste polinomial a una nube de puntos por el método de los mínimos cuadráticos.
Dados dos vectores numéricos x e y de la misma longitud
>> polyfit(x,y,n)
encuentra los coeficientes de un polinomio p(x) de grado n que ajusta los datos en el sentido de los
mínimos cuadrados.
Ejemplo.
Vamos a construir, primeramente, una nube de puntos (x,y) perturbando aleatoriamente la función
polinómica y = x :
2
>> x=0:0.1:3;
>> y=x.^2 + 2*randn ( size ( x ) ) ;
>> plot ( x , y )
>> plot ( x ,y ,’ . ’ , x , y1 , ’ - ‘ )
De forma análoga,
Ejercicio.
Consideremos la nube de puntos (x,y) dada por
mientras que las abscisas vienen dadas por yt = xt − 2 xt + xt + 1 + ε t , siendo ε t una familia de
3 2
19
3. Dibujar en la misma gráfica la nuve de puntos y los ajustes polinomiales del apartado 1.
quad:
Permite realizar integración numérica (el término quad viene de cuadratura, sinónimo con que se designa
a la integral).
calcula el valor aproximado de la integral de la función f(x) entre a y b. Para realizar el cálculo
aproximado MATLAB realiza una partición adecuada del intervalo de integración [a,b] y utiliza la regla
de Simpson. Dentro de las comillas ' ' debemos colocar una función previamente definida por el
MATLAB o que nosotros creemos en un fichero .m, como veremos más adelante.
Ejemplo.
3
Calcular ∫ sen( x) dx .
0
Como el MATLAB dispone de una función sin que representa la función seno, la integral se calculará
como :
Ejercicio.
π
Obténgase el valor de la integral ∫ sen( x) dx por tres procedimientos de integración numérica:
0
• Regla de Simpson empleando quad( ' sin ', 0 , pi ) .
• Método de Newton-Cotes empleando quad8( ' sin ' , 0 , pi ) .
• Un burdo procedimiento de integración aproximada consistente en dividir el intervalo de integración
[ 0 , pi ] en segmentos de longitud 0.1, formar sobre cada uno de ellos un rectángulo y finalmente
sumar el área de todos los rectángulos, es decir : x = 0 : 0.1: pi ;
π
π π
20
DERIVACIÓN
La derivación numérica es una operación mucho más inestable que la integración numérica. Mientras que
la integración numérica da cuenta de una propiedad macroscópica o global, la derivación describe una
operación microscópica o local. MATLAB puede tratar el tema de la derivación de diversas formas.
Ejemplo.
Dado el polinomio y = x − 5 x + 2 x + 1 , con el fin de calcular su derivada formamos el vector de
3 2
>> p=[ 1 , -5 , 2, 1 ]
>> polyder ( p ) =[ 3 , -10 , 2 ]
+ f ( x 0 + h) − f( x 0 ) − f ( x 0 ) − f ( x 0 − h)
Siendo f ' ( x 0 ) = lim , f ' ( x 0 ) = lim
h →0 h h →0 h
2 2h
fmin , fmins :
Calcula los mínimos relativos de funciones de una variable. La sintaxis es la siguiente:
21
Con el formato
Ejercicio
Consultar el menú de ayuda fmin haciendo
Para encontrar un máximo relativo es suficiente observar que max {f( x )} = min {− f( x )} .
Ejemplo.
−x
Encontrar los máximos y mínimos de la función y = 2e sen( x ) . Podemos proceder como sigue:
De forma similar fmins calcula mínimos de funciones de varias variables en el entorno de un punto x0.
La sintaxis es ahora:
y también
Ejemplo.
Calcular el mínimo local de la función f( x1 , x 2 ) = 100( x 2 − x1 ) + (1 − x1 ) .
2 2 2
% banana.m
function y=banana(x)
Resultando
>> x = ( 1 , 1 ).
22
CREACION DE UN GUIÓN EN FORMA DE ARCHIVO .M
Una de las capacidades más importantes de MATLAB es la de poder escribir una sucesión de
instrucciones en un determinado archivo que pueden, posteriormente, ser ejecutadas al llamar a ese
archivo. Tal sucesión de instrucciones juega un papel similar al de un guión de una película
cinematográfica y se almacenarán en un archivo .m del bloc de notas. Si estos archivos son
conjuntamente almacenados dentro de una determinada carpeta para poder ejecutarlos es preciso que
desde MATLAB este abierta dicha carpeta.
Ejemplo.
Crear en el bloc de notas un archivo con el nombre de grado2.m que calcule las soluciones de una
ecuación de segundo grado.
x1=(-b+sqrt(b^2-4*a*c))/(2*a);
x2=(-b-sqrt(b^2-4*a*c))/(2*a);
[x1,x2];
Obsérvese que se pueden añadir comentarios dentro de un archivo .m siempre que vayan precedidos de
la instrucción % .
Para cambiar el valor de los coeficientes a b y c es preciso introducir nuevos valores numéricos dentro de
grado2.m .
De forma alternativa MATLAB permite la introducción de estos valores por medio de la instrucción
input que producirá al llamar el programa un mensaje en la pantalla demandando los valores de a, b y c.
Concretamente el programa anterior podría escribirse en la forma:
x1=(-b+sqrt(b^2-4*a*c))/(2*a);
x2=(-b-sqrt(b^2-4*a*c))/(2*a);
[x1,x2];
23
también somos capaces de ejecutar la siguiente versión del programa grado2.m , donde los valores de a,
b y c se introducen desde la ventana de comandos, sin tener que manipular el programa en el bloc de
notas:
x1=(-b+sqrt(b^2-4*a*c))/(2*a);
x2=(-b-sqrt(b^2-4*a*c))/(2*a);
[x1,x2];
Ejemplo.
Escribir un archivo .m que dibuje la gráfica de un polinomio de tercer grado.
Crearemos un archivo llamado, por ejemplo, graf1.m de la forma
a=input('coeficiente a = ');
b=input('coeficiente b = ');
c=input('coeficiente c = ');
d=input('coeficiente d = ');
x=-10:0.1:10;
y=a*x.^3+b*x.^2+c*x+d;
plot(x,y)
Ejercicio
Construir un archivo.m con el fin de dibujar la curva de crecimiento logístico
ax0
x(t ) = , que corresponde a las soluciones de la ecuación diferencial
bx0 + (a − bx0 )e− (t −t0 )
dx
= ax − bx 2 , para diversos valores de los parámetros a, b, x0 , t0 .
dt
El MATLAB permite la creación de nuevas funciones. Tales funciones deben ser escritas en archivos .m
que llevarán idéntico nombre que la función que deseamos crear. La estructura sintáctica de un
archivo.m, para una función, contiene en la primera línea, como primera instrucción, la palabra function
seguido de la expresión y= f ( x ) , donde f(x) puede tener el nombre alusivo a la nueva función que
deseamos crear. Una característica deseable de las funciones que vamos a crear, con el fin de que posean
las mismas propiedades que las funciones originarias del MATLAB, es que puedan actuar sobre una
variable matricial. Tal es el caso del ejemplo que citamos a continuación.
Ejemplo.
Definir, en el MATLAB, la función cúbica y = x + 2 x − x + 4 .
3 2
24
function y=cubica(x)
y=a*x.^3+b*x.^2+c*x+d;
Una característica esencial de las funciones es que sus variables son locales, lo que quiere decir que no
dejan ninguna señal en el espacio de trabajo después de ser ejecutadas. Como consecuencia de esto no
será posible alterar sus parámetros desde la ventana de comandos a menos que dichas variables sean
globalizadas por medio del comando global.
Así, en el programa cubica.m podemos conseguir que los parámetros a, b, c y d se introduzcan desde el
espacio de trabajo globalizando las variables a, b, c y d, de la forma:
function y=cubica(x)
global a b c d
y=a*x.^3+b*x.^2+c*x+d;
Una vez globalizadas, para dar valores concretos a los parámetros a, b, c y d habremos de escribir en la
ventana de comandos:
>> global a b c d
Una vez definida la función cubica.m es posible, por ejemplo, calcular integrales numéricas.
Ejemplo.
3
∫ (2 x + 5 x 2 − 4 x + 6)dx .
3
Calcular una integral
1
Para ello será suficiente escribir en el espacio de trabajo las siguientes instrucciones:
>> global a b c d
>> a=2 ; b=5 ; c=-4 ; d = 6 ;
>> quad( 'cubica', 1 , 3 )
Ejercicio.
Obtener el mínimo de la función f( x) = 2 x 3 + 5 x 2 − 4 x + 6 mediante la instrucción
Ejemplo
25
Construir una función de distribución N (0,1) , es decir, a construir la función
2
x 1 − s2
F ( x) = ∫ e ds
−∞
2π
2
1 − s2
Para ello construimos, previamente, la función f ( x ) = e , que denominamos gauss.m
2π
% Campana de Gauss
function y=gauss(x)
y=(1/sqrt(2*pi))*exp(-x.^2/2);
A continuación debemos construir otra función llamada normal.m , desde llamaremos a gauss.m para
realizar la integral.
function y=normal(x)
y=quad('gauss', -10 , x );
Así,
Ejercicios.
Construir un archivo .m para definir cada una de las funciones que se representan a continuación.
Representar gráficamente cada una de estas funciones en el intervalo [-10,10].
a) f ( x) = 2 x 3 − 4 x 2 + 6 x − 3
b) g ( x) = x sen( x) + e x
x 3 + 5x + 1
c) h( x ) =
x2 +1
d) t ( x ) = x x + 1
2
x2
1 −2
e) s ( x ) = e
2π
1
f) c ( x ) =
π (1 + x 2 )
g) rect(x) = 1 si x ≤ 0.5 ; 0 en otro caso.
26
0.01t
k) Crear un archivo .m que dibuje conjuntamente las gráficas de las funciones 100 e y
100 (1 + 0.01) t que representan el crecimiento, con el tiempo, de un capital de 100 euros
colocado a un interés r = 0.01 , continuo y compuesto, respectivamente. Comparar el
crecimiento del capital en ambos tipos de capitalización.
Ejercicios.
Calcular el valor de las siguientes integrales definidas.
3
a) ∫−1
(2 x 3 − 4 x 2 + 6 x − 3)dx
3
∫ ( x sen( x) + e
x
b) )dx
1
1
x 3 + 5x + 1
c) ∫(
−1 x2 +1
)dx
2
d) ∫( x
0
x 2 + 1)dx
10 x2
1 −2
e) ∫
−10 2π
e dx
∞
dx
f) ∫ π (1 + x
−∞
2
)
g) Teniendo en cuenta que la función de densidad para una distribución de Cauchy viene dada
1
por la función f ( x ) = , calcular la probabilidad de que dicha variable aleatoria
π (1 + x 2 )
1
dx
este comprendida entre -1 y 1. ( ∫ π (1 + x
−1
2
)
).
Las funciones definidas hasta el momento tienen una única entrada y una única salida. Resulta muy
sencillo construir funciones con más de una entrada y más de una salida.
f( x1 , x 2 ) = 100( x 2 − x12 ) 2 + (1 − x1 ) 2 .
% banana.m
function y=banana(x)
y1 = 2 x12 − x2
y2 = x1 − x22
27
Para ello construimos el m-archivo de función, que llamaremos trans.m
y1=2*x1.^2-x2; y2=x1-2*x2.^2;
Alternativamente esta función también puede representarse mediante el archivo trans1.m , de la forma
function y=trans1(x)
y=[2*x(1).^2-x(2); x(1)-2*x(2).^2];
Ejemplo.
Vamos a construir una función, que llamaremos stat.m , que tiene como entrada un vector y tres salidas
como son la longitud del vector, su media aritmética y su desviación típica.
n=length(x);
media =sum ( x ) / n ;
desv_stand = sqrt ( sum ( ( x – media ) . ^ 2 ) / n ) ;
Ejercicio.
Escribir una función cuya entrada sea un vector y cuya salida sean los todos los momentos centrales,
hasta el orden 3.
Ejemplo.
Vamos a escribir una función cuya entrada sean los coeficientes de una ecuación de segundo grado y cuya
salida sean sus raíces. Pudiera ser lógico darle por nombre grado2f.m y su estructura como archivo .m es
la siguiente:
function [x1,x2]=grado2f(a,b,c)
x1=(-b+sqrt(b^2-4*a*c))/(2*a);
x2=(-b-sqrt(b^2-4*a*c))/(2*a);
28
ALGORITMOS
Un algoritmo constituye una secuencia de operaciones aritméticas y lógicas que deben ser realizadas en
un determinado orden. En cada uno de los pasos de la secuencia de operaciones, se altera el valor de
alguna determinada variable empleando, para ello, el valor de dicha variable obtenido en la etapa anterior.
El proceso algorítmico continúa hasta que se verifiquen determinadas condiciones respecto a las variables
involucradas, aunque en ciertos casos no es posible saber de antemano el número de veces que se ha de
repetir el algoritmo. Los ordenadores sólo son capaces de llevar a cabo, de forma primaria, las reglas
elementales de la aritmética. Cualquier otro tipo de operación matemática más compleja ha de reducirse a
las reglas aritméticas elementales mediante el uso de los algoritmos.
Veamos, como ejemplo, un algoritmo destinado a obtener la raíz cuadrada de un número positivo “a”.
Partiendo de la ecuación x
2
= a , la transformamos en x 2 − 1 = a − 1 y por tanto en
a −1
( x + 1)( x − 1) = a − 1 , de donde se obtiene x − 1 = , es decir
x +1
a −1
x = 1+ (1) .
1+ x
La raíz cuadrada del número a=2 se obtendrá partiendo de un valor inicial de x, por ejemplo x=1,
colocándolo en el segundo miembro de la expresión (1) , obteniendo entonces un nuevo valor de x=3/2.
Este nuevo valor volverá a ser llevado al segundo miembro de la expresión 1 y así sucesivamente.
Este algoritmo puede, igualmente visualizarse , con el empleo de fracciones continuas como se muestra a
continuación.
a −1 a −1
x = 1+ = 1+
a −1 a −1
1+1+ 2+
1+ x 1+ x
y así sucesivamente se obtiene
a −1
x = 1+
a −1
2+
a −1
2+
a −1
2+
a −1
2+
2 + .....
La estructura algorímica que acabamos de describir puede ser tratada, de modo muy eficiente, mediante el
bucle for, que mostramos a continuación.
EL BUCLE FOR
Un bucle es una estructura computacional que permite repetir sucesivamente una serie de instrucciones.
El bucle for tiene la siguiente estructura:
for i =1 : n
INSTRUCCIONES
end
29
De modo que cuando un determinado índice i vaya desde el valor 1 hasta el valor n las instrucciones se
repetirán una vez por cada valor que avanza el índice.
Veamos algunos ejemplos elementales del uso del bucle for.
Ejemplo
En primer lugar construiremos un programa que permita calcular la raíz cuadrada de un determinado
número.
x=1
for i=1:n
x=1+(a-1)/(1+x);
end
Ejercicio
Establecer un algoritmo destinado a calcular la raíz n-ésima de un número.
Sugerencia: Partiendo de la ecuación x = a , usar para ello la identidad
n
x n − 1 = ( x − 1)( x n −1 + x n − 2 + ..... + x + 1) = a − 1
a −1
para concluir la expresión x = 1 +
1 + x + x 2 + ...... + x n
Ejemplo.
n
Escribir la tabla de los n primeros números naturales de la forma 2 .
Procederemos creando un archivo.m de la forma:
xx = [ ];
for i = 1 : n
x = 2 ^ i;
xx= [ xx x ] ;
end
xx’
La lógica que hay en esta construcción es la siguiente: para cada valor del índice i el número 2 es elevado
a i y tal resultado se guarda dentro de la variable x. Finalmente los sucesivos valores de la variable x se
almacenan dentro de otra variable xx. Obsérvese que previamente hemos procedido a vaciar la variable
xx mediante la instrucción xx = [ ].
Ejemplo.
30
Escribir una función que sume las componentes de un vector dado. Tal función que podríamos llamar
vectsuma.m es equivalente a la función sum vista previamente, aunque esta última también es capaz de
actuar sobre matrices. Su estructura es la siguiente:
function y=vectsuma(x)
n=length(x);
s=0;
for i= 1 : n
s=s+x(i);
end
y = s;
Ejercicios.
Escribir de archivos.m donde sea empleado el bucle for en su construcción y que realicen cada una de las
funciones que se detallan a continuación.
También es posible escribir diversos bucles for que estén anidados unos dentro de los otros tal como
muestra el siguiente ejemplo.
Ejemplo.
Escribir una matriz de dimensiones arbitrarias de modo que cada uno de sus elementos sea de la forma
1
aij =
i + j −1
31
% construye una matriz cuyos elementos son de la forma a(i,j)=1/(i+j-1)
a = [ ];
for i=1:n
for j=1:m
a ( i , j ) = 1 / ( i + j - 1);
end
end
Ejercicios.
Haciendo uso del bucle for doblemente anidado, escribir archivos.m con las siguientes características:
Las ecuaciones en diferencias proporcionan ejemplos muy característicos e intuitivos del manejo del
bucle for.
Ejemplo.
Escribir un archivo.m que calcule los cincuenta primeros valores del problema de valores iniciales:
X t = 1.1 X t −1 con X 1 = 2 , dibujando finalmente el valor de la variable X frente al tiempo.
Llamaremos a este archivo malthus.m y tendrá la siguiente estructura:
xx=[ ]; x=2;
for i=1:50
x = 1.1 * x ;
xx =[ xx x ] ;
end
plot(xx)
32
La lógica que hay en esta construcción es la siguiente: para cada valor del índice i la variable escalar x se
multiplica por 1.1 y su resultado se almacena dentro de otra variable xx. Obsérvese que previamente
hemos procedido a vaciar la variable xx mediante la instrucción xx = [ ] .
MATLAB permite, igualmente, realizar este mismo programa sin el empleo de variables almacén como la
xx, debido a su capacidad de admitir variables vectoriales dentro de los bucles. El archivo malthus.m
puede ser escrito, análogamente, como
x=[ ]; x(1)=2;
for i=1:50
end
plot(xx)
Las ecuaciones en diferencias de orden superior pueden ser resueltas de forma análoga.
Ejemplo.
Hallar la sucesión de los veinte primeros números de Fibonacci, que vienen dados mediante la ecuación
en diferencias X t + 2 = X t +1 + X t con las condiciones iniciales X 1 = 1 , X ( 2) = 1 .
Para ello crearemos el archivo fibo.m, que tiene la siguiente estructura:
% EL CODIGO DAVINCI
%x=[ ];
x(1)=1 ; x(2)=1 ;
for i=1:20
x(i+2)=x(i+1)+x(i);
end
Ejercicio
xt +1 1 + 5
Comprobar que los términos de la sucesión de Fibonacci verifican lim = ≅ 1.618
n →∞ xt 2
Ejercicio.
Considérese la ecuación en diferencias X t + 2 − 1 / 6 X t +1 − 1 / 6 X t = 2 , con las condiciones iniciales
X (1) = 1 , X (2) = 1 / 2 .
33
a) Determinar sus 25 primeros términos mediante la creación de un archivo .m y un bucle for .
b) Escríbase, igualmente, la solución particular en forma analítica encontrando, previamente, la
solución general de la parte homogénea y la solución de equilibrio.
c) Dibujar la solución obtenida en el apartado a) y comparar con la solución particular obtenida en b).
El MATLAB resulta igualmente muy eficaz a la hora de tratar procesos estocásticos. Veamos a
continuación un ejemplo donde se maneja un paseo aleatorio con deriva.
Ejemplo.
Escribir un archivo .m que describa sucesivas realizaciones del paseo aleatorio con deriva
X t +1 = 0.7 X t + 10 + ε t .
x=[ ] ; x ( 1 ) = 0 ;
for i=1:1000
x ( i + 1 ) = 0.7 * x ( i ) + 10 + randn;
end
plot(x);
Ejemplo.
Construir un archivo .m que permita calcular las cincuenta primeras iteraciones de la ecuación en
π
diferencias logística X t +1 = 4 X t (1 − X t ) , con X (1) = .
4
x =[ ] ; x ( 1 ) = pi / 4 ;
for i=1:50
x(i+1)=4*x(i)*(1–x(i));
end
plot(x)
Ejercicios.
34
la logística X t +1 = mX t (1 − X t ) se denomina parámetro al coeficiente m, que en el ejemplo
anterior tomaba el valor m = 4).
c) Dibujar diversas series temporales, de longitud 250, obtenidas por la logística al dar al parámetro m
π
los sucesivos valores de m = 1 , m = 2 , m = 3 , m = 4 , con la condición inicial X (1) = .
4
d) Hallar el coeficiente de correlación entre las variables X t y X t −1 para diversas logísticas de
longitud 100, 500 y 1000.
e) Comparar las trayectorias de las series temporales de longitud 200 generadas por dos ecuaciones
π π
logísticas con parámetro m=4, con valores iniciales x 0 = y x0 = + 0.0001 ,
4 4
respectivamente.
f) Repetir el ejercicio anterior para series generadas por una logística con parámetro m=3.
π
g) Calcular las 100 primeras iteraciones de la ecuación logística con X (1) = para los diferentes
4
valores del parámetro m que se enumeran a continuación, comprobando que: para m = 3 el sistema
tiene un punto de equilibrio estable; para m = 3.1 hay un ciclo estable de periodo 2; para m = 3.5
hay un ciclo estable de periodo 4; para m = 3.55 hay un ciclo estable de periodo 8; para
m = 3.565 hay un ciclo estable de periodo 16; y para m = 3.57 la trayectoria es aperiódica.
Los sistemas de ecuaciones en diferencias, cuando están escritos en forma normal, pueden ser resueltos
fácilmente empleando un bucle for, tal como muestra el ejemplo que presentamos a continuación.
Ejemplo.
xt +1 1 2 xt
Hallar los veinte primeros puntos de la solución particular del sistema = , con
y t +1 − 2 1 y t
x1 1
la condición inicial = .
y1 1
Para ello vamos a construir el siguiente archivo que denominaremos discret.m .
x=[ ]; y=[ ];
x( 1) =1; y(1)=1;
for i=1:10
x(i+1)=x(i)+2*y(i);
y(i+1)=-2*x(i)+y(i);
end
[ x’ y’ ]
35
% discreto 2X2
for i=1:10
end
>> plot ( x ( 1 , : ) , x ( 2 , : ) )
Para dibujar las trayectorias temporales de cada una de las variables haremos
>> plot ( x ( 1 , : ) )
>> plot( x ( 2 , : ) )
Ejercicio
Construyamos el sistema anterior con coeficientes aleatorios
a=randn(2,2);
x=[ ];
for i=1:10
end
plot ( x ( 1 , : ) , x ( 2 , : ) )
eig (a)
ejecutar el archive sucesivas veces y adivinar a partir de la gráfica del espacio de fases la naturaleza real o
compleja de los autovalores así como si su parte real es mayor o menor que uno en valor absoluto.
Ejercicios.
1) Hallar los veinte primeros puntos de la solución particular del sistema
xt +1 1 1 xt 3 x1 2
= + , con la condición inicial = .
y
t +1 4 1 y t − 2 y1 4
2) Hallar las mil primeras iteraciones del sistema no lineal:
36
xt +1 = 1 + yt − 1.4 xt2
yt +1 = 0.3 xt
x1 0.1
con las condiciones iniciales = .
y1 0.1
3) Hallar las mil primeras iteraciones del sistema no lineal:
xt +1 = 3.9( xt − xt2 )
y t +1 = 4 xt ( y t − y t2 )
x1 0.1
con las condiciones iniciales = .
y1 0.1
−1
4) Teniendo en cuanta que las matrices MAM y A tienen los mismos autovalores, poner ejemplos
de sistemas lineales de ecuaciones en diferencias 2x2 que tengan como espacio de fase
• Un nodo estable.
• Un nodo inestable.
• Un punto de silla.
• Una estrella estable.
• Una estrella inestable.
X 0 (t + 1) = a2 X 2 (t ) + a3 X 3 (t )
X 1 (t + 1) = b0 X 0 (t )
X 2 (t + 1) = b1 X 1 (t )
X 3 (t + 1) = b2 X 2 (t )
X 4 (t + 1) = b3 X 3 (t )
Donde los parámetros de fertilidad son a2 = 1.5 y a3 = 1 , y los parámetros de supervivencia son
b0 = 0.99 , b1 = 0.95 , b2 = 0.9 , b3 = 0.8 .
Consideremos ahora dos posibles estados iniciales de los que parte la población:
• Una población con grupos en equilibrio X 0 = X 1 = X 2 = X 3 = X 4 = 1 .
• Una población en la que sólo existen niños, es decir, X 1 = 1 , X 0 = X 2 = X 3 = X 4 = 0 .
En ambos casos las unidades se suponen expresadas en millones.
a) Estudiar la evolución de ambos grupos de población durante los próximos 20 años. Encontrar las
pirámides de población correspondientes. Comprobar que, con independencia de la proporción
inicial de individuos dentro de cada grupo, la distribución por edades de la población tiende al
autovector dominante. Dibujar la gráfica de la evolución de los diferentes grupos de población.
37
b) Con el avance de la medicina y la falta de nacimientos, las pirámides de población de las
sociedades occidentales tienden a invertirse. Vamos a considerar ahora el caso en que parte de
los jubilados sobrevive pasando a una nueva categoría de jubilados ancianos. Para describir tal
fenómeno añadiremos una nueva ecuación X 41 (t + 1) = b3 X 3 (t ) + b4 X 4 (t ) , b4 = 0.7 ,
donde X 41 representa ahora el número total de jubilados, mientras que X 4 representa ahora el
número de personas recién jubilados. Estudiar ahora la población de jubilados y la nueva
pirámide poblacional.
A continuación vamos a considerar el siguiente modelo de población no lineal con reclutamiento, que
viene dado por el modelo
b
X t +1 = aX t + X t −d
1 + X tk− d
donde a, b, k y d son los parámetros del sistema. Para k = 10 se trata de una versión discreta del
modelo de Mackey-Glass, desarrollado originalmente para modelizar la producción y pérdida de glóbulos
blancos.
Este modelo puede ser interpretado como un modelo de dinámica poblacional. Si 0 < a < 1 y b > 0 y si
X t denota el número de adultos de la población, entonces a es la tasa de supervivencia de adultos y
d es el tiempo de retardo entre nacimiento y maduración de un individuo hasta alcanzar la edad
fértil.
b
El factor puede interpretarse como la tasa de fertilidad de los adultos nacidos hace d periodos
1 + X tk− d
en el pasado, la cual es no lineal como consecuencia de una fecundidad decreciente a altos niveles de la
b
población. Así, el término X t − d da cuenta del reclutamiento de nuevos adultos que han nacido
1 + X tk− d
hace d años.
Estudiar las 400 primeras evoluciones del modelo para los parámetros ( a, b, k , d ) = (0.2, 2, 6, 2) .
MODELO DE EPIDEMIAS
Como un ejemplo ilustrativo de la utilización de sistemas de ecuaciones en diferencias, estudiaremos un
modelo de epidemia bastante conocido: el sarampión.
Todos, de alguna u otra manera, hemos tenido contacto con esta enfermedad, altamente
contagiosa, que afecta especialmente a los niños. También sabemos que una vez superada, el organismo
se vuelve inmune a ella. Al niño no expuesto a la enfermedad (ni la ha sufrido ni ha sido debidamente
vacunado) se le denomina susceptible, y S será el número de niños que en un determinado momento y
lugar se encuentran en este estado.
Un problema que debemos considerar, es la duración de la enfermedad. Existe un periodo de
latencia después del contagio, durante el cual el virus no se ha desarrollado suficientemente, y el
individuo no es contagioso y no tiene síntomas. Pasado este periodo, el individuo se vuelve contagioso. I
representará al numero de individuos infectados que pueden contagiar a aquellos que entren en contacto
con ellos (I es el número de infecciosos). Al cabo de cierto tiempo los enfermos se vuelven inmunes y no
pueden reinfectarse.
Trataremos este problema haciendo algunas simplificaciones. Para ello consideremos que el
periodo de latencia es de una semana, y que permanecen en el estado contagioso, hasta que comienza su
recuperación y por tanto se vuelven inmunes, otra semana.
38
Sea Ik el número de enfermos, con capacidad de contagiar, presentes en la semana k, mientras
que Sk será el numero de susceptibles esa semana. Ik+1 será el número de susceptibles que fueron
infectados por la enfermedad al principio de la semana k (recordemos que el periodo de latencia es de una
semana).
Sk+1 representa el numero de niños susceptibles de padecer la enfermedad en la semana k, menos
el numero de niños que han sido contagiados al comienzo de esta semana, mas el numero de nacimientos
B (niños que se incorporan al estado de susceptibles) durante la semana en cuestión. Este ultimo sumando
B, lo consideramos constante.
Finalmente, nos queda por señalar cuál es la capacidad de contagio de un niño infectado sobre
los demás. Para ello consideramos que un enfermo contagioso, en promedio, infecta de forma constante
una fracción f del total de susceptibles, y por tanto f Sk es la cantidad de susceptibles infectados por cada
uno de los Ik. El total de infectados, será por tanto, Ik f Sk.
Podemos seguir la evolución de un sistema de este tipo, a partir de unas ciertas condiciones
iniciales, mediante el siguiente sistema de ecuaciones en diferencias
Sk+1=Sk-fSkIk+B
Ik+1=fSkIk.
La situación de equilibrio, es decir, los puntos fijos, se obtienen resolviendo el sistema
Sk=Sk-fSkIk+B
Ik=fSkIk.
1
Dando como resultado los valores S*= ; I*=B.
f
I k +1 1
De la segunda ecuación, dividiendo por Ik, queda = fSk, y por tanto, si Sk < ; se verifica que
Ik f
I k +1 1
<1, luego I decrece. Si por el contrario, Sk> los valores de I crecerán. Lo ideal parece ser
Ik f
1
mantener la población de candidatos a padecer la enfermedad por debajo de , lo cual podría
f
conseguirse con una adecuada campaña de vacunación.
En el siguiente recuadro se propone un programa en MATLAB para simular este proceso.
S0=50000; f=0.00003;I0=15;B=200; % condiciones iniciales
S=[];I=[];S(1)=S0;I(1)=I0;
for i=1:499;
S(i+1)=S(i)-f*S(i)*I(i)+B;
I(i+1)=f*S(i)*I(i);
end
figure(1), plot([S' I'])
Ie = B; Se=1/f;
% espacio de fases
figure(2), plot(S,I,Se,Ie,’+’) % ciclo límite resultante alrededor del punto fijo
39
EL BUCLE WHILE
Mediante este bucle es posible repetir una determinada instrucción un número indeterminado de veces
mientras se verifique determinada condición. Su estructura sintáctica es la siguiente:
INSTRUCCIONES
end
Las condiciones que se emplean en el bucle while se describen por medio de los operadores relacionales
entre variables == , < , > , <= y >= .
Como primer ejemplo veamos como la ecuación en diferencias logística X t +1 = 4 X t (1 − X t ) , con
π
X (1) = , puede ser resuelta con un while.
4
x = [ ] ; x ( 1 ) = pi / 4 ; i=1 ;
x(i+1)=4*x(i)*(1–x(i));
i=i+1;
end
Existen numerosos algoritmos computacionales donde el uso del while es imprescindible. Se trata de
aquellos procedimientos iterativos que se repetirán hasta haber alcanzado un determinado grado de
aproximación. Tal es el caso de los procedimientos iterativos de resolución de ecuaciones algebraicas o
de sistemas de ecuaciones lineales.
Ejemplo.
Encontrar una solución de la ecuación x + 3 x − 10 = 0 mediante un proceso de aproximaciones
5 2
Seguidamente consideramos una primera aproximación x0 = 0.1 . Este valor se sustituye en el segundo
miembro de la ecuación para obtener una segunda aproximación x1 y así sucesivamente, es decir,
x0 = 0.1 ,
x1 = 5 10 − 3(0.1) 2 = 1.47577
x2 = 5 10 − 3(1.47577) 2 = 1.28225
x3 = 5 10 − 3(1.28225) 2 = 1.38344
x4 = 5 10 − 3(1.38344) 2 = 1.33613
40
El proceso continuará hasta obtener dos valores sucesivos de las aproximaciones suficientemente
cercanos, en tal caso se dice que el método converge, o hasta sobrepasar un número límite prefijado de
iteraciones en el caso que no haya convergencia.
El siguiente programa realiza el proceso de aproximaciones sucesivas que acabamos de describir. Para
abortar la ejecución del programa hemos empleado el relacional lógico & que es equivalente a un and.
X=[ ];
X(1)=2;x(2)=1;
i=1;
x ( i + 2 ) = ( 10 – 3 * x ( i + 1 ) ^ 2 ) ^ 0.2 ;
i=i+1;
end
n = length ( x )
x(n)
Al ejecutar este programa obtenemos un valor aproximado para la raíz de la ecuación de 1.3520 después
de realizar 28 iteraciones con una tolerancia de 0.00000001. No hemos permitido que el número de
iteraciones sea superior a 1000. El uso de la bifurcación if , que veremos a continuación, permitirá
introducir un mensaje advirtiendo cuándo el proceso iterativo es divergente.
LA BIFURCACIÓN CONDICIONAL IF
La bifurcación posibilita ejecutar una determinada instrucción en el caso en que se verifique una
determinada condición. Su forma general es la siguiente:
INSTRUCCIÓN
end
Las condiciones que se emplean en la bifurcación if se describen por medio de los operadores relacionales
entre variables == , < , > , <= y >= .
if x > 100
y = y + 1;
end
41
En este ejemplo ha ocurrido lo siguiente:
Si la variable escalar x toma un valor superior a 100 entonces la variable y se incrementa en una unidad y
en la pantalla se muestra el mensaje “x ha superado el umbral 100” ( disp es una nueva instrucción que
permite mostrar mensajes en la pantalla).
Si la variable x no toma un valor superior a 100 se ignoran ambas instrucciones.
Con mucha frecuencia se desea que cuando no se verifican las condiciones señaladas en el if se ejecuten
ciertas instrucciones diferentes al caso en que si se verifican. En este caso la bifurcación condicional tiene
la siguiente sintaxis:
INSTRUCCIÓN 1
else
INSTRUCCIÓN 2
end
Ejemplo.
Vamos a construir un archivo.m , que llamaremos moneda.m , cuya ejecución simule el lanzamiento de
una moneda. Para ello haremos uso tanto de la bifurcación if como del generador de números aleatorios
gaussianos.
x=randn;
if x>=0
disp('cara');
disp(x);
else
disp('cruz');
disp(x);
end
En general la bifurcación if admite un conjunto de condiciones alternativas, cada una de ellas asociada
con una determinada instrucción, siguiendo la sintaxis que mostramos a continuación:
42
If CONDICIÓN sobre ciertas variables
INSTRUCCIÓN 1
elseif CONDICIÓN 2
INSTRUCCIÓN 2
................
................
elseif CONDICIÓN n
INSTRUCCIÓN n
else
INSTRUCCIÓN n+1
end
Como primer ejemplo vamos a considerar la función trozos.m que crea una función a trozos:
0.1x 2 + 3sen( x) − 3 x<0
f ( x ) = 2e x + 2 0≤ x≤3
x2 x>3
function y=trozos(x)
for i=1:length(x)
if x(i)<0
y(i)=0.1*x(i).^2+3*sin(x(i))-3;
end
end
Ejemplo.
Escribir un programa que simule el lanzamiento de dos monedas.
Por analogía con el caso de una moneda llamaremos a este programa moneda2.m . El programa es el
siguiente:
x=randn(2,1);
43
disp(x);
else
disp('+ c ');
disp(x);
end
cara=0;
for i=1:n
x=randn;
if x>=0
cara=cara+1;
else
end
end
Ejercicios.
1)Construir el anterior programa, de lanzamiento de monedas, como una function cuya entrada sea el
número de lanzamientos y cuya salida sea el número de caras obtenidas en los lanzamientos.
Construir entonces un nuevo programa que permita obtener el histograma que resulta del numero de caras
en el lanzamiento de veinte monedas, cuando dicha veinte monedas han sido lanzadas dos mil veces.
3) Escribir un archivo.m capaz de efectuar la siguiente operación: Dada una matriz cuadrada A
determinar su rango y calcular su inversa. En caso en que al matriz no tenga inversa mostrar un
mensaje en la pantalla que lo indique.
→ →
4) Dado un sistema de ecuaciones A X = b , donde A no es necesariamente una matriz cuadrada
elaborar un archivo.m que discuta la naturaleza de las soluciones del sistema mediante el teorema de
Rouche_Frobenius.
44
5) Programar el método de la bisección de Bolzano para calcular raíces de una ecuación: si f(x) es una
función continua en un intervalo [ a, b ] y el signo de f(a) es distinto del signo de f(b) entonces existe
un número α ∈ ( a, b) de modo que f (α ) = 0.
6) Construir la tabla de los n primeros números primos.
7) Dado un número, averiguar si es primo.
8) Construir un archivo .m para la función
B( x ) = (1 − x 2 ) si x < 1 , mientras que B( x ) = 0 si x ≥ 1 . Dibujar su gráfica.
9) Idem para la función
3
W ( x ) = (1 − x ) 3 si x < 1 , mientras que W ( x ) = 0 si x ≥ 1 .
45
ECUACIONES DIFERENCIALES
Haciendo uso de las instrucciones ya examinadas es posible construir un archivo.m para resolver,
numéricamente, ecuaciones diferenciales por el método de aproximación de Euler. Tal como se muestra a
continuación, el siguiente programa que pudiera llamarse euler.m permite encontrar la solución
aproximada del problema de valores iniciales asociado a la ecuación logística
dy
= y (3 − y ) , y (0.1) = 0.2 .
dx
%y'=f(x,y);
%Cada nueva función f(x,y) debe introducirse en el FOR
for i=1:n
%y(i+1)=y(i)+0.1*(x(i)^2-y(i)^2)*h;
y(i+1)=y(i)+(y(i)*(3-y(i)))*h;
x(i+1)=x(i)+h;
end
plot(x,y)
dy
Téngase en cuenta que para resolver numéricamente otra nueva ecuación como la = 0.1( x 2 − y 2 ) es
dx
preciso introducir la nueva forma funcional dentro del bucle for , haciendo activa la línea del programa
El MATLAB emplea dos instrucciones, elaboradas específicamente, para resolver tanto ecuaciones
diferenciales como sistemas de ecuaciones diferenciales ordinarias.
La instrucción ode23 obtiene la solución aproximada, tanto de ecuaciones diferenciales como de sistemas,
empleando métodos de Runge-Kutta de segundo y tercer orden.
La instrucción ode45 obtiene la solución aproximada, tanto de ecuaciones diferenciales como de sistemas,
empleando métodos de Runge-Kutta de tercero y cuarto orden.
El funcionamiento de ambos procedimientos es similar.
dx
Supongamos que queremos resolver la ecuación diferencial logística = 2 x(5 − x) , con la
dt
condición inicial x(0) = 1.
El primer paso a dar es el de crear un archivo.m , que llamaremos logistic.m donde describiremos la
función que da lugar a la ecuación diferencial:
46
function dx = logistic(t,x)
dx = 2 * x .* ( 5 – x ) ;
Para resolver la ecuación diferencial es preciso teclear en el espacio de trabajo la siguiente instrucción:
o bien
La instrucción tiene además dos salidas que son los vectores columna t e x.
En t son almacenados los correspondientes instantes del tiempo donde se ha calculado la solución.
En x son almacenados los valores de la solución en dichos instantes del tiempo.
Por ejemplo podemos realizar la siguiente integración:
o bien
>> plot(t,x)
o también
>> plot(x) .
Si queremos cambiar los valores de los parámetros que aparecen en la logistic.m esto puede hacerse sin
necesidad de acceder al archivo en el bloc de notas añadiendo la instrucción global , tal como se muestra
a continuación:
function dx = logistic(t,x)
global a b
dx = a * x. * ( b – x ) ;
En tal caso la introducción de los valores a=3 y b=4, por ejemplo, se realizará, simplemente, escribiendo
en la ventana de comandos :
47
>> global a b
>> a = 3 ; b = 4 ;
Ejercicios.
Resolver las siguientes ecuaciones diferenciales con las condiciones iniciales que se especifican.
dx
1) = 1.1x + 2 , con la condición inicial x(0) = 0.
dt
dx
2) = 1.1x 2 + sen(t ) , con la condición inicial x(0) = -1.
dt
dx
3) = 2t 2 + 4 , con la condición inicial x(0) = 1.
dt
. −1 1 x
x
Supongamos que deseamos resolver el sistema . = junto con las condiciones
y − 1 − 1 y
iniciales x(0)=1 , y(0)=3.
Primeramente crearemos una función para describir el sistema de ecuaciones diferenciales, que podríamos
llamar sis2x2.m .
En este caso la variable de salida t corresponde a los instantes de tiempo donde se ha calculado la
solución, mientras que y es una matriz de dos columnas, cada una de las cuales representa las funciones
x(t) e y(t) de la solución estimada por el programa.
En este caso es posible visualizar la solución a diversos niveles:
Dibujando la primera columna de la y con
>> plot( x ( : , 1 ) )
>> plot( x ( : , 2 ) )
>> plot( x ( : , 1 ) , x( : , 2 ) ) .
48
Podemos considerar los coeficientes de la matriz que define el sistema de ecuaciones diferenciales como
parámetros que pueden ser introducidos desde el exterior mediante el comando global :
Ejercicio
Construyamos el sistema anterior con coeficientes aleatorios
a=randn(2,2)
>> plot( x ( : , 1 ) , x( : , 2 ) )
y adivinar a partir de la gráfica del espacio de fases la naturaleza real o compleja de los autovalores así
como el signo de su parte real.
Ejercicios.
Resolver numéricamente y dibujar el espacio de fases de los siguientes sistemas de ecuaciones
diferenciales. Discutir, previamente, la configuración del espacio de fases de cada uno de estos sistemas
encontrando sus autovalores y autovectores mediante el uso del comando [ V,D]=eig(A) .
. 0 4 x
x
1) . = , con la condiciones iniciales x(0)=-1 , y(0)=1 (Centro).
y − 9 0 y
. − 2 −1 x
x
2) . = , con la condiciones iniciales x(0)=1 , y(0)=1 (Nodo estable).
y 4 − 7 y
. − 1 − 3 x
x
3) . = , con la condiciones iniciales x(0)=2 , y(0)=3 (Punto de silla).
y − 3 1 y
. −1 1 x
x
4) . = , con la condiciones iniciales x(0)=-1 , y(0)=2 (Espiral estable).
y − 1 − 1 y
. 0 2 x 1
x
5) . = + , con la condiciones iniciales x(0)=-1 , y(0)=1(Espiral estable).
y − 2 − 1 y 3
49
. 1 − 1 x 2
x
6) . = + , con la condiciones iniciales x(0)=-1 , y(0)=0(Espiral estable).
y 5 − 3 y 1
. 2 1 x 1
x
7) . = + , con la condiciones iniciales x(0)=-1 , y(0)=1 (Centro).
y − 5 − 2 y 1
8) Comprobar que si en el sistema anterior sustituimos a22 = −2.1 el centro se convierte en una espiral
inestable. Si hacemos a22 = −1.9 el centro se convierte en una espiral estable.
−1
9) Teniendo en cuanta que las matrices MAM y A tienen los mismos autovalores, poner ejemplos
de sistemas lineales de ecuaciones diferenciales 2x2 que tengan como espacio de fase
• Un nodo estable.
• Un nodo inestable.
• Un punto de silla.
• Una estrella estable.
• Una estrella inestable.
El tratamiento de los sistemas 3x3 y, en general, nxn se realiza de forma completamente análoga a los
sistemas 2x2.
Si queremos tratar una ecuación diferencial de orden superior es preciso convertirla en un sistema, en
forma normal, mediante el consabido cambio de variables.
El MATLAB es especialmente eficiente en el tratamiento de sistemas y ecuaciones no lineales.
Ejemplo.
Consideremos la ecuación no lineal, de segundo orden, conocida como ecuación de Van der Pol:
.. .
x + ( x 2 − 1) x + x = 0
.
Este ecuación puede ser transformada en un sistema mediante el cambio de variables x = x1 , x = x 2 . El
sistema resultante será:
.
x1 = x 2
.
x 2 = x 2 (1 − x12 ) − x1
Para buscar sus soluciones aproximadas crearemos una función que llamaremos vdpol.m como la
siguiente:
function dx = vdpol(t,x)
Para simular, finalmente, la solución de la ecuación diferencial de la ecuación de Van der Pol en el
intervalo 0 ≤ t ≤ 20 , con las condiciones iniciales x1 (0) = 1 / 3 , x 2 (0) = 0 , es suficiente escribir en
el espacio de trabajo las siguientes instrucciones:
Algunas ecuaciones no lineales tienen un comportamiento extraordinariamente complejo tal como puede
apreciarse resolviendo el siguiente sistema debido a Lorenz:
50
.
x = 10( y − x)
.
y = 28 x − y − xz
. 8
z = − z + xy
3
Para la simulación de sus soluciones crearemos la función loren.m, que describimos a continuación:
function dx = loren ( t , x )
El resultado que se almacena en la variable y es una matriz de tres columnas, cada una de las cuales
corresponde con la respectiva variable del sistema. La complejidad de la solución se contempla por medio
de los siguientes gráficos.
51
5.2 ECUACIONES DIFERENCIALES
Muchos problemas de las ciencias aplicadas pueden formularse, matemáticamente, por medio
de la determinación de una función desconocida que satisface una relación determinada entre
ella y sus derivadas. Surgen, de este modo, ecuaciones cuyas incógnitas no representan algún
tipo de número sino una función. Tales ecuaciones se denominan ecuaciones diferenciales.
EL MÉTODO DE EULER
MATLAB cuenta con potentes instrucciones propias para resolver numéricamente
ecuaciones diferenciales que emplearemos más adelante. No obstante, con el fin de
ejercitar las instrucciones ya examinadas, vamos a programar un sencillo algoritmo para
resolver, numéricamente, ecuaciones diferenciales conocido como método de
aproximación de Euler.
Consideremos un problema de valores iniciales de la forma
y ' = f ( x, y ) , y ( x 0 ) = y 0 (5.2)
Sea y = φ ( x ) la solución que deseamos buscar. Podemos considerar que una primera
aproximación a dicha solución en un punto x1 cercano a x0 es la recta tangente a y = φ ( x ) , cuya
pendiente tendrá el valor φ ' ( x0 ) = f ( x0 , y0 ) , por satisfacer la ecuación diferencial (5.2).
El valor aproximado y1 de φ ( x1 ) , puede obtenerse, según indica la Figura 5.5, de la forma
y1 = y0 + φ ' ( x0 )( x1 − x0 ) = y0 + f ( x0 , y 0 )( x1 − x0 ) .
52
y2
y = φ (x )
y3
y1
y0
x0 x1 x2 x3
Si consideramos una separación uniforme entre los puntos xi en los que aproximamos la
53
plot(x,y) se muestra en la Figura 5.6.
Método de Euler
1.25
1.2
1.15
1.1
1.05
0.95
0.9
0 0.5 1 1.5 2 2.5 3
Figura 5.6
Téngase en cuenta que para resolver numéricamente otra nueva ecuación como, por ejemplo la
dy
= 3(2 x 2 − 4 y 2 ) , sería preciso introducir la nueva forma funcional dentro del bucle for del
dx
programa anterior.
Ejemplo. Supongamos que queremos resolver el problema de valores iniciales (5.1). El primer
paso es crear un archivo.m, que llamaremos ecua.m donde describiremos la función que da
lugar a la ecuación diferencial:
function yprima=ecua(x,y)
%Esta función evalúa la ecuación diferencial
yprima=0.1*(x^2-y^2);
54
Para resolver la ecuación diferencial es preciso teclear en el espacio de trabajo la función:
» [x, y]=ode23('ecua',ti, tf, X0);
o bien
» [x, y]=de45('ecua', ti, tf, X0);
1
0 2 4 6 8 10 12 14
Figura 5.7
55
Si queremos resolver esta ecuación para diferentes valores de los parámetros, MATLAB
permite los cambios de valores en los parámetros sin necesidad de acceder al archivo en el bloc
de notas. Para ello es suficiente añadir la instrucción global, tal como se muestra a
continuación.
function yprima=ecua(x,y)
%Esta función evalúa la ecuación diferencial
global a b c
yprima=a*(b*x^2–c*y^2);
En tal caso la introducción de los valores a=0.2, b=4 y c=3, se realizará, simplemente,
escribiendo en la pantalla del espacio de trabajo:
» global a b c
» a=0.2; b=4; c=3;
Ejercicio. Resolver las siguientes ecuaciones diferenciales con las condiciones iniciales que se
especifican.
dx
a) = 1.1x + 2 , con la condición inicial x(0)=0.
dt
dx
b) = 1.1x 2 + sen(t ) , con la condición inicial x(0)=-1.
dt
dx
c) = 2t 2 + 4 , con la condición inicial x(0)=1.
dt
56
ecuación
dx
= ax .
dt
Otra forma más sofisticada de especificar la tasa de crecimiento de la población es suponer
que
r (t , x ) = a (b − x ),
es decir, que dicha tasa de crecimiento es proporcional a la distancia que separa el tamaño de la
población de un determinado parámetro b . En tal caso la evolución de la población, a través del
tiempo, queda recogida por medio de la ecuación diferencial
dx
= a (b − x ) x .
dt
Como es lógico, el tamaño que adquiere una población en el transcurso del tiempo está muy
relacionado con el número de individuos del que inicialmente parte. Cualquiera de las
ecuaciones anteriores tiene, entonces, una infinidad de soluciones. Para garantizar la unicidad
de la solución es suficiente con imponer una determinada población inicial x0 en el instante t0 a
partir del que comience a contarse el tiempo. Las ecuaciones anteriores se transforman entonces
en problemas de valores iniciales de la forma:
dx
= ax , x (t0 ) = x0 , (5.4),
dt
o bien
dx
= ax (b − x ) , x (t0 ) = x0 . (5.5)
dt
de MATLAB para resolver ecuaciones diferenciales, es fácil obtener las gráficas de la Figura
5.8 donde se muestra la evolución de una población durante 10 unidades de tiempo, siguiendo
los modelos (5.4) y (5.5).
57
Trayectoria ecuación diferencial (5.4)
5
4.8
4.6
4.4
4.2
3.8
3.6
3.4
3.2
3
1 2 3 4 5 6 7 8 9 10 11
100
80
60
40
20
0
0 5 10 15 20 25 30 35
function y=sis2x2(t, x)
%Esta función evalúa un sistema lineal de ecuaciones diferenciales
y=[-x(1)+x(2); -x(1)–x(2)];
58
» X0=[-1, 3];
» [t, y ]=ode23('sis2x2', [0, 50], X0)
En este caso la variable de salida t corresponde a los instantes de tiempo donde se ha calculado
la solución, mientras que y es una matriz de dos columnas, cada una de las cuales representa las
funciones x(t) e y(t) de la solución estimada por el programa. En este caso es posible visualizar
la solución a diversos niveles. Dibujando la primera columna de la y obtendremos la trayectoria
de x(t) con la instrucción
» plot(y(:, 1))
Dibujando la segunda columna de la y obtendremos la trayectoria de y(t) con la instrucción
» plot(y(:, 2))
El espacio de fases (x(t), y(t)) puede ser obtenido mediante
» plot(x(:, 1), y(:, 1))
tal como se muestra en la Figura 5.12.
2.5
1.5
0.5
-0.5
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8
Figura 5.12
function y=sis2x2(t, x)
%Esta función evalúa un sistema lineal de ecuaciones diferenciales
global a11 a12 a21 a22
y=[a11*x(1)+a12*x(2);a21*x(1)+a22*x(2)];
59
ecuaciones diferenciales. Discutir, previamente, la configuración del espacio de fases de cada
uno de estos sistemas encontrando sus autovalores y autovectores mediante el uso del comando
[V,D]=eig(A).
x 0 4 x
a) = , con las condiciones iniciales x(0)=-1, y(0)=1.
y − 9 0 y
x − 2 − 1 x
b) = , con las condiciones iniciales x(0)=1, y(0)=1.
y 4 − 7 y
x − 1 − 3 x
c) = , con las condiciones iniciales x(0)=2, y(0)=3.
y − 3 1 y
x −1 1 x
d) = , con las condiciones iniciales x(0)=-1, y(0)=2.
y − 1 − 1 y
x 0 2 x 1
e) = + , con las condiciones iniciales x(0)=-1, y(0)=1.
y − 2 − 1 y 3
x 1 − 1 x 2
f) = + , con las condiciones iniciales x(0)=-1, y(0)=0.
y 5 − 3 y 1
x 2 1 x 1
g) = + , con las condiciones iniciales x(0)=-1, y(0)=1.
y − 5 − 2 y 1
Obsérvese que si queremos tratar una ecuación diferencial de orden superior es preciso
convertirla en un sistema, en forma normal, mediante un cambio de variables. MATLAB es
especialmente eficiente en el tratamiento de sistemas y ecuaciones no lineales.
x1 = x 2
x 2 = x 2 (1 − x12 ) − x1
Buscaremos sus soluciones aproximadas creando una función que llamaremos vdpol.m como la
siguiente.
function y=vdpol(t,x)
y=[ x(2) ; x(2).*(1 – x(1).^2) – x(1) ]
Para simular la solución de la ecuación diferencial de la ecuación de Van der Pol en el intervalo
60
0 ≤ t ≤ 20 , con las condiciones iniciales x1 (0) = 1 / 3, x2 (0) = 0 , es suficiente escribir en el espacio
de trabajo, para obtener la representación gráfica de las trayectorias de las variables contenidas
en y que se muestra en la Figura 5.13, las siguientes instrucciones
» ti=0 ; tf=20 ; x0=[1/3 0] ;
» [t, y]=ode23('vdpol', [ti, tf], x0);
» plot(t,y)
Trayectorias de la ecuación diferencial de Van der Pol
3
-1
-2
-3
0 2 4 6 8 10 12 14 16 18 20
Figura 5.13
Como se observa en la Figura 5.14 las trayectorias del sistema son atraídas, con el transcurso
del tiempo, hacia una curva del espacio de fase de las variables almacenadas en y que se
denomina ciclo límite.
Espacio de fases tridimensional: ecuación de Van der Pol
3
-1
-2
-3
-2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5
Figura 5.14
El tratamiento de los sistemas 3x3 y, en general, nxn se realiza de forma completamente análoga
a los sistemas 2x2.
61
como puede apreciarse resolviendo el siguiente sistema debido a Lorenz
x = 10( y − x )
y = 28 x − y − xz
8
z = − z + xy
3
Para la simulación de sus soluciones crearemos la función lorenz.m, que describimos a
continuación.
function y=lorenz(t, x)
y=[ 10*(x(2)-x(1)) ; 28*x(1)-x(2)-x(1)*x(3) ; (-8/3)*x(3)+x(1)*x(2) ];
-20
0 2 4 6 8 10 12 14 16 18 20
50
-50
0 2 4 6 8 10 12 14 16 18 20
60
40
20
0
0 2 4 6 8 10 12 14 16 18 20
Figura 5.15
62
» plot(y(:,1), y(:,2)), plot(y(:,1), y(:,3)), plot(y(:,2), y(:,3))
-50
-20 -15 -10 -5 0 5 10 15 20
60
40
20
0
-20 -15 -10 -5 0 5 10 15 20
60
40
20
0
-25 -20 -15 -10 -5 0 5 10 15 20 25
Figura 5.16
50
40
30
20
10
0
40
20 20
0 10
0
-20
-10
-40 -20
Figura 5.17
Debido a la complejidad que presentan las trayectorias del espacio de fase del sistema de
Lorenz, a tal configuración se le denomina un atractor extraño. En este caso las trayectorias son
atraídas, no hacia un ciclo límite como ocurrían en el sistema de Van der Pol sino, hacia una
región del espacio de fase de carácter extraño e indefinido. Se dice, entonces, que la evolución
de las variables, respecto al tiempo, es de tipo caótico.
63