Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MATLAB
PARA PRINCIPIANTES
ISBN: 978-607-02-3578-8
Diseo de cubierta:
D.G. Anahit Indra Ortiz Molina
Edicin a cargo de:
Jit Press, S.A. de C.V.
General Santana 253
Col. M. Carrera
07070 Mxico, D.F.,
Tel. (55) 5794 5198
DERECHOS RESERVADOS
Queda prohibida la reproduccin o transmisin total o parcial del texto o las
ilustraciones de la presente obra bajo cualesquiera formas, electrnicas o
mecnicas, incluyendo fotocopiado, almacenamiento en algn sistema de
recuperacin de informacin, dispositivo de memoria digital o grabado sin el
consentimiento previo y por escrito del editor.
in
Mxico
Prlogo
En las primeras palabras del material se evidencia la intencin: ayudar a que
herramientas como MATLAB sean empleadas por los estudiantes de
licenciatura. Que este libro bosqueje un camino por el cual se pueda migrar
de las calculadoras al cmputo cientfico; no se pretende que este material
acompae a los lectores hasta el final del camino, sino slo que encienda el
fuego de la curiosidad y que pueda guiar los primeros pasos y que permita
que esta exploracin contine mucho ms de lo aqu planteado.
Una buena conclusin preliminar es que las opcines de ayuda incluidas en
MATLAB son una fuente muy valiosa para reproducir lo que ya sabemos
hacer con otras herramientas y aprender otras alternativas de resolver
problemas. Este material slo trata de poner orden en los primeros pasos,
esperamos que muchos ms sean dados a lo largo de los estudios de
licenciatura y deseablemente se conviertan en una herramienta indispensable
para el trabajo profesional. Si bien esperamos que este material pueda ser
cubierto de manera autocontenida, la experiencia de uno de nosotros (RQT)
nos obliga a advertir que la utilidad plena se dar como parte de un curso
formal.
Creemos que una de las virtudes de la formacin universitaria es la
estructura que se desarrolla en los individuos al estar expuestos al orden de
las matemticas, que tambin se puede obtener con las reglas de juegos y
con la programacin. La sinergia de la disponibilidad de computadoras, de
buenas herramientas de programacin y solucin de problemas, podran
conducir a una mejor formacin universitaria.
Esperamos que disfruten su experiencia con MATLAB, y que esta sea el
principio de un camino lleno de satisfacciones y placer para su formacin.
Agradecemos el tiempo, los comentarios y las correcciones de los revisores,
en particular a los acadmicos del CFATA, Dr. Miguel de Icaza Herrera y
Dr. Jos Luis Aragn Vera, al acadmico de la UAM-Azcapotzalco, Dr.
Ernesto Rodrigo Vzquez Cern y a la fsica Rosa Elena Lpez Escalera
Romano. De la misma manera, agradecemos las opiniones de los alumnos de
la Licenciatura en Tecnologa de la UNAM, generaciones 2009 a 2011.
Todos sus comentarios disminuyeron los errores y enriquecieron el texto,
pero los que permanecen son slo nuestra responsabilidad.
Tabla de contenido
1
Introduccin..................................................................................................................9
1.1
MATLAB por primera vez .................................................................................9
1.2
Uso elemental de MATLAB ............................................................................ 11
1.3
La ayuda en MATLAB .................................................................................... 13
1.4
Definicin de variables..................................................................................... 14
1.5
Exhibicin de resultados .................................................................................. 15
1.6
Representacin de nmeros en MATLAB...................................................... 15
1.7
Guardar el trabajo ............................................................................................. 19
1.8
Ejercicios........................................................................................................... 20
Arreglos y matrices................................................................................................... 21
2.1
Construccin de arreglos de nmeros ............................................................. 22
2.2
Manipulacin de los nmeros en los arreglos................................................. 28
2.3
Operaciones con matrices ................................................................................ 31
2.4
Operaciones con arreglos ................................................................................. 36
2.5
Ejercicios........................................................................................................... 38
Programas (scripts) y funciones (functions)............................................................ 40
3.1
Programas (Scripts) .......................................................................................... 40
3.2
Funciones (Functions)...................................................................................... 41
3.3
Trabajo y mejora de programas (scripts) ........................................................ 43
3.4
Funciones de funciones .................................................................................... 45
3.5
Ejercicios........................................................................................................... 49
Control de flujo de programa ................................................................................... 50
4.1
Uso fundamental............................................................................................... 50
4.2
Ejemplo: Autmatas unidimensionales........................................................... 52
4.3
Ejemplo: Autmatas bidimensionales ............................................................. 54
4.4
Ejercicios........................................................................................................... 57
Mtodos numricos................................................................................................... 63
5.1
Mnimos cuadrados, modelo lineal.................................................................. 63
5.2
Promedio y desviacin estndar ...................................................................... 68
5.3
Algoritmo simplex............................................................................................ 71
5.4
Mtodo indirecto de solucin de ecuaciones simultneas ............................. 75
5.5
Races de polinomios (Mtodo de Laguerre).................................................. 78
5.6
Runge Kutta ...................................................................................................... 81
5.7
Descomposicin de LU .................................................................................... 86
5.8
Interpolacin suave (splines) ........................................................................... 90
Grficos ..................................................................................................................... 95
6.1
Dos dimensiones............................................................................................... 95
6.2
Tres dimensiones .............................................................................................. 98
6.3
Guardar imgenes ............................................................................................. 99
6.4
Ejercicios........................................................................................................... 99
Prcticas de buena programacin........................................................................... 102
7.1
Elegir vectores en lugar de bucles. ................................................................ 102
7.2
Evitar que los arreglos crezcan mientras se corre el programa. .................. 105
7.3
Escritura de MEX-File cuando los bucles son inevitables........................... 105
7.4
Evitar variables que cambian de tamao en grficas activas ....................... 105
7.5
Acceso a archivos ........................................................................................... 106
7.6
Otras consideraciones..................................................................................... 108
7.7
Ejercicios......................................................................................................... 108
8
GUI .......................................................................................................................... 110
8.1
Ejemplo de script para FFT ........................................................................... 110
8.2
Ejemplo de function para FFT ....................................................................... 111
8.3
Ejemplo de GUI para FFT ............................................................................. 112
8.4
Construccin del archivo ejecutable.............................................................. 115
8.5
Ejercicios......................................................................................................... 116
9
Conexin con C....................................................................................................... 119
9.1
MATLAB Coder ............................................................................................ 119
9.2
MATLAB Compiler ....................................................................................... 124
10
Simulink .............................................................................................................. 126
10.1 Simulink y solucin de ecuaciones algebraicas............................................ 126
10.2 Simulink y solucin de ecuaciones diferenciales ......................................... 128
10.3 Simulink y solucin de sistemas de ecuaciones diferenciales ..................... 129
11
SimMechanics ..................................................................................................... 133
Apndice A. control de accesorios de PC...................................................................... 137
A.1 Instrucciones para el control de un micrfono................................................... 137
A.2 Instrucciones para el control de una cmara ...................................................... 139
1 Introduccin
MATLAB es un software para computacin en ingeniera y ciencias. Nos ofrece un
poderoso lenguaje de programacin, una posibilidad de realizar y manipular grficas con
facilidad, adems de reunir conocimiento acumulado en estas reas de manera
estructurada y til.
MATLAB se centra en el cmputo y no en las matemticas, as que las expresiones y la
manipulacin simblica no son su fuerte, a excepcin de las empleadas con la
herramienta symbolic o con el programa MuPAD. Las soluciones son numricas e
inexactas, asociadas a los artificios del redondeo. Esto puede verse desde dos puntos de
vista, como un problema, al evidenciar el riesgo de errores ocultos en los resultados y
como una ventaja, ya que permite el clculo numrico con un conjunto de nmeros
diferente al de los nmeros reales.
Comparado con otros lenguajes de programacin numricos como C++ o FORTRAN,
MATLAB es mucho ms fcil de usar y est integrado con una biblioteca formada de una
gran cantidad de informacin, mdulos, programas, subrutinas, relacionadas con el
cmputo numrico.
La nica comparacin donde MATLAB queda en desventaja con respecto a C++ o
FORTRAN es en el rubro de velocidad de ejecucin, pero puede ser menos drstica con
buenas prcticas de programacin, como veremos aqu. MATLAB no es la herramienta
de eleccin para cmputo de alto desempeo (aunque probablemente s lo sea en el futuro
cercano) pero es una plataforma inmejorable para proyectos desde elementales hasta
intermedios y en muchos casos para probar lo que en otros lenguajes sera cdigo muy
elaborado o que requiere de demasiado tiempo de elaboracin.
MATLAB permite obtener una respuesta numrica a una expresin algebraica, de manera
similar a una calculadora, tambin permite obtener una aproximacin numrica a algunos
problemas donde la sustitucin no es posible, por ejemplo, el valor de E en la expresin
1.1
10
prompt
Start
11
se desea cancelar el proceso se puede hacer presionando al mismo tiempo las teclas ctrl-c
restableciendo el prompt y aparece la leyenda Ready a la derecha de Start.
En clculo numrico elemental, un camino trivialmente simplista es usar una calculadora
cuando la tarea es muy simple, despus utilizar Excel si se requiere de grficas ms
elaboradas y finalmente C++ cuando se tienen en mente acciones no desarrollas por un
programa particular. El salto de una herramienta a la otra puede ser intimidante e incluso
limitante. Si quisiramos que MATLAB estuviera presente en esta evolucin, igualmente
puede ser una alternativa a cualquiera de las herramientas anteriores. Una de las
limitaciones para iniciar a usar MATLAB como calculadora (inicialmente y despus el
cielo es el lmite) es que no se parece a una. Superando esta diferencia, se puede
fcilmente superar las ventajas de Excel como hoja de clculo y de ah pasar a usar
MATLAB con ms provecho.
1.2
12
ans =
0.7071
>>
Aqu i (tambin puede ser 1i, uno-i, que evita confusiones con la variable i)
representa a la raz cuadrada de menos uno 1 , unidad de los nmeros imaginarios. i
puede ser tambin una variable, as que no est de ms tener precauciones para no
cometer errores. En cuanto a la notacin exp(x) es la representacin de e x , donde e es
el nmero de Euler cuyo valor aproximadamente es 2.718281828.
>> 0/0
Warning: Divide by zero.
ans =
NaN
>>
13
ans =
2.2204e-016
>>
Algunas
reservadas
log(x) palabras
es logaritmo
natural deenxMATLAB
log(x)
es
el
logaritmo
natural
log10(x) es el logaritmo
base de
10xde x
log10(x)
logaritmo
base 10cuya
de x tangente es x
atan(x) eseselelngulo
en radianes
atan(x)
en radianes
sinh(x) es el ngulo
seno hiperblico
decuya
x tangente es x
sinh(x)
es
el
seno
hiperblico
de
x
sqrt(x) raz cuadrada de x
sqrt(x) es la raz cuadrada de x
1.3
La ayuda en MATLAB
El texto subrayado es una liga directa a la ayuda en MATLAB, que abre una ventana
como la mostrada en la figura 1.2.
En la figura 1.2 se ve la ventana de ayuda; en el panel izquierdo est el navegador, en el
que se puede explorar por contenido, por ndice, hacer bsquedas o explorar las
demostraciones. Aqu se muestra el navegador por contenido (elipse continua), el libro de
MATLAB (elipse segmentada), las funciones por categora (elipse punteada) y las
funciones matemticas elementales. En el panel derecho se ve la lista de funciones
exponenciales, haga doble clic en cualquier nombre en azul para ver la ayuda preparada
en cuanto a su definicin y uso.
14
1.4
Definicin de variables
15
que
los
aparezca
el
caracteres
z =
21
>>
1.5
Exhibicin de resultados
Los resultados numricos aparecen con cuatro decimales, pero se pueden exhibir con 15
decimales (format long), en forma fraccional aproximada (format rat) o en
formato hexadecimal (format hex). La palabra format sin argumento regresa a la
forma predeterminada.
>> P= pi
P =
3.1416
>> format long
>> P
P =
3.141592653589793
>> format rat
>> P
P =
355/113
>> format
>>
1.6
16
273.375 D 100010001.011B 1x 28 1x 2 4 1x 2 0 0 x 2 1 1x 2 2 1x 2 3
o
273.375 D 111.6 H 1x16 2 1x161 1x16 0 6 x16 1
Donde los subndices D, B y H se refieren a decimal, binario y hexadecimal,
respectivamente. Binario y hexadecimal son intercambiados fcilmente si agrupamos los
binarios en 4 nmeros, partiendo del punto. En este ejemplo: 0001 0001 0001.0110B, que
son 1 1 1.6H
Decimal
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
Binario
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Hexadecimal
0
1
2
3
4
5
6
7
8
9
a
b
c
d
e
f
MATLAB tiene una representacin de los nmeros en notacin binaria de 64 bits que
cumple la norma IEEE 754 y que es:
(1)s 2( 1022 ) ( f ) , si e = 0
(1) s 2 ( e1023 ) (1 f ) , si e = [1, 2046]
Representacin especial, si e = 2047
donde s representa al signo del nmero y se representa con un bit 0 o 1.
e representa al exponente del nmero y se define con 11 bits que cubre del entero decimal
1 al 2046, en cuyo caso se llaman nmeros normales. En caso de que e sea cero su
17
n 1
Decimal aproximado
Hexadecimal
-inf
-realmax=
(-)(2^1023)(1+
2^-1+2^-2+)
(-)(2^1023)(1)
-1=(-)(2^0)(1)
-realmin=(-)(2^1022)(1)
0
eps(0)=(+)
(2^-1022)(2^-52)
realmin=2^-1022
realmin+
eps(realmin)
1=(+)(2^0)(1)
3=(+)(2^1)(1+.5)
--------------------1.797693134862316e+308
fff 0000000000000
ffe fffffffffffff
1
1
2047
2046
pi
(+)(2^1023)(1)
realmax=
(+)(2^1023)(1+
2^-1+2^-2+)
Inf=realmax+
eps(realmax)
NaN
3.141592653589793
8.988465674311580e+307
1.797693134862316e+308
52
n 1
-8.988465674311580e+307
-1
-2.225073858507201e-308
ffe 0000000000000
bff 0000000000000
801 0000000000000
1
1
1
2046
1023
1
0
0
0
000 0000000000000
000 0000000000001
0
0
0
0
4.940656458412465e-324
2.225073858507201e-308
2.225073858507202e-308
001 0000000000000
001 0000000000001
0
0
1
1
1
3
3ff 0000000000000
400 8000000000000
0
0
1023
1024
1024
2046
2046
0.57079
0
400 921fb54442d18
7fe 0000000000000
7fe fffffffffffff
0
0
0
2 52
2 52
2 1
52
2
n 1
---------------------
7ff 0000000000000
2047
---------------------
fff 8000000000000
2047
.5
Los nmeros reales son necesarios para las operaciones aritmticas; y acceder a ellos
permite disponer de un continuo de nmeros, que se pueden visualizar como cualquier
punto de la recta numrica, no as el conjunto de nmeros que se puede representar en
MATLAB, que es diferente en dos aspectos fundamentales:
1. Existen vacos entre los nmeros; qu tan grande es este vaco depende del nmero en
cuestin.
2. No es posible representar de manera exacta a todos los nmeros reales.
Por ejemplo los nmeros reales entre 72057594037927932 y 72057594037927944 se
representan por el mismo nmero en MATLAB (4370000000000000H) =
18
que
slo
es
correcto
para
el
nmero
19
n 1
f (n ) 1 n
1 0
1.1
n
El problema es que si desarrollamos el parntesis, resulta que f(n) es cero para cualquier
valor de n. MATLAB, sin embargo, realiza las operaciones en el orden de su prioridad,
primero potencia, despus multiplicacin y divisin y finalmente suma y resta, (los
parntesis tienen preferencia sobre el orden de prioridad). En este caso se sumar n+1
antes de dividir entre n, despus se resta el uno, y todo se multiplica por n, y lo que
resulte se resta al uno. Como resultado, entonces, de este orden de operaciones y de la
representacin numrica, f(n) no vale cero para toda n.
En MATLAB el cdigo para ilustrar la funcin anterior es el siguiente, donde eps se
emplea para aumentar y normalizar la diferencia con el cero.
n=1:500;
f=(1-n.*((n+1)./n-1))./eps(n);
plot(n,f,'*')
Figura 1.3 Diferencia artificialmente introducida por MATLAB por el orden de las
operaciones, solo las n que son potencias de 2 dan cero para la funcin f(n).
1.7
Guardar el trabajo
Si se desea guardar las variables se procede por File-Save workspace as y se guarda con
el nombre deseado. Para guardar la historia de comandos se procede a seleccionarlos en
el panel de Command History y con el botn derecho del ratn se selecciona Create MFile y aparece otra ventana con la historia de los comandos y ah se puede guardar su
contenido en un archivo. Ms adelante se ver cmo generar las figuras, las cuales se
pueden guardar en formatos muy diversos. *.fig es el formato nativo de MATLAB, es
modificable y es el ms conveniente ya que guarda los valores que lo generaron. *.eps
es postscript y se pueden anexar a documentos Word y la calidad no cambia al cambiar el
tamao. *.jpg es el ms comn pero la calidad es muy limitada y disminuye
rpidamente al cambiar de tamao. Este comentario se basa en que las imgenes bitmap
(como las jpg) fundamentan su calidad en el tamao del pixel. Las imgenes vectoriales
basan su calidad en frmulas que describen los objetos as que se pueden ampliar o
reducir sin alterar la calidad.
1.8
Ejercicios
1
b) B cos 1
3
c) C log e
7
d) determine qu nmero del conjunto es primo {0,1,2,3,4,5,6,7,8,9,10,97,99}
Respuestas:
a) A=3.8143e+006
b) B=1.9106 [rad]
c) C=0.1718
d) [2, 3, 5, 7, 97]
20