You are on page 1of 34

1

Programacin en MatLab
Introduccin a la Informtica
Ing. Soldiamar Matamoros Encalada
Matlab
MATrix LABoratory
MATLAB es un programa para realizar clculos
numricos con vectores y matrices.
Tambin trabajar con nmeros escalares tanto
reales como complejos, con cadenas de caracteres
y con otras estructuras de informacin ms
complejas.
Realiza una amplia variedad de grficos en dos y
tres dimensiones.
Tiene un lenguaje de programacin propio.
2
Ventana Inicial
sta es la vista que se obtiene eligiendo la opcin Desktop Layout/Default,
en el men View
Donde se ejecutan
los comandos de
MATLAB, a
continuacin del
prompt
caracterstico (>>)
Muestra los ficheros
del directorio activo
o actual.
Se puede alternar con
Workspace clicando en
la pestaa
correspondiente.
El Workspace contiene informacin sobre todas las variables que se hayan definido en esta sesin y permite ver y
modificar las matrices con las que se est trabajando.
Muestra los ltimos
comandos
ejecutados en la
Command History.
Estos se pueden volver a
ejecutar haciendo doble
clic sobre ellos.
Para editar uno
de estos
comandos hay
que copiarlo
antes a la
Command
Window
funcin anloga a la del botn Inicio de Windows
3
Un ejercicio sencillo
Escriba en la Command Window la
siguiente lnea, a continuacin del
prompt y luego pulsar intro.
Se han escrito tres instrucciones diferentes,
separadas por comas.
Tambin la respuesta del programa tiene tres
partes.
Primera instruccin
se define una matriz cuadrada (66) llamada A,
cuyos elementos son nmeros aleatorios entre
cero y uno (aunque aparezcan slo 4 cifras, han
sido calculados con 16 cifras de precisin).
Segunda instruccin
se define una matriz B que es igual a la inversa
de A.
Tercera Instruccin
Finalmente se ha multiplicado B por A, y se
comprueba que el resultado es la matriz unidad.
>> A=rand(6), B=inv(A), B*A
A =
0.9501 0.4565 0.9218 0.4103 0.1389 0.0153
0.2311 0.0185 0.7382 0.8936 0.2028 0.7468
0.6068 0.8214 0.1763 0.0579 0.1987 0.4451
0.4860 0.4447 0.4057 0.3529 0.6038 0.9318
0.8913 0.6154 0.9355 0.8132 0.2722 0.4660
0.7621 0.7919 0.9169 0.0099 0.1988 0.4186
B =
5.7430 2.7510 3.6505 0.1513 -6.2170 -2.4143
-4.4170 -2.5266 -1.4681 -0.5742 5.3399 1.5631
-1.3917 -0.6076 -2.1058 -0.0857 1.5345 1.8561
-1.6896 -0.7576 -0.6076 -0.3681 3.1251 -0.6001
-3.6417 -4.6087 -4.7057 2.5299 6.1284 0.9044
2.7183 3.3088 2.9929 -0.1943 -5.1286 -0.6537
ans =
1.0000 0.0000 0 0.0000 0.0000 -0.0000
0.0000 1.0000 0.0000 0.0000 -0.0000 0.0000
0 0 1.0000 -0.0000 -0.0000 0.0000
0.0000 0 -0.0000 1.0000 -0.0000 0.0000
-0.0000 0.0000 -0.0000 -0.0000 1.0000 0.0000
-0.0000 -0.0000 -0.0000 -0.0000 -0.0000 1.0000
4
2
Cont
Con la Command History, es posible recuperar comandos anteriores de MATLAB y
moverse por dichos comandos con el ratn y con las teclas- flechas y .
Al pulsar la primera de dichas flechas aparecer el comando que se haba introducido
inmediatamente antes.
De modo anlogo es posible moverse sobre la lnea de comandos con las teclas y
, ir al principio de la lnea con la tecla Inicio, al final de la lnea con Fin, y borrar
toda la lnea con Esc.
Recurdese que slo hay una lnea activa (la ltima).
Para borrar todas las salidas anteriores de MATLAB y dejar limpia la Command
Window se pueden utilizar las funciones clc y home.
La funcin clc (clear console) elimina todas las salidas anteriores, mientras que home las
mantiene, pero lleva el prompt (>> ) a la primera lnea de la ventana.
Si se desea salir de MATLAB basta teclear los comandos quit o exit, elegir Exit
MATLAB en el men File o utilizar cualquiera de los medios de terminar una aplicacin
en Windows.
5
Cont
Los programas de MATLAB se encuentran en ficheros con la extensin *.m.
Se ejecutan tecleando su nombre en la lnea de comandos (sin la extensin),
seguido de los argumentos entre parntesis, si se trata de funciones.
El comando pwd (print working directory) permite saber cul es el
directorio actual.
Para cambiar de directorio actual se puede utilizar el comando cd (de
change directory) seguido del nombre del directorio
Se puede utilizar un path
Absoluto: cd C:\Matlab\Ejemplos o
Relativo (cd Ejemplos).
Para subir un nivel en la jerarqua de directorios se utiliza el comando cd .., y cd
../.. para subir dos niveles.
ste es el mismo sistema que en MS-DOS.
MATLAB permite utilizar la barra normal (/) y la barra invertida (\),
indistintamente.
6
Cont
Workspace (El espacio de trabajo de MATLAB) es el conjunto de
variables y de funciones de usuario que en un determinado momento
estn definidas en la memoria del programa o de la funcin que se
est ejecutando.
Para obtener informacin sobre el Workspace se pueden utilizar los
comandos who y whos (informacin ms detallada).
Cada funcin tiene su propio espacio de trabajo, con variables cuyos
nombres no interfieren con las variables de los otros espacios de trabajo.
>> whos
Name Size Bytes Class
A 3x3 72 double array
B 3x3 72 double array
C 3x3 72 double array
D 3x3 72 double array
Grand total is 36 elements using 288 bytes
7
Cont
Al hacer doble clic en uno de los elementos del workspace aparece el
Array editor, en el cual se puede modificar los datos
View -> Workspace
8
3
El Editor/Debugger
El tipo de los ficheros-M (o M-files)(*.m) es texto ASCII, y contienen conjuntos de
comandos o definicin de funciones
Al teclear su nombre en la lnea de comandos y pulsar Intro, se ejecutan uno tras otro
todos los comandos contenidos en dicho fichero.
Se puede guardar instrucciones y grandes matrices (ahorra el trabajo de tecleado).
Se pueden crear con cualquier editor de ficheros ASCII tal como Notepad.
MATLAB dispone de un editor para crear, modificar y ejecutarlos paso a paso para ver si
contienen errores (proceso de Debug o depuracin).
El Editor muestra con diferentes colores los
diferentes tipos o elementos constitutivos de los
comandos (en verde los comentarios, en violeta las
cadenas de caracteres, etc.).
El Editor se preocupa de que las comillas o
parntesis que se abren, se cierren.
Al olocar el cursor antes o despus de una apertura o
cierre de corchete o parntesis y pulsar las teclas ()
o (), se muestra con qu cierre o apertura de
corchete o parntesis se empareja el elemento
considerado; si no se empareja con ninguno, aparece
con una rayita de tachado.
9
Cont El Editor/Debugger
Para comentar con el carcter % varias lneas se debe
seleccionarlas, hacer clic derecho y elegir Comment.
Estos comentarios pueden volver a ser cdigo ejecutable
seleccionndolos y ejecutando Uncomment en el men
contextual.
Se puede organizar el sangrado de los bucles y
bifurcaciones seleccionado Smart Indent del men
contextual.
Para ejecutar un fichero se debe eligir el comando Run
en el men Debug, pulsar la tecla F5, clicar en el botn
Continue ( ) de la barra de herramientas del Editor o
teclear el nombre del fichero en la lnea de comandos
de la Command Window.
10
Cont El Editor/Debugger
Los puntos rojos que aparecen en el
margen izquierdo son breakpoints
(puntos en los que se detiene la
ejecucin de programa)
La flecha verde en el borde
izquierdo indica la sentencia en que
est detenida la ejecucin (antes de
ejecutar dicha sentencia)
Cuando el cursor se coloca sobre
una variable (en este caso sobre A)
aparece una pequea ventana con
los valores numricos de esa
variable, tal como se ve en la.
clear all;
A=rand(3,3);
B=A';
C=inv(A);
D=C*A;
disp('Ya he terminado');
11
Cont El Editor/Debugger
Se puede introducir breakpoints condicionales (punto amarillo), en
los que el programa se para slo si se cumple una determinada
condicin.
Clicar con el botn derecho en la correspondiente lnea del cdigo en la
ventana del Editor/Debugger y elegir en el men contextual
Set/Modify Conditional Breakpoint, en la ventana mostrada se
escribe la condicin que debe cumplirse para que el programa se
detenga en dicho punto
12
4
El profiler
Permite saber cmo se ha empleado el tiempo de la
CPU en la ejecucin de un determinado programa.
til para determinar los cuellos de botella de un
programa: funciones y las lneas de cdigo que ms
veces se llaman.
Esto ayuda a mejorar la eficiencia de un programa.
13
Preferencias
Formatos de salida y de otras opciones de MATLAB
File -> Preferences muestra
todas las posibilidades que ofrece
MATLAB
Permite elegir los colores
generales del cdigo
14
ContPreferencias
MATLAB siempre calcula con
doble precisin, es decir con
unas 16 cifras decimales
equivalentes
Las posibilidades existentes son las
siguientes:
short coma fija con 4 decimales (defecto)
long coma fija con 15 decimales
hex cifras hexadecimales
bank nmeros con dos cifras decimales
short e notacin cientfica con 4 decimales
short g notacin cientfica o decimal,
dependiendo del valor
long e notacin cientfica con 15 decimales
long g notacin cientfica o decimal,
dependiendo del valor
rational expresa los nmeros racionales
como cocientes de enteros
Se pueden cambiar tambin desde la lnea de
comandos usando format.
Ejemplo: para ver las matrices en formato long
>> format long
15
Guardar variables y estados de una
sesin: save y load
Se puede guardar el estado de una
sesin de trabajo tecleando save
antes de abandonar el programa.
Esto crea en el directorio actual un
fichero binario llamado matlab.mat
(o matlab) con el estado de la
sesin (excepto los grficos, que por
ocupar mucha memoria hay que
guardar aparte).
Para recuperar el estado la siguiente
vez que se arranque el programa se
usa load
Se pueden guardar tambin matrices
y vectores de forma selectiva y en
ficheros con nombre especificado por
el usuario
>> save,
>> load
>> save filename A x y
%(sin comas entre los nombres de
variables)
Las tres variables deben tener
valores previamente.
>> load filename
% Si no se indica ninguna variable,
se guardan todas las variables
creadas en esa sesin.
% guarda las variables A, x e y en
un fichero binario llamado
filename.mat (o filename).
16
5
Guardar variables y estados de una
sesin: save y load
Para almacenar en
formato ASCII:
>> save -ascii
% almacena 8 cifras decimales
>> save -ascii -double
% almacena 16 cifras decimales
>> save -ascii -double -tab
% almacena 16 cifras separadas
por tabs aunque en formato
ASCII slo se guardan los
valores y no otra informacin tal
como los nombres de las
matrices y/o vectores.
Cuando se recuperan estos
ficheros con load -ascii toda
la informacin se guarda en
una nica matriz con el
nombre del fichero. Esto
produce un error cuando no
todas las filas tienen el mismo
nmero de elementos.
Con la opcin -append en el
comando save la informacin
se guarda a continuacin de lo
que hubiera en el fichero.
17
Guardar sesin y copiar salidas: diary
Existe otra forma ms sencilla de almacenar.
Con el comando diary se almacena de forma ms sencilla en un fichero un
texto que describa lo que el programa va haciendo (la entrada y salida de
los comandos utilizados)
El simple comando diary pasa de on a off y viceversa.
Para poder acceder al fichero filename.txt con Notepad o Word es
necesario que diary est en off.
Si en el comando diary no se incluye el nombre del fichero se utiliza por
defecto un fichero llamado diary (sin extensin).
>> diary filename.txt
...
>> diary off % suspende la ejecucin de diary
...
>> diary on ... % reanuda la ejecucin de diary
18
Comentarios
Lneas de comentarios se realizan por medio del
%, todo lo que se coloca de ah hasta el fin de la
lnea es comentario.
Para comentar un bloque de sentencias, se las
selecciona y del men contextual se elige la opcin
Comment.
Otra forma de comentar bloques de sentencias es
encerrar las lneas que se desea inutilizar entre los
caracteres %{ y %}.
19
Medida de tiempos y de esfuerzo de
clculo
cputime devuelve el tiempo de CPU (con precisin de
centsimas de segundo) desde que el programa arranc.
Ejemplo: Se lo puede llamar antes y despus de realizar una
operacin y se restan los valores devueltos
etime(t2, t1) tiempo transcurrido entre los vectores t1 y t2
(atencin al orden!), obtenidos como respuesta al comando
clock.
tic ops toc imprime el tiempo en segundos requerido por ops.
El comando tic pone el reloj a cero y toc obtiene el tiempo
transcurrido.
20
6
Cont
Ejemplo:
Medir de varias formas el tiempo necesario para resolver un sistema de
1000 ecuaciones con 1000 incgnitas.
>> n=1000; A=rand(n); b=rand(n,1); x=zeros(n,1);
>> tiempoIni=clock; x=A\b; tiempo=etime(clock, tiempoIni)
>> time=cputime; x=A\b; time=cputime-time
>> tic; x=A\b; toc
Los tiempos pequeos (dcimas o centsimas de segundo), no se pueden
medir con gran precisin donde se han puesto varias sentencias en la misma
lnea.
Todas las sentencias de clculos matriciales van seguidas de punto y coma
(;) con objeto de evitar la impresin de resultados.
Conviene ejecutar dos o tres veces cada sentencia para obtener tiempos
ptimos, ya que la primera vez que se ejecutan se emplea un cierto tiempo
en cargar las funciones a memoria.
21
Cont Operaciones con Matrices y Vectores
Como en casi todos los lenguajes de programacin, en
MATLAB las matrices y vectores son variables que tienen
nombres.
Se sugiere (MATLAB no lo exige) que se utilicen:
letras maysculas para matrices y
letras minsculas para vectores y escalares
Para definir una matriz no hace falta declararlas o
establecer de antemano su tamao
Se puede definir un tamao y cambiarlo posteriormente
MATLAB determina el nmero de filas y de columnas en
funcin del nmero de elementos que se proporcionan (o se
utilizan).
Las matrices se definen o introducen por filas; los
elementos de una misma fila estn separados por blancos
o comas, mientras que las filas estn separadas por
pulsaciones intro o por caracteres punto y coma (;).
Ejemplo: el siguiente
comando define una matriz A
de dimensin (33):
>> A=[1 2 3; 4 5 6; 7 8 9]
La respuesta del programa es
la siguiente:
A =
1 2 3
4 5 6
7 8 9
22
Cont Operaciones con Matrices y Vectores
Adems de valores numricos, en la definicin de una matriz o vector
se pueden utilizar expresiones y funciones matemticas.
Ejemplo: una sencilla operacin con A es hallar
su matriz traspuesta (A').
Como el resultado de la operacin no ha sido
asignado a ninguna otra matriz, MATLAB utiliza
un nombre de variable por defecto (ans, de answer),
que contiene el resultado de la ltima operacin.
ans puede ser utilizada como operando en la
siguiente expresin que se introduzca.
Ejemplo: Podra haberse asignado el resultado a
otra matriz llamada B:
>> A'
ans =
1 4 7
2 5 8
3 6 9
>> B=A'
B =
1 4 7
2 5 8
3 6 9
23
Cont Operaciones con Matrices y Vectores
Ejemplo: Hacer el producto B*A (deber resultar una matriz
simtrica):
Para acceder a los elementos de un vector se pone el ndice entre
parntesis: x(3) x(i)
Los elementos de las matrices se acceden poniendo los dos ndices
entre parntesis, separados por una coma.
Ejemplo: A(1,2) A(i,j)
Aunque en MATLAB las matrices se introducen por filas, se almacenan por
columnas lo cual permite que se puede accederse a cualquier
elemento de una matriz con un slo subndice.
>> B*A
ans =
66 78 90
78 93 108
90 108 126
24
7
Cont Operaciones con Matrices y Vectores
Ejemplo:
si A es una matriz (33) se obtiene el
mismo valor escribiendo A(1,2) que
escribiendo A(4).
Invertir una matriz es casi tan fcil
como trasponerla. A continuacin se
va a definir una nueva matriz A -no
singular- en la forma:
>> A=[1 4 -3; 2 1 5; -2 5 3]
A =
1 4 -3
2 1 5
-2 5 3
Ejemplo:
Calcular la inversa de A y el resultado
asignar a B.
>> B=inv(A)
B =
0.1803 0.2213 -0.1885
0.1311 0.0246 0.0902
-0.0984 0.1066 0.0574
Para comprobar que este resultado es
correcto basta pre-multiplicar A por B;
>> B*A
ans =
1.0000 0.0000 0.0000
0.0000 1.0000 0.0000
0.0000 0.0000 1.0000
25
Cont Operaciones con Matrices y Vectores
Vector Fila x
Para definir un vector fila x
se lo hace de forma anloga a
las matrices con los nmeros
separados por blancos o
comas.
Ejemplo:
>> x=[10 20 30] % vector fila
x =
10 20 30
Vector Columna x
Los nmeros estn separados
por intros o puntos y coma
(;).
Ejemplo:
>> y=[11; 12; 13] % vector columna
y =
11
12
13
Vector Fila y Vector Columna
Son diferentes para MatLab
26
Cont Operaciones con Matrices y Vectores
Ejemplo: si se intenta sumar los vectores x e y se obtendr el siguiente mensaje de
error:
>> x+y
??? Error using ==> +
Matrix dimensions must agree.
Estas dificultades desaparecen si se suma x con el vector transpuesto de y:
>> x+y'
ans =
21 32 43
MATLAB considera vectores fila por defecto, como se ve en el ejemplo siguiente:
>> x(1)=1, x(2)=2
x =
1 20 30
x =
1 2 30
27
Cont Operaciones con Matrices y Vectores
Operaciones con matrices
Se puede operar con matrices por medio de:
Operadores: suma (+), producto (*) y traspuesta (')
Funciones: invertir inv( )
Los operadores matriciales son:
+ adicin o suma
sustraccin o resta
* multiplicacin
' traspuesta
^ potenciacin
\ divisin-izquierda
/ divisin-derecha
.* producto elemento a elemento
./ y .\ divisin elemento a elemento
.^ elevar a una potencia elemento a elemento
Los operadores anteriores se pueden aplicar tambin de modo mixto,
es decir con un operando escalar y otro matricial.
28
8
Cont Operaciones con Matrices y Vectores
Ejemplo:
>> A=[1 2; 3 4]
A =
1 2
3 4
>> A*2
ans =
2 4
6 8
>> A-4
ans =
-3 -2
-1 0
Se puede utilizar el operador de divisin / para dividir por un
escalar todos los elementos de una matriz o un vector.
29
Sistemas de Ecuaciones Lineales
Ejemplo:
Operador divisin-izquierda
Considrese el siguiente sistema de
ecuaciones lineales, Ax = b (1)
donde x y b son vectores columna, y
A una matriz cuadrada invertible.
Resolucin 1
x = inv(A)*b
Resolucin 2
x = A\b
El operador divisin-izquierda por
una matriz (\) equivale a pre-
multiplicar por la inversa de esa
matriz.
Ejemplo:
Considrese el siguiente ejemplo de
matriz (12) que conduce a un
sistema de infinitas soluciones.
>> A=[1 2], b=[2]
A =
1 2
b =
2
>> x=A\b
x =
0
1
30
Cont Sistemas de Ecuaciones Lineales
Ejemplo:
Sistema de tres ecuaciones
formadas por una recta que no
pasa por el origen y los dos ejes
de coordenadas:
>> A=[1 2; 1 0; 0 1], b=[2 0 0]'
A =
1 2
1 0
0 1
b =
2
0
0
>> x=A\b, resto=A*x-b
x =
0.3333
0.6667
resto =
-0.3333
0.3333
0.6667
La inteligencia del operador
barra invertida \ tiene un coste:
MATLAB debe de emplear cierto
tiempo en determinar las
caractersticas de la matriz:
triangular, simtrica, etc.
31
Cont Sistemas de Ecuaciones Lineales
Ejemplo:
Operador Divisin-derecha (/)
Aunque no es una forma demasiado habitual, tambin se puede escribir un
sistema de ecuaciones lineales en la forma correspondiente a la transpuesta de
la ecuacin (1):
yB = c (3)
donde y y c son vectores fila (c conocido).
Si la matriz B es cuadrada e invertible, la solucin de este sistema se puede
escribir en las formas siguientes:
y = c*inv(B) (4a)
y = c/B (4b)
Este operador (/) equivale a postmultiplicar por la inversa de la matriz.
Si se traspone la ecuacin (3) y se halla la solucin aplicando el operador
divisin-izquierda se obtiene:
y' = (B')\c' (5)
Comparando las expresiones (4b) y (5) se obtiene la relacin entre los
operadores divisin-izquierda y divisin-derecha (MATLAB slo tiene
implementado el operador divisin-izquierda):
c/B = ((B')\c')' (6)
32
9
Cont Sistemas de Ecuaciones Lineales
Operadores elemento a elemento
Se puede aplicar elemento a elemento los operadores matriciales (*,
^, \ y /).
Para ello basta precederlos por un punto (.).
Ejemplo 1:
>> [1 2 3 4]^2
??? Error using ==> ^
Matrix must be square.
>> [1 2 3 4].^2
ans =
1 4 9 16
Ejemplo 2:
>> [1 2 3 4]*[1 -1 1 -1]
??? Error using ==> *
Inner matrix dimensions must agree.
>> [1 2 3 4].*[1 -1 1 -1]
ans =
1 -2 3 -4
33
Ejercicio de tipos Datos
Supongamos que:
El estudiante de nombre Pedro Vlez, de 18
aos, entr a la Universidad en 2001.
El desea registrarse en la materia de cdigo
FIEC04341, en el paralelo 4.
Le niegan el registro pues dicen que debe
$140.35 a la Universidad,
El estudiante afirma que esto es completamente
falso.
34
Cont Ejercicio de tipos Datos
En el enunciado anterior podemos identificar
los datos
Pedro Velez -> Nombre
24 -> Edad
1998 -> Ao
FIEC04341 -> Cdigo Materia
Texto
Numrico
Numrico
Texto
4 -> Paralelo Numrico
FALSO -> Es Deudor? Lgico
35
Tipos de datos
MATLAB es un programa preparado para trabajar con vectores y
matrices, pero tambin trabaja con variables escalares (matrices
de dimensin 1).
MATLAB trabaja siempre en doble precisin, es decir
guardando cada dato en 8 bytes, con unas 15 cifras decimales
exactas.
Tambin puede trabajar con:
Cadenas de caracteres (strings)
Otros tipos de datos:
Matrices de ms dos dimensiones,
matrices dispersas,
vectores y matrices de celdas,
estructuras y
clases y objetos.
36
10
ContTipos de datos
Nmeros reales de doble precisin
Los elementos de los vectores y las matrices son numeros reales almacenados en 8
bytes (53 bits para la mantisa y 11 para el exponente de 2; entre 15 y 16 cifras
decimales equivalentes).
MATLAB mantiene una forma especial para los nmeros muy grandes (ms grandes
que los que es capaz de representar), que son considerados como infinito.
Ejemplo:
El infinito se representa
como inf Inf.
Obsrvese cmo responde el
programa al ejecutar el
siguiente comando:
>> 1.0/0.0
Warning: Divide by zero
ans =
Inf
Ejemplo:
Los resultados que no estn definidos como nmeros se
representan con NaN (Not a Number).
Ejectense los siguientes comandos y obsrvense las
respuestas obtenidas:
>> 0/0
Warning: Divide by zero ans =
NaN
>> inf/inf
ans =
NaN
37
ContTipos de datos
Operaciones de Coma Flotante
MATLAB dispone de tres funciones (no tienen argumentos)
relacionadas con estas operaciones.
Eps: devuelve la diferencia entre 1.0 y el nmero de coma
flotante inmediatamente superior. Da una idea de la precisin o
nmero de cifras almacenadas. En un PC, eps vale 2.2204e-
016.
Realmin: devuelve el nmero ms pequeo con que se puede
trabajar (2.2251e-308)
Realmax: devuelve el nmero ms grande con que se puede
trabajar (1.7977e+308)
38
ContTipos de datos
Otros tipos de variables:
Integer,
Float y
Logical
Por defecto MATLAB trabaja con variables de punto flotante y
doble precisin (double).
Con estas variables pueden resolverse casi todos los problemas
prcticos y con frecuencia no es necesario complicarse la vida
declarando variables de tipos distintos, como se hace con cualquier
otro lenguaje de programacin.
En algunos casos es conveniente declarar variables de otros
tipos porque puede ahorrarse mucha memoria y pueden
hacerse los clculos mucho ms rpidamente.
39
ContTipos de datos
Nmeros Enteros
MATLAB permite crear variables enteras con 1, 2, 4 y 8 bytes (8, 16, 32 y
64 bits).
Estas variables pueden tener signo o no tenerlo.
Las variables con signo representan nmeros en intervalos "casi" simtricos
respecto al 0.
Los tipos son: int8, int16, int32 e int64
Las variables sin signo representan nmero no negativos, desde el 0 al
nmero mximo.
Los tipos son uint8, uint16, uint32 y uint64.
Para crear una variable entera de un tipo determinado se pueden utilizar
sentencias como las siguientes:
>> i=int32(100); % se crea un entero de 4 bytes con valor 100
>> j=zeros(100); i=int32(j); % se crea un entero i a partir de j
>> i=zeros(1000,1000,'int32'); % se crea una mariz 1000x1000 de enteros
40
11
ContTipos de datos
Ejemplo:
Las funciones intmin('int64') e intmax('int64') permiten
saber el valor del entero ms pequeo y ms grande (en valor
algebraico) que puede formarse con variables enteras de 64 bits:
>> disp([intmin('int64'), intmax('int64')])
-9223372036854775808 9223372036854775807
La funcin isinteger(i) devuelve 1 si la variable i es entera y 0 en
otro caso.
La funcin class(i) devuelve el tipo de variable que es i (int8,
int16, ...).
La funcin isa(i, 'int16') permite saber exactamente si la variable i
corresponde a un entero de 16 bits.
41
ContTipos de datos
Nmeros Reales
MATLAB dispone de dos tipos de variables reales o
float: single (4 bytes) y double (8 bytes).
Por defecto se utilizan doubles.
Las funciones single(x) y double(y) permiten
realizar conversiones entre ambos tipos de
variables.
Las funciones realmin y realmax permiten saber
los nmeros double ms pequeo y ms grande
(en valor absoluto) que admite el computador.
Para los nmeros de simple precisin habra que
utilizar realmin('single') y realmax('single').
La funcin isfloat(x) permite saber si x es una
variable real, de simple o doble precisin.
Las funciones isa(x, 'single') isa(x, 'double')
permiten saber exactamente de qu tipo de
variable se trata.
Ejemplo:
Uso de variables single
para reducir el tiempo de
CPU y la memoria:
>> n=1000; AA=rand(n);
A=single(AA);
>> tic, Bs=inv(A); toc
Elapsed time is 1.985000
seconds.
>> tic, Bd=inv(AA); toc
Elapsed time is 4.296000
seconds.
42
ContTipos de datos
Variables lgicas
Slo pueden tomar los valores true (1) y false (0).
Surgen como resultado de los operadores relacionales (==, <, <=,
>, >=, ~=) y de muchas funciones lgicas como any y all que se
aplican a vectores y matrices.
La funcin logical(A) produce una variable lgica, con el mismo
nmero de elementos que A, con valores 1 0 segn el
correspondiente elementos de A sea distinto de cero o igual a cero.
43
ContTipos de datos
>> j=A>10
j =
1 0 0 1
0 1 0 0
0 0 0 1
0 1 1 0
>> isa(j,'logical')
ans =
1
>> A(j)=-10
A =
-10 2 3 -10
5 -10 10 8
9 7 6 -10
4 -10 -10 1
Ejemplo:
Una de las aplicaciones ms importantes de
las variables lgicas es para separar o
extraer los elementos de una matriz o
vector que cumplen cierta condicin, y
operar luego selectivamente sobre dichos
elementos.
>> A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
44
12
ContTipos de datos
Operaciones Lgicas
Operador Significado Ejemplo Tipo de
resultado
Resultado
No(not) Negacin de un valor No(6>10) Entero o real Verdadero
Y(and) Conjuncin (1<5) y (5>10)
Ecuador clasific y
Colombia no clasifico
Entero o real Falso
Verdadero
O(or) Disyuncin (5>10) o (10<9) Entero o real Falso
45
ContTipos de datos
Nmeros complejos: funcin complex
En muchos clculos matriciales los datos y/o los
resultados no son reales sino complejos, pero
MATLAB trabaja sin ninguna dificultad con ellos.
Ejemplo:
Vemos como se representan por defecto los
nmeros complejos:
>> a=sqrt(-4)
a =
0 + 2.0000i
>> 3 + 4j
ans =
3.0000 + 4.0000i
En la entrada de datos de MATLAB se pueden utilizar
indistintamente la i y la j para representar el nmero
imaginario unidad (en la salida, sin embargo, puede
verse que siempre aparece la i).
Si la i o la j no estn definidas como variables, puede
intercalarse el signo (*).
Ejemplo:
Cuando se est trabajando con
nmeros complejos, conviene no
utilizar la i como variable ordinaria,
pues puede dar lugar a errores y
confusiones.
Obsrvense los siguientes resultados:
>> i=2
i =
2
>> 2+3i
ans =
2.0000 + 3.0000i
>> 2+3*i
ans =
8
>> 2+3*j
ans =
2.0000 + 3.0000i
46
ContTipos de datos
Asignacin de valores complejos a vectores y matrices
Se puede hacerse de las dos formas.
Es importante advertir que el operador de
matriz traspuesta ('), aplicado a matrices
complejas, produce la matriz conjugada y
traspuesta.
Existe una funcin que permite hallar la
matriz conjugada (conj( )) y el operador
punto y apstrofo (.') que calcula
simplemente la matriz traspuesta.
Ejemplo:
Conviene hacer antes clear i, para que i no
est definida como variable.
>> A = [1+2i 2+3i; -1+1i 2-3i]
A =
1.0000 + 2.0000i 2.0000 + 3.0000i
-1.0000 + 1.0000i 2.0000 - 3.0000i
Ejemplo:
Es posible definir las partes reales e imaginarias
por separado usando el operador (*).
>> A = [1 2; -1 2] + [2 3; 1 -3]*i % En este
caso el * es necesario
A =
1.0000 + 2.0000i 2.0000 + 3.0000i
-1.0000 + 1.0000i 2.0000 - 3.0000i
Ejemplo:
Crear un nmero complejo a partir de dos
argumentos que representan la parte real e
imaginaria:
>> complex(1,2)
ans =
1.0000 + 2.0000i
47
ContTipos de datos
Cadenas de Caracteres
MATLAB puede definir variables que contengan cadenas de
caracteres.
Las cadenas de texto van entre apstrofos o comillas simples
(Ntese que en C van entre comillas dobles: "cadena").
Ejemplo:
s = 'cadena de caracteres'
48
13
ContTipos de datos
Variables y expresiones matriciales
Una variable es un nombre que se da a una entidad
numrica, que puede ser una matriz, un vector o un
escalar.
El valor de esa variable, e incluso el tipo de entidad numrica
que representa, puede cambiar a lo largo de una sesin de
MATLAB o a lo largo de la ejecucin de un programa.
Una expresin de MATLAB puede tener dos formas:
1. Asignando su resultado a una variable:
variable = expresin
2. Evaluando simplemente el resultado del siguiente modo:
expresin
El resultado se asigna a la variable interna ans (de answer)
que almacena el ltimo resultado.
49
ContTipos de datos
Ejemplo de variables:
El valor del radio, y el valor del Area, pueden cambiar
Una variable es
Un dato cuyo valor puede cambiar durante un clculo, o
En la resolucin de un problema.
Ejemplo:
El lado del cuadrado, para calcular permetro o rea del mismo.
El cdigo de una materia, el nmero de cdula de una persona, etc.
Las variables pueden ser de cualquier tipo de dato.
La computadora representa a las variables como
Una porcin de memoria.
50
ContTipos de datos
Por defecto una expresin termina cuando se pulsa
intro.
Si se desea que contine en la lnea siguiente, se debe
introducir tres puntos (...) antes de pulsar intro.
Se pueden incluir varias expresiones en una misma
lnea separndolas por:
comas (,) o
puntos y comas (;) - su resultado se calcula, pero no se escribe en
pantalla.
Evita la escritura de resultados intermedios y de
grandes cantidades de nmeros para matrices de gran
tamao.
51
ContTipos de datos
Reglas para escribir variables:
Debe tener un nombre que la identifique:
Lado, nombre, radio, area, etc.
MATLAB distingue entre maysculas y minsculas los nombres de
variables.
Los nombres deben empezar siempre por una letra
Bien: lado, total
Mal: 89lado, 1total, *nombre.
Pueden constar de hasta 63 letras y nmeros (funcin namelengthmax ).
El carcter guin bajo (_) se considera como una letra.
No pueden contener ningn otro carcter especial
Bien: lado_cuadrado, total1, total2
Mal: lado cuadrado, total$, total#
A diferencia del C, no hace falta declarar las variables que se vayan a utilizar.
Se deba tener especial cuidado con no utilizar nombres errneos en las variables,
porque no se recibir ningn aviso del ordenador.
52
14
ContTipos de datos
El comando clear tiene varias formas posibles:
clear sin argumentos, clear elimina todas las variables
creadas previamente (excepto las variables
globales).
clear A, b borra las variables indicadas.
clear global borra las variables globales.
clear functions borra las funciones.
clear all borra todas las variables, incluyendo las globales,
y las funciones.
53
ContTipos de datos
Constantes
Pi es una constante
Su valor esta establecido, y no vara
Ejemplo
El permetro de un cuadrado es 4 veces el valor cualquiera
de sus lados
Las constantes, no tienen porque solo ser nmeros,
pueden ser datos de todo tipo.
a, casa son constantes de tipo carcter y cadena
54
Operador de Asignacin
Una variable puede cambiar
su valor
Se debe efectuar una
asignacin
El valor se asigna a la
variable
Usamos el operador de
asignacin(=)
El formato para asignar un
valor a una variable
Nombre de la variable =
expresion
Ejemplo:
A = 4
B = 8
B = A+B
A = A+1
B = B+3
La asignacin es de izq. A
derecha
Si la variable tena otro
valor, este se pierde
A = 5
A = A*5
55
Tipos de Matrices Predefinidos
eye(4) forma la matriz unidad de tamao (44)
zeros(3,5) forma una matriz de ceros de tamao (35)
zeros(4) dem de tamao (44)
ones(3) forma una matriz de unos de tamao (33)
ones(2,4) idem de tamao (24)
linspace(x1,x2,n) genera un vector con n valores igualmente espaciados entre x1 y x2
logspace(d1,d2,n) genera un vector con n valores espaciados logartmicamente entre 10^d1 y 10^d2. Si d2 es pi9, los puntos se generan entre
10^d1 y pi
rand(3) forma una matriz de nmeros aleatorios entre 0 y 1, con distribucin uniforme, de tamao (33)
rand(2,5) idem de tamao (25)
randn(4) forma una matriz de nmeros aleatorios de tamao (44), con distribucin normal, de valor medio 0 y varianza 1.
magic(4) crea una matriz (44) con los nmeros 1, 2, ... 4*4, con la propiedad de que todas las filas y columnas suman lo mismo
hilb(5) crea una matriz de Hilbert de tamao (55). La matriz de Hilbert es una matriz cuyos elementos (i,j) responden a la expresin
(1/(i+j-1)). Esta es una matriz especialmente difcil de manejar por los grandes errores numricos a los que conduce
invhilb(5) crea directamente la inversa de la matriz de Hilbert
kron(x,y) produce una matriz con todos los productos de los elementos del vector x por los elementos del vector y. Equivalente a x'*y,
donde x e y son vectores fila
compan(pol) construye una matriz cuyo polinomio caracterstico tiene como coeficientes los elementos del vector pol (ordenados de mayor
grado a menor)
vander(v) construye la matriz de Vandermonde a partir del vector v (las columnas son las potencias de los elementos de dicho vector)
56
15
Formacin de una Matriz a Partir de Otras
MATLAB ofrece la posibilidad de crear una matriz a partir de matrices previas ya
definidas, por varios posibles caminos:
recibiendo alguna de sus propiedades (como por ejemplo el tamao),
por composicin de varias submatrices ms pequeas,
modificndola de alguna forma.
Un caso especialmente interesante es el de crear una nueva matriz componiendo
como submatrices otras matrices definidas previamente.
Ejemplo:
>> A=rand(3)
>> B=diag(diag(A))
>> C=[A, eye(3); zeros(3), B]
la matriz C de tamao (66) se forma por composicin de cuatro matrices de tamao
(33).
Los tamaos de las submatrices deben de ser coherentes.
57
Cont Formacin de una Matriz a Partir de Otras
[m,n]=size(A) devuelve el nmero de filas y de columnas de la matriz A. Si la matriz es cuadrada basta recoger el primer valor de retorno
n=length(x) calcula el nmero de elementos de un vector x
zeros(size(A)) forma una matriz de ceros del mismo tamao que una matriz A previamente creada
ones(size(A)) dem con unos
A=diag(x) forma una matriz diagonal A cuyos elementos diagonales son los elementos de un vector ya existente x
x=diag(A) forma un vector x a partir de los elementos de la diagonal de una matriz ya existente A
diag(diag(A)) crea una matriz diagonal a partir de la diagonal de la matriz A
blkdiag(A,B) crea una matriz diagonal de submatrices a partir de las matrices que se le pasan como argumentos
triu(A) forma una matriz triangular superior a partir de una matriz A (no tiene por qu ser cuadrada). Con un segundo
argumento puede controlarse que se mantengan o eliminen ms diagonales por encima o debajo de la
diagonal principal.
tril(A) dem con una matriz triangular inferior
rot90(A,k) Gira k*90 grados la matriz rectangular A en sentido antihorario. k es un entero que puede ser negativo. Si se
omite, se supone k=1
flipud(A) halla la matriz simtrica de A respecto de un eje horizontal
fliplr(A) halla la matriz simtrica de A respecto de un eje vertical
reshape(A,m,n) Cambia el tamao de la matriz A devolviendo una matriz de tamao mn cuyas columnas se obtienen a partir de un
vector formado por las columnas de A puestas una a continuacin de otra. Si la matriz A tiene menos de mn
elementos se produce un error.
58
Direccionamiento de Vectores y Matrices a partir
de Vectores
Los elementos de un vector x se pueden direccionar a partir de los de
otro vector v.
En este caso, x(v) equivale al vector x(v(1)), x(v(2)), ... Considrese
el siguiente ejemplo:
>> v=[1 3 4]
v =
1 3 4
>> x=rand(1,6)
x =
0.5899 0.4987 0.7351 0.9231 0.1449 0.9719
>> x(v)
ans =
0.5899 0.7351 0.9231
59
Cont Direccionamiento de Vectores y Matrices a partir de Vectores
>> A(f,c)
ans =
5 11
4 14
Ejemplo: continuacin del anterior
Comprobar cmo los elementos de una
matriz se pueden direccionar con un slo
ndice, considerando que las columnas de
la matriz estn una a continuacin de otra
formando un vector:
>> f=[1 3 5 7];
>> A(f), A(5), A(6)
ans =
16 9 2 7
ans =
2
ans =
11
Ejemplo:
De forma anloga, los elementos de una
matriz A pueden direccionarse a partir
de los elementos de dos vectores f y c.
>> f=[2 4]; c=[1 2];
>> A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> A(f,c)
ans =
5 11
4 14
60
16
Operador dos Puntos (:)
Puede usarse de varias formas.
Para empezar, defnase un vector x con el siguiente comando:
>> x=1:10
x =
1 2 3 4 5 6 7 8 9 10
Se podra decir que el operador (:) representa un rango:
En este caso, los nmeros enteros entre el 1 y el 10.
El incremento por defecto es 1,
Este operador puede tambin utilizarse con otros valores enteros y reales,
positivos o negativos.
En este caso el incremento va entre el valor inferior y el superior.
61
Operador dos Puntos (:)
Ejemplo:
Generar una tabla de
funciones seno y coseno.
Recurdese que con (;)
despus de un comando
el resultado no aparece
en pantalla.
>> x=[0.0:pi/50:2*pi]';
>> y=sin(x); z=cos(x);
>> [x y z]
Ejemplo:
>> 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
Por defecto, este operador produce vectores fila.
Si se desea obtener un vector columna basta
trasponer el resultado.
62
ContOperador dos Puntos (:)
Ejemplo:
>> A=magic(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
MATLAB accede a los elementos de
una matriz por medio de los ndices
de fila y de columna.
>> A(2,3)
ans =
7
Ejemplo:
Extraer los 4 primeros elementos de
la 6 fila:
>> A(6, 1:4)
ans =
4 36 29 13
63
ContOperador dos Puntos (:)
Ejemplo:
Extraer todos los elementos de la 3
fila:
>> A(3, :)
ans =
31 9 2 22 27 20
Ejemplo:
Para acceder a la ltima fila o columna
puede utilizarse la palabra end, en lugar
del nmero correspondiente.
Extraer la sexta fila (la ltima) de la
matriz:
>> A(end, :)
ans =
4 36 29 13 18 11
Ejemplo:
Extraer todos los elementos de las filas 3,
4 y 5:
>> A(3:5,:)
ans =
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
Ejemplo:
Se puede extraer conjuntos
disjuntos de filas utilizando corchetes
[ ]
Extraer las filas 1, 2 y 5:
>> A([1 2 5],:)
ans =
35 1 6 26 19 24
3 32 7 21 23 25
30 5 34 12 14 16
64
17
ContOperador dos Puntos (:)
Todo lo que se dice para filas vale para columnas y viceversa:
Basta cambiar el orden de los ndices.
El operador dos puntos (:) puede utilizarse en ambos lados del operador (=).
Ejemplo:
Definir una matriz identidad B de tamao 66 y reemplazar filas de B por filas de A.
La siguiente secuencia de comandos sustituye las filas 2, 4 y 5 de B por las filas 1, 2 y 3 de
A,
>> B=eye(size(A));
>> B([2 4 5],:)=A(1:3,:)
B =
1 0 0 0 0 0
35 1 6 26 19 24
0 0 1 0 0 0
3 32 7 21 23 25
31 9 2 22 27 20
0 0 0 0 0 1 65
ContOperador dos Puntos (:)
Se pueden realizar operaciones an ms complicadas:
>> B=eye(size(A));
>> B(1:2,:)=[0 1; 1 0]*B(1:2,:)
Ejemplo:
Como invertir el orden de los elementos de un vector:
>> x=rand(1,5)
x =
0.9103 0.7622 0.2625 0.0475 0.7361
>> x=x(5:-1:1)
x =
0.7361 0.0475 0.2625 0.7622 0.9103
Por haber utilizado parntesis en vez de corchetes los
valores generados por el operador (:) afectan a los ndices del
vector y no al valor de sus elementos.
Ejemplo:
Para invertir el orden de las
columnas de una matriz se
puede hacer lo siguiente:
>> A=magic(3)
A =
8 1 6
3 5 7
4 9 2
>> A(:,3:-1:1)
ans =
6 1 8
7 5 3
2 9 4
66
Definicin de Vectores y Matrices a Partir
de un Fichero
MATLAB acepta como entrada un fichero nombre.mque contiene instrucciones y/o
funciones.
Dicho fichero se llama desde la lnea de comandos tecleando su nombre, sin la extensin.
Un fichero *.m puede llamar a otros ficheros *.m, y puede llamarse a s mismo
(funciones recursivas).
Las variables definidas dentro de un fichero de comandos *.m que se ejecuta desde la
lnea de comandos son variables del espacio de trabajo base, esto es, pueden ser
accedidas desde fuera de dicho fichero; no sucede lo mismo si el fichero *.m
corresponde a una funcin.
Si un fichero de comandos se llama desde una funcin, las variables que se crean
pertenecen al espacio de trabajo de dicha funcin.
Ejemplo:
Crear un fichero llamado unidad.m que construya una matriz unidad de tamao 33 llamada
U33 en un directorio llamado c:\matlab. Este fichero deber contener la lnea siguiente:
U33=eye(3)
Desde MATLAB llmese al comando unidad y obsrvese el resultado.
Entre otras razones, es muy importante utilizar ficheros de comandos para poder utilizar el
Debugger y para evitar teclear muchas veces los mismos datos, sentencias o expresiones.
67
Definicin de Vectores y Matrices
Mediante Funciones y Declaraciones
Se pueden definir las matrices y vectores por medio
de
funciones de librera y
funciones programadas por el usuario
Operadores relacionales
El lenguaje de programacin de MATLAB dispone de
los siguientes operadores relacionales:
< menor que
> mayor que
<= menor o igual que
>= mayor o igual que
== igual que
~= distinto que
En MATLAB los operadores relacionales pueden
aplicarse a vectores y matrices.
Al igual que en C, si una comparacin se cumple el
resultado es 1 (true), si no se cumple es 0 (false).
Recprocamente, cualquier valor distinto de cero es
considerado como true y el cero equivale a false.
La diferencia con C est en que cuando
los operadores relacionales de MATLAB
se aplican a dos matrices o vectores del
mismo tamao, la comparacin se
realiza elemento a elemento, y el
resultado es otra matriz de unos y
ceros del mismo tamao, que recoge
el resultado de cada comparacin entre
elementos.
Ejemplo:
>> A=[1 2;0 3]; B=[4 2;1 5];
>> A==B
ans =
0 1
0 0
>> A~=B
ans =
1 0
1 1
68
18
Cont Definicin de Vectores y Matrices Mediante Funciones
y Declaraciones
Operadores lgicos
Los operadores lgicos de MATLAB son
los siguientes:
Los operadores lgicos se combinan con
los relacionales para poder comprobar el
cumplimiento de condiciones mltiples.
Los operadores lgicos breves (&&)
y (||) se utilizan para simplificar las
operaciones de comparacin evitando
operaciones innecesarias, pero tambin
para evitar ciertos errores que se
produciran en caso de evaluar
incondicionalmente el segundo
argumento.
Ejemplo:
Sentencia que evita una divisin por
cero
r = (b~=0) && (a/b>0);
& and (funcin equivalente: and(A,B)). Se
evalan siempre ambos operandos, y el
resultado es true slo si ambos son
true.
&& and breve: si el primer operando es false
ya no se evala el segundo, pues el
resultado final ya no puede ser ms que
false.
| or (funcin equivalente: or(A,B)). Se
evalan siempre ambos operandos, y el
resultado
es false slo si ambos son false.
|| or breve: si el primer operando es true
ya no se evala el segundo, pues el
resultado
final no puede ser ms que true.
~ negacin lgica (funcin equivalente:
not(A))
xor(A,B
)
realiza un "or exclusivo", es decir,
devuelve 0 en el caso en que ambos sean
1 ambos sean 0.
69
Funciones de Librera
MATLAB tiene un gran nmero de funciones incorporadas.
Algunas son funciones intrnsecas: funciones incorporadas en
el propio cdigo ejecutable del programa.
Estas funciones son particularmente rpidas y eficientes.
Existen adems funciones definidas en ficheros *.m y *.mex12
que vienen con el propio programa o que han sido aportadas
por usuarios del mismo.
Dispone tambin de ficheros *.p, que son los ficheros *.m pre-
compilados con la funcin pcode.
Para que MATLAB encuentre una determinada funcin de
usuario el correspondiente fichero-M debe estar en el
directorio actual o en uno de los directorios del search path.
70
Caractersticas generales de las funciones
Al igual que en C:
Una funcin tiene nombre, valor de retorno y argumentos.
Una funcin se llama utilizando su nombre en una expresin o
utilizndolo como un comando ms.
Las funciones se pueden definir en ficheros de texto *.m.
Ejemplos de llamada a funciones:
>> [maximo, posmax] = max(x);
>> r = sqrt(x^2+y^2) + eps;
Se han usado algunas funciones matemticas como el clculo del valor
mximo, el seno, el coseno y la raz cuadrada.
Los nombres de las funciones se han puesto en negrita.
Los argumentos de cada funcin van a continuacin del nombre
entre parntesis (y separados por comas si hay ms de uno).
>>Alfa=0.3
>> a = cos(alfa) - sin(alfa);
71
Cont Caractersticas generales de las funciones
Valores de retorno son el resultado de la funcin y sustituyen a sta
en la expresin donde la funcin aparece.
Las funciones pueden tener valores de retorno matriciales, como en el
primero de los ejemplos anteriores.
En este caso se calcula el elemento de mximo valor en un vector, y
se devuelven dos valores: el valor mximo y la posicin que ocupa en
el vector.
Los 2 valores de retorno se recogen entre corchetes, separados por
comas.
En MATLAB las funciones que no tienen argumentos no llevan
parntesis, por lo que a simple vista no siempre son fciles de
distinguir de las simples variables:
Ejemplo la funcin eps, que devuelve la diferencia entre 1.0 y el nmero
de coma flotante inmediatamente superior.
72
19
Cont Caractersticas generales de las funciones
Los nombres de las funciones de MATLAB no son palabras
reservadas del lenguaje.
Es posible crear una variable llamada sin o cos, que ocultan las funciones
correspondientes.
Para poder acceder a las funciones hay que eliminar (clear) las
variables del mismo nombre que las ocultan, o bien haber definido
previamente una referencia a funcin (function handle).
MATLAB permite que una funcin tenga un nmero variable de
argumentos y valores de retorno.
73
Funciones Internas
Hay operaciones complejas
En ocasiones, los operadores no son suficientes
Una funcin es
Una expresin
Toma un numero n de argumentos
Efecta una o varias operaciones sobre los mismos
Devuelve un resultado
La sintaxis de uso es la siguiente:
Variable = nombre_funcion(argumento1, argumento2,
...)
Todos los lenguajes tienen un conjunto de funciones
en comn
74
Cont Funciones Internas
Funcin Operacin Argumentos Resultado Ejemplo
abs(x) Valor Absoluto
de x
X es numrico Igual que el
argumento
X = -9
R = abs(X)
R tiene ahora 9
arctan(x) Arco tangente de
x
X es numrico Retorna un real
cos(x) Coseno de x X es numrico Retorna un real
exp(x) Exponencial de x X es numrico Retorna un real
ln(x) Logaritmo
neperiano de x
X es numrico Retorna un real
log10(x) Logaritmo
decimal de x
X es numrico Retorna un real
round(x) Redondeo de x X es real Retorna un
entero
X = 9.56
R = round(x)
R tiene ahora 10
sen(x) Seno de x X es numrico Retorna un real
75
Equivalencia entre comandos y funciones
Existe una equivalencia entre las funciones y los comandos con
argumentos de MATLAB. As, un comando en la forma,
>> comando arg1 arg2
es equivalente a una funcin con el mismo nombre que el
comando a la que los argumentos se le pasan como cadenas de
caracteres,
>> comando('arg1', 'arg2')
Esta dualidad entre comandos y funciones es sobre todo til en
programacin, porque permite construir los argumentos con
las operaciones propias de las cadenas de caracteres.
76
20
Funciones matemticas elementales
que operan de modo escalar
sin(x) seno
cos(x) coseno t
an(x) tangente
asin(x) arco seno
acos(x) arco coseno
atan(x) arco tangente (devuelve un ngulo entre -/2 y +/2)
atan2(x) arco tangente (devuelve un ngulo entre - y +), se le
pasan 2 argumentos, proporcionales al seno y al coseno
sinh(x) seno hiperblico
cosh(x) coseno hiperblico
tanh(x) tangente hiperblica
asinh(x) arco seno hiperblico
acosh(x) arco coseno hiperblico
atanh(x) arco tangente hiperblica
log(x) logaritmo natural
log10(x) logaritmo decimal
exp(x) funcin exponencial
sqrt(x) raz cuadrada
sign(x) devuelve -1 si <0, 0 si =0 y 1 si >0.
Aplicada a un nmero complejo, devuelve
un vector unitario en la misma direccin
rem(x,y) resto de la divisin (2 argumentos que no
tienen que ser enteros)
mod(x,y) similar a rem (Ver diferencias con el
Help)
round(x) redondeo hacia el entero ms prximo
fix(x) redondea hacia el entero ms prximo a 0
floor(x) valor entero ms prximo hacia -
ceil(x) valor entero ms prximo hacia +
gcd(x) mximo comn divisor
lcm(x) mnimo comn mltiplo
real(x) partes reales
imag(x) partes imaginarias
abs(x) valores absolutos
angle(x) ngulos de fase
77
Funciones que actan sobre vectores
No sobre matrices
Cuando se aplican sobre matrices se aplican por separado a cada columna de
la matriz, dando como valor de retorno un vector resultado de aplicar la funcin a
cada columna de la matriz considerada como vector.
Si estas funciones se quieren aplicar a las filas de la matriz basta aplicar dichas funciones a
la matriz transpuesta.
[xm,im]=max(x) mximo elemento de un vector. Devuelve el valor mximo xm xm xm xm y yy y la la la la posicin posicin posicin posicin que que que que ocupa ocupa ocupa ocupa im im im im
min(x) mnimo elemento de un vector. Devuelve el valor mnimo y la posicin que ocupa
sum(x) suma de los elementos de un vector
cumsum(x) devuelve el vector suma acumulativa de los elementos de un vector (cada elemento del
resultado es una suma de elementos del original)
mean(x) valor medio de los elementos de un vector
std(x) desviacin tpica
prod(x) producto de los elementos de un vector
cumprod(x) devuelve el vector producto acumulativo de los elementos de un vector
[y,i]=sort(x) ordenacin de menor a mayor de los elementos de un vector x xx x. .. . Devuelve Devuelve Devuelve Devuelve el el el el vector vector vector vector ordenado ordenado ordenado ordenado
y, y, y, y, y yy y un un un un vector vector vector vector i ii i con con con con las las las las posiciones posiciones posiciones posiciones iniciales iniciales iniciales iniciales en en en en x xx x de de de de los los los los elementos elementos elementos elementos en en en en el el el el vector vector vector vector ordenado ordenado ordenado ordenado y yy y. .. .
78
Determinacin de la fecha y la hora
Clock Clock Clock Clock devuelve un vector fila de seis elementos que representan el ao, ao, ao, ao, el el el el mes, mes, mes, mes, el el el el da, da, da, da, la la la la
hora, hora, hora, hora, los los los los minutos minutos minutos minutos y yy y los los los los segundos, segundos, segundos, segundos, segn segn segn segn el el el el reloj reloj reloj reloj interno interno interno interno del del del del computador computador computador computador. .. . Los Los Los Los cinco cinco cinco cinco
primeros primeros primeros primeros son son son son valores valores valores valores enteros, enteros, enteros, enteros, pero pero pero pero la la la la cifra cifra cifra cifra correspondiente correspondiente correspondiente correspondiente a aa a los los los los segundos segundos segundos segundos
contiene contiene contiene contiene informacin informacin informacin informacin hasta hasta hasta hasta las las las las milsimas milsimas milsimas milsimas de de de de segundo segundo segundo segundo. .. .
Now Now Now Now devuelve un nmero (serial serial serial serial date date date date number) number) number) number) que que que que contiene contiene contiene contiene toda toda toda toda la la la la informacin informacin informacin informacin de de de de la la la la
fecha fecha fecha fecha y yy y hora hora hora hora actual actual actual actual. .. . Se Se Se Se utiliza utiliza utiliza utiliza como como como como argumento argumento argumento argumento de de de de otras otras otras otras funciones funciones funciones funciones. .. .
Date Date Date Date devuelve la fecha actual como cadena de caracteres (por ejemplo: 24-Aug-2004).
datestr(t) datestr(t) datestr(t) datestr(t) convierte el serial date number t tt t en en en en cadena cadena cadena cadena de de de de caracteres caracteres caracteres caracteres con con con con el el el el da, mes, ao,
hora, minutos y segundos. Ver en los manuales on-line los formatos de cadena
admitidos.
datenum() datenum() datenum() datenum() convierte una cadena ('mes-da-ao') o un conjunto de seis nmeros (ao, mes,
da, horas, minutos, segundos) en serial date number.
datevec() datevec() datevec() datevec() convierte serial date numbers o cadenas de caracteres en el vector de seis
elementos que representa la fecha y la hora.
calendar() calendar() calendar() calendar() devuelve una matriz 67 con el calendario del mes actual, o del mes y ao que se
especifique como argumento.
weekday(t) weekday(t) weekday(t) weekday(t) devuelve el da de la semana para un serial date number t tt t. .. . 79
Otros Tipos de Datos de Matlab
MATLAB puede tambin trabajar con otros tipos de
datos:
1. Conjuntos o cadenas de caracteres, fundamentales en
cualquier lenguaje de programacin.
2. Hipermatrices, o matrices de ms de dos dimensiones.
3. Estructuras, o agrupaciones bajo un mismo nombre de datos
de naturaleza diferente.
4. Vectores o matrices de celdas (cell arrays), que son vectores
o matrices cuyos elementos pueden ser cualquier otro tipo de
dato.
5. Matrices dispersas, que son matrices que pueden ser de muy
gran tamao con la mayor parte de sus elementos cero.
80
21
Cadenas de caracteres
MATLAB trabaja con cadenas de caracteres, con ciertas semejanzas y diferencias
respecto a C/C++ y Java.
Las funciones para cadenas de caracteres estn en el sub-directorio
toolbox\matlab\strfun del directorio en que est instalado MATLAB.
Los caracteres de una cadena se almacenan en un vector, con un caracter por
elemento.
Cada carcter ocupa dos bytes.
Las cadenas de caracteres van entre apstrofos o comillas simples, como por ejemplo:
'cadena'.
Si la cadena debe contener comillas, stas se representan por un doble carcter comilla, de
modo que se pueden distinguir fcilmente del principio y final de la cadena.
Por ejemplo, para escribir la cadena ni 'idea' se escribira 'ni''idea'''.
Una matriz de caracteres es una matriz cuyos elementos son caracteres, o bien una
matriz cuyas filas son cadenas de caracteres.
Todas las filas de una matriz de caracteres deben tener el mismo nmero de
elementos.
Si es preciso, las cadenas (filas) ms cortas se completan con blancos.
81
Cont Cadenas de caracteres
Ejemplos:
>> c='cadena'
c =
cadena
>> size(c) % dimensiones del array
ans =
1 6
>> double(c) % convierte en nmeros ASCII cada carcter ans =
99 97 100 101 110 97
>> char(abs(c)) % convierte nmeros ASCII en caracteres ans =
cadena
>> cc=char('ms','madera') % convierte dos cadenas en una matriz
cc =
ms madera
>> size(cc) % se han aadido tres espacios a 'ms'
ans =
2 6
82
ContCadenas de caracteres
funciones ms importantes para manejo de cadenas de caracteres
double(c) double(c) double(c) double(c) convierte en nmeros ASCII cada carcter
char(v) char(v) char(v) char(v) convierte un vector de nmeros v vv v en en en en una una una una cadena cadena cadena cadena de de de de caracteres caracteres caracteres caracteres
char(c char(c char(c char(c1 11 1,c ,c ,c ,c2 22 2) )) ) crea una matriz de caracteres, completando con blancos las cadenas ms cortas
deblank(c) deblank(c) deblank(c) deblank(c) elimina los blancos al final de una cadena de caracteres
disp(c) disp(c) disp(c) disp(c) imprime el texto contenido en la variable c cc c
ischar(c) ischar(c) ischar(c) ischar(c) detecta si una variable es una cadena de caracteres
isletter() isletter() isletter() isletter() detecta si un carcter es una letra del alfabeto. Si se le pasa un vector o matriz de
caracteres devuelve un vector o matriz de unos y ceros
isspace() isspace() isspace() isspace() detecta si un carcter es un espacio en blanco. Si se le pasa un vector o matriz de
caracteres devuelve un vector o matriz de unos y ceros
strcmp(c strcmp(c strcmp(c strcmp(c1 11 1,c ,c ,c ,c2 22 2) )) ) comparacin de cadenas. Si las cadenas son iguales devuelve un uno, y si no lo son,
devuelve un cero (funciona de modo diferente que la correspondiente funcin de C)
strcmpi(c strcmpi(c strcmpi(c strcmpi(c1 11 1,c ,c ,c ,c2 22 2) )) ) igual que strcmp(c strcmp(c strcmp(c strcmp(c1 11 1,c ,c ,c ,c2 22 2), ), ), ), pero pero pero pero ignorando ignorando ignorando ignorando la la la la diferencia diferencia diferencia diferencia entre entre entre entre maysculas maysculas maysculas maysculas y yy y minsculas minsculas minsculas minsculas
strncmp(c strncmp(c strncmp(c strncmp(c1 11 1,c ,c ,c ,c2 22 2,n) ,n) ,n) ,n) compara los n nn n primeros primeros primeros primeros caracteres caracteres caracteres caracteres de de de de dos dos dos dos cadenas cadenas cadenas cadenas
c cc c1 11 1==c ==c ==c ==c2 22 2 compara dos cadenas carcter a carcter. Devuelve un vector o matriz de unos y ceros
83
ContCadenas de caracteres
funciones ms importantes para manejo de cadenas de caracteres
s=[s,' s=[s,' s=[s,' s=[s,' y yy y ms'] ms'] ms'] ms'] concatena cadenas, aadiendo la segunda a continuacin de la primera
findstr(c findstr(c findstr(c findstr(c1 11 1,c ,c ,c ,c2 22 2) )) ) devuelve un vector con las posiciones iniciales de todas las veces en que la cadena ms
corta aparece en la ms larga
strmatch(cc,c) strmatch(cc,c) strmatch(cc,c) strmatch(cc,c) devuelve los ndices de todos los elementos de la matriz de caracteres (o vector de celdas)
cc, cc, cc, cc, que que que que empiezan empiezan empiezan empiezan por por por por la la la la cadena cadena cadena cadena c cc c
strrep(c strrep(c strrep(c strrep(c1 11 1,c ,c ,c ,c2 22 2,c ,c ,c ,c3 33 3) )) ) sustituye la cadena c cc c2 22 2 por por por por c cc c3 33 3, ,, , cada cada cada cada vez vez vez vez que que que que c cc c2 22 2 es es es es encontrada encontrada encontrada encontrada en en en en c cc c1 11 1
[p,r]=strtok(t) [p,r]=strtok(t) [p,r]=strtok(t) [p,r]=strtok(t) separa las palabras de una cadena de caracteres t tt t. .. . Devuelve Devuelve Devuelve Devuelve la la la la primera primera primera primera palabra palabra palabra palabra p pp p y yy y el el el el
resto resto resto resto de de de de la la la la cadena cadena cadena cadena r rr r
int int int int2 22 2str(v) str(v) str(v) str(v) convierte un nmero entero en cadena de caracteres
num num num num2 22 2str(x,n) str(x,n) str(x,n) str(x,n) convierte un nmero real x xx x en en en en su su su su expresin expresin expresin expresin por por por por medio medio medio medio de de de de una una una una cadena cadena cadena cadena de de de de caracteres, caracteres, caracteres, caracteres, con con con con
cuatro cuatro cuatro cuatro cifras cifras cifras cifras decimales decimales decimales decimales por por por por defecto defecto defecto defecto (pueden (pueden (pueden (pueden especificarse especificarse especificarse especificarse ms ms ms ms cifras, cifras, cifras, cifras, con con con con un un un un argumento argumento argumento argumento
opcional opcional opcional opcional n) n) n) n)
str str str str2 22 2double(str) double(str) double(str) double(str) convierte una cadena de caracteres representando un nmero real en el nmero real
correspondiente
vc=cellstr(cc) vc=cellstr(cc) vc=cellstr(cc) vc=cellstr(cc) convierte una matriz de caracteres cc cc cc cc en en en en un un un un vector vector vector vector de de de de celdas celdas celdas celdas vc, vc, vc, vc, eliminando eliminando eliminando eliminando los los los los blancos blancos blancos blancos
adicionales adicionales adicionales adicionales al al al al final final final final de de de de cada cada cada cada cadena cadena cadena cadena. .. . La La La La funcin funcin funcin funcin char() char() char() char() realiza realiza realiza realiza las las las las conversiones conversiones conversiones conversiones opuestas opuestas opuestas opuestas
sprintf sprintf sprintf sprintf convierte valores numricos en cadenas de caracteres, de acuerdo con las reglas y
formatos de conversin del lenguaje C.
84
22
ContCadenas de caracteres
Uso de funciones
Ejemplo:
>> num2str(pi) % el resultado es una cadena de caracteres, no un
nmero ans =
3.142
>> num2str(pi,8)
ans =
3.1415927
Ejemplo:
Es habitual convertir los valores numricos en cadenas de
caracteres para poder imprimirlos como ttulos en los dibujos o
grficos.
>> fahr=70; grd=(fahr-32)/1.8;
>> title(['Temperatura ambiente: ',num2str(grd),' grados
centgrados'])
85
Hipermatrices (arrays de ms de dos
dimensiones)
Una posible aplicacin es almacenar con un
nico nombre distintas matrices del mismo
tamao (resulta una hipermatriz de 3
dimensiones).
Los elementos de una hipermatriz pueden
ser nmeros, caracteres, estructuras, y
vectores o matrices de celdas.
El tercer subndice representa la tercera
dimensin: la profundidad de la
hipermatriz.
Las funciones para trabajar con estas
hipermatrices estn en el sub-directorio
toolbox\matlab\datatypes.
86
Cont Hipermatrices
Ejemplo:
Las funciones que operan con matrices de ms de dos dimensiones son
anlogas a las funciones vistas previamente, aunque con algunas
diferencias.
Las siguientes sentencias generan, en dos pasos, una matriz de 232:
>> AA(:,:,1)=[1 2 3; 4 5 6] % matriz inicial
AA =
1 2 3
4 5 6
>> AA(:,:,2)=[2 3 4; 5 6 7] % se aade una segunda matriz
AA(:,:,1) =
1 2 3
4 5 6
AA(:,:,2) =
2 3 4
5 6 7
87
Cont Hipermatrices
Uso de funciones
Algunas funciones para generar
matrices admiten ms de dos
subndices y pueden ser
utilizadas para generar
hipermatrices.
Entre ellas estn rand(),
randn(), zeros() y ones().
Ejemplo:
>> BB=randn(2,3,2)
BB(:,:,1) =
-0.4326 0.1253 -1.1465
-1.6656 0.2877 1.1909
BB(:,:,2) =
1.1892 0.3273 -0.1867
-0.0376 0.1746 0.7258
Ejemplo:
La funcin cat() permite concatenar matrices
segn las distintas dimensiones.
>> A=zeros(2,3); B=ones(2,3);
i j
k
A(i,j,k)
>> cat(1,A,B)
ans =
0 0 0
0 0 0
1 1 1
1 1 1
>> cat(2,A,B)
ans =
0 0 0 1 1 1
0 0 0 1 1 1
>> cat(3,A,B)
ans(:,:,1) =
0 0 0
0 0 0
ans(:,:,2) =
1 1 1
1 1 1
88
23
Cont Hipermatrices
Uso de funciones
Las siguientes funciones de MATLAB
se pueden emplear tambin con
hipermatrices:
Para el resto de las funciones de
MATLAB, se pueden establecer reglas
para aplicar a hipermatrices:
1. Todas las funciones de MATLAB que
operan sobre escalares (sin(), cos(),
etc.) se aplican sobre hipermatrices
elemento a elemento.
Las operaciones con escalares tambin
se aplican de la misma manera.
2. Las funciones que operan sobre
vectores (sum(), max(), etc.) se
aplican a matrices e hipermatrices
segn la primera dimensin, resultando
un array de una dimensin inferior.
3. Las funciones matriciales propias del
lgebra Lineal (det(), inv(), etc.) no
se pueden aplicar a hipermatrices.
Para poderlas aplicarlas se debe extraer
primero las matrices correspondientes
(por ejemplo, con el operador dos
puntos (:)).
size() devuelve tres o ms valores (el
n de elementos en cada
dimensin)
ndims() devuelve el nmero de
dimensiones
squeeze() elimina las dimensiones que son
igual a uno
reshape() distribuye el mismo nmero de
elementos en una matriz con
distinta forma o con distintas
dimensiones
permute(A,v) permuta las dimensiones de A
segn los ndices del vector v
ipermute(A,v) realiza la permutacin inversa
89
Estructuras
Struct: es una agrupacin de
datos de tipo diferente bajo un
mismo nombre.
Estos datos se llaman miembros
(members) o campos (fields).
Una estructura es un nuevo tipo de
dato, del que luego se pueden
crear muchas variables (objetos o
instances).
Ejemplo:
La estructura alumno puede
contener los campos:
nombre (una cadena de caracteres) y
carnet (un nmero)
En MATLAB la estructura alumno se
crea creando un objeto de dicha
estructura.
A diferencia de otros lenguajes de
programacin, no hace falta definir
previamente el modelo o patrn de la
estructura.
Ejemplo:
Una posible forma de hacerlo es crear
uno a uno los distintos campos
>> alu.nombre='Miguel'
alu =
nombre: 'Miguel'
>> alu.carnet=75482
alu =
nombre: 'Miguel'
carnet: 75482
>> alu alu =
nombre: 'Miguel'
carnet: 75482
90
Cont Estructuras
Se accede a los miembros o campos de una estructura por medio
del operador punto (.), que une el nombre de la estructura y el
nombre del campo (por ejemplo: alu.nombre).
Ejemplo:
Puede crearse la estructura por medio de la funcin struct().
>> alu = struct('nombre', 'Ignacio', 'carnet', 76589)
alu =
nombre: 'Ignacio'
carnet: 76589
Los nombres de los campos se pasan a la funcin struct()
entre apstrofos ('), seguidos del valor que se les quiere dar. Este
valor puede ser la cadena vaca ('') o la matriz vaca ([]).
91
Cont Estructuras
Ejemplo:
Pueden crearse vectores y matrices (e hipermatrices) de estructuras.
Crear un vector de 10 elementos cada uno de los cuales es una estructura tipo
alumno.
>> alum(10) = struct('nombre', 'Ignacio', 'carnet', 76589)
Slo el elemento 10 del vector es inicializado con los argumentos de la funcin
struct()
El resto de los campos se inicializan con una cadena vaca o una matriz vaca.
Ejemplo:
Para dar valor a los campos de los elementos restantes se puede utilizar un bucle
for con sentencias del tipo:
>> alum(i).nombre='Noelia', alum(i).carnet=77524;
92
24
Cont Estructuras
Ejemplo:
MATLAB permite aadir un nuevo campo a una estructura en
cualquier momento.
La siguiente sentencia aade el campo edad a todos los elementos
del vector alum, aunque slo se da valor al campo del elemento 5:
>> alum(5).edad=18;
Para ver el campo edad en los 10 elementos del vector puede
teclearse el comando:
>> alum.edad
93
Cont Estructuras
Uso de funciones
fieldnames() fieldnames() fieldnames() fieldnames() devuelve un vector de celdas con cadenas de caracteres que
recogen los nombres de los campos de una estructura
isfield(ST,s) isfield(ST,s) isfield(ST,s) isfield(ST,s) permite saber si la cadena s ss s es es es es un un un un campo campo campo campo de de de de una una una una estructura estructura estructura estructura ST ST ST ST
isstruct(ST) isstruct(ST) isstruct(ST) isstruct(ST) permite saber si ST ST ST ST es es es es o oo o no no no no una una una una estructura estructura estructura estructura
rmfield(ST,s) rmfield(ST,s) rmfield(ST,s) rmfield(ST,s) elimina el campo s ss s de de de de la la la la estructura estructura estructura estructura ST ST ST ST
getfield(ST,s) getfield(ST,s) getfield(ST,s) getfield(ST,s) devuelve el valor del campo especificado. Si la estructura es un
array hay que pasarle los ndices como cell array (entre llaves {})
como segundo argumento 14 Esta forma de crear arrays de estructuras
da error si la estructura ha sido previamente declarada global global global global. .. .
setfield(ST,s,v) setfield(ST,s,v) setfield(ST,s,v) setfield(ST,s,v) da el valor v vv v al al al al campo campo campo campo s ss s de de de de la estructura ST ST ST ST. .. . Si Si Si Si la estructura es
un array, hay que pasarle los ndices como cell array (entre
llaves {}) como segundo argumento
94
Cont Estructuras
Estructuras anidadas: una estructura con campos que sean otras estructuras.
Para acceder a los campos de la estructura ms interna se utiliza dos veces el operador
punto (.)
Ejemplo:
en este la estructura clase contiene un campo que es un vector alum de alumnos
>> clase.alum(2).nombre='Mara';
>> clase.alum(2).edad=17;
>> clase.alum(2)
ans =
nombre: 'Mara'
edad: 17
>> clase.alum(1)
ans =
nombre: 'Juan'
edad: 19
>> clase=struct('curso','primero','grupo','A', ...
'alum', struct('nombre','Juan', 'edad', 19))
clase =
curso: 'primero'
grupo: 'A'
alum: [1x1 struct]
95
Programacin en MATLAB
Matlab dispone de las siguiente estructuras:
Muchos lenguajes de programacin disponen de bucles con control al principio (for
y while en C/C++/Java) y al final (do while en C/C++/Java).
En MATLAB no hay bucles con control al final del bucle, es decir, no existe
construccin anloga a do ... while.
96
25
Cont Programacin en MATLAB
Sentencia if
Bifurcacin simple:
A diferencia de C/C++/Java:
la condicin no va entre
parntesis, aunque se pueden
poner si se desea
if condicion
Sentencias
end
La condicin del if puede ser una
condicin matricial, del tipo A==B,
donde A y B son matrices del mismo
tamao.
Para que se considere que la condicin
se cumple, es necesario que sean
iguales dos a dos todos los elementos
de las matrices A y B (aij=bij, 1im,
1jn).
Bifurcacin mltiple:
Pueden concatenarse tantas
condiciones como se desee
if condicion1
bloque1
elseif condicion2
bloque2
elseif condicion3
bloque3
else % opcin por defecto para
cuando no se cumplan las
condiciones 1,2,3
bloque4
End
97
Cont Programacin en MATLAB
Uso de la Sentencia if
if condicion
Sentencia 1;
Sentencia 2;
...
else
Sentencia 1;
Sentencia 2;
...
end
if condicion
Sentencia 1;
Sentencia 2;
...
end
If condicion
Sentencia 1;
Sentencia 2;
...
elseif condicion2
Sentencia 1;
Sentencia 2;
...
elseif condicion3
Sentencia 1;
Sentencia 2;
...
else
Sentencia 1;
Sentencia 2;
...
end 98
Cont Programacin en MATLAB
Ejercicio
Se desea determinar si un nmero entero, ingresado
por teclado es par.
Inicio
n mod 2 == 0
Leer(n)
Escribir (Impar) Escribir (Par)
Fin
Escribir(?)
n=input(Ingrese un numero:);
if mod(n,2) == 0
fprintf(%d es par, n);
else
fprintf( %d es impar, n);
end
Si No
99
Cont Programacin en MATLAB
Ejercicio
Se desea determinar si un nmero ingresado por
teclado es positivo, negativo, o nulo.
Inicio
n< 0
Leer(n)
Escribir (Negativo)
Escribir (Positivo)
Fin
Escribir(?)
Escribir (Cero)
n> 0
n== 0
n = input(Ingrese numero:);
if n> 0
fprintf( %d es positivo, n);
elseif n < 0
fprintf( %d es negativo, n);
elseif n ==0
fprintf( %d es cero, n);
end
100
26
Otras maneras de resolver el ejercicio
n = input(Ingrese numero:);
if n> 0
fprintf( %d es positivo, n);
else
if n < 0
fprintf( %d es negativo, n);
else
if n ==0
fprintf( %d es cero, n);
end
end
end
n = input(Ingrese numero:);
if n ==0
fprintf( %d es cero, n);
elseif n < 0
fprintf( %d es negativo, n);
else
fprintf( %d es positivo, n);
end
101
Cont Programacin en MATLAB
Ejercicio en clase
Realice un programa que le permita determinar si un ao es
bisiesto o no.
Las condiciones para que un ao sea bisiesto son:
Si es divisible para 400 o,
Si es divisible para 4, excepto los que terminan en
00(divisibles para 100).
Ejemplos:
El ao 1988
Es divisible para 4
No termina en 00
Es ao bisiesto.
El ao 1900
Es divisible para 100
No es divisible para 400: NO BISIESTO
El ao 2000
Es divisible para 400: BISIESTO
102
fprintf(Programa para determinar si un ao es bisiesto\n);
y = input(Ingrese el ao:);
if (mod(y,4) == 0 & mod(y,100)~=0) | (mod(y,400) == 0)
fprintf(%d es bisiesto\n, y);
else
fprintf(%d no es bisiesto\n, y);
end
Cont Programacin en MATLAB
Solucin
103
Cont Programacin en MATLAB
Ejercicio en clase
Escriba un programa que dadas dos notas (parcial y
final), indique si el alumno aprueba o no la materia
(aprueba con un promedio de 60).
Solo si no aprueba, el programa debe
Pedir una tercera nota (mejoramiento) e indicar si ahora
aprueba o no.
Solo si aprueba debe mostrarse el promedio.
104
27
Dos maneras de resolverlo
n=input('Ingrese nota parcial:'),
n1=input('Ingrese nota final:'),
Promedio=(n+n1)/2,
if Promedio>=60
fprintf('Aprobado'),
elseif Promedio<60
fprintf('Reprobado'),
n2=input('Ingrese nota de mejoramiento:'),
if n>=n1
Promedio=(n+n2)/2,
else
Promedio=(n1+n2)/2,
end
if Promedio>=60
fprintf('Aprobado'),
end
end
n=input('Ingrese nota parcial:'),
n1=input('Ingrese nota final:'),
Promedio=(n+n1)/2,
if Promedio>=60
fprintf('Aprobado'),
else
fprintf('Reprobado'),
n2=input('Ingrese nota de mejoramiento:'),
if n>=n1
Promedio=(n+n2)/2,
else
Promedio=(n1+n2)/2,
end
if Promedio>=60
fprintf('Aprobado'),
end
end
105
Cont Programacin en MATLAB
Sentencia switch
Su forma general es la siguiente:
switch switch_expresion case case_expr1, bloque1
case {case_expr2, case_expr3, case_expr4,...}
bloque2
...
otherwise, % opcin por defecto
bloque3
End
A diferencia de C/C++/Java, en MATLAB slo se ejecuta uno
de los bloques relacionado con un case.
106
Cont Programacin en MATLAB
Sentencia for
Repite un conjunto de sentencias un
nmero predeterminado de veces.
En MATLAB es muy diferente y no
tiene la generalidad de la sentencia for
de C/C++/Java. La siguiente
construccin ejecuta sentencias con
valores de i de 1 a n, variando de uno
en uno.
for i=1:n
sentencias
end
o bien,
for i=vectorValores
sentencias
end
donde vectorValores es un
vector con los distintos valores
que tomar la variable i.
Ejemplo:
Caso ms general para la
variable del bucle (valor_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 llega a ser menor que 1, en
cuyo caso el bucle se termina:
for i=n:-0.2:1
sentencias
end
for indice=expr
sentencia1;
sentencia2;
...
end
107
Cont Programacin en MATLAB
Ejemplo:
Presenta una estructura
correspondiente a dos bucles
anidados.
La variable j es la que vara ms
rpidamente (por cada valor de i, j
toma todos sus posibles valores):
for i=1:m
for j=1:n
sentencias
end
end
Ejemplo:
Otra forma del bucle for (A es
una matriz):
for i=A
sentencias
End
variable i es un vector que va
tomando en cada iteracin el
valor de una de las columnas de
A.
Cuando se introducen
interactivamente en la lnea de
comandos, los bucles for se
ejecutan slo despus de
introducir la sentencia end que
los completa.
108
28
Cont Programacin en MATLAB
Ejercicios en clase
Escriba un programa que reciba un texto y lo
imprima n veces en pantalla.
tex = input('Ingrese un texto:','s');
n=input('Ingrese el numero de repeticiones:');
for i=1:n
fprintf(tex),
fprintf('\n'),
end
Escriba un programa que dado un nmero n
imprima todos los nmeros impares del 1 hasta n.
109
Cont Programacin en MATLAB
Ejercicios en clase
Escriba un programa que calcule el factorial de un nmero.
Resolucin
f=1;
n=input('Ingrese numero:');
if n<0
n=input('Ingrese un numero entero mayor a cero:'),
end
if (n==0)||(n==1)
fprintf('El factorial del numero es 1');
else
for i=1:n;
f=f*i;
end
fprintf('%d es el factoria del numero %d ', f, n);
end
110
Cont Programacin en MATLAB
Sentencia while
La estructura del bucle while es muy similar
a la de C/C++/Java.
Su sintaxis es la siguiente:
while condicion
sentencias
End
donde condicion puede ser una expresin
vectorial o matricial.
Las sentencias se siguen ejecutando
mientras haya elementos distintos de cero
en condicion, es decir, mientras haya
algn o algunos elementos true.
El bucle se termina cuando todos los
elementos de condicion son false (es
decir, cero).
Sentencia break
Al igual que en C/C++/Java,
la sentencia break hace
que se termine la ejecucin
del bucle for y/o while ms
interno de los que
comprenden a dicha
sentencia.
Sentencia continue
La sentencia continue hace
que se pase
inmediatamente a la
siguiente iteracin del bucle
for o while, saltando todas
las sentencias que hay entre
el continue y el fin del
bucle en la iteracin actual.
111
Cont Programacin en MATLAB
Sentencias try...Catch...End
La construccin try...catch...end permite gestionar los errores que se pueden producir
en tiempo de ejecucin.
Su forma es la siguiente:
try
sentencias1
catch
sentencias2
End
En el caso de que durante la ejecucin del bloque sentencias1 se produzca un error, el
control de la ejecucin se transfiere al bloque sentencias2.
Si la ejecucin transcurriera normalmente, sentencias2 no se ejecutara nunca.
MATLAB dispone de una funcin lasterr que devuelve una cadena de caracteres
con el mensaje correspondiente al ltimo error que se ha producido.
En la forma lasterr('') pone a cero este contador de errores, y hace que la funcin
lasterr devuelva la matriz vaca [] hasta que se produzca un nuevo error.
112
29
Condiciones
Las condiciones se construyen usando:
Operadores lgicos
AND ( & )
OR ( | )
NOT (~)
Operadores relacionales (<, >=, >, >=, ==, ~=)
No confundir
El operador de asignacin = , usado para asignar un valor a una
variable.
Con el operador de equivalencia ==, para comparar dos valores
if(x = 0)
if(x == 0)
Operacin de asignacin,
asigna el valor 0 a la
variable x. No compara.
Operacin relacional,
se pregunta si x es
igual a 0
113
Evaluacin de Condiciones
Las expresiones lgicas:
Son evaluadas de izquierda a derecha
En MATLAB pueden tomar valores de 0 y 1.
0 cuando la condicin es falsa.
1 cuando la condicin es verdadera.
La evaluacin termina cuando se puede deducir el resultado.
Ejemplo:
En A): Si exp1 es falso en el caso entonces toda la expresin es
falsa.
En B): Si exp1 es verdadero, toda la expresin es verdadera.
Escriba una condicin para la siguiente expresin
Que y sea divisible para x y que x sea diferente de 0.
A) exp1 & exp2 B) exp1 | exp2
(mod(y,x) == 0) & (x~=0)
114
Cont Programacin en MATLAB
Ejercicio en Clase:
Escriba un programa que dado un nmero
n, indique para cuantos nmeros es
divisible.
Aada una condicin para saber si el numero n
es o no primo (solo es divisible para 1 y para
n).
115
Cont Programacin en MATLAB
Funcin input
Imprime un mensaje en la lnea de comandos y recuperar como valor de
retorno un valor numrico o el resultado de una expresin tecleada por
el usuario.
El usuario puede teclear simplemente un vector o una matriz.
Ejemplo:
>> n = input('Teclee el nmero de ecuaciones')
Otra posible forma de esta funcin es la siguiente (obsrvese el
parmetro 's')
>> nombre = input('Cmo te llamas?','s')
En este caso el texto tecleado como respuesta se lee y se devuelve sin
evaluar, con lo que se almacena en la cadena nombre. As pues, en
este caso, si se teclea una frmula, se almacena como texto sin
evaluarse.
116
30
Cont Programacin en MATLAB
Funcin disp
Permite imprimir en pantalla un mensaje de texto o el valor
de una matriz, pero sin imprimir su nombre.
Siempre imprime vectores y/o matrices: las cadenas de
caracteres son un caso particular de vectores.
Ejemplos:
>> disp('El programa ha terminado')
>> A=rand(4,4)
>> disp(A)
117
Caracteres especiales comunes
usados en la funcin fprintf
Formato Resultado
%d Muestra un valor como entero.
%e Muestra un valor en formato
exponencial.
%f Muestra un valor con formato de
punto flotante.
%g Muestra un valor con punto
flotante o formato exponencial,
dependiendo de cual sea ms
corto.
\n Posiciona el cursor en la siguiente
lnea.
118
Ejercicios en clase
Escriba un programa en MATLAB para
calcular el rea de un crculo.
Dados 2 puntos en el eje cartesiano (x1,y1) y
(x2,y2), escriba un programa en MATLAB que
calcule la distancia entre los puntos.
Dados la base y la altura de un polgono,
determinar el rea del mismo e indicar si se
trata de un rectngulo o un cuadrado.
119
Definamos los datos de entrada, salida
y las interfaces:
Un Problema con Clculos
Entrada
Base
Procesamiento
Base * Altura Datos
Teclado
Interfase
Salida
rea
Datos
Monitor
Interfase
Mensajes
Altura Teclado
La Base es
igual a la
Altura?
120
31
OPERACIONES MATEMATICAS
P
r
e
c
e
d
e
n
c
i
a
4 Entero 10 mod 6 Entero Modulo Mod
8
8.7
10.875
Entero o real 4*2
4.35* 2
4.35 * 2.5
Entero o
real
Multiplicacin *
2.00
1.74
Real 4.00/2.00
4.35/ 2.5
Real Divisin /
16
20.25
2.121
Entero o real
4^2
4.5 ^ 2
4.5 ^ 0.5
Entero o
real
Exponenciacin ^
1 Entero 10 div 6 Entero Divisin entera Div
2
2.35
1.85
Entero o real
4-2
4.35- 2
4.35 - 2.5
Entero o
real
Resta -
6
6.35
6.85
Entero o real
4+2
4.35+ 2
4.35 + 2.5
Entero o
real
Suma +
Ejemplo Resultado Ejemplo Operando Significado Operad.
121
OPERACIONES RELACIONALES
Las operaciones lgicas usualmente se combinan con las operaciones relacionales
Las operaciones relacionales SIEMPRE dan como resultado un valor LGICO
Verdadero El nombre del autor de 100 aos de soledad es igual que el de
Crnica de una muerte Anunciada
Igual que ==
Verdadero 6 <= 10 Mayor o
igual que
<=
Falso 10 >= 8 Menor o
igual que
>=
Falso
Verdadero
5 ~= 5
El precio de una entrada en el Albocine es diferente de el de las
entradas en el Cinemark
Diferente de
~=
Verdadero
Falso
El rea del Campus Prosperina es mayor que la del Campus Peas
8>10
Mayor que >
Falso
Verdadero
El total de estudiantes de la Estatal es menor que el de la Politcnica
4<10
Menor que <
Resultado Ejemplo Significado Operador
122
EJERCICIO
Calcule el rea de un crculo.
Que puede variar en el problema?.
Que es fijo?.
123
Contar y Acumular
Al usar repeticiones de acciones
Muchas veces se necesita contar cuantas veces se
repitieron ciertas acciones o ir sumando nuevos valores en
cada repeticin.
Para esto se usan variables enteras
Que se incrementan o decrementan con un valor fijo
(contadores).
c = c + 1;
O que se incrementen o decrementen con un valor variable.
t = t + v;
La sentencia que efecta el incremento se coloca
dentro de un lazo.
Para que la variable en cuestin aumente.
124
32
Tarea
Escriba un programa, tal que dado un valor n
entero positivo, calcule y muestre los elementos
correspondientes a la conjetura de Ullman, que
consiste en lo siguiente:
Empiece con cualquier entero positivo
Si es par, divdalo para 2
Si es impar, multiplquelo por 3 y agrguele 1
Obtenga enteros sucesivamente repitiendo el proceso
Al final se obtendr el nmero 1,
independientemente del entero inicial.
Por ejemplo, cuando el entero es 52, la secuencia
ser:
52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1
125
Plotting
La funcin en Matlab que permite crear
grficos de funciones es:
plot(x,y)
El comando plot(x,y) permite graficar
los elementos del vector x en el eje x y
los elementos del vector y en el eje y.
126
Ejemplo
Si quisiramos graficar la funcin: y=3x. Escribimos
un programa en Matlab que tenga las siguientes
sentencias:
Genera el siguiente grfico:
x = 0:0.1:100;
y = 3*x;
plot(x,y);
127
Plotting

Colores Point marker
y amarillo . point
m magenta
o circle
c cyan
x x-mark
r rojo + smbolo mas
g verde - lnea slida
b blue * star
w white : dotted


El tercer parmetro de la funcin plot puede tener de 1 a 3
caracteres que especifican el color y/o el tipo point marker
que se usar para realizar el grfico.
128
33
Ejemplo
x = 0:0.1:100;
y = 3*x;
plot(x,y,'r:')
129
Graficando ms de una funcin en la
ventana de Grficos de Matlab
Usar la funcin hold.
hold on: retiene el grfico actual en la
ventana de grficos de Matlab.
hold off: Es el valor por defecto, hace que
se realice un nuevo grfico y borra el(los)
anterior(es).
130
Ejemplo
Grafique la funciones seno y coseno en
funcin del tiempo.
t=0:0.25:7;
y = sin(t);
plot(t,y,r);
z = cos(t);
hold on
plot(t,z,gx);
hold off
131
Etiquetas para los grficos
title('Funcin seno de x');
xlabel('abscisa x');
ylabel('sen(x)');
Ver funcioncuadratica.n
132
34
Tarea
Suponga que una bola es lanzada a una altura ho sobre la
superficie de la tierra, con una velocidad inicial Vo, la
posicin y la velocidad de la bola como funcin del tiempo
est dada por las siguientes ecuaciones:
h(t) = (1/2)gt
2
+ Vot + ho
V(t) = gt + Vo
Donde g es la aceleracin debida a la gravedad (-9.81
m/s
2
), h es la altura sobre la superficie de la tierra
(asumiendo que no hay friccin en el aire), y V es el
componente vertical de la velocidad.
Escriba un programa en MATLAB que pida al usuario la
altura inicial de la bola en metros y la velocidad inicial de
la bola en metros por segundo, y permita al usuario
seleccionar si desea ver el grfico de altura en funcin del
tiempo o el de velocidad en funcin del tiempo. Incluir las
etiquetas apropiadas en los grficos.
133

You might also like