Вы находитесь на странице: 1из 133

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.

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

Muestra los ficheros del directorio activo o actual.


Se puede alternar con Workspace clicando en la pestaa correspondiente.

prompt

caracterstico (>>) 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

funcin anloga a la del botn Inicio de Windows

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

>> 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

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

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

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.

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

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

Cont Preferencias

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).

>> save, >> load >> save filename A x y


%(sin comas entre los nombres de variables) Las tres variables deben tener valores previamente.

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

>> 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

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

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

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)
>> 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

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

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

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

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.

>> A' ans = 147 258 369

ans puede ser utilizada como operando en la siguiente expresin que se introduzca. Ejemplo: Podra haberse asignado el resultado a otra matriz llamada B:

>> B=A' B= 147 258 369


23

Cont Operaciones con Matrices y Vectores

Ejemplo: Hacer el producto B*A (deber resultar una matriz simtrica):


>> B*A ans = 66 78 90 78 93 108 90 108 126

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

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).

Ejemplo:

Calcular la inversa de A y el resultado asignar a B.

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

Cont Operaciones con Matrices y Vectores

Vector Fila y Vector Columna

Son diferentes para MatLab

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

Los nmeros estn separados por intros o puntos y coma (;).

Ejemplo:

Ejemplo:

>> x=[10 20 30] % vector fila x= 10 20 30

>> y=[11; 12; 13] % vector columna y= 11 12 13

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

Cont Operaciones con Matrices y Vectores

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

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.

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

Resolucin 1 x = inv(A)*b Resolucin 2


x = A\b El operador divisin-izquierda por una matriz (\) equivale a premultiplicar por la inversa de esa matriz.

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= 12 10 01 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): 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

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:

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

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 -> 24 1998 FIEC04341 4 FALSO

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:

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

Cont Tipos 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: 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

Cont Tipos 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.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

Cont Tipos 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

Cont Tipos 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

Cont Tipos 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

Cont Tipos 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.

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.

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

Cont Tipos 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

Cont Tipos de datos

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

Cont Tipos de datos


Operaciones Lgicas

Operador No(not) Y(and)

Significado Negacin de un valor Conjuncin

Ejemplo No(6>10) (1<5) y (5>10) Ecuador clasific y Colombia no clasifico (5>10) o (10<9)

Tipo de resultado Entero o real Entero o real

Resultado Verdadero Falso Verdadero Falso

O(or)

Disyuncin

Entero o real

45

Cont Tipos 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

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

>> 3 + 4j ans = 3.0000 + 4.0000i

>> 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

Cont Tipos de datos

Asignacin de valores complejos a vectores y matrices

Se puede hacerse de las dos formas.

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

Cont Tipos 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

Cont Tipos 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. Asignando su resultado a una variable:

Una expresin de MATLAB puede tener dos formas:


1. 2.

Evaluando simplemente el resultado del siguiente modo:

variable = expresin

expresin El resultado se asigna a la variable interna ans (de answer) que almacena el ltimo resultado.
49

Cont Tipos 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.


El lado del cuadrado, para calcular permetro o rea del mismo. El cdigo de una materia, el nmero de cdula de una persona, etc.

Ejemplo:

Las variables pueden ser de cualquier tipo de dato. La computadora representa a las variables como

Una porcin de memoria.

50

Cont Tipos 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

Cont Tipos de datos

Reglas para escribir variables:

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

Lado, nombre, radio, area, etc.

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:

lado, total 89lado, 1total, *nombre.

A diferencia del C, no hace falta declarar las variables que se vayan a utilizar.

Bien: Mal:

lado_cuadrado, total1, total2 lado cuadrado, total$, total#

Se deba tener especial cuidado con no utilizar nombres errneos en las variables, porque no se recibir ningn aviso del ordenador.

52

Cont Tipos de datos

El comando clear tiene varias formas posibles:


clear
clear A, b clear global clear functions clear all
sin argumentos, clear elimina todas las variables creadas previamente (excepto las variables globales).
borra las variables indicadas. borra las variables globales. borra las funciones. borra todas las variables, incluyendo las globales, y las funciones.

53

Cont Tipos 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

Ejemplo:

El valor se asigna a la variable

Usamos el operador de asignacin(=) El formato para asignar un valor a una variable

A B B A B

=4 =8 = A+B = A+1 = B+3

La asignacin es de izq. A derecha Si la variable tena otro valor, este se pierde


Nombre de la variable = expresion

A=5

A = A*5
55

Tipos de Matrices Predefinidos


eye(4) forma la matriz unidad de tamao (44)

zeros(3,5)
zeros(4) ones(3) ones(2,4) linspace(x1,x2,n) logspace(d1,d2,n)

forma una matriz de ceros de tamao (35)


dem de tamao (44) forma una matriz de unos de tamao (33) idem de tamao (24) genera un vector con n valores igualmente espaciados entre x1 y x2 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)
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

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) n=length(x) zeros(size(A)) ones(size(A)) A=diag(x) x=diag(A) diag(diag(A)) blkdiag(A,B) triu(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 calcula el nmero de elementos de un vector x forma una matriz de ceros del mismo tamao que una matriz A previamente creada dem con unos forma una matriz diagonal A cuyos elementos diagonales son los elementos de un vector ya existente x forma un vector x a partir de los elementos de la diagonal de una matriz ya existente A crea una matriz diagonal a partir de la diagonal de la matriz A crea una matriz diagonal de submatrices a partir de las matrices que se le pasan como argumentos 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. dem con una matriz triangular inferior 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 halla la matriz simtrica de A respecto de un eje horizontal halla la matriz simtrica de A respecto de un eje vertical 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.

tril(A) rot90(A,k) flipud(A) fliplr(A) reshape(A,m,n)

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= 134

>> 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


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

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:
>> 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:

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]

Por defecto, este operador produce vectores fila. Si se desea obtener un vector columna basta trasponer el resultado.

62

Cont Operador 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

Cont Operador 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

Cont Operador 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= 100000 35 1 6 26 19 24 001000 3 32 7 21 23 25 31 9 2 22 27 20 000001 65

Cont Operador 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

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

Definicin de Vectores y Matrices a Partir de un Fichero

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

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

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

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.

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.

&&

||

Ejemplo: Sentencia que evita una divisin por cero


r = (b~=0) && (a/b>0);

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 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

Caractersticas generales de las funciones

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.

>>Alfa=0.3 >> a = cos(alfa) - sin(alfa);

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

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

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 Variable = nombre_funcion(argumento1, argumento2, ...)
74

La sintaxis de uso es la siguiente:

Todos los lenguajes tienen un conjunto de funciones en comn

Cont Funciones Internas


Funcin abs(x) Operacin Valor Absoluto de x Argumentos X es numrico Resultado Igual que el argumento Ejemplo X = -9 R = abs(X) R tiene ahora 9

arctan(x)

Arco tangente de x Coseno de x Exponencial de x Logaritmo neperiano de x Logaritmo decimal de x Redondeo de x

X es numrico

Retorna un real

cos(x) exp(x) ln(x)

X es numrico X es numrico X es numrico

Retorna un real Retorna un real Retorna un real

log10(x)

X es numrico

Retorna un real

round(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

Funciones matemticas elementales que operan de modo escalar


sin(x) cos(x) an(x) asin(x) acos(x) atan(x) atan2(x) sinh(x) cosh(x) tanh(x) asinh(x) acosh(x) atanh(x) log(x) log10(x) exp(x) seno coseno t tangente arco seno arco coseno arco tangente (devuelve un ngulo entre -/2 y +/2) arco tangente (devuelve un ngulo entre - y +), se le pasan 2 argumentos, proporcionales al seno y al coseno seno hiperblico coseno hiperblico tangente hiperblica arco seno hiperblico arco coseno hiperblico arco tangente hiperblica logaritmo natural logaritmo decimal funcin exponencial rem(x,y) mod(x,y) round(x) fix(x) floor(x) ceil(x) gcd(x) lcm(x) real(x) imag(x) abs(x) angle(x) sqrt(x) sign(x) raz cuadrada devuelve -1 si <0, 0 si =0 y 1 si >0. Aplicada a un nmero complejo, devuelve un vector unitario en la misma direccin resto de la divisin (2 argumentos que no tienen que ser enteros) similar a rem (Ver diferencias con el Help) redondeo hacia el entero ms prximo redondea hacia el entero ms prximo a 0 valor entero ms prximo hacia - valor entero ms prximo hacia + mximo comn divisor mnimo comn mltiplo partes reales partes imaginarias valores absolutos 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.
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.

[xm,im]=max(x) min(x) sum(x) cumsum(x) mean(x) std(x) prod(x) cumprod(x) [y,i]=sort(x)

78

Determinacin de la fecha y la hora


Clock devuelve un vector fila de seis elementos que representan el ao, el mes, el da, la hora, los minutos y los segundos, segn el reloj interno del computador. Los cinco primeros son valores enteros, pero la cifra correspondiente a los segundos contiene informacin hasta las milsimas de segundo. devuelve un nmero (serial date number) que contiene toda la informacin de la fecha y hora actual. Se utiliza como argumento de otras funciones. devuelve la fecha actual como cadena de caracteres (por ejemplo: 24-Aug-2004). convierte el serial date number t en cadena de caracteres con el da, mes, ao, hora, minutos y segundos. Ver en los manuales on-line los formatos de cadena admitidos. convierte una cadena ('mes-da-ao') o un conjunto de seis nmeros (ao, mes, da, horas, minutos, segundos) en serial date number.

Now Date datestr(t)

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

Otros Tipos de Datos de Matlab

MATLAB puede tambin trabajar con otros tipos de datos:


1.

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.

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) ans = 1 6 >> double(c) 99 97 100 101 % dimensiones del array

% convierte en nmeros ASCII cada carcter ans = 110 97

>> char(abs(c)) cadena

% convierte nmeros ASCII en caracteres ans =

>> 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

Cont Cadenas de caracteres


funciones ms importantes para manejo de cadenas de caracteres
double(c)
convierte en nmeros ASCII cada carcter

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

convierte un vector de nmeros v en una cadena de caracteres


crea una matriz de caracteres, completando con blancos las cadenas ms cortas elimina los blancos al final de una cadena de caracteres imprime el texto contenido en la variable c detecta si una variable es una cadena de caracteres 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 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 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) igual que strcmp(c1,c2), pero ignorando la diferencia entre maysculas y minsculas compara los n primeros caracteres de dos cadenas compara dos cadenas carcter a carcter. Devuelve un vector o matriz de unos y ceros

83

Cont Cadenas de caracteres


funciones ms importantes para manejo de cadenas de caracteres
s=[s,' y ms']
concatena cadenas, aadiendo la segunda a continuacin de la primera

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

str2double(str) vc=cellstr(cc) sprintf

Cont Cadenas 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); ij 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

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.

ndims() squeeze() reshape()

2. Las funciones que operan sobre

Las operaciones con escalares tambin se aplican de la misma manera.

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)

permuta las dimensiones de A segn los ndices del vector v


realiza la permutacin inversa

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).

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.

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

La estructura alumno puede contener los campos:


nombre (una cadena de caracteres) y carnet (un nmero)

>> 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

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)

permite saber si ST es o no una estructura


elimina el campo s de la estructura ST 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.

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

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

Cont

Programacin en MATLAB

Sentencia if Bifurcacin simple:

Bifurcacin mltiple:

A diferencia de C/C++/Java: la condicin no va entre parntesis, aunque se pueden poner si se desea

Pueden concatenarse tantas condiciones como se desee

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).

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; ...
elseif condicion2 Sentencia 1; Sentencia 2; ... elseif condicion3 Sentencia 1; Sentencia 2; ... else Sentencia 1; Sentencia 2; ...

if condicion Sentencia 1; Sentencia 2; ... end

if condicion Sentencia 1; Sentencia 2; ... else Sentencia 1; Sentencia 2; ... end

end

98

Cont
Ejercicio

Programacin en MATLAB

Se desea determinar si un nmero entero, ingresado por teclado es par.


Inicio Escribir(?) Leer(n) Si No

n=input(Ingrese un numero:); if mod(n,2) == 0 fprintf(%d es par, n);

else
fprintf( %d es impar, n); end

n mod 2 == 0

Escribir (Par)

Escribir (Impar)

Fin

99

Cont
Ejercicio

Programacin en MATLAB

Se desea determinar si un nmero ingresado por teclado es positivo, negativo, o nulo.


n = input(Ingrese numero:); if n> 0 fprintf( %d es positivo, n);
Escribir (Negativo)

Inicio Escribir(?) Leer(n) n< 0

elseif n < 0

fprintf( %d es negativo, n);


n> 0 Escribir (Positivo)

elseif n ==0 fprintf( %d es cero, n); end


100

n== 0

Escribir (Cero)

Fin

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

Cont
Solucin

Programacin en MATLAB

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

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

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
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:

for i=n:-0.2:1 sentencias 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):

Ejemplo:

Otra forma del bucle for (A es una matriz): for i=A sentencias End

for i=1:m for j=1:n sentencias end 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

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 Resolucin


Escriba un programa que calcule el factorial de un nmero.

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:

Sentencia break

while condicion sentencias End

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.

donde condicion puede ser una expresin vectorial o matricial.

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

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: 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

Caracteres especiales comunes usados en la funcin fprintf


Formato %d %e %f Resultado Muestra un valor como entero. Muestra un valor en formato exponencial. Muestra un valor con formato de punto flotante.

%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

Un Problema con Clculos

Definamos los datos de entrada, salida y las interfaces:


Procesamiento Interfase Base * Altura La Base es igual a la Altura? Salida Datos rea Mensajes Interfase

Entrada Datos Base Altura

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 Verdadero Verdadero Falso Verdadero Verdadero

Falso
Falso Verdadero

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. Que se incrementan o decrementan con un valor fijo (contadores).

Para esto se usan variables enteras

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

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:
x = 0:0.1:100; y = 3*x; plot(x,y);

Genera el siguiente grfico:

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

+ smbolo mas - lnea slida * star : dotted

128

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

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

Вам также может понравиться