You are on page 1of 15

lgebra (Curso 2012-13): Prcticas de Matlab

Prctica n 1.
1
1
3
4
5
6
7
9
10
12
Introduccin a las prcticas
Ejercicio 01: Empezar a trabajar en Matlab
Ejercicio 02: Introduccin de vectores y matrices desde teclado
Ejercicio 03: Operaciones con vectores y matrices
Ejercicio 04: Descomposicin A=L+D+U con ayuda (Help)
Ejercicio 05: Utilizacin del operador barra invertida (\)
Ejercicio 06: Utilizacin del operador dos puntos (:)
Ejercicio 07: Uso de las funciones max, min y find
Ejercicio 08: Empezar a trabajar con ficheros *.m
Ejercicio 09: Programacin en Matlab
Ejercicio 10: Utilizar el Debugger 15
Introduccin a las prcticas de lgebra
La finalidad de esta prctica es familiarizarse con Matlab, que dispone de un lenguaje de pro-
gramacin de 4 generacin, mucho ms fcil de aprender y utilizar que C y Pascal, sobre
todo para clculos tcnicos y cientficos. Los primeros ejercicios son muy fciles, aunque po-
co a poco se van complicando. No importa que no haya tiempo de llegar hasta el final, pero
conviene haber ledo el guin antes de empezar la prctica. La prctica puede no superarse
si el trabajo desarrollado no es satisfactorio. Para facilitar lectura de este guin sin estar ejecu-
tando Matlab se incluyen en el mismo muchos de los resultados que Matlab mostrara
Ejercicio 01: Empezar a trabajar en Matlab
En primer lugar arranque Matlab, que en este aspecto es como cualquier otra aplicacin de
Windows: la forma ms sencilla es ejecutarlo desde el men Inicio. Cuando arranca Matlab se
abre una ventana del tipo de la indicada en la figura. Esta configuracin puede ser cambiada
curso 2012-13: Prcticas de lgebra Pgina 2
2
fcilmente por el usuario. En el caso de que el aspecto de Matlab sea muy diferente al mostra-
do, se seleccionar la opcin Desktop Layout/Default en el men View.
La ventana principal de Matlab se encuentra dividida en tres partes o zonas, aunque en reali-
dad aparecen cinco componentes, pues las sub-ventanas de la parte izquierda contienen dos
componentes superpuestos que se permutan por medio de la pestaa correspondiente.
La ventana ms importante es la Command Window, que aparece a la derecha y que ser la
ms utilizada en estas prcticas. En ella se ejecutan los comandos de Matlab, a continuacin
del prompt o aviso caracterstico (>>), que indica que Matlab espera recibir instrucciones.
En la parte superior izquierda de la pantalla aparecen dos ventanas tambin muy tiles: en la
parte superior aparece la ventana Workspace, que se puede alternar con Current Directory
clicando sobre la pestaa inferior. El Workspace va almacenando informacin sobre todas las
variables que hayan sido definidas en la actual sesin de trabajo. La ventana Current Directo-
ry permite explorar los directorios del ordenador de forma anloga a la del Explorador u otras
aplicaciones de Windows, pudiendo cambiar de directorio activo o creando uno nuevo. Ma-
tlab mantiene en todo momento un directorio o carpeta activa, que es la seleccionada en esta
ventana. Esta ventana muestra los ficheros de dicha carpeta, que es donde se guardarn los
programas creados por el usuario (ficheros con extensin *.m) y que luego se ejecutarn des-
de la Command Window o desde otros programas que estn corriendo.
En la parte inferior izquierda aparece otra ventana, la Command History, que muestra las
ltimas sentencias o instrucciones comandos ejecutadas en la Command Window. Estas
instrucciones se pueden volver a ejecutar haciendo doble clic sobre ellas. Clicando sobre una
de ellas con el botn derecho del ratn aparece un men contextual con las posibilidades dis-
ponibles en ese momento. Para editar o modificar uno de estos comandos hay que copiarlo
antes a la Command Window con los tradicionales Copy y Paste.
Para recuperar la configuracin inicial despus de haberla modificado voluntaria o acciden-
talmente, basta elegir Desktop Layout/Default en el men View.
Como preparacin inmediata para la prctica cree una carpeta con su nmero de DNI
(con dgitos) y pr1alg, como por ejemplo 03421pr1alg, en la carpeta Mis Documentos
del PC. Esta carpeta se puede crear con Matlab ejecutando el comando New/M-File en el
men File. Antes de seguir adelante, ejecute en la Command Window la sentencia:
>> f or mat compact
curso 2012-13: Prcticas de lgebra Pgina 3
3
Ejercicio 02: Introduccin de vectores y matrices desde teclado
Matlab es un programa pensado sobre todo para operar con vectores y matrices. Inicialmente
se utilizar la Command Window, desde la que se pueden definir vectores y matrices, que
despus se utilizarn en distintas expresiones. Adems, al mismo tiempo, se pueden obtener y
mostrar los resultados. As, Matlab se puede ver como una potente calculadora matricial.
En Matlab las matrices se definen por filas. Los elementos de una misma fila estn separados
por espacios en blanco o comas, mientras que las filas estn unas de otras separadas por pul-
saciones de la tecla Intro o por caracteres punto y coma (;).
Como ejemplo, teclee la siguiente sentencia en la Command Window, tras el prompt (>>):
>> [ 1 2 3; 4 5 6; 7 8 9]
Al pulsado Intro Matlab considera que la expresin ha terminado, la ejecuta y muestra el re-
sultado, que en este caso es:
ans =
1 2 3
4 5 6
7 8 9
donde ans es un nombre predefinido de variable en el que se guarda el valor del ltimo resul-
tado obtenido, en este caso la matriz que se acaba de definir.
Una variable es un nombre que se da a una entidad numrica como una matriz o un vector. El
valor de esa variable se puede cambiar a lo largo de una sesin de Matlab. La forma ms nor-
mal de asignar o cambiar el valor de una variable es colocndola a la izquierda del operador
de asignacin (=)
Var i abl e = expr esi n
Matlab distingue entre maysculas y minsculas en los nombre de variables. Estos deben
empezar siempre por una letra (El carcter guin bajo (_) se considera como letra) y pueden
constar de hasta 63 letras y nmeros, evitando caracteres en blanco o especiales. Se sugiere
que se utilicen maysculas para matrices y minsculas para vectores y escalares.
Para empezar a definir variables asigne la matriz anterior
1
a la variable A.
>> A=[ 1 2 3; 4 5 6; 7 8 9]
El resultado ser ahora:
A =
1 2 3
4 5 6
7 8 9
Cree ahora un vector b como se muestra a continuacin:
>> b=[ - 1; 0; 1] %vect or col umna
2
b =
- 1
0
1
Para acceder a los elementos de un vector se pone el ndice entre parntesis (por ejemplo
b(3) b(i)). Los elementos de las matrices se acceden poniendo los dos ndices entre parnte-
1
Para recuperar la sentencia anterior utilice laflecha ascendente () o la ventana Command History.
2
Matlab considera comentarios todo lo que va desde el carcter tanto por ciento (%) hasta el final de la
lnea.
curso 2012-13: Prcticas de lgebra Pgina 4
4
sis, separados por una coma (por ejemplo A(1,2) A(i,j)). Las matrices se almacenan por
columnas (aunque se introduzcan por filas) y teniendo en cuenta esto puede accederse a cual-
quier elemento de una matriz con un solo subndice. Por ejemplo, si A es una matriz (3x3) se
obtiene el mismo valor escribiendo A(1,2) que escribiendo A(4).
Por ejemplo, modifique la matriz A de manera que el valor del elemento (3,3) valga 10:
>> A( 3, 3) =10
A =
1 2 3
4 5 6
7 8 10
Para terminar este ejercicio, teclee el comando whos para que Matlab le informe de las varia-
bles que han sido definidas hasta este momento:
>> whos
Name Si ze Byt es Cl ass
A 3x3 72 doubl e ar r ay
b 3x1 24 doubl e ar r ay
Gr and t ot al i s 12 el ement s usi ng 96 byt es
Otra opcin para conocer las variables que han sido definidas, es utilizar la ventana Workspa-
ce Browser o explorador del espacio de trabajo de Matlab. Para examinar el contenido de las
variables ya definidas, basta hacer doble clic sobre ellas y aparece el Array Editor, desde el
que se pueden ver los elementos de cualquier matriz o vector; tambin permite modificarlos
clicando sobre la celda correspondiente.
Puede observarse como el comando clear hace desaparecer de la memoria todas las variables
previamente definidas.
Ejercicio 03: Operaciones con vectores y matrices
En este ejercicio se utilizaran la matriz A (despus de ser modificada) y el vector b definidos
en el ejercicio anterior (si se han borrado con clear habr que volverlos a crear).
Matlab puede operar con matrices por medio de operadores y por medio de funciones. Algu-
nos de estos operadores son la suma (+), el producto (*), la transpuesta ('). Por ejemplo, una
sencilla operacin con A es su traspuesta. Para calcular A' (traspuesta de A) teclee:
>> A'
ans =
1 4 7
2 5 8
3 6 10
Como el resultado de la operacin no ha sido asignado a ninguna otra matriz, se utiliza auto-
mticamente el nombre de variable por defecto (ans, de answer). Teclee ahora:
>> B=A'
B =
1 4 7
2 5 8
3 6 10
Ahora ya estn definidas las dos matrices A y B, y es posible seguir operando con ellas. Rea-
lice ahora el producto B*A (deber resultar una matriz simtrica):
>> B*A
ans =
66 78 97
78 93 116
97 116 145
curso 2012-13: Prcticas de lgebra Pgina 5
5
Matlab tiene en cuenta la diferencia entre vectores fila y vectores columna. Por ejemplo, si se
intenta sumar A y b se obtendr el siguiente mensaje de error:
>> A+b
??? Er r or usi ng ==> +
Mat r i x di mensi ons must agr ee.
Matlab dispone de un gran nmero de funciones incorporadas. Tambin los usuarios pueden
definir sus propias funciones como se ver en la parte final de esta prctica.
Como ejemplo de uso de funcin, calcule el determinante de A con la funcin det( ). Teclee:
>> det ( A)
ans =
- 3
Resuelva ahora el sistema Ax=b por medio de la matriz inversa (calculada mediante la fun-
cin inv( )), calcule luego el residuo r=b-A*x para comprobar el resultado:
x=i nv( A) *b, r =b- A*x
x =
1. 6667
- 1. 3333
- 0. 0000
r =
1. 0e- 014 *
0. 0222
0. 0444
0. 1332
Obsrvese cmo se han escrito las dos instrucciones en una misma lnea, separndolas por
comas. En Matlab se pueden incluir varias expresiones en una misma lnea separndolas por
comas (,) o puntos y coma (;). Si se desea que una expresin contine en la lnea siguiente,
hay que introducir tres puntos (...) antes de pulsar Intro.
Si una expresin termina en punto y coma (;) su resultado se calcula, pero no se muestra en
pantalla. Esta posibilidad es interesante, tanto para evitar la escritura de resultados interme-
dios, como para evitar la impresin de matrices de gran tamao.
Ejercicio 04: Descomposicin A=L+D+U con ayuda (Help)
Matlab dispone de un excelente Help o Ayuda con el que se puede encontrar la informacin
que se desee. En el men Help de la ventana principal se encuentran las siguientes opciones:
1. Full Product Family Help. En la que se puede buscar informacin general sobre Ma-
tlab o sobre productos de la familia.
2. Matlab Help. En la que se puede buscar ayuda sobre Matlab o sobre la funcin o el
concepto que se desee. La portada de esta ayuda tiene tres captulos principales: Lear-
ning Matlab, que contiene distintos apartados de introduccin al programa; Finding
Functions and Properties, que permite acceder a informacin concreta sobre las dis-
tintas funciones o propiedades de los objetos grficos; y Printing the Documentation,
que da acceso a versiones completas e imprimibles de los manuales de Matlab. En la
parte izquierda de la ventana se encuentran entre otras las pestaas: Contents, con la
que aparece un ndice temtico estructurado; Index, un ndice por palabras; y Search
que contiene un formulario de bsqueda.
3. Using the Desktop. Contiene informacin detallada sobre como utilizar y configurar el
entorno de desarrollo.
curso 2012-13: Prcticas de lgebra Pgina 6
6
4. Using the Command Windows. Contiene informacin sobre las capacidades de la
Command Window.
5. Demos. Da acceso a ejemplos resueltos con Matlab.
Tambin se puede recurrir al Help desde la Command Window. Como ejemplo, teclee:
>> hel p
>> hel p di ag
Realice a continuacin este ejercicio: consiste en formar una matriz aleatoria M de tamao
44 y descomponerla en la suma de tres matrices en la forma:
M = L+ D+ U
donde D es una matriz diagonal, L es una matriz triangular inferior (con diagonal nula) y U es
una matriz triangular superior (tambin con diagonal nula). Para calcular L, D y U se utiliza-
rn las funciones diag, triu y tril, Comience por leer la ayuda que ofrece Matlab sobre la fun-
cin diag, tecleando en la lnea de comandos:
>> hel p di ag
Para las otras dos funciones tril y triu, utilice la ventana de ayuda, ejecutando el comando
Matlab Help del men Help, y buscando las funciones indicadas con los recursos que dichas
ventanas ofrecen.
Se trata ahora de formar una matriz aleatoria de tamao 44 y separar las matrices L, D y U.
La sentencia incompleta, para que Vd. sustituya los caracteres (?) podra ser la siguiente:
>> M=r and( 4) , L=t r i l ( ?) , D=?, U=t r i u( ?) , B=L+D+U, M- B
Ejercicio 05: Utilizacin del operador barra invertida (\)
El operador barra invertida (\) es uno de los ms importantes de Matlab, pues resuelve toda
una familia de problemas: dado un sistema de ecuaciones Ax=b, Matlab calcula la solucin
por medio de la instruccin x=A\b. Para comprobarlo, ejecute el siguiente ejemplo:
>> A=r and( 4) , b=r and( 4, 1) , x=A\ b, r =b- A*x
Aunque el resultado obtenido es el mismo que si se hubiese utilizado la expresin
x=inv(A)*b, el operador \ necesita menos operaciones aritmticas (lo cual es muy importante
cuando las matrices son de gran tamao) y es adems un operador inteligente que:
1. Aprovechar la forma de la matriz A para evitar operaciones innecesarias, por ejemplo
cuando es simtrica, diagonal o triangular.
2. Es capaz de resolver sistemas indeterminados (menos ecuaciones que incgnitas), en cu-
yo caso halla una solucin con no ms de r elementos distintos de cero, siendo r el rango
de la matriz (dando valor cero a las variables libres o independientes).
3. Cuando el sistema es incompatible y no tiene solucin (por ejemplo cuando hay ms
ecuaciones que incgnitas), el resultado de este operador es el vector de mnimo error
cuadrtico en las ecuaciones dadas (aunque no cumpla exactamente ninguna de ellas).
Por ejemplo, considrese la interseccin de los planos x=0 y x+y=2. Se trata de dos planos
paralelos al eje z que se cortan segn una recta paralela al eje z que pasa por el punto (0, 2, 0).
Este sistema de dos ecuaciones con tres incgnitas es indeterminado y tiene infinitas solucio-
nes. Sin embargo, el operador (\) de Matlab es capaz de encontrar una solucin con al menos
una componente nula. Comprubelo ejecutando:
>> A=[ 1 0 0; 1 1 0] , b=[ 0 2] ' , x=A\ b
curso 2012-13: Prcticas de lgebra Pgina 7
7
En el caso de los sistemas incompatibles el operador (\) encuentra una solucin aproximada
utilizando el mtodo de los mnimos cuadrados. Considrese como ejemplo la interseccin de
las tres rectas siguientes en el plano: el eje x (y=0), el eje y (x=0) y la recta que pasa por los
puntos (0,1) y (1,0) (y+x=1). Estas tres rectas no tienen ningn punto en comn, pero Matlab
es capaz de hallar el punto que minimiza el cuadrado del mdulo del residuo:
>> A=[ 0 1; 1 0; 1 1] , b=[ 0 0 1] ' , x=A\ b, r =b- A*x
Ejercicio 06: Utilizacin del operador dos puntos (:)
El operador dos puntos (:) es muy importante en Matlab y tiene varios usos. Para empezar,
defnase un vector x con el siguiente comando:
>> x=1: 10
x =
1 2 3 4 5 6 7 8 9 10
En cierta forma se podra decir que el operador (:) representa un rango: en este caso, los n-
meros enteros entre el 1 y el 10. Por defecto el incremento es 1, pero esto puede modificarse.
Adems este operador puede tambin utilizarse con otros valores enteros y reales, positivos o
negativos. Para comprobarlo teclee las siguientes lneas:
>> x=1: 2: 10
x =
1 3 5 7 9
>> x=1: 1. 5: 10
x =
1. 0000 2. 5000 4. 0000 5. 5000 7. 0000 8. 5000 10. 0000
>> x=10: - 1: 1
x =
10 9 8 7 6 5 4 3 2 1
Puede verse que, por defecto, este operador produce vectores fila. Si se desea obtener un vec-
tor columna basta trasponer el resultado con el carcter (').
A continuacin se vera otro uso del operador dos puntos (:) tambin muy importante. Se va a
utilizar junto con el direccionamiento indirecto, que consiste en acceder a los elementos de
un vector o matriz por medio de los ndices contenidos en uno o ms vectores.
A continuacin ejecute los siguientes comandos, observando el resultado:
>> A=magi c( 6)
A =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
Extraiga las filas 2, 3 y 4 de la matriz A utilizando el comando:
>> A( 2: 4, : )
ans =
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
En este caso el primer (:) se utiliza para establecer un rango, mientras que el segundo (:) in-
dica "todas las columnas" o "todos los elementos de la fila correspondiente".
Para extraer filas no consecutivas se utiliza un vector con los ndices de las filas a extraer:
>> A( [ 1, 3, 6] , : )
curso 2012-13: Prcticas de lgebra Pgina 8
8
ans =
35 1 6 26 19 24
31 9 2 22 27 20
4 36 29 13 18 11
obien, como forma alternativa, utilizando un vector auxiliar in:
>> i n=[ 1, 3, 6] , A( i n, : )
i n =
1 3 6
ans =
35 1 6 26 19 24
31 9 2 22 27 20
4 36 29 13 18 11
Es muy fcil construir expresiones anlogas para columnas, en lugar de filas. Ejectense co-
mo ejercicio los siguientes comandos (se omite la salida para ahorrar papel en este guin):
>> A( : , [ 1, 3, 6] ) ;
>> A( : , [ 1: 4] ) ;
Para extraer los elementos que estn en unas filas y columnas determinadas se utilizan dos
vectores de ndices, como en el siguiente ejemplo:
>> i f i l =[ 1: 3] , i col =[ 1, 2, 6] , A( i f i l , i col )
i f i l =
1 2 3
i col =
1 2 6
ans =
35 1 24
3 32 25
31 9 20
El operador dos puntos (:) y el direccionamiento indirecto a travs de vectores de ndices no
slo se utilizan para extraer elementos de una matriz; tambin se pueden utilizar a la izquierda
de una asignacin (operador =) para modificar selectivamente una parte de un vector o una
matriz. Por ejemplo, para hacer cero las filas 1 y 3 de la matriz A:
>> B=A; B( [ 1, 3] , : ) =zer os( 2, 6)
B =
0 0 0 0 0 0
3 32 7 21 23 25
0 0 0 0 0 0
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
En este caso es muy importante que las matrices que aparecen a ambos lados del operador (=)
tengan el mismo tamao; si no lo tienen, Matlab da un mensaje de error.
Es interesante conocer la forma que utiliza Matlab para borrar filas y columnas de una matriz,
consistente en asignar la matriz vaca [] a las filas o columnas que se desean eliminar. Ma-
tlab no permite borrar ms que filas o columnas completas. Obsrvese el siguiente ejemplo:
>> B( 1: 3, : ) =[ ]
B =
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
Finalmente, realcese el siguiente ejercicio, de gran utilidad prctica: Dado el conjunto de
ndices de un vector x de dimensin n (in=[1:n]), y un subconjunto in1 de ndices de los ele-
mentos que cumplen una determinada condicin, hallar el subconjunto in2 complementario de
in1 (in2 est formado por los ndices que pertenecen a in y no a in1). Utilizar las siguientes
sentencias de partida:
curso 2012-13: Prcticas de lgebra Pgina 9
9
>> i n=[ 1: 10] , i n1=[ 1, 6, 7] , i n2=i n, i n2( i n1) =[ ]
i n =
1 2 3 4 5 6 7 8 9 10
i n1 =
1 6 7
i n2 =
1 2 3 4 5 6 7 8 9 10
i n2 =
2 3 4 5 8 9 10
Ejercicio 07: Uso de las funciones max, min y find
Las funciones max, min y find tienen una gran importancia en Matlab. El objetivo de este
ejercicio es practicar un poco con ellas. Las funciones max y min son funciones que actan
sobre vectores, calculando sus valores algebraicos mximos y mnimos. Cuando se ejecutan
sobre una matriz se aplican a cada columna por separado y dan como resultado un vector con
los resultados de su aplicacin a cada una de las columnas.
Por ejemplo, frmese una matriz A=magic(6) y aplquense las funciones max y min:
>> A=magi c( 6)
A =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
>> max( A)
ans =
35 36 34 26 27 25
>> mi n( A)
ans =
3 1 2 12 10 11
Si se desea calcular el mximo elemento de toda la matriz basta volver a aplicar la funcin
max al vector de mximos de columnas que resulta:
>> max( max( A) )
ans =
36
Las funciones max y min se pueden utilizar tambin con dos valores de retorno y en ese caso
devuelven tambin la posicin que el mximo o el mnimo ocupaba en el vector original.
A continuacin se propone al alumno un problema bastante difcil (para esta primera prcti-
ca): se va a calcular el valor mnimo (vmin) de la matriz A, y la fila (fmin) y columna (cmin)
en las que aparece. Estas operaciones se har en una nica lnea de comandos, separando los
distintos comandos o instrucciones por comas. Ejecute la sentencia:
A=magi c( 6) , [ Ami ns, mi ns] =mi n( A) , [ vmi n, cmi n] =mi n( Ami ns) , f mi n=mi ns( cmi n)
La funcin find permite hallar los ndices de los elementos de un vector o matriz que cumplen
una determinada condicin. Por ejemplo, para saber los elementos de la matriz A=magic(6)
que tienen un valor mayor que 30 se puede utilizar la sentencia:
>> A=magi c( 6) , i =f i nd( A>30)
A =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
curso 2012-13: Prcticas de lgebra Pgina 10
10
i =
1
3
8
12
16
17
Si el resultado de find se recoge en un nico valor de retorno, se devuelve la posicin de los
elementos que cumplen la condicin especificada considerando que la matriz se almacena
como vector, por columnas. Por ejemplo, el valor 8 en una matriz 66 es el segundo elemento
de la segunda columna. Si se recogen dos valores de retorno, se devuelven los ndices de fila y
de columna que cumplen la condicin especificada. Ejecutar como ejemplo la sentencia:
>> A=magi c( 6) , [ i , j ] =f i nd( A>30) ; [ i , j ]
El resultado de la funcin find puede ser utilizado para realizar determinadas operaciones
sobre una matriz. Por ejemplo, si en la matriz A=magic(6) se desea dar un valor 100 a todos
los elementos que tienen un valor mayor que 25 se puede utilizar la sentencia:
>> A=magi c( 6) ; i n=f i nd( A>25) ; A( i n) =100
A =100 1 6 100 19 24
3 100 7 21 23 25
100 9 2 22 100 20
8 100 100 17 10 15
100 5 100 12 14 16
4 100 100 13 18 11
Tambin se podra utilizar find para localizar la posicin del mximo elemento de una matriz,
como por ejemplo con la sentencia:
>> A=magi c( 6) ; maxi mo=max( max( A) ) , [ f max, cmax] =f i nd( A==maxi mo)
maxi mo =
36
f max =
6
cmax =
2
Como ejemplo de aplicacin final, se pide crear una matriz aleatoria 1010 y modificarla de
modo que todos los elementos menores que 0.2 se hagan cero y todos los elementos mayores
que 0.8 se hagan 1:
A=r and( 10) ; A( f i nd( A<0. 2) ) =0; A( f i nd( A>0. 8) ) =1
Ejercicio 08: Empezar a trabajar con ficheros *.m
Los ficheros con extensin (.m) son ficheros de texto sin formato (llamados tambin ficheros
ASCII) que constituyen el centro de la programacin en Matlab. Estos ficheros pueden crear-
se y modificarse con un editor de textos cualquiera, tal como el Bloc de Notas, pero la mejor
opcin es utilizar el editor de Matlab, que permite tanto crear y modificar estos ficheros, co-
mo ejecutarlos paso a paso para ver si contienen errores (proceso de Debug o depuracin).
Existen dos tipos de ficheros *.m, los ficheros de comandos y las funciones:
A) Ficheros de comandos:
Los ficheros de comandos o scripts son ficheros con un nombre tal como prueba1.m que con-
tienen una sucesin de sentencias o comandos de Matlab, anloga a la que se tecleara en el
uso interactivo del programa. Dichos comandos se ejecutan sucesivamente cuando se teclea
en la Command Window el nombre del fichero que los contiene (sin la extensin), es decir
cuando se teclea prueba1 segn el ejemplo considerado. El fichero de comandos se puede
curso 2012-13: Prcticas de lgebra Pgina 11
11
ejecutar desde la lnea de comandos de Matlab (desde la Command Window), desde otro fi-
chero *.m o incluso se podra llamar a s mismo de modo recursivo.
Seleccione la opcin New/M-file del men File. Se abrir la ventana del Editor/Debugger. En
esta ventana escriba las siguientes sentencias
3
:
%f i cher o pr ueba1. m
cl ear al l
A=r and( 3, 3)
B=A'
C=i nv( A)
D=C*A
di sp( ' El pr ogr ama ha t er mi nado' )
Ahora, grabe el programa con el nombre prueba1.m en el directorio que cre al comienzo de
la prctica, seleccionando Save As... en el men File. Para ejecutarlo, teclee prueba1 en la
lnea de comandos. Los resultados de las distintas sentencias contenidas en el fichero prue-
ba1.m aparecern en la Command Window de Matlab.
Cuando un fichero de comandos, llamado por ejemplo file1.m, se ejecuta desde la lnea de
comandos, las variables creadas por las sentencias contenidas en dicho fichero pertenecen al
espacio de trabajo base de Matlab, esto es, son variables con el mismo carcter que las que se
crean interactivamente. Por el contrario, si se ejecuta desde una funcin, las variables que crea
dicho fichero pertenecen al espacio de trabajo de la funcin.
Observe que en la ventana Wordspace Browser aparecen las variables que se han definido en
el fichero que se acaba de ejecutar. Haga doble clic sobre una de ellas y observe el resultado.
B) Funciones:
Matlab permite definir funciones de usuario enteramente anlogas a las suyas. Las funciones
definidas en ficheros *.m se caracterizan porque la primera lnea (distinta de un comentario)
tiene la forma:
function [lista de valores de retorno] = funcname(lista de argumentos)
donde funcname es el nombre de la funcin; entre corchetes y separados por comas van los
valores de retorno (siempre que haya ms de uno), y entre parntesis tambin separados por
comas los argumentos. Puede haber funciones sin valor de retorno y tambin sin argumentos.
Recurdese que los argumentos son los datos de la funcin y los valores de retorno sus re-
sultados. Matlab pasa siempre los argumentos por valor. Si no hay valores de retorno se omi-
ten los corchetes y el signo igual (=); si slo hay un valor de retorno no hace falta poner cor-
chetes. Tampoco hace falta poner parntesis si no hay argumentos.
Teclee ahora en el Editor/Debugger las siguientes sentencias:
%f unci on pr ueba2. m
f unct i on [ D] =pr ueba2( A)
B=A' ;
C=i nv( A) ;
D=C*A;
Grbelo con el nombre prueba2.m de la misma manera que se grab el fichero prueba1.m.
Ahora desde la Command Window, borre todas las variables existentes (con clear all) y defi-
na la matriz aleatoria A de orden 3 (ejecute para ello la funcin de Matlab rand(3)). Utilice
con esta matriz la funcin que se acaba de definir:
>> A=r and( 3) , B=pr ueba2( A)
3
Se recuerda que todo lo que va desde el carcter tanto por ciento (%) hasta el final de la lnea es un comenta-
rio y que cuando una sentencia termina en punto y coma (;) no se imprime su resultado por pantalla.
curso 2012-13: Prcticas de lgebra Pgina 12
12
Las variables definidas dentro de una funcin son variables locales, en el sentido de que son
inaccesibles desde otras partes del programa y en el de que no interfieren con variables del
mismo nombre definidas en otras funciones o partes del programa. Se puede decir que perte-
necen al propio espacio de trabajo de la funcin y no son vistas desde otros espacios de tra-
bajo.
Dentro de la funcin, los valores de retorno deben ser calculados en algn momento. La eje-
cucin de una funcin termina cuando se llega a su ltima sentencia ejecutable, a no ser que
la sentencia return est incluida dentro del cdigo de la funcin, en cuyo caso se devuelve
inmediatamente el control al programa que realiz la llamada a dicha funcin.
Ejercicio 09: Programacin en Matlab
Matlab es muy fcil de programar. En esta prctica se vern los elementos bsicos de progra-
macin: las sentencias de control (bifurcaciones y bucles) y la escritura de resultados:
A) Sentencias de control
Las sentencias de control permiten la selectividad y la repeticin en la ejecucin de senten-
cias, dependiendo de si se cumple o no una condicin. Para construir estas condiciones Ma-
tlab dispone de los siguientes operadores relacionales:
< menor que
> mayor que
<= menor o igual que
>= mayor o igual que
== igual que
~= distinto que
4

Con ellos se pueden comparar escalares, vectores o matrices
5
del mismo tamao. Si la rela-
cin se cumple el resultado es 1 (true), y si no se cumple el resultado es 0 (false).
En el caso que se quiera exigir el cumplimiento de condiciones mltiples o compuestas, di-
chas condiciones se combinarn mediante los siguientes operadores lgicos:
& and
| or
~ negacin lgica
Las sentencias de control pueden ser de dos tipos: bifurcaciones y bucles.
A.1. Bifurcaciones if e ifelseif
Las bifurcaciones permiten realizar una u otra operacin segn se cumpla o no una determi-
nada condicin.
SENTENCIA IF
La sentencia if, en una de sus formas ms simples, tiene el siguiente esquema y sintaxis:
i f condi ci n
sent enci as1
4
El carcter (~) se obtiene en los PCs pulsando sucesivamente las teclas 1, 2 y 6 manteniendo Alt pulsada.
5
A==B se cumple si todos los elementos de la matriz son iguales dos a dos, y A~=B se cumple si todos los
elementos son diferentes dos a dos.
curso 2012-13: Prcticas de lgebra Pgina 13
13
el se
sent enci as2
end
Si la condicin se cumple (true) se ejecutar sentencias1; en caso contrario se ejecutar sen-
tencias2. La opcin else puede ser omitida, en cuyo caso no se hace nada si no se cumple la
condicin.
Se pueden encadenar varias sentencias if, con la siguiente forma general:
i f condi ci on1
sent enci as1
el sei f condi ci on2
sent enci as2
el sei f condi ci on3
sent enci as3
el se
sent enci as4
end
La parte else de esta construccin lgica es opcional.
A.2. Bucles for y while
Los bucles permiten repetir las mismas o anlogas operaciones sobre datos distintos.
SENTENCIA FOR
La sentencia for repite un conjunto de sentencias un nmero predeterminado de veces. La
siguiente construccin ejecuta sentencias con valores de i de 1 a n, variando de uno en uno.
f or i =1: n
sent enci as
end
obien, otra forma de hacer lo mismo caracterstica de Matlab:
vect or Val or es=[ 1: n] ;
f or i =vect or Val or es
sent enci as
end
donde vectorValores es un vector que contiene los distintos valores que tomar la variable i.
En el siguiente ejemplo se presenta el caso ms general para la variable del bucle (va-
lor_inicial: incremento: valor_final); el bucle se ejecuta por primera vez con i=n, y luego i
se va reduciendo de 0.2 en 0.2 hasta que se hace menor que 1, y entonces se termina:
f or i =n: - 0. 2: 1
sent enci as
end
En el siguiente ejemplo se presenta una estructura correspondiente a dos bucles anidados. La
variable j es la que vara ms rpidamente (para cada valor de i, la variable j toma todos sus
posibles valores):
f or i =1: m
f or j =1: n
sent enci as
end
end
Cuando se introducen interactivamente en la lnea de comandos, los bucles for se ejecutan
slo despus de introducir la sentencia end que los completa.
curso 2012-13: Prcticas de lgebra Pgina 14
14
SENTENCIA WHILE
Esta sentencia sirve para realizar un bucle un nmero indeterminado de veces. Su sintaxis es
la siguiente:
whi l e condi ci n
sent enci as
end
donde condicin puede ser una expresin vectorial o matricial. Las sentencias se siguen eje-
cutando mientras haya elementos distintos de cero en condicin, es decir, mientras haya algn
o algunos elementos true. El bucle se termina cuando todos los elementos de condicin son
false (es decir, cero).
La sentencia while es peligrosa, porque si la condicin no se llega a cumplir el programa pue-
de quedarse bloqueado. Una forma de evitarlo es introducir siempre un nmero mximo de
iteraciones, como por ejemplo:
t ol =1e- 08; ni t =0; ni t max=1000;
whi l e er r or >t ol & ni t <=ni t max
. . .
er r or =. . .
ni t =ni t +1;
end
B) Escritura interactiva de variables. Funcin disp
La funcin disp permite imprimir en pantalla un mensaje de texto o el valor de una matriz,
pero sin imprimir su nombre. En realidad, disp siempre imprime vectores y/o matrices: las
cadenas de caracteres son un caso particular de vectores. Considrese los siguientes ejemplos:
>> disp('El programa ha terminado')
>> A=rand(4,4)
>> disp(A)
Ejectense las sentencias anteriores en MATLAB y obsrvese la diferencia entre las dos for-
mas de imprimir la matriz A.
C) Ejemplo de programa a realizar
Para terminar, las sentencias que se han descrito se aplicarn a un caso prctico. Se trata de
crear una funcin llamada esPrimo que compruebe si un nmero natural es primo o no. Re-
cuerde que un nmero primo es aqul que sus divisores son l mismo y la unidad. Una manera
de ver si un nmero es primo, es dividirlo por todos los enteros comprendidos entre 1 y su
raz cuadrada. Si el nmero es divisible por alguno de ellos, se concluye que no es primo. Si el
nmero es primo la funcin devuelve un 1 (true para Matlab) y si no lo es, devuelve un 0
(false para Matlab). Para comprobar si la divisin es exacta, se utiliza la funcin mod, que da
como resultado el resto de la divisin del primer operando por el segundo. Por ejemplo,
mod(5,2) es 1, puesto que el resto de dividir 5 entre 2 es 1. La funcin esPrimo puede ser:
f unct i on r =esPr i mo( numer o)
f or di vi sor =2: sqr t ( numer o)
i f mod( numer o, di vi sor ) ==0
r =0;
r et ur n;
end
end
r =1;
Grabe la funcin anterior en un fichero con el nombre esPrimo.m y utilcela para comprobar
si los nmeros 127, 137, 469, 821 y 1723 son primos.
curso 2012-13: Prcticas de lgebra
Pgina 15
15
Ejercicio 10: Utilizar el Debugger
Como ya se ha dicho, el editor de Matlab no slo permite crear y modificar ficheros *.m sino
tambin hace el papel de Debugger. En este ejercicio se describirn brevemente las principa-
les caractersticas del Editor de Matlab, para luego utilizarlo en un caso prctico.
Como ya se ha podido observar, el Editor muestra con diferentes colores los diferentes tipos
o elementos constitutivos de los comandos (en verde los comentarios, en rojo las cadenas de
caracteres, etc.). Para controlar la ejecucin de un programa con el Debugger se opera as:
1. Se coloca el cursor sobre la lnea en la que se desea parar la ejecucin. Se clica sobre
el icono Set Breakpoint ( ), apareciendo un punto rojo en el margen izquierdo.
2. Se ejecuta el fichero mediante una de las siguientes opciones: a) Eligiendo el coman-
do Run en el men Debug. b) Pulsando la tecla F5, c) Clicando en el botn Continue
( ) de la barra de herramientas del Editor, d) Tecleando el nombre del fichero en la
lnea de comandos de la Command Window
3. Aparece en el margen una flecha verde que indica la sentencia antes de la cual est de-
tenida la ejecucin. Para ejecutar la siguiente sentencia se clica sobre Step ( )
Mientras se controla paso a paso la ejecucin, quedan activos los botones del Debugger:
Set/Clear Breakpoint. Coloca o borra un breakpoint en la lnea en que est el
cursor.
Clear All Breakpoints. Elimina todos los breakpoints que haya en el fichero.
Step. Avanzar un paso sin entrar en las funciones de usuario de esa lnea.
Step In. Avanza un paso, y si hay una llamada a una funcin cuyo fichero *.m
est accesible, entra en dicha funcin.
Step Out. Salir de la funcin que se est ejecutando en ese momento.
Continue. Continuar la ejecucin hasta el siguiente breakpoint.
Quit Debugging. Terminar la ejecucin del Debugger.
Adems, cuando se est ejecutando un programa con el Debugger, en cualquier momento se
puede ir a la lnea de comandos de Matlab y teclear una expresin para ver su resultado. Tam-
bin se puede seleccionar con el ratn una sub-expresin en cualquier lnea vista en el Edi-
tor/Debugger, clicar con el botn derecho y en el men contextual que se abre elegir Evalua-
te Selection. El resultado aparece en la lnea de comandos de Matlab.
Como ejercicio a realizar, escriba la siguiente funcin y corrija los errores que contiene utili-
zando el Editor/Debugger de Matlab. Guarde el archivo corregido con el nombre primos.m.
Se pretende que esta funcin calcule todos los nmeros primos menores que un n natural.
f unct i on p=pr i mos( numer o)
%se i ni ci al i za el vect or p
p=[ ] ;
i f numer o<=1 | numer o~=f i x( numer o) %f i x devuel ve numer o t r uncado haci a 0
di sp( ' El ar gument o no es un numer o nat ur al >1)
r et ur n
end
f or n=2: num
i f esPr i mo( numer o) ==1
p( l engt h( p) +1) =n;
end
Compruebe la funcin primos ejecutando primos(40).

You might also like