Académique Documents
Professionnel Documents
Culture Documents
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.
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
Command History.
Estos se pueden volver a ejecutar haciendo doble clic sobre ellos.
Command Window
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.
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
Segunda 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). se define una matriz B que es igual a la inversa de A. Finalmente se ha multiplicado B por A, y se comprueba que el resultado es la matriz unidad.
Tercera Instruccin
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
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
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
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).
Cont
Al hacer doble clic en uno de los elementos del workspace aparece el Array editor, en el cual se puede modificar los datos
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.
Cont El Editor/Debugger
Para comentar con el carcter % varias lneas se debe seleccionarlas, hacer clic derecho y elegir Comment.
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
Estos comentarios pueden volver a ser cdigo ejecutable seleccionndolos y ejecutando Uncomment en el men contextual.
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.
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
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
14
Cont Preferencias
MATLAB siempre calcula con doble precisin, es decir con unas 16 cifras decimales equivalentes
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
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 -ascii % almacena 8 cifras decimales >> save -ascii -double % almacena 16 cifras decimales
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.
>> 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.
Con la opcin -append en el comando save la informacin se guarda a continuacin de lo que hubiera en el fichero.
17
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)
>> diary filename.txt ... >> diary off % suspende la ejecucin de diary ... >> diary on ... % reanuda la ejecucin de diary
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).
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
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.
20
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
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:
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= 123 456 789
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 (;).
22
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:
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.
24
Ejemplo:
si A es una matriz (33) se obtiene el mismo valor escribiendo A(1,2) que escribiendo A(4).
Ejemplo:
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 215 -2 5 3
>> 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
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.
Vector Columna x
Ejemplo:
Ejemplo:
26
27
Operadores: suma (+), producto (*) y traspuesta (') Funciones: invertir inv( )
+ 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
Ejemplo:
>> A=[1 2; 3 4] A= 12 34 >> A*2 ans = 24 68 >> 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
Considrese el siguiente sistema de ecuaciones lineales, Ax = b (1) donde x y b son vectores columna, y A una matriz cuadrada invertible.
Ejemplo: Considrese el siguiente ejemplo de matriz (12) que conduce a un sistema de infinitas soluciones.
>> A=[1 2], b=[2] A= 12 b= 2 >> x=A\b x= 0 1
30
Ejemplo:
Sistema de tres ecuaciones formadas por una recta que no pasa por el origen y los dos ejes de coordenadas:
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
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): 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)
yB = c (3)
32
Se puede aplicar elemento a elemento los operadores matriciales (*, ^, \ y /). Para ello basta precederlos por un punto (.).
Ejemplo 1:
Ejemplo 2:
>> [1 2 3 4]^2 ??? Error using ==> ^ Matrix must be square. >> [1 2 3 4].^2 ans = 1 4 9 16
>> [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
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,
Texto Edad Numrico Ao Numrico Cdigo Materia Texto Paralelo Numrico Es Deudor? Lgico
Nombre
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:
Matrices de ms dos dimensiones, matrices dispersas, vectores y matrices de celdas, estructuras y clases y objetos.
36
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: 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
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
37
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.2204e016. 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
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
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.
Las variables sin signo representan nmero no negativos, desde el 0 al nmero mximo.
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
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
Nmeros Reales
MATLAB dispone de dos tipos de variables reales o float: single (4 bytes) y double (8 bytes).
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.
42
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
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
>> j=A>10 j= 1001 0100 0001 0110 >> 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
44
Ejemplo No(6>10) (1<5) y (5>10) Ecuador clasific y Colombia no clasifico (5>10) o (10<9)
O(or)
Disyuncin
Entero o real
45
En muchos clculos matriciales los datos y/o los resultados no son reales sino complejos, pero MATLAB trabaja sin ninguna dificultad con ellos.
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
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 (*).
46
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
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. 47
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
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. Asignando su resultado a una variable:
variable = expresin
expresin El resultado se asigna a la variable interna ans (de answer) que almacena el ltimo resultado.
49
Ejemplo de variables:
El valor del radio, y el valor del Area, pueden cambiar Una variable es
Ejemplo:
Las variables pueden ser de cualquier tipo de dato. La computadora representa a las variables como
50
Si se desea que contine en la lnea siguiente, se debe introducir tres puntos (...) antes de pulsar intro.
Evita la escritura de resultados intermedios y de grandes cantidades de nmeros para matrices de gran tamao.
51
Debe tener un nombre que la identifique: MATLAB distingue entre maysculas y minsculas los nombres de variables. Los nombres deben empezar siempre por una letra
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: Mal:
A diferencia del C, no hace falta declarar las variables que se vayan a utilizar.
Bien: Mal:
Se deba tener especial cuidado con no utilizar nombres errneos en las variables, porque no se recibir ningn aviso del ordenador.
52
53
Constantes
Pi es una constante
Las constantes, no tienen porque solo ser nmeros, pueden ser datos de todo tipo.
Operador de Asignacin
Ejemplo:
A B B A B
A=5
A = A*5
55
zeros(3,5)
zeros(4) ones(3) ones(2,4) linspace(x1,x2,n) logspace(d1,d2,n)
rand(3)
rand(2,5) randn(4) magic(4) hilb(5) invhilb(5) kron(x,y)
forma una matriz de nmeros aleatorios entre 0 y 1, con distribucin uniforme, de tamao (33)
idem de tamao (25) forma una matriz de nmeros aleatorios de tamao (44), con distribucin normal, de valor medio 0 y varianza 1. crea una matriz (44) con los nmeros 1, 2, ... 4*4, con la propiedad de que todas las filas y columnas suman lo mismo 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 crea directamente la inversa de la matriz de Hilbert 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)
vander(v)
construye una matriz cuyo polinomio caracterstico tiene como coeficientes los elementos del vector pol (ordenados de mayor grado a menor)
construye la matriz de Vandermonde a partir del vector v (las columnas son las potencias de los elementos de dicho vector)
56
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
58
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= 134
>> x=rand(1,6) x=
0.5899
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
>> 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 60
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
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.
61
Ejemplo:
>> x=1:2:10 x= 13579 >> 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
Ejemplo:
Por defecto, este operador produce vectores fila. Si se desea obtener un vector columna basta trasponer el resultado.
62
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
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
64
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= 100000 35 1 6 26 19 24 001000 3 32 7 21 23 25 31 9 2 22 27 20 000001 65
Ejemplo: Para invertir el orden de las columnas de una matriz se puede hacer lo siguiente:
>> A=magic(3) A= 816 357 492 >> A(:,3:-1:1) ans = 618 753 294
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.
66
MATLAB acepta como entrada un fichero nombre.m que 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
Operadores relacionales
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 = 01 00 >> A~=B ans = 10 11
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.
68
Cont
&
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.
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
Algunas son funciones intrnsecas: funciones incorporadas en el propio cdigo ejecutable del programa.
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 precompilados 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
Al igual que en C:
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;
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.
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).
71
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.
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
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
arctan(x)
X es numrico
Retorna un real
log10(x)
X es numrico
Retorna un real
round(x)
X es real
Retorna un entero
sen(x)
Seno de x
X es numrico
Retorna un real
75
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
77
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.
mximo elemento de un vector. Devuelve el valor mximo xm y la posicin que ocupa im mnimo elemento de un vector. Devuelve el valor mnimo y la posicin que ocupa suma de los elementos de un vector devuelve el vector suma acumulativa de los elementos de un vector (cada elemento del resultado es una suma de elementos del original) valor medio de los elementos de un vector desviacin tpica producto de los elementos de un vector devuelve el vector producto acumulativo de los elementos de un vector ordenacin de menor a mayor de los elementos de un vector x. Devuelve el vector ordenado y, y un vector i con las posiciones iniciales en x de los elementos en el vector ordenado y.
78
datenum()
datevec()
calendar() weekday(t)
convierte serial date numbers o cadenas de caracteres en el vector de seis elementos que representa la fecha y la hora.
devuelve una matriz 67 con el calendario del mes actual, o del mes y ao que se especifique como argumento. devuelve el da de la semana para un serial date number t. 79
2. 3.
4.
5.
Conjuntos o cadenas de caracteres, fundamentales en cualquier lenguaje de programacin. Hipermatrices, o matrices de ms de dos dimensiones. Estructuras, o agrupaciones bajo un mismo nombre de datos de naturaleza diferente. Vectores o matrices de celdas (cell arrays), que son vectores o matrices cuyos elementos pueden ser cualquier otro tipo de dato. Matrices dispersas, que son matrices que pueden ser de muy gran tamao con la mayor parte de sus elementos cero.
80
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.
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.
81
Cont
Cadenas de caracteres
Ejemplos:
>> c='cadena' c= cadena >> size(c) ans = 1 6 >> double(c) 99 97 100 101 % dimensiones del array
>> cc=char('ms','madera') % convierte dos cadenas en una matriz cc = ms madera >> size(cc) ans = 2 6 % se han aadido tres espacios a 'ms'
82
char(v)
char(c1,c2) deblank(c) disp(c) ischar(c) isletter() isspace() strcmp(c1,c2) strcmpi(c1,c2) strncmp(c1,c2,n)
c1==c2
83
findstr(c1,c2)
strmatch(cc,c) strrep(c1,c2,c3) [p,r]=strtok(t) int2str(v) num2str(x,n)
devuelve un vector con las posiciones iniciales de todas las veces en que la cadena ms corta aparece en la ms larga
devuelve los ndices de todos los elementos de la matriz de caracteres (o vector de celdas) cc, que empiezan por la cadena c sustituye la cadena c2 por c3, cada vez que c2 es encontrada en c1 separa las palabras de una cadena de caracteres t. Devuelve la primera palabra p y el resto de la cadena r convierte un nmero entero en cadena de caracteres convierte un nmero real x en su expresin por medio de una cadena de caracteres, con cuatro cifras decimales por defecto (pueden especificarse ms cifras, con un argumento opcional n) convierte una cadena de caracteres representando un nmero real en el nmero real correspondiente convierte una matriz de caracteres cc en un vector de celdas vc, eliminando los blancos adicionales al final de cada cadena. La funcin char() realiza las conversiones opuestas convierte valores numricos en cadenas de caracteres, de acuerdo con las reglas y formatos de conversin del lenguaje C. 84
>> 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
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:
88
Cont Hipermatrices
Uso de funciones
Las siguientes funciones de MATLAB se pueden emplear tambin con hipermatrices:
devuelve tres o ms valores (el n de elementos en cada dimensin) devuelve el dimensiones nmero de
Para el resto de las funciones de MATLAB, se pueden establecer reglas para aplicar a hipermatrices:
1. Todas las funciones de MATLAB que
size()
operan sobre escalares (sin(), cos(), etc.) se aplican sobre hipermatrices elemento a elemento.
elimina las dimensiones que son igual a uno distribuye el mismo nmero de elementos en una matriz con distinta forma o con distintas dimensiones
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
permute(A,v)
ipermute(A,v)
primero las matrices correspondientes (por ejemplo, con el operador dos puntos (:)).
89
Estructuras
Struct: es una agrupacin de datos de tipo diferente bajo un mismo nombre. Estos datos se llaman miembros (members) o campos (fields).
A diferencia de otros lenguajes de programacin, no hace falta definir previamente el modelo o patrn de la estructura.
Una estructura es un nuevo tipo de dato, del que luego se pueden crear muchas variables (objetos o instances).
Ejemplo:
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
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
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() isfield(ST,s) devuelve un vector de celdas con cadenas de caracteres que recogen los nombres de los campos de una estructura permite saber si la cadena s es un campo de una estructura ST
isstruct(ST)
rmfield(ST,s) getfield(ST,s)
setfield(ST,s,v)
da el valor v al campo s de la estructura ST. 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 (.) en este la estructura clase contiene un campo que es un vector alum de alumnos
Ejemplo:
>> clase=struct('curso','primero','grupo','A', ... 'alum', struct('nombre','Juan', 'edad', 19)) clase = curso: 'primero' grupo: 'A' alum: [1x1 struct]
>> 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
95
Programacin en MATLAB
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
Cont
Programacin en MATLAB
Bifurcacin mltiple:
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).
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
end
98
Cont
Ejercicio
Programacin en MATLAB
else
fprintf( %d es impar, n); end
n mod 2 == 0
Escribir (Par)
Escribir (Impar)
Fin
99
Cont
Ejercicio
Programacin en MATLAB
elseif n < 0
n== 0
Escribir (Cero)
Fin
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.
102
Cont
Solucin
Programacin en MATLAB
end
103
Cont
Pedir una tercera nota (mejoramiento) e indicar si ahora aprueba o no. Solo si aprueba debe mostrarse el promedio.
104
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
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
for indice=expr sentencia1; sentencia2; ... 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:
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):
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
Cont
Programacin en MATLAB
Ejercicios en clase
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
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
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
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).
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
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 Operacin de asignacin, asigna el valor 0 a la variable x. No compara. Operacin relacional, se pregunta si x es igual a 0
if(x = 0)
if(x == 0)
113
Evaluacin de Condiciones
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: A) exp1 & exp2 B) exp1 | exp2 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. (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
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
%g
Muestra un valor con punto flotante o formato exponencial, dependiendo de cual sea ms corto.
Posiciona el cursor en la siguiente lnea.
118
\n
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
Teclado Teclado
Monitor
120
OPERACIONES MATEMATICAS
Operad.
+ Significado Suma Resta Divisin entera Modulo Multiplicacin Divisin Exponenciacin
Operando
Entero o real Entero o real Entero Entero Entero o real Real Entero o real
Ejemplo
4+2 4.35+ 2 4.35 + 2.5 4-2 4.35- 2 4.35 - 2.5 10 div 6 10 mod 6 4*2 4.35* 2 4.35 * 2.5 4.00/2.00 4.35/ 2.5 4^2 4.5 ^ 2 4.5 ^ 0.5
Resultado
Entero o real Entero o real Entero Entero Entero o real Real Entero o real
Ejemplo
6 6.35 6.85 2 2.35 1.85 1 4 8 8.7 10.875 2.00 1.74 16 20.25 2.121
Precedencia
Div Mod * / ^
121
OPERACIONES RELACIONALES
Las operaciones lgicas usualmente se combinan con las operaciones relacionales Las operaciones relacionales SIEMPRE dan como resultado un valor LGICO
Significado Ejemplo Resultado
Operador
Menor que Mayor que Igual que Mayor o igual que Menor o igual que Diferente de
El total de estudiantes de la Estatal es menor que el de la Politcnica 4<10 El rea del Campus Prosperina es mayor que la del Campus Peas 8>10 El nombre del autor de 100 aos de soledad es igual que el de Crnica de una muerte Anunciada 6 <= 10 10 >= 8 5 ~= 5 El precio de una entrada en el Albocine es diferente de el de las entradas en el Cinemark
Falso
Falso Verdadero
122
EJERCICIO
123
Contar y Acumular
Muchas veces se necesita contar cuantas veces se repitieron ciertas acciones o ir sumando nuevos valores en cada repeticin. Que se incrementan o decrementan con un valor fijo (contadores).
c = c + 1;
t = t + v;
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:
Plotting
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:
x = 0:0.1:100; y = 3*x; plot(x,y);
127
Plotting
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.
Colores y amarillo m magenta c cyan r rojo g verde b blue w white Point marker . point
o x circle x-mark
128
Ejemplo
x = 0:0.1:100; y = 3*x; plot(x,y,'r:')
129
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
132
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: 2 h(t) = (1/2)gt + Vot + ho V(t) = gt + Vo Donde g es la aceleracin debida a la gravedad (-9.81 m/s2), 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