Está en la página 1de 51

MATLAB

R2008a

Alcides RAMOS CALCINA

MATLAB Fundamentos Bsicos para Ingenieria

Ing. Alcides Ramos Calcina

MATLAB es un sistema abierto al cual el usuario puede incorporar nuevas funciones para
su utilizacin en aplicaciones particulares. Existen tambin libreras de funciones
MATLAB, denominadas Toolboxes, que permiten resolver problemas especficos en
diversas reas de ciencia e ingeniera. Actualmente existen Toolboxes en reas tales como
Control, Procesamiento de Seales, Identificacin, Procesamiento de Imgenes, Redes
Neuronales, etc.

Captulo

En ste primer captulo, esperamos que el alumno se familiarice con los comandos bsicos
de MATLAB de forma de poder realizar el tratamiento de los datos obtenidos en los
captulos siguientes.
1.

ENTORNO DE TRABAJO

Operaciones Bsicas

8
2

1
INTRODUCCIN
El programa MATLAB (el nombre corresponde a la abreviatura Matrix Laboratory) es una
potente herramienta de clculo numrico y visualizacin grfica de uso muy difundido
entre los cientficos para el desarrollo de su tarea de investigacin. Tiene la gran ventaja de
ser un lenguaje de alto nivel que integra, en un nico ambiente software, rutinas de clculo,
visualizacin y programacin. El programa es de fcil uso ya que los problemas se pueden
formular usando una notacin matemtica standard. La representacin bsica de los datos
en MATLAB es en forma matricial.

3
4

Algunos de los usos ms comunes de MATLAB son, por ejemplo:

Clculo numrico.
Desarrollo de algoritmos.
Modelado, simulacin y desarrollo de prototipos.
Anlisis y visualizacin de datos.
Construccin de grficas.

6
Figura 01: Entorno de trabajo del programa MATLAB.

MATLAB Fundamentos Bsicos para Ingenieria

La pantalla de entrada de MATLAB (Figura 01) constituye el marco de trabajo general del
programa. Los elementos ms importantes de esta pantalla de inicio son los siguientes:

1
2
3
4
5

7
8
2.

Como cualquier programa informtico son los mens y la barra de


herramientas estndar de Matlab.
Ruta por defecto que utiliza Matlab para guardar los trabajos realizados en el,
s se desea cambiar la ruta, escribir la deseada o simplemente copiar la ruta
del explorador de Windows.
Current Directory ( directorio actual), muestra ficheros MATLAB y ejecuta
operaciones de ficheros tales como abrir y buscar contenido.
El WorkSpace es uno de las herramientas de Matlab que nos permite
visualizar las dimensiones de las variables declaradas.
El Command History nos permite almacenar temporalmente todos los
comandos o funciones utilizadas en la consola de comandos, para
reutilizarlas solo basta seleccionar y realizar doble clic
El Men Start, es la opcin de acceso rpido a todas las opciones y
herramientas de Matlab, incluyendo algunas opciones que no se encuentran
en los mens estndar, como el navegador Web, etc.
Command Window, ventana de comandos, consola de comandos que es
como se le llama, es el lugar donde escribimos y definimos ciertas funciones
y comandos (programar).
Help (ayuda), muestra y busca documentacin para la familia completa de
productos MATLAB.

COMANDOS BSICOS

Al iniciar el programa MATLAB se desplegar una ventana desde donde se ejecutan los
diferentes comandos (ver figura 2).
El programa MATLAB se inicia por defecto en el directorio c:\MATLAB\work. Antes de
comenzar a trabajar es conveniente cambiarse al directorio de trabajo. Para verificar en que
directorio se est trabajando se utiliza el comando: pwd.

Figura 02: Ventana de comandos.


El smbolo >> (llamado prompt) indica que el programa est esperando que se le ingrese
un comando o una variable.
A continuacin veremos algunos comandos bsicos de MATLAB. Por ms informacin
sobre este tema consultar el help de MATLAB: Starting and Quitting MATLAB.
Tambin se pueden listar desde el command windown: >> help MATLAB/general.
ls, dir
clear a
clear all
clc
edit

pwd
who
whos
what
close
clf

: Muestra el contenido de un directorio o del sistema.


: Borra la variable en uso (a) en memoria.
: Borra las variables usadas (locales y globales) en menoria.
: Limpia el estado de la ventana de comandos.
: Muestra el editor de texto propio de MATLAB, el cual nos
permite crear archivos m-file, es decir programas en cdigo para
poder luego ejecutarlas desde la ventana de comandos.
: Muestra la direccin actual de la lnea de comandos, es decir la
ruta en la cual se encuentran los archivos creados.
: Lista las variables declaradas.
: Lista las variables en memoria y sus caractersticas.
: Lista las M-files existentes en el directorio de trabajo.
: Cierra ventanas de grficas.
: Limpia las ventanas de grficos

Ing. Alcides Ramos Calcina

demo

help

exit / quit
save
load
delete

: Permite acceder a un entorno grfico de demostracin que


ilustra algunos tipos de operaciones que se pueden realizar con
MATLAB.
: Lista la serie de funciones o aplicaciones que abarca MATLAB.
Si se desea ver los comandos relacionados con un tpico
particular, se debe ejecutar el comando help <comando> o
clikear en la barra de herramientas el smbolo ?.
: Permite finalizar la sesin de MATLAB (salir del programa).
: Almacena las variables en un archivo .mat, con el estado de la
sesin (excepto grficos).
: Recupera el estado de la sesin guardada.
: Elimina un archivo .mat

3.

VARIABLES

En MATLAB es posible definir diferentes tipos de variables y utilizando el comando whos


es posible visualizar en la ventana de trabajo qu tipo de variables estn almacenadas en la
memoria de trabajo.
Para el uso de una variable no es necesario declarar sus nombres, en la siguiente tabla se
presenta las variables predefinidas que posee MATLAB.

Caracteres especiales en MATLAB

&

[ ]
( )
,

: El uso de ! (admiracin) es complementario del & (ampersand),


y normalmente se utiliza para ejecutar programas externos bajo
la ventana de comandos de Matlab.
: El ampersand como se mencion, indica que la lnea de
comandos puede ser utilizada dando paso a otros comandos.
Ejemplo: !notepad & ejecuta el notepad de Windows
: Antecedido este smbolo, permite visualizar solo como
comentario la lnea de texto.
-

Al escribir despus de un bloque de sentencia omite el eco


o salida a la pantalla. Ejemplo: a = 2.5;
- Para separar filas y para evitar mostrar contenido de
variables.
: Se utilizan para formar vectores y matrices.
: Define precedencia en expresiones aritmticas. Encierra
argumentos de funciones en forma usual.
: Separador de elementos de una matriz, argumentos de funciones
y declaraciones en lneas con declaraciones mltiples.
: Para continuar un comando en la siguiente lnea.
5

Nombre de la variable
pi
iyj

Significado

inf
eps
NaN
realmin
realmax

1.0000e-006
No es nmero
Menor nmero: 2-1022
Mayor nmero: (2-e)21023

a) Variables numricas.
Por defecto son de doble precisin. Se puede trabajar con diferentes tipos de nmeros y
expresiones numricas, que abarcan todo el campo de los nmeros enteros, racionales,
reales y los complejos, y se utilizan en argumentos de funciones.
Las operaciones aritmticas en MATLAB se definen de acuerdo con las convenciones
matemticas estndar.
x+y
xy
x * y xy
x/y
x^y
Ejemplo:

Suma
Diferencia
Producto
Divisin
Potencia

MATLAB Fundamentos Bsicos para Ingenieria

format: Modifica el formato numrico de los valores desplegados por MATLAB donde
la funcin afecta solo la visualizacin en pantalla y no cmo los computa o almacena
MATLAB.

En la ventana de comandos realice lo siguiente:


>> 2+5

format long
format short

ans =
7

format long e
>> a=3.5*i

format short e
a =

format long g
format short g
format bank
format rat

0 + 3.5000i

Podemos realizar el clculo de una potencia directamente.


>> 100^50

format +

ans =

format hex

Muestra los resultados con 16 cifras decimales


Muestra los resultados con 4 cifras decimales. Es el formato
por defecto de MATLAB.
Muestra los resultados con 16 decimales ms la potencia de
10 necesaria.
Muestra los resultados con 4 decimales ms la potencia de 10
necesaria.
Muestra los resultados en formato largo ptimo.
Muestra los resultados en formato corto ptimo.
Muestra los resultados con 2 cifras decimales.
Muestra los resultados en forma de nmeros racionales
aproximado.
Muestra el signo de los resultados (+, -) e ignora la parte
imaginaria de los nmeros complejos.
Muestra los resultados en el sistema hexadecimal.

1.0000e+100

Ejemplo:

1
2
7
Obtener el valor de la siguiente expresin:
0.25 3 1 3
12

>> (2^12+1/7)/(0.25-3*(1-3^0.5))
ans =
1.6745e+003

A continuacin se presenta los diferentes formatos que usa MATLAB en la


visualizacin de sus variables.

Exprese el siguiente nmero N = 174/11 en los diferentes formatos.


>> 174/11
ans =
15.8182
>> format long; 174/11
ans =
15.818181818181818

Ing. Alcides Ramos Calcina


>> format long e; 174/11

b) Variables carcter (string)

ans =

Una variable carcter (cadena) es sencillamente una cadena de caracteres incluidos


entre comillas simples que MATLAB trata de forma vectorial. La sintaxis general para
la declaracin de variables carcter es la siguiente:

1.581818181818182e+001
>> format short e; 174/11

c = cadena de caracteres
Ejemplo:

ans =
1.5818e+001

>> a='hola'

>> format long g; 174/11

a =

ans =

hola
15.8181818181818

c) Variables matriz

>> format short g; 174/11

En MATLAB se define las matrices introduciendo entre corchetes todos sus vectores
fila separados por un punto y coma. Los vectores se pueden introducir separando sus
componentes por espacios en blanco o por comas.

ans =
15.818

Ejemplo:
>> format bank; 174/11

Una variable matricial de dimensiones 3x3 se puede introducir las dos siguientes
formas:

ans =

1 2 3
Sea la matriz M 4 5 6
7 8 9

15.82
>> format hex; 174/11
ans =

>> M=[1 2 3;4 5 6;7 8 9]


402fa2e8ba2e8ba3
M =
>> format rat; 2.55
1
4
7

ans =
51/20
7

2
5
8

3
6
9

MATLAB Fundamentos Bsicos para Ingenieria


>> M=[1,2,3;4,5,6;7,8,9]

a) Funciones Trigonomtricas
M =
1
4
7

2
5
8

Funcin
sin(x)
asin(x)
cos(x)
acos(x)
tan(x)
atan(x)
csc(x)
sec(x)
cot(x)

3
6
9

Ahora genere una matriz de 4x4 con nmeros aleatorios.


>> E=rand(4,4)
E =
0.2769
0.0462
0.0971
0.8235

0.6948
0.3171
0.9502
0.0344

0.4387
0.3816
0.7655
0.7952

0.1869
0.4898
0.4456
0.6463

Significado
Seno de x
Arcoseno de x
Coseno de x
Arcocoseno de x
Tangente de x
Arcotangente de x
Cosecante de x
Secante de x
Cotangente de x

Ejemplo:
>> sin(pi/2)

(El comando rand crea una matriz del tamao especificado, en este caso 4 x 4, formada
por nmeros aleatorios entre 0 y 1.)
d) Variables simblicas
Se definen entre , por ejemplo: sym 'x', 'y'
Por ms informacin sobre este tema consultar el help de MATLAB: Data Types in
MATLAB.
4.

FUNCIONES MATEMTICAS

MATLAB dispone de una gama muy completa de funciones predefinidas, la mayora de las
cuales estudiaremos ms adelante. Dentro del grupo de las funciones con argumento real
que ofrece MATLAB, las ms importantes son las siguientes:

ans =
1
>> x=[1 2 3;9 8 7];
>> sin(x)
ans =
0.8415
0.4121

0.9093
0.9894

0.1411
0.6570

b) Funciones hiperblicas
Funcin
sinh(x)
cosh(x)
tanh(x)

Inversa
asinh(x)
acosh(x)
atanh(x)

Ing. Alcides Ramos Calcina

csch(x)
sech(x)
coth(x)

acsch(x)
asech(x)
acoth(x)

ceil(x)
round(x)
fix(x)
rem(x)
sign(x)
min(x)
max(x)
sort(x)
real(x)
imag(x)
sum(x)

Ejemplo:
>> x=[1.5 1.2 1.6; 1.3 1.1 1.8];
>> y=sech(x)
y =
0.4251
0.5074

0.5523
0.5993

0.3880
0.3218

Ejemplo:
>> z=tanh(x)
>> round(2.574)
z =
ans =
0.9051
0.8617

0.8337
0.8005

0.9217
0.9468

c) Funciones exponenciales y logartmicas


Funcin
exp(x)
log(x)
log10(x)
log2(x)
pow2(x)
sqrt(x)

>> round(2.4)
ans =

Significado
Funcin exponencial en base e (e^x)
Funcin logaritmo en base e de x
Funcin logaritmo en base 10 de x
Funcin logaritmo en base 2 de x
Funcin potencia en base 2 de x
Funcin raz cuadrada de x

2
>> ceil(2.574)
ans =
3

d) Funciones especificas de variables numricas


Funcin
abs(x)
floor(x)

>> ceil(2.4)

Significado
Valor absoluto del real x
El mayor entero menor o igual que el real x

ans =
3
9

El menor entero mayor o igual que el real x


El entero ms prximo al real x
Elimina la parte decimal del real x
Da el resto de la divisin entre los reales a y b
Signo del real x (1 si x>0, -1 si x<0)
Devuelve el valor mnimo de un arreglo x
Devuelve el valor mximo de un arreglo x
Ordena los elementos del arreglo x en forma ascendente
Parte real del nmero complejo x
Parte imaginaria del nmero complejo x
Calcula la suma de todos los elementos de arreglo x

MATLAB Fundamentos Bsicos para Ingenieria

Ejemplo:

>> max(y)

>> x=[-3 4 -11 0];


>> abs(x)

ans =
5

ans =
>> sum(y)
3

11

0
ans =

Ejemplo:

>> x=3+2i;
>> imag(x)

e) Nmeros aleatorios
MATLAB trata perfectamente la generacin automtica de nmeros aleatorios. Veamos
a continuacin las funciones ms importantes de generacin de nmeros aleatorios.

ans =
2

Funcin
rand

>> real(x)
ans =

rand(n)
3

rand(m,n)

Ejemplo:
>> y=[2 1 5];
>> sort(y)

randn

ans =
1

Ejemplo:

>> min(y)

>> [rand, rand(1), randn, randn(1)]

ans =

ans =

1
10

Significado
Devuelve un nmero decimal aleatorio distribuido
uniformemente en el intervalo [0, 1]
Devuelve una matriz de dimensin nxn cuyos elementos son
nmeros decimales aleatorios distribuidos uniformemente en
el intervalo [0, 1]
Devuelve una matriz de dimensin mxn cuyos elementos son
nmeros decimales aleatorios distribuidos uniformemente en
el intervalo [0, 1]
Devuelve un nmero decimal aleatorio distribuido segn una
normal con media 0 y varianza 1.

0.7094
>> rand(2,3)

0.7547

-0.4326

-1.6656

Ing. Alcides Ramos Calcina

ans =
0.2760
0.6797

0.6551
0.1626

0.1190
0.4984

-4

21

c =

>> randn(2,3)
>> d=3.*x, e=2./x, f=2.\y
ans =
d =
0.1253
0.2877

5.

-1.1465
1.1909

1.1892
-0.0376

15

e =

OPERADORES

En MATLAB se dispone de operadores para denotar las operaciones aritmticas, lgicas,


relacionales, condicionales y de estructura.

Matriz
+

*
/
\
^

Vector
+

.*
./
.\
.^

0.4000

0.5000

0.6667

0.5000

1.0000

3.5000

f =

a) Operadores aritmticos
Escalar
+

*
/
\
^

12

>> g=x./y, h=y.\x, i=x.^2

Descripcin
Suma o adicin
Resta
Multiplicacin
Divisin hacia la derecha
Divisin hacia la izquierda
Potencia

g =
5.0000

2.0000

0.4286

5.0000

2.0000

0.4286

h =

Ejemplo:

i =

>> x=[5,4,3]; y=[1,2,7];


>> a=x+y, b=x-y, c=x.*y

25

16

>> j=2.^x, k=x.^y


a =
j =
6

10

b =

32
11

16

MATLAB Fundamentos Bsicos para Ingenieria


k =
5

16

2187

b) Operadores relacionales
Menor (para complejos slo afecta a partes reales)
Menor o igual (slo afecta a partes reales)
Mayor (slo afecta a partes reales)
Mayor o igual (slo afecta a partes reales)
Igualdad (afecta a los nmeros complejos)
Desigualdad (afecta a los nmeros complejos)

<
<=
>
>=
==
=

c) Operadores lgicos
A
A&B
A|B
Xor(A,B)

Negacin lgica (NOT) o complemento de A


Conjuncin lgica (AND) o interseccin de A y B
Disyuncin lgica (OR) o unin de A y B
OR exclusivo (XOR) o diferencia simtrica de A y B

Ejemplo:
>> A=3:9
A =
3

>> P=(A>4)&(A<7)
P =
0

Devuelve 1 cuando A es mayor a 4 y menor a 7, y devuelve 0 en caso contrario.


12

Ing. Alcides Ramos Calcina

Captulo

logm(A)
sqrtm(A)
transpose(A) o A
inv(A)
det(A)
rank(A)
trace(A)

Logaritmo neperiano de la matriz A


Raz cuadrada de la matriz cuadrada A
Matriz transpuesta de A
Matriz inversa de la matriz cuadrada A (A-1)
Determinante de la matriz cuadrada A
Rango de la matriz A
Traza o suma de los elementos de la diagonal de A

Ejemplo:
Considere una matriz cuadrada de orden 4 formada por nmeros aleatorios distribuidos
uniformemente en el intervalo [0, 1] y calcule su determinante, rango, inversa, transpuesta
y traza.

Arreglos y Matrices

>> A=rand(4)
A =

INTRODUCCIN
MATLAB trabaja esencialmente con matrices de nmeros reales o complejos. Las
matrices 1 1 son interpretadas como escalares y las matrices fila o columna como
vectores.

0.8147
0.9058
0.1270
0.9134
>> det(A)

Por defecto todas las variables son matriciales y nos podemos referir a un elemento con
dos ndices. Aun as, conviene saber que la matriz est guardada por columnas y que nos
podemos referir a un elemento empleando slo un ndice, siempre que contemos por
columnas. Insistiremos bastante en este detalle, porque tiene fuertes implicaciones para
entender el funcionamiento de bastantes aspectos de MATLAB.
1.

ans =
-0.0261
>> rank(A)
ans =

MATRICES NUMERICAS

MATLAB permite trabajar con matrices numricas de forma muy cmoda y extensa. La
tabla que se presenta a continuacin muestra las funciones matrices numricas que pueden
realizarse con el mdulo bsico de MATLAB.

4
>> inv(A)
ans =

13

0.6324
0.0975
0.2785
0.5469

0.9575
0.9649
0.1576
0.9706

0.9572
0.4854
0.8003
0.1419

MATLAB Fundamentos Bsicos para Ingenieria


-15.2997
-0.2088
14.5694
-0.3690

3.0761
-1.8442
-1.9337
0.5345

14.7235
1.0366
-14.6497
1.4378

9.6445
1.8711
-9.0413
-0.4008

-2
-4
-6

3
5
7

>> B=[1 1;2 0;6 2];


>> A+B % matriz + matriz de la misma dimension

>> A'
ans =
ans =
0.8147
0.6324
0.9575
0.9572

0.9058
0.0975
0.9649
0.4854

0.1270
0.2785
0.1576
0.8003

0.9134
0.5469
0.9706
0.1419

>> trace(A)

-1
-2
0

4
5
9

>> A' % Transpuesta de la matriz A


ans =

ans =

-2
3

-4
5

-6
7

1.2118
>> A'*A % matriz 2x3 * matriz 3x2

Advertencia. Hay que tener una cierta precaucin con la funcin rank para calcular el
rango de una matriz, ya que lo hace de forma numrica. Para matrices con enteros de
tamao razonable el resultado suele ser exacto. En otros casos, MATLAB puede obtener un
rango incorrecto por culpa de los redondeos; aun as, MATLAB suele avisar si encuentra
una cierta proximidad a un defecto de rango.
2.

ARITMTICA DE LAS MATRICES

Con las operaciones suma (+) y producto (*) entre matrices hay que poner atencin en que
las dimensiones de las matrices sean las adecuadas para realizar dichas operaciones.
Ejemplo:

14

ans =
56
-68

-68
83

>> a=[3 -1];


>> A*a' % matriz * vector
ans =
-9
-17
-25

>> A=[-2 3;-4 5;-6 7] % o tambien A=[-2, 3;-4, 5;-6, 7]

>> u=[1 2 3]

A =

u =

Ing. Alcides Ramos Calcina


1

Hay que tener tambin cuidado con el smbolo de trasposicin. Cuando una matriz A es
compleja, con A' se calcula su traspuesta conjugada. Para calcular la traspuesta sin
conjugar hay que hacer:

>> v=[4 5 6]
v =

A.' % traspuesta sin conjugar


4

El producto de un vector columna por un vector fila (de cualquier tamao) produce una
matriz genrica de rango unidad:

>> u*v' % fila por columna = producto escalar

a1
a1b1
a

2 b b b a2 b1
1
2
m

an
an b1

ans =
32
>> u'*v % columna por fila = matriz de rango unidad
ans =
4
8
12

5
10
15

6
12
18

Ejemplo:
>> ones(3)

ans =

ans =
6

a2 b2

an b2

a1bm
a2 bm

an bm

Hay instrucciones para crear matrices llenas de ceros, llenas de unos, diagonales, o la
identidad (en ingls la letra I se pronuncia igual que eye):

>> cross(u,v) % producto vectorial

-3

a1b2

-3

El ejemplo anterior muestra cmo se puede hacer el producto escalar de dos vectores. Si
ambos son vectores fila u*v' realiza la operacin, ya que devuelve una matriz 1 X 1, que en
MATLAB es indistinguible de un escalar (un nmero). La expresin

1
1
1

1
1
1

1
1
1

>> zeros(3,5)
ans =

dot(u,v) % producto escalar

realiza la misma operacin (dot abrevia el concepto de dot product, que es como se suele
llamar en ingls al producto escalar), sin preocuparse de si los vectores son fila o columna.

0
0
0

0
0
0

0
0
0

0
0
0

>> eye(2) % identidad 2x2

15

0
0
0

MATLAB Fundamentos Bsicos para Ingenieria


ans =
A =
1
0

0
1

>> diag([1 3 -4]) % matriz diagonal


ans =
1
0
0

2
4
6

3
5
7

>> A(2,1) % se toma el elemento de la fila 2 y la columna 1 de A


0
3
0

0
0
-4

>> A=[1 2; 3 4];


>> diag(A) % vector de elementos diagonales de A

ans =
4
>> A(2,3)
??? Attempted to access A(2,3); index out of bounds
because size(A)=[3,2].

ans =
>> A(:,1) % vector columna con la primera columna de A
1
4

ans =

>> diag(diag(A)) % truco para extraer la diagonal de una matriz


ans =
1
0

0
4

2
4
6
>> A(2,:) % vector fila con la segunda fila de A
ans =

3.

ACCESO A LOS ELEMENTOS DE UNA MATRIZ


4

Ya hemos indicado que las matrices en MATLAB se guardan por columnas y que se puede
buscar un elemento siempre con un nico ndice. Esta es la simple razn por la que en los
vectores (donde no hay ms que una dimensin a la hora de colocar los elementos, sea en
fila o en columna) no hace falta ms que un ndice para buscar un elemento.

>> A(4) % cuarto elemento de A, contando por columnas


ans =
3

Ejemplo:
>> A=[2 3;4 5;6 7]
16

>> size(A) % dimensiones de A (devuelve un vector)


ans =

Ing. Alcides Ramos Calcina


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

2
A =

>> length (A) % mayor de las dimensiones de A


2.0000
1.0000
0.5000

ans =

-3.0000
1.0000
-7.0000

Al definir un nuevo elemento fuera de las dimensiones de la matriz se reajusta el tamao de


la matriz dando el valor 0 a los restantes elementos

>> v=[-3 4 7]; % vector fila


>> v(2) % segundo elemento

Ejemplo:

ans =

>> A(3,4)=1

A =

>> v(1,2) % segundo elemento (primera fila, segunda columna)

2.0000
1.0000
0.5000

ans =
4

-3.0000
1.0000
-7.0000

0
0
0

0
0
1.0000

>> size (A)

La referencia a elementos de una matriz permite cambiar el valor de un elemento mediante


una sencilla operacin de asignacin. Esto tambin se puede hacer con una fila o columna.

ans =
3

Ejemplo:
La matriz vaca es la matriz que no tiene ningn elemento. Se escribe entre corchetes (es
decir, [ ]) y puede ser muy til a la hora de borrar filas o columnas de una matriz dada,
como se ve en el siguiente ejemplo,

>> A=[2 -3;-4 5;6 -7];


>> A(3,1)=1/2 % cambio de un elemento de A

>> A=[1 -1 2;2 0 1;0 1 -3];


>> A(:,2)=[] % borramos la segunda columna

A =
2.0000
-4.0000
0.5000

-3.0000
5.0000
-7.0000

A =
1
2
17

2
1

MATLAB Fundamentos Bsicos para Ingenieria


0

-3
>> B=[1 3 1 0 -1; 2 1 0 1 7; 0 0 1 3 4;0 0 2 1 9]

MATLAB puede trabajar con grupos de filas y columnas (no necesariamente consecutivos)
o concatenar matrices para formar matrices ms grandes siempre que los tamaos sean
compatibles.
>> A = diag([1 2 3]);
>> [A,ones(3,2)] % ampliar con columnas
ans =
1
0
0

0
2
0

0
0
3

1
1
1

1
1
1

>> [A;eye(3)] % ampliar con filas


ans =
1
0
0
1
0
0

B =
1
2
0
0

3
1
0
0

>> B(2:3,2:4)
columnas

1
0
1
2
%

0
1
3
1
segunda

-1
7
4
9
a

tercera

filas

0
2
0
0
1
0

0
0
3
0
0
1

ans =
1
0

0
1

1
3

ans =
2

>> B(1,1:2:5) % columnas impares de la primera fila

B =

ans =
1

-1

>> B(2,:) % segunda fila (todas las columnas)


3
1
0
0

1
0
1
2

0
1
3
1

ans =
2

>> B(2,4) % elemento que ocupa el lugar (2,4)

En general, empleando listas implcitas o simplemente vectores de ndices, se pueden


extraer submatrices de una matriz, incluso repitiendo filas y columnas.
18

segunda

>> B(2,1:3) % segunda fila y columnas de primera a tercera

>> A=[1 3;2 1];


>> B=[A eye(2);zeros(2) A] % matriz formada por 4 bloques 2x2

1
2
0
0

ans =

cuarta

Ing. Alcides Ramos Calcina

>> A([1 3],:)=A([3 1],:) % intercambio de las filas 1 y 3

>> B(:,3) % tercera columna (todas las filas)

A =

ans =

7
1
2

1
0
1
2

4.

>> A=[2 1;1 2]; % Primer ejemplo, solucin nica


>> b=[3 1]';
>> A\b

ans =
0
3
3

1
1
1

3
0
0

USO DEL OPERADOR \

El operador \ permite resolver, si es posible, un sistema Ax = b mediante la orden A\b.

>> B([3 1 1],:) % filas 3, 1 y 1 (todas las columnas)

0
1
1

6
4
3

4
-1
-1

ans =
1.6667
-0.3333

>> C= [1 -2;7 -2];


>> C(:) % lista con todos los elementos de la matriz

>> A*ans

ans =

ans =

1
7
-2
-2

3.0000
1.0000

Esta forma de manipular matrices permite un simple mtodo de intercambio de filas o


columnas de una matriz sin el tradicional empleo de variables intermedias.
5.

>> A=[2 3;1 4;7 6]


A =
2
1
7

ORDENACIONES, COMPARACIONES Y BUSQUEDAS

De una forma muy simple se pueden localizar los valores mximo y mnimo en una matriz,
as como su localizacin.

3
4
6

>> x=[1 2 3 5 3 1 -7];


19

MATLAB Fundamentos Bsicos para Ingenieria


>> max(x)

>> max(max(A)) % o tambien max(A(:))

ans =

ans =

>> min(x)

Veamos algo de ordenacin de elementos en una matriz.

ans =

>> x=[1 2 3 5 3 1 -7];


>> sort(x) % ordena los elementos en orden ascendente

-7
ans =
>> [cual,donde]=max(x)
-7

cual =
>> A=[-2 4 7; 5 -6 -4;-2 -7 -9]
5
A =
donde =
-2
5
-2

4
>> A=[1 2 3;5 7 -1;2 3 4;1 1 1];
>> max(A) % da un vector fila con los maximos de cada columna
ans =
5

7
-4
-9

>> sort(A) % ordena los elementos dentro de cada columna


ans =

>> [cual,donde]=max(A) % para cada columna, 'donde' indica la


fila

-2
-2
5

-7
-6
4

-9
-4
7

El orden descendente se puede obtener a partir del ascendente con cambios de posiciones
de los elementos, pero tambin con un doble cambio de signo:

cual =
5

4
-6
-7

4
-sort(-A) % orden descendente

donde =
2
20

Ing. Alcides Ramos Calcina

La orden find sirve para encontrar las posiciones de una matriz que cumplen alguna
condicin. Al igual que muchas otras funciones de MATLAB, la orden devuelve resultados
distintos segn el nmero de argumentos de salida que se soliciten.
>> A=[-1 2 5;3 0 -1]
A =
-1
3

2
0

5
-1

>> find(A<0) % posiciones de los elementos negativos de A


ans =
1
6
>> [i,j]=find(A<0) % filas y columnas de los elementos negativos
de A
i =
1
2
j =
1
3

Como se ve en el ejemplo, si se pide slo un argumento, find devuelve las posiciones de


los elementos que cumplen la condicin, tal y como se guarda la matriz, por columnas. Si
se piden dos argumentos, find devuelve las posiciones de filas y columnas.

21

MATLAB Fundamentos Bsicos para Ingenieria

bar(Y)
bar(x,Y)
barh(X,y)

Captulo

hist(Y)
hist(Y,k)
pie(X)

Grficos

errorbar(x,y,e)
stem(Y)
stairs(X,Y)

INTRODUCCIN
El mdulo bsico de MATLAB ofrece una gama amplia de opciones a la hora de realizar
representaciones grficas. Permite realizar grficos de curvas planas y superficies,
posibilitando la agrupacin y superposicin de ellas. Tambin es posible trabajar colores,
rejillas, marcos, leyendas, ttulos, rtulos, etc., en grficos. Las representaciones de
funciones pueden realizarse en coordenadas implcitas, explicitas y paramtricas.
MATLAB es, por tanto, un software matemtico con elevadas prestaciones grficas, lo que
lo distingue de muchos otros paquetes de clculo simblico.
1.

GRFICOS BASICOS 2D

1.1. Grfico de datos


A continuacin se representan los comandos ms importantes de MATLAB que
permite realizar representacin de datos (grficos estadsticos en su mayora). En la
siguiente tabla se presentan algunos comandos y funciones para este propsito.
22

rose(Y)

Grfico relativo al vector de frecuencias Y. Si Y es matriz se


obtiene el grafico de barras mltiples para cada fila de Y.
Grfico de barras vertical relativo al vector de frecuencias Y
siendo x un vector que define los espacios en el eje x.
Grfico de barras horizontales relativo al vector de frecuencias X
siendo y un vector que define los espacios en el eje y.
Dibuja el histograma relativo al vector de frecuencias Y usando
10 rectngulos iguales de igual base.
Dibuja el histograma relativo al vector de frecuencias Y usando k
rectngulos.
Realiza el grafico de sectores circulares relativo al vector de
frecuencias X.
Realiza el grafico del vector x contra el vector y con los errores
especificados en el vector e. Pasando por cada punto (xi,yi).
Realiza el grfico de racimo relativo al vector Y.
Grfico escalonado del vector Y con el elemento a travs del
vector X.
Dibuja el histograma angular relativo al vector Y.

Ejemplo:

3
5

Represente en un grfico de barras los valores de un vector y 10 . (Figura 3)

1
2
>> y=[3 5 10 1 2]';
>> bar(y)

A continuacin representamos el mismo grfico para barras horizontales (Figura 4).


>> y=[3 5 10 1 2]';
>> barh(y)

Ing. Alcides Ramos Calcina

Represente un grfico de barras definidas por la funcin e x. x donde x [-5, 5] de


dos en dos decimales.

10
9

>> x=-5:0.2:5;
>> bar(x,exp(-x.*x))

8
7

Tambin podemos realizar lo siguiente:

6
5

>> x=-5:0.2:5;
>> y=exp(-x.*x);
>> bar(x,y)

4
3
2

0.9

0.8

Figura 3.

0.7
0.6
0.5

0.4
0.3

0.2
0.1

0
-6
2

-4

-2

Figura 5.
A continuacin representamos el mismo grfico para barras horizontales

1
0

10

>> x=-5:0.2:5;
>> y=exp(-x.*x);
>> barh(x,y)

Figura 4.

23

MATLAB Fundamentos Bsicos para Ingenieria


6

Tambin podemos graficar el histograma anterior con 20 cajas (Figura 8) mediante el


siguiente sintaxis:

1500
2

1000

-2

500
-4

-6

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

0
-4

-2

Figura 6.

Figura 8.

Consideremos un vector con 10000 puntos aleatorios normales (0,1) y graficamos el


histograma de frecuencias relativas a dichos puntos (Figura 7).

Represente un grafico de sectores circulares para los valores especificados en el


vector Y.

>> y=randn(10000,1);
>> hist(y)

>> Y=[1 3 0.5 2.5 2];


>> pie(Y)
11%
22%

3000
2500
2000
1500

33%

1000

28%

500
0
-4

-2

Figura 7.
24

6%

Figura 9.

Ing. Alcides Ramos Calcina

A continuacin representaremos el grafico escalonado relativo a la funcin e x. x para


x [-3, 3] separados por una decima (Figura 10).

0.6

>> x=-3:0.1:3;
>> stairs(x,exp(-x.^2))

0.4

0.5

0.3
1

0.2
0.1

0.8

0
0.6

-0.1
-5

Figura 11.

0.2

El ejemplo siguiente representamos un grfico de racimo (Figura 12) respecto a 100


nmeros aleatorios normales (0,1).

0
-3

-2

-1

>> y=randn(100,1);
>> stem(y)

Figura 10.
Ahora representamos (Figura 11) un grafico de errores para la funcin de densidad de
una distribucin normal (0,1), con variable definida en 40 puntos entre -4 y 4, siendo
definidos los errores por 40 valores aleatorios uniformes (0,10).
>>
>>
>>
>>

0.4

x=-4:0.2:4;
y=(1/sqrt(2*pi))*exp(-(x.^2)/2);
e=rand(size(x))/10;
errorbar(x,y,e)

3
2
1
0
-1
-2

20

40

60

Figura 12.
25

80

100

MATLAB Fundamentos Bsicos para Ingenieria

1.2. Grafico de funciones (y = f(x))


Para hacer grficas de funciones de una variable con MATLAB, primero tenemos que
crear una tabla de valores de la variable para despus dibujar la funcin, como ya
vimos algunos ejemplos anteriormente.

0.5

plot(x,y)
plot(Y)
plot(X,Y,S)

line(x,y)

ezplot(f,[xmin,xmax])
fplot(f,[xmin,xmax])

Dibuja el conjunto de puntos (x,y) en un sistema cartesiano.


Grafica los elementos del vector Y. Es til para graficar series
temporales.
Grfica de plot(X,Y) con las opciones definidas en S.
Usualmente, S se compone de dos dgitos entre comillas
simples, el primero de los cuales fija el color de la lnea del
grfico y el segundo el carcter a usar en el grfico.
Crea un grafico de lnea de los puntos (x,y). Puede especificar
el color, anchura, estilo de la lnea, y tipo del marcador, as
como otras caractersticas.
Grafica la funcin en el intervalo de variacin de x dado.
Grafica la funcin en el intervalo de variacin de x dado.

-0.5

-1

Figura 13.
0.5

Ejemplo:
Queremos dibujar la grfica de la funcin y = sen(x) en el intervalo [0,2] (Figura13):
-0.5
-3

>> x=0:pi/100:2*pi;
>> y=sin(x);
>> plot(x,y)

-1

Figura 14.

Veamos un ejemplo algo ms complicado (Figura 14). Queremos dibujar ahora la


grfica de la funcin y xe

-2

x2

. Definido los valores de x en el intervalo [-3,3].

La representacin de la funcin anterior (Figura 14), tambin puede realizarse


mediante la sintaxis siguiente:
>> ezplot('x.*exp(-x.^2)',[-3,3])

>> x=-3:0.01:3;
>> y=x.*exp(-x.^2);
>> plot(x,y)

As mismo, se obtendra la misma representacin grfica mediante el comando


siguiente:
>> fplot('x.*exp(-x.^2)',[-3,3])

26

Ing. Alcides Ramos Calcina

Cuadrcula.
Si queremos que aparezca una cuadrcula sobre el dibujo, utilizaremos el comando
grid on. El aspecto del dibujo sera ahora como el de la Figura 15. Para desactivar la
cuadrcula habr que escribir grid off.
>> fplot('x.*exp(-x.^2)',[-3,3])
>> grid on

Carcter
y
m
c
r
g
b
w
k

Color
Amarillo
Magenta
Cyan
Rojo
Verde
Azul
Blanco
Negro

0.5
0.4

Nota: Para consultar todas las posibilidades, hacer:

0.3

>> help plot.

0.2
0.1

Para ilustrar el color y trazo, grafiqu de la funcin y sen( x) x . Definido los


3

0
-0.1

valores de x en el intervalo [-3,4] con incrementos de dos decima (Figura 16).

-0.2
-0.3

>> x=-3:0.2:4;
>> y=sin(x).^3-x;
>> plot(x,y,'r+');

-0.4
-0.5
-3

-2

-1

Figura 15.

Color y trazo

El comando plot ofrece mltiples posibilidades de color y forma de trazo de la


grfica.

0
-1
-2

Carcter
.
+
*
O
X

Descripcin
Punto
Ms
Asterisco
Circunferencia
Equis (x-marcas)

Lnea
-:
-.

Descripcin
Continua
Guiones
Punteada
Guiones y punto

-3
-4
-5
-3

-2

-1

Figura 16.

27

MATLAB Fundamentos Bsicos para Ingenieria

Ahora grafiqu de la funcin y cos x , para x en el intervalo [-2,2] (Figura 17).


1

Los ejes que aparecen por defecto en una grfica tambin se pueden modificar. Con el
comando axis([a b c d]), conseguiremos que la grfica aparezca en la regin a x
2, y c y d.

0.8

Representemos el grafico anterior con nuevos intervalos, para x [0,2] y y [-1,1]


0.6

>> fplot('abs(cos(x))',[-2,2],'o')
>> axis([0 2 -1 1])

0.4

0.2

0
-2

0.5

-1.5

-1

-0.5

0.5

1.5

Figura 17.

Tambin podemos obtener el mismo grafico, pero la funcin determina el incremento


(Figura 18):

-0.5

>> fplot('abs(cos(x))',[-2,2],'o')
-1

0.5

1.5

Figura 19.
0.8

Con >>axis square, conseguiremos que la figura aparezca en un cuadrado, sin


cambiar el rango de los ejes. Con el comando >>axis equal, conseguiremos que los
rangos de los ejes sean iguales.

0.6

0.4

Zoom

0.2

0
-2

-1.5

-1

-0.5

Figura 18.
Ejes
28

0.5

1.5

Utilizando el comando >>zoom on. Se puede agrandar la figura o alguna zona


seleccionada de la figura. Hay que abrir la figura y utilizar los botones izquierdo y
derecho del ratn. Para desactivarlo, habra que escribir >>zoom off.
Ttulos y etiquetas

Ing. Alcides Ramos Calcina

MATLAB permite manejar correctamente las anotaciones sobre los grficos tales
como: ttulos, etiquetas, leyendas, etc.

Grfico de y=f(x)

5
0

xlabel(texto)
ylabel(texto)
zlabel(texto)
legend(cadena1,
cadena2, )
legend(off)
text(x,y,text)
text(x,y,z,text)
gtext(text)

Aade el texto como ttulo del grfico en la parte superior


del mismo en 2D y 3D.
Sita el texto al lado del eje x en el grafico 2D y 3D.
Sita el texto al lado del eje y en el grafico 2D y 3D.
Sita el texto al lado del eje z en el grafico 3D.
Sita las leyendas especificadas por las cadenas en n
grficos consecutivos.
Elimina las leyendas de los ejes actuales.
Sita el texto en el punto (x,y) dentro del grfico 2D.
Sita el texto en el punto (x,y,z) dentro del grfico 3D.
Permite situar el texto en el punto seleccionado con el
ratn dentro de un grfico 2D.

y=-x 2+sin(x)

-5
-10
Y

title(texto)

-15
-20
-25
-30
-2

-1

Figura 20.
Grafiquemos de la funcin y x sen( x) en el intervalo [-2,5] con las siguientes
2

caractersticas (Figura 20): ttulo, rotulo de los eje, rejilla y rotulo de la funcin.
>>
>>
>>
>>
>>
>>
>>
>>

1.3. Grficos mltiples


Se pueden dibujar tantas grficas como se quieran en una misma figura. Si ya
tenemos dibujada una, y generamos una nueva grfica, en principio la figura anterior
es sustituida por la nueva. Sin embargo, utilizando el comando >>hold on, se
mantendr la anterior, con todas sus propiedades, y se podr dibujar encima una
nueva. Para desactivar el comando anterior: >>hold off.

x=-2:0.05:5;
y=-x.^2+sin(x);
plot(x,y,'-')
text(2.7,-4,'y=-x^2+sin(x)')
title('Grfico de y=f(x)')
xlabel('X')
ylabel('Y')
grid on

plot(x,y,x,z)
subplot(m,n,p)

Grfica dos curvas con dos colores o tipos distintos.


Divide la ventana grfica en mxn subventanas y coloca el
grfico corriente en la ventana p-sima, empezando a
contar por la parte superior izquierda y de izquierda a
derecha hasta acabar la lnea.

En el siguiente ejemplo se representan sobre los mismos ejes las grficas de las
funciones y sen( x 2 ) e y log x , colocndose el texto de cada ecuacin
adecuadamente dentro del grfico, as como el titular del grfico y de los ejes (Figura
21).
29

MATLAB Fundamentos Bsicos para Ingenieria

>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>

>>
>>
>>
>>
>>
>>
>>

x=linspace(0,2,30);
y=sin(x.^2);
plot(x,y)
text(1,0.8,'y=sin(x^2)')
hold on %mantiene la figura anterior
z=log(sqrt(x));
plot(x,z)
text(1,-0.1,'y=log(sqrt(x))')
xlabel('Eje X')
ylabel('Eje Y')
title('Grfico senoidal y logartmico')

z=sin(x+pi/3);
hold off
plot(x,y,'r-',x,z,'b--')
legend('sin(x)','sin(x+pi/3)')
xlabel('Eje de Abscisas')
ylabel('Eje de Ordenadas')
title('Grficas trigonomtricas')
Grficas trigonomtricas

sin(x)
sin(x+pi/3)
0.5

Eje de Ordenadas

Grfico senoidal y logartmico


y=sin(x 2)

0.5

-0.5
0
Eje Y

y=log(sqrt(x))

-1

-0.5

3
4
Eje de Abscisas

0.5

1
Eje X

1.5

En el ejemplo siguiente se presentan en el mismo grafico (Figura 23) las grficas de


las funciones Sen(x), Cos(x), Cosec(x) y Sec(x), colocadas en una matriz de cuatro
grficos, de forma que debajo de cada funcin este su inversa para x en el intervalo de
[-2,2].

Figura 21.
Otra forma de hacerlo es dibujar desde el principio dos grficas juntas, por ejemplo,
vamos a dibujar las grficas de las funciones y sen( x) e y sen( x ) en la

misma figura (22):


>> x=linspace(0,2*pi,300);
>> y=sin(x);
30

Figura 22.

-1

-1.5

>>
>>
>>
>>
>>
>>
>>

subplot(2,2,1);
ezplot('sin(x)',[-2*pi,2*pi])
subplot(2,2,2);
ezplot('cos(x)',[-2*pi,2*pi])
subplot(2,2,3);
ezplot('csc(x)',[-2*pi,2*pi])
subplot(2,2,4);

Ing. Alcides Ramos Calcina


>> ezplot('sec(x)',[-2*pi,2*pi])

fill3(X,Y,Z,c)
sin(x)

cos(x)

-1

-1

meshgrid(x,y)

mesh(x,y,z)
-5

0
x
csc(x)

-5

-5

-5
-5

0
x

0
x
sec(x)

meshc(x,y,z)

meshz(x,y,z)

surf(x,y,z)
-5

0
x

surfc(x,y,z)

Figura 23.
2.

surfl(x,y,z)

GRFICOS 3D

waterfall(x,y,z)

MATLAB dispone de una gran variedad de formatos para dibujar grficas de funciones de
dos variables y una componente. En general se emplean colores para resaltar las alturas, en
una gradacin tpica de clculo cientfico que escala las alturas del azul al rojo (de menor a
mayor).
En el cuadro siguiente se presentan los comandos de MATLAB ms comunes en la
representacin de grficos de lneas 3D.

contour(x,y,z)

definidas en s.
Dibuja una regin poligonal cuyos vrtices son los
elementos de los vectores columna x, y, z. El parmetro c
contiene el color a graficar.
Crea arreglos bidimensionales a partir de los arreglos x e
y, para elaborar la grfica de una superficie explicita
z=f(x,y).
Representa una superficie explicita z=f(x,y) con los
arreglos x, y e z.
Representa una superficie explicita z=f(x,y) con los
arreglos x, y e z; proyectando las curvas de nivel en el
plano xy.
Representa una superficie explicita z=f(x,y) con los
arreglos x, y e z; cerrando la grfica con las fronteras del
dominio.
Grfica una superficie explicita z=f(x,y) con los arreglos x,
y e z; pintando cada una de las celdas.
Grfica una superficie explicita z=f(x,y) con los arreglos x,
y e z; proyectando las curvas de nivel en el plano xy.
Grfica una superficie explicita z=f(x,y) con los arreglos x,
y e z; considerando una iluminacin en formato bsico.
Grfica una superficie explicita z=f(x,y) en forma de
cascada.
Grfica las curvas de nivel de la superficie explicita
z=f(x,y).

Nota: Cuando se van a emplear funciones de dos variables, necesitaremos cruzar una lista
de valores (x1, x2, , xn) con otra (y1, y2, , yn). Esto lo hace la orden meshgrid. Si:
x = (x1, x2, , xn), y = (y1, y2, , yn)
la instruccin
[u v]=meshgrid(x,y)

devuelve dos matrices con m filas y n columnas


plot3(X,Y,Z)
plot3(X,Y,Z,s)

Dibuja el conjunto de puntos (x,y,z) en un sistema de 3D.


Dibuja el conjunto de puntos (x,y,z) con las opciones
31

MATLAB Fundamentos Bsicos para Ingenieria

x1
x
u 1

x1

x2 xn
x2 xn

x2 xn

y1
y
v 1

y1

y2 yn
y2 yn

y2 yn

As u(i,j) = xj y v(i,j) = yi, Recorriendo en paralelo las matrices u y v se obtienen, por tanto,
todos los pares (xi, yj).

Ahora representaremos otra la funcin z = f(x,y) haciendo uso de los comandos siguientes
(Figura 25):
>>
>>
>>
>>
>>
>>

t=-6:0.2:8;
x=t;
y=3-t;
z=cos(t);
plot3(x,y,z)
grid on

Ejemplo:
Representemos las hlice paramtrica x(t) = Sen(t), y(t) = Cos(t), z(t) = t para valores de t
entre 0 y 10 separados /50 (Figura 24).

1
0.5

>>
>>
>>
>>

t=0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
grid on
axis square

0
-0.5
-1
10
5

40

0
-5

30

-5

10

Figura 25.

20

A continuacin representamos un polgono compacto (Figura 26) mediante la siguiente


sintaxis:

10
0
1

0
-1 -1

Figura 24.

32

-10

>>
>>
>>
>>
>>
>>
>>

t=-6:0.2:8;
x=t;
y=3-t;
z=cos(t);
c=[1 0.8 0.1];
fill3(x,y,z,c)
grid on

Ing. Alcides Ramos Calcina

Grfico en 3D

0.5

0.5
0

-0.5
10

-0.5
-1
10

5
0
-5

-10

-5

-10

10

>>
>>
>>
>>

x2 y 2
x y
2

10

A continuacin representamos la superficie anterior acompaada de sus curvas de nivel


(Figura 28).

Representemos la superficie (Figura 27), cuya ecuacin explicita es la siguiente:

-5

Figura 27.

Figura 26.

Sen

-10

>>
>>
>>
>>

[x,y]=meshgrid(-7.5:0.5:7.5);
z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2);
surfc(x,y,z)
title('Grfico en 3D - curvas de nivel')

Grfico en 3D - curvas de nivel

[x,y]=meshgrid(-7.5:0.5:7.5);
z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2);
surf(x,y,z)
title('Grfico en 3D')

1
0.5

Observacin: En los siguientes grficos simplificaremos el cdigo de la programacin:

>> [x,y]=meshgrid(-2:0.2:2)
-0.5
10

en remplazo de:

>> xa=-2:0.2:2;
>> ya=-2:0.2:2;
>> [x,y]=meshgrid(xa,ya);

-10

33

-10

-5

10

MATLAB Fundamentos Bsicos para Ingenieria


Grfico en 3D - frontera

Figura 28.
Continuando con este ejemplo, representamos el grfico de malla (Figura 29).
1

[x,y]=meshgrid(-7.5:0.5:7.5);
z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2);
mesh(x,y,z)
title('Grfico en 3D - malla')

0.5

>>
>>
>>
>>

Grfico en 3D - malla

-0.5
10

0
0.5

-10

-10

-5

10

Figura 30.

0
-0.5
10
0
-10

-10

-5

10

Figura 29.
Y ahora lo representamos con la opcin de cortina o teln inferior (Figura 30) y le
agregamos algunas caractersticas al grfico.

Represente la superficie, su grfico de malla y su grfico de contorno cuya ecuacin es la


siguiente:

z x2 y 2 9
>>
>>
>>
>>

con -3 < x, y < 3

[x,y]=meshgrid(-3:0.2:3);
z=x.^2-y.^2-9;
surf(x,y,z)
title('x^2-y^2-9')

El grfico de la superficie (Figura 31) puede representarse tambin como sigue:


>>
>>
>>
>>
>>
>>
>>

34

[x,y]=meshgrid(-7.5:0.5:7.5);
z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2);
meshz(x,y,z)
title('Grfico en 3D - frontera')
xlabel('X')
ylabel('Y')
zlabel('Z')

>> ezsurf('x.^2-y.^2-9',[-2,2],[-2,2])

El grfico de la malla (Figura 32) puede representarse como sigue:


>> ezmesh('x.^2-y.^2-9',[-2,2],[-2,2])

Ing. Alcides Ramos Calcina


2 2

El grfico de contorno (Figura 33) puede representarse como sigue:

x -y -9

>>
>>
>>
>>

-6

[x,y]=meshgrid(-3:0.2:3);
z=x.^2-y.^2-9;
contour(x,y,z)
title('Grfico de contorno de: z=x^2-y^2-9')

-8
-10

-12

2
0
y

-2

-2

-1

Grfico de contorno de: z=x 2-y 2-9

-1

Figura 31.

-2
-3
-3

-2

-1

2 2

x -y -9

Figura 33.
Y ahora visualizamos el grfico de contorno 3D y es como sigue (Figura 34):

-4
-6

>>
>>
>>
>>

-8
-10

[x,y]=meshgrid(-3:0.2:3);
z=x.^2-y.^2-9;
contour3(x,y,z,20)
title('Grfico de contorno con 20 niveles')

-12
2
0
y

-2

-2

-1

Observacin: El parmetro m de contour(x,y,z,m) o de contour3(x,y,z,m), indica el


nmero de niveles de contorno a graficar.

Figura 32.

35

MATLAB Fundamentos Bsicos para Ingenieria


Grfico de contorno con 20 niveles

Figura 35.

0
-5
-10
-15
-20
2
0
-2

-2

Figura 34.
Finalmente representamos el grafico de cascada de la funcin anterior (Figura 35).
>>
>>
>>
>>

[x,y]=meshgrid(-3:0.2:3);
z=x.^2-y.^2-9;
waterfall(x,y,z)
title('Grfico de cascada de: z=x^2-y^2-9')
2 2

Grfico de cascada de: z=x -y -9

0
-5
-10
-15
-20
5
0
-5

36

-4

-2

Ing. Alcides Ramos Calcina

emplearse cualquier editor de ficheros ASCII. Una primera forma de hacerlo seria
ejecutando la orden
>> edit

Captulo

De esta forma se abre una nueva ventana en la que podemos teclear el conjunto de rdenes
en MATLAB por ejecutar (vase la Figura 36).

Funciones y Ficheros
INTRODUCCIN
Hasta el momento nos hemos ocupado del trabajo con MATLAB en modo interactivo, sin
embargo como ya se ha comentado tambin es posible trabajar en modo programado
utilizando para ello los llamados mficheros. Estos son ficheros de texto con extensin .m
que contienen instrucciones en MATLAB los cuales se ejecutan desde la pantalla de
comandos (Command Window).
Hay dos tipos elementales de mficheros:
Figura 36: Ventana de editor de texto.
Los scripts estn formados simplemente por una serie de instrucciones en MATLAB
que se ejecutan como si estuviramos en modo interactivo;
Las mfunciones son el equivalente en MATLAB a las subrutinas (procedimientos)
de los lenguajes de programacin tradicionales.
Hay distintas formas crear y/o editar un nuevo m-fichero, a continuacin explicamos cmo
se hara utilizando el editor de MATLAB (en un entorno WINDOWS), aunque podra

37

Otra forma de generar un nuevo mfichero sera siguiendo los siguientes pasos:
1. seleccionar del men principal la opcin: File / New / Mfile (vase la figura 37)
2. escribir el conjunto de instrucciones en MATLAB
3. guardar el fichero (File / Save as... ) con extensin .m.

MATLAB Fundamentos Bsicos para Ingenieria

Podemos elegir la carpeta dnde guardarlo, por defecto se guarda en la carpeta work
dentro de la carpeta de MATLAB. En general es conveniente guardar los ficheros en la
carpeta en la que se est trabajando. En caso contrario, para algunas situaciones que
emplearemos posteriormente, hace falta modificar el llamado path, que indica al sistema
operativo dnde buscar nuevos documentos.

1.

SCRIPTS

Un script es un mfichero que agrupa una serie de instrucciones de MATLAB en el que no


se requieren ni argumentos de entrada ni de salida y que permite la ejecucin repetidas
veces de esas rdenes de una forma sencilla y sin ser necesario teclearlas en cada ocasin.
En este tipo de m-ficheros se operan con variables declaradas en la pantalla de comandos.
Para graficar la funcin sen(x) en el intervalo de [0, 2] editamos un script (siguiendo los
pasos anteriores) llamado prueba.m con las siguientes instrucciones de MATLAB:
prueba.m
%Graficamos la funcion Sen(x)
%Intervalo de x definido en [0,2*pi]
x=0:0.1:2*pi;
y=sin(x)
plot(x,y,'r');
grid on
title('Grafica de la funcion Sen(x)')

Guarde el archivo con algn nombre, ejemplo: prueba.m


Para ejecutar el programa escriba en la ventana de comandos
>> prueba

El resultado de la ejecucin del script se puede visualizar en la Figura 38.


Para editar un archivo de comandos, seleccione en la barra de herramientas de MATLAB la
opcin: File / Open o seleccione el cono respectivo. En el archivo abierto en la ventana de
edicin (Figura 39) haga los cambios y gurdelo nuevamente con el mismo nombre.
Figura 37.

38

Ing. Alcides Ramos Calcina


Grafica de la funcion Sen(x)

>> help prueba


Graficamos la funcion Sen(x)
Intervalo de x definido en [0,2*pi]

0.8
0.6

Con esta ejecucin del programa prueba.m se han generado dos nuevas variables, x e y. Las
cuales pueden ser listadas con el comando whos

0.4
0.2
0

>> whos
Name

-0.2

Size

Bytes

1x63
1x63

504
504

Class

Attributes

-0.4

x
y

-0.6
-0.8
-1

double
double

Otra utilidad de los scripts es como fichero de datos o parmetros. Por ejemplo, creamos un
mfichero llamado datos.m que contenga las siguientes rdenes de asignacin:

Figura 38.

datos.m
% Fichero de datos
tiempo=[0:0.2:1];
posicion=[1.3, 1.4, 1.2, 1.1, 1.0, 1.6];
media=sum(posicion)/length(tiempo);
disp(media) % Muestra en pantalla la media
Al ejecutar en MATLAB
>> datos
1.2667

Nos muestra en pantalla como resultado el valor de media y aparecen tres variables (en la
ventana Current Directory): tiempo (vector), posicion (vector) y media (escalar). Si ya
existan, se les asigna un nuevo valor. Si no, se crean nuevamente.

Figura 39.
A la hora de programar es recomendable documentar los programas de forma que se
facilite su lectura. Ese es el objeto de las dos primeras lneas de comentarios del script
races. En ellas se aclara qu es lo que se hace concretamente, adems estas lneas se
incorporan al sistema de ayuda de MATLAB, de modo que

39

2.

FUNCIONES

MATLAB Fundamentos Bsicos para Ingenieria

Una cualidad de MATLAB es la de permitir generar nuestras propias funciones para un


problema especfico que queramos resolver. De esta forma ampliamos la potencia de
MATLAB ya que estas nuevas funciones adaptadas a nuestras necesidades se pueden
utilizar del mismo modo que las que ya tiene MATLAB predefinidas, como son por
ejemplo, det, rank, sum, ...
El comando function permite la definicin de funciones a medida en MATLAB,
constituyndose una de las aplicaciones ms tiles de los m-ficheros. La sintaxis de este
comando es la siguiente:
function parmetros_salida = nombre_function(parmetros_entrada)
cuerpo de la funcin

Para guardar de forma definitiva dicha sintaxis en MATLAB se selecciona la siguiente


secuencia de opciones: File / Save mediante la cual podemos guardar nuestra funcin con
el nombre fun1.m.
Una vez definida y guardada la funcin anterior en un m-fichero, se puede utilizar desde la
ventana de comandos.
Por ejemplo, para hallar el valor de la funcin en 3/2 escribimos sobre la ventana de
comandos:
>> fun1(3*pi/2)
ans =

Cuando los parmetros de salida son ms de uno, se sitan entre corchetes y separados por
comas. Si los parmetros de entrada son ms de uno, se separan por comas. El cuerpo de la
funcin es la sintaxis que la define, y debe incluir comandos o instrucciones que asignen
valores a los parmetros de salida.
A continuacin se definir la funcin fun1(x)=x^3-2x+cosx, creando el correspondiente mfichero de nombre fun1.m.

95.2214

Aunque en este sencillo ejemplo se tienen un solo argumento de entrada y un solo


argumento de salida, en general, se pueden tener o no varios argumentos de entrada como
de salida. Veamos el siguiente ejemplo:
mifuncion.m
function f=mifuncion(x,y)
% Definicin de una funcion con 2 variables de entrada
f=y*(1-y)+x;

Ejecutamos la funcin:
>> mifuncion(0,1)
ans =
0

Figura 40.

40

>> mifuncion(3,2)
ans =
1

Ing. Alcides Ramos Calcina

Observamos que hay un cierto inconveniente con que la funcin no est vectorizada.
Vamos a hacer un pequeo arreglo, vectorizamos para poder evaluar la funcin para
vectores.

>> [valor,media]=mifuncion([0 3 4],[1 2 1])


valor =
0

mifuncion.m
function f=mifuncion(x,y)
% Definicin de una funcion con 2 variables de entrada
f=y.*(1-y)+x;

>> mifuncion([0 3 4],[1 2 1])

media =
1.6667

En este caso slo debemos vectorizar el producto (.*) pues la suma ya es una operacin que
se realiza de forma vectorizada. Ahora si hacemos lo siguiente:

ans =
0

obtenemos un vector con el valor de la funcin en (0,1), (3,2) y (4,1), respectivamente.

Observa tambin que en esta ltima modificacin de mifuncion.m hemos aadido la orden
return con lo que se vuelve al modo interactivo. A diferencia de lo que ocurre con otros
lenguajes de programacin esta instruccin no es necesaria al final de la definicin de la
funcin. Su empleo es comn cuando se quiere salir de la funcin si se cumple algn tipo
de condicin (lo veremos en la seccin sobre estructuras de programacin).
No hay ningn problema en que una mfuncin llame a otra mfuncin, siempre que no
se entre en un ciclo recursivo, es decir, que siguiendo el rastro de llamadas de una funcin
a otra funcin regresemos a la original. La recursividad existe en MATLAB pero hay que
tratarla de una manera especial.

Ahora modifiquemos la funcin de tal forma que ahora calcule el promedio de los valores
de f.

3.

mifuncion.m
function f=mifuncion(x,y)
% Definicin de una funcion con 2 variables de entrada
f=y.*(1-y)+x;
promedio=sum(f)/length(x);
return
%opcional

En la definicin de una funcin (al igual que en cualquier lenguaje de programacin) los
nombres de las variables son mudos, es decir, se entienden y definen nicamente dentro del
fichero, sin relacin con las variables exteriores. La nica excepcin la forman las variables
declaradas como globales en ambos contextos. Para ello es preciso definir las variables
como globales con el comando global, cuya sintaxis es la siguiente:

Ahora tenemos dos argumentos de salida, f y promedio. El primero de ellos siempre es un


dato que se devuelve. Para el segundo (y en general para los siguientes), podemos elegir si
devolverlos o no.
>> valor=mifuncion([0 3 4],[1 2 1])
valor =
0

4
41

VARIABLES LOCALES Y GLOBALES

global x y z

Define las variables x, y, z como globales

Cualquier variable definida como global en el interior de una funcin es accesible


separadamente para el resto de las funciones y para el espacio de trabajo base lnea de
comandos. Es conveniente declarar una variable como global en cada funcin que necesite
acceso a ella, y tambin en la lnea de comandos, para tener acceso a ella desde el espacio
de trabajo base. En el interior de las funciones el comando global se sita al principio
(antes de cualquier ocurrencia de la variable).

MATLAB Fundamentos Bsicos para Ingenieria

Veamos esto con un ejemplo. Construimos y guardamos la siguiente funcin,


completamente trivial. La instruccin a = 4 no hace nada relevante, ya que realiza una
asignacin interna que no se exporta.
fun2.m
function y=fun2(x)
a=4;
y=2*x;

ans =
7
>> a

% la ejecucion de fun2 ha cambiado el valor de a

a =
4

Ahora hacemos una prueba de ejecucin. En el contexto de la consola, 'a' es una variable
global. No obstante, como sta no ha sido declarada as en la funcin fun2, ni el valor en
consola se importa a la funcin, ni el valor dentro de la funcin se exporta.
>>
>>
>>
>>

>> a=3;
>> fun2(3.5)

global a
a=[2 4];
y=3;
x=fun2(y)

Las variables globales son variables de entrada y salida simultneamente sin que aparezcan
en ninguna de las dos listas (listas de argumentos de entrada ni de salida).
Una utilidad tpica de las variables globales es poder transmitir listas largas de parmetros
de la consola a una subrutina o al revs, sin incluirlas en las definiciones de las funciones.
Las variables globales se definen y emplean nicamente en el contexto donde estn
declaradas.
Pueden estar perfectamente definidas en un grupo de mfunciones y no en la consola. En
tal caso, no podemos acceder a su valor en consola, pero s en cualquier funcin que las
declare.

x =
6
>> a

Por ejemplo, adems de la funcin fun2 anterior, construimos otra funcin, llamada glob.
a =
2

glob.m

Ahora cambiamos la funcin para que a sea variable global dentro de la funcin tambin.

function y=glob(x)
global a
y=a*x;

fun2.m
function y=fun2(x)
global a
a=4;
y=2*x;
En este caso, tras ejecutar la funcin, el valor de la variable 'a' pasa a ser a=4.
>> global a
42

En la siguiente cadena de ejecuciones (donde nos preocupamos de que a quede borrada en


la consola), se ve claramente cmo se transmite el valor de a de una funcin a otra sin que
pase por consola.
>> clear a
>> fun2(2); % a ha quedado declarado globalmente como a=4;
>> a

Ing. Alcides Ramos Calcina


??? Undefined function or variable 'a'.

sparse

speye(5)

>> glob(3) % matemticamente glob(x)=a*x

int8, uint8,
int16, uint16,
int32, uint32
char

Uint8(magic(3))

cell

{17 hola eye(2)}

structure

user class

a.day = 12
a.color = red;
a.mat = magic(3);
Inline(sin(x))

java class
function handle

Java.awt.Frame
@humps

ans =
12

Al igual que todas las variables empleadas en una sesin estn almacenadas en la memoria
a la que se accede desde la consola (en el workspace), todas las variables globales estn
almacenadas en una memoria global a la que se puede acceder parcialmente a travs del
comando global
4.

TIPOS DE DATOS

hola

En MATLAB hay 14 tipos de datos diferentes que representan en la Figura 41.


ARRAY

char
NUMERIC
- int8, uint8, int16, uint16, int32, uint32
- single
- double
sparse
cell
structure
- user class
function handle

5.

Ejemplo
3*10^38
3*10^300
5+6i

Caracteres (cada carcter tiene


una longitud de 16 bits)
Celda (contiene datos de similar
tamao)
Estructura (contiene datos de
similar tamao)
Clase MATLAB (creada con
funciones)
Clase Java
Maneja funciones MATLAB

GESTION DE FICHEROS

La gestin de los mficheros se hace con los siguientes comandos


Comando
edit nombrearchivo.m
edit nombrearchivo
type nombrearchivo.m
type nombrearchivo
del nombrearchivo.m

Figura 41.
A continuacin se detallan los distintos tipos de datos:
Tipo de dato
single
double

Matriz dispersa con doble


precisin
Enteros con y sin signoy con 8,
16 y 32 bits de longitude.

Descripcin
Precisin numrica simple.
Doble precisin numrica.

what
dir
ls
43

Descripcin
abre la ventana de edicin y el fichero indicado
si el fichero no existe, se crea en blanco
(igual)
visualiza en pantalla el contenido del fichero
sin editarlo (as no se puede modificar)
(igual)
borra el mfichero indicado;
requiere que no est abierto en la ventana de
edicin
lista todos los mficheros en el directorio actual
lista todos los archivos en el directorio actual
(igual)

MATLAB Fundamentos Bsicos para Ingenieria

cd
cd path
which ejem

44

muestra el directorio actual


cambia al directorio dado por path
muestra el directorio de ejem.m

Ing. Alcides Ramos Calcina

Si la ejecucin de una funcin que est en un mfichero necesita de la introduccin de


algn dato, se puede realizar mediante la orden input.
Por ejemplo, introducir un valor por teclado:

Captulo

a=input('Introduce el valor de a: ')

solicita un dato que es introducido en la variable a. El dato puede ser de cualquier tipo,
sea un escalar, una matriz, etc. La introduccin del dato se interrumpe una vez se pulse
la tecla Enter, salvo que se hayan introducido puntos suspensivos antes.
>> b=input('Matriz: ')
Matriz: [3 2 1;... % no hemos terminado (puntos suspensivos)
1 -1 2]

Programacin en Matlab

b =

INTRODUCCIN

3
1

La programacin en MATLAB se realiza bsicamente sobre archivos M o m-ficheros. Se


les denomina de esta forma debido a su extensin .m.
Estos archivos son simples archivos ASCII o scripts, y como tales, pueden ser creados y
modificados desde cualquier editor de texto comn; por ejemplo, el Bloc de Notas. El
MATLAB incluye un editor de archivos .m, (vistos en el capitulo anterior) orientado a la
programacin sobre este software.

2
-1

1
2

Ahora ingresemos una variable de tipo texto (carcter), para esto tecleamos las comillas
antes de introducir una variable carcter, ya que fijamos el tipo de la variable que
pedimos a carcter ('s' hace referencia al tipo string).
>> input('Nombre:
Nombre: Juan

','s')

ans =

1.

ESTRUCTURAS DE CONTROL
Juan

El uso de funciones recursivas, condicionales y definidas a trozos es muy habitual en


matemtica. Para la definicin de es te tipo de funciones es necesario el manejo de bucles.

Cuando se quiere escribir un mensaje en pantalla (salida) durante la ejecucin de una


funcin, se puede emplear
>> disp('Mensaje')

a. Instrucciones de Entrada y Salida


45

MATLAB Fundamentos Bsicos para Ingenieria

(disp es abreviatura de display). La funcin de disp admite como argumento una


variable de cualquier tipo. Nota hace diferencia.
>> b=[1 3 5];
>> disp(b)
1
3

Finalmente, la funcin error('Mensaje') escribe el mensaje en pantalla y finaliza la


ejecucin del mfichero, regresando a donde se la hubiera llamado (la consola u otra
funcin). Es, por tanto, equivalente a un disp del mensaje y un return despus.
Ahora veamos ejemplos con m-ficheros de ingreso y salida de informacin.

Veamos a continuacin un ejemplo de la salida de ms de un resultado a pantalla:


disp([valor1, valor2, ]);
>> x=3^5;
>> y=sqrt(x);
>> disp([x,y])
243.0000
15.5885

Salida de resultados formateados a pantalla: fprintf(formatos, variables)


>> x=3^5;
>> y=sqrt(x);
>> fprintf('%d %f',x,y)
243 15.588457

En la funcin fprintf podemos especificar cantidades de columnas y decimales:


>> x=3^5;
>> y=sqrt(x);
>>fprintf('%5d %8.3f',x,y)
243
15.588

Otras especificaciones de formato puede verlas con help fprintf.


La orden pause detiene la ejecucin del programa, hasta que se pulsa la tecla Enter.
Como ya hemos mencionado, return interrumpe en esa lnea la ejecucin de la funcin,
regresando a donde se la hubiera llamado.

ejemplo2.m
%Ejemplo sencillo de instrucciones Salida - Entrada
%Suma, diferencia, producto y divisin de dos nmeros
a=input('Ingrese 1 nmero: ');
b=input('Ingrese 2 nmero: ');
sum=a+b;
dif=a-b;
prod=a*b;
div=a/b;
fprintf('%4d %4d %6d %8.3f',sum,dif,prod,div)

En la ventana de comandos:
>> ejemplo2
Ingrese 1 nmero: 5
Ingrese 2 nmero: 6
11
-1
30 0.833

b. El bucle IF - ELSEIF ELSE - END


Mediante esta estructura se pueden ejecutar secuencias de comandos si se cumplen
determinadas condiciones. La sintaxis del bucle es la siguiente:
Condicin simple:
if condicin
sentencias o comandos
end
Condicin doble:

46

Ing. Alcides Ramos Calcina

end
Veamos un ejemplo el m-fichero de nombre mayor.m para mostrar el mayor entre dos
nmeros:

if condicin
sentencias1
else
sentencias2
end

mayor.m

En este caso se ejecutan las sentencia1 si la condicin es cierta, y se ejecutan las


sentencia2 si la condicin es falsa.
Condicin anidada:
if condicin1
sentencias1
elseif condicin2
sentencias2
elseif condicin3
sentencias3

else
end

% Ejemplo de decisin
% Mayor de dos nmeros
a=input('Ingrese el primer dato: ');
b=input('Ingrese el segundo dato: ');
if a>b
resp=a;
else
resp=b;
end
disp(resp);

Ejecutando, tenemos:
>> mayor
Ingrese el primer dato: 8
Ingrese el segundo dato: 11
11

Ahora implementemos una funcin que determine si un nmero ingresado es par, impar
o negativo.

La sintaxis anidada anterior es equivalente a:


if condicin1
sentencias1
else
if condicin2
sentencias2
else
if condicin3
sentencias3
else

end
end

condicion.m
function condicion(n)
% Ejemplo de decisin anidada
% Par, impar, postivo, negativo
if n<0
A='n es negativo'
elseif rem(n,2)==0
A='n es par'
else
A='n es impar'
end

47

MATLAB Fundamentos Bsicos para Ingenieria


>> condicion(8), condicion(-3), condicion(5),
A =
n es par
A =
n es negativo
A =
n es impar

fibo.m
function a=fibo(n)
%Generar n trminos de la sucesin de Fibonacci
a=ones(1,n); % reserva ya la memoria necesaria
for i=3:n
a(i)=a(i-1)+a(i-2);
end

Ahora para calcular unos cuantos trminos se ejecuta como sigue.

c. El bucle FOR
La instruccin de repeticin ms empleada es for, que se utiliza para crear bucles.
Nota, no obstante, que MATLAB permite hacer bucles implcitos gracias a la creacin
automtica de listas y a la sectorizacin de muchas operaciones. Esto permite que
muchas operaciones que en un lenguaje de programacin tradicional se realizaran con
bucles, en MATLAB se pueden hacer mucho ms eficientemente sin ellos.
La estructura de un for es:
for variable = inicio:incremento:fin
sentencias
end
Como de costumbre si no ponemos el incremento, se toma el valor por defecto, que es
la unidad. La lista
for variable = inicio:fin
se crea al inicio de la ejecucin del for y seguidamente se va recorriendo por la
variable. La lista puede ser de cualquier tipo de nmeros.

>> fibo(3)
ans =
1
1
>> fibo(12)
ans =
1
1
89
144

48

13

12

21

34

55

Veamos ahora un ejemplo en la cual utilizamos doble for, para definir una matriz de
Hilbert, de orden (m,n).
matriz.m
function A=matriz(m,n)
% Definicin de una matriz de Hilbert a medida
for i=1:m
for j=1:n
A(i,j)=1/(i+j-1);
end
end

Ejecutando:
>> matriz(4,5)

Como ejemplo generes n nmeros de la sucesin de Fibonacci

Ing. Alcides Ramos Calcina


ans =
1.0000
0.5000
0.3333
0.2500

0.5000
0.3333
0.2500
0.2000

0.3333
0.2500
0.2000
0.1667

0.2500
0.2000
0.1667
0.1429

0.2000
0.1667
0.1429
0.1250

e. SWITCH CASE

d. Bucle WHILE
Esta sentencia permite ejecutar de forma repetitiva un comando o grupo de comandos
un nmero determinado de veces mientras se cumple una condicin lgica. La sintaxis
general de este bucle es:
while condicin
sentencias
end
Implemente un m-fichero que permita calcular el mayor nmero cuyo factorial no
exceda a 10100.
mientras.m
%Nmero cuyo factorial < 10^100
n=1;
while factorial(n)<1.e100
n=n+1;
end
disp(n)

La instruccin switch ejecuta ciertas sentencias basadas en el valor de uan variable o


expresin. Su sintaxis es:
switch espresin (escalar o cadena)
case valor1
sentencias %Ejecuta si expresin es igual a valor1
case valor2
sentencias %Ejecuta si expresin es igual a valor2

otherwise
sentencias %Ejecuta si expresin no cumple
%Ningn caso
end
A continuacin se presenta un ejemplo que devuelve -1, 0 1, u otro nmero segn la
entrada.
sele.m

Ahora ejecutamos el m-fichero


>> mientras
70

Una orden continue dentro de un conjunto de sentencias de un bucle pasa


directamente a la siguiente iteracin, sin completar el conjunto de sentencias
para ese valor del iterador.

La orden break se utiliza para terminar la ejecucin de los bucles for y while.
Sale del bucle ms interno en el que est contenido.

function sele(n)
%Indica -1, 0, 1 u otro numero
switch n
case -1
disp('menos uno');
case 0
disp('cero');
case 1
disp('uno');
otherwise
disp('otro valor');
end

Despus ejecutamos varios casos:


49

MATLAB Fundamentos Bsicos para Ingenieria

En la ventana de comandos ejecutamos la funcin principal, basta darle su entrada


correspondiente (una lista de valores para los que se calcular su media y mediana) y las
llamadas a las subfunciones se realizan automticamente tal y como se ve a continuacin.

>> sele(1)
uno
>> sele(15)
otro valor

2.

>> [promedio,mediana]=estat([10,20,3,4,5,6])

SUBFUNCIONES

promedio =
8

Las funciones definidas mediante m-ficheros pueden contener cdigo para ms de una
funcin. La funcin principal en el m-fichero se denomina funcin primaria, que es
precisamente la funcin que invoca el m-fichero. Pero adicionalmente puede subfunciones
colgando de la funcin primaria y que slo son visibles para dicha funcin primaria o para
otra subfuncin dentro del mismo m-fichero. Cada subfuncin comienza con su propia
lnea de definicin de funcin.
Como ejemplo, implementemos una funcin calcule la media y la mediana como
subfunciones.
estat.m
function [prom,med]=estat(u)
%Funcin primaria
% ESTAT calcula la media y la mediana como funciones internas
n=length(u);
prom=media(u,n);
med=mediana(u,n);
function a=media(v,n)
% Calcula la media
a=sum(v)/n;

mediana =
5.5000

3.

ESTRUCTURA DE DATOS

Una estructura de datos es una agrupacin de arrays del mismo tipo dentro de un array
superior. La idea bsica de una estructura de datos (existen en muchos lenguajes de
programacin de alto nivel) es la de un fichero, donde cada ficha contiene varios registros.
El nmero de registros por ficha es fijo y el tipo de registro guardado tambin, aunque en el
caso de que un registre guarde una matriz, distintas fichas pueden contener esos registros
con distinta longitud.
Los siguientes ejemplos pueden emplearse para hacerse una idea de cmo funcionan las
estructuras de datos en MATLAB a su nivel ms bsico. La orden save puede guardar
estructuras de datos

% Subfuncion

function m=mediana(v,n) % Subfuncion


% Calcula la mediana
w=sort(v);
if rem(n,2)==1
m=w((n+1)/2);
else
m=(w(n/2)+w(n/2+1))/2;
end

Del m-fichero struc.m podemos hacer las siguientes observaciones:

En cuanto se aade un segundo elemento con la misma estructura, una asignacin


de la forma persona.nombre='Juancho' ya no funcionar.

cat(1,persona(:).notas slo funcionara si las listas de notas tuvieran la

misma longitud, ya que intentamos pegar varias filas.

struc.m
50

Ing. Alcides Ramos Calcina


nombre: 'Fred'
edad: 26
notas: [4 5 2]

%Ejemplo de una estructura de datos bsica


persona.nombre='Juancho';
persona.edad=24;
persona.notas=[10, 5.5, 7, 14];
persona
persona.notas
media=sum(persona.notas)/length(persona.notas)
pause
% a\~{n}adimos una segunda persona
persona(2).nombre='Fred';
persona(2).edad=26;
persona(2).notas=[4 5 2]; % puede tener otra longitud
persona(2)
persona
disp(persona(2).notas(3)) % tercera nota de la segunda persona
disp('numero de elementos'),length(persona)
pause
persona(:).edad % son varias respuestas; no un array
edades=cat(1,persona(:).edad) % lista de edades (hay que pegar)
edades=cat(2,persona(:).edad) % 2=en horizontal
calificaciones=cat(2,persona(:).notas) % horizontal

numero de elementos
ans =
2
ans =
24
ans =
26
edades =
24
26
edades =
24

Ejecutando, tenemos:
>> struc

26

calificaciones =

persona =
nombre: 'Juancho'
edad: 24
notas: [10 5.5000 7 14]
ans =
10.0000

persona =
1x2 struct array with fields:
nombre
edad
notas
2

5.5000

7.0000

10.0000
2.0000

14.0000

media =
9.1250
ans =
51

5.5000

7.0000

14.0000

4.0000

5.0000

También podría gustarte