Vous êtes sur la page 1sur 57

MATLAB para novatos8 1

Tabla de contenido
1. Introduccin............................................................................................................ 2
1.1 MATLAB por primera vez ............................................................................. 2
1.2 Uso elemental de MATLAB........................................................................... 4
1.3 La ayuda en MATLAB................................................................................... 6
1.4 Definicin de Variables .................................................................................. 7
1.5 Guardar el trabajo ........................................................................................... 8
1.6 Ejercicios......................................................................................................... 8
2 Arreglos y matrices................................................................................................. 9
2.1 Construir arreglos de nmeros........................................................................ 9
2.2 Acceder a los nmeros en los arreglos.......................................................... 12
2.3 Operaciones con matrices ............................................................................. 14
2.4 Operaciones con arreglos.............................................................................. 17
2.5 Ejercicios....................................................................................................... 20
3 Programas (scripts) y funciones............................................................................ 22
3.1 Scripts ........................................................................................................... 22
3.2 Functions....................................................................................................... 23
3.3 Trabajar con y mejorar scripts ...................................................................... 24
3.4 Funciones de funciones................................................................................. 25
3.5 Ejercicios....................................................................................................... 28
4 Control de flujo de programa................................................................................ 30
4.1 Ejemplos ....................................................................................................... 30
4.2 Ejercicios....................................................................................................... 31
5 Grficos................................................................................................................. 32
5.1 Dos dimensiones ........................................................................................... 32
5.2 Tres dimensiones .......................................................................................... 35
5.3 Guardar imgenes ......................................................................................... 36
5.4 Ejercicios....................................................................................................... 36
6 Prcticas de buena programacin.......................................................................... 37
6.1 Favorecer vectores en lugar de bucles. ......................................................... 37
6.2 Evitar que los arreglos crezcan mientras se corre el programa..................... 38
6.3 Escribir MEX-File cuando los bucles son inevitables .................................. 38
6.4 Otras consideraciones ................................................................................... 38
7 GUIs...................................................................................................................... 40
7.1 Ejemplo de script para FFT .......................................................................... 40
7.2 Ejemplo de function para FFT ...................................................................... 41
7.3 Ejemplo de GUI para FFT ............................................................................ 41
7.4 Pasarlo a ejecutable....................................................................................... 44
8 Conexin con C..................................................................................................... 45
9 Simulink................................................................................................................ 49
9.1 Simulink para resolver ecuaciones algebraicas............................................. 49
9.2 Simulink para resolver ecuaciones diferenciales .......................................... 51
9.3 Simulink para sistemas de ecuaciones .......................................................... 52
10 SimMechanics................................................................................................... 55
MATLAB para novatos8 2
MATLAB para novatos

Rafael Quintero Torres
*


2008

Como resultado de que el alfabetismo en MATLAB en las universidades contina siendo
muy bajo y la necesidad de emplear las buenas herramientas de cmputo matemtico de
manera mas extendida es que emprendemos la construccin de este material.

Supongo que existe un genuino inters o una necesidad en introducirse en esta temtica,
que se tiene un conocimiento bsico de algebra y que se aceptan los retos con singular
alegra.

1. Introduccin
MATLAB es un software para computacin en ingeniera y ciencias. Nos ofrece un
poderoso lenguaje de programacin, posibilidad de realizar y manipular graficas 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. Las soluciones son numricas e inexactas, asociadas a los artificios
del redondeo. Esto puede verse como un problema y como una ventaja al mismo tiempo.

Comparado con otros lenguajes de programacin numricos como C++ o FORTRAN,
MATLAB es mucho ms fcil de usar y esta integrado con una biblioteca formada de una
gran, gran cantidad de informacin, mdulos, programas, subrutinas, relacionadas con el
cmputo numrico.

La nica comparacin donde MATLAB queda en desventaja es en el rubro de velocidad
de ejecucin, pero puede ser menos dramtica con buenas practicas de programacin
como veremos aqu. MATLAB no es la herramienta de eleccin para cmputo de alto
desempeo, pero es una plataforma inmejorable para proyectos elementales hasta
intermedios y en muchos casos para probar lo que en otros lenguajes seria cdigo muy
elaborado o que requiere de demasiado tiempo.

1.1 MATLAB por primera vez
Al iniciar MATLAB aparece el escritorio con diversas reas de trabajo, Multipaneled
desktop. Que se puede modificar para ser til a cada usuario, acciones que no son
necesarias en un principio. La figura 1.1 ilustra las reas de trabajo, Command Window

*
UNAM-Queretaro, CFATA. rquintero@fata.unam.mx
MATLAB para novatos8 3
(elipse amarilla), donde se le escribe a MATLAB las acciones a realizar, inmediatamente
frente al prompt >> (rectngulo azul), y donde aparecen las respuestas numricas

Figura 1.1 Multipaneled desktop en MATLAB.

MATLAB es un lenguaje de programacin que interpreta las instrucciones lnea por
lnea, a diferencia de otros lenguajes de programacin que compilan el programa total.
Esta es una afirmacin correcta en parte, ya que como veremos existen las funciones que
no se interpretan o incluso programas completos en MATLAB que pueden ser
ejecutables. Esta parte se aclarara al ver MEX files y GUIs.

Workspace (elipse verde), muestra las variables definidas e informacin al respecto; en
un principio esta vaca, al definir variables o realizar operaciones se acumulan y se
pueden editar. Doble clic sobre la variable, inicia un editor que permite su visualizacin y
edicin, siempre que sea menor a 65 536 renglones o columnas. En esta misma rea se
puede visualizar la carpeta en la que se esta trabajando al seleccionar la pestaa
correspondiente a Current Directory, MATLAB solo ve el contenido de la carpeta que
esta seleccionada. Para cambiar el directorio emplear el acceso rpido (circulo azul claro,
arriba a la derecha).

Command History (elipse rojo), lista las acciones solicitadas en command window, de la
ms reciente a la ms antigua y se pueden pasar al Workspace por medio de la flecha en
el teclado (arriba y abajo) o haciendo un doble clic en el comando deseado.

Start (rectngulo magenta), es el puerto de entrada a muchas de las funciones de
MATLAB, herramientas de trabajo, ayudas y mas, usualmente debe estar preparado para
pasar horas de sano entretenimiento en los ejemplos y guas de uso. Cuando se le ha
prompt
Start
MATLAB para novatos8 4
pedido a Matlab que realice una actividad que toma tiempo, desaparece el prompt y a la
derecha de Start aparece la leyenda Busy, lo que indica la necesidad de tener paciencia, si
se desea cancelar el proceso se puede hacer presionando al mismo tiempo las teclas ctrl-c
lo que pone disponible el promt.

En clculo numrico elemental, un camino trivialmente simplista es usar una calculadora
cuando la tarea es muy simple, despus Excel si se requiere de grficas mas elaboradas y
finalmente C++ cuando se tiene 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 Uso elemental de MATLAB
Si se escribe una expresin valida en el rea de command window, la respuesta aparece de
manera inmediata.
>> 5*3

ans =

15

>>
La multiplicacin de dos nmeros se realiza y el resultado se guarda en la variable ans.
El prompt indica que esta listo para nuevas instrucciones.

>> 3^3

ans =

27

>>
La potencia es igualmente evidente, el resultado se escribe en la variable ans,
substituyendo cualquier valor o contenido que tuviera anteriormente.

>> 1/ 0
War ni ng: Di vi de by zer o.

ans =

I nf
>>
Aqu I nf es la manera de representar , que indica un nmero ms grande que
cualquiera que puede ser escrito y que en este caso resulto de intentar dividir el nmero
uno entre cero.
MATLAB para novatos8 5

>> cos( pi / 4)

ans =

0. 7071

>>
Aqu la funcin trigonomtrica est en radianes, pi representa a ; nmero de veces que
el dimetro del crculo se requiere para formar el permetro del crculo. La misma funcin
trigonomtrica en grados donde el crculo tiene 360 grados se escribe cosd.

>> exp( i *pi / 4)

ans =

0. 7071 + 0. 7071i

>>
Aqu i representa a 1 ; unidad de los nmeros imaginarios. i puede ser tambin una
variable, nicamente si no ha sido empleado como variable entonces toma la
representacin de los nmeros imaginarios. En cuanto a la notacin exp( x) es la
representacin de
x
e , donde e es el nmero de Euler que es aproximadamente
2.718281828.

>> 0/ 0
War ni ng: Di vi de by zer o.

ans =

NaN

>>
Aqu NaN representa a un valor indefinido, se formo de Not a Number, no es un nmero
y aqu surge de intentar dividir cero entre cero.

>> ( 3- exp( l og( 3) ) ) / 3

ans =

1. 4803e- 016
>>

Aqu la respuesta algebraica es cero, la aritmtica de punto flotante realiza por
aproximaciones los clculos y en su lugar aparece un nmero muy pequeo, 1.4803 x 10
-
16
(1. 4803e- 016=1. 4803E- 016) ; Los clculos en la computadora producen errores que
con la ventaja del punto flotante (notacin exponencial) es muy pequeo. eps representa
al valor del error mximo aritmtico en mi mquina, que es 2.2204 x 10
-16
; cualquier
numero mas pequeo que eps es aceptable. Dicho de otra manera el siguiente nmero
mayor que uno y distinguible de uno en mi mquina es 1+eps.

>> eps
MATLAB para novatos8 6

ans =

2. 2204e- 016

>>


1.3 La ayuda en MATLAB
MATLAB contienen un enorme material, es imposible dominarlo todo y menos aun
recordarlo todo, por lo que es importante que aprenda a aprender y recordar de manera
eficiente. No es accidente que al iniciar el programa la primera lnea que aparece es:

To get st ar t ed, sel ect MATLAB Hel p or Demos f r omt he Hel p menu.

>>

El texto en azul es una liga directa a la ayuda en MATLAB, que abre una ventana como
la mostrada en la figura 1.2.

Figura 1.2 Ventana de ayuda de MATLAB.

l og( x) es logaritmo natural de x
l og10( x) es el logaritmo base 10 de x
at an( x) es el ngulo en radianes cuya tangente es x
si nh( x) es el seno hiperblico de x
sqr t ( x) raz cuadrada de x
l og( x) es logaritmo natural de x
l og10( x) es el logaritmo base 10 de x
at an( x) es el ngulo en radianes cuya tangente es x
si nh( x) es el seno hiperblico de x
sqr t ( x) raz cuadrada de x
MATLAB para novatos8 7
En la figura 1.2 se ve la ventana de ayuda, en el panel izquierdo esta el navegador, donde
se puede explorar por contenido, por ndice, hacer bsquedas o explorar las
demostraciones. Aqu se muestra el navegador por contenido, el libro de MATLAB, las
funciones por categora y las funciones matemticas elementales. En el panel derecho se
ve la lista de funciones exponenciales, doble clic en cualquier nombre en azul para ver la
ayuda preparada en cuanto a su definicin y uso.

Muchas veces no se recuerda o conoce el nombre de la funcin que hace lo que
buscamos, la bsqueda alfabtica de funciones puede ser til. Si recordamos el nombre
de la funcin y solo no recordamos el uso, podemos emplear Command Window y teclear
hel p y el comando del que requiere ayuda, por ejemplo hel p l og y aparece en el
Command Window la ayuda al respecto, usualmente simplificada.

1.4 Definicin de Variables
Se puede definir las variables usadas
>> a=exp( 1)

a =

2. 7183

>>
Aqu a tiene el valor de la constante de Euler.

>> c=a*b
??? Undef i ned f unct i on or var i abl e ' b' .

>>
Aqu intentamos guardar en la variable c el resultado de multiplicar el nmero de Euler
(a) por el contenido de b, como no habamos definido previamente el valor de b nos lo
indica y no realiza nada, queda en espera una instruccin valida.

A continuacin estn algunas convenciones tiles de tomar en cuenta, comentarios que
ignora el intrprete de MATLAB, asignar caracteres alfanumricos a las variables y
continuacin de comandos en varias lneas. Los caracteres que aparecen en verde no son
interpretados por MATLAB y estn en verde cuando van despus del smbolo de
porcentaje %.

>> %est e es un coment ar i o, no hay ej ecuci n
>> x=a^2; % ; al f i nal de l a i nst r ucci n evi t a que apar ezca el
r esul t ado en Command Window
>> y=' l et r er os' ; %l as comas def i nen l os car act er es al f anumr i cos
>> z=1+2+3+. . .
4+5+6 %. . . es una cont i nuaci n de l nea

z =

21

MATLAB para novatos8 8
>>

1.5 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 Mouse se selecciona Create M-
File, aparece otra ventana con la historia de los comandos y ah se puede guardar su
contenido en un archivo. Las figuras, mas adelante se vera como generarlas, se pueden
guardar en formatos muy diversos, *. f i g es el formato nativo de MATLAB, es
modificable y el mas conveniente, *. eps, es postscript se pueden anexar a documentos
Word y la calidad no disminuye, *. j pg es el mas comn pero la calidad es muy limitada
y disminuye rpidamente al cambiar de tamao.

1.6 Ejercicios
1. Evaluar las siguientes expresiones en MATLAB.
a)
e
e
e

b)

3
1
cos
1

c)

7
log

e

d) determinar que nmero es primo {0,1,2,3,4,5,6,7,8,9,10,97,99}

Respuestas:
a) 3.8143e+006
b) 1.9106 [rad]
c) 0.1718
e) [2, 3, 5 ,7, 97]
MATLAB para novatos8 9

2 Arreglos y matrices
En el centro de MATLAB se posicionan las matrices, el acrnimo del nombre se
desprende de MATrix LABoratory, y se espera un uso intensivo de matrices y vectores.
Un array es un grupo de nmeros que en MATLAB se especifica con ndices, cada
elemento del grupo se identifica con uno o varios ndices, los ndices siempre son enteros
que empiezan con el nmero uno. La cantidad de ndices necesarios para especificar a un
elemento forma las dimensiones del array.

La matriz es un array de nmeros de dos dimensiones (dos ndices), row son los
renglones, lneas horizontales y las columns son las columnas, lneas verticales. Los
vectores son arreglos numricos con un solo ndice, y pueden ser vectores rengln o
vectores columna. Conocer la aritmtica de matrices es fundamental para aprovechar las
ventajas de MATLAB.

MATLAB no hace distincin entre un escalar; una matriz con un rengln y una columna,
y un arreglo de nmeros de mltiples ndices. En la manera de escribir las expresiones es
que se respeta la manera de hacer el algebra de matrices.

2.1 Construir arreglos de nmeros
Un arreglo de dos dimensiones se define al incluir los nmeros entre parntesis
cuadrados, las columnas se separan por espacio o por comas y los renglones se separan
por punto y coma o por nueva lnea.
>> A = [ 1 2 3; 4 5 6; 7 8 9]

A =

1 2 3
4 5 6
7 8 9

>> B=[ 1 ; 4 ; 7 ]

B =

1
4
7
>> C=[ 1 2 3]

C =

1 2 3

>> D=5

D =

5
MATLAB para novatos8 10


>> [ r ow, col ] = f i nd( A>7)

r ow =

3
3


col =

2
3

Se puede construir matrices con matrices, siempre y cuando sean compatibles,

>> E=[ A B]

E =

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

>> F=[ A; C]

F =

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

Los elementos se pueden manipular con sus ndices,
>> F( 3, 2) =0

F =

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

Y para borrar elementos se emplea [ ]
>> F( : , 2) =[ ]

F =

si ze da los elementos en cada dimensin
l engt h da los elementos en la dimensin mas grande
ndi ms da el numero de dimensiones
f i nd encuentra los ndices de elementos diferentes de cero.
[ r ow, col ] = f i nd( A>7) encuentra en A los electos mayores a 7
MATLAB para novatos8 11
1 3
4 6
7 9
1 3

La transpuesta de una matriz, se construye escribiendo los renglones en las columnas. Si
los nmeros de la matriz son reales, la transpuesta de A se escribe como A . Esta
operacin es muy til para acceder a los nmeros de la matriz, por ejemplo para construir
matrices a partir de otras.

Otra manera de concatenar arreglos es la funcin cat ( di m, A, B) donde los arreglos
A y B se unen en la dimensin sealada por di m, por supuesto las dimensiones a pegar
tienen que ser compatibles.
>> cat ( 1, E, F' )

ans =

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

>> cat ( 2, E' , F)

ans =

1 4 7 1 3
2 5 8 4 6
3 6 9 7 9
1 4 7 1 3
>>
La construccin de matrices grandes se puede realizar con la ayuda de los siguientes
comandos:


El operador dos puntos (:), es muy til en MATLAB, puede generar secuencias
numricas,
>> 1: 10

ans =

1 2 3 4 5 6 7 8 9 10

>>

eye( m, n) matriz de m x n con unos en la diagonal y ceros en el resto.
r and( m, n) matriz de m x n con elementos aleatorios entre 0 y 1.
zer os( m, n) matriz de m x n con todos los elementos ceros
ones( m, n) matriz de m x n con todos los elementos unos
l i nspace( a, b, n) produce un rengln de n puntos linealmente espaciados de a hasta b
r epmat ( A, m, n) crea una matriz de m x n copias de A
MATLAB para novatos8 12
>> - 3: - . 5: - 6

ans =

- 3. 0000 - 3. 5000 - 4. 0000 - 4. 5000 - 5. 0000 - 5. 5000 - 6. 0000

>>
El formato es nmero inicial : paso entre nmeros : nmero final y produce un vector
rengln o vaco si el nmero final es menor que el nmero inicial.

2.2 Acceder a los nmeros en los arreglos
El acceso a los nmeros de un arreglo se puede hacer por dos estilos, los ndices de los
elementos o la posicin en el listado.
>> A=r and( 2, 5)

A =

0. 9501 0. 6068 0. 8913 0. 4565 0. 8214
0. 2311 0. 4860 0. 7621 0. 0185 0. 4447

>> A( 1, 3)

ans =

0. 8913

>> A( 5)

ans =

0. 8913

>>
En el primer formato A(1,3) representa al primer elemento de la tercera columna. Que
tambin se puede llamar A(5), quinto elemento del listado, la numeracin es consecutiva
agotando los elementos de la primer columna se sigue con el resto de las columnas.

>> A( 1: 2, [ 3 5] )

ans =

0. 8913 0. 8214
0. 7621 0. 4447

>>
Los elementos que se seleccionan son los primeros dos elementos de las columnas 3 y 5.
Tambin se puede obtener una matriz nueva a partir de los elementos de otra matriz, por
ejemplo, tomar todos los elementos de la columna y formar una nueva matriz con las
columnas 2 1 2 4 5 y 5.

>> b=A( 1: end, [ 2 1 2 4 5 5] )

MATLAB para novatos8 13
b =

0. 6068 0. 9501 0. 6068 0. 4565 0. 8214 0. 8214
0. 4860 0. 2311 0. 4860 0. 0185 0. 4447 0. 4447

>>
Aqu end indica el ultimo elemento disponible, as que : es una manera compacta de
decir 1: end.

>> b( 3, 1) =8

b =

0. 6068 0. 9501 0. 6068 0. 4565 0. 8214 0. 8214
0. 4860 0. 2311 0. 4860 0. 0185 0. 4447 0. 4447
8. 0000 0 0 0 0 0

>>
El elemento que se agrega requiere de tener un rengln extra, lo que no es problema en
principio, pero puede crear problemas cuando se requiere que el tamao del arreglo este
cambiando de tamao constantemente, ya que puede hacer el cmputo mucho ms lento.

Tambin se pueden emplear las relaciones lgicas para seleccionar elementos.



>> F=f i nd( b>. 6)

F =

1
3
4
7
13
16

>> b( F)

ans =

0. 6068
8. 0000
0. 9501
0. 6068
0. 8214
0. 8214
== equal to
= not equal to
< less than
> greater than
<= less than or equal to
>= greater than or equal to
MATLAB para novatos8 14

>>

2.3 Operaciones con matrices
Aqu solo se enfatiza la informacin de help para las matrices, las operaciones entre
elementos de matrices se especifica en la siguiente seccin.

>> A=[ 1; 2; 3] , B=[ 4; 5; 6]

A =

1
2
3


B =

4
5
6

>>
+ Adicin de matrices. A+B suma A y B. A y B deben tener el mismo tamao, a menos
que una de las matrices sea un escalar, un escalar se puede sumar a una matriz de
cualquier tamao.
ij ij ij
B A C + =
>> A+B

ans =

5
7
9

>>
- Sustraccin de matrices. A-B resta B de A. A y B deben tener el mismo tamao, a
menos que una de las matrices sea un escalar, un escalar se puede sumar a una matriz de
cualquier tamao.
ij ij ij
B A C =
>> A- B

ans =

- 3
- 3
- 3

>>
* Multiplicacin de matrices. C = A*B es el producto algebraico lineal de las matrices
A y B. Mas precisamente,
MATLAB para novatos8 15

=
=
n
k
kj ik ij
B A C
1

Para matrices no escalares A y B, el nmero de columnas de A debe ser igual al nmero
de renglones de B. Un escalar puede multiplicar matrices de cualquier tamao.

>> A*B
??? Er r or usi ng ==> mt i mes
I nner mat r i x di mensi ons must agr ee.
?
6
5
4
3
2
1
=


>> A*B'

ans =

4 5 6
8 10 12
12 15 18
[ ]

18 15 12
12 10 8
6 5 4
6 5 4
3
2
1

>> A' *B

ans =

32

>>
[ ] [ ] 32
6
5
4
3 2 1 =


/ Diagonal o divisin derecha de matrices. B/A es aproximadamente lo mismo que
B*inv(A). De manera mas precisa es, B/A = (A'\B')'. Esta operacin no tienen razn de
existir, se tiene por completes pero no representa ninguna operacin o concepto
fundamental.

\ Diagonal invertida o divisin izquierda de matrices. Si A es una matriz cuadrada,
A\B es aproximadamente lo mismo que inv(A)*B, excepto que se calcula de manera
diferente. Si A es una matriz de n x n y B es un vector columna con n componentes, o una
matriz con varias columnas de ese tipo, entonces X = A\B es la solucin de la ecuacin
AX = B calculada por eliminacin de Gauss. Una advertencia aparece si A esta mal
escalda o es casi singular.

Es muy comn encontrar un sistema de ecuaciones de la siguiente manera:
MATLAB para novatos8 16

3
2
1
3
2
1
33 32 31
23 22 21
13 12 11
b
b
b
x
x
x
a a a
a a a
a a a
[ ][ ] [ ] fuerzas variables sistema del elmentos =

En donde la solucin o valores para el vector X se puede determinar de la siguiente
forma: X= inv(A)*B=A\B.

>> A=[ 1 2 3; 1 5 6; 1 3 9]

A =

1 2 3
1 5 6
1 3 9

>> B=[ 32; 65; 73]

B =

32
65
73

>> X=A\ B

X =

4
5
6

>>

^ Potencia de matrices. X^p es X elevado a la potencia p, si p es un escalar. Si p es un
entero, la potencia se calcula por cuadrados repetidos. Si el entero es negativo, X se
invierte primero. Para otros valores de p, el clculo se realiza con la ayuda de los
eigenvalores y eigenvectores, tales que [V,D] = eig(X), determina los valores de V y D,
donde V es la matriz de columnas de eigenvectores y D es la matriz con diagonal de
eigenvalores, entonces X^p = V*D.^p/V. Aqu X AX = , X es un eigenvector y es un
eigenvalor.

F=3*ones( 3)

F =

3 3 3
3 3 3
3 3 3
>> F^2

ans =

MATLAB para novatos8 17
27 27 27
27 27 27
27 27 27
>>

Si x es un escalar y P es una matriz, x^P es x elevado a la potencia matriz P usando
eigenvalores y eigenvectores. X^P, donde X y P son ambas matrices se indica por un
error.

' Matriz transpuesta. A' es la transpuesta algebraica de A. Para matrices complejas, es la
transpuesta del complejo conjugado.

>> G=A+i *A

G =

1. 0000 + 1. 0000i 2. 0000 + 2. 0000i 3. 0000 + 3. 0000i
4. 0000 + 4. 0000i 5. 0000 + 5. 0000i 6. 0000 + 6. 0000i
7. 0000 + 7. 0000i 8. 0000 + 8. 0000i 9. 0000 + 9. 0000i

>> G'

ans =

1. 0000 - 1. 0000i 4. 0000 - 4. 0000i 7. 0000 - 7. 0000i
2. 0000 - 2. 0000i 5. 0000 - 5. 0000i 8. 0000 - 8. 0000i
3. 0000 - 3. 0000i 6. 0000 - 6. 0000i 9. 0000 - 9. 0000i

>>

expm(A). Exponencial de una matriz. Debemos usar expm(A) cuando deseamos
obtener el exponencial de una matriz, o sea, cuando queremos calcular: I + A + A
2
/2 +
A
3
/6 + .

2.4 Operaciones con arreglos
Las operaciones entre los elementos se realizan fcilmente incluyendo un punto antes del
operador, siguiendo la secuencia de la seccin anterior.
>> x=[ 1; 2; 3] , y=[ 4; 5; 6]

x =

1
2
3

y =

4
5
6

>>
MATLAB para novatos8 18
.+ Adicin de arreglos. A+B suma A y B. La suma de los elementos de las matrices es
idntica a la suma de matrices.

.- Sustraccin de arreglos. A-B resta B de A. La resta de los elementos de las matrices
es idntica a la resta de matrices.

.* Multiplicacin de arreglos. A.*B es el producto de elemento por elemento de las
matrices y deben ser del mismo tamao, a menos que alguna de las dos matrices sea un
escalar.
>> x. *y

ans =

4
10
18

>> x. *y'
??? Er r or usi ng ==> t i mes
Mat r i x di mensi ons must agr ee.

>> x' . *y
??? Er r or usi ng ==> t i mes
Mat r i x di mensi ons must agr ee.

>>
./ Divisin derecha de arreglos. A./B forma la matriz cuyos elementos se forman de
A(i,j)/B(i,j). A y B deben tener el mismo tamao, a menos que alguno sea un escalar

A =

1 2 3
4 5 6
7 8 9

>> E=2*ones( 3)

E =

2 2 2
2 2 2
2 2 2

>> A. / E

ans =

0. 5000 1. 0000 1. 5000
2. 0000 2. 5000 3. 0000
3. 5000 4. 0000 4. 5000

>>

MATLAB para novatos8 19
.\ Divisin izquierda de arreglos. A.\B forma la matriz cuyos elementos se forman de
B(i,j)/A(i,j). A y B deben tener el mismo tamao, a menos que alguno sea un escalar.
Esta operacin no tienen razn de existir, se tiene por completes pero no representa
ninguna operacin o concepto fundamental.

.^ Potencia de arreglos. A.^B es la matriz con elementos A(i,j) elevado a la potencia
B(i,j). A y B deben ser del mismo tamao a menos que una sea un escalar.

>> F=3*ones( 3)

F =

3 3 3
3 3 3
3 3 3

>> F. ^2

ans =

9 9 9
9 9 9
9 9 9

>>

.' Transpuesta de un arreglo. A.' es una matriz de la transpuesta de A. Para matrices
complejas, esta operacin no hace el complejo conjugado como lo hace la transpuesta de
una matriz.

>> G=A+i *A

G =

1. 0000 + 1. 0000i 2. 0000 + 2. 0000i 3. 0000 + 3. 0000i
4. 0000 + 4. 0000i 5. 0000 + 5. 0000i 6. 0000 + 6. 0000i
7. 0000 + 7. 0000i 8. 0000 + 8. 0000i 9. 0000 + 9. 0000i

>> G. '

ans =

1. 0000 + 1. 0000i 4. 0000 + 4. 0000i 7. 0000 + 7. 0000i
2. 0000 + 2. 0000i 5. 0000 + 5. 0000i 8. 0000 + 8. 0000i
3. 0000 + 3. 0000i 6. 0000 + 6. 0000i 9. 0000 + 9. 0000i

>>
exp(A). Exponencial de un arreglo. Esta funcin produce una matriz donde cada
elemento se obtiene de exp(a
ij
).

MATLAB para novatos8 20
2.5 Ejercicios
1. Construir el siguiente arreglo:

=
8 2 0 0 0 0 0 0 0 1 -
2 8 2 0 0 0 0 0 0 0
0 2 8 2 0 0 0 0 0 0
0 0 2 8 2 0 0 0 0 0
0 0 0 2 8 2 0 0 0 0
0 0 0 0 2 8 2 0 0 0
0 0 0 0 0 2 8 2 0 0
0 0 0 0 0 0 2 8 2 0
0 0 0 0 0 0 0 2 8 2
1 - 0 0 0 0 0 0 0 2 8
A

a) Consulte hel p para emplear nicamente di ag en su construccin.
b) Consulte hel p para emplear nicamente t oepl i t z en su construccin.
c) Construir los siguientes arreglos de la manera ms econmica.

=
1 0 0 0 0
2 1 0 0 0
3 2 1 0 0
4 3 2 1 0
5 4 3 2 1
D ,

=
1
1
2
1
3
1
4
1
5
1
2
1
1
1
2
1
3
1
4
1
3
1
2
1
1
1
2
1
3
1
4
1
3
1
2
1
1
1
2
1
5
1
4
1
3
1
2
1
1
1
E .


2. Si A es una matriz de nmeros aleatorios de 8x8.
a) Determinar el mximo valor en cada rengln.
b) Determinar el mnimo valor en cada columna
c) Determinar el mximo nmero del arreglo
d) Cambiar por cero los elementos que son mayores que 0.5

3. Si A es una matriz mgica (magi c) de 4x4, construir una instruccin que le permita
suma los elementos de la diagonal principal y de la antidiagonal.

4. Si se tienen un arreglo de 52 nmeros, determine alguna manera de hacer un listado
aleatorio de ellos.

Respuestas:
1. A=di ag( ones( 10, 1) *8, 0) +di ag( ones( 9, 1) *2, 1) +
di ag( ones( 9, 1) *2, - 1) +di ag( - 1, 9) +di ag( - 1, - 9)
B=t oepl i t z( [ 8 2 zer os( 7, 1) ' - 1] , [ 8 2 zer os( 7, 1) ' - 1] )
D=t oepl i t z( 1: 5, zer os( 5, 1) ) '
E=t oepl i t z( 1. / ( 1: 5) , 1. / ( 1: 5) )
MATLAB para novatos8 21

3. sum( di ag( magi c( 4) ) )
sum( di ag( A( 4: - 1: 1, : ) ) )

4. sor t r ows( [ r and( 52, 1) , ( 1: 52) ' ] )

MATLAB para novatos8 22

3 Programas (scripts) y funciones
Los M-File son archivos de texto que contienen instrucciones para MATLAB, y se
guardan como *.m Existen dos tipos de archivos de este tipo, los scripts o secuencia de
instrucciones para MATLAB, y las functions que realizan una secuencia de acciones con
argumentos de entrada y de salida. MATLAB tiene integrado un editor de texto que es
muy conveniente ya que reconoce las acciones que se solicitan y aporta ayuda visual
como colores diferentes para comentarios, palabras reservadas por MATLAB y texto
regular, adems de permitir identificar errores de sintaxis y ayuda con indentaciones. El
editor de archivos se puede llamar por New M-file y que se puede acceder como acceso
directo bajo el men de File, es la hoja en blanco, vase la figura 1.1.

Los archivos se guardan de inicio en la carpeta \work, en mi caso la ruta completa es
(C:\Program Files\MATLAB\R2006a\work), se pueden guardar en otras carpetas pero
para ser ejecutados por MATLAB deben estar en una ruta reconocida, editpath o el men
de File se emplea para modificar la ruta.

Los archivos no son compilados, solo se escribe el nombre frente al prompt o por el
editor y las acciones se ejecutan.
3.1 Scripts
Si abro el editor de archivos y escribo:

%Est e scr i pt me per mi t e pr act i car l a maner a de guar dar i nst r ucci ones
%y aument ar mi al f abet i smo en MATLAB
x= r and( 1) %gener a un nmer o al eat or i o.
y=si n( x) %cal cul a el seno del nmer o al eat or i o x

y lo guardo con el nombre tarea1, que se guardara como tarea1.m. Entonces podra
ejecutarlo desde el editor de archivos presionado el acceso directo Save and run o podra
ejecutarlo escribiendo tarea1 frente al prompt.

>> hel p t ar ea1
Est e scr i pt me per mi t e pr act i car l a maner a de guar dar i nst r ucci ones
y aument ar mi al f abet i smo en MATLAB

>> t ar ea1

x =

0. 8913

y =

0. 7779
>>
Al escribir hel p t ar ea1 siempre se escriben los comentarios que se agregaron al
principio del archivo.
MATLAB para novatos8 23
La razn principal para escribir scripts es tener una secuencia de instrucciones
secuenciales en MATLAB que al ejecutarse facilitan nuestro trabajo, mas til, conforme
mas elaborada es la lista de instrucciones que contiene.

Otra importancia de los scripts es que permite revisar y editar la secuencia de
instrucciones en cualquier momento y por terceros. Aqu la advertencia de buenas
prcticas de escritura y de comentarios nunca se enfatizara lo suficiente.
3.2 Functions
Las funciones aumentan las posibilidades de MATLAB, se construyen de manera similar
a los scripts, solo que la primera instruccin es:

f unct i on [ sal 1, sal 2, sal 3] =nombr e ( ent 1, ent 2, ent 3)

las variables sal1, etc son las salidas de la funcin y las variables ent1, etc son las
entradas de la funcin. Se pueden emplear tantas variables como se necesiten, incluso
ninguna variable, y pueden tener el nombre que les guste. El nombre que emplee en la
fusin debe ser el mismo del nombre empleado para guardar el archivo.

Las lneas que continan se guardaron en un archivo llamado leycoseno.m.

%Est a f unct i on cal cul a l a l ey de l os cosenos, r equi er e l os val or es de
dos
%l ados del t r i angul o ( B, C) y el ngul o ent r e el l os ( a) en r adi anes
%La r espuest a es l a l ongi t ud del ot r o l ado del t r i angul o ( A)
%
%el f or mat o es: [ r espuest a] =l eycoseno( B, C, a)
f unct i on [ A] =l eycoseno ( B, C, a) ;
A=sqr t ( B^2+C^2- 2*B*C*cos( a) ) ;

Como en el caso de los scripts, escribir help y el nombre en el prompt despliega los
comentarios iniciales que escribimos.

>> hel p l eycoseno
Est a f unct i on cal cul a l a l ey de l os cosenos, r equi er e l os val or es de dos
l ados del t r i angul o ( B, C) y el ngul o ent r e el l os ( a) , en r adi anes
La r espuest a es l a l ongi t ud del ot r o l ado del t r i angul o ( A)

el f or mat o es: [ r espuest a] =l eycoseno( B, C, a)

Para emplear la funcin se pueden usar cualquier nombre de variables, a continuacin la
respuesta del valor del lado del triangulo, cuando los otros dos lados tienen un valor de
uno y el ngulo entre ellos es 90 grados se guarda en ans. Recordemos que ans lo
genera MATLAB cuando no se asigna una variable para la respuesta y solo existe un
ans.

>> l eycoseno( 1, 1, pi / 2)

ans =

MATLAB para novatos8 24
1. 4142

>>

Una propiedad interesante de las funciones es que disponen de su espacio privado para
variables, de tal manera que no puede ver las variables del espacio de trabajo de donde se
llamo la funcin, y libera todo el espacio de memoria que empleo cuando termina,
adems cada funcin emplea su propio espacio privado.

Un comentario final en relacin a los archivos-m, la mayora de las funciones en
MATLAB son archivos-m, que se pueden leer y se pueden copiar. Lo que representa una
oportunidad para aprender como programan los profesionales en MATLAB y copiar
algunos de sus secretos.

Un tipo de funcin que se puede usar es la funcin annima, es un tipo de funcin para el
que no se requiere de escribir un m-file, la sintaxis es:

f = @(arglist)expression.

Como ejemplo veamos la construccin de la raz cuadrtica mayor, donde los argumentos
son tres a, b, y c. y la raz mayor es:
a
ac b b
x
2
4
2
max
+
=

>> f =@( a, b, c) ( - b+sqr t ( b^2- 4*a*c) ) / 2/ a

f =

@( a, b, c) ( - b+sqr t ( b^2- 4*a*c) ) / 2/ a

>> x=f ( 1, - ( 1e8+1e- 8) , 1)

x =

100000000

3.3 Trabajar con y mejorar scripts
El editor de MATLAB tiene accesos directos para correr el script, en la figura 3.1 esta
dentro del crculo rojo. En el circulo azul esta el setpoint, que permite marcar a la derecha
del nmero de lnea puntos de referencia que se pueden usar para correr script de punto a
punto. Esto es ventajoso para probar solo una seccin del script, estos marcadores se
pueden eliminar con el accedo directo que esta a la derecha. Al momento de detener el
programa se pueden revisar las variables en el Workspace para juzgar la fuente de error, y
se puede continuar despus de revisar.

MATLAB para novatos8 25

Figura 3.1 Apariencia del editor de MATLAB y accesos comunes.

En la figura 3.1 y dentro del circulo rosa se encuentra un indicador de sintaxis, el color en
la figura es que se tiene una advertencia, en este caso el punto y coma del final de l alinea
6 es innecesario, si se borra el color del recuadro cambia a verde. La posicin del cursor
esta sealada en la esquina inferior derecha, rectngulo gris, esta referencia es
conveniente cuando aparecen errores de ejecucin e indican en que lugar esta el error. La
flecha verde indica las pestaas de los scr i pt s que estn abiertos en el editor y
cualquiera de ellos puede editarse solo seleccionndolo.

Una capacidad muy provechosa para mejorar el script es profiling, con ella se puede
averiguar que tiempo se pasa la computadora en cada funcin del script y juzgar si es
posible mejorar o substituir alguna seccin de lneas por otra alternativa, como por
ejemplo crear una funcin. pr of i l e on, inicia esta posibilidad, al terminar el script se
dice pr of i l e r epor t , esto nos da el reporte y cuando no se requiere se deshabilita
con pr of i l e of f .

3.4 Funciones de funciones
MATLAB cuenta con funciones que requieren de definir la funcin sobre la que operar.
La lista incompleta de estas funciones es:

Encontrar las races de una funcin de una variable.
Encontrar el valor mnimo en un intervalo de una funcin de una variable.
Encontrar el valor mnimo de un intervalo de una funcin multidimensional.
Encontrar la integral de una funcin en un intervalo definido.
Resolver ecuaciones diferenciales ordinarias con condiciones iniciales.

La manera de definir la funcin que se usar depende del grado de complejidad de la
funcin; funciones annimas son las mas simples cuando la funcin es relativamente
simple y un archivo de funcin cuando la funcin es muy compleja o cuando se tienen
que definir el sistema de ecuaciones diferenciales.

MATLAB para novatos8 26
Para encontrar las races de la funcin 120 196 91 13 3
2 3 4 5
+ = x x x x x f , se puede
definir la funcin f por medio de una funciona annima y evaluarla con f zer o como en
el siguiente ejemplo, (este polinomio tiene races -3, -1, 5, -2-i2 y -2+i2).

>> f =@( x) x^5+3*x^4- 13*x^3- 91*x^2- 196*x- 120

>> z = f zer o( f , 6)

z =

5

Para determinar el valor de la variable x donde se tiene el valor mnimo de la funcin f
definida anteriormente en el intervalo [0,6] se emplea la funcin f mi nbnd como en el
siguiente ejemplo.

>> [ x, f enx] = f mi nbnd( f , 0, 6)

x =

3. 5529

f enx =

- 1. 5039e+003

Para determinar el mnimo de una funcin de dos dimensiones se puede usar la funcin
annima y f mi nsear ch como en el siguiente ejemplo tomado de la ayuda de
MATLAB.

2 2 2
) 1 ( ) ( 100 x x y z + =

Figura 3.2 Script para graficar la funcin limitada en z a 100, (vase seccin 5.2), sin
importar que en esta escala se percibe una regin con posibles mnimos, si se limita el
crecimiento de z fcilmente se ve que el mnimo esta en (1,1) como lo indica
f mi nsear ch.

>> banana = @( x) 100*( x( 2) - x( 1) ^2) ^2+( 1- x( 1) ) ^2;
>> [ x, f val ] = f mi nsear ch( banana, [ - 1. 2, 1] )

x =

1. 0000 1. 0000

x = - 2: . 01: 2;
y = - 2: . 01: 4;
[ X, Y] = meshgr i d( x, y) ;
Z=100*( Y- X. ^2) . ^2+( 1- X) . ^2;
A=f i nd( Z>100) ;
Z( A) =100;
sur f ( X, Y, Z)
MATLAB para novatos8 27
f val =

8. 1777e- 010

Para calcular la integral reprobabilidad de Gauss de 0 a 1 se puede usar una funcin
annima.

=
2
) (
exp
2
2
2
x
f



>> f = @( x) 2/ sqr t ( 2*pi ) *exp( - x. ^2/ 2) ;
>> Q = quad( f , 0, 1)

Q =

0. 6827

El caso de ecuaciones diferenciales en general requiere de definir una funcin con las
ecuaciones a resolver, (Simulink permite un mejor control de la simulacin y lo
recomiendo)

) 5 . 1 cos( 5 05 . 3 5 1 2
3
2
2
t t f
dt
df
dt
f d
+ + = + +

Que podemos reescribir con las funciones y(1)=f y y(2)=f que es la manera habitual de
trabajar con ecuaciones diferenciales, escribiendo un sistema de ecuaciones diferenciales
de primer orden.

2
5 ) 5 . 1 cos( 5 05 . 3
1 2
3
2
1
2
1
y y t t
dt
dy
dt
dy
dt
df
y
f y
+ +
=
= =
=


Se crea el archivo con nombre der i vada1. m

f unct i on dy = der i vada1( t , y)

dy=zer os( 2, 1) ;
dy( 1) = y( 2) ;
dy( 2) = ( 3+0. 05*t ^3+5*cos( 1. 5*t ) - y( 2) - 5*( y( 1) ) ) / 2;

y se resuelve el sistema de ecuaciones con ode45. La nica lnea indispensable es la
tercera, donde las respuesta se guarda en la columna t , y en dos columnas y una para f y
otra para su derivada, si no se agrega el comando opt i ons, la simulacin procede con
MATLAB para novatos8 28
los parmetros tpicos, [0 10] es el intervalo de la simulacin de 0 a 10 segundos y las dos
condiciones iniciales son [1.3 8].

cl ear al l
opt i ons = odeset ( ' Rel Tol ' , 1e- 7, ' AbsTol ' , [ 1e- 7 1e- 7] ) ;
[ t , y] =ode45( @der i vada1, [ 0 10] , [ 1. 3 8] , opt i ons) ;

f i gur e( 3)
subpl ot 131
pl ot ( t , y( : , 1) ) ;
t i t l e( ' 1' ) ; xl abel ( ' Ti me [ s] ' ) ; yl abel ( ' f [ a. u. ] ' ) ;

subpl ot 132
pl ot ( t , y( : , 2) ) ;
t i t l e( ' 2' ) ; xl abel ( ' Ti me [ s] ' ) ; yl abel ( ' df / dt [ a. u. ] ' ) ;

subpl ot 133
pl ot ( t ( 1: 536) , di f f ( y( : , 2) ) . / di f f ( t ) ) ;
t i t l e( ' 3' ) ; xl abel ( ' Ti me [ s] ' ) ; yl abel ( ' d( df / dt ) / dt [ a. u. ] ' ) ;

Figura 3.3 Grficas de las soluciones de la ecuacin diferencial, la seccin 5 explica la
manera de hacer las graficas, el problema es resuelto una vez mas en la seccin de
Simulink.

3.5 Ejercicios
1. Encontrar las primeras seis races de la funcin de Bessel de orden 1.
2. Encontrar la solucin de la ecuacin diferencial con condiciones iniciales y(0)=0,
1
0
=
dz
dy
en el intervalo de z (0,20] y comparar con bessel j (1,z).
0 ) 1 (
2
2
2
2
= + + y z
dz
dy
z
dz
y d
z

Respuesta
1. 3. 8317, 7. 0156, 10. 1735, 13. 3237, 16. 4706, 19. 6159;
f =@( x) bessel j ( 1, x) ; z = f zer o( f , 4)
2. Crear el archivo derivada2.m
f unct i on dy = der i vada2( t , y)
dy=zer os( 2, 1) ;
dy( 1) = y( 2) ;
dy( 2) = ( - ( t ^2- 1) *y( 1) - t *y( 2) ) / t ^2;
MATLAB para novatos8 29
y resolver con ode45
[ t , y] =ode45( @der i vada2, [ 0. 0001 20] , [ 0 1] )
La comparacin entre ambas debe ser igual.

MATLAB para novatos8 30

4 Control de flujo de programa
La escritura de programas requiere que se pueda repetir alguna instruccin o tomar
decisiones respecto a la direccin del programa. MATLAB dispone de estas
herramientas. Las herramientas de control de programa se puede dividir en:

Decisiones de control

Bucles

Acciones cuando hay error

Finalizar el programa

4.1 Ejemplos
Del numero x, indicar que es un numero negativo en caso de serlo, si es real no entero
dividirlo entre 2 y si es entero obtener su factorial.

i f x < 0
di sp( ' es un numer o negat i vo' )
el sei f r em( x, 1) == 0
A = f act or i al ( x)
el se
A = x/ 2
end


Del la variable x, si tiene el valor -1 imprime uno negativo, si tiene el valor 0 imprime
cero, si tiene el valor 1, imprime uno positivo, cualquier otro valor imprime otra
cosa.

swi t ch x
case - 1
di sp( ' uno negat i vo' ) ;
case 0
di sp( ' cer o' ) ;
case 1
di sp( ' uno posi t i vo' ) ;
ot her wi se
di sp( ' ot r a cosa' ) ;
end

return
try, catch
for, while, continue, break
if, else elseif
switch, case, otherwise
MATLAB para novatos8 31

La siguiente instruccin se realiza 5 veces, la primera, cuando n=2, produce x(2)=2*1 y
sucesivamente toma valores que son el doble del anterior, generando x=[1 2 4 8 16 32].
x=1;
f or n = 2: 6
x( n) = 2 * x( n - 1) ;
end


En el siguiente ejemplo
2 2 2 2 2
7 6 5 3 2 1 + + + + + = A , whi l e debera ejecutarse siempre
que x < 10; cont i nue evita que se sume 4
2
y br eak termina el bucle cuando x=7.
x=x+1 se incluye al principio para evitar que x deje de crecer por cont i nue. Las
instrucciones whi l e e i f se ejecutan siempre que sean verdaderos lgicos, x==4 es
verdadero solo cuando x tienen el valor cuatro.
x=1;
A=1;
whi l e x<10
x=x+1
i f x==4
cont i nue
end
A=A+x. ^2
i f x==7
br eak
end
end

En el siguiente ejemplo se espera que los datos sean una constante o una matriz de 2xn.
De no ser el caso pasa el control a cat ch, advierte del error y nos da una nueva
oportunidad para que se satisfaga la condicin y se sale del whi l e.

A=[ 1 2]
done = f al se;
whi l e ~done
B = i nput ( ' i nt r oduzca dat os congr uent es: ' ) ;
t r y
C=A*B;
done = t r ue;
cat ch
di sp( ' Los dat os no son congr uent es! ' )
end
end

4.2 Ejercicios

MATLAB para novatos8 32

5 Grficos
Las capacidades de trabajar los grficos es una de las razones por lo que muchas personas
se acercan a MATLAB, los aspectos mas bsicos son muy simples, pero adems se
pueden hacer cosas espectaculares. En general no se requiere de programas adicionales, y
lleva los resultados hasta archivos de la mayor calidad. A estas alturas del partido espero
que no se tenga dudad de las ventajas de MATLAB, grficos es un premio adicional.

5.1 Dos dimensiones
Las ilustraciones mas simples y comunes surgen de tener coordenadas formadas por un
vector de nmeros como x y otro vector de nmeros como y.

Figura 5.1 Ilustracin simple con caracteres variados.

La figura 5.1 se construy con las siguientes instrucciones

>>f i gur e1=f i gur e
%Def i ni r t amao de l et r a en el mar gen y r ej i l l as
axes( ' Font Si ze' , 20, ' XGr i d' , ' on' , ' YGr i d' , ' on' , ' Par ent ' , f i gur e1)
box( ' on' ) ;
hol d( ' al l ' ) ;
%Gr af i ca l a f unci n de gauss, con ej es x de 0 a 6 y y de 0 a 0. 41
x=0: . 01: 6; pl ot ( x, 1/ ( 1*sqr t ( 2*pi ) ) *exp( - ( x- 3) . ^2. / 2) )
axi s( [ 0 6 0 0. 41] ) ;
%Def i ni r l eyenda en x con t amao 20
xl abel ( ' x' , ' Font Si ze' , 20) ;
%Def i ni r l eyenda en y con t amao 20
yl abel ( ' f ( x) ' , ' Font Si ze' , 20) ;
%Def i ni r el t i t ul o
t i t l e( ' Gauss' ) ;
%Def i ni r caj a de t ext o par a el s mbol o en x=. 7 y y=. 75 de uno
annot at i on( f i gur e1, ' t ext box' , ' Posi t i on' , [ . 7 . 75 . 1 . 1] , ' Font Si ze' ,
20, ' St r i ng' , {' \ mu=3 \ si gma=1' }) ;
%Cr ear caj a de t ext o par a l a f unci n f ( x) en l at ex
t ext ( ' I nt er pr et er ' , ' l at ex' , . . .
' St r i ng' , ' $$f ( x) =\ f r ac{1}{\ si gma\ sqr t {2 \ pi }}exp( - {\ f r ac{( x-
\ mu) ^2}{2\ si gma^2}}) $$' , . . .
' Posi t i on' , [ 1 . 05] , . . .
MATLAB para novatos8 33
' Font Si ze' , 16)
%Cr ear caj a de t ext o par a l a i nt egr al en l at ex
t ext ( ' I nt er pr et er ' , ' l at ex' , . . .
' St r i ng' , ' $$\ i nt _{- \ i nf t y}^{\ i nf t y} f ( x) dx=1$$' , . . .
' Posi t i on' , [ 2 . 15] , . . .
' Font Si ze' , 16)

No desesperar, no se requiere de recordar nada de esto para que nos salga bien la figura.
Si se escribe las coordenada x y y se pide que se grafiquen con pl ot aparece la figura
5.2.

>>x=0: . 01: 6; pl ot ( x, 1/ ( 1*sqr t ( 2*pi ) ) *exp( - ( x- 3) . ^2. / 2) )


Figura 5.2 grafico simple sin edicin adicional.

En la figura 5 se indica dentro del crculo rojo el acceso directo para Show Plot Tools,
que es la entrada al paraso de las graficas. El crculo azul muestra el acceso directo a los
datos de la grafica, se puede ver las coordenadas de los puntos que forman la grafica.

MATLAB para novatos8 34

Figura 5.3. Diversa opciones de edicin para los grficos, en la parte inferior de las
figuras se muestran las posibilidades. A) edicin de los ejes, leyendas, lmites y escalas;
adems del titulo y de las rejillas. B) edicin de la apariencia del trazo, etiquetas, lneas
marcadores y colores. C) edicin de una caja de texto, en este caso nombre del eje
vertical, color, tamao y formato.

La figura 6 muestra ejemplos de las posibilidades de edicin para modificar la apariencia
de las figuras. Observe que las marcas en la figura (pequeos cuadros) coinciden con las
posibilidades de edicin. Adems de las opciones evidentes, se pueden acceder a mas
detalles de control con el acceso directo More Properties que se encuentra en el ngulo
inferior derecho. Tambin en los mens superiores se puede tener acceso cambios
adicionales o a agregar caractersticas adicionales a la figura.

Otra maravilla de la edicin es que en las cajas de texto, nombres de ejes, leyendas, etc se
pueden mezclar caracteres, por ejemplo

secuencia smbolo secuencia smbolo
\alpha

\Omega

\beta

\Phi

\gamma

\Psi

\delta

\Delta

\delta

\Sigma

\pi

\sim

\lambda

\0

MATLAB para novatos8 35
\surd \nabla

Ms an, se pude escribir ecuaciones complejas como las ilustradas en la figura 5.1.

t ext ( ' I nt er pr et er ' , ' l at ex' , ' St r i ng' , ' $$f ( x) =\ f r ac{1}{\ si gma\ sqr t {2 \ pi }}exp( - {\ f r ac{( x- \ mu) ^2}{2\ si gma^2}}) $$' )

Si se desea que un trazo permanezca al hacer un nuevo trazo la instruccin es hol d on.

>> t = ( - pi : pi / 100: pi ) ;
>> pl ot ( t , si n( t ) , ' r ' )
>> hol d on
>> pl ot ( t , cos( t ) , ' k' )
>>

Si desea tener un panel de figuras, 2 por ejemplo, en un rengln y dos columnas:

>> subpl ot ( 1, 2, 1) ; pl ot ( t , si n( t ) , ' r ' )
>> subpl ot ( 1, 2, 2) ; pl ot ( t , cos( t ) , ' k' )



5.2 Tres dimensiones
En virtud de que las graficas en MATLAB se construyen uniendo los puntos lo primero
que se debe construir es la malla x-y para evaluar f(x,y).

>> x = 0:pi/50:pi;
>> y = 2*x;
>> [X,Y] = meshgrid(x,y);
>> surf(X,Y,sin(X.^2+Y))

Si solo se desea ver la malla se puede ver con:

>> f i gur e; pl ot ( X( : ) , Y( : ) , ' ko' )

Cuando las curvas son paramtricas, la secuencia de puntos construye una curva, se pude
usar pl ot 3. La cuarta instruccin mantiene el aspecto de cubo.

>> t = 0: pi / 50: 10*pi ;
>> pl ot 3( si n( t ) , cos( t ) , t )
>> gr i d on
>> axi s squar e

Instrucciones convenientes para explorar funciones son:

>> ezpl ot ( ' x^2- y^4' )
f i gur e abre una nueva ventana de figura
semi l ogx grafica con la escala en x logartmica
semi l ogy grafica con la escala en y logartmica
l ogl og grafica con la escala en x-y logartmica
MATLAB para novatos8 36
>> ezsur f ( ' r eal ( at an( x+i *y) ) ' )
>> ezcont our ( ' sqr t ( x^2 + y^2) ' )
>> ezmesh( ' x. *exp( - x. ^2- y. ^2) ' )
>> ezpl ot 3( ' s/ 2' , ' 2*s^2' , ' 3*s^3' )
>> ezpol ar ( ' 1+cos( t ) ' )

5.3 Guardar imgenes
La manera mas conveniente de guardar las imgenes es en *.fig ya que pueden editarse.
Cuando se esta satisfecho de la apariencia se puede guardar en varios formatos *.jpg es el
menos recomendable, compacto y fcil de leer pero de baja calidad y no es modificable.
*.eps es mas aceptado Word no es un buen interprete pero aun as es muy bueno. *.emf es
otra alternativa de buena calidad. Yo recomendara guardar tres versiones, tener la
versin de *.fig , la *emf para trabajar y *.eps para la presentacin final.

5.4 Ejercicios

MATLAB para novatos8 37
6 Prcticas de buena programacin
La eficiencia de la programacin en MATLAB se puede veneficiar empleando criterios
que emplean extensivamente las fortalezas del leguaje, en particular el uso extensivo de
matrices.

Las lneas ms importantes para mantener la eficiencia se pueden agrupar en:
1. Favorecer vectores en lugar de bucles.
2. Evitar que los arreglos crezcan mientras se corre el programa.
3. Escribir MEX-File cuando los bucles son inevitables
4. Evitar el uso innecesario de scripts y cambios innecesarios de variables
5. Si solo se hace calculo real, evitar usar funciones para nmeros complejos cuando
existen alternativas para nmeros reales.
6. Usar los operadores lgicos correctamente

6.1 Favorecer vectores en lugar de bucles.

Para las personas que aprendieron a programar con ciclos repetitivos (bucles) es natural
buscar como implementarlos en MATLAB y es muy simple pero en general puede ser
ineficiente.

En el siguiente ejemplo se generan 100 ndices m sobre los que se construye las variables
t, y.

f or m= 1: 100
t ( m) = 3*pi *( m- 1) / 100;
y( m) = si n( t ( m) ) ;
end

la mejor manera de hacer lo mismo es por medio de vectores

t = 0: pi / 100: 3*pi ;
y = si n( t ) ;

La primera lnea genera el vector rengln t que contiene valores desde 0 hasta 3, en
incrementos de /100. La segunda lnea genera para cada valor de t un valor de y, esto es
un vector rengln con los mismos elementos que t. En mi computadora la versin
vectorial es 19 veces ms rpida que la del bucle.

Para ver un ejemplo de la implementacin de vectorizacin en las funciones de
MATLAB se pueden ver la funcione r epmat en el directorio de MATLAB; en mi caso
en C:\Program Files\MATLAB\R2006a\toolbox\matlab\elmat.

MATLAB para novatos8 38
6.2 Evitar que los arreglos crezcan mientras se corre el programa.
Al permitir que un arreglo crezca dentro de un bucle reduce el tiempo de ejecucin, en el
siguiente ejemplo la variable x aumenta dentro del bucle de tener un elemento a 10000
elementos.

t i c
x = 0;
f or k = 2: 10000
x( k) = x( k- 1) + 5;
end
t oc

En esta nueva versin se define de antemano el tamao de x como de 10000 elementos,
todos cero y se cambian por le valor deseado dentro del bucle.

t i c
x = zer os( 1, 10000) ;
f or k = 2: 10000
x( k) = x( k- 1) + 5;
end
t oc

Este simple cambio permite que la segunda versin sea 730 veces ms rpida.

6.3 Escribir MEX-File cuando los bucles son inevitables
Este es un comentario que tiene que ser juzgado por el usuario de MATLAB, es cierto
que MEX-Files (vase seccin 9) no son interpretados por MATLAB ya que son
equivalentes a las funciones escritas en C, el problema pudiera ser que no se dispone del
tiempo para implementar el cdigo apropiado en cuyo caso la promesa de velocidad se ve
limitada por la lentitud de crear el programa.

El la seccin 9 daremos algunos puntos para acelerar los programas que pueden
incorporarse a la base del conocimiento en niveles posteriores, cuando MATLAB es mas
familiar y se desea explotarlo mas eficientemente.

6.4 Otras consideraciones

Si solo se trabaja con nmeros reales, existen funciones para nmeros reales que mejoran
la eficiencia de los clalos, cuando existe un uso masivo de ellas.



log reallog
pow realpow
sqrt realsqrt
MATLAB para novatos8 39
La ejecucin de funciones es mas eficiente que la ejecucin de scripts, estas ultimas son
ledas y ejecutadas una lnea a la vez, mientras que las funciones permanecen en memoria
despus de ser usadas la primera vez.

Los procesos compartidos en las computadoras pueden disminuir el desempeo, cuando
los clculos son muy intensivos, evite compartir los recursos de computo entre varias
actividades.

Ejercicios
1. Construir un arreglo de coordenadas en tres dimensiones de 5 unidades en cada
dimensin sin emplear bucles. Crear una alternativa al programa
cl ear al l
Lx=50;
Ly=50;
Lz=50;
A=zer os( [ Lx*Ly*Lz, 3] ) ;
f or i ndi cex=1: Lx
f or i ndi cey=1: Ly
f or i ndi cez=1: Lz
A( i ndi cez+( i ndi cey- 1) *Ly+( i ndi cex- 1) *Lz*Ly, : ) =[ i ndi cex
i ndi cey i ndi cez] ;
end
end
end

Solucin

Lx=50; Ly=50; Lz=50;
X=[ r epmat ( 1: Lx, Ly*Lz, 1) ] ;
Y=[ r epmat ( 1: Ly, Lz, Lx) ] ;
Z=[ r epmat ( 1: Lz, 1, Lx*Ly) ] ;
I NDX=[ X( : ) , Y( : ) , Z( : ) ] ;

MATLAB para novatos8 40
7 GUIs
La idea de darle datos de entrada a un programa y esperar por la respuesta es la nocin
secuencial ms comn de programar. La utilidad del programa para otros existe cuando
es amigable con el usuario, cuando indica qu es razonable proponer al programa, los
botones, mens y valores predeterminados son muy tiles y cambian el estilo del
programar a activado por eventos. GUI es el acrnimo de Graphics User Interface,
Interfase grfica para el usuario.

Usualmente el proceso es, pensar en construir el programa activado por eventos, pero
construir las partes secuenciales del programa y probarlas antes de iniciar la construccin
del GUI. Las correcciones posteriores son poco econmicas, al grado de que es mejor
iniciar de cero que corregir una estructura terminada.

Ejemplo de script para FFT
Ejemplo de function para FFT
Ejemplo de GUI para FFT
Ejemplo de generar ejecutable de FFT

7.1 Ejemplo de script para FFT
La siguiente secuencia de instrucciones define t, f, su transformada y sus grficas.
t =5: . 01: 15;
y=5*cos( 2*pi *10*t ) +3*cos( 2*pi *25*t ) ;
t mi n=t ( 1) ;
t max=t ( end) ;
dt =t ( 2) - t ( 1) ;
N= l engt h( t ) ;
M=1024
Y=f f t ( y, M) ;
r =abs( Y( 2: M/ 2) ) *2/ N;
o=angl e( Y( 2: M/ 2) ) *2/ N;
f =( 1: ( M- 2) / ( M- 4) : M/ 2) / dt / M;
f i gur e ( 1)
pl ot ( t , y)
t i t l e( ' osci l ogr ama' )
gr i d on
xl abel ( ' t i empo' )
t i t l e( ' f unci on' )
f i gur e ( 2)
pl ot ( f , r )
t i t l e( ' espect r ogr ama' )
gr i d on
xl abel ( ' f r ecuenci a' )
t i t l e( ' ampl i t ud' )

explicar el programa

MATLAB para novatos8 41
7.2 Ejemplo de function para FFT
Se tiene que definir la function ffcorrecta y llamarla despus de tener los vectores (t, y),
las grficas se hacen fuera en otro script.
%[ r , o, f ] =f f cor r ect a( t , y, M)
%
%sal i das de [ ampl i t ud, f ase, f r ecuenci a]
%ent r adas de ( t i empo, f unci on, M)
%
%el t i empo pude ser un vect or como t =5: . 01: 15
%l a f unci n puede ser y=5*cos( 2*pi *10*t ) +3*cos( 2*pi *25*t )
%M es un ent er o i gual o mayor que nmer o de punt os di scr et os,
%de no i nt r oduci r se, ent onces M es el nmer o de punt os di scr et os.
%

f unct i on [ r , o, f ] =f f cor r ect a( t , y, M) ;
i f ( nar gi n == 2)
M=0;
end
t mi n=t ( 1) ;
t max=t ( end) ;
dt =t ( 2) - t ( 1) ;
N= l engt h( t ) ;
i f M<N
M=N;
end
Y=f f t ( y, M) ;
swi t ch r em( M, 2)
case 0 %par
r =abs( Y( 2: M/ 2) ) *2/ N;
o=angl e( Y( 2: M/ 2) ) *2/ N;
f =( 1: ( M- 2) / ( M- 4) : M/ 2) / dt / M;
case 1 %i mpar
r =abs( Y( 2: ( M+1) / 2) ) *2/ N;
o=angl e( Y( 2: ( M+1) / 2) ) *2/ N;
f =( 1: ( M- 2) / ( M- 3) : M/ 2) / dt / M;
end

explicar las variantes del programa

7.3 Ejemplo de GUI para FFT
Existen dos maneras de crear una GUI, aqu presentaremos la mas fcil, emplear GUIDE
como asistente.
1. escribir guide en command prompt
2. seleccionar la hoja en blanco, ver figura 7.1
MATLAB para novatos8 42

Figura 7.1 Pantalla de decisin despus de llamar guide.

3. Agregar los objetos que se deseen, ver figura 7.2 rectngulo rojo. Como ejemplo
hagamos el ejercicio para FFT. Los rectngulos negros indican los textos dinmicos, que
cambian en la ejecucin del programa. El rectngulo verde indican los textos estticos,
que no se modifican durante la ejecucin del programa. El rectngulo prpura indica una
barra deslizable, el rectngulo azul un botn y los rectngulos amarillo las regiones de las
graficas.


Figura 7.2 pantalla de la figura donde se distribuyen los objetos que controlan la
ejecucin del programa. El rectngulo rojo indica el acceso directo a los objetos.

En la figura 7.2 para cada objeto que se agreg, se selecciona con el botn derecho
properties inspector para modificar tag (leyendas que aparecen en el programa) y string
(leyenda que aparecen en la figura). Para nuestro ejemplo se han agregado y modificado
las leyendas como se ve en la tabal 7.1.

Tabla 7.1 Leyendas en la figura
tag sugerida tag definida string sugerida string definida
Texto esttico
text1 text1t Static text t=
text2 text2titulo Static text FFT
text3 text3y Static text y=
text4 text4M Static text valor de M
text5 text5instrucc Static text Instrucciones
MATLAB para novatos8 43
Texto dinmico
edit1 edit1t Edit text 5:.01:15
edit2 edit2M Edit text Edit text
edit3 edit3y Edit text 5*cos(2*pi*10*t)
Barra deslizable
slider1 slider1M
Botn
pushbutton1 button1START push button 1 START
Grfica
axes1 axesoscilo
axes2 axesespectro

4.- Al terminar se salva con un nombre significativo y se generan dos archivos, *.fig y
*.m. El archivo fig tiene toda la informacin del desplegado de los objetos, el archivo
m tiene la programacin de los eventos, vase la figura 7.3.


Figura 7.3 archivos *.fig y *.m generados al salvar el desplegado de los objetos en la
figura. La ilustracin de la derecha es despus de presionar el botn START y haber
terminado de programar el archivo *.m. La ilustracin de la derecha muestra un cdigo
generado por guide al que hay que agregar lo que cada accin en los objetos realizara.

Para concluir el programa solo es necesario agregar las funciones deseadas. Las
modificaciones se agregan en las acciones de los objetos. En este programa solo es
necesario decir lo que sucede al presionar el botn START, y la manera en que se
interrelacionan el control deslizable y el texto dinmico que definen a la variable M.
Adicionalmente es necesario poner atencin en el intercambio de datos dentro de la GUI,
de los textos dinmicos al botn START y del este botn a las graficas.

Modificacin al pushbutton callback
t =eval ( char ( get ( handl es. edi t 1t , ' St r i ng' ) ) ) ;
y=eval ( char ( get ( handl es. edi t 3y, ' St r i ng' ) ) ) ;
t mi n=t ( 1) ;
t max=t ( end) ;
dt =t ( 2) - t ( 1) ;
N= l engt h( t ) ;
M=f l oor ( get ( handl es. sl i der 1M, ' Val ue' ) *2048) ;
Y=f f t ( y, M) ;
r =abs( Y( 2: M/ 2) ) *2/ N;
MATLAB para novatos8 44
o=angl e( Y( 2: M/ 2) ) *2/ N;
f =( 1: ( M- 2) / ( M- 4) : M/ 2) / dt / M;
pl ot ( handl es. axi sosci l o, t , y)
gr i d ( handl es. axi sosci l o, ' on' )
xl abel ( handl es. axi sosci l o, ' t i empo' )
yl abel ( handl es. axi sosci l o, ' f unci on' )
pl ot ( handl es. axi sespect r o, f , r )
gr i d ( handl es. axi sespect r o, ' on' )
xl abel ( handl es. axi sespect r o, ' f r ecuenci a' )
yl abel ( handl es. axi sespect r o, ' ampl i t ud' )

La lnea 1 crea el eje t de los caracteres en edit1t.
La lnea 2 crea a la funcin de los caracteres en edit3y.
La lnea 7 define el valor de M del valor que tenga slider1M.
Las ultimas 8 lneas definen donde de realizarn las acciones en las graficas.

Modificacin al slider callback
M=f l oor ( get ( hObj ect , ' Val ue' ) *2048) ;
l et r asM=num2st r ( M) ;
set ( handl es. edi t 2M, ' st r i ng' , l et r asM)

Estas lneas toman el valor de slider y lo mandan a edit2M

Modificacin al editM callback
M=st r 2num( get ( handl es. edi t 2M, ' St r i ng' ) ) ;
i f ( M>=( get ( handl es. sl i der 1M, ' Mi n' ) *2048) ) &
( M<=( get ( handl es. sl i der 1M, ' Max' ) *2048) )
set ( handl es. sl i der 1M, ' Val ue' , M/ 2048)
el se
set ( hObj ect , ' St r i ng' , ' er r or ' )
end

Estas lneas leen el valor que se introduce como texto, lo compara con los valores
posibles para slider, si esta contenido escribe el nmero y lo transfiere a slider, de no ser,
escribe error.

7.4 Pasarlo a ejecutable

Con el MATLAB compiler se puede escribir
mcc -m ffcorr.m
se selecciona el compilador de los disponibles, si no se tiene alguno especial, MATLAB
ofrece uno propio.
MATLAB para novatos8 45
8 Conexin con C
El propsito principal de esta seccin son los MEX-files, que permiten manejar
subrutinas en C o FORTRAN dentro de MATLAB, aunque tambin es posible prepara
material de MATLAB para ser usado por otros programas e incluso preparar aplicaciones
autocontenidas como se hizo al final de la seccin anterior.

Como se comento anteriormente cuando se desea acelerar algn proceso, en particular
bucles, es posible pedir a MATLAB que realice esa tarea con la ayuda de los archivos
MEX. Estos son alternativas a los archivos m y estn conformados adems de la parte de
computacin por una plataforma de intercambio de datos, recuerde que para MATLAB
todo es un arreglo mientras que en C es necesario especificar el contenido.

Las diferencias con los archivos m son: estos son dependientes de la plataforma en que
sern usados (mexw32 y mexw64 en Windows), el manejo de la memoria es
responsabilidad del programador y no tiene documentacin as que esta tiene que ser
manejada de diferente manera.

Como siempre, es necesario decir que MATLAB es altamente eficiente, y los archivos
MEX no necesariamente son una alternativa de velocidad, pero si la subrutina que desea
usar en MATLAB ya esta diseada y es muy eficiente, se puede usar por este mtodo
como las subrutinas disponibles en www.netlib.com.

Como ejemplo en el directorio de MATLAB esta un ejemplo del programa en C y en
MATLAB, (C:\Program Files\MATLAB\R2006a\extern\examples\mex) yprime.c y
yprime.m, la secuencia de instrucciones para generar el yprime.mexw32 a partir de
yprime.c es la siguiente.

Primero mostremos el archivo m y los resultados para y=[1 2 3 4]

>> cd( [ mat l abr oot ' \ ext er n\ exampl es\ mex' ] )
mex ypr i me. c
>>

>> y=[1 2 3 4];
mu = 1/82.45;
mus = 1-mu;
r1 = norm([y(1)+mu, y(3)]); % Distance to the earth
r2 = norm([y(1)-mus, y(3)]); % Distance to the moon
yp(1) = y(2);
yp(2) = 2*y(4) + y(1) - mus*(y(1)+mu)/r1^3 - mu*(y(1)-mus)/r2^3;
yp(3) = y(4);
yp(4) = -2*y(2) + y(3) - mus*y(3)/r1^3 - mu*y(3)/r2^3;

yp =

MATLAB para novatos8 46
2.0000 8.9685 4.0000 -1.0947

Ahora mostremos el archivo c

#include <math.h>
#include "mex.h"

/* Input Arguments */

#defineT_IN prhs[0]
#defineY_IN prhs[1]


/* Output Arguments */

#defineYP_OUT plhs[0]

#if !defined(MAX)
#defineMAX(A, B) ((A) > (B) ? (A) : (B))
#endif

#if !defined(MIN)
#defineMIN(A, B) ((A) < (B) ? (A) : (B))
#endif

static double mu = 1/82.45;
static double mus = 1 - 1/82.45;


static void yprime(
double yp[],
double *t,
double y[]
)
{
double r1,r2;

r1 = sqrt((y[0]+mu)*(y[0]+mu) + y[2]*y[2]);
r2 = sqrt((y[0]-mus)*(y[0]-mus) + y[2]*y[2]);

/* Print warning if dividing by zero. */
if (r1 == 0.0 || r2 == 0.0 ){
mexWarnMsgTxt("Division by zero!\n");
}

yp[0] = y[1];
MATLAB para novatos8 47
yp[1] = 2*y[3]+y[0]-mus*(y[0]+mu)/(r1*r1*r1)-mu*(y[0]-mus)/(r2*r2*r2);
yp[2] = y[3];
yp[3] = -2*y[1] + y[2] - mus*y[2]/(r1*r1*r1) - mu*y[2]/(r2*r2*r2);
return;
}

void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray*prhs[] )

{
double *yp;
double *t,*y;
unsigned int m,n;

/* Check for proper number of arguments */

if (nrhs != 2) {
mexErrMsgTxt("Two input arguments required.");
} else if (nlhs > 1) {
mexErrMsgTxt("Too many output arguments.");
}

/* Check the dimensions of Y. Y can be 4 X 1 or 1 X 4. */

m = mxGetM(Y_IN);
n = mxGetN(Y_IN);
if (!mxIsDouble(Y_IN) || mxIsComplex(Y_IN) ||
(MAX(m,n) != 4) || (MIN(m,n) != 1)) {
mexErrMsgTxt("YPRIME requires that Y be a 4 x 1 vector.");
}

/* Create a matrix for the return argument */
YP_OUT = mxCreateDoubleMatrix(m, n, mxREAL);

/* Assign pointers to the various parameters */
yp = mxGetPr(YP_OUT);

t = mxGetPr(T_IN);
y = mxGetPr(Y_IN);

/* Do the actual computations in a subroutine */
yprime(yp,t,y);
return;

}

MATLAB para novatos8 48
Despus de configurar el compilador, en caso de disponer de alguno diferente al que
provee MATLAB (mex - set up), y de definir el directorio de trabajo
(cd( [ mat l abr oot ' \ ext er n\ exampl es\ mex' ] ) ) se pide la generacin del
archivo mex.

>>mex ypr i me. c

Que produce el archivo yprime.mexw32 que puede ser usado en MATLAB

>> ypr i me( 1, 1: 4)

ans =

2. 0000 8. 9685 4. 0000 - 1. 0947

>>
Par a l os f or mat os def i ni dos par a cr ear un ar chi vo c par a
conver t i r l o a ar chi vo mex vase l a ayuda de MATLAB en
Ext er nal I nt er f aces.
MATLAB para novatos8 49
9 Simulink
Aqu se presenta una visin superficial que puede permitir iniciarse en el modulo de
Simulink, que bsicamente es en modulo para la solucin numrica de ecuaciones, hasta
sistemas de ecuaciones diferenciales. Oficialmente permite la simulacin dinmica de
sistemas, que pueden ser lineales y nolineales.

La figura 10.1 identifica el acceso directo a Simulink, 10.2 muestra la biblioteca de
funciones de Simulink que se despliegan inicialmente, agrupadas por categoras.


Figura 9.1 Acceso directo a Simulink.

9.1 Simulink para resolver ecuaciones algebraicas.
Con Simulink se puede pedir a MATLAB que ejecute las mismas instrucciones, ahora
presentadas de manera grafica.

Por ejemplo
a
ac b b
y
2
4
2
+
= la raz cuadrtica mayor con a=b=c=1 da
2
3
2
1
i y + = .

Se puede escribir en matlab
>> a=1; b=1; c=1;
>> y=( - b+sqr t ( b^2- 4*a*c) ) / ( 2*a)

y =

MATLAB para novatos8 50
- 0. 5000 + 0. 8660i


Figura 9.2 Representacin en Simulink de la raz cuadrtica mayor. A la derecha esta la
ventana de edicin de dos objetos; la funcin matemtica (raz cuadrada) que puede
seleccionar otras funciones matemticas y la ganancia que multiplica el valor que entra
por el factor de ganancia.

En Simulink, vea la figura 9.2, se ve de esta manera, donde los objetos se toman de la
biblioteca de Simulink, ver la figura 9.3. Los objetos son claros en cuanto a que tienen
entradas y salidas, las entradas son los argumentos y las salidas son los resultados. Para
este tipo de ejemplos los grupos de la biblioteca mas empleados son las funciones
matemticas (Math Operations), las seales empleadas como fuentes (Sources) y los
exhibidores (Sinks).

Los objetos se conectan entre sus puertos y para ejecutar la secuencia se presiona el botn
encerrado en el crculo verde en la figura 9.2.


Figura 9.3 Biblioteca de Simulink, la columna de la izquierda muestra las categoras.
MATLAB para novatos8 51
9.2 Simulink para resolver ecuaciones diferenciales
Como ejemplo de uso del Simulink como herramienta para la solucin de ecuaciones
diferenciales se repite el ejemplo de la seccin 5 de la siguiente ecuacin diferencia.

) 5 . 1 cos( 5 05 . 3 5 1 2
3
2
2
t t f
dt
df
dt
f d
+ + = + +
con las condiciones iniciales f(0)=1.3 y 8
0
=
dt
df
.

La figura 9.4 muestra este ejemplo. Es interesante notar el ambiente grafico de trabajo en
Simulink, donde las jerarquas se definen por medio de flechas y los operadores por
medio de cajas que realizan las funciones deseadas. El operador derivada se muestra con
la etiqueta integrator, la manera de trabajar en Simulink es despejar la derivada de
orden mayor que en la figura 9.4 se encuentra a la derecha del cuadro rojo e igualarla a
g(t) y a las derivadas de orden menor.


Figura 9.4 Editor de Simulink donde se muestra el ejemplo de una ecuacin diferencial
simple.

Los osciloscopios son receptores de datos, en esta simulacin para 10 segundos, crculo
verde en la figura 9.4 y el botn para dar inicio a la simulacin se encuentra sealado en
la figura 9.4 por medio del crculo azul.

MATLAB para novatos8 52

Figura 9.5 Simulacin de los primeros 10 segundos, de izquierda a derecha ase muestra la
funcin f, su primera derivada y su segunda derivada.

La figura 9.5 muestra los resultados de la simulacin para 10 segundos, de la funcin y
sus dos derivadas, note en la figura las condiciones iniciales.

9.3 Simulink para sistemas de ecuaciones
Veamos ahora un ejemplo para un sistema de ecuaciones como el siguiente,

dt
dI
L
V
dt
dI
L
V
dt
dV
C
R
V V
I
R
V
I
dt
dV
C
R
V V
I
R
V
I
L
L
L fuente
L fuente
2
2
2
1
1
1
2
2
3
1 2
2
2
2
2
1
1
3
2 1
1
1
1
1
=
=
=





9.6 Programa para el sistema de ecuaciones, los mdulos se describen en la figura 9.7
MATLAB para novatos8 53


9.7 Modulos empleados en la figura 9.6.

En las figuras 9.6 y 9.7 se presenta la informacin que describe a las ecuaciones, en este
caso se hizo uso extensivo de subsystem. Este modulo esta en la biblioteca de Simulink y
al agregarlo al proyecto solo incluye un conector de entrada y un conector de salida, se
pueden agregar ms y construir la estructura tan elaborada como sea necesario.

En estos ejemplos simples no se ha hecho hincapi en configuracin de parmetros de la
simulacin, la figura 9.8 muestra la ventana que se despliega al seleccionar la pestaa de
simulacin en el editor de Simulink y seleccionar parmetros de configuracin.


Figura 9.8 Configuracin de los parmetros de la simulacin.

El algoritmo de solucin (solver) se puede cambiar ode45 es el mas recomendado para
iniciar, se debe consulta la ayuda para decidir sobre las opciones de simulacin. Las mas
solicitadas son la eleccin del tiempo de simulacin, el delta de la variable independiente
y las tolerancias del error, vease la figura 9.8.
MATLAB para novatos8 54

En esta introduccin no se ha hecho hincapi en la transferencia de datos entre MATLAB
y Simulink, pero es muy verstil al igual que guardar los resultados.
MATLAB para novatos8 55

10 SimMechanics

SimMechanics es un ambiente para modelar sistemas dinmicos que emplea diagramas a
bloques. Aqu se disean y simulan mecanismos rgidos y su movimiento de acuerdo a
las leyes dinmicas de Newton.

Con SimMechanics se puede modelar y similar sistemas mecnicos con un conjunto de
herramientas que permiten especificar cuerpos, su posible movimiento y sus restricciones
dinmicas, el sistema mecnico se representa por medio de conexiones entre bloques.

Aqu es posible exhibir y animar representaciones simplificadas de la simulacin.
SimMechanics trabaja en el ambiente de Simulink y es completamente compatible con el.
La diferencia es que Simulink representa operaciones matemticas mientras que
SimMechanics representa componentes fsicos y relaciones entre ellos.

Si se quisiera representar un pndulo simple, idealizado.

Figura 10.1 Esquema del pndulo simplificado.
Con las consideraciones de que el punto de apoyo de la cuerda no se desplaza, que el
alambre que sostiene la masa no tiene peso, ni cambia de longitud, ni frena al pndulo por
friccin, que la masa es puntual y que la nica fuente de friccin es la rotula con el
apoyo. Estas consideraciones en general se omiten en SimMechanics y se puede hacer
una simulacin menos idealizada.

Es importante mencionar algunos preliminares; las coordenada se pueden fijar en funcin
de un punto universal de referencia, o referidas al centro de masa o referidas al punto de
unin con el elemento adjunto. La geometra se define por el momento de inercia, una
esfera homognea de radio r tiene un momento de inercia,

eye(3)
1 0 0
0 1 0
0 0 1
r r I =

=

un objeto puntual tiene una matriz cero.

m
g
l
b=coeficiente que se
opone a la velocidad
MATLAB para novatos8 56
Para iniciar, crear un nuevo modelo, se parte de la biblioteca de Simulink y se transfieren
los iconos del modelo que se desean. En la figura 10.2 se muestran los iconos disponibles
para SimMechanics, en particular en la seccin de cuerpos, los primeros tres sern
comunes en todos los proyectos, Body representa cualquier objeto fsico representado
por masa y geometra; Gr ound seala el punto coordenado de referencia y Machi ne
Envi r onment se emplea para definir la aceleracin de la gravedad.


Figura 10.2 Biblioteca de SimMechanics dentro de la Simulink.


Figura 10.3 Proyecto de un pndulo simplificado.

MATLAB para novatos8 57

Figura 10.4 Simulacin del mecanismo, con los controles se puede modificar la
visualizacin, iniciarla y generar pelcula del proceso.


La figura 10.2 presenta los iconos interconectados que simulan un pendulo simplificado.


g
k
m