Sie sind auf Seite 1von 738

Curso Introductorio

de MATLAB
Correcin Radial
0.04

0.03

0.02
(r-ro)/R

0.01

0 5 10 15 20
Posicin Angular(theta)
0

-0.05
tetha(deg)

-0.1

0 5 10 15 20
-4
x 10 Consumo de Energia de las Entradas
5
F1/Mg, F2/Mg

-5
0 5 10 15 20
Tiempo(horas)

Pedro Ochoa Moreno


Junio de 2003
Curso Introductorio de MatLab

Pedro Ochoa Moreno


2
Curso Introductorio de MatLab

Pedro Ochoa Moreno


3
Curso Introductorio de MatLab

Pedro Ochoa Moreno


4
Curso Introductorio de MatLab

Pedro Ochoa Moreno


5
Curso Introductorio de MatLab

CONTENIDO

Pedro Ochoa Moreno


6
Curso Introductorio de MatLab

1. Introduccin 5
2. Fundamentos 7
2.1 Manejo bsico de las ventanas de MatLab 7
2.2 Entradas desde el teclado 12
2.3 Entrada desde archivos externos 13
2.4 Ejercicios 14
3. Manipulacin de vectores y matrices 17

Pedro Ochoa Moreno


7
Curso Introductorio de MatLab

3.1 Elementos de una matriz 17


3.2 Representacin mediante intervalos 19
3.3 Operaciones que manipulan matrices 22
3.4 Matrices especiales 23
3.5 Cadena de caracteres 27
3.6 Tcnicas de manipulacin avanzada de matrices 30
3.7 Ejercicios 32
4. Operaciones con escalares 35

Pedro Ochoa Moreno


8
Curso Introductorio de MatLab

4.1 Operaciones aritmticas 36


4.2 Funciones elementales y transcendentales 37
4.3 Ejemplos 42
4.4 Operadores relacionales y lgicos 45
4.5 Ejercicios 46
5. Operaciones con matrices 49
5.1 Transpuesta 50
5.2 Operaciones algebraicas 51

Pedro Ochoa Moreno


9
Curso Introductorio de MatLab

5.3 Funciones matriciales 51


5.4 Operaciones lgicas 58
5.5 Otras matrices especiales 62
5.6 Ejercicios 65
6. Polinomios 69
6.1 Operaciones bsicas 69
6.2 Interpolacin 75
6.3 Ejercicios 76

Pedro Ochoa Moreno


10
Curso Introductorio de MatLab

7. Grficas 79
7.1 Grficas en dos dimensiones (2D) 79
7.2 Trazas mltiples 84
7.3 Escalamiento de ejes 88
7.4 Ms grficas en dos dimensiones(2D) 89
7.5 Incrustacin de ms de una grfica en una ventana 91
7.6 Grficas en tres dimensiones (3D) 93
7.7 Funciones de dos variables 95

Pedro Ochoa Moreno


11
Curso Introductorio de MatLab

7.8 Ejercicios 99
8. Programacin en MatLab 101
8.1 Estructuras bsicas de programacin 101
8.2 Archivos tipo script 106
8.3 Funciones 108
8.4 Depuracin de programas 112
8.5 Ejercicios 118
9. Anlisis Numrico 121

Pedro Ochoa Moreno


12
Curso Introductorio de MatLab

9.1 Matemticas simblicas 123


9.1.1 Derivacin 123
9.1.2 Integracin 126
9.2 Resolucin de ecuaciones 128
9.2.1 Solucin de ecuaciones lineales 128
9.2.2 Solucin de ecuaciones diferenciales 130
9.2.3 Ecuaciones diferenciales de orden superior 133
9.4 Ejercicios 138

Pedro Ochoa Moreno


13
Curso Introductorio de MatLab

10. Simulink 141


10.1 Fundamentos 141
10.2 Construccin de esquemas en simulink 144
10.3 Anlisis del esquema 147
10.4 Ejercicios 149

Bibliografa 151

Pedro Ochoa Moreno


14
Curso Introductorio de MatLab

Pedro Ochoa Moreno


15
Curso Introductorio de MatLab

1
Pedro Ochoa Moreno
16
Curso Introductorio de MatLab

Introduccin

Pedro Ochoa Moreno


17
Curso Introductorio de MatLab

El software MatLab es uno de los que ms se han popularizado


dentro de todos los campos de la ingeniera, tal aseveracin es valida,
dado que hoy en da este puede ser considerado como un estndar
mundial en el anlisis y la simulacin de sistemas dinmicos lineales o
no lineales, as como una de las cajas de herramientas ms verstiles
para el anlisis numrico. El nombre MatLab es un acrnimo de Matrix
Laboratory. Lo anterior inmediatamente nos sugiere dos
consideraciones: que su elemento base es la matriz y que por

Pedro Ochoa Moreno


18
Curso Introductorio de MatLab

consiguiente este es dirigido a las aplicaciones en el campo del


lgebra lineal; ms sin embargo la palabra Laboratory conjura la idea
de trabajo en progreso, por ejemplo, hace nfasis en su habilidad para
los propsitos educacionales y de investigacin. Simulink es una caja
de herramientas de MatLab diseada especialmente para la
simulacin dinmica de los sistemas lineales o no lineales. Este
combina una interfase grfica amigable para el usuario, la cual
contiene una avanzada mquina integradora, la cual permite al usuario

Pedro Ochoa Moreno


19
Curso Introductorio de MatLab

seleccionar entre seis mtodos de integracin de ecuaciones


diferenciales.
En este curso, presentare el entorno de MatLab, que es un
entorno interactivo para clculos numricos, anlisis de datos y
grficos. Debido a que los comandos de MatLab son similares a los
expresados en matemticas, entonces el escribir soluciones en
computadora con MatLab es mucho ms fcil que usar un lenguaje de
alto nivel como C o Fortran.

Pedro Ochoa Moreno


20
Curso Introductorio de MatLab

Pedro Ochoa Moreno


21
Curso Introductorio de MatLab

Pedro Ochoa Moreno


22
Curso Introductorio de MatLab

Pedro Ochoa Moreno


23
Curso Introductorio de MatLab

Pedro Ochoa Moreno


24
Curso Introductorio de MatLab

Pedro Ochoa Moreno


25
Curso Introductorio de MatLab

2
Pedro Ochoa Moreno
26
Curso Introductorio de MatLab

Fundamentos
2.1 Manejo bsico de las ventanas de MatLab

Pedro Ochoa Moreno


27
Curso Introductorio de MatLab

El propsito de este captulo es el de proporcionar al participante


de este curso, su primera ojeada al entorno de MatLab. Para cumplir
con tal tarea, primero, veremos la forma de manipular la ventana de
comandos de MatLab, despus veremos la forma en que las
operaciones de entrada y de almacenamiento se llevaran a cabo. Para
terminar la sesin de la ventana de comandos de MatLab que se
muestra en la figura 2.1; se debe teclear: quit o exit, o tomar la
alternativa clsica de paquetes basados en Windows, y esta es Alt-F4.

Pedro Ochoa Moreno


28
Curso Introductorio de MatLab

Pedro Ochoa Moreno


29
Curso Introductorio de MatLab

Pedro Ochoa Moreno


30
Curso Introductorio de MatLab

Figura 2.1. Ventana de comandos (ordenes) de MatLab.


Dentro de la ventana de comandos, existen tres formas bsicas
para obtener ayuda en lnea. Las dos primeras, nos proporcionan
informacin de ayuda sobre funciones de MatLab, y la tercera es una
gran coleccin de documentos almacenados en un formato de
hipertexto a los cuales se puede acceder mediante un navegador para
la Web. Si utilizamos el comando help, nos presenta dentro de la

Pedro Ochoa Moreno


31
Curso Introductorio de MatLab

ventana de comandos una lista de tpicos a los cuales tendremos


acceso mediante el tecleo del comando help ms el tpico, por
ejemplo: help general. El cual nos desplegara la informacin
pertinente a:
Informacin general.
Manejo del espacio de trabajo.
Manejo de comandos y funciones.
Manejo de la ruta de bsqueda.
Pedro Ochoa Moreno
32
Curso Introductorio de MatLab

Control de la ventana de comandos.


Comandos del sistema operativo.
Depuracin de archivos del tipo .m.

Pedro Ochoa Moreno


33
Curso Introductorio de MatLab

Pedro Ochoa Moreno


34
Curso Introductorio de MatLab

Figura 2.2. Utilizacin de la orden helpwin dentro de la ventana de


comandos de MatLab.
Pero si utilizamos el comando helpwin, dentro de la ventana de
comandos obtendremos otra ventana dentro de la anterior, como se
observa en la figura 2.2. Esta nueva ventana cuenta con la
peculiaridad de que esta es interactiva. La tercera ventana es la
generada por el comando helpdesk dentro de la ventana de

Pedro Ochoa Moreno


35
Curso Introductorio de MatLab

comandos, siendo esta tambin interactiva con el usuario, esta se


muestra en la figura 2.3. Esta ventana de ayuda nos presenta los
documentos de las diferentes cajas de herramientas, as, como guas
de inicio, instalacin y para solventar los problemas que se puedan
presentar. Tambin tiene la peculiaridad de presentarnos manuales
sobre los diversos temas que puede manejar este software y as como
la conexin a sitios de inters para solucin a bsquedas, preguntas,

Pedro Ochoa Moreno


36
Curso Introductorio de MatLab

otros productos, un contacto mas personalizado con MathWorks, la


compaa que maneja MatLab.
Por otro lado, dentro de la misma ventana de comandos
podemos teclear la palabra demo y obtener la pantalla que se muestra
en la figura 2.4. El tener acceso a este tipo de ventanas podemos

Pedro Ochoa Moreno


37
Curso Introductorio de MatLab

Pedro Ochoa Moreno


38
Curso Introductorio de MatLab

Figura 2.3. Utilizacin de la orden helpdesk dentro de la ventana de


comandos de MatLab.
darnos cuenta de lo interactivo que es este software que nos ayuda a
llevar a cabo los clculos numricos y posteriormente poder visualizar
los resultados en forma de datos o graficas.

Pedro Ochoa Moreno


39
Curso Introductorio de MatLab

Pedro Ochoa Moreno


40
Curso Introductorio de MatLab

Figura 2.4. Utilizacin de la orden demo dentro de la ventana de


comandos de MatLab.

Tambin, es importante mencionar que aparte de la ventana de


comandos, tenemos, la de graficas como se muestra en la figura 2.5,
as, como la del editor de texto para los archivos .m, y esta se muestra
en la figura 2.6. Es de vital importancia mencionar que los datos
resultantes de una operacin se presentaran en la ventana de

Pedro Ochoa Moreno


41
Curso Introductorio de MatLab

comandos, desde donde podemos teclear el guin (script) del


programa y ver los resultados ah mismo. Esta ventana es llamada
comnmente el espacio de trabajo (workspace). Si se desea limpiar de
comandos este espacio utilizaremos clc, si utilizamos clear no afectara
las dems ventanas, pero si borrara la variables de memoria y
finalmente, si usamos el comando clf limpiaremos la ventana de
grficos y esta ser restablecida.

Pedro Ochoa Moreno


42
Curso Introductorio de MatLab

Pedro Ochoa Moreno


43
Curso Introductorio de MatLab

Figura 2.5. Ventana del editor y depurador de MatLab.

Pedro Ochoa Moreno


44
Curso Introductorio de MatLab

Pedro Ochoa Moreno


45
Curso Introductorio de MatLab

Figura 2.6. Ventanas de graficas de MatLab.


2.2 Entradas desde el teclado

Normalmente las entradas de comando o datos se harn


mediante el teclado, estn se manejaran directamente en el espacio
de trabajo denominado en la seccin anterior como la ventana de

Pedro Ochoa Moreno


46
Curso Introductorio de MatLab

comandos. Para ilustrar lo anterior, veremos los siguientes casos: un


escalar es definido en una forma obvia

A=2

Donde se le asigna a la variable A un valor de 2. La variable en si es


almacenada en la memoria de la computadora hasta que esta sea
borrada con el comando clear A, si utilizamos solamente el comando

Pedro Ochoa Moreno


47
Curso Introductorio de MatLab

clear este borrara todas las variables que hayan en memoria. Es


importante mencionar que las variable en MatLab son diferentes entre
maysculas y minsculas, por los tanto, A y a son dos variables
diferentes.
Para darle entrada a un vector desde el teclado es una tarea
simple, como escribir los valores separados por espacios o comas
entre cada uno de ellos y todos dentro de un parntesis rectangular,
como se muestra en el vector A que se presenta a continuacin:

Pedro Ochoa Moreno


48
Curso Introductorio de MatLab

A=[1 2 3 4 5] A=[1,2,3,4,5]

Cabe hacerse la aclaracin que no ha habido la necesidad de definir el


tamao del vector, simplemente se han dado entrada a los valores, sin
que exista un declaracin preliminar. Lo anterior es una de las
caractersticas ms atractivas de MatLab y esta tambin se extiende a
las matrices.

Pedro Ochoa Moreno


49
Curso Introductorio de MatLab

Ahora para definir una matriz, utilizaremos el mismo


procedimiento que para un vector, pero se har uso de un carcter que
separe las filas, en este caso ser ; (semicolon), el cual permitir
iniciar una nueva lnea o fila, esto se muestra a continuacin:

B=[1 2 3 4; 5 6 7 8] B=[1 2 3 4
5 6 7 8]
donde la matriz A ser:

Pedro Ochoa Moreno


50
Curso Introductorio de MatLab

1 2 3 4
B
5 6 7 8
Por otro lado, ahora que hemos visto un vector fila y una matriz,
podemos visualizar un vector columna haciendo uso de las
propiedades antes vistas, por ejemplo, el vector C se muestra a
continuacin:

C=[1;2;3;4]
Pedro Ochoa Moreno
51
Curso Introductorio de MatLab

Donde tenemos

1
2
C
3

4

Pedro Ochoa Moreno


52
Curso Introductorio de MatLab

Cabe hacer mencin que la funcin del semicolon (;) tiene en los
casos anteriores solamente la funcin de pasar a una nueva lnea,
pero si se usa al final de una expresin, como la que se muestra,

C=[1;2;3;4];

Lo anterior, genera el vector columna y lo guardara en memoria, en el


caso de no poner el semicolon al final del parntesis rectangular, har

Pedro Ochoa Moreno


53
Curso Introductorio de MatLab

que el vector sea visible en el espacio de trabajo. Cabe hacer mencin


de un caso muy particular en que las dimensiones del vector o la
matriz son mayores que el espacio de una lnea, entonces es
necesario llevar a cabo la introduccin de tres puntos continuos () lo
que permitir dar continuar la fila en el siguiente rengln o lnea, esto
se visualiza con el siguiente ejemplo:

D=[1 4 5 3 6 87 3 4 8 -6 33 5];

Pedro Ochoa Moreno


54
Curso Introductorio de MatLab

D=[1 4 5 3 6 87
3 4 8 -6 33 5];

2.3 Entrada desde archivos externos

Pedro Ochoa Moreno


55
Curso Introductorio de MatLab

Supongamos que un programa en Pascal, FORTRAN, BASIC o


C han producido un archivo ASCII llamado IN.DAT con los siguientes
valores:
1.00 2.01 3.98 9.67 2.89
4.12 12.65 7.99 23.43 0.01

En tal caso utilizaremos el comando load IN.DAT para leer el archivo y


almacenar los datos en una variable con el mismo nombre del archivo
(sin extensin): en este caso el resultado ser
Pedro Ochoa Moreno
56
Curso Introductorio de MatLab

1.00 2.01 3.98 9.67 2.89


IN
4.12 12.65 7.99 23.43 0.01

Un comando dual seria save FileName VarName, el cual almacena la


variable VarName en el Archivo FileName.MAT; save FileName
almacena todas las variables del espacio de trabajo en uso en el
archivo FileName.MAT y el simple comando save almacena todas las
variable en un archivo por default denominado MATLAB.MAT. Por
Pedro Ochoa Moreno
57
Curso Introductorio de MatLab

ltimo, si queremos salvar algunas variables pero no todas en un


simple archivo, utilizaremos el siguiente formato que usa espacios en
blanco para separar las variables,

save FileName VarName1 VarName2 VarName3

Al teclear el comando anterior no es necesario que aada la


extensin .MAT al archive y aqu el entorno de MatLab lo hace por si

Pedro Ochoa Moreno


58
Curso Introductorio de MatLab

solo. Tambin es importante que si queremos importar el archivo de


datos fuera del entorno de MatLab, debemos salvar las variables en
formato ASCII de tal forma que pueda ser ledo, por ejemplo, un
procesador de texto o otros programas, la opcin ascii deber ser
usada,

save FileName.Extension VarName ascii

Pedro Ochoa Moreno


59
Curso Introductorio de MatLab

2.4 Ejercicios

2.1 De entrada a los siguientes vectores:

1
a 3 4 5 10 1 , b 1
3
Pedro Ochoa Moreno
60
Curso Introductorio de MatLab

2.2 Defina la variable A como la matriz identidad de cuarto orden.

2.3 Defina un vector columna v con cinco ceros y un uno, luego


slvelo en un archivo ASCII, V.DAT; salga de MatLab, utilice
un editor de texto, el ltimo uno reemplcelo por un dos.
Posteriormente, reinicie en MatLab y cargue el archivo para
verificar el resultado.

Pedro Ochoa Moreno


61
Curso Introductorio de MatLab

Pedro Ochoa Moreno


62
Curso Introductorio de MatLab

Pedro Ochoa Moreno


63
Curso Introductorio de MatLab

Pedro Ochoa Moreno


64
Curso Introductorio de MatLab

Pedro Ochoa Moreno


65
Curso Introductorio de MatLab

Pedro Ochoa Moreno


66
Curso Introductorio de MatLab

Pedro Ochoa Moreno


67
Curso Introductorio de MatLab

Pedro Ochoa Moreno


68
Curso Introductorio de MatLab

Pedro Ochoa Moreno


69
Curso Introductorio de MatLab

Pedro Ochoa Moreno


70
Curso Introductorio de MatLab

3
Manipulacin de vectores y
matrices
Pedro Ochoa Moreno
71
Curso Introductorio de MatLab

En este capitulo pretendo presentar algunos comandos para


generar vectores y matrices de manera automtica, as tambin
explicare como construir matrices a partir de submatrices y como
extraer submatrices de matrices dadas.

3.1 Elementos de una matriz

Pedro Ochoa Moreno


72
Curso Introductorio de MatLab

Los elementos de entrada de una matriz se encuentran


disponibles a travs de ndices; para extraer de la matriz A los
elementos de la fila i-esima y j-esima columna y almacenar estos en la
variable a, usaremos la siguiente notacin:

a A (i, j )

Pedro Ochoa Moreno


73
Curso Introductorio de MatLab

Una de las caractersticas importantes de MatLab, es que este


no requiere que se le definan de antemano las dimensiones de una
matriz, como ejemplo, tenemos el siguiente caso:

x 1.3 sqrt(3) (1 2 3) * 4/5

el cual nos regresa

Pedro Ochoa Moreno


74
Curso Introductorio de MatLab

x 1.3000 1.7321 4.8000

si le damos entrada a la orden

x(6) x(2)

el resultado ser

Pedro Ochoa Moreno


75
Curso Introductorio de MatLab

x 1.3000 1.7321 4.8000 0 0 1.7321

lo cual nos muestra que no hay una necesidad explicita de actualizar


las dimensiones del vector (o matriz). Ntese que la falta de
informacin para los elementos x(4) y x(5) har que MatLab asuma
que son cero por default. Por otro lado, si usamos la orden x(4)=[ ],
esta eliminara la entrada x4, entonces la dimensiones del vector se
vern reducidas a 5. Pero si usamos, x=[ ] entonces el vector se

Pedro Ochoa Moreno


76
Curso Introductorio de MatLab

limpiara, pero haciendo la aclaracin que la variable no desaparecer


del espacio de trabajo, para hacer que esta desaparezca simplemente
tecleamos clear x.
Por otra parte, los vectores y matrices pueden ser yuxtapuestos
(adosados (unir o juntar)), por ejemplo,

1 2 5 6
A , B
3 4 7 8

Pedro Ochoa Moreno


77
Curso Introductorio de MatLab

Si escribimos en el espacio de trabajo de MatLab, las ordenes


siguientes

C [A B], D [A;B]

Obtenemos

Pedro Ochoa Moreno


78
Curso Introductorio de MatLab

1 2
3 4
1 2 3 4
C , D
5 6 7 8 5 6

7 8

La operacin inversa de la anterior es la de extraer las


submatrices de las matrices C y D, esto se vera en el punto 3.3.

Pedro Ochoa Moreno


79
Curso Introductorio de MatLab

Las dimensiones de una matriz son proporcionadas por el


comando size. Por ejemplo, si C es una matriz definida con
anterioridad, entonces

[m, n] size(C)

esta orden nos da m=2 y n=4. Para conocer las dimensiones de un


vector es suficiente con aplicar la orden length. Por lo general una

Pedro Ochoa Moreno


80
Curso Introductorio de MatLab

sesin interactiva de MatLab produce un nmero deseado de


resultados y un nmero bastante grande de variables no deseadas, la
ms comn entre todas es la variable predefinida ans (answer), la cual
almacena los resultados de las ltimas rdenes, a menos que el
resultado sea asignado explcitamente a una variable. Por ejemplo,
cuando escribimos

h length(x)

Pedro Ochoa Moreno


81
Curso Introductorio de MatLab

donde la longitud del vector x es asignado a la variable h; pero si


escribimos

length(x)

La longitud del vector x es calculada y almacenada en la variable


predefinida ans.

Pedro Ochoa Moreno


82
Curso Introductorio de MatLab

Por ahora no hay problema con las variables que hemos


manejado, pero si el numero de estas se incrementara, la orden who
nos da una lista de las usadas en el espacio de trabajo; pero si
tambin estamos interesados en el espacio que ocupan en memoria
teclearemos la orden whos, la cual nos proporcionara las variables
con sus tamaos.

Pedro Ochoa Moreno


83
Curso Introductorio de MatLab

3.2 Intervalos de representacin

En esta seccin discutiremos como representar los intervalos en


el entorno de MatLab. Un intervalo es un conjunto de nmeros cuyas
caractersticas se basan en el primer y ltimo nmero, as, como el
tamao del paso usado entre ellos. Por ejemplo, podemos remplazar
el vector [1,2,3,4,5,6,7,8,9] con uno que nos diga que es de 1 a 9
avanzando de en 1en 1.

Pedro Ochoa Moreno


84
Curso Introductorio de MatLab

El operador ms comnmente usado en este caso es el carcter


: (colon), el cual es usado para generar vectores con espacio iguales:
por ejemplo, x=1:5 nos da el vector rengln x = [1,2,3,4,5]. Existe la
posibilidad de llevar a cabo diferentes incrementos, mediante la
siguiente forma

x x_min : Delta : x_max

Pedro Ochoa Moreno


85
Curso Introductorio de MatLab

Donde x_min y x_max son los limites mnimo y mximo del


intervalo y Delta es el tamao del paso, por ejemplo, en el caso donde

x 0 : pi/6 : pi

Lo anterior, resulta en

x 0 0.5236 1.0472 1.5708 2.0944 2.6184 3.1416

Pedro Ochoa Moreno


86
Curso Introductorio de MatLab

En MatLab, pi es la variable predefinida para .


Un tamao de paso negativo es tambin permitido: por ejemplo
x = 5:-1:1, este nos da como resultado x = [5,4,3,2,1]. Una forma
diferente de obtener el mismo resultado es la utilizacin de la funcin
linspace, pero en este caso necesitamos arreglar el nmero de puntos
en el intervalo en lugar del tamao del paso; su sintaxis es la
siguiente:

Pedro Ochoa Moreno


87
Curso Introductorio de MatLab

linspace (x_min, x_max, # Points)


Por lo tanto, k=linsapace(-pi,pi,6), nos dar como resultado

k 3.1416 1.8850 0.6283 0.6283 1.8850 3.1416

Pedro Ochoa Moreno


88
Curso Introductorio de MatLab

En el ejemplo anterior, si el tercer parmetro es omitido MatLab


asume por default 100 puntos. Entonces si, linspace(-pi,pi) esta orden
creara un vector con cien entradas.
No siempre es muy usual representar un intervalo numrico con
valores equidistantes. Es bien conocido que, en la msica, la misma
nota en diferentes octavas son producidas mediante las vibraciones de
las medias acsticas con el doble de las frecuencias; entonces la
representacin de una frecuencia en el piano de siete octavas es

Pedro Ochoa Moreno


89
Curso Introductorio de MatLab

obtenida de una forma mejor al doblar el tamao del paso en lugar de


usar un paso constante y lineal. Estas consideraciones tienen su razn
de ser al analizar todos los fenmenos en el dominio de la frecuencia.
La orden logspace trabaja como en una forma parecida a linspace,
esto es, con la siguiente sintaxis

logspace ( xmin, x_max, # Points)

Pedro Ochoa Moreno


90
Curso Introductorio de MatLab

El resultado al aplicar la orden anterior, se vera que los puntos


sern espaciados logartmicamente de acuerdo a la potencia de 10, y
el nmero por default al omitirse el #Points es de cincuenta. Los
valores iniciales y finales del intervalo son en realidad las potencias de
10 de los nmeros actualmente representados. Por ejemplo, logspace
(1,2) representara el intervalo 101 , 10 2 el cual utilizara cincuenta
puntos espaciados logartmicamente.

Pedro Ochoa Moreno


91
Curso Introductorio de MatLab

Vale la pena hacer nfasis que la relacin que existe entre


linspace y logspace por medio del siguiente ejemplo: x=logspace
(1,2) e y= linspace (1,2,50) los cuales definen dos vectores tales que
xi 1 1.084 xi y yi 1 yi 0.0204 ; ntese que log10 1.0481 0.0204 por lo
tanto la conexin entre los dos operadores es fcilmente encontrada,
lo anterior se puede visualizar en la figura 3.1.

Pedro Ochoa Moreno


92
Curso Introductorio de MatLab

100 2

90 1.9

1.8
80
1.7
70
1.6
60
1.5
50
1.4
40
1.3

30
1.2

20 1.1

10 1
Pedro
0
Ochoa
5 10 15
Moreno
20 25
Logspace
30 35 40 45 50 0 5 10 15 20 25
Linspace
30 35 40 45 50

93
Curso Introductorio de MatLab

(a) (b)

Pedro Ochoa Moreno


94
Curso Introductorio de MatLab

1.9

1.8

1.7

1.6

Linspace
1.5

1.4

1.3

1.2

1.1

1
Pedro Ochoa Moreno 10 20 30 40 50 60
Logspace
70 80 90 100

95
Curso Introductorio de MatLab

(c)

Figura 3.1. (a) Representacin logartmica, (b) representacin lineal, y


(c) combinacin de ambas representaciones.
3.3 Operaciones para manipular matrices

Una de las caractersticas mas potentes de MatLab es su


habilidad para extraer submatrices de matrices dadas; lo cual es

Pedro Ochoa Moreno


96
Curso Introductorio de MatLab

llevada a cabo mediante la indexacin de la matriz por un vector. Esto


con anterioridad ha sido establecido, que dados dos enteros i y j, A(i,j)
nos dar el (i,j)-esima entrada de la matriz A. Por otra parte, cuando i y
j son vectores, entonces A(i,j) nos da las entradas A(i(1),1),,A(i(n),1),
mientras que la orden A(i,j) nos da la submatriz extrada de A,
considerando que i nos representa la indexacin de filas y j la de
columnas. Por ejemplo, si tenemos una matriz A de 5x6, entonces B =
A(1:3,1:3) esta orden nos mostrara una submatrix de 3x3 con las

Pedro Ochoa Moreno


97
Curso Introductorio de MatLab

primeras tres filas y la tres primeras columnas de la matriz A. Si la


matriz A la definimos como,

1 2 3 4 5 6
7 8 9 3 4 2

A 1 2 3 4 7 8

4 0 2 5 8 1
3 9 6 8 1 0

Pedro Ochoa Moreno


98
Curso Introductorio de MatLab

Si tecleamos la orden B = A(1:3,1:3), obtendremos la siguiente


submatriz de 3x3:

1 2 3
B 7 8 9
1 2 3

Por otro lado, si la orden se cambia a C = A(2:5,3:6), se obtiene


la siguiente submatriz de 4x4:
Pedro Ochoa Moreno
99
Curso Introductorio de MatLab

9 3 4 2
3 4 7 8
C
2 5 8 1

6 8 1 0

Por otra parte, los vectores pueden tener tambin un tamao de


paso negativo; por ejemplo, si tenemos

Pedro Ochoa Moreno


100
Curso Introductorio de MatLab

1 2 3 6
B 3 5 8 12

2 0 1 9

Entonces, si C = B(3:-1:1,1:2:4), entonces tenemos la siguiente


submatriz de 3x2:
2 1
C 3 8

1 3
Pedro Ochoa Moreno
101
Curso Introductorio de MatLab

Para indexar todos los renglones o columnas se usa el carcter


:; por ejemplo, C = B(1:2,:) extrae las primeras dos filas y todas las
columnas de la matriz A.

1 2 3 6
C
3 5 8 12

Pedro Ochoa Moreno


102
Curso Introductorio de MatLab

Por ltimo, si a y k son vectores n-dimensiones y las entradas de


k son solo ceros y unos, entonces a(k) nos dar solo las entradas
correspondientes a la misma posicin de los unos: si a = [2 4 45 22] y
k = [0 1 0 1], entonces a(k) nos dar:

ans=
4 22

Pedro Ochoa Moreno


103
Curso Introductorio de MatLab

Lo anterior nos indica que este tipo de operaciones ser el


apropiado para operaciones lgicas, que se vern ms adelante.

3.4 Matrices especiales

A continuacin se presenta una lista de funciones para generar


las matrices que mas frecuentemente se utilizan en MatLab:

Pedro Ochoa Moreno


104
Curso Introductorio de MatLab

eye Matriz identidad


zeros Matriz de ceros
ones Matriz de unos
ai , j 1, i, j
diag Matriz diagonal
La orden eye nos muestra en el espacio de trabajo la matriz
identidad en este caso ans= 1, debido a que no se manejan

Pedro Ochoa Moreno


105
Curso Introductorio de MatLab

dimensiones, entonces, si tecleamos eye(4) esta orden generara una


matriz identidad de 4x4, como se muestra a continuacin:
ans
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

Pedro Ochoa Moreno


106
Curso Introductorio de MatLab

Pero si tecleamos en el formato: eye(m,n), esta nos dar una


matriz mxn con unos en su diagonal principal, por ejemplo: eye(5,7)
nos mostrara,

Pedro Ochoa Moreno


107
Curso Introductorio de MatLab

ans
1 0 0 0 0 0 0
0 1 0 0 0 0 0
0 0 1 0 0 0 0
0 0 0 1 0 0 0
0 0 0 0 1 0 0

Pedro Ochoa Moreno


108
Curso Introductorio de MatLab

Tambin se hace la aclaracin que si se tiene una matriz A de


dimensiones 5x5, al usar la orden eye(size(A)) el tamao de la matriz
A permanecer inclume.
Ceros (zeros) y unos (ones) producen matrices en que todos los
elementos sern ceros o unos respectivamente; cuando se invocan
con un solo argumento estos regresan matrices cuadradas: por
ejemplo, zeros(3) lo cual resulta en lo siguiente:

Pedro Ochoa Moreno


109
Curso Introductorio de MatLab

0 0 0
0 0 0

0 0 0

Por el otro lado, zeros(m,n) (tambin se aplica a ones) producir


una matriz de mxn: por ejemplo, ones(1,5) lo cual nos dar [1 1 1 1 1].
Finalmente, tenemos que la orden zeros (size(A)) nos da una matriz
nula con el mismo tamao de la matriz A.

Pedro Ochoa Moreno


110
Curso Introductorio de MatLab

Si por ejemplo le asignamos valores a una matriz A de 4X4 y


dichos valores los introducimos en el espacio de trabajo, como se
muestra a continuacin:

A=[1 2 3 4;5 6 7 8;3 4 6 9;2 4 6 8]

A=

Pedro Ochoa Moreno


111
Curso Introductorio de MatLab

1 2 3 4
5 6 7 8
3 4 6 9
2 4 6 8

Luego procedemos a aplicar la orden zeros(size(A)):

zeros(size(A))

Pedro Ochoa Moreno


112
Curso Introductorio de MatLab

Podemos ver que el resultado es realmente una matriz nula de


las mismas dimensiones de A, como se observa a continuacin:

ans =

0 0 0 0
0 0 0 0

Pedro Ochoa Moreno


113
Curso Introductorio de MatLab

0 0 0 0
0 0 0 0

La orden diag trabaja en dos formas diferentes. Si su argumento


de entrada es un vector, este nos regresa una matriz cuadrada cuyos
elementos de la diagonal son los elementos del vector dado; por
ejemplo, A=diag([1 2 3 4 ]) lo cual nos da

Pedro Ochoa Moreno


114
Curso Introductorio de MatLab

A=diag([1 2 3 4])

A=

1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4

Pedro Ochoa Moreno


115
Curso Introductorio de MatLab

Por otro lado, si el argumento de la orden diag es una matriz, por


ejemplo, diag(A), esta extrae la diagonal de la matriz y nos la presenta
en forma de vector columna, lo cual es diferente del vector fila dado
para generar la diagonal, para regresar y obtener ese vector columna
utilizaremos la orden diag(A) que ser la transpuesta, esta se vera en
el siguiente capitulo.

A=diag([1 2 3 4])

Pedro Ochoa Moreno


116
Curso Introductorio de MatLab

A=

1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4

Pedro Ochoa Moreno


117
Curso Introductorio de MatLab

B=diag(A)

B=

1
2
3
4

Pedro Ochoa Moreno


118
Curso Introductorio de MatLab

B=diag(A)'

B=

1 2 3 4

Pedro Ochoa Moreno


119
Curso Introductorio de MatLab

La introduccin de un segundo argumento nos mostrara que la


diagonal empezara a partir del valor del nuevo argumento; por
ejemplo, diag(a,k) el resultara se vera a continuacin:

a=[1 2 3 4 5]

Pedro Ochoa Moreno


120
Curso Introductorio de MatLab

a=

1 2 3 4 5

k=2

k=

Pedro Ochoa Moreno


121
Curso Introductorio de MatLab

diag(a,k)

ans =

0 0 1 0 0 0 0
0 0 0 2 0 0 0

Pedro Ochoa Moreno


122
Curso Introductorio de MatLab

0 0 0 0 3 0 0
0 0 0 0 0 4 0
0 0 0 0 0 0 5
0 0 0 0 0 0 0
0 0 0 0 0 0 0

Pedro Ochoa Moreno


123
Curso Introductorio de MatLab

Podemos fcilmente visualizar que las dimensiones de la matriz


resultante ser la suma de los elementos del vector ms el valor del
argumento k, en este caso; 7x7.

3.5 Cadenas de caracteres

Una cadena de caracteres en MatLab es un conjunto de


caracteres alfanumricos acotados por apostrofes, como ejemplo

Pedro Ochoa Moreno


124
Curso Introductorio de MatLab

carcter. MatLab representa una cadena de caracteres como un


vector de caracteres, entonces a=[p,l,a,y] nos muestra la palabra
entre apostrofes. Por ejemplo,

a='play'

a=

Pedro Ochoa Moreno


125
Curso Introductorio de MatLab

play

a=['p','l','a','y']

a=

play

Pedro Ochoa Moreno


126
Curso Introductorio de MatLab

Para insertar un apostrofe dentro de una cadena, un apostrofe


doble deber ser usado, como se muestra a continuacin:

a='Albert''s dog'

a=

Albert's dog

Pedro Ochoa Moreno


127
Curso Introductorio de MatLab

Debido a que la palabra (string) es realmente un vector fila de


caracteres, un vector columna de palabras ser una matriz de
caracteres, por lo cual, cualquier palabra en el vector deber consistir
del mismo nmero de caracteres, incluidos los espacios en blanco:

A=[' today'

Pedro Ochoa Moreno


128
Curso Introductorio de MatLab

' it will'
' rain'];
A

A=

today
it will

Pedro Ochoa Moreno


129
Curso Introductorio de MatLab

rain

Una forma ms simple de llegar al resultado anterior, es el de


usar la orden str2mat, la cual agrupa las diferentes cadenas de
caracteres dentro de una matriz y mediante la adicin de caracteres en
blanco al final de cada palabra, esto se muestra en las siguiente lneas

Pedro Ochoa Moreno


130
Curso Introductorio de MatLab

A=str2mat ('today','it will','rain')


A=

today
it will
rain

Pedro Ochoa Moreno


131
Curso Introductorio de MatLab

Los operadores ms usuales en el manejo de cadena de


caracteres son: strcmp y findstr. El primero de ellos es realmente un
operador lgico y este se vera en mayor profundidades en el prximo
capitulo; pero un avance de su uso nos permitir visualizarlo de una
manera mas realista; cuando este es usado con la siguiente sintaxis
strcmp(a,b), nos presentara un 1 si las cadenas a y b son iguales, 0
para cualquier otra situacin. El segundo comando trabaja con la
misma sintaxis findstr(a,b), esta orden nos regresa la posicin de la

Pedro Ochoa Moreno


132
Curso Introductorio de MatLab

cadena b dentro de la a. por ejemplo, findstr(x,debe), donde x=Toda


duda debe ser aclarada, esto se muestra a continuacin:

x='Toda duda debe ser aclarada';


findstr(x,'debe')

ans =

Pedro Ochoa Moreno


133
Curso Introductorio de MatLab

11

Donde 11 es el punto ndice donde inicia la palabra buscada.

Algunos operadores estn, por lo tanto, disponibles para llevar a


cabo conversiones entre nmeros y cadenas y estos son:

Pedro Ochoa Moreno


134
Curso Introductorio de MatLab

int2str(a) Convierte un entero a en una cadena de


caracteres.
num2str(a) Ms general que el comando previo, este
convierte el valor de a en una cadena de caracteres.
str2num(s) Este comando es la contraparte de los dos
anteriores, al convertir la cadena de caracteres s en su
correspondiente valor numrico.

Pedro Ochoa Moreno


135
Curso Introductorio de MatLab

a=[1 2 3]
a=

1 2 3

b=int2str(a)

Pedro Ochoa Moreno


136
Curso Introductorio de MatLab

b=

1 2 3

c=num2str(a)

c=

Pedro Ochoa Moreno


137
Curso Introductorio de MatLab

1 2 3

d=str2num(b)

d=

1 2 3

Pedro Ochoa Moreno


138
Curso Introductorio de MatLab

3.6 Tcnicas de manipulacin avanzada de matrices

En esta seccin analizaremos los operadores de MatLab que


cambian el formato de las matrices al aplicarles estos. Aunque rara
vez son usados, el saber que estos existen nos puede simplificar el
trabajo cuando nos encontramos en situaciones especiales.

Pedro Ochoa Moreno


139
Curso Introductorio de MatLab

rot90 rotar la matriz en 90 en el sentido contrario a las


manecillas del reloj. Por ejemplo, si

A=[1 2 3;4 5 6;7 8 9]

A=

1 2 3
Pedro Ochoa Moreno
140
Curso Introductorio de MatLab

4 5 6
7 8 9

rot90(A)

ans =

3 6 9

Pedro Ochoa Moreno


141
Curso Introductorio de MatLab

2 5 8
1 4 7

fliplr y flipud estas ordenes nos permiten intercambiar las


columnas y las filas respectivamente de una matriz que es el
argumente de estas ordenes; lo anterior es equivalente a la
multiplicacin previa y posterior de la matriz por rot90(I), donde

Pedro Ochoa Moreno


142
Curso Introductorio de MatLab

I es la matriz identidad. Con la matriz A del ejemplo anterior,


aplicar fliplr(A) y flipud(A) lo cual nos resulta en:

fliplr(A)

ans =

3 2 1

Pedro Ochoa Moreno


143
Curso Introductorio de MatLab

6 5 4
9 8 7

flipud(A)

ans =

7 8 9

Pedro Ochoa Moreno


144
Curso Introductorio de MatLab

4 5 6
1 2 3

reshape es la orden ms potente que se usa para cambiar la


forma de la matriz. En realidad, reshape(A,m,n) producir una
matriz m x n cuyas entradas son tomadas en el sentido de las

Pedro Ochoa Moreno


145
Curso Introductorio de MatLab

columnas de una matriz. Las dimensiones usadas mxn deben


concordar con las de la matriz A.

reshape(A,3,3)

ans =

1 2 3

Pedro Ochoa Moreno


146
Curso Introductorio de MatLab

4 5 6
7 8 9

Supngase que nos dan un archivo tipo ASCII, DATA.PAS


creado por un programa externo, por ejemplo un en cdigo Pascal; si
el archivo consiste de una columna de 6 elementos que queremos
almacenar por filas en una matriz de 3x2. Entonces ser suficiente
teclear:

Pedro Ochoa Moreno


147
Curso Introductorio de MatLab

B=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
save vector B
clear,clc
who
load vector
A=(reshape(B,4,4))

Pedro Ochoa Moreno


148
Curso Introductorio de MatLab

3.7 Ejercicios

Ejercicio 3.1 Defina el vector x = [-3 -4 2 1 0 2 3 5 10] y calcule:

1. length(x);
2. size(x);

Pedro Ochoa Moreno


149
Curso Introductorio de MatLab

3. x(12) = -x(3).

Ejercicio 3.2 Cree el vector x=[1 2 3 4 5] y mediante la


manipulacin de este, defina el vector
y = [1 3 4 5 8].

Ejercicio 3.3 Construya el vector fila

Pedro Ochoa Moreno


150
Curso Introductorio de MatLab

[-1 -0.75 -0.5 -0.25 0 0.25 0.5 0.75 1]

1. Mediante la entrada de los valores en el teclado;


2. Mediante el uso del comando linspace(-1,1,9);
3. Mediante el operador :.

Ejercicio 3.4 Defina el vector

Pedro Ochoa Moreno


151
Curso Introductorio de MatLab

X = [1 2 3 4 5 6 20]

Usando el vector anterior crear el vector

Y = [1 2 3 4 5 6 20 20 6 5 4 3 2 1]

Ejercicio 3.5 Defina los vectores

Pedro Ochoa Moreno


152
Curso Introductorio de MatLab

a = [0 3 6 9]

b = [45 40 35 30]

y construya el vector

c = [0 45 3 40 6 35 9 30]

Pedro Ochoa Moreno


153
Curso Introductorio de MatLab

Ejercicio 3.6 Defina la matriz

1 0 6 3
1 2 0 2
A
0 3 1 3

6 6 4 1

y calcule
Pedro Ochoa Moreno
154
Curso Introductorio de MatLab

A(:,2), A(1:3,2:4), A([2 4], 3:4), A(:)

Ejercicio 3.7 Dada la matriz

1 2 3
A 4 5 6
7 8 9
Pedro Ochoa Moreno
155
Curso Introductorio de MatLab

extraiga la submatriz con entradas aij, con ndices


en la fila i = 2,3 e ndices en la columna j = 2,3.

Ejercicio 3.8 Defina las matrices

Pedro Ochoa Moreno


156
Curso Introductorio de MatLab

1 5 6 7
2 0 0 5 2 0 0
A 0 4 0 , B
6 0 3 0
0 0 6
7 0 0 4

y entonces implemente una matriz diagonal de


bloques.

Pedro Ochoa Moreno


157
Curso Introductorio de MatLab

A 0
C
0 B

Pedro Ochoa Moreno


158
Curso Introductorio de MatLab

Pedro Ochoa Moreno


159
Curso Introductorio de MatLab

Pedro Ochoa Moreno


160
Curso Introductorio de MatLab

4
Operaciones con escalares
Pedro Ochoa Moreno
161
Curso Introductorio de MatLab

Hasta ahora hemos discutido como dar entrada a datos y la


manipulacin de estos. En este capitulo, empezaremos por ocuparnos
de las operaciones aritmticas y lgicas sobre variables mediante la
introduccin de operaciones escalares. Por operaciones escalares
deberemos considerar no solo en los cuales los operandos son
variables escalares, sino tambin aquellos en que los operandos son
tratados como escalares. Por ejemplo, sqrt calcula la raz cuadrada,
por lo tanto, sqrt(2) nos dar 1.41421, pero tambin es posible utilizar

Pedro Ochoa Moreno


162
Curso Introductorio de MatLab

argumentos vectoriales: sqrt([1 2 3]) el cual resulta en [1 1.4142


1.7321], el mismo resultado puede ser obtenido en una forma menos
eficiente [sqrt(1) sqrt(2) sqrt(3)]. Todos los operadores descritos en
este capitulo trabajan en esa forma, estos pueden ser aplicados a
vectores y el resultado ser aquel deseamos obtener al aplicar dichos
operadores a cada elemento.
Por lo antes mencionado, es necesario conocer algunas de las
variables predefinidas por MatLab:

Pedro Ochoa Moreno


163
Curso Introductorio de MatLab

o ans es el resultado de cualquier operacin a la que no


se le asigno una variable;
o eps es la precisin actual de trabajo;
o computer este define el tipo de computadora;
o pi es el asignado literalmente a ;
o I, j es la unidad imaginaria ( 1 );
o Inf es el trmino infinito;
Pedro Ochoa Moreno
164
Curso Introductorio de MatLab

o NaN es el acrnimo de Not-a-Number (por ejemplo el


resultado de 0/0);
o clock es un reloj;
o cputime es el tiempo de maquina;
o date es el fechador;
o flops es el nmero de operaciones de punto flotante;
o realmax es el nmero ms grande permitido para
operaciones de punto flotante;
Pedro Ochoa Moreno
165
Curso Introductorio de MatLab

o realmin es el nmero ms pequeo de punto flotante.


o nargin es el nmero de argumentos de funciones de
entrada;
o nargout es el nmero de argumentos de funciones de
salida.

El significado de algunas de las variables es aparente, pero los


otros sern explicados posteriormente.
Pedro Ochoa Moreno
166
Curso Introductorio de MatLab

4.1 Operaciones aritmticas

Las operaciones algebraicas son llevadas a cabo por los


operadores ms comunes +, , , /. Existen, adems, los operadores ^
(funcin de potencia), sqrt (raz cuadrada) y \ (calcula la divisin
revertida), por ejemplo, 3\2 nos da 2/3=0.6667). Este ltimo operador

Pedro Ochoa Moreno


167
Curso Introductorio de MatLab

podra parecer no tener uso en operaciones escalares, pero este nos


muestra su importancia en el campo de las operaciones con matrices
que se mostrara en el siguiente capitulo.
Los operadores descritos en esta seccin obedecen a reglas del
lgebra matricial. Esto podria causar confusin cuando estos
operadores son aplicados a variables tipo vector. Por ejemplo, el
producto de ay de un escalar a por un vector y el cual es calculado
a y y lo cual nos dar el resultado correcto. Otro ejemplo, seria, el

Pedro Ochoa Moreno


168
Curso Introductorio de MatLab

producto de dos vectores el cual dentro de lgebra es definido como


el producto punto o escalar y as tambin es definido en MatLab.
Entonces, si tenemos que x = [x1 x2 x3] y y = [y1 y2 y3] T , x y nos
dar el producto punto x1y1+x2y2+x3y3, este resultado ser explicado
en mayor detalle en el siguiente captulo; pero si queremos un vector
cuyas entradas son el productos de las entradas homologadas,
deberemos usar el prefijo en el operador con el carcter . (dot): x. y
nos dar el resultado, ans = [x 1y1 x2y2 x3y3]. Los operadores ./ para la

Pedro Ochoa Moreno


169
Curso Introductorio de MatLab

divisin elemento por elemento y .^ para elevar a una potencia cada


elemento de un vector son definidos de una manera similar. Para el
caso del ltimo operador, cabe hacer mencin que el exponente puede
ser un escalar o un vector con la misma longitud con base al vector:

[3 5 7].^2

ans =

Pedro Ochoa Moreno


170
Curso Introductorio de MatLab

9 25 49

Pero en la segunda forma, en que cada elemento es elevado a la


potencia definida por el elemento del vector de potencias
correspondiente, tenemos

[3 5 7]. ^[3 2 1]

Pedro Ochoa Moreno


171
Curso Introductorio de MatLab

ans =

27 25 7

4.2 Funciones elementales y transcendentales

MatLab tiene las siguientes funciones elementales:

Pedro Ochoa Moreno


172
Curso Introductorio de MatLab

o Redondeo

round redondea al entero ms cercano;


fix redondeo hacia cero;
floor redondeo hacia el entero anterior;
ceil redondeo hacia el entero posterior.

o Aproximaciones racionales (razonables)


Pedro Ochoa Moreno
173
Curso Introductorio de MatLab

rem notificacin de una divisin entre enteros;


rat expansin racional;
rats aproximacin racional.

o Factorizacion de enteros

gcd mximo comn divisor;


Pedro Ochoa Moreno
174
Curso Introductorio de MatLab

lcm mnimo comn mltiplo.

o Aritmtica compleja

real parte real;


imag coeficiente o parte imaginaria;
conj conjugado complejo;
abs valor absoluto o mdulo complejo;
Pedro Ochoa Moreno
175
Curso Introductorio de MatLab

angle ngulo de fase o argumento complejo.

o Signum

sign funcin signum o Heaviside.

El significado de los operadores de redondeo y truncamiento


pueden fcilmente ser entendidos.
Pedro Ochoa Moreno
176
Curso Introductorio de MatLab

Las funciones de aproximacin racional producen una


aproximacin de sus argumentos mediante una proporcin de enteros.
Por ejemplo,

rats(9.22)

ans =

Pedro Ochoa Moreno


177
Curso Introductorio de MatLab

461/50

Cabe hacer la aclaracin que el resultado es una cadena de


caracteres.
Es posible tambin limitar la longitud de la cadena, cuyo valor
por defaul es de 13; por ejemplo,

rats(9.22,5)

Pedro Ochoa Moreno


178
Curso Introductorio de MatLab

ans =

46/5

podemos observar que la mxima salida se limito a una longitud de 5


caracteres y el resultado no los indica.

Pedro Ochoa Moreno


179
Curso Introductorio de MatLab

rats puede tambin ser usada para calcular el resultado de una


secuencia de operaciones algebraicas en el campo racional, teniendo
como resultado un elemento en el mismo campo: por ejemplo,
observemos el resultado de la siguiente secuencia,

rats(1-1/2+1/3-1/4+1/5)

ans =

Pedro Ochoa Moreno


180
Curso Introductorio de MatLab

47/60
cabe hacer la observacin de que el denominador es el mnimo comn
mltiplo de todos los denominadores.
Como se discuti con anterioridad, el objetivo de rats es
substancialmente la presentacin de los resultados en pantalla; por el
otro lado, rat actualmente calcula la expansin de la fraccin parcial
con la finalidad de obtener una aproximacin racional. En realidad,

Pedro Ochoa Moreno


181
Curso Introductorio de MatLab

dado cualquier numero real x, este podr ser siempre aproximado a un


nmero racional definido por la expansin truncada:

1
x d1
1
d2
1
d3 ...
dk

La funcin rat tiene la siguiente sintaxis:


Pedro Ochoa Moreno
182
Curso Introductorio de MatLab

[n,d] = rat(x,tol)

El resultado consiste de dos enteros n y d tales que su


proporcin satisfaga la relacin

n
x tol x
d

Pedro Ochoa Moreno


183
Curso Introductorio de MatLab

El valor por default para la tolerancia es de 10 6 .


La orden rat tambin puede ser invocada sin los argumentos de
salida, y en este caso esta nos dar como resultado una expansin
truncada:
rat(sqrt(2))

ans =

Pedro Ochoa Moreno


184
Curso Introductorio de MatLab

1 + 1/(2 + 1/(2 + 1/(2 + 1/(2 + 1/(2 + 1/(2 + 1/(2


+ 1/(2))))))))

El operador de factorizacin de enteros m=gcd(a,b) nos da como


resultado el mximo comn divisor m entre dos enteros a y b. Usado
en la forma [m,c,d] = gcd(a,b) el cual nos dar como resultado los
enteros c y d mediante la solucin de la ecuacin Diafontina m =
ac+bd. lcm trabaja de la misma manera.

Pedro Ochoa Moreno


185
Curso Introductorio de MatLab

Para los operadores en el campo complejo, debemos hacer


nfasis que MatLab tiene caracteres i y j predefinidos para la unidad
compleja. El numero complejo z = 2 + j3 es definido tambin por z = 2
+ j 3 o por z = 2 + i 3 o por z = 2 + 3i o finalmente por z = 2 +3j.
Tome en cuenta que las variables predefinidas no son protegidas, lo
cual significa que sus valores pueden ser redefinidos: si por ejemplo, a
la variable i se le asigna un valor esto es frecuentemente usado en los
ciclos; for i = 1:n, lo cual ser discutido en el capitulo de programacin.

Pedro Ochoa Moreno


186
Curso Introductorio de MatLab

Por ejemplo, si i=2, entonces z = 2 + i 3 el resultado ser z = 8; para


restaurar el valor original necesitamos teclear

i = sqrt(-1)

Tambin se puede omitir teclear el asterisco, solamente en el caso de


que las constantes sean numricas, no variables: MatLab acepta la

Pedro Ochoa Moreno


187
Curso Introductorio de MatLab

expresin z = 2 + 3j para definir el numero complejo z = 2 + j3, pero


hay que escribir

a=3;

z=2+a*j

z=

Pedro Ochoa Moreno


188
Curso Introductorio de MatLab

2.0000 + 3.0000i

Los operadores exponenciales y logartmicos son:

o pow2 funcin exponencial de base 2;


o exp funcin exponencial de base e;
o log logaritmo natural;
Pedro Ochoa Moreno
189
Curso Introductorio de MatLab

o log2 logaritmo de base 2;


o log10 logaritmo de base 10.

Por ltimo las operaciones trigonometricas son calculadas usando


los siguientes comandos:

o sin seno;
o cos coseno;
Pedro Ochoa Moreno
190
Curso Introductorio de MatLab

o tan tangente;
o asin seno inverso;
o acos coseno inverso;
o atan tangente inverso;
o atan2 tangente inverso de cuatro cuadrantes;
o sinh seno hiperblico;
o cosh coseno hiperblico;
o tanh tangente hiperblico;
Pedro Ochoa Moreno
191
Curso Introductorio de MatLab

o asinh seno inverso hiperblico;


o acosh coseno inverso hiperblico;
o sec secante;
o csc cosecante;
o cot cotangente;
o asec secante inversa;
o acsc cosecante inversa;
o acot cotangente inversa;
Pedro Ochoa Moreno
192
Curso Introductorio de MatLab

o sech secante hiperblica;


o csch cosecante hiperblica;
o coth cotangente hiperblica;
o asech secante inversa hiperblica;
o acsch cosecante inversa hiperblica;
o acoth cotangente inversa hiperblica.

Pedro Ochoa Moreno


193
Curso Introductorio de MatLab

Vale la pena hacer la aclaracin acerca de la tangente inversa:


atan(x) el cual nos regresa un valor dentro del intervalo [-/2, /2],
cuando atan2(y,x) calcula la tangente inversa en los cuatro cuadrantes,
el resultado estar en el intervalo de [-, ]; donde x e y son el coseno
y el seno del ngulo respectivamente.
Tambin es importante, conocer que existen operadores que nos
permitirn la conversin entre diferentes sistemas de coordenadas:

Pedro Ochoa Moreno


194
Curso Introductorio de MatLab

o cart2pol cartesiana --> polar (o cilndrica);


o pol2cart polar (o cilndrica) -> polar;
o cart2sph cartesiana -> esfrica;
o sph2cart esfrica -> cartesiana
En el caso de dos dimensiones (2D):

[theta,rh0] = cart2pol(x,y)

Pedro Ochoa Moreno


195
Curso Introductorio de MatLab

La cual convierte el par de coordenadas cartesianas ( xi , yi ) en un par


de coordenadas polares ( i , i ); los valores de i son en radianes. En
el caso de la conversin en tres dimensiones (3D) la conversin se da
en coordenadas cilndricas:

[theta,rho,z] = cart2pol(x,y,z)

La conversin a coordenadas esfricas es realizada por

Pedro Ochoa Moreno


196
Curso Introductorio de MatLab

[phi,theta,rho] = cart2sph(x,y,z)

De nueva cuenta y son expresados en radianes. La conversin


inversa trabaja en la misma forma.

Cabe hacer mencin que en el espacio de trabajo de MatLab hay


las ayudas para acceder a este tipo de funciones vistas en esta

Pedro Ochoa Moreno


197
Curso Introductorio de MatLab

seccin, los siguientes comandos nos proporcionaran la informacin


pertinente:

o help elfun - nos presentara las funciones matemticas


elementales.
o help specfun - nos presentara las funciones matemticas
especializadas.

Pedro Ochoa Moreno


198
Curso Introductorio de MatLab

4.3 Ejemplos

4.3.1 Funciones elementales

Como un ejemplo que resuma todo lo que hemos visto hasta


este momento, consideremos el problema de tabular la funcin log x

Pedro Ochoa Moreno


199
Curso Introductorio de MatLab

en el intervalo [1, 5] y con pasos de 0.1. Para cumplir con lo anterior,


es necesario teclear la siguiente secuencia de comandos:

x=(1:0.1:5)';
y=log(x);
[x y]
El resultado es:
ans =

Pedro Ochoa Moreno


200
Curso Introductorio de MatLab

1.0000 0
1.1000 0.0953
1.2000 0.1823

4.9000 1.5892
5.0000 1.6094

Pedro Ochoa Moreno


201
Curso Introductorio de MatLab

Cabe hacer la aclaracin que el vector x, fue transpuesto con el


nico propsito de poder visualizar mejor el resultado en la pantalla y
ver que este se en una tabla tipo columna.

4.3.2 Funciones de funciones

Pedro Ochoa Moreno


202
Curso Introductorio de MatLab

Un ejemplo mas general se muestra a continuacin: tabular el


valor de e 3t sin 5t en el intervalo t [2,2] utilizando cuarenta y cinco
puntos. Las instrucciones son:

t=linspace(-2,2,45)';
y =exp(3*t).*sin(5*pi*t);
[t y]

Pedro Ochoa Moreno


203
Curso Introductorio de MatLab

ans =

-2.0000 0.0000
-1.9091 0.0032

-0.0909 -0.7536
0 0

Pedro Ochoa Moreno


204
Curso Introductorio de MatLab

0.0909 1.3002

1.9091 -304.0044
2.0000 -0.0000
Ntese el uso de los operadores y . en la segunda lnea de
instrucciones; el ltimo es utilizado por porque tanto exp(3*t) como
sin(5*pi*t) nos darn un vector.

Pedro Ochoa Moreno


205
Curso Introductorio de MatLab

4.3.3 Funciones racionales

Como un ejemplo de esta ultima seccin, requeriremos la


tabulacin de una funcin racional

3s 2 5s 7
f ( s)
s 3 5s 2 7 s 12

Pedro Ochoa Moreno


206
Curso Introductorio de MatLab

con s j y [10 10 ] ; es conveniente usar la abcisa espaciada


2 2

logartmicamente, debido a que si no se hace esto, en el lmite inferior


del intervalo las tabulaciones sern muy escasas y muy saturadas o
densas en el limite superior del intervalo. Usaremos cincuenta puntos.
Las siguientes instrucciones nos permitirn obtener una solucin:

omega=logspace(-2,2)'; %Los argumentos son los exponentes


s=j*omega;

Pedro Ochoa Moreno


207
Curso Introductorio de MatLab

x1=3*s.^2+5*s+7; %Tabular el numerador


x2=s.^3+5*s.^2+7*s+12; %Tabular el denominador
x=x1./x2; %Calcular los valores de la funcin
x=abs(x); %Calcular los mdulos de la funcin
[s x] % Mostrar los resultados

El resultado sera:

Pedro Ochoa Moreno


208
Curso Introductorio de MatLab

ans =

1.0e+002 *

0 + 0.0001i 0.0058
0 + 0.0001i 0.0058
0 + 0.0001i 0.0058

Pedro Ochoa Moreno


209
Curso Introductorio de MatLab


0 + 0.8286i 0.0004
0 + 1.0000i 0.0003
4.4 Operadores relacionales y lgicos

En esta seccin se definen los siguientes operadores racionales:

Pedro Ochoa Moreno


210
Curso Introductorio de MatLab

menor que
menor o igual
mayor que
mayor o igual
igual
~ no igual

Pedro Ochoa Moreno


211
Curso Introductorio de MatLab

y los operadores lgicos:

& and
| or
xor or exclusive
~ not

Pedro Ochoa Moreno


212
Curso Introductorio de MatLab

El valor Falso es indicado por 0; as la operacin 2 2 ~ 4 nos da


0; estos operadores pueden ser aplicados a matrices: por ejemplo, si
queremos encontrar los elementos de la siguiente matriz

1 2 3 4
A
5 6 7 8

que puedan ser dividido por 2 (sin residuo), basta con escribir la
siguiente lnea:
Pedro Ochoa Moreno
213
Curso Introductorio de MatLab

P=(rem(A,2)==0)

la cual nos da como resultado,

P=

0 1 0 1
0 1 0 1
Pedro Ochoa Moreno
214
Curso Introductorio de MatLab

El ejemplo anterior nos permite vislumbrar algunas consideraciones de


importancia. Notemos que el operador rem previamente definido en
argumentos escalares, ha sido aplicado en este caso a una matriz y su
resultado vuelve a ser una matriz. Podemos pensar que existe una
incongruencia, dado que el operador de prueba de igualdad == tiene
una matriz en su lado izquierdo y un escalar en el lado derecho, una
respuesta ha esto lo encontraremos en el siguiente capitulo en que
trataremos el tpico de matrices.

Pedro Ochoa Moreno


215
Curso Introductorio de MatLab

4.5 Ejercicios

Ejercicio 4.1 Para cada par de coeficientes (a,b) de la ecuacin


ax+b=0 que se dan en la tabla 4.1, calcular la solucin para x
sujeto a las restricciones x donde es un anillo de enteros.

Pedro Ochoa Moreno


216
Curso Introductorio de MatLab

Cuando la ecuacin no admita solucin en , resolver el


problema

min
x
ax b

a 2 5 8 13 5 0.1
b 4 3 28 -33 72 2

Pedro Ochoa Moreno


217
Curso Introductorio de MatLab

Tabla 4.1. Coeficientes.

Ejercicio 4.2 Calcule x mod 3 para x = [1 5 312 22 64].

Ejercicio 4.3 Dados x = 3+j5, y =-2+j4, z = j3, calcular:

1. x+y, x-z, (x+y)z;

Pedro Ochoa Moreno


218
Curso Introductorio de MatLab

2. |x|, 1/y, z;
3. log x, e y , |x/y|.

Ejercicio 4.4 Resolver el sistema

x2 y2 a
x/ y b
para a = (1 4 3) y b = (1 3 0.5).

Pedro Ochoa Moreno


219
Curso Introductorio de MatLab

Ejercicio 4.5 Verificar la formula de Euler

e z e x jy e x (cos y j sin y )

con diferentes nmeros complejos z.

Pedro Ochoa Moreno


220
Curso Introductorio de MatLab

Ejercicio 4.6 Defina el vector x con 31 valores dentro del


intervalo 1 / 2, 2 5 y espaciados de acuerdo al logaritmo de base
2.

Ejercicio 4.7 Hagamos referencia al vector x del ejercicio 3.1 y


calculemos:

L = (x>=2), L = (x>3), L = (x<3), L = (x<4 & x>~4)

Pedro Ochoa Moreno


221
Curso Introductorio de MatLab

Ejercicio 4.8 Dado el vector x = [1 34 -12 56 7 0 9] muestre


solamente los valores mayores que 5.

Pedro Ochoa Moreno


222
Curso Introductorio de MatLab

Pedro Ochoa Moreno


223
Curso Introductorio de MatLab

Pedro Ochoa Moreno


224
Curso Introductorio de MatLab

Pedro Ochoa Moreno


225
Curso Introductorio de MatLab

Pedro Ochoa Moreno


226
Curso Introductorio de MatLab

Pedro Ochoa Moreno


227
Curso Introductorio de MatLab

Pedro Ochoa Moreno


228
Curso Introductorio de MatLab

Pedro Ochoa Moreno


229
Curso Introductorio de MatLab

5
Operaciones con matrices
Pedro Ochoa Moreno
230
Curso Introductorio de MatLab

Cabe hacer mencin que en el capitulo 1 se estableci que el


elemento bsico en MatLab es la matriz: tambin podemos aseverar
que una variable escalar de 1 x 1 es una matriz. Lo anterior implica
que las operaciones escalares discutidas en el capitulo previo se
pueden extender a las matrices. Considere, por ejemplo, la matriz

1 3
A
4 2
Pedro Ochoa Moreno
231
Curso Introductorio de MatLab

entonces C=exp(A) resulta en la matriz

e1 e3
A 4
e e2

Pedro Ochoa Moreno


232
Curso Introductorio de MatLab

Claramente, podemos observar que el resultado es calculado


elemento por elemento, por lo tanto, esta operacin no nos da la
exponencial de una matriz, la cual es definida como


An
eA
n o n!

Pedro Ochoa Moreno


233
Curso Introductorio de MatLab

Por lo anterior, en este capitulo haremos nfasis en operaciones


con matrices estrictamente, como es el caso de las operaciones
definidas de acuerdo con las reglas de la lgebra matricial.

5.1 Transpuesta

Pedro Ochoa Moreno


234
Curso Introductorio de MatLab

Con anterioridad hemos mencionado esta operacin, esta es


ejecutada tanto para matrices como para vectores, usando el carcter
(apostrofe); las siguientes lneas nos muestra como se obtiene

A=[1 2 3; 4 5 6;7 8 0];


B=A';

A=

Pedro Ochoa Moreno


235
Curso Introductorio de MatLab

1 2 3
4 5 6
7 8 0

B=

1 4 7

Pedro Ochoa Moreno


236
Curso Introductorio de MatLab

2 5 8
3 6 0

Realmente, el operador nos da la transpuesta de un conjugado


complejo, tal como [1+j,1-2 j] nos da

1 j
1 2 j

Pedro Ochoa Moreno


237
Curso Introductorio de MatLab

Es bien sabido, que esto es realizado al inducir en el campo


complejo una norma que iniciara con el producto interno, de acuerdo a
la siguiente expresin
2
x x H , x

Pedro Ochoa Moreno


238
Curso Introductorio de MatLab

En el caso de vectores o matrices complejas, para obtener una


transpuesta pura, sin conjugados, el operador . deber ser usado,
[1+j,1-2 j]. y lo cual nos da

1 j
1 2 j

5.2 Operaciones algebraicas

Pedro Ochoa Moreno


239
Curso Introductorio de MatLab

Las operaciones algebraicas bsicas son +, -, ; para la divisin


de matrices MatLab utiliza dos smbolos diferentes:

X = A\B que se calcula X = A B , solucionando el sistema A


1

X = B (divisin izquierda).
X = A/B que se calcula B A , que se resuelve X A = B
1

(divisin derecha).

Pedro Ochoa Moreno


240
Curso Introductorio de MatLab

La funcin de potencia es obtenida mediante el uso del operador ^.


La matriz puede ser calculada, ya sea por B = inv(A) o con B = A^(-1).
Las reglas de sintaxis son las mismas que para la lgebra estndar:
por ejemplo, La suma y resta en matrices es valida para aquellas que
tienen las mismas dimensiones; la excepcin en MatLab es que este
permite la suma y resta entre una matriz A y un escalar a. En este
caso el escalar es transformado en una matriz de tamao adecuado
cuyas entradas son todas iguales al escalar (cabe hacerse la

Pedro Ochoa Moreno


241
Curso Introductorio de MatLab

aclaracin que esto es un poco diferente de lo que se esperaba en


este caso, como muestra, A + aI, donde I es una matriz identidad).
Como es usual, en el producto de matricial el nmero de columnas
de la primera matriz y el nmero de filas de la segunda matriz debern
ser iguales. Tambin el producto entre un escalar y una matriz sigue la
misma regla algebraica, por ejemplo, si tenemos una matriz dada
cuyas entradas son las entradas de la matriz por el escalar.

Pedro Ochoa Moreno


242
Curso Introductorio de MatLab

Completaremos esta seccion con unas cuantas palabras acerca de


los operadores de divisin: la divisin izquierda A\B nos da A 1B si A
es cuadrada y no singular, de otra manera esta nos da una solucin de
mnimos cuadrados al problema AX =B, mas especficamente esta nos
da la solucin con entradas k diferentes de cero para cada columna a
lo menos, donde k es la matriz de rango. Anlogamente la divisin
derecha es definida por B/A = (A/B).

Pedro Ochoa Moreno


243
Curso Introductorio de MatLab

5.3 Funciones matriciales

En esta seccin se vern algunas funciones de matrice s


elementales. Tambin asumiremos para el resto de esta seccin que A
es una matriz y x es un vector.
max(x) (min(x)) nos dan la entrada ms grande (pequea) del
vector x; cuando este comando es aplicado a una matriz, su
Pedro Ochoa Moreno
244
Curso Introductorio de MatLab

resultado ser un vector fila cuyos elementos son las entradas


mas grandes para cada columna de la matriz; por lo tanto, el
elemento mas grande de la matriz A es calculado con
max(max(A)).
Un uso ms general de este comando es

[Y,I] = max(X)

Pedro Ochoa Moreno


245
Curso Introductorio de MatLab

donde Y es el elemento mas grande ( o el vector del elemento


mas grande si X es una matriz, e I es el ndice del valor mas
grande, si tenemos, un entero apuntando a la posicin del valor
en X (otra vez, en este caso la matriz I es un vector de ndices,
uno por columna).
max tambin puede ser dado con dos argumentos: por ejemplo,
si A y B son dos matrices de las mismas dimensiones, Y = max
(A,B) se creara una matriz Y cuyas entradas son las mas

Pedro Ochoa Moreno


246
Curso Introductorio de MatLab

grandes de sus entradas homologas en las matrices A y B, si los


elementos ijth de Y son yij = max(aij,bij).

sort(x) sortea el vector x en un orden creciente. Cuando este


comando es aplicado a una matriz, este ejecuta un sorteo a cada
columna en un orden creciente.
Existe la posibilidad de almacenar las permutaciones que son
generadas por el sorteo en una segunda variable de salida: y
Pedro Ochoa Moreno
247
Curso Introductorio de MatLab

esto seria valido con [y, ind]= sort(x) el cual nos dar un vector
de ndices enteros, cuyas entradas son apuntadores del vector x
de tal manera que x(ind) nos dar el sorteo del vector y.
Consideremos, por ejemplo,

x=[41 11 12 12 50];
[y,ind]=sort(x);

Pedro Ochoa Moreno


248
Curso Introductorio de MatLab

y=

11 12 12 41 50
ind

Pedro Ochoa Moreno


249
Curso Introductorio de MatLab

ind =

2 3 4 1 5
El significado de ind es: el vector y sorteado es construido con la
segunda entrada de x, luego la tercera, la cuarta y por ultimo la
quinta; en otras palabras y es x(ind). Obsrvese que en el caso
de entradas repitadas (el valor de 12 en nuestro ejemplo), el
comando sort no altera el orden. En el caso de la matriz [Y,ind] =

Pedro Ochoa Moreno


250
Curso Introductorio de MatLab

sort(x) el sorteo se lleva a cabo en el sentido de las columnas y


dandonos una matriz de permutaciones.

sum(x), mean(x) son las sumas y el valor medio de las entradas


en el vector x, respectivamente; estos comandos tambin, como
los vistos con anterioridad trabajan en el sentido de las
columnas, dndonos como resultados vectores fila cuando estos
son aplicados a matrices.
Pedro Ochoa Moreno
251
Curso Introductorio de MatLab

rank(A) calcula el rango de la matriz A, por ejemplo, el nmero


mayor de filas o columnas linealmente independientes.
En este caso, es posible especificar una tolerancia: rank(A,tol) la
cual nos dar el rango hasta la tolerancia tol mediante el clculo
de los valores singulares que excedan el de valor de este.

det(A) nos da como resultado el determinante.


Pedro Ochoa Moreno
252
Curso Introductorio de MatLab

poly(A) nos dar los coeficientes en un orden decreciente de


potencias del polinomio caracterstico de la matriz A, p I A ;
posteriormente en el capitulo veremos que la aplicacin de este
comando cuando sea invocado con un vector de argumentos,
tendr un significado completamente diferente.

Pedro Ochoa Moreno


253
Curso Introductorio de MatLab

trace(A) este comando nos proporciona la traza de la matriz A,


por ejemplo, en el siguiente la traza seria la suma de los
elementos de la diagonal principal, como se muestra a
continuacin:

A=[2 7 8;3 9 4;2 4 6]


A=

Pedro Ochoa Moreno


254
Curso Introductorio de MatLab

2 7 8
3 9 4
2 4 6

trace(A)

ans =

Pedro Ochoa Moreno


255
Curso Introductorio de MatLab

17

norm(X, argumento) calcula la normal de una matriz o un vector


de acuerdo a la siguiente tabla, en la cual A es una matriz y x es
un vector:

Comando Operacin Comentarios

Pedro Ochoa Moreno


256
Curso Introductorio de MatLab

m
A 1 max aij
norm(A,1) j
i 1 El mas grande
Suma de columna
norm(A,2) A 2
max i i (A H A) con el mas grande
valor singular
m
A max aij
norm(A,inf) i
j-1 El mas grande

Pedro Ochoa Moreno


257
Curso Introductorio de MatLab

2 1

A F ( aij ) 2
norm(A,fro) ij La norma Frobenius
p 1
n

norm(x,p) x p ( x i ) p
La norma p
i1

norm(x) x 2
x x) H
La norma Euclidiana
El modulo mas
norm(x,inf) x max x i grande
i

Pedro Ochoa Moreno


258
Curso Introductorio de MatLab

El modulo mas
norm(-x,inf) x min
i
xi pequeo

Donde el exponente H nos indica la transpuesta de la conjugada.


La norm(x) es equivalente a la norm(x,2) ambos casos para
matrices y vectores.
kron(A,B) nos da como resultado un producto tensor de
Kronecker, por ejemplo, el resultado es una matriz cuyo bloque
Pedro Ochoa Moreno
259
Curso Introductorio de MatLab

ijthes el producto de la ijth entrada de A y de la matriz B, (A B)ij


=aijB.

A=[1 2 3;4 5 6];


B=[3 4 5; 6 7 8];
kron(A,B)

ans =

Pedro Ochoa Moreno


260
Curso Introductorio de MatLab

3 4 5 6 8 10 9 12 15
6 7 8 12 14 16 18 21 24
12 16 20 15 20 25 18 24 30
24 28 32 30 35 40 36 42 48

Estas funciones cubren una amplia variedad de aplicaciones:


desde una simple operacin de bsqueda de entradas extremas de un

Pedro Ochoa Moreno


261
Curso Introductorio de MatLab

vector con las funciones max y min, a la normalizacin de un vector


con x/norm(x), hasta calcular la dimensin de un subespacio
dimensionado por un conjunto de vectores los cuales requieren que
los vectores sean apilados dentro de una matriz para calcular el rango:
rank([x1,x2,,xn]). El comando min, max y sort con dos parmetros
de salida ser particularmente til; si queremos calcular la entrada
mas grande de una matriz A junto con dos apuntadores a las
posiciones h, k, entonces podemos usar

Pedro Ochoa Moreno


262
Curso Introductorio de MatLab

A= [1 2 3;4 5 6;7 8 9];


[m1,i1]=max(A);
[m,k]=max(m1);
h=i1(k);
m1

m1 =

Pedro Ochoa Moreno


263
Curso Introductorio de MatLab

7 8 9

i1

i1 =
3 3 3

Pedro Ochoa Moreno


264
Curso Introductorio de MatLab

m=
9
k

k=
3
h

Pedro Ochoa Moreno


265
Curso Introductorio de MatLab

h=
3

A continuacin, se presentan unos ejemplos con mayor complejidad.


Supongamos que necesitamos sortear las columnas de una matriz con
respecto a la primera columna. Por ejemplo, si tenemos la siguiente
matriz

Pedro Ochoa Moreno


266
Curso Introductorio de MatLab

1 2
5 1
R
3 3

2 4

Usando A = sort(R) deber resultar en

A=
Pedro Ochoa Moreno
267
Curso Introductorio de MatLab

1 1
2 2
3 3
5 4

Pedro Ochoa Moreno


268
Curso Introductorio de MatLab

Debido a que las columnas han sido ordenadas independientemente, y


que su respectiva asociacin se pierde. Para mantener esa asociacin
podemos usar

[S,i1]=sort(R);
A=R(i1(:,1),:);
S

Pedro Ochoa Moreno


269
Curso Introductorio de MatLab

S=

1 1
2 2
3 3
5 4

i1

Pedro Ochoa Moreno


270
Curso Introductorio de MatLab

i1 =

1 2
4 1
3 3
2 4

Pedro Ochoa Moreno


271
Curso Introductorio de MatLab

A=

1 2
2 4
3 3
5 1

Pedro Ochoa Moreno


272
Curso Introductorio de MatLab

Las funciones exponenciales y algunas otras funciones


relacionadas en MatLab son:

o expm(A) calcula e A ;
o logm(A) calcula el log(A);

Pedro Ochoa Moreno


273
Curso Introductorio de MatLab

o sqrtm(A) solo trabaja con matrices positivas y calcula la


raz cuadrada de la matriz, por ejemplo, dada una matriz U
tal que A UH .U .

En particular, para calcular la funcin e A de la matriz


exponencial, MatLab nos ofrece tres operadores ms, que son:
expm1, expm2 y expm3, los cuales calculan el resultado mediante la

Pedro Ochoa Moreno


274
Curso Introductorio de MatLab

aproximacin de Pade, aproximacin de Taylor y los valores propios


respectivamente.
Operaciones de matrices adicionales, son obtenidas con los
comandos funm, cuya sintaxis es funm(X,funcion); es simplemente
aplicada a la funcin especfica de la matriz X, como en el caso
funm(X,sqrt), es equivalente a sqrtm(X).
X=[1 2 3 4;2 3 4 5;3 4 5 6;4 5 6 7]

Pedro Ochoa Moreno


275
Curso Introductorio de MatLab

X=

1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7

funm(X,'sqrt')

Pedro Ochoa Moreno


276
Curso Introductorio de MatLab

ans =

0.4104 + 0.6487i 0.5574 + 0.2865i 0.7044 - 0.0756i 0.8514 - 0.4377i


0.5574 + 0.2865i 0.7571 + 0.1266i 0.9568 - 0.0334i 1.1565 - 0.1934i
0.7044 - 0.0756i 0.9568 - 0.0334i 1.2091 + 0.0088i 1.4615 + 0.0510i
0.8514 - 0.4377i 1.1565 - 0.1934i 1.4615 + 0.0510i 1.7665 + 0.2954i

sqrtm(X)
Pedro Ochoa Moreno
277
Curso Introductorio de MatLab

ans =

0.4104 + 0.6487i 0.5574 + 0.2865i 0.7044 - 0.0756i 0.8514 - 0.4377i


0.5574 + 0.2865i 0.7571 + 0.1266i 0.9568 - 0.0334i 1.1565 - 0.1934i
0.7044 - 0.0756i 0.9568 - 0.0334i 1.2091 + 0.0088i 1.4615 + 0.0510i
0.8514 - 0.4377i 1.1565 - 0.1934i 1.4615 + 0.0510i 1.7665 + 0.2954i

Pedro Ochoa Moreno


278
Curso Introductorio de MatLab

5.4 Operaciones lgicas

En la seccin 4.4 vimos un ejemplo de operador relacional


aplicado a una matriz; ahora discutiremos ese tpico en detalle.
Como se menciono con anterioridad el cero (0) significa FALSO,
cuando uno (1) o cualquier nmero diferente de cero significa
VERDADERO; entonces, si A y B son matrices cuyas entradas pueden
ser 0 o 1, por lo cual A&B nos dar como resultado una matriz cuyas

Pedro Ochoa Moreno


279
Curso Introductorio de MatLab

entradas sern 1, solo si las entradas correspondientes de A y B son


1. Existen operadores lgicos ms interesantes, por ejemplo, any(X),
donde X es un vector de 0s y 1s que dar 1 si al menos una de las
entradas de X es 1, cuando all(X) realiza la operacin contraria, por
ejemplo, el resultado ser 1 si todas las entradas de X son 1.
Si el argumento es una matriz, estos operadores trabajaran en el
sentido de las columnas; por ejemplo, si A es una matriz, all(A<0.5) el
resultado ser un vector tal que cada entrada es 1 si todas los

Pedro Ochoa Moreno


280
Curso Introductorio de MatLab

elementos correspondientes a la columna de la matriz A son menores


de 0.5, pero, para all(all(A<0.5)) el resultado ser 1 si todas las
entradas de A son menores de 0.5.
Finalmente find nos dar como resultado los ndices asociados
con los valores diferentes de cero de sus argumentos. En particular, si
x es un vector, i = find(x) nos dar como resultado los ndices de
entrada diferentes de cero, si A es una matriz [i,j] = find(A) nos dar
como resultado la fila y la columna de los elementos ndices diferentes

Pedro Ochoa Moreno


281
Curso Introductorio de MatLab

de cero. La importancia de esta funcin se vuelve ms clara, debido a


que los operadores lgicos nos darn como resultado matrices de 0s
y 1s; la bsqueda de entradas diferentes de cero puede significar que
la bsqueda de una condicin es satisfecha; por ejemplo, los ndices
de entrada de una matriz A que sean mayores de 2 son calculados por

A=[1 3 0;4 5 1];


[i,j]=find(A>2)

Pedro Ochoa Moreno


282
Curso Introductorio de MatLab

i=

2
1
2

j=

Pedro Ochoa Moreno


283
Curso Introductorio de MatLab

1
2
2

Lo anterior, significa que las entradas a 21, a12 y a22 son mayores
de 2, pero B = A(i,j), define la matriz
B=

Pedro Ochoa Moreno


284
Curso Introductorio de MatLab

4 5 5
1 3 3
4 5 5

Ahora, si tenemos que la matriz cuya kth entrada es A(i(k), j(h)),


cuando diag(B) nos da como resultado un vector con las entradas de
mayores que 2:

Pedro Ochoa Moreno


285
Curso Introductorio de MatLab

diag(B)

ans =

4
3
5

Pedro Ochoa Moreno


286
Curso Introductorio de MatLab

En este caso, una forma de mas simple de obtener el mismo


resultado ser con la siguiente lnea, B = A(A>2), pero el operador find
es tal vez el mas potente de los operadores lgicos en MatLab y las
aplicaciones iran mas all de los que se manejen en este curso.
Considrese la siguiente situacin: definir los vectores

t=0:0.005:20;
y=sin(t);

Pedro Ochoa Moreno


287
Curso Introductorio de MatLab

Queremos hacer la bsqueda de los valores de la variable


independiente t tal que los correspondientes valores de y sean 0.5.
ES claro que no cualquier computadora podr dar calcular las
soluciones exactas para la ecuacin sin t - 0.5 = 0, debido a que nos
~ ~

enfocamos en los puntos t tales que sin t 0.5 donde 0 el cual


es un escalar muy pequeo. La seleccin del escalar no es trivial,
tan pequeo como sea el valor podr resultar que el resultado se no
Pedro Ochoa Moreno
288
Curso Introductorio de MatLab

correcto; si, por ejemplo, si pensamos acerca del mas pequeo valor
posible de , podemos usar

[m,k]=min(abs(y-0.5))

m=

Pedro Ochoa Moreno


289
Curso Introductorio de MatLab

2.6509e-005

k=

2619

Pedro Ochoa Moreno


290
Curso Introductorio de MatLab

Debido a que se obtiene un solo ndice k, independientemente


que sin t toca la lnea y = 0.5 en siete ocasionasen el intervalo t 0,20
. La solucin es utilizar un valor diferente de , por ejemplo 0.05 :

i=find(abs(y-0.5)<0.05)'

i=

Pedro Ochoa Moreno


291
Curso Introductorio de MatLab

Columns 1 through 6

95 96 97 98 99 100

Columns 157 through 162

3882 3883 3884 3885 3886 3887

Pedro Ochoa Moreno


292
Curso Introductorio de MatLab

Es importante hacer nfasis que las operaciones


presentadas en esta seccin pueden ser realizadas mediante la
repeticin de simples pruebas como los ciclos for o while, pero
los resultados sern menos visibles y su ejecucin se alenta: uno
de los errores ms comnmente cometidos por los usuarios sin
suficientes conocimientos, es el de repetir comandos ya
existentes mediante programacin de instrucciones, esto se
discutir en el capitulo 8, donde se requerir un mejor

Pedro Ochoa Moreno


293
Curso Introductorio de MatLab

conocimiento de los comandos predefinidos para poder resolver


de la mejor manera el problema.
Una lista completa de los operadores de relacin, se muestra a
continuacin:

Verdadero si al menos existe un elemento diferente


any de cero.

Pedro Ochoa Moreno


294
Curso Introductorio de MatLab

Verdadero si todos los elementos son diferentes de


all cero.
Busca por ndices de entradas que satisfagan ciertas
aind condiciones dadas.
exist Inspecciona la existencia de una variable.
isnan Inspecciona si existe NaN
finite Inspecciona elementos finitos.
isinf Inspecciona elementos infinitos.
Pedro Ochoa Moreno
295
Curso Introductorio de MatLab

isempty Verdadero si la matriz esta vaca.


isieee Verdadero para aritmtica de punto flotante IEEE.
isstr Verdadera si la variable es una cadena.

5.5 Otras matrices especiales

Pedro Ochoa Moreno


296
Curso Introductorio de MatLab

En la seccin 3.4 se presentaron un conjunto de operadores de


MatLab como una parte introductoria sobre matrices; en esta seccin
daremos una lista completa

compan Forma de compaera.


tril Triangular inferior.
triu Triangular superior.
rand Matriz de entradas aleatorias (distribucin uniforme).
Pedro Ochoa Moreno
297
Curso Introductorio de MatLab

randn Matriz de entradas aleatorias (distribucin normal).


hankel Matriz de Hankel.
hilb Matriz de Hilbert.
invhilb Inversa de la matriz de Hilbert
hadamard Matriz de Hadamard
magic Cuadrado mgico.
toeplitz Matriz de Toeplitz.
vander Matriz de Vandermonde.
Pedro Ochoa Moreno
298
Curso Introductorio de MatLab

wilkinson Matriz de Wilkinson.


pascal Matriz de Pascal.

La sintaxis de esas operaciones vara de una a otra. En esta seccin


discutiremos solo algunos de los ms frecuentemente usados. Con
respecto a los otros, el participante a este curso deber leer los
manuales de MatLab, o consultar la ayuda en lnea.

Pedro Ochoa Moreno


299
Curso Introductorio de MatLab

compan necesita de un vector de entrada como argumento:

p=[1 0 -7 6]
A=compan(p)

A=

0 7 -6

Pedro Ochoa Moreno


300
Curso Introductorio de MatLab

1 0 0
0 1 0
Debemos recordar que la principal caracterstica de las matrices
compaeras es que los coeficientes de su polinomio caracterstico son
las entradas del vector p.
tril y triu trabajan como el operador diag en matrices: triu(A,k)
extrae la parte triangular de una matriz iniciando en la kth diagonal

Pedro Ochoa Moreno


301
Curso Introductorio de MatLab

(otra vez k > 0 para diagonal superior y k <0 para diagonal inferior). tril
trabaja de la misma manera, para la parte triangular inferior.

triu(A,0)

ans =

0 7 -6

Pedro Ochoa Moreno


302
Curso Introductorio de MatLab

0 0 0
0 0 0

triu(A,1)

ans =

0 7 -6

Pedro Ochoa Moreno


303
Curso Introductorio de MatLab

0 0 0
0 0 0

triu(A,2)

ans =

Pedro Ochoa Moreno


304
Curso Introductorio de MatLab

0 0 -6
0 0 0
0 0 0

tril(A,-1)

ans =

Pedro Ochoa Moreno


305
Curso Introductorio de MatLab

0 0 0
1 0 0
0 1 0

tril(A,0)

ans =

Pedro Ochoa Moreno


306
Curso Introductorio de MatLab

0 0 0
1 0 0
0 1 0

rand(m,n) produce un matriz m x n con entradas uniformemente


distribuidas en el intervalo de [0,1]; este es invocado con un simple
argumento que produce matrices cuadradas. randn(m,n) trabaja
anlogamente; pero la distribucin es normal con media igual a cero y

Pedro Ochoa Moreno


307
Curso Introductorio de MatLab

varianza unitaria. En este caso, se deber hacer nfasis en que esas


funciones debern hacer uso de deferentes generadores y diferentes
orgenes.

rand(3,3)

ans =

Pedro Ochoa Moreno


308
Curso Introductorio de MatLab

0.9355 0.8936 0.8132


0.9169 0.0579 0.0099
0.4103 0.3529 0.1389

randn(3,3)

ans =

Pedro Ochoa Moreno


309
Curso Introductorio de MatLab

-0.4326 0.2877 1.1892


-1.6656 -1.1465 -0.0376
0.1253 1.1909 0.3273

5.6 Ejercicios

Pedro Ochoa Moreno


310
Curso Introductorio de MatLab

Ejercicio 5.1 Dadas dos matrices A y B, el producto clsico fila


por columna es solo uno (aunque si bien el mas usado) de los
posibles producto matriciales. Entre ellos, podemos mencionar:

El producto Schur, definido por

A B a ij bij ;

Pedro Ochoa Moreno


311
Curso Introductorio de MatLab

El producto Lie, definido por


A, B
n

ij [a ik bkj bik a kj ];
k 1

Cmo se calcularan esos productos en MatLab?

Ejercicio 5.2 Resolver el siguiente sistema de ecuaciones


lineales:

Pedro Ochoa Moreno


312
Curso Introductorio de MatLab

2 x1 4 x 2 7 x 3 4 x 4 5
9 x1 3 x 2 2 x 3 7 x 1
5 x1 2 x 2 3 x 3 x 4 3
6 x1 5 x 2 4 x 3 3 x 4 2

Ejercicio 5.3 Para cada uno de los pares de vectores que se dan
a continuacin:

Pedro Ochoa Moreno


313
Curso Introductorio de MatLab

1. u = [2, -3, 6], v = [8, 2, -3];


2. u = [3, -5, 4], v = [6, 2, -1];
3. u = [3, -5, 2, 1], v = [4, 1, -2, 5];
4. u = [5, 3, -2, -4, -1], v = [2, -1, 0, -7, 2].

Calcular el producto interno <u, v>;


Calcular la distancia (Euclidiana) d(u, v);
Verificar que la desigualdad Cauchy-Schwartz
Pedro Ochoa Moreno
314
Curso Introductorio de MatLab

u, v u v
Verificar la desigualdad Minkovsky

uv u v

Pedro Ochoa Moreno


315
Curso Introductorio de MatLab

Ejercicio 5.4 Si la matriz A es definida por

1 0 6 3
1 2 0 2
A
0 3 1 2

6 0 4 1

Pruebe los siguientes comandos:

Pedro Ochoa Moreno


316
Curso Introductorio de MatLab

1. size(A);
2. max(A), max(max(A));
3. p=poly(A);
4. det(A), eig(A), [v,d]=eig(A).

Ejercicio 5.5 Calcule los ndices de fila y columna de las


entradas mas pequeas y grandes de la matriz A que se defini
en el ejercicio anterior.

Pedro Ochoa Moreno


317
Curso Introductorio de MatLab

Ejercicio 5.6 Dadas las matrices:

5 3 6 2 j 3j
A 7 2 0 , B 4 2 j 5 6 j


4 8 1 8 1 j

Calcular:

Pedro Ochoa Moreno


318
Curso Introductorio de MatLab

1. A*A, A*A, A.*A;


2. diag(A), diag(A,1);
3. exp(A), expm(A), sqrt(A), sqrtm(A), sqrtm(A)^2;
4. exp(log(A)), expm(logm(A)), funm(A,exp);
5. conj(B), real(B), imag(B), B-real(B)sqrt(-1)*img(B);
6. rand(B), max(A), norm(A), sign(A).

Pedro Ochoa Moreno


319
Curso Introductorio de MatLab

Ejercicio 5.7 Construya una matriz de 4 x 4 con entradas


aleatorias, una distribucin normal, una media de 10 y una
varianza de 0.5.

Ejercicio 5.8 Con referencia a la matriz A del ejercicio 5.4,


calcular:

1. test=(A<=1) & (A>=-2), all(test), all(all(test));

Pedro Ochoa Moreno


320
Curso Introductorio de MatLab

2. i=find(A==max(max(A))).

Ejercicio 5.9 Encuentre el conjunto de todas las soluciones del


sistema

x1 3 x 2 4 x 3 2 x 4 5
2 x 2 5x3 x 4 2
x3 3x 4 4

Pedro Ochoa Moreno


321
Curso Introductorio de MatLab

mediante la reduccin del sistema a una forma


equelon;
mediante el calculo de una solucin en particular y la
solucin general del sistema homogneo asociado.

Pedro Ochoa Moreno


322
Curso Introductorio de MatLab

Ejercicio 5.10 Que condiciones debern satisfacer los


escalares a, b y c para que el sistema que se muestra a
continuacin tenga una solucin?
x 2 y 3z a
3x y 2 z b
x 5 y 8z c

Pedro Ochoa Moreno


323
Curso Introductorio de MatLab

Pedro Ochoa Moreno


324
Curso Introductorio de MatLab

Pedro Ochoa Moreno


325
Curso Introductorio de MatLab

Pedro Ochoa Moreno


326
Curso Introductorio de MatLab

Pedro Ochoa Moreno


327
Curso Introductorio de MatLab

Pedro Ochoa Moreno


328
Curso Introductorio de MatLab

6
Polinomios
Pedro Ochoa Moreno
329
Curso Introductorio de MatLab

Los polinomios son representados en MatLab por un vector fila y


el cual contiene los coeficientes en orden de potencias decrecientes:
por ejemplo, el polinomio p(s) s 3 4s 2 2s 5 es representado por el
vector p(s) = [1 4 2 5]. Es importante aclarar que los coeficientes cero
son tambin considerados, por ejemplo: s 4 2 este es representado
por P(s) = [1 0 0 2].

Pedro Ochoa Moreno


330
Curso Introductorio de MatLab

6.1 Operaciones bsicas

Con anterioridad mencionamos la funcin que nos permitir


calcular el polinomio caracterstico de una matriz cuadrada A, y este
es p = poly(A), la funcin poly es usada tambin para reconstruir el
polinomio a partir de un conjunto de races dadas: por ejemplo, sea el
polinomio cuyas races estn en -3j2, -5, entonces el polinomio ser:
p(s) (s 3 j2)(s 3 2j)(s 5) el cual puede ser obtenido mediante

Pedro Ochoa Moreno


331
Curso Introductorio de MatLab

r=[-3-2*j, -3+2*j,-5];
p=poly(r);
p

p=

1 11 43 65

Pedro Ochoa Moreno


332
Curso Introductorio de MatLab

En el caso del producto polinomial, este es ejecutado mediante


la funcin conv:

a=[1 2 3]; b=[4 5 6];


c=conv(a,b)

Pedro Ochoa Moreno


333
Curso Introductorio de MatLab

c=

4 13 28 27 18

En realidad la operacin seria polinomio a polinomio y esto se da


a continuacin: ( s 2s 3)(4s 5s 6) 4s 13s 28s 27 s 18 .
2 2 4 3 2

La operacin inversa del producto es la divisin polinomial la cual


se realiza con la funcin deconv. Su sintaxis es

Pedro Ochoa Moreno


334
Curso Introductorio de MatLab

[q,r]=deconv(a,b)

q=

0.2500

r=

Pedro Ochoa Moreno


335
Curso Introductorio de MatLab

0 0.7500 1.5000

Donde los polinomios, q(s) es el cociente y r(s) el residuo, entonces

a(s)=q(s)b(s)+r(s)

Obviamente, si a(s) es divisible por b(s), entonces el residuo ser cero.

Pedro Ochoa Moreno


336
Curso Introductorio de MatLab

Las races del polinomio son calculadas con roots (la cual
actualmente construye la matriz companion (compaera) asociada al
polinomio y calcula sus valores propios). Con referencia al ejemplo
anterior, roots(p) nos da como resultado

roots(p)

Pedro Ochoa Moreno


337
Curso Introductorio de MatLab

ans =

-5.0000
-3.0000 + 2.0000i
-3.0000 - 2.0000i

polyval(p,x) calcula el valor p(x); donde x puede ser un escalar o un


vector o una matriz. En el primer caso, este nos da como resultado el

Pedro Ochoa Moreno


338
Curso Introductorio de MatLab

valor del polinomio en un punto dado, en el segundo caso obtenemos


la imagen de un conjunto de puntos en el vector, y en el tercer caso
obtenemos una matriz cuyas entradas son a p ( x ). Por lo tanto, en
ij ij

el ejemplo de la seccin 4.3.3 (funciones racionales), donde el


numerador y el denominador se muestran a continuacin:

x1=3*s.^2+5*s+7;
x2=s.^3+5*s.^2+7*s+12;

Pedro Ochoa Moreno


339
Curso Introductorio de MatLab

pueden ser reescritos como

omega=logspace(-2,2);
s=j*omega;
x1=polyval([3 5 7],s);
x2=polyval([1 5 7 12],s);

Pedro Ochoa Moreno


340
Curso Introductorio de MatLab

polyvalm(p,A) trabaja como polyval pero en el espacio de matrices.


Recuerde que, dado el polinomio de nth grado
n
p(s) p i s i
i 0

y la matriz cuadrada A, p(A) es definida por

Pedro Ochoa Moreno


341
Curso Introductorio de MatLab

n
p(A) p i A i
i0

2 3
Si, por ejemplo, p(s) s 2 s 1 y A , entonces polyval(p,A) nos da
5 8
polyval(p,A)

Pedro Ochoa Moreno


342
Curso Introductorio de MatLab

p(2) p(3)
ans = , esto es p(5) p(8

7 13
31 73
entonces, el calculo de los valores en el sentido de los elementos,
cuando polyvalm(p,A) nos da

Pedro Ochoa Moreno


343
Curso Introductorio de MatLab

polyvalm(p,A)

ans = , esto es A 2 A 1

22 33
55 88

este es el resultado correcto en lgebra de matrices.

Pedro Ochoa Moreno


344
Curso Introductorio de MatLab

Una operacin bastante frecuente es la derivada. MatLab usa la


funcin polyder para calcular la derivada de un polinomio; en
particular

q=polyder(p) nos da como resultado la derivada del


polinomio: q(s)=dp(s)/ds.
q=polyder(a,b) nos da como resultado la derivada del
producto a(s)b(s).
Pedro Ochoa Moreno
345
Curso Introductorio de MatLab

[q,d]=polyder(a,b) nos da como resultado la derivada de la


razn polinomial como una funcin racional:

q( s) d a( s)

d ( s ) ds b( s )

Pedro Ochoa Moreno


346
Curso Introductorio de MatLab

Otra operacin comn de polinomios es aquella que involucra


descomposicin de fracciones parciales: dada una funcin fraccional
racional b(s)/a(s) con descomposicin fraccional parcial:

b( s ) r r2 rn
1 k (s)
a ( s ) s p1 s p 2 s pn

Pedro Ochoa Moreno


347
Curso Introductorio de MatLab

el comando [r,p,k]=residue(b,a) nos dar como resultado la


descomposicin, donde el significado de los smbolos es obvio. En el
caso donde la multiplicidad m de la raz ith de a(s) es mayor que 1,
j

m >1, las descomposicin tambin incluye tales trminos como


j

rj r j 1 r j m 1

j

s pj (s p j ) 2
(s p j )
mj

Pedro Ochoa Moreno


348
Curso Introductorio de MatLab

residue tambin trabaja en una forma dual, cuando es invocado con


tres entradas y dos argumentos de salida: [b,a] = residue(r,p,k) que
nos dar como resultado los polinomios a(s) y b(s). Ntese que esta
unin usa dos modos de trabajo lo cual permitir al usuario obtener
fcilmente la descomposicin real, incluso en el caso de polos
complejos. Considrese, por ejemplo, la funcin racional

b( s ) s 1
4
a ( s ) s 8s 23s 2 26 s 10
3

Pedro Ochoa Moreno


349
Curso Introductorio de MatLab

Si aplicamos las siguientes lneas de instrucciones:

b=[1 -1];
a=[1 8 23 26 10];
[r,p,k]=residue(b,a)

Obtendremos, los siguientes resultados:

Pedro Ochoa Moreno


350
Curso Introductorio de MatLab

r=

-0.2600 + 0.3200i
-0.2600 - 0.3200i
0.5200
-0.4000

Pedro Ochoa Moreno


351
Curso Introductorio de MatLab

p=

-3.0000 + 1.0000i
-3.0000 - 1.0000i
-1.0000
-1.0000

k=

Pedro Ochoa Moreno


352
Curso Introductorio de MatLab

[]

Para obtener la forma real es necesario calcular el trmino asociado


de segundo grado asociado al par p=-3j mediante el uso de la
siguiente lnea de instruccin:

[b1,a1]=residue(r(1:2),p(1:2),[])

Pedro Ochoa Moreno


353
Curso Introductorio de MatLab

entonces los resultados son:

b1 =

-0.5200 -2.2000

Pedro Ochoa Moreno


354
Curso Introductorio de MatLab

a1 =

1.0000 6.0000 10.0000

Por lo tanto la expansin ser

0.52 0.4 0.52s 2.2


2
s 1 ( s 1) 2
s 6s 10

Pedro Ochoa Moreno


355
Curso Introductorio de MatLab

La siguiente lista resume los operadores para polinomios

poly Obtencin del polinomio a partir de sus races.


roots Obtencin de las races de un polinomio.
polyval Valor del polinomio en un punto dado.
polyvalm Evaluacin matricial de un polinomio.
conv Producto polinomial.
deconv Divisin polinomial.
Pedro Ochoa Moreno
356
Curso Introductorio de MatLab

residue Descomposicin en fracciones parciales.


polyder Derivada polinomial.
polyfit Interpolacin polinomial.

Por ltimo, podemos visualizar que el nico operador que falta de


analizar es el de polyfit que se discutir en la prxima seccin, as
como en una forma ms general el problema de interpolacin en
MatLab.

Pedro Ochoa Moreno


357
Curso Introductorio de MatLab

6.2 Interpolacin

El comando polifit nos ayuda a dar solucin a los problemas de


interpolacin lineal. Dados la variable independiente en un vector x y
los valores a interpolar en un vector y, el comando p = polyfit(x,y,n)
nos dar como resultado un polinomio de nth grado p(x) que interpola
los pares ( xi , yi ) mediante la interpolacin de mnimos cuadrados.

Pedro Ochoa Moreno


358
Curso Introductorio de MatLab

Hasta este punto es importante mencionar que los mtodos de


interpolacin disponibles en MatLab son:

polyfit interpolacin polinomial mediante mnimos cuadrados.

spline interpolacin cbica mediante lneas. Considerando los


vectores x e y manejados con anterioridad y el vector abcisa x i ,
el comando
Pedro Ochoa Moreno
359
Curso Introductorio de MatLab

yi = spline(x,y,xi);

El cual nos regresa como resultado un vector y i con los valores


asociados con la abcisa x i obtenida mediante la interpolacin
cbica mediante lneas.

Pedro Ochoa Moreno


360
Curso Introductorio de MatLab

interpft calcula un gran nmero de muestras empezando a partir


de un vector de muestras y, asumiendo que este se maneja en
pasos predefinidos. Su sintaxis es

yi = interpft(y,n);

y el resultado es un vector y i de n-dimensin.

Pedro Ochoa Moreno


361
Curso Introductorio de MatLab

interp1 es en si una tabla general de bsqueda de algoritmos.


Esta usa la interpolacin lineal y su formato es

yi = interp1(x,y,xi);

donde los smbolos usados en esta, mantienen el mismo


significado que el de las anteriores, solo que y puede ser una
matriz, entonces y i ser una matriz cuyas columnas interpolaran
Pedro Ochoa Moreno
362
Curso Introductorio de MatLab

las columnas correspondientes de y en los mismos puntos sobre


la abcisa. Es tambin posible seleccionar el mtodo de
interpolacin, mediante el uso del siguiente formato:

yi = interp1(x,y,xi,mtodo);

Los siguientes mtodos estn disponibles:

Pedro Ochoa Moreno


363
Curso Introductorio de MatLab

1. linear interpolacin lineal, si no se indica es por default.


2. spline interpolacin cbica mediante lneas.
3. cubic interpolacin cbica.

Todos estos mtodos requieren que x se incremente


montonamente; sin embargo, cubic requiere una abcisa
linealmente espaciada.

Pedro Ochoa Moreno


364
Curso Introductorio de MatLab

interp2 calcula una interpolacin en 2D. El comando es el


siguiente:
zi = interp2(x,y,z,xi,yi,mtodo);

trabaja igual que intrp1 solo que este utiliza tablas de dos
dimensiones (2D). Los posibles mtodos en este caso son
linear y cubic solamente. El mtodo por default es linear.

Pedro Ochoa Moreno


365
Curso Introductorio de MatLab

Aplicaciones de interpolacion lineal y spline cbica

Con la finalidad de ilustrar el empleo de la funcin de interpolacin


interp1, usaremos el siguiente conjunto de mediciones de
temperaturas tomadas de la cabeza de un motor nuevo que se estaba
probando con miras a usarse en un auto de carreras:

Pedro Ochoa Moreno


366
Curso Introductorio de MatLab

Tiempo (segundos) Temperatura ( F)


0 0
1 20
2 60
3 68
4 77
5 110
Pedro Ochoa Moreno
367
Curso Introductorio de MatLab

Si queremos calcular el valor d e temperatura en un tiempo t = 2.8,


o en otras palabras ser el valor de xi, las siguientes lneas nos
muestran este caso:

X=0:5;
y=[0,20,60,68,77,110];
y1=interp1(x,y,2.8)

Pedro Ochoa Moreno


368
Curso Introductorio de MatLab

y1 =

66.4000

x=0:5;
y=[0,20,60,68,77,110];
y1=interp1(x,y,2.8,'spline')

y1 =
Pedro Ochoa Moreno
369
Curso Introductorio de MatLab

67.7227

Las siguientes lneas nos permitirn visualizar grficamente los dos


tipos de interpolacin.

Pedro Ochoa Moreno


370
Curso Introductorio de MatLab

% Las siguientes lneas de instrucciones


% nos permitirn hacer la comparacin de
% interpolacin lineal con la de spline
% cbica.
%
x=0:5;
y=[0,20,60,68,77,110];
new_x=0:0.1:5;
Pedro Ochoa Moreno
371
Curso Introductorio de MatLab

new_y1=interp1(x,y,new_x,'linear');
new_y2=interp1(x,y,new_x,'spline');
subplot(2,1,1)
plot(new_x,new_y1,new_x,new_y2,x,y,'og')
title('Interpolacin lineal contra spline cbica')
xlabel('x'),grid
axis([-1,6,-20,120])

Pedro Ochoa Moreno


372
Curso Introductorio de MatLab

Pedro Ochoa Moreno


373
Curso Introductorio de MatLab

Pedro Ochoa Moreno


374
Curso Introductorio de MatLab

6.3 Ejercicios

Ejercicio 6.1 Dados los polinomios a(s) s 3 2s 2 5s 1 y b(s) s 2 1


, calcular a(s) b(s), a(s) 5b(s), a(s)b(s) y a(s)/b(s).

Ejercicio 6.2 Determine los polinomios cuyas races son


Pedro Ochoa Moreno
375
Curso Introductorio de MatLab

a) -1, -3, -5;


b) -2, -5j2;
c) 1, -1, j.

Ejercicio 6.3 Obtenga las races de los siguientes polinomios:

1. s 3 5s 2 7s 2;

Pedro Ochoa Moreno


376
Curso Introductorio de MatLab

2. (s 1) 3 (s 2 12s 9);
3. 2s j3s 1.
5 2

Ejercicio 6.4 El polinomio mnimo de una matriz es el polinomio


de menor grado entre los detractores de una matriz. Calcular el
polinomio mnimo de

Pedro Ochoa Moreno


377
Curso Introductorio de MatLab

2 1 0 0
0 2 0 0
A
0 0 1 1

0 0 2 4

Ejercicio 6.5 Calcular los puntos de la curva y los posibles


puntos de inflexin de las siguientes funciones:

1. f(x) x 4 5x 3 1;
Pedro Ochoa Moreno
378
Curso Introductorio de MatLab

x 1
2. g(x) .
x 3x 1
3

Ejercicio 6.6 Calcular la descomposicin por fracciones


parciales de la siguiente funcin:

s 2 3s
s 4 4s 3 7s 2 6s 2

Pedro Ochoa Moreno


379
Curso Introductorio de MatLab

Ejercicio 6.7 La densidad del aire (en kg m ) varia con la


3

altitud h (en km) de acuerdo con la tabla 6.1.


Calcular los polinomios de interpolacin de grado n=1,2,,6 y
determinar la norma de error.

h 7 10 15 21 27 34 39 43 47 51 55 59 61
556 369 191 75 26.2 9.9 4.4 2.3 1.4 0.8 0.5 0.33 0.25

Pedro Ochoa Moreno


380
Curso Introductorio de MatLab

Tabla 6.1 Densidad del aire

Calcule, adems, los valores de la densidad del aire a las


altitudes de 10, 20, 30, 40, 50 y 60 km mediante el uso del
algoritmo discutido en la seccin 6.2 (ntese que los valores de
la variable independiente no son igualmente espaciados).

Pedro Ochoa Moreno


381
Curso Introductorio de MatLab

Pedro Ochoa Moreno


382
Curso Introductorio de MatLab

Pedro Ochoa Moreno


383
Curso Introductorio de MatLab

Pedro Ochoa Moreno


384
Curso Introductorio de MatLab

Pedro Ochoa Moreno


385
Curso Introductorio de MatLab

7
Pedro Ochoa Moreno
386
Curso Introductorio de MatLab

Grficas
Las grficas son una de las caractersticas ms avanzadas de
MatLab. Este captulo es organizado como sigue: primeramente,
iniciaremos con los comandos para grficas simples en 2D lo cual le
permitir al participante trazar la grfica de funciones de una variable
Pedro Ochoa Moreno
387
Curso Introductorio de MatLab

real de una manera rpida; posterior el escalamiento de los ejes, as


como su etiquetacin se vera con detalle; y como ltimo, un etapa
avanzada con una breve repaso de las caractersticas de graficacin
de MatLab para el manejo de situaciones ms complejas; la parte
correspondiente a 3D ser estructura en la misma forma.
Para poder visualizar en una mayor profundidad las capacidades
de graficacin de MatLab se le recomienda al participante interactuar
con los manuales en formato PDF y la ayuda en lnea.

Pedro Ochoa Moreno


388
Curso Introductorio de MatLab

7.1 Graficas en dos dimensiones (2D)

MatLab le permite al usuario trazar graficas en diferente


ventanas, llamadas figures. Por omisin, MatLab traza una grfica
iniciando en la ventana no. 1; si queremos abrir ms ventanas
necesitamos teclear el comando figure(n), donde n nos indica el
nmero de la ventana a abrir. De ah en adelante MatLab trazara

Pedro Ochoa Moreno


389
Curso Introductorio de MatLab

grficas hasta la ventana n-th, a menos de que el usuario cambie de


figura mediante el comando figure. Para cerrar la ventana nth
mediante el comando close(n), close all cerrara todas las ventanas y
solo close cerrara la ventana en uso actualmente.
Para iniciar, empecemos por trabajar con la primera ventana. El
comando principal para trabajar con grficas en 2D es plot.
Iniciemos con un ejemplo sencillo: si queremos representar la
siguiente secuencia de caracteres grficamente:

Pedro Ochoa Moreno


390
Curso Introductorio de MatLab

{0,0.48,0.84,1,0.91,0.6,0.14}

Entonces ser suficiente con escribir las siguientes lneas:

y=[0 .48 .84 1 .91 .6 .14];


plot(y)

Pedro Ochoa Moreno


391
Curso Introductorio de MatLab

Los resultados se muestran en la figura 7.1.

Pedro Ochoa Moreno


392
Curso Introductorio de MatLab

Pedro Ochoa Moreno


393
Curso Introductorio de MatLab

Figura 7.1 Una grfica simple.

Algunos detalles surgen de este primer ejemplo. Primeramente,


podemos observar que el escalamiento de los ejes es llevado a cabo
automticamente; adems se hace notorio que el ttulo de la ventana
es Figure No. 1 y finalmente, los puntos son unidos mediante una
lnea slida.

Pedro Ochoa Moreno


394
Curso Introductorio de MatLab

La instruccin plot acepta un parmetro opcional del tipo cadena


( acotado por apostrofes ) para definir el tipo y color de los trazos.
MatLab maneja cuatro tipos de lneas, cinco tipos de puntos y
ocho colores bsicos, tal como se resumen en la Tabla 7.1.
Si queremos graficar los puntos del vector y definido con
anterioridad con asteriscos rojos y sin juntar los puntos entre ellos,
usaremos la siguiente lnea de instruccin:

Pedro Ochoa Moreno


395
Curso Introductorio de MatLab

plot(y,'*r')

Tipo de lnea Tipo de punto Color


Slido (guin) - Punto . Amarillo y
Doble guin -- Signo de mas + Prpura m
Colon : Asterisco * Cian c
Guin y punto -. Circulo Red r
Cruz x Verde g
Pedro Ochoa Moreno
396
Curso Introductorio de MatLab

Azul b
Blanco w
Negro k

Tabla 7.1 Opciones de trazado.

Y si luego aadimos algunos cometarios, veremos el resultado en la


figura 7.2.
Pedro Ochoa Moreno
397
Curso Introductorio de MatLab

title('Secuencia de puntos')
xlabel('Abcisa')
ylabel('Ordenada')
grid

Pedro Ochoa Moreno


398
Curso Introductorio de MatLab

Secuencia de puntos
1

0.9

0.8

0.7

0.6 Esta es una prueba


Ordenada

0.5
Pedro Ochoa Moreno
0.4
399
0.3

0.2

0.1

0
1 2 3 4 5 6 7
Abcisa
Curso Introductorio de MatLab

Figura 7.2 Colocacin de etiquetas.


title, xlabel e y label definen las etiquetas para el titulo y los ejes
respectivamente, cada vez que volvemos a teclear esos comandos,
las etiquetas previas son desplazadas por las nuevas. El comando
grid nos dibuja una malla sobre la que se traza la grfica, cada vez
que es tecleado este comando se invierte la seleccin, este se puede

Pedro Ochoa Moreno


400
Curso Introductorio de MatLab

usar por omisin tal como se manejo en el ejemplo, o grid on e


inversamente grid off, para que desaparezca la malla.
Para insertar texto en cualquier lugar en el rea de la grfica,
existe el comando:
gtext(x,y,text)

el cual, coloca la cadena de caracteres text en el punto con


coordenadas (x,y). Estos tres parmetros tambin pueden ser vectores

Pedro Ochoa Moreno


401
Curso Introductorio de MatLab

(de la misma longitud); en este caso la entrada i-th del vector cadena
(es en realidad una matriz de caracteres) es colocado en el punto con
coordenadas x i , y i . Tambin existe la posibilidad de de utilizar el
comando gtext(text) que es la versin manejada para el mouse, este
coloca el texto en el punto indicado por el punto seleccionado por el
mouse sobre la ventana de la grfica.
Ahora quiero presentarles algo menos trivial: por ejemplo si
deseamos trazar la grfica de la funcin y=f(t). El comando plot(a,b)

Pedro Ochoa Moreno


402
Curso Introductorio de MatLab

dibujara la grfica del par (a i , bi ) ; entonces si analizamos en detalle el


comando, tenemos que este tabulara la funcin bajo consideracin.
Por ejemplo, si tomamos el mismo de la seccin 4.3, que es y=sint, las
siguientes lneas nos permitirn ver el resultado grfico:

t=0:.05:4*pi;
y=sin(t);
plot(t,y,'g')

Pedro Ochoa Moreno


403
Curso Introductorio de MatLab

Mediante la forma anterior, podemos decir que la tabulacin no


siempre es una operacin comn, debido a eso puede suceder que la
funcin pueda exhibir diferentes escalas de tiempo; esto es, por
ejemplo, el caso para la funcin f (t ) e 10 sin(0.05t ) , para lo cual se
10 t

usa una pequea tabulacin de pasos acentundose la contribucin


del termino exponencial, pero la funcin sin necesita grandes pasos.

Pedro Ochoa Moreno


404
Curso Introductorio de MatLab

Esta situacin puede ser resuelta para cualquier caso particular,


mediante el uso de dos trazas. Por lo tanto, podemos pensar acerca

Pedro Ochoa Moreno


405
Curso Introductorio de MatLab

0.8

0.6

0.4

0.2

-0.2
Pedro Ochoa Moreno
-0.4
406
-0.6

-0.8

-1
0 2 4 6 8 10 12 14
Curso Introductorio de MatLab

Figura 7.3 Funcin sin t.

de producir dos grficas diferentes en dos ventanas diferentes, usando


dos escalas de tiempos diferentes:

t1=0:.01:1; %primera escala de tiempo, de 0 a 1 en pasos de 0.01.


y1=exp(-10*t1)+sin(0.05*t1);
t2=0:200; %segunda escala de tiempo, de 0 a 200 en pasos de 1.

Pedro Ochoa Moreno


407
Curso Introductorio de MatLab

y2=exp(-10*t2)+sin(0.05*t2);
figure(1)
plot(t1,y1)
figure(2)
plot(t2,y2)

Pedro Ochoa Moreno


408
Curso Introductorio de MatLab

1 1

0.9 0.8

0.8 0.6

0.7 0.4 Figura 2

0.6 0.2

0.5 Figura 1 0

0.4 -0.2

0.3 -0.4

0.2 -0.6

0.1 -0.8

0 -1
Pedro
0
Ochoa
0.1 0.2 0.3
Moreno
0.4 0.5 0.6 0.7 0.8 0.9 1 0 20 40 60 80 100 120 140 160 180 200

409
Curso Introductorio de MatLab

Figura 7.4 Grficas en dos escalas de tiempo.


7.2 Trazas mltiples

Obviamente, el mejor mtodo para comparar dos o ms trazas es


tenerlas en una misma ventana. Existen tres mtodos diferentes para
mltiples trazas:

Pedro Ochoa Moreno


410
Curso Introductorio de MatLab

1. Si necesitamos la grfica de dos o ms trazas en sobre los


mismos valores de la abcisa, podemos utilizar plot con
argumentos matriciales. Usando plot(X,Y):

Si Y es una matriz y X es un vector, entonces los


vectores (o columnas) de Y sern trazadas con
respecto a los valores en X.

Pedro Ochoa Moreno


411
Curso Introductorio de MatLab

Si X es una matriz e Y un vector, las columnas (o


filas) de X son trazados con respecto al vector Y.

Por ejemplo, para trazar las grficas de las funciones


y=sin(t) y y=cos(t) para t 0,2 podemos teclear las
siguientes lneas:

t=(0:.1:2*pi)'; %transpuesta para obtener un vector


Pedro Ochoa Moreno
412
Curso Introductorio de MatLab

%columna
y=[sin(t),cos(t)];
plot(t,y)
gtext('sin(t)')
gtext('cos(t)')

Pedro Ochoa Moreno


413
Curso Introductorio de MatLab

0.8

0.6 sin(t)

0.4
cos(t)
0.2

-0.2

-0.4

-0.6
Pedro Ochoa Moreno
-0.8
414
-1
0 1 2 3 4 5 6 7
Curso Introductorio de MatLab

Figura 7.5 Grficas para y= sin(t) e y= cos(t).


2. Si los dominios de las abcisas son diferentes, usaremos
plot con ms argumentos:

plot(X1,Y1,X2,Y2,,Xn,Yn)

Pedro Ochoa Moreno


415
Curso Introductorio de MatLab

trazar las grficas de los vectores pares X i , Yi , i= 1,,n.


Para delinear las trazas de sin(t) para t 0,3 y cos(t) para
t 1,4 , usaremos las siguientes lneas de instrucciones:

t1=(0:.1:3)';
y1=sin(t1);
t2=(1:.1:4)';
y2=cos(t2);

Pedro Ochoa Moreno


416
Curso Introductorio de MatLab

plot(t1,y1,t2,y2)
gtext('sin(t)')
gtext('cos(t)')

Pedro Ochoa Moreno


417
Curso Introductorio de MatLab

0.8 sin(t)

0.6

0.4

0.2

cos(t)
-0.2

-0.4
Pedro Ochoa Moreno
-0.6
418
-0.8

-1
0 0.5 1 1.5 2 2.5 3 3.5 4
Curso Introductorio de MatLab

Figura 7.6 Grfica de trazas mltiples.

3. Finalmente, podemos guardar la grfica previa con el par


de comandos axis(axis), hold.

t1=(0:.1:4*pi);

Pedro Ochoa Moreno


419
Curso Introductorio de MatLab

y1=sin(t1);
plot(t1,y1,'g')
hold
Current plot held
t2=(0:.1:4*pi)';
y2=cos(t2);
plot(t2,y2,'m')
t3=(0:.1:4*pi)';

Pedro Ochoa Moreno


420
Curso Introductorio de MatLab

y3=-sin(t3);
plot(t3,y3,'y')
gtext('sin(t)')
gtext('cos(t)')
gtext('-sin(t)')

Pedro Ochoa Moreno


421
Curso Introductorio de MatLab

0.8 sin(t)

0.6
cos(t)
0.4

0.2

Pedro Ochoa Moreno


-0.2
422
-0.4
-sin(t)
-0.6

-0.8

-1
0 2 4 6 8 10 12 14
Curso Introductorio de MatLab

Figura 7.7 Graficas mltiples con retencin de la grafica inicial.

Otro ejemplo, que nos permitira comparar la conducta de la


funcin y=sin(t) con la de y e , en el dominio de t 0,5 , el resultado
t

se observa en la figura 7.8.

t=0:.1:5;
plot(t,sin(t)0

Pedro Ochoa Moreno


423
Curso Introductorio de MatLab

axis(axis)
hold
Current plot held
plot(t,[t;exp(t)],'k')
legend('sin(t)','exp(t)')

hold es un comando que congela los ejes en uso. Este es un


comando de intercambio en el sentido de que cada vez que nosotros

Pedro Ochoa Moreno


424
Curso Introductorio de MatLab

tecleamos hold su estatus es invertido, cuando una grfica es


congelada el prximo desbloqueara los factores de escalamiento, un
hold posterior congelara el escalamiento otra vez, los comandos hold
on y hold off nos permiten manejar esos cambios explcitamente.

Pedro Ochoa Moreno


425
Curso Introductorio de MatLab

1
sin(t)
0.8 exp(t)

0.6

0.4

0.2

0
Pedro Ochoa Moreno
-0.2 426

-0.4

-0.6

-0.8

-1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
Curso Introductorio de MatLab

Figura 7.8 Graficas mltiples con propsitos de comparacin.

Una leyenda puede ser muy til para distinguir entre mltiples
trazas dentro de una ventana, el comando legend(linetype1,string1,
,linetypen, stringn) crea una leyenda asociada a cada lnea con su
correspondiente cadena, la aplicacin de este comando se observa en
la figura 7.8. Para propsitos prcticos, basta con teclear
legend(string1,srting2,.,stringn).

Pedro Ochoa Moreno


427
Curso Introductorio de MatLab

7.3 Escalamiento de ejes

Como se menciono con anterioridad el escalamiento de los ejes


es automtico, pero frecuentemente es necesario redefinir este. Para
cumplir con esta tarea, usaremos el comando axis que se ha visto con
anterioridad en conjuncin con hola. Aqu se analizaremos, las tres
funciones principales del comando axis:

Pedro Ochoa Moreno


428
Curso Introductorio de MatLab

axis([xmin xmax ymin ymax]) el cual define los valores


extremos de los ejes x e y; despus de trazada la grafica
es posible cambiar el escalamiento de los ejes al usar este
comando.
axis(axis) igual que el anterior solo que congela el
escalamiento de los ejes en uso.

Pedro Ochoa Moreno


429
Curso Introductorio de MatLab

axis(auto) restaura automticamente el escalamiento de


ejes congelado con anterioridad.

v=axis almacena los limites actuales de los ejes en un vector v.


Si uno de los limites tiene el valor de inf, entonces el valor extremo del
dato es usado; esto es equivalente a llevar a cabo un auto
escalamiento; entonces axis(-inf inf -inf inf) que es lo mismo que
axis(auto).
Pedro Ochoa Moreno
430
Curso Introductorio de MatLab

Otras capacidades del comando axis son:

axis(ij) usa las coordenadas de una matriz, con el eje


vertical direccionado hacia abajo (de acuerdo con la
direccin incremental del ndice usado en una matriz).
axis(xy) usa las coordenadas cartesianas, con el eje
vertical direccionado hacia arriba.
Pedro Ochoa Moreno
431
Curso Introductorio de MatLab

axis(square) supeditada la regin de la grafica a un rea


de forma cuadrada.
axis(equal) establece los mismos factores de
escalamiento a ambos ejes.
axis(off) desactiva el trazado de ejes.
axis(on) activa el trazado de ejes.

Pedro Ochoa Moreno


432
Curso Introductorio de MatLab

7.4 Ms graficas en dos dimensiones (2D)

En esta seccin se presentan los comandos remanentes para la


trazar graficas en 2D, que utilizan representaciones diferentes de las
coordenadas cartesianas de ejes lineales hasta ahora discutidos.

semilogx delinea el eje x en la escala log10.

Pedro Ochoa Moreno


433
Curso Introductorio de MatLab

semilogy trabaja en una forma idntica a la del comando


anterior, pero el rol del eje x es cambiado por el del eje y.
loglog trabaja como los dos previos pero con ambos ejes
logartmicamente.
polar(rho,theta) traza grficas en coordenadas polares; la
singularidad es que debe ser dado en radianes, pero los
ejes son trazados en grados; ms sin embargo, es

Pedro Ochoa Moreno


434
Curso Introductorio de MatLab

imposible utilizar argumentos mltiples (a menos que se


utilice el mtodo 3).
bar, stairs estos comandos nos permiten graficas del tipo
de barras y el de escalera respectivamente; si estos son
invocados con argumentos de salida, tal como [Xb,Yb] =
bar(X,Y), en este caso se generan los vectores Xb e Yb
que posteriormente se grafican con plot(Xb,Yb), este
trazara las grficas de barras o escalera. Este comando es
Pedro Ochoa Moreno
435
Curso Introductorio de MatLab

usado para cuando por ejemplo, cuando se necesitan


representar grficas continuas o discretas en el tiempo en
una misma figura. Es posible usar argumentos mltiples de
acuerdo al mtodo 1, siempre que los vectores a trazar
debern ser dados en formato de vectores columna.
hist calcula y traza histogramas. En particular, hist(x)
calcula y traza el histograma relacionado con los datos del
vector x, el escalamiento del eje x es con los valores del
Pedro Ochoa Moreno
436
Curso Introductorio de MatLab

vector x y la ocurrencia de estos valores es concerniente al


eje y. El histograma es calculado y graficado mediante la
divisin del eje x en segmentos; un segundo parmetro
opcional puede ser un entero, las barras a trazar, o un
vector, que defina los intervalos a usar. Por ejemplo,
supongamos que deseamos probar la precisin de un
generado aleatorio uniformemente rand. Por definicin, un
vector de muestreos de una variable estocstica con

Pedro Ochoa Moreno


437
Curso Introductorio de MatLab

distribucin uniforme deber resultar en un histograma


plano; entonces podemos usar las siguientes lneas para
graficar un histograma de 10 barras:
n=100;
y=rand(n,1);
hist(y,10)
gtext('Cien muestras')

Pedro Ochoa Moreno


438
Curso Introductorio de MatLab

esas lneas no producen el histograma de la figura 7.9.

Pedro Ochoa Moreno


439
Curso Introductorio de MatLab

Cien muestras
14

12

10

Pedro Ochoa Moreno 0


0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
440
Curso Introductorio de MatLab

Figura 7.9 Histograma.


Cien muestras
Si incrementamos el14valor de n veremos que los nivelesCien
de muestras
las barras sean ms parejos. La14versin para coordenadas
polares usa el comando
12 rose, si en las lneas de
instruccin antes dadas, cambiamos
12 el comando hist por
rose, obtendremos la grafica de la figura 7.10.
10
10
Pedro Ochoa Moreno
8441
8

6
6

4
4

2
2

0
0 0.1 0 0.2 0.3 0.4 0.5 0.6 0.7 0.8
0 0.1 0.2 0.3 0.4 0.5 0.6
Curso Introductorio de MatLab

Cien muestras

90
80
120 60
60

150 40 30

20

180 0

210 330

Pedro Ochoa Moreno 240


270
300

442
Curso Introductorio de MatLab

Figura 7.10 Histograma en coordenadas polares.

fplot traza la grfica de una funcin dada. Sus dos formas


ms importantes son:

fplot(funcion,[xmin,xmax])
y
[x,y] = fplot(funcion,[xmin,xmax])
Pedro Ochoa Moreno
443
Curso Introductorio de MatLab

Mediante el uso de la primera forma, tenemos que el trmino


funcin es graficada en el intervalo de la abcisa determinado por
[xmin,xmax]. La segunda forma, por el contrario, no nos da un
resultado grfico, si nos entrega dos vectores uno de la abcisa y los
valores (o una matriz de valores, si la funcin bajo consideracin es un
vector) que pueden ser graficados mediante el uso del comando
plot(x,y).

Pedro Ochoa Moreno


444
Curso Introductorio de MatLab

7.5 Incrustacin de ms de una grafica en una ventana

Con anterioridad se haba considerado la opcin de abrir


ventanas graficas, pero algunas veces es necesario visualizar mas
trazas, aunque si bien estas se refieran a cantidades no homogneas,
pero que dependan de una misma variable, como ejemplo, tenemos

Pedro Ochoa Moreno


445
Curso Introductorio de MatLab

las graficas de la portada de este curso, que contiene tres variables no


homogneas que son: correccin radial, posicin angular y consumo
de energa de las entradas, todas estas dependen de la variable
tiempo.
El comando subplot nos permite mostrar trazas mltiples en la
misma ventana o imprimir estas en la misma pagina. La sintaxis de
este comando es:

Pedro Ochoa Moreno


446
Curso Introductorio de MatLab

subplot(m,n,p)

el comando anterior dividir la ventana en una matriz de subtrazas de


m x n, las trazas son numeradas a lo largo de la primera fila de la parte
superior de la ventana de la figura, luego se contina con la segunda
ventana, y as sucesivamente.
A continuacin se presenta un ejemplo de subplot para trazas en
dos dimensiones y un arreglo matricial de 3 x 1, con p [1,3] . Las

Pedro Ochoa Moreno


447
Curso Introductorio de MatLab

lneas que se presentan a continuacin, nos dan como resultado las


trazas mltiples de la figura 7.11.
% Programa de demostracin para poder visualizar
% mltiples graficas dentro de una misma ventana.
%
%Por Pedro Ochoa Moreno
%Agosto,2000.

Clear;
clc;
Pedro Ochoa Moreno
448
Curso Introductorio de MatLab

clf;
%Funcin 10sen3t
t=0:0.1:10;
y=10*sin(3*t);
subplot(311); plot(t,y,'LineWidth',2); %Grfica de 10sen3t
title('Funcin 10sen3t'), ylabel('Amplitud'),xlabel('Tiempo'),grid;
%Funcin 30cos3t
y=30*cos(3*t);
subplot(312); plot(t,y,'LineWidth',2); %Grfica de 30cos3t
title('Funcin 30cos3t'), ylabel('Amplitud'),xlabel('Tiempo'),grid;
%Funcin -90sen3t
y=-90*sin(3*t);

Pedro Ochoa Moreno


449
Curso Introductorio de MatLab

subplot(313); plot(t,y,'LineWidth',2); %Grfica de -90sen3t

Pedro Ochoa Moreno


450
Curso Introductorio de MatLab

title('Funcin -90sen3t'), ylabel('Amplitud'),xlabel('Tiempo'),grid;

Funcin 10sen3t
10

Amplitud 0

-5

-10
0 1 2 3 4 5 6 7 8 9 10
Funcin 30cos3t Tiempo
40

20

Pedro Ochoa Moreno


Amplitud

0
451
-20

-40
0 1 2 3 4 5 6 7 8 9 10
Tiempo
Funcin -90sen3t
100

50
Amplitud

-50

-100
0 1 2 3 4 5 6 7 8 9 10
Tiempo
Curso Introductorio de MatLab

Funcin 10sen3t
10

Amplitud
0

-5

-10
0 1 2 3 4 5 6 7 8 9 10
Funcin 30cos3t Tiempo
40

20
Amplitud

0
Pedro Ochoa Moreno
-20
452
-40
0 1 2 3 4 5 6 7 8 9 10
Tiempo
Funcin -90sen3t
100

50
Amplitud

-50

-100
0 1 2 3 4 5 6 7 8 9 10
Tiempo
Curso Introductorio de MatLab

Figura 7.11. Trazas mltiples en dos dimensiones y la matriz de


subregiones es de 3 x1.
7.5 Graficas en tres dimensiones (3D)

Las graficas en tercera dimensin son ms complejas que las de


dos dimensiones. Tambin debemos recordar que una figura en
tercera dimensin puede parecer o ser diferente con el simple hecho

Pedro Ochoa Moreno


453
Curso Introductorio de MatLab

de cambiar el punto de vista. Podemos dividir los objetos de 3D en tres


amplias categoras que son:

Superficies generadas por funciones matemticas de dos


variables suf.(soy);
Curvas o superficies las cuales son conocidas mediante
una descripcin paramtrica, x=x(t), y=y(t), z=z(t);

Pedro Ochoa Moreno


454
Curso Introductorio de MatLab

Superficies de revolucin generadas mediante la rotacin


de una curva alrededor de un eje fijo.

Antes de discutir las tres posibilidades anteriores, es importante


conocer que MatLab le permite a uno determinar el ngulo del punto
de vista, pero no la distancia del ojo al objeto trazado. Lo anterior es
llevado a cabo mediante los dos ngulos llamados el horizonte
(azimuth) y el de elevacin los cuales los podemos asociar a
Pedro Ochoa Moreno
455
Curso Introductorio de MatLab

longitud y latitud respectivamente. Lo anterior se puede ver en la figura


7.12

Pedro Ochoa Moreno


456
Curso Introductorio de MatLab

z
x
y

Punto de
vista

x
Pedro Ochoa Moreno
457
Curso Introductorio de MatLab

Figura 7.12 Marcos de referencia.


Existe la posibilidad de cambiar los valores usados por el
comando view, este trabaja esencialmente en dos formas:

view(az,el) establece el punto de vista en el az( ) y la el( )


en grados.

Pedro Ochoa Moreno


458
Curso Introductorio de MatLab

view(x,y,z) este le permite a uno definir el punto de vista


P(x,y,z) en coordenadas cartesianas; como se manejo en la
figura 7.12, pero no nos permite definir la distancia de
observacin, en otras palabras la longitud de P es ignorada.

A continuacin se presentan las figuras 7.13 y 7.14 con puntos


de vista de az(-45) y al(45); az(-45) y el(5) respectivamente:

Pedro Ochoa Moreno


459
Curso Introductorio de MatLab

Pedro Ochoa Moreno


460
Curso Introductorio de MatLab

Figura 7.13 Observacin de la figura con un punto de vista de az(-45)


y el(45).

Pedro Ochoa Moreno


461
Curso Introductorio de MatLab

Pedro Ochoa Moreno


462
Curso Introductorio de MatLab

Figura 7.14 Observacin de la figura con un punto de vista de az(-45)


y el(5).
7.6 Funciones de dos variables

Dada una funcin real de dos variables reales z=f(x,y). podemos


usar el comando mesh o surf para trazar su grafica. La diferencia
entre los dos comandos es que el primero traza la figura usando
segmentos de lnea que se unen a los valores de z y el ultimo, colorea

Pedro Ochoa Moreno


463
Curso Introductorio de MatLab

las regiones denominadas superficies y que se encuentran delimitadas


por esos segmentos de lnea; su sintaxis es la misma, as que sol
describiremos para el comando mesh. Una alternativa para trazar un
figura en 3D es la representacin de una en 2D a travs de sus curvas
de contorno, usando el comando contour.
El primer paso, ser el de construir las dos matrices X e Y que
definen el dominio de la funcin bajo consideracin y para esto
utilizaremos el comando meshgrid; la matriz X almacena copias del

Pedro Ochoa Moreno


464
Curso Introductorio de MatLab

intervalo ordenado por filas, la matriz Y contiene copias de los valores


de y almacenados por columnas. En otras palabras, dados dos
vectores con los intervalos x e y definiendo el dominio,

[X,Y] = meshgrid(x,y)

crea la matriz X con tantas filas como sea la longitud del vector y, y
cada fila es copiada del vector x; anlogamente, la matriz Y tiene un

Pedro Ochoa Moreno


465
Curso Introductorio de MatLab

numero de columnas semejantes a las del vector y como el numero de


elementos de x. De este modo el punto genrico con coordinadas
xi , y j puede ser calculado por ( X i, j ,Y i, j ).
Entonces si queremos calcular los valores de la funcin z=sinxcosy
para x [0,4] y y [2,1] , por lo tanto podemos usar las siguientes
lneas:

x=0:.1:4;

Pedro Ochoa Moreno


466
Curso Introductorio de MatLab

y=-2:.1:1;
[X,Y]=meshgrid(x,y);
Z=sin(X).*cos(Y);
contour(x,y,Z)
mesh(X,Y,Z)
meshc(X,Y,Z)
surfc(X,Y,Z)

Pedro Ochoa Moreno


467
Curso Introductorio de MatLab

El contorno en 2D lo podemos trazar con el comando


contour(x,y,Z), el resultado se puede observar en la figura 7.15 a) y el
comando mesh(X,Y,Z) en la figura 7.15 b).

Pedro Ochoa Moreno


468
Curso Introductorio de MatLab

0.5

-0.5

-1

-1.5

Pedro
-2
0
Ochoa
0.5 1
Moreno
1.5 2 2.5 3 3.5 4
469
Curso Introductorio de MatLab

a) b)

Figura 7.15 a) aplicacin del comando contour; b) aplicacin del


comando mesh.

Cabe hacer mencin que en la traza en 2D, los dos primeros


argumentos son los vectores definidos con anterioridad. Entonces en
este caso la instruccin meshgrid es sol usado para calcular los

Pedro Ochoa Moreno


470
Curso Introductorio de MatLab

valores de la funcin. En la figura 7.16 a) podemos ver la aplicacin


del comando meshc, y en el inciso b) vemos el uso del comando
surfc.

Pedro Ochoa Moreno


471
Curso Introductorio de MatLab

Pedro Ochoa Moreno


472
Curso Introductorio de MatLab

a) b)

Figura 7.16 Aplicacin de los comandos: a)meshc y b) surfc.


Como un ejemplo de 3D, en las siguientes lneas definimos con
el comando subplot(2,2,p) que la ventana ser dividida en cuatro
secciones y que se colocaran cuatro mallas en cada seccin,
mediante el comando mesh (para tres dimensiones) a la seccin
tambin se le denomina subregin, el resultado grafico se muestra en

Pedro Ochoa Moreno


473
Curso Introductorio de MatLab

la figura 7.15. Por otro lado si quisiramos poner todas las mallas en
una forma pila (cargador) vertical, entonces el comando seria
subplot(4,1,p), donde para este caso y el anterior el valor de p ira
desde uno hasta el valor del producto de m x n (en ambos casos el
rango de p es de 1 a 4).

t=0:pi/10:2*pi;
[X,Y,Z]=cylinder(4*cos(t));

Pedro Ochoa Moreno


474
Curso Introductorio de MatLab

subplot(2,2,1); mesh(X)
subplot(2,2,2); mesh(Y)
subplot(2,2,3); mesh(Z)
subplot(2,2,4); mesh(X,Y,Z)

Pedro Ochoa Moreno


475
Curso Introductorio de MatLab

Pedro Ochoa Moreno


476
Curso Introductorio de MatLab

Figura 7.17 Trazas mltiples en una sola ventana grfica.

Despus de haber utilizado el comando mesh, el cual solo nos


muestra las tres dimensiones en una forma esquemtica, pero si
queremos que las reas de la malla se llenen de color, en otras
palabras que el objeto parezca realmente slido, utilizaremos el
comando surf con los mismos argumentos de mesh. A continuacin
se presentan unas lneas que nos muestran lo anterior:

Pedro Ochoa Moreno


477
Curso Introductorio de MatLab

[X,Y]=meshgrid(-8:.5:8);
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
mesh(X,Y,Z)
surf(X,Y,Z)

Pedro Ochoa Moreno


478
Curso Introductorio de MatLab

Los resultados son visibles en las graficas 7.16 y 7.17, podemos


observar los resultados para el comando mesh y surf
respectivamente.

Pedro Ochoa Moreno


479
Curso Introductorio de MatLab

Pedro Ochoa Moreno


480
Curso Introductorio de MatLab

Figura 7.18 Aplicacin del comando mesh.

Pedro Ochoa Moreno


481
Curso Introductorio de MatLab

Pedro Ochoa Moreno


482
Curso Introductorio de MatLab

Figura 7.19 Aplicacin del comando surf.

7.7 Ejercicios

Ejercicio 7.1 Trazar las graficas de todas las curvas definidas en


los captulos previos

Pedro Ochoa Moreno


483
Curso Introductorio de MatLab

Ejercicio 7.2 Compare las trazas, en el intervalo x [1,1], de la


polinomial de Chebyshev de grado n=0,1,2,3,4 y definido por la
formula

Tn (x) cos(n arcos(x))

Posteriormente y mediante el uso de del comando polyfit,


encontrar los coeficientes de esos polinomios.

Pedro Ochoa Moreno


484
Curso Introductorio de MatLab

Ejercicio 7.3 Trazar la grafica de la funcin

5000
f ( x, y ) 1
740 x y 100 x 2 100 y 2 6369
2 2

Ejercicio 7.4 Con referencia al ejercicio anterior, use el comando


surf y pruebe con diferentes mapas de colores; y por ultimo,

Pedro Ochoa Moreno


485
Curso Introductorio de MatLab

genere un mapa de color aleatorio (una matriz de 64 x 3) y


pruebe esta.

Ejercicio 7.5 Delinear la traza de la funcin definida en


coordenadas polares por cos usando el comando polar y
posteriormente despus de convertir a coordenadas cartesianas
usar el comando plot.

Pedro Ochoa Moreno


486
Curso Introductorio de MatLab

Pedro Ochoa Moreno


487
Curso Introductorio de MatLab

Pedro Ochoa Moreno


488
Curso Introductorio de MatLab

Pedro Ochoa Moreno


489
Curso Introductorio de MatLab

Pedro Ochoa Moreno


490
Curso Introductorio de MatLab

Pedro Ochoa Moreno


491
Curso Introductorio de MatLab

Pedro Ochoa Moreno


492
Curso Introductorio de MatLab

8
Pedro Ochoa Moreno
493
Curso Introductorio de MatLab

Programacin en MatLab
Hasta este momento hemos usado MatLab en un modo
interactivo, tecleando cada comando desde el teclado. Esta forma de
operaciones muy rpida y usual, ya que nos permite utilizar la
computadora como la extensin de una calculadora para obtener
resultados rpidamente, pero esto encara dos problemas; que pasa si
Pedro Ochoa Moreno
494
Curso Introductorio de MatLab

queremos repetir los mismos clculos ms veces y no estamos


dispuestos a teclear las mismas instrucciones otra vez. Mas sin
embargo, si tenemos que repetir el mismo comando para diferentes
valores de los parmetros involucrados. Para este ltimo problema
existe la posibilidad de cambiar los parmetros sin la necesidad de
repetir las instrucciones.
Para solucionar ambos problemas en el entorno de MatLab, el
primer problema a encarar ser solucionado con las estructuras de

Pedro Ochoa Moreno


495
Curso Introductorio de MatLab

control de flujo. En la siguiente seccin veremos los comandos para


controlar el flujo lgico de las instrucciones, en las siguientes dos
secciones veremos el diseo de programas en MatLab as como
funciones y finalmente veremos las herramientas de depuracin
disponibles en MatLab.

8.1 Estructuras bsicas de programacin

Pedro Ochoa Moreno


496
Curso Introductorio de MatLab

Como es conocido que con base a la teora de programacin


estructurada que cualquier programa puede ser implementado
mediante un lenguaje de programacin que tenga las tres operaciones
bsicas: 1) secuencia, 2) seleccin, 3) iteracin. Entonces
consideremos como MatLab implementa esas operaciones.

Pedro Ochoa Moreno


497
Curso Introductorio de MatLab

La secuencia en MatLab es dada simplemente por el orden


lexicografito de las instrucciones.

La seleccin es obtenida con el operador clsico de las clusulas


if condicin
conjunto de instrucciones 1
elseif condicin
conjunto de instrucciones 2
Pedro Ochoa Moreno
498
Curso Introductorio de MatLab

else
conjunto de instrucciones 3
end

La iteracin es obtenida con los operadores de ciclos

for i=1:n;
instrucciones
Pedro Ochoa Moreno
499
Curso Introductorio de MatLab

end

while condicin
instrucciones
end

Pedro Ochoa Moreno


500
Curso Introductorio de MatLab

Una instruccin de seleccin nos permite hacer una pregunta o


probar una condicin para determinar que pasos se ejecutaran a
continuacin. Primero veremos la instruccin de seleccin ms comn
la instruccin if y luego estudiaremos los operadores y funciones
relacionales y lgicos que se usan comnmente con las instrucciones
de seleccin.

Instruccin if sencilla

Pedro Ochoa Moreno


501
Curso Introductorio de MatLab

La forma general de la instruccin if sencilla es la siguiente:

if expresin lgica
Instrucciones
end

Pedro Ochoa Moreno


502
Curso Introductorio de MatLab

Si la expresin lgica es verdadera, ejecutamos las instrucciones


que estn entre la instruccin if y la instruccin end. Si la expresin
lgica es falsa, saltamos de inmediato a la instruccin que sigue
despus de la instruccin end. Es importante sangrar las instrucciones
dentro de la estructura if para que sea ms fcil de entender.
He aqu un ejemplo de la instruccin if:

if g < 50

Pedro Ochoa Moreno


503
Curso Introductorio de MatLab

Count = count + 1;
disp(g);
end

Supongamos que g es un escalar. Si g es menor que 50, count


se incrementa en 1 y se exhibe el valor de g en la pantalla; si no, se
pasan por alto estas dos instrucciones. Si g no es un escalar, count se

Pedro Ochoa Moreno


504
Curso Introductorio de MatLab

incrementara en 1 y slo se exhibir g en la pantalla si todos los


elementos de g son menores que 50.

Instrucciones if anidadas

He aqu un ejemplo de instrucciones if anidadas que amplia el


ejemplo anterior:

Pedro Ochoa Moreno


505
Curso Introductorio de MatLab

if g < 50
Count = count + 1;
disp(g);
if b > g
b = 0;
end
end

Pedro Ochoa Moreno


506
Curso Introductorio de MatLab

Una vez ms, supondremos que g y b son escalares. Entonces,


si g < 50, incrementamos count en 1 y exhibimos g. Adems, si b > g,
asignamos 0 a b. Si g no es menor que 50, pasamos de inmediato a la
instruccin que sigue a la segunda instruccin end. Si g no es un
escalar, la condicin g < 50 slo ser verdadera si todos los elementos
de son menores que 50, Si ni g ni b son escalares, b ser mayor que
g slo si cada uno de los pares de elementos correspondientes de g y

Pedro Ochoa Moreno


507
Curso Introductorio de MatLab

b son valores tales que el de b es mayor que el de g. Si g o b es un


escalar, la otra matriz se comparara con el escalar elemento por
elemento.

Clusulas else y elseif

La clusula else nos permite ejecutar una serie de instrucciones


si una expresin lgica es verdadera y una serie diferente si la

Pedro Ochoa Moreno


508
Curso Introductorio de MatLab

expresin es falsa. Para ilustrar esta instruccin, supongamos que


tenemos una variable interval. Si el valor de interval es menor que 1,
queremos asignar el valor interval/10 a x_increment; en caso contrario,
queremos asignar 0.1 a x_increment. Las siguientes lneas de
instrucciones ejecutan esos pasos:

if interval < 1
x_incremental = interval/10;

Pedro Ochoa Moreno


509
Curso Introductorio de MatLab

else
x_incremental = 0.1;
end

Si anidamos varios niveles de instruccin if else, puede ser


difcil determinar cules expresiones lgicas deben ser verdaderas (o
falsas) para ejecutar cada serie de instrucciones. En estos casos es

Pedro Ochoa Moreno


510
Curso Introductorio de MatLab

comn utilizar la clusula elseif para aclarar la lgica del programa,


como se ilustra con las siguientes lneas de instrucciones:

if temperatura > 100


disp(Demasiado caliente falla de equipo.)
elseif temperatura > 90
disp(Intervalo operativo normal.)
elseif temperatura > 50

Pedro Ochoa Moreno


511
Curso Introductorio de MatLab

disp(Temperatura por debajo del intervalo


operativo deseado.)
else
disp(Demasiado fri apagar equipo.)
end
En este ejemplo, las temperaturas entre 90 y 100 estn en el
intervalo operativo normal; las temperaturas fuera de ese intervalo
generan un mensaje apropiado.

Pedro Ochoa Moreno


512
Curso Introductorio de MatLab

Un ciclo es una estructura que nos permite repetir una serie de


instrucciones. Pero en general es aconsejable evitar los ciclos en
MatLab debido a que pueden aumentar el tiempo de ejecucin de los
programas.
Ciclo for

Pedro Ochoa Moreno


513
Curso Introductorio de MatLab

Un ciclo for tiene la estructura mostrada con anterioridad y esta


puede ser ms detallada, como se muestra a continuacin:

for indice=expresin
Instrucciones
End

Pedro Ochoa Moreno


514
Curso Introductorio de MatLab

Donde la expresin seria una matriz (que podra ser un escalar o un


vector) y las instrucciones se repetiran tantas veces como las
columnas que haya en la matriz de la expresin. Cada vez que se
repite el ciclo, el ndice tiene el valor de uno de los elementos de la
matriz de la expresin. Las reglas para escribir y usar un ciclo for son
las siguientes:

Pedro Ochoa Moreno


515
Curso Introductorio de MatLab

1. El ndice de un ciclo for debe ser una variable.

2. Si la matriz de la expresin es la matriz vaca (null), no se


ejecutar el ciclo. El control pasara a la instruccin que sigue
a la instruccin end.

3. Si la matriz de la expresin es un escalar, el ciclo se


ejecutara una vez, y el ndice contendr el valor del escalar.

Pedro Ochoa Moreno


516
Curso Introductorio de MatLab

4. Si la matriz de la expresin es un vector fila, en cada


repeticin del ciclo el ndice contendr el siguiente valor del
vector.

5. Si la matriz de la expresin es una matriz, en cada repeticin


del ciclo el ndice contendr la siguiente columna de la matriz.

Pedro Ochoa Moreno


517
Curso Introductorio de MatLab

6. Al completarse un ciclo for, el ndice contendr el ltimo valor


utilizado.

7. Se puede usar el operador de dos punto (: colon) para definir


la matriz de la expresin usando el siguiente formato:

for k = inicial:incremento:lmite

Pedro Ochoa Moreno


518
Curso Introductorio de MatLab

Ciclo while

El ciclo while es una estructura para repetir una serie de


instrucciones en tanto se cumple una condicin especificada. El
formato general de esta estructura de control es

while expresin

Pedro Ochoa Moreno


519
Curso Introductorio de MatLab

Instrucciones
end

Si la expresin es verdadera, se ejecutan las instrucciones, despus


de lo cual se vuelven a probar la condicin. Si la condicin se sigue
cumpliendo, se ejecuta otra vez la serie de instrucciones. Si la
condicin es falsa, el control pasa a la instruccin que sigue a la
instruccin end. Las variables modificadas dentro del ciclo deben

Pedro Ochoa Moreno


520
Curso Introductorio de MatLab

incluir las variables de la expresin, pues de lo contrario el valor de la


expresin nunca cambiaria. Si la expresin siempre es verdadera ( o
es un valor distinto de cero), el ciclo se convierte en ciclo infinito.
Los ciclos son estructuras necesarias en la mayor parte de los
lenguajes de alto nivel; no obstante, generalmente puede
aprovecharse la potencia de las operaciones elemento por elemento
con matrices para evitar el uso de ciclos en los programas de MatLab.

Pedro Ochoa Moreno


521
Curso Introductorio de MatLab

8.2 Archivos tipo script

Un archivo script (tambin llamado archivo .m) es un


procedimiento de MatLab escrito en cualquier editor de texto y
consistente de un conjunto de comandos de MatLab y que ser
ejecutado en el espacio de trabajo con solo invocarlo por su nombre
sin necesidad de escribir la extensin .m. Este tipo de archivo trabaja

Pedro Ochoa Moreno


522
Curso Introductorio de MatLab

directamente sobre las variables que estn actualmente en el espacio


de trabajo y no permite el uso de variables locales. Esta clase de
archivo puede ser visto como una secuencia de instrucciones de
MatLab escritas fueras del espacio de trabajo de MatLab y ejecutado
en este como un bloque simple de comandos. Por ejemplo,
escribamos las siguientes lneas en cualquier editor de texto:
% El presente programa es un archivo con extensin .m
% (fiboni.m) y el cual nos permitir calcular los
Pedro Ochoa Moreno
523
Curso Introductorio de MatLab

% nmeros Fibonacci.
%
clear; clc; clf;
f=[1 1];
i=1;
while f(i)+f(i+1)<1000
f(i+2)=f(i)+(i+1);
i=i+1;
end
plot(f,'g','LineWidth',2)
Pedro Ochoa Moreno
524
Curso Introductorio de MatLab

title('Nmeros Fibonacci')
xlabel('Abcisa')
ylabel('Ordenada')
grid

el siguiente paso, despus de editar esas lneas en el editor, el


siguiente paso es salvar este archivo como fibno.m, y luego en el
espacio de trabajo teclearemos solo el nombre del archivo para

Pedro Ochoa Moreno


525
Curso Introductorio de MatLab

obtener su resultado en este caso grafico, como se observa en la


figura 8.1 que se muestra a continuacin:

Pedro Ochoa Moreno


526
Curso Introductorio de MatLab

Nmeros Fibonacci
600

500

400

Ordenada
300

200

Pedro Ochoa Moreno 100


527
0
0 5 10 15 20 25 30 35 40 45 50
Abcisa
Curso Introductorio de MatLab

Figura 8.1 Representacin grfica de los nmeros de Fibonacci.

Al ejecutar el archivo en el espacio de trabajo no siempre se


ejecuta adecuadamente, cuando no se tiene la experiencia surgen los
errores ms comunes que son los de sintaxis, en este caso, una
alternativa para mantener el ojo visor sobre estos errores existe un
comando denominado diary que nos permite guardar la informacin
sobre los errores cuando estos son algunos. Su formato es: diary

Pedro Ochoa Moreno


528
Curso Introductorio de MatLab

nombrearchivo.m. Posteriormente se puede editar el archivo y sobre


este hacer las correcciones.

8.3 Funciones

Al usar MatLab para realizar mas y mas clculos uno se topara


con clculos que deseara que estuvieran incluidos en como funciones
de MatLab. En tales casos, se puede crear una funcin escrita por el

Pedro Ochoa Moreno


529
Curso Introductorio de MatLab

usuario a la cual su programa podr referirse del mismo modo como


se refiere a una funcin de MatLab. La funciones escritas por el
usuario tienen reglas muy especificas que deben obedecerse; sin
embargo antes de listar las reglas consideremos dos ejemplos
sencillos.
Una funcin puede ser creada en MatLab tal como un archivo
script (.m), pero este deber iniciar con el siguiente encabezado:

Pedro Ochoa Moreno


530
Curso Introductorio de MatLab

function [variables de salida] = nombre de la


funcin(variables de entrada)

Todas las variables usadas dentro de la funcin son de cierta


manera locales, con lo que al ejecutarse la funcin, estas desaparecen
del espacio de trabajo.
Como primer ejemplo, podemos ver a continuacin como MatLab
implementa la funcin trace:

Pedro Ochoa Moreno


531
Curso Introductorio de MatLab

function t = trace(a)
%TRACE Suma los elementos de la diagonal.
% TRACE(A) es la suma de los elementos de la diagonal de A,
% lo cual es tambin la suma de los valores propios de A.
% Copyright (c) 1984-94 by The MathWorks, Inc.
t=sum(diag(a));

Pedro Ochoa Moreno


532
Curso Introductorio de MatLab

En este ejemplo, podemos observar que de la segunda lnea a la


cuarta, estas fueron tecleadas como comentarios (anteponiendo a
estas un prefijo %); cuando los comentarios son definidos despus del
encabezado de la funcin, estos se mantienen como la ayuda en lnea
de la funcin en si, por ejemplo, si tecleamos help trace, el resultado
ser el siguiente:

help trace

Pedro Ochoa Moreno


533
Curso Introductorio de MatLab

TRACE Suma los elementos de la diagonal.


TRACE(A) es la suma de los elementos de la diagonal de A,
lo cual es tambin la suma de los valores propios de A.
Copyrigth (c) 1984-94 by The MathWorks, Inc.

La aplicacin prctica de la funcin trace, se puede visualizar a


continuacin:

Pedro Ochoa Moreno


534
Curso Introductorio de MatLab

a=[1 2 3;4 5 6;7 8 9];


b=trace(a);
b

b=

15

Pedro Ochoa Moreno


535
Curso Introductorio de MatLab

En muchas aplicaciones de ingeniera se usa una funcin


rectangular (Fig. 8.2). Una definicin comn de la funcin rectangular
es la siguiente:

Pedro Ochoa Moreno


536
Curso Introductorio de MatLab

1, x 0.5
rect(x)
0, en cualquier otro caso

Pedro Ochoa Moreno


537
Curso Introductorio de MatLab

1 y=rect(x)

Pedro Ochoa Moreno x


-0.5 0.5
538
Curso Introductorio de MatLab

Figura 8.2 Funcin rectangular.

He aqu la funcin definida por el usuario para evaluar esta funcin:

function r = rect(x)
% RECT Se define como la funcin rectangular
% como 1 en [-0.5, 0.5] y cero en los
% dems puntos.
Pedro Ochoa Moreno
539
Curso Introductorio de MatLab

%
r=zeros(size(x));
set1=find(abs(x)<=0.5);
r(set1)=ones(size(set1));

A continuacin escribiremos algunas lneas de instrucciones para


probar la funcin diseada,

y=rect(x);
Pedro Ochoa Moreno
540
Curso Introductorio de MatLab

plot(x,y)
title('Funcin Rect');
xlabel('x');
ylabel('y');
grid

su resultado se puede observar en la figura 8.3.

Pedro Ochoa Moreno


541
Curso Introductorio de MatLab

Funcion Rect
1

0.9

0.8

0.7

0.6

0.5
y

0.4

0.3

Pedro Ochoa Moreno


0.2
542
0.1

0
-3 -2 -1 0 1 2 3
x
Curso Introductorio de MatLab

Figura 8.3 Resultado grafico de la aplicacin de la funcin rect.

Como un siguiente paso resumiremos las reglas para escribir


funciones de archivo.m. Al leer cada regla nos podemos referir a los
dos ejemplos anteriores:

1. La funcin debe comenzar con una lnea que contenga


la palabra function, seguida del argumento de salida, un

Pedro Ochoa Moreno


543
Curso Introductorio de MatLab

signo de igual y el nombre de la funcin. Este nombre


ira seguido por los argumentos de entrad de la funcin
encerrada por los parntesis. Esta lnea distingue el
archivo de funcin de un archivo de guin.

2. Es recomendable que las primeras lneas sean


comentarios porque se exhibirn si se solicita ayuda
para el nombre de la funcin, como help trace o rect.

Pedro Ochoa Moreno


544
Curso Introductorio de MatLab

3. La nica informacin que la funcin devuelve est


contenida en los argumentos de salida que, desde
luego, son matrices. Siempre compruebe que la funcin
incluya una instruccin que asigne un valor al
argumento de salida.

Pedro Ochoa Moreno


545
Curso Introductorio de MatLab

4. Se pueden usar los mismos nombres de matriz tanto en


una funcin como en el programa que hace referencia a
ella. No habr confusin en cuanto a cul matriz es a la
que se refiere porque la funcin y el programa son
totalmente independientes. Por otro lado, no es posible
acceder desde el programa a ninguno de los valores
que se calculan en la funcin, como no sean los
argumentos de salida.

Pedro Ochoa Moreno


546
Curso Introductorio de MatLab

5. Una funcin que va a devolver mas de un valor debe


mostrar todos los valores que devolver en forma de
vector en la instruccin de la funcin, como en el
siguiente ejemplo que devuelve tres valores:

function [dist, vel, acel] = movimiento(x)

Pedro Ochoa Moreno


547
Curso Introductorio de MatLab

Los tres valores tendrn que calcularse dentro de la


funcin.

6. Una funcin que tenga mltiples argumentos de entrada


deber listar los argumentos en la instruccin de
funcin, como se muestra en el siguiente ejemplo que
tiene dos argumentos de entrada:
function error = mse(w,d)

Pedro Ochoa Moreno


548
Curso Introductorio de MatLab

7. Las variables especiales nargin y nargout pueden servir


para determinar el nmero de argumentos de entrada y
salida respectivamente de una funcin.

El comando what lista todos los archivos .m y .mat que se


encuentran disponibles en el espacio de trabajo actual. El comando
type seguido del nombre del archivo exhibe el contenido de ese

Pedro Ochoa Moreno


549
Curso Introductorio de MatLab

archivo en pantalla. Si el nombre del archivo especificado no tiene


extensin, el comando type supone que la extensin es .m.

8.4 Depuracin de programas

Es bien sabido que al escribir un programa cada fuente de error


posible que pueda volverse una fuente de error segura, si alguien se

Pedro Ochoa Moreno


550
Curso Introductorio de MatLab

atreve a decir que un programa trabajara bien en su primera prueba,


trabajara pero hay que recordar que existen errores que se entrelazan
y se compensan entre ellos, con el fin esencial, pero existen. Por
ahora discutamos como detectar y corregir los errores. Nuestra
primera confrontacin con estos ser en un modo interactivo, por lo
cual esos errores en archivos tipo script y finalmente funciones .m, en
particular con errores lgicos, son llamados los errores de tiempo de

Pedro Ochoa Moreno


551
Curso Introductorio de MatLab

corrida, debido a que estos son errores de sintaxis que son mas
sencillos de detectar y corregir.
Trabajar en un modo interactivo, es la forma ms sencilla de
detectar errores y visualizar el resultado intermedio de cada operacin
(es tan simple como omitir el semicolon al final de cada instruccin).
Esto deber ser realizado con cuidado, para evitar un flujo sin final de
nmeros al espacio de trabajo y por ende una carga de memoria
especialmente cuando se trabaja con matrices y vectores de grandes

Pedro Ochoa Moreno


552
Curso Introductorio de MatLab

dimensiones. Recuerde que MatLab nos indica el comando en el cual


las cosas no estn funcionando adecuadamente, entonces la primera
cosa que hay que hacer es invocar la ayuda en lnea de la funcin
(esto, hace que al desarrollar funciones es muy importante proveer a
esta con la informacin adecuada para su manejo, y que contenga al
menos su uso y los parmetros de entrada y salida).
Con anterioridad habamos manejado que un archivo tipo script
es nada menos que un archivo por lotes, por lo tanto, el acceso a una

Pedro Ochoa Moreno


553
Curso Introductorio de MatLab

depuracin de este tipo de archivos ser el mismo que se usa de una


manera interactiva; la nica diferencia es que tenemos que esperar a
que la ltima lnea de instruccin del archivo sea ejecutada. Es posible
suspender la ejecucin de un archivo tipo script, darle el control al
teclado, ejecutar algunas operaciones en modo interactivo (por
ejemplo, el control de algunas operaciones parciales) y finalizar la
ejecucin del archivo. Esto es posible hacerse con el comando
keyboard desde dentro del archivo. Cuando MatLab encuentra este

Pedro Ochoa Moreno


554
Curso Introductorio de MatLab

comando en un archivo de este tipo, este hace que la ejecucin del


archivo sea llevada a cabo en un modo interactivo, cambiando tambin
la linea de comando (prompt(>>)) por K>> para sealar que la
ejecucin ha sido detenido. Para salir de esta pausa slo tenemos
que presionar la teclear return (no se presione la tecla de Return o
Enter).
El resultado ms frecuente de un proceso de programacin en
MatLab es la creacin de un archivo de una funcin, del cual se puede

Pedro Ochoa Moreno


555
Curso Introductorio de MatLab

pensar como un nuevo comando que ser aadido a la biblioteca


bsica de MatLab. Lo anterior es porque hemos puesto una atencin
muy especial en la seccin anterior; para cumplir con esa tarea
tenemos una herramienta dedicada, que no puede trabajar en modo
interactivo y con archivos tipo script, esta es: el depurador (debugger).
Una de sus principales ventajas de un archivo tipo .m es que utiliza
variables temporales, por lo cual, desde ese punto de vista, la
ejecucin de una funcin slo afectara a las variables de entrada y

Pedro Ochoa Moreno


556
Curso Introductorio de MatLab

salida (y claro que tambin a las variables globales). Durante la fase


de chequeo de errores lo anterior resulta en una limitante; por lo que el
diseado de la funcin preferira tener la visibilidad de todas las
variables, las cuales son enmascaradas en variables temporales en
una fase posterior.
Obviamente, una posible solucin es el uso indiscriminado del
comando keyboard descrito con anterioridad, pero esto no es la forma
mas eficiente para probar una funcin en MatLab. Usando el debugger

Pedro Ochoa Moreno


557
Curso Introductorio de MatLab

podemos interrumpir la ejecucin en punto predeterminados con


anterioridad, inspeccionar las llamadas funciones y cambiar los valores
en una forma estructurada.
Veamos el uso del debugger en detalle. Supongamos que
tenemos el archivo plteig.m que calcula los valores propios de una
matriz A y los grfica estos en el plano complejo. Conocemos que si
uno de los valores propios es complejo entonces el comando plot(l) es
suficiente, donde el vector l contiene los valores propios. Pero si todos

Pedro Ochoa Moreno


558
Curso Introductorio de MatLab

los valores propios son reales una solucin posible es aadir una
pequea parte imaginaria para cuando se grafiquen. Lo cual, es hecho
por el archivo addimg.m. A continuacin se presentan ambos archivos:

function l=plteig(A)
% Dada una matriz cuadrada A,
% el comando l = plteig(A)
% graficara en el plano complejo
% los valores propios y almacenar

Pedro Ochoa Moreno


559
Curso Introductorio de MatLab

% estos en la variable l.
l=eig(A);
if ~any(image(l))
% si no existe al menos un valor
% propio complejo, entonces aadir
% una parte imaginaria ficticia.
l1=addimg(i);
else
l1=1;
end
Pedro Ochoa Moreno
560
Curso Introductorio de MatLab

% Ahora la variable l1 es usada para


% graficar solamente. Los valores
% propios son almacenados en l.
plot(l1,'*')

function y=addimg(x);
% Dado un vector o una matriz x,
% el comando y=addimg(x);
% dar como resultado y=x+j*eps
Pedro Ochoa Moreno
561
Curso Introductorio de MatLab

% (donde eps es una variable


% predefinida que nos indica que
% que se trabaja con precisin).
y=x+j*eps;

Ahora veremos como iniciaremos una sesin de depuracin. Lo


nico que necesitamos es definir los puntos de corte y ejecutar la
funcin plteig. Para llevar a cabo lo anterior teclearemos
Pedro Ochoa Moreno
562
Curso Introductorio de MatLab

dbstop in plteig

A continuacin procederemos a ejecutar plteig(A) (la matriz A


deber haber sido definida con anterioridad). MatLab nos responder
con

Pedro Ochoa Moreno


563
Curso Introductorio de MatLab

y posterior al cambio de prompt de >> a K>>, en la figura 8.4 podemos


observar que el cursor reposiciona en la primera lnea de instruccin
( 7 l=eig(A) )

Pedro Ochoa Moreno


564
Curso Introductorio de MatLab

Pedro Ochoa Moreno


565
Curso Introductorio de MatLab

Figura 8.4 Ejecucin del depurador en la funcin plteig.

Cabe mencionar que la ejecucin de la funcin se suspende en


la primera instruccin ejecutable, en este caso el clculo de los valores
propios, y una evidencia de este cambio es el prompt. Ntese que el
depurador nos muestra en la ventana del editor el punto donde se ha
detenido. Es posible detener el la ejecucin en un punto

Pedro Ochoa Moreno


566
Curso Introductorio de MatLab

predeterminado diferente al anterior, por ejemplo, para detener la


funcin en la lnea 12, teclearemos

dbstop plteig at 12
plteig(A)
K

Pedro Ochoa Moreno


567
Curso Introductorio de MatLab

El resultado visual del editor se muestra en la figura 8.5 .Para ver


los nmeros de lneas podemos usar el comando

K dbtype
1 function l=plteig(A)
2 % Dada una matriz cuadrada A,
3 % el comando l = plteig(A)
4 % graficara en el plano complejo

Pedro Ochoa Moreno


568
Curso Introductorio de MatLab

5 % los valores propios y almacenar


6 % estos en la variable l.
7 l=eig(A);
8 if ~any(image(l))
9 % si no existe al menos un valor
10 % propio complejo, entonces aadir
11 % una parte imaginaria ficticia.
12 l1=addimg(i);

Pedro Ochoa Moreno


569
Curso Introductorio de MatLab

13 else
14 l1=1;
15 end
16 % Ahora la variable l1 es usada para
17 % graficar solamente. Los valores
18 % propios son almacenados en l.
19 plot(l1,'*')
20

Pedro Ochoa Moreno


570
Curso Introductorio de MatLab

Ahora si tecleamos dbcont el depurador continuara hasta


finalizar la funcin y nos dar su resultado grafico como se observa en
la figura 8.6. Si no hubiramos utilizado dbstop in plteig at 12, el
depurador se viera detenido en la lnea donde la funcin addimg es
llamada (lnea 12). En este caso se detuvo en la misma lnea. Si

Pedro Ochoa Moreno


571
Curso Introductorio de MatLab

dbcont se detuviera en una lnea, se volvera a teclear esta y


finalizara la funcin al no haber puntos de ruptura definidos.

Pedro Ochoa Moreno


572
Curso Introductorio de MatLab

Pedro Ochoa Moreno


573
Curso Introductorio de MatLab

Figura 8.5 Ejecucin del depurador para detener la funcin plteig en la


lnea 12.

Pedro Ochoa Moreno


574
Curso Introductorio de MatLab

1.8

1.6

1.4

1.2

Pedro Ochoa
0.8 Moreno

0.6
575

0.4

0.2

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Curso Introductorio de MatLab

Figura 8.6 Resultado grfico de la funcin plteig.

Tecleando la instruccin dbstep ser ejecutada como un simple


comando y la ejecucin se detendr en una lnea predeterminada
dentro de la funcin, por otro lado, si queremos ver otra variable dentro
de la funcin addimg, deberemos teclear

K dbstep in

Pedro Ochoa Moreno


576
Curso Introductorio de MatLab

Esta instrucciones avanzara mediante pasos n al usarse la forma


dbstep n. Por otro lado, si queremos revisar el espacio de trabajo con
who encontraremos solamente las variables x e y. Por ejemplo, para
ver las variables locales de la funcin actual. Tendremos que revisar el
espacio de trabajo anterior, entonces teclearemos dbup.
Si posteriormente introducimos el comando who, veremos que el
espacio de trabajo ha cambiado. Esta seria un forma apropiada de

Pedro Ochoa Moreno


577
Curso Introductorio de MatLab

verificar que los parmetros han sido intercambiados correctamente


entre las diferentes funciones, si queremos ver l, entonces iramos al
espacio de trabajo de addimg con dbdown, y veramos x; si no han
ocurrido errores en los parmetros anteriores, las dos variables
tendrn los mismos valores. Para finalizar la ejecucin podemos
hacerlo con dbstep. Esta claro que para casos mas complejos
podemos perdernos en una bifurcacin. En ese caso, la siguiente
instruccin ser muy til: dbstack la cual nos dice donde estamos y

Pedro Ochoa Moreno


578
Curso Introductorio de MatLab

como llegamos a ese punto. Mas sin embargo, el nmero de puntos


de ruptura en cada funcin puede verse incrementado
dramticamente, entonces podemos teclear dbstatus
NombredelaFuncion que listara los puntos de ruptura definidos en la
funcin. Estos pueden ser limpiados por: dbclear all in
NombredelaFuncion, o podemos remover uno por uno al aadir at n; y
finalmente podemos remover todos mediante dbclear all.

Pedro Ochoa Moreno


579
Curso Introductorio de MatLab

Cabe hacer mencin que este ltimo, puede ser realizado


mediante la remocin de todas las funciones de la memoria con clear
functions, y finalmente para salir del depurador, basta con teclear
dbquit.

8.5 Ejercicios

Pedro Ochoa Moreno


580
Curso Introductorio de MatLab

Ejercicio 8.1 Para los siguientes incisos, escriba las instrucciones


en MatLab que realicen los pasos indicados. Suponga que las
variables son escalares.
a) Si la diferencia entre volt_1 y volt_2 es mayor que 10.0,
exhibir los valores de volt_1 y volt_2.
b) Si el logaritmo natural de x es mayor o igual que 3,
asignar 0 a time e incrementar count en 1.

Pedro Ochoa Moreno


581
Curso Introductorio de MatLab

c) Si dist es menor que 50.0 y time es mayor que 10.0


incrementar time en 2; en caso contrario incrementar
time en 2.5.
d) Si dist es mayor o igual que 100.0, incrementar time en
2.0. Si dist esta entre 50 y 100, incrementar time en 1.
En los dems casos incrementar time en 0.5.

Pedro Ochoa Moreno


582
Curso Introductorio de MatLab

Ejercicio 8.2 Determine el nmero de veces que se ejecutaran


los ciclos for definidos por las instrucciones de los siguientes
incisos:

a) for k = 3:20
b) for count = -2:14
c) for k = -2:-1:-10
d) for time = 10:-1:0

Pedro Ochoa Moreno


583
Curso Introductorio de MatLab

e) for time = 10:5


f) for index = 2:3:12

Para verificar sus respuesta utilice el comando length que nos


devuelve el nmero de valores contenidos en un vector.

Ejercicio 8.3 Cree y pruebe las funciones escritas por el usuario


para calcular lo siguiente:

Pedro Ochoa Moreno


584
Curso Introductorio de MatLab

0 si x 0
1. step(x)
1 en los demas casos

Pedro Ochoa Moreno


585
Curso Introductorio de MatLab

0 si x 0
2. ramp(x)
1 en los demas casos

Pedro Ochoa Moreno


586
Curso Introductorio de MatLab

0 si x 0

3. g(x) sen (/2 si 0 x 1
1 si x 1

Pedro Ochoa Moreno


587
Curso Introductorio de MatLab

Pedro Ochoa Moreno


588
Curso Introductorio de MatLab

Pedro Ochoa Moreno


589
Curso Introductorio de MatLab

Pedro Ochoa Moreno


590
Curso Introductorio de MatLab

Pedro Ochoa Moreno


591
Curso Introductorio de MatLab

Pedro Ochoa Moreno


592
Curso Introductorio de MatLab

9
Anlisis Numrico
Pedro Ochoa Moreno
593
Curso Introductorio de MatLab

Existen una clase de operadores en MatLab que son


numricamente problemas matemticos. Estos son estrictamente los
operadores en el sentido matemtico, debido a que estos trabajan con
base a funciones en lugar de usar matrices, y estos pueden ser
divididos en las siguientes tres clases:

derivadas e integrales numricas;


solucin de ecuaciones lineales;

Pedro Ochoa Moreno


594
Curso Introductorio de MatLab

solucin de ecuaciones diferenciales.

A continuacin nos referiremos a funciones predefinidas

1 1
humps(x) 6
( x 0.3) 0.01 ( x 0.9) 2 0.04
2

cuyo archivo de funcin es

Pedro Ochoa Moreno


595
Curso Introductorio de MatLab

function [out1,out2] = humps(x)


%HUMPS A function used by QUADDEMO, ZERODEMO and
% FPLOTDEMO.
% Y = HUMPS(X) is a function with strong
% maxima near x = .3 and x = .9.
%
% [X,Y] = HUMPS(X) also returns X. With no
% input arguments,
% HUMPS uses X = 0:.05:1.
Pedro Ochoa Moreno
596
Curso Introductorio de MatLab

%
% Example:
% plot(humps)
%
% See QUADDEMO, ZERODEMO and FPLOTDEMO.

% Copyright (c) 1984-98 by The MathWorks, Inc.


% $Revision: 5.4 $ $Date: 1997/11/21 23:26:10 $

if nargin==0, x = 0:.05:1; end


Pedro Ochoa Moreno
597
Curso Introductorio de MatLab

y = 1 ./ ((x-.3).^2 + .01) + 1 ./ ((x-.9).^2 + .04) - 6;

if nargout==2,
out1 = x; out2 = y;
else
out1 = y;
end

Pedro Ochoa Moreno


598
Curso Introductorio de MatLab

y cuya grfica es dada en la figura 9.1, esta es obtenida con las


siguientes lneas:

x=-1:.01:2;
plot(x,humps(x))

Pedro Ochoa Moreno


599
Curso Introductorio de MatLab

100

80

60

40

Pedro Ochoa Moreno 20


600
0

-20
-1 -0.5 0 0.5 1 1.5 2
Curso Introductorio de MatLab

Figura 9.1 Grfica de la funcin humps(x).

Generalmente hablando, el archivo de la funcin que define a la


funcin, que ser dada como entrada a los operadores que se
discutirn en este capitulo deber tener la capacidad de darnos como
resultado vectores; esta es la razn porque los operadores punto (dot)
han sido ampliamente usados en la escritura de la funcin humps.m,

Pedro Ochoa Moreno


601
Curso Introductorio de MatLab

debido a que estos operan elemento por elemento; entonces si x es un


vector, humps(x) nos dar un vector.
9.1 Matemticas simblicas

Las operaciones de derivacin e integracin se utilizan mucho


para resolver problemas de ingeniera, es de todos conocidos que los
cursos de calculo implica el uso de tcnicas para realizar la derivacin

Pedro Ochoa Moreno


602
Curso Introductorio de MatLab

e integracin numrica usando valores de datos; en esta seccin


veremos la derivacin e integracin de expresiones simblicas.

9.1.1 Derivacin

Pedro Ochoa Moreno


603
Curso Introductorio de MatLab

Para la derivacin utilizaremos la funcin diff para determinar la


derivada de una expresin simblica. Existen cuatro formas de usar la
funcin diff para realizar una derivacin simblica:

diff(f) Devuelve la derivada de la expresin f respecto


a la variable independiente por omisin.

Pedro Ochoa Moreno


604
Curso Introductorio de MatLab

diff(f,t) Devuelve la derivada de la expresin f respecto


a la variable t.

diff(f,n) Devuelve la n-sima derivada de la expresin f


respecto a la variable independiente por
omisin.

diff(f,t,n) Devuelve la n-sima derivada de la expresin f

Pedro Ochoa Moreno


605
Curso Introductorio de MatLab

respecto a la variable t.

Puesto que la funcin diff tambin se utiliza para la derivacin


numrica, tal vez nos preguntemos como sabe la funcin si debe
calcular las diferencias numricas o realizar la derivacin numrica. La
funcin puede determinar qu es lo que se desea analizando los
argumentos de entrada: si el argumento es un vector, calcula

Pedro Ochoa Moreno


606
Curso Introductorio de MatLab

diferencias numricas; si el argumento es una expresin simblica,


realiza derivacin simblica.
El siguiente paso, es presentar la aplicacin de la funcin diff
para derivar simblicamente. Por ejemplo, si se han definido las
siguientes expresiones:
s1='6*x^3-4*x^2+b*x-5';
s2='sin(a)';
s5='10*sin(3*t)';

Pedro Ochoa Moreno


607
Curso Introductorio de MatLab

s3='(1-t^3)/(1-t^4)';

Si pretendemos conocer la primera derivada de la primera


expresin, basta con la siguiente lnea,

diff(s1)

y el resultado ser:

Pedro Ochoa Moreno


608
Curso Introductorio de MatLab

ans =

18*x^2-8*x+b

Si queremos conocer la segunda derivada de esa misma expresin,

diff(s1,2)

Pedro Ochoa Moreno


609
Curso Introductorio de MatLab

donde el resultado es:

ans =

36*x-8

Pedro Ochoa Moreno


610
Curso Introductorio de MatLab

Por otro lado la funcin dic tambin nos permite derivar la expresin
con respecto a una determinada variable, como se muestra a
continuacin:

diff(s1,'b')

entonces el resultado ser:

Pedro Ochoa Moreno


611
Curso Introductorio de MatLab

ans =

x
La aplicacin de la funcin diff a la segunda expresin (s2), se
lleva a cabo de manera idntica a lo visto con anterioridad

diff(s2)

Pedro Ochoa Moreno


612
Curso Introductorio de MatLab

donde el resultado sera:

ans =

cos(a)

El mismo camino seguiremos para la expresin (s3),

Pedro Ochoa Moreno


613
Curso Introductorio de MatLab

diff(s3)

donde el resultado es :

ans =

-3*t^2/(1-t^4)+4*(1-t^3)/(1-t^4)^2*t^3

Pedro Ochoa Moreno


614
Curso Introductorio de MatLab

es claro que el resultado se puede simplificar y para lo cual


utilizaremos el comando simplify, para reducir el resultado

simplify(diff(s3))

la aplicacin de ese Nuevo comando nos da como resultado:

ans =

Pedro Ochoa Moreno


615
Curso Introductorio de MatLab

-t^2*(t^2+2*t+3)/(t^3+t^2+t+1)^2

Por ltimo, con la expresin (s5), realizaremos las primera,


segunda y tercera derivadas, para analizar el comportamiento cclico
de la expresin:

diff(s5); diff(s5,2); diff(s5,3);

Pedro Ochoa Moreno


616
Curso Introductorio de MatLab

el resultado para la primera es :

ans =

30*cos(3*t)

para la segunda derivada es :

Pedro Ochoa Moreno


617
Curso Introductorio de MatLab

ans =

-90*sin(3*t)

y entonces, la tercera derivada ser:

ans =

Pedro Ochoa Moreno


618
Curso Introductorio de MatLab

-270*cos(3*t)

9.1.2 Integracin

Para realizar la integracin de una funcin simblica f, usaremos


la funcin int. Esta funcin intenta encontrar la expresin simblica F

Pedro Ochoa Moreno


619
Curso Introductorio de MatLab

tal que diff(F)=f. Es posible que la integral (o antiderivada) no exista


en forma cerrada o que MatLab no pueda obtener la integral. En estos
casos, la funcin devolver la expresin sin evaluarla. La funcin int
puede usarse en las siguientes formas:

int(f) Devuelve la integral de la expresin f respecto

Pedro Ochoa Moreno


620
Curso Introductorio de MatLab

a la variable independiente por omisin.

Int(f,t) Devuelve la integral de la expresin f respecto


a la variable t.

int(f,a,b) Devuelve la integral de la expresin f respecto


a la variable independiente por omisin,
evaluada en el intervalo [a,b], donde a y b son

Pedro Ochoa Moreno


621
Curso Introductorio de MatLab

expresiones numricas.

int(f,t,a,b) Devuelve la integral de la expresin f respecto


a la variable t evaluada en el intervalo [a,b],
donde a y b son expresiones numricas.

Int(f,m,n) Devuelve la integral de la expresin f respecto


a la variable independiente por omisin,

Pedro Ochoa Moreno


622
Curso Introductorio de MatLab

evaluada en el intervalo [m,n], donde m y n son


expresiones simblicas.

Para evitar posibles problemas, es recomendable especificar la


variable independiente en la derivacin y en la integracin simblica.
A continuacin presentamos varios ejemplos del uso de la funcin int
para la integracin simblica. Suponga que se han definido las
siguientes expresiones:

Pedro Ochoa Moreno


623
Curso Introductorio de MatLab

s1='6*x^3-4*x^2+b*x-5';
s2='sin(a)';
s3='sqrt(x)';

Si calculamos la integral simblica de las expresiones s1, s2 y s3 ;

int(s1)

Pedro Ochoa Moreno


624
Curso Introductorio de MatLab

ans =

3/2*x^4-4/3*x^3+1/2*b*x^2-5*x

int(s2)

ans =

Pedro Ochoa Moreno


625
Curso Introductorio de MatLab

-cos(a)

int(s3)

ans =

2/3*x^(3/2)

Pedro Ochoa Moreno


626
Curso Introductorio de MatLab

En las siguientes lneas de instruccin integraremos la expresin


s3, bajo diferentes condiciones:
int(s3,'a','b')

ans =

2/3*b^(3/2)-2/3*a^(3/2)

Pedro Ochoa Moreno


627
Curso Introductorio de MatLab

int(s3,0.5,0.6)

ans =

2/25*15^(1/2)-1/6*2^(1/2)

numeric(int(s3,0.5,0.6))

Pedro Ochoa Moreno


628
Curso Introductorio de MatLab

ans =

0.0741

9.2 Resolucin de ecuaciones

Pedro Ochoa Moreno


629
Curso Introductorio de MatLab

Las funciones matemticas simblicas pueden servir para


resolver una sola ecuacin, un sistema de ecuaciones y ecuaciones
diferenciales. La primera explicacin se refiere a la resolucin de una
sola ecuacin o de un sistema de ecuaciones; la segunda aborda la
resolucin de una ecuacin diferencial ordinaria.

9.2.1 Solucin de ecuaciones lineales

Pedro Ochoa Moreno


630
Curso Introductorio de MatLab

A continuacin describimos brevemente las funciones para


resolver una sola ecuacin o un sistema de ecuaciones:

Solve(f) Resuelve una ecuacin simblica f despejando


su variable simblica. Si f es una expresin
simblica, esta funcin resuelve la ecuacin feo
despejando su variable simblica.

Pedro Ochoa Moreno


631
Curso Introductorio de MatLab

Solve(f1,,fn) Resuelve el sistema de ecuaciones


representado por f1,,fn.

A fin de ilustrar la aplicacin de la funcin solve, supongamos


que se han definido las siguientes ecuaciones:

Pedro Ochoa Moreno


632
Curso Introductorio de MatLab

eq1='x-3=4';
eq2='x^2-x-6=0';
eq3='x^2+2*x+4=0';
eq4='3*x+2*y-z=10';
eq5='-x+3*y+2*z=5';
eq6='x-y-z=-1';

Pedro Ochoa Moreno


633
Curso Introductorio de MatLab

A continuacin se muestran la aplicacin d e las dos funciones


en las ecuaciones anteriores:

solve(eq1)

ans =

Pedro Ochoa Moreno


634
Curso Introductorio de MatLab

solve(eq2)

ans =

[ [ -2], [ 3] ]

Pedro Ochoa Moreno


635
Curso Introductorio de MatLab

solve(eq3)

ans =

[ [ -1+i*3^(1/2)], [ -1-i*3^(1/2)] ]

[x,y,z]=solve(eq4,eq5,eq6)

Pedro Ochoa Moreno


636
Curso Introductorio de MatLab

ans =

x = -2, y = 5, z = -6

Pedro Ochoa Moreno


637
Curso Introductorio de MatLab

9.2.2 Solucin de ecuaciones diferenciales

Primero trabajaremos en la solucin numrica, para lo cual


MatLab, tiene dos mtodos para resolver las ecuaciones diferenciales
ordinarias:

o ode23 mtodo de Runge-Kutta para 2nd y 3er orden;


o ode45 mtodo de Runge-Kutta para 4to y 5to orden.

Pedro Ochoa Moreno


638
Curso Introductorio de MatLab

La sintaxis es la misma para ambas funciones y requieren que


las funciones que sern integradas sean expresadas en forma normal
en un archivo de funcin, por ejemplo, un sistema de primer orden

dx
f (t , x) (9.1)
dt

Pedro Ochoa Moreno


639
Curso Introductorio de MatLab

Donde x es un vector cuya longitud es igual al orden de la


ecuacin y t es la variable independiente (tiempo; para ecuaciones que
modelan el comportamiento de un sistema dinmico).
La forma mas simple para llamar la secuencia es

[x,t]=ode23(xDot,t0,tf,x0);

Pedro Ochoa Moreno


640
Curso Introductorio de MatLab

Donde xDot.m es el archivo que calculara la funcin f de la (9.1), con


dos argumentos de entrada t y x, t0 y tf son los tiempos de integracin
inicial y final y x0 es el vector de las condiciones iniciales. Despus del
clculo x almacena la solucin de la ecuacin y t los valores
correspondientes a la variable independiente (tiempo); esto es
realizado porque el algoritmo de integracin utiliza un tamao de paso
variable; por lo que los puntos de integracin no son conocidos a priori

Pedro Ochoa Moreno


641
Curso Introductorio de MatLab

y debern ser regresados por el algoritmo como los argumentos de


salida.
Para ilustrar la funcin ode23, a continuacin se presentan los
pasos para calcular las soluciones numricas de las ecuaciones
diferenciales de primer orden:
1. y ' f 1 ( x, y ) 3x
2

2. y ' f 2 ( x, y ) 2 x cos ( y )
2

3. y ' f 3 ( x, y ) 3 y e
2x

Pedro Ochoa Moreno


642
Curso Introductorio de MatLab

Obsrvese que y ' se da en funcin de x en la primera ecuacin;


y en la segunda y tercera se da en funcin de x e y.
Puesto que de antemano conocemos las soluciones analticas de
estas EDO, tambin calcularemos y graficaremos la solucin analtica
como una serie de puntos; la solucin numrica se graficar con una
curva. Las siguientes instrucciones nos permitirn definir la funciones

Pedro Ochoa Moreno


643
Curso Introductorio de MatLab

requeridas para evaluar las ecuaciones diferenciales, suponiendo que


las entradas para x e y son escalares.

function dy=g1(x,y)
% G1 Esta funcin evala una
% EDO de primer grado.
%
dy=3*x.^2;

function dy=g2(x,y)
Pedro Ochoa Moreno
644
Curso Introductorio de MatLab

% G2 Esta funcin evala una


% EDO de primer grado.
%
dy=2*x.*cos(y).^2;

function dy=g3(x,y)
% G3 Esta funcin evala una
% EDO de primer grado.
%
dy=3*y+exp(2*x);
Pedro Ochoa Moreno
645
Curso Introductorio de MatLab

Como un siguiente punto presentaremos las lneas de


instruccin para calcular las solucione numricas de las ecuaciones
diferenciales usando las condiciones iniciales dadas. La solucin
numrica (x,num_y) se grafica junto con los puntos de la solucin
analtica (x,y) con la finalidad de demostrar la exactitud de las
soluciones numricas.

Pedro Ochoa Moreno


646
Curso Introductorio de MatLab

Ecuacin 1. La s siguientes instrucciones resuelven g1(x,y) dentro del


intervalo [2,4], suponiendo que la condicin inicial y=f(2) es igual a 0.5.
% Determinar la solucin de EDO 1.
%
[x,num_y]=ode23('g1',2,4,0.5);
y=x.^3-7.5;
subplot(2,1,1), plot(x,num_y,x,y,'*')
title('Solucin de la ecuacin 1')
xlabel('x'),ylabel('y=f(x)'),grid
Pedro Ochoa Moreno
647
Curso Introductorio de MatLab

Ecuacin 2. La s siguientes instrucciones resuelven g 2(x,y) dentro del


intervalo [0,2], suponiendo que la condicin inicial y=f(0) es igual a
/4.

% Determinar la solucin de EDO 2.


%
[x,num_y]=ode23('g2',[0 2],pi/4);
y=atan(x.*x+1);
subplot(3,1,2), plot(x,num_y,x,y,'o')
Pedro Ochoa Moreno
648
Curso Introductorio de MatLab

title('Solucin de la ecuacin 2')


xlabel('x'),ylabel('y=f(x)'),grid

Ecuacin 3. La s siguientes instrucciones resuelven g3(x,y) dentro del


intervalo [0,3], suponiendo que la condicin inicial y=f(0) es igual a 3.

% Determinar la solucin de EDO 3.


%
Pedro Ochoa Moreno
649
Curso Introductorio de MatLab

[x,num_y]=ode23('g3',[0 3],3);
y=4*exp(3*x)-exp(2*x);
subplot(3,1,3), plot(x,num_y,x,y,'+')
title('Solucin de la ecuacin 3')
xlabel('x'),ylabel('y=f(x)'),grid

En la figura 9.2; en el inciso a) se muestran las comparaciones


entre la solucin numrica y la analtica de la ecuacin 1 en el
intervalos [0,2]; en el b) en esta se muestran las comparaciones para
Pedro Ochoa Moreno
650
Curso Introductorio de MatLab

la ecuacin 2 en el intervalo [0,2]; y finalmente en el c) tenemos las


comparaciones para la ecuacin 3 en el intervalo [0,3].
El nmero de puntos calculados para la funcin y=f(x) por las
funciones ode23 y ode45 est determinado por las funciones MatLab y
no es un parmetro de entrada.
Si queremos calcular ms puntos de la funcin f(x), podemos usar
un mtodo de interpolacin con spline cbica que se presento en el

Pedro Ochoa Moreno


651
Curso Introductorio de MatLab

captulo 6, la cual seria una buena opcin para obtener una curva ms
continua de la funcin f(x).

Pedro Ochoa Moreno


652
Curso Introductorio de MatLab

a)
Solucin de la ecuacin 1
60

40

y=f(x)
20

0
b) 2 2.2 2.4 2.6 2.8 3 3.2 3.4 3.6 3.8 4
x
Solucin de la ecuacin 2
1.4

1.2
y=f(x)

0.8

Pedro Ochoa
0.6
0 Moreno
0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
x
653
4
c) x 10 Solucin de la ecuacin 3
4

3
y=f(x)

0
0 0.5 1 1.5 2 2.5 3
x
Curso Introductorio de MatLab

Figura 9.2 Respuestas a las ecuaciones diferenciales 1,2 y 3.

9.2.3 Ecuaciones diferenciales de orden superior

Una ecuacin diferencial de orden superior se puede escribir


como un sistema de ecuaciones diferenciales de primer orden

Pedro Ochoa Moreno


654
Curso Introductorio de MatLab

acopladas usando un cambio de variables. Por ejemplo, considere la


siguiente ecuacin diferencial de orden n:

y (n) g ( x, y, y ' , y ' ' ,..., y ( n 1) )

Primero definimos n funciones nuevas desconocidas con estas


ecuaciones:

Pedro Ochoa Moreno


655
Curso Introductorio de MatLab

u 1 ( x ) y ( n 1)
u 2 ( x) y ( n 2 )

u n 2 ( x) y ' '
u n 1 ( x ) y '
u n ( x) y

Pedro Ochoa Moreno


656
Curso Introductorio de MatLab

Entonces, el siguiente sistema de n ecuaciones de primer orden


equivale a la ecuacin diferencial de orden n anterior:

u1' y ( n ) g ( x, u n , u n 1 ,..., u1 )
u u1
'
2


u n' 2 u n 3
u n' 1 u n 2

Pedro Ochoa Moreno


657
Curso Introductorio de MatLab

Para demostrar este proceso, considere la siguiente ecuacin


diferencial lineal de segundo orden:

y ' ' g ( x, y ' , y ' ' ) y ' (1 y 2 ) y

El primer paso es definir las dos nuevas funciones:

Pedro Ochoa Moreno


658
Curso Introductorio de MatLab

u1 ( x) y '
u 2 ( x) y

Luego obtenemos el sistema de ecuaciones diferenciales de


primer orden acopladas:

u1' y ' ' g ( x, u 2 , u1 ) u1 (1 u 22 ) u 2


u 2' u1

Pedro Ochoa Moreno


659
Curso Introductorio de MatLab

Podemos resolver un sistema de ecuaciones diferenciales de


primer orden usando las funciones ode de MatLab. Sin embargo, la
funcin que se use para evaluar la ecuacin diferencial deber calcular
los valores de las ecuaciones diferenciales de primer orden acopladas
en un vector. LA condicin inicial tambin deber ser un vector que
contenga una condicin inicial para y ,..., y ' , y. Las funciones
( n 1)
,y ( n 2)

ode de MatLab devuelven soluciones para cada una de las

Pedro Ochoa Moreno


660
Curso Introductorio de MatLab

ecuaciones diferenciales de primer orden, que a su vez representan


y ( n 1) , y ( n 2 ) ,..., y ' , y.
Par resolver el conjunto de dos ecuaciones acopladas que
planteamos en el ejemplo anterior, primero definimos una funcin que
calcule valores de las ecuaciones diferenciales de primer orden:

function u_prime=eqns2(x,u)
% EQNS2 Esta funcin calcula valores
% para dos ecuaciones acopladas.
Pedro Ochoa Moreno
661
Curso Introductorio de MatLab

%
u_prime(1)=u(1)*(1-u(2)^2)-u(2);
u_prime(2)=u(1);

Por lo tanto, para resolver el sistema de ecuaciones diferenciales de


primer orden en el intervalo [0,20] usando las condiciones iniciales
y ' (0) 0.0 y y 0 0.25, utilizaremos las siguientes lneas de
instrucciones:

Pedro Ochoa Moreno


662
Curso Introductorio de MatLab

% Estas lneas de instrucciones,


% nos permiten resolver una
% ecuacin de 2do. orden.
%
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);
initial=[0 0.25];
[x,num_y]=ode23('eqns2',[0 20],initial,options);
%
subplot(2,1,1), plot(t,num_y(:,1)),title('Primera derivada
de y'),grid
Pedro Ochoa Moreno
663
Curso Introductorio de MatLab

subplot(2,1,2), plot(t,num_y(:,2)),title('Segunda derivada


de y'),grid

Por lo regular se necesita de una condicin inicial o condicin


frontera para especificar una solucin nica. Anteriormente se
presentaron las funciones de MatLab para calcular la solucin
numrica de una ecuacin diferencial. Sin embargo, si existe una
solucin analtica de la ecuacin diferencial, generalmente es

Pedro Ochoa Moreno


664
Curso Introductorio de MatLab

preferible usarla. La funcin simblica para resolver ecuaciones


diferenciales es dsolve:

dsolve(ecuacion,condicion Resuelve simblicamente la ecuacin


) diferencial ordinaria especificada por
ecuacion. El argumento opcional
condicion especifica una condicin de
frontera o inicial.

Pedro Ochoa Moreno


665
Curso Introductorio de MatLab

La ecuacin simblica usa la letra D para denotar derivacin


respecto a la variable independiente. Una D seguida por un digito
denota derivacin repetida. As, Dy representa dy/dx y D2y representa
dy/dx.

Pedro Ochoa Moreno


666
Curso Introductorio de MatLab

Para poder entender lo anterior que mejor que unos ejemplos


que nos ilustren el uso de la funcin dsolve, para ello usaremos las
siguientes tres ecuaciones diferenciales ordinarias:

1. EDO: y' 3x 2
Condicin inicial: y ' ( 2) 0.5

2. EDO: y ' 2 x cos 2 ( y )

Pedro Ochoa Moreno


667
Curso Introductorio de MatLab

Condicin inicial: y ( 0) / 4

3. EDO: y' 3 y e 2 x
Condicin inicial: y ( 0) 3

Las siguientes instrucciones de MatLab que determinaran las


soluciones simblicas para estas ecuaciones diferenciales se
muestran a continuacin:

Pedro Ochoa Moreno


668
Curso Introductorio de MatLab

soln_1=dsolve('Dy=3*x^2','Dy(0)=0.5')

soln_1 =

x^3-7.5000000

soln_2=dsolve('Dy=2*x*cos(y)^2','y(0)=pi/4')

Pedro Ochoa Moreno


669
Curso Introductorio de MatLab

soln_2 =

atan(x^2+1)

soln_3=dsolve('Dy=3*y+exp(2*x)','y(0)=3')

soln_3 =

Pedro Ochoa Moreno


670
Curso Introductorio de MatLab

-exp(2*x)+4*exp(3*x)
Estas soluciones coinciden con las soluciones analticas presentadas
con anterioridad. Para graficar la primera solucin, podramos usar la
funcin ezplot. En el intervalo de [2,4]:

ezplot(soln_1, [2,4])

Pedro Ochoa Moreno


671
Curso Introductorio de MatLab

A continuacin se presenta el problema de calcular la velocidad y


aceleracin de una avin despus de aplicarle un nuevo empuje,
primero, presentaremos la funcin para calcular los valores dados de
la velocidad, estas lneas se muestran a continuacin:

function dv=g(t,v)
% G Esta funcin calcula valores
% dados de velocidad.
%

Pedro Ochoa Moreno


672
Curso Introductorio de MatLab

dv=3-0.000062*v.^2;

El programa para calcular la velocidad y la aceleracin se dan en las


siguientes lneas:

% Estas instrucciones nos permiten calcular la


% velocidad y la aceleracin de un avin despus
% de aplicarse un nuevo empuje.

Pedro Ochoa Moreno


673
Curso Introductorio de MatLab

%
vel_inicial=180;
segundos=240;
%
[t,num_v]=ode23('g',[0 segundos],vel_inicial);
acel=3-0.000062*num_v.^2;
%
subplot(2,1,1),plot(t,num_v),
title('Velocidad');
ylabel('m/s'),grid
Pedro Ochoa Moreno
674
Curso Introductorio de MatLab

subplot(2,1,2),plot(t,acc),title('Aceleracin');
ylabel('m/s^2'),xlabel('Tiempo'),grid

El resultado grfico se muestra en la figura 9.3, donde podemos


observar que la aceleracin se reduce a cero cuando la velocidad se
mantiene constante.

Pedro Ochoa Moreno


675
Curso Introductorio de MatLab

Pedro Ochoa Moreno


676
Curso Introductorio de MatLab

Velocidad
220

210
m/s
200

190

180
0
Pedro Ochoa Moreno 50 100 150 200 250
677
Aceleracin
1

0.8

0.6
m/s 2

0.4

0.2

0
0 50 100 150 200 250
Tiempo
Curso Introductorio de MatLab

Figura 9.3 Respuestas para las variables velocidad y aceleracin.

9.3 Ejercicios

Pedro Ochoa Moreno


678
Curso Introductorio de MatLab

Ejercicio 9.1 Determine la primera y segunda derivada de las


siguientes funciones empleando las funciones simblicas de MatLab.

1. g 1 ( x) x 3 5 x 2 2 x 8
2. g 2 ( x) ( x 2 4 x 4) * ( x 1)
3. g 3 ( x) (3 x 1) / x
4. g 4 ( x) ( x 5 4 x 4 9 x 3 32) 2

Pedro Ochoa Moreno


679
Curso Introductorio de MatLab

Ejercicio 9.2 Use las funciones simblicas de MatLab para determinar


los valores de las siguientes integrales. Compare sus respuestas con
las calculadas mediante integracin numrica.
0.6
1. 0.5 x dx
2. 0 1 x dx
0.5
3. 1 x dx

Pedro Ochoa Moreno


680
Curso Introductorio de MatLab

0.5
4. 0.5 xdx

Ejercicio 9.3 Resuelva los siguientes sistemas de ecuaciones usando


matemticas simblicas. Comparare sus respuestas con las
calculadas empleando los mtodos de matrices.

Pedro Ochoa Moreno


681
Curso Introductorio de MatLab

3 x1 2 x 2 x 3 1
1. x1 3 x 2 2 x 3 1
x1 x 2 x 3 1

10 x1 7 x 2 0 x 3 7
2. 3 x1 2 x 2 6 x 3 4
5 x1 x 2 5 x 3 6

Pedro Ochoa Moreno


682
Curso Introductorio de MatLab

x1 4 x 2 x 3 x 4 2
2 x1 7 x 2 x 3 2 x 4 16
3. x1 4 x 2 x 3 2 x 4 1
3x1 10 x 2 2 x 3 5 x 4 15

Pedro Ochoa Moreno


683
Curso Introductorio de MatLab

Ejercicio 9.4 Un Ingeniero Industrial supervisa la produccin de cuatro


tipos de computadoras. Se requieren cuatro clases de recursos: horas-
hombre, metales, plsticos y componentes electrnicos en la
produccin. En el cuadro 1 se resumen las cantidades necesarias para
cada uno de estos recursos en la produccin de cada tipo de
computadora. Si se dispone diariamente de 504 horas-hombre, 1970
Kg. de metal, 970 Kg. de plstico y 601 componentes electrnicos.
Cuntas computadoras de cada tipo se pueden construir por da?

Pedro Ochoa Moreno


684
Curso Introductorio de MatLab

Horas- Componentes
Computadora hombre Metales Kg. Plsticos Kg. unidades
/computadora /computadora /computadora /computadora
1 3 20 10 10
2 4 25 15 8
3 7 40 20 10
4 20 50 22 15

Pedro Ochoa Moreno


685
Curso Introductorio de MatLab

Cuadro 1. Recursos necesarios para producir cuatro tipos de


computadoras.

Ejercicio 9.5 Un ingeniero requiere 4,800 m de arena, 5,810 m de


grava fina, 5,690 m de grava gruesa para la construccin de un
proyecto. Existen tres bancos donde se pueden obtener estos
materiales. La composicin de cada banco se da en el cuadro 3.

Pedro Ochoa Moreno


686
Curso Introductorio de MatLab

Cuntos metros cbicos se debe tomar de cada banco para cumplir


con las necesidades del ingeniero?

Banco Aren Grava Grava


a fina gruesa
% % %
1 52 30 18
2 20 50 30

Pedro Ochoa Moreno


687
Curso Introductorio de MatLab

3 25 20 55

Ejercicio 9.6 Resuelva las tres ecuaciones diferenciales presentadas


como ejemplos, ahora usando la funcin ode45 y ode23 en conjunto y
grafique los valores de y que nos devuelven las funciones, a fin de
compararlos.

Pedro Ochoa Moreno


688
Curso Introductorio de MatLab

Pedro Ochoa Moreno


689
Curso Introductorio de MatLab

10
Pedro Ochoa Moreno
690
Curso Introductorio de MatLab

Simulink

10.1Fundamentos

Pedro Ochoa Moreno


691
Curso Introductorio de MatLab

Simulink es el acrnimo para las palabras Simulation y Link. Este


trmino nos hace asociar mentalmente la idea de simulacin, por
ejemplo, la idea de artificial nos induce asociar esta palabra con que
pasa o que puede pasar en el mundo real.
Simulink es una interfase muy amigable con el usuario, la cual
tambin permite el uso de esta herramienta sin tener el conocimiento
bsico o total de MatLab (sin embargo, si uno desea usar simulink
como un experto entonces la persona que interactu con esta

Pedro Ochoa Moreno


692
Curso Introductorio de MatLab

herramienta deber estar familiarizado con MatLab: vale la pena


recordar que simulink es solamente una caja de herramientas de
MatLab, no un paquete independiente.
Este ha sido diseado para trabajar con ambientes grficos
como los de Windows o Linux; por lo tanto la manera mas natural de
incluir informacin o modelos en simulink es dibujando estos. Simulink
tiene una amplia gama de bloques funcionales con lo cual todas las
tareas pueden ser conectadas mediante bloques (el conjunto seria lo

Pedro Ochoa Moreno


693
Curso Introductorio de MatLab

que comnmente conocemos en el rea de sistemas como diagramas


de bloques).
Antes de introducirnos en el ambiente de simulink es importante
entender el significado de los resultados alcanzables; podemos hacer
nfasis en que los resultados de cada simulacin son casi siempre
exactos. En particular, es esencial poner especial atencin en las
palabras casi y siempre.

Pedro Ochoa Moreno


694
Curso Introductorio de MatLab

Podemos empezar con esta ltima. El resultado de cada


simulacin es correcto, debido en consecuencia a la adaptacin del
modelo matemtico para el fenmeno fsico bajo consideracin. Un
simulador por si mismo no puede (y nunca ser capaz de) verificar si
el modelo es congruente con el mundo real. Simulink trabaja en base a
nmeros y nos regresa nmeros. No existe forma de preferir entre un
nmero y otro; en principio todos los nmeros estn disponibles.

Pedro Ochoa Moreno


695
Curso Introductorio de MatLab

El mundo real no es tan generoso: por lo cual es una prioridad


para los usuarios de simulink verificar que los nmeros tengan un
significado fsico, por ejemplo, si el modelo usado para la simulacin
es congruente con el mundo real.
Ahora si analizamos la palabra casi. Cabe recordar que una
computadora es una mquina para realizar clculos, la cual no tiene la
habilidad de evaluar exactamente; debido a que esta realiza algunas

Pedro Ochoa Moreno


696
Curso Introductorio de MatLab

aproximaciones y redondeos, que al realizar operaciones complejas y


repetitivas pueden modificar los resultados considerablemente.
Lo anterior se hace mas aparente, si se trabaja con la dinmica de
sistemas no lineales. En este caso no existe un mtodo para obtener
una solucin exacta; solo existen algunos mtodos numricos
aproximados los cuales nos permiten resolver en particular algunas
clases de problemas. Simulink cuenta con seis algoritmos de
integracin diferentes para la solucin de ecuaciones diferenciales con

Pedro Ochoa Moreno


697
Curso Introductorio de MatLab

lo cual este tiene la habilidad de manejar una amplia clase de


procesos. En la figura 10.1 a) se muestra la respuesta mediante el uso
del algoritmo que simulink tiene preestablecido (en este caso ode45
(Dormant-Prince)), y si cambiamos el algoritmo (ode23t(mod.
Stiff/Trapezoidal) podemos observar en la figura 10.1 b) una mejor
respuesta.

Pedro Ochoa Moreno


698
Curso Introductorio de MatLab

Resultado grfico con ode45 Resultado grfico con ode23t


10 10

8 8

6 6

4 4

2 2

0 0

-2 -2

-4 -4

-6 -6

-8 -8

Pedro
-10
0 Ochoa
1 2 3 Moreno
4 5 6 7 8 9 10
-10
0 1 2 3 4 5 6 7 8 9 10

699
Curso Introductorio de MatLab

a) b)

Figura 10.1 Comparacin de algoritmos en la respuesta de un sistema.

Por lo tanto, es importante la seleccin de un buen mtodo de


integracin con la finalidad de evitar una sobrecarga de clculos (o
que se cicle la computadora) y por ende obtener resultados
incorrectos.

Pedro Ochoa Moreno


700
Curso Introductorio de MatLab

Para poder acceder a simulink, basta con teclear en el espacio de


trabajo la palabra simulink y posterior a esto aparece la ventana que
se muestra en la figura 10.2.

Pedro Ochoa Moreno


701
Curso Introductorio de MatLab

Pedro Ochoa Moreno


702
Curso Introductorio de MatLab

Figura 10.2 Pantalla de entrada a simulink.

Para poder acceder a la librera de simulink en este caso solo


basta con un doble-click en la librera indicada y obtendremos de
inmediato la pantalla de la figura 10.3, y as sucesivamente podemos
entrar hasta el ltimo nivel anidado.

Pedro Ochoa Moreno


703
Curso Introductorio de MatLab

Pedro Ochoa Moreno


704
Curso Introductorio de MatLab

Figura 10.3 Pantalla que presenta la biblioteca de simulink.

10.2 Construccin de esquemas en simulink

Pedro Ochoa Moreno


705
Curso Introductorio de MatLab

Tal vez la forma ms fcil de estudiar una herramienta de


simulacin es la de trabajar directamente en esta. Para empezar con
lo anterior veamos la aplicacin de un simple ejemplo.
Consideremos el sistema masa-resorte-amortiguador que se
muestra en la figura 10.4, cuyo modelo matemtico de entrada-salida
es

Pedro Ochoa Moreno


706
Curso Introductorio de MatLab

f(t)

M (masa)

y
k (resorte)
b (amortiguador)

Pedro Ochoa Moreno


707
Curso Introductorio de MatLab

Figura 10.4 Sistema masa-resorte-amortiguador.

my bx
kx f

donde m es la masa, k es la constante de elasticidad del resorte, b el


coeficiente de viscosidad del amortiguador y finalmente f es la fuerza
aplicada. Digamos que por simplicidad, que todas las constantes son
unitarias, entonces un posible diagrama de bloques se presenta en la

Pedro Ochoa Moreno


708
Curso Introductorio de MatLab

figura 10.5. Ser interesante comparar este diagrama con el


correspondiente de simulink que se presenta en la figura 10.6:

Pedro Ochoa Moreno


709
Curso Introductorio de MatLab

f +
_
y y
y

Figura 10.5 Diagrama de bloques del sistema masa-resorte-


amortiguador.

Pedro Ochoa Moreno


710
Curso Introductorio de MatLab

Pedro Ochoa Moreno


711
Curso Introductorio de MatLab

Figura 10.6 Esquema de simulink para el sistema masa-resorte-


amortiguador.
El participante de este curso podr ver que las diferencias no se
aprecian, lo cual nos da una idea de que la seleccin de un esquema
de simulink es la forma estndar de representacin de un diagrama de
bloques. Para implementar el diagrama de la figura 10.5, el primer
paso es teclear el comando simulink en el espacio de trabajo de
MatLab, cuando aparezcan la pantalla de las libreras, se selecciona el

Pedro Ochoa Moreno


712
Curso Introductorio de MatLab

men abrir carpeta y a la derecha de esta pantalla aparecer otra para


editar el esquema, como se observa en la figura 10.7. Para dibujar
solo basta con arrastrar los iconos de la pantalla de la izquierda a la
derecha y listo, la conexin es llevada a cabo con el apuntador del
mouse, cuando se termina el esquema podemos simularlo en la
misma pantalla en que se encuentra, podemos manejar los
parmetros y finalmente salvarlo archivonombre.mdl.

Pedro Ochoa Moreno


713
Curso Introductorio de MatLab

Pedro Ochoa Moreno


714
Curso Introductorio de MatLab

Pedro Ochoa Moreno


715
Curso Introductorio de MatLab

Figura 10.7 Pasos para la realizacin de un esquema en simulink.

10.3 Anlisis del esquema

Pedro Ochoa Moreno


716
Curso Introductorio de MatLab

Despus de dibujar el esquema, el siguiente paso es el de analizar el


sistema por medio de simulink. Una forma directa de conocer el
comportamiento del sistema es forzarlo ante una seal de entrada y
extraer la informacin de su tiempo de respuesta. Para lo anterior
debemos insertar una seal de entrada en el esquema de la figura
10.6. Para llevar a cabo esto es necesario que de la librera de
simulink nos posicionemos en fuentes (sources) y seleccionemos el
bloque de onda senoidal, luego mediante un doble-click en el icono

Pedro Ochoa Moreno


717
Curso Introductorio de MatLab

abriremos el cuadro de dialogo para modificar sus caractersticas. En


particular pondremos la frecuencia igual 10 rad/s. Despus de que la
entrada a sido conectada, el siguiente paso es el de buscar la librera
de drenes (sinks) y seleccionamos el de osciloscopio (scope), el
funcionamiento de este es idntico al de ese tipo de dispositivo. En la
figura 10.8 se presenta el esquema con la fuente y el dren.

Pedro Ochoa Moreno


718
Curso Introductorio de MatLab

Pedro Ochoa Moreno


719
Curso Introductorio de MatLab

Figura 10.8 Esquema con una fuente y un dren.

Si queremos obtener la grafica sin su entorno, es necesario


manejar a la par del osciloscopio el dren denominado to workspace
(que enva las variable al espacio de trabajo de MatLab, la etiqueta de
este es preestablecido por simout, como se observa en la figura 10.9.

Pedro Ochoa Moreno


720
Curso Introductorio de MatLab

Si despus de ejecutar la simulacin, nos trasladamos al espacio de


trabajo y tecleamos las siguientes lneas de instruccin:

Pedro Ochoa Moreno


721
Curso Introductorio de MatLab

Figura 10.9 Esquema de simulink con un bloque que enva informacin


al espacio de trabajo de MatLab.
Pedro Ochoa Moreno
722
Curso Introductorio de MatLab

who

Your variables are:

ScopeData simout tout

plot(simout.time,simout.signals.values)

Pedro Ochoa Moreno


723
Curso Introductorio de MatLab

Despus, ejecutar esta lneas en el espacio de trabajo, obtenemos la


ventana de figura de donde copiamos esta, porque del osciloscopio es
imposible. Por lo cual podemos decir que tenemos un osciloscopio con
memoria al aadirle el bloque to workspace. El resultado de la grfica
se muestra en la figura 10.10.

Pedro Ochoa Moreno


724
Curso Introductorio de MatLab

0.15

0.1

0.05

-0.05

-0.1

Pedro Ochoa Moreno-0.15


725
-0.2
0 1 2 3 4 5 6 7 8 9 10
Curso Introductorio de MatLab

Figura 10.10 Grafica obtenida de la memoria del espacio de trabajo.


10.4 Ejercicios

Ejercicio 10.1 Analice la respuesta del sistema descrito en el


esquema de la figura 10.4 cuando en este acta una fuerza del tipo:

1. Escaln unitario, positivo y negativo.

Pedro Ochoa Moreno


726
Curso Introductorio de MatLab

2. Onda cuadrada con magnitud unitaria y una


frecuencia de 5 rad / s.

Ejercicio 10.2 Analice la respuesta del siguiente sistema al aplicarle


una entrada escaln unitario.

x x u

Pedro Ochoa Moreno


727
Curso Introductorio de MatLab

Ejercicio 10.3 Analice la respuesta del siguiente sistema al aplicarle


una entrada escaln unitario.

x 1 x1 x 2
x 2 x1 x 2 u

Ejercicio 10.4 Realice los esquemas apropiados para resolver los


problemas 9.4 y 9.5.

Pedro Ochoa Moreno


728
Curso Introductorio de MatLab

Ejercicio 10.5 Implemente la solucin para la funcin f(t)=10sen (3t),


primero desarrollando la ecuacin diferencial y sus condiciones
iniciales y posteriormente elaborando el esquema y comparar las
respuestas tericas con las prcticas.

Pedro Ochoa Moreno


729
Curso Introductorio de MatLab

Ejercicio 10.6 El modelo clsico presa depredador, el cual describe


la evolucin de dos especies interactuantes, es modelado por las
ecuaciones de Lotka Volterra:

N 1 aN 1 bN 1 N 2
N 2 cN 2 dN 1 N 2

Pedro Ochoa Moreno


730
Curso Introductorio de MatLab

donde N 1 representa a la presa y N 2 al depredador, a es la tasa de


crecimiento de la presa en ausencia del depredador, c es la tasa de
reduccin del depredador en ausencia de la presa, mientras que b y d
representan a los coeficientes de interaccin del fenmeno. Analice la
conducta del sistema cuando a=3.5, b=0.1, c=4 y d=0.06, N 1 (0)=100 y
N 2 (0)=20. Grafique la respuesta tanto con respecto al tiempo como en
el plano de fase (graficar el nmero de presas como una funcin del

Pedro Ochoa Moreno


731
Curso Introductorio de MatLab

nmero de depredadores). Modifique las condiciones iniciales y


analice los diferentes comportamientos

Pedro Ochoa Moreno


732
Curso Introductorio de MatLab

Pedro Ochoa Moreno


733
Curso Introductorio de MatLab

Pedro Ochoa Moreno


734
Curso Introductorio de MatLab

Pedro Ochoa Moreno


735
Curso Introductorio de MatLab

Bibliografa
1. Getting Started with MATLAB, The MathWorks, Inc., 1999.
Pedro Ochoa Moreno
736
Curso Introductorio de MatLab

2. Using MATLAB, The MathWorks, Inc., 1999.


3. Using MATLAB Graphics, The MathWorks, Inc., 1999.
4. MATLAB Functions Reference Volume 1: Language and Volume
2: Graphics, The MathWorks, Inc., 1999.
5. Using Simulink, The MathWorks, Inc., 1999.
6. Solucin de Problemas de Ingeniera con MatLab, Delores M.
Etter, Prentice-Hall, 1998.

Pedro Ochoa Moreno


737
Curso Introductorio de MatLab

7. Using MatLab, Simulink and Control System Toolbox , Alberto


Cavallo, Roberto Setola y Francesco Vasca, Prentice-Hall, 1996.
8. Sistemas de Control en Ingeniera, Paul H. Lewis y Chang Yang,
Prentice-Hall, 1999.

Pedro Ochoa Moreno


738

Das könnte Ihnen auch gefallen