You are on page 1of 20

MATEM

ATICAS
I

2014/15

n. EINA
Grado en Ingeniera en Tecnologas y Servicios de la Telecomunicacio
Ricardo Celorrio {celorrio@unizar.es}. Depto. Matematica Aplicada, UZ

Primeros Pasos en Matlab


1.

Presentaci
on

En lugar de recitar una lista exhaustiva de indicaciones sobre como MATLAB trata distintos elementos y cuales son sus funciones, preferimos guiarnos a traves de ejemplos
practicos, mediante los cuales podras deducir cual es el funcionamiento de MATLAB y te
iras acostumbrando a su entorno de trabajo. Los ejemplos deben entenderse al 100 % (no

al 99 %), si hay alg


un paso que no entiendes, POR FAVOR, PREGUNTAMELO.

El programa
MATLAB (MATrix LABoratory) es el programa de calculo cientfico mas usado en Ingeniera y se emplea para:
realizar calculos aritmeticos (como una calculadora);
realizar calculo simbolico (con la posibilidad de hacer operaciones como derivar
funciones, calcular primitivas, etc) y exacto;
programar en un lenguaje no compilado;
realizar graficos en dos y tres dimensiones;
acceder a paquetes con aplicaciones tan diversas como el tratamiento de se
nales, la
simulacion de circuitos, metodos numericos avanzados, etc.

Modalidades de trabajo en MATLAB


trabajo interactivo, donde el usuario escribe una operacion y el programa la ejecuta;
trabajo programado, donde el usuario genera ficheros de instrucciones, que se pueden
ejecutar desde la ventana de comandos.

Accede a MATLAB
El prompt de MATLAB es >> . El usuario escribe detras.
Para ejecutar, pulsa la tecla Enter.
Se distinguen las may
usculas de las min
usculas.

2.

Los n
umeros en MATLAB

Comenzamos con operaciones tipo calculadora


>>
>>
>>
>>

2 + 2
7/3;
(3+4)*5^2
3^3+4*5^2

% teclea esto y ver


as c
omo no hace nada ;-)
% las operaciones se ordenan con par
entesis
% descubre el orden de estas operaciones

Recuerda
Lo que se escribe despues del smbolo % es entendido por MATLAB como un comentario que no debe ejecutarse, por tanto el resultado es el mismo tanto si se escribe el
comentario como si no se escribe. Los comentarios son especialmente u
tiles cuando
se programan cosas mas complicadas, ahora os los podeis saltar.
El orden de realizacion de operaciones aritmeticas cuando no hay parentesis es:
potencias, multiplicaciones o divisiones, sumas o restas.

Por defecto MATLAB nos ense
na solo 5 dgitos del resultado de sus operaciones. Sin embargo MATLAB conoce los resultados con mayor precision. La orden format nos permite
obtener mas informacion sobre los decimales de una operacion.
Ejemplo 2.1
>> format long
% cambio del formato de salida
>> 7/3
% miramos el nuevo resultado
>> format
% restablecemos el formato por defecto
>> 7/3
% comprobamos que todo est
a como al principio
>> help format
% pedimos informaci
on sobre m
as formatos
>> % prueba algunos de los nuevos formatos

Formatos de salida. Representamos el n


umero 10e en los distintos formatos
format
format
format
format
format
format
format
format
format

short
long
short e
long e
short g
long g
bank
rat
hex

27.1828
27.18281828459045
2.7183e+001
2.718281828459045e+001
27.1828
27.18281828459045
27.18
2528/93
403b2ecd2dd96d44

5 dgitos
16 dgitos
5 dgitos y exponente
16 dgitos y exponenete
optimo entre short y short e
optimo entre long y long e
2 decimales
aproximacion racional
codigo maquina hexadecimal

Las ordenes format y format short son exactamente lo mismo.


Recuerda La orden format solo cambia la presentacion por pantalla de los resultados,
no cambia en absoluto el modo en que MATLAB hace las operaciones. MATLAB siempre
realiza las operaciones en aritmetica de coma flotante de doble precision (64 bits por
n
umero)


3.

Constantes, variables y asignaci


on

Las asignaciones de valores a variables se hace como en la mayora de los lenguajes de


programacion.
>>
>>
>>
>>
>>

a=1
% asignamos el valor 1 a la variable a.
alpha=2
% asignamos el valor 2 a la variable alpha.
(a+alpha)*alpha
% se puede operar con variables asignadas
a+c
% no se puede operar con variables no asignadas
a=30
% si asignamos de nuevo se borra lo anterior

Observa que en la ventana workspace (espacio de trabajo) han aparecido las variables
recientemente declaradas. Cliquea dos veces con el raton sobre una de ellas.
Recuerda
El nombre de una variable puede constar de 31 caracteres alfanumericos.
A diferencia de lenguajes como C, Pascal o FORTRAN; en MATLAB no es necesario
declarar variables que vayan a ser empleadas como escalares, vectores, matrices o
caracteres. La declaracion la realiza automaticamente MATLAB a la vez que la
asignacion.

Ejercicio 3.1 Comprueba cuales de estos nombres pueden ser tomados como variables
en MATLAB
a) altura 1, b) altura-1, c) anchura pared, d) anchura %pared, e) 2anchura.
3

MATLAB tiene algunas


umero se representa por pi y la
constantes predefinidas: el n
unidad imaginaria i = 1 se puede representar por i, j o sqrt(-1)
>>
>>
>>
>>

pi^2
% 2
(1+i)*(1+2*i)
% operamos con n
umeros complejos
(1+i)*(1+2i)
% nos podemos ahorrar el * de la i
(1+sqrt(-1))*(1+2*sqrt(-1))
% equivalente a lo anterior

Ejercicio 3.2 Realizad las siguientes operaciones en MATLAB y comprobad si todos


obteneis el mismo resultado:
(1+i)4
a) (1 + i)4 , b) (5,3+4i)i
, c) 1 + i2 .

4.

Construcci
on de matrices

Lo que sigue declara una matriz y las traspone de dos formas distintas. Luego hacemos
una operacion simple.
>>
>>
>>
>>
>>
>>

A=[1 2 3; 4 5 6]
% matriz 2 3; observar el ;
B=transpose(A)
C=A
% otra forma de hacer la traspuesta
B+C
b+C
% b no es lo mismo que B
A+B
% esto no funciona, por qu
e?

Recuerda
Por defecto, MATLAB entiende todo como matrices. Los vectores seran matrices
con una u
nica fila o columna. Incluso los escalares se interpretan a veces como
matrices 1 1.
La matrices se definen con [...], mientras que las operaciones se organizan con
(...).

Si se pone un punto y coma al final de una instruccion, esta se ejecuta pero no se muestra
el resultado.
>>
>>
>>
>>
>>
>>
>>
>>

C=A;
% no sale nada
C
% ahora vemos C
B=[2 1; 3 3; 1 1];
A*B
% producto de matrices
B*A
A*A
% esto no funciona, por qu
e?
v=[-1 ;1; 2]
% vector columna
A*v
4

Ejercicio 4.1 Realiza (si se puede) los productos de matrices

2
2
[
]
]
[
3 1 2 4 5
1 2 4 5 3 ,
1
1
Ejercicio 4.2 Comprueba que el producto de matrices por escalares funciona de la forma
esperada en MATLAB escalar*matriz:
[
]
1 1
4
3 2
Las siguientes instrucciones sirven para averiguar cuestiones sobre las dimensiones (tama
nos)
de matrices en MATLAB
>> A=[2 1;3 4;5 7];
>> size(A)
% devuelve un vector fila con las dimensiones de A
>> [n m]=size(A)
% ahora, n=# filas de A; m=# columnas de A
Se pueden extraer elementos de las matrices utilizando los ndices de las posiciones. Tambien se pueden seleccionar una fila y una columna.
>>
>>
>>
>>

A
% miramos A
A(2,3)
% elemento 2,3 de A
A(1,:)
% primera fila de A (el segundo
ndice es mudo)
A(:,2)
% segunda columna de A

Aunque los vectores en MATLAB no son nada mas que matrices con una u
nica fila o
columna, es posible llamar a sus distintas componentes con un u
nico ndice:
>>
>>
>>
>>
>>
>>

v=[7; -2; 5; -6];


% vector columna
w=[3 -1 4];
% vector fila
v(3,1)
v(3)
% sale lo mismo que antes
v(1,3)
% esto en cambio no existe
w(2)

Miramos ahora algunas formas estandar de construir vectores:


>>
>>
>>
>>
>>

1:10
1:2:10
1:1:10
10:-1:2
1:-1:3

% cu
al es la diferencia?
% qu
e va a salir?
% vac
o

Los siguientes ejemplos sirven para ver como lo anterior se puede emplear para seleccionar
trozos de matrices.

>>
>>
>>
>>

A=[1 3 -1 2; 3 -5 1 3; 2 4 5 1];
A(2:3,:)
% filas 2 y 3
A(:,1:3)
% columnas 1 a 3
A(3,2:4)
% qu
e trozo es
este?

Construccion de matrices pegando vectores:


>> u=[1; 2; 3]
% vector columna
>> v=[1 4 -1]
% tambi
en es un vector columna
>> A=[u v]
% matriz que tiene a u y v como columnas
Ejercicio 4.3
Antes de ejecutarlo, di que va a resultar de las siguientes operaciones:
10:1;

10:-2:1;

2:.3:10

Considera las siguientes instrucciones


>> A=[2 3; 6 1]; b=[1;4];
Da una forma de pegar a la matriz A el vector b para obtener la matriz ampliada
de un sistema.
Ejercicio 4.4
Supon que tienes en A una matriz 3 3. Que diferencia hay entre [A eye(3)] y
[A ; eye(3)]?
>> help eye

% explicaci
on de la orden eye

Utilizando la ayuda de MATLAB, averigua que hacen las instrucciones zeros y


ones. Antes de probarlas, explica que vas a obtener con las instrucciones zeros(3),
ones(3,4) y zeros(4,1).

5.

Funciones matem
aticas elementales

Tambien podemos operar con las funciones matematicas elementales (funciones trigonometricas, hiperbolicas, exponenciales,..), hay una lista de las mismas en el Apendice.
>> x=1
>> a=0.34
>> y=sqrt(abs(pi-sin(x)/cosh(a)-log(x+a)))

La u
ltima lnea realiza la operacion y = | sen(x)/ cosh(a) log(x + a)|.
6

Se puede obtener informacion sobre las funciones mediante las siguientes ordenes
>> help exp
% explicaci
on de la exponencial
>> helpwin exp
% lo mismo pero en ventana aparte
Ejemplo 5.1 Realizacion coherente del siguiente calculo en MATLAB
z =
donde

(
a=

pmax
,
1 + z 2 /a2

3F (1 12 )/E1 + (1 22 )/E2
8
1/d1 + 1/d2

)1/3
,

pmax =

3F
.
2a2

Comprueba las expresiones con los siguientes valores: 1 = 2 = 0,3, E1 = E2 = 3


107 , d1 = 1,5, d2 = 2,75, F = 100 y z = 0,01. El resultado debe ser z = 1,7712 105 .
>>
>>
>>
>>
>>
>>

nu1=0.3;nu2=0.3;E1=3*10^7;E2=E1;d1=1.5;d2=2.75;F=100;z=.01;
num=3*F*((1-nu1^2)/E1+(1-nu2^2)/E2);
den=8*(1/d1+1/d2);
a=(num/den)^(1/3);
p max=3*F/(2*pi*a^2);
sigma z=-p max/(1+(z/a)^2)

Ejercicio 5.1 Teniendo en cuenta los datos del Ejemplo 5.1, calculad
[
(
) ]
)
(
2 1
a
z
z
.
x = pmax 1 arc tg( ) (1 1 ) ,5 1 + 2
a
z
a

6.

Directorio en curso y ficheros scripts

Con la intencion de no perder el trabajo realizado durante una sesion con MATLAB,
debemos organizar las ordenes en documentos o ficheros (files). El modo de guardar el
Ejemplo 5.1 en un fichero consiste en escribir las ordenes siguientes en un editor de texto
cualquiera
%TENSIONES
nu1=0.3;nu2=0.3;E1=3*10^7;E2=E1;d1=1.5;d2=2.75;F=100;z=.01;
num=3*F*((1-nu1^2)/E1+(1-nu2^2)/E2);
den=8*(1/d1+1/d2);
a=(num/den)^(1/3);
p_max=3*F/(2*pi*a^2);
sigma_z=-p_max/(1+(z/a)^2)
Sin embargo, como MATLAB tiene un editor de textos propio, no necesitamos abrir un
nuevo programa y podemos crear un documento acudiendo al men
u File -- New -M-file.
7

Ejercicio 6.1 Escribid las ordenes anteriores en un fichero. Es posible que las tengais
escritas en la ventana donde esta el historial (Command History).
Directorio en curso (Current Directory) es la carpeta en la que podemos abrir
o guardar ficheros desde MATLAB. Por defecto, esta carpeta es la carpeta work que
se encuentra dentro de la carpeta donde esta instalado MATLAB. Se puede trabajar
ah pero, con la intencion de no mezclar documentos con otros posibles usuarios, preferimos
crear una carpeta llamada MetMatematicos y guardar los documentos en ella. Por tanto,
debemos realizar los siguientes pasos
Crear la carpeta MetMatematicos.
Guardar el fichero del Ejercicio 6.1 con el nombre tensiones.m en la carpeta
MetMatematicos.
Cambiar el directorio en curso (current directory) a la carpeta MetMatematicos.
Observad que en efecto all se encuentra el fichero tensiones.m.
Escribir en la ventana de comandos (o command window) la palabra tensiones y
pulsad enter, de esta manera se ejecutan las ordenes escritas en el fichero, apareciendo los resultados en la ventana de comandos.

Ejercicio 6.2 Realiza los pasos anteriores.
Recuerda
Un fichero como tensiones.m, donde se escriben ordenes de un modo analogo a
como se escriben en la ventana de comandos, se dice que es un fichero script.
La extension .m es imprescindible y permite que MATLAB reconozca esos ficheros
como propiamente suyos.
Al escribir la palabra tensiones en la ventana de comandos, MATLAB busca el
fichero tensiones.m y, si lo encuentra, lo ejecuta.
Ejercicio 6.3 Crea y ejecuta el fichero tensiones2.m, donde ademas de los calculos
realizados en tensiones.m tambien esten los calculos del Ejercicio 5.1.
Historial (Command History). En esta ventana se almacenan las ordenes escritas
en la ventana de comandos.
Si se hace doble click sobre una orden del historial, esta orden se ejecuta inmediatamente en la ventana de comandos.
Si se seleccionan varias lneas del historial (en ocasiones hay que emplear la tecla de
may
usculas) y se selecciona en el boton derecho del raton la opcion Create M-File,
se genera inmediatamente un fichero *.m con las ordenes seleccionadas.

8

Ejercicio 6.4 Teclea estas 4 lneas en la ventana de comandos


>>
>>
>>
>>

t=linspace(0,2*pi,100)
% 100 puntos de [0,2*pi]
x=cos(t)
% coseno de los puntos anteriores
y=sin(t)
plot(x,y)
% dibujo del circulo unidad

Selecciona las 4 lneas en el historial y genera el fichero circle1.m, guardalo en tu carpeta


personal y ejec
utalo desde la ventana de comandos.

7.

Entrada y salida de datos

Para que un programa tenga contacto con la realidad, debe poder comunicarse con los
perifericos: pantalla, teclado, raton, sistemas de almacenamiento de datos,. . .

Ficheros de datos y resultados


Hay ocasiones en que el usuario quiere guardar datos para otras ocasiones. Prueba lo
siguiente
>>
>>
>>
>>
>>
>>
>>

whos
% miramos qu
e hay definido
clear
% ya no hay nada ...
whos
% verdad?
A=3*eye(5)+ones(5)
B=A^2
% =A*A
save datos A B
% f
jate: no se pone coma entre A y B
clear A B
% borramos A y B

Sal ahora al Windows y veras que ha aparecido un fichero datos.mat en el directorio en


curso. Si intentas abrirlo, se abrira una nueva sesion de MATLAB y en el fichero no veras
nada. No es un fichero de texto. Ahora veras como se emplea
>> load datos
>> A
>> B
El fichero datos.mat contiene las matrices A y B, pero tambien sus nombres. De hecho al
cargar el fichero, incluso se hacen automaticamente las asignaciones.
Ejercicio 7.1
Comprueba el empleo de esta otra forma de guardar resultados/datos en ficheros
>>
>>
>>
>>

save result.txt A -ascii


clear
load result.txt
whos
% d
onde est
an los datos?
9

Edita el fichero result.txt desde la ventana de Windows donde este y realiza alguna modificacion. Vuelve a cargarlo desde MATLAB y comprueba que la modificacion
se ha tenido en cuenta.
Construye la matriz

1 2 1
A = 0 1 4
1 0
5

Calcula su inversa (inv) exacta con aritmetica racional. Guardala en un fichero.


Puedes guardarla en formato ASCII?

Lectura de datos por pantalla


La instruccion input(texto) se emplea para pedir datos que deben ser introducidos por teclado. Es importante observar que si se pide algo que no sea un n
umero,
el usuario tendra que teclear corchetes, etc.
>> edad =input(dime tu edad y pulsa enter: )
El n
umero que has introducido se ha almacenado en la variable edad.
Si queremos pedir una cadena de caracteres, debemos a
nadir el argumento s
>> name=input(Nombre: ,s)
La instruccion disp(texto) se emplea para mostrar por pantalla alg
un tipo de
aviso, texto, etc. Los mas sencillos son del tipo
>> disp(La matriz de entrada A es: )
Si queremos mezclar n
umeros y caracteres debemos emplear la orden num2str
(n
umero a string) y escribir un vector con las distintas componentes del texto.
>> iter=3;
>> disp([Alcanzamos convergencia tras , num2str(iter),...
iteraciones])
Los tres puntos suspensivos ... sirven para continuar una lnea que es demasiado
larga.
ginput se emplea para introducir desde el raton las coordenadas de uno o varios
punto de un grafico.
>>
>>
>>
>>

axis([0,1,0,1])
% abrimos ventana [0,1][0,1]
[x,y]=ginput(1)
% pedimos coordenadas de un punto
[x,y]=ginput(3)
% pedimos coordenadas de 3 puntos
plot(x,y)
% unimos los puntos con l
neas

Ejercicio 7.2 Solicita las coordenadas de 4 puntos desde el raton y dibuja el polgono
abierto que los une.
10

Ejercicio 7.3 Crea un fichero estadistica.m con las siguientes lneas


%ESTADISTICA
disp(Introduce 4 numeros.)
x(4)=input();x(3)=input();x(2)=input();x(1)=input();
disp(Datos ordenados:),disp(sort(x))
disp(Su media es: ),disp(mean(x))
disp(Su desviacion estandar es: ),disp(std(x))
disp(Su maximo es: ),disp(max(x))
disp(Su minimo es: ),disp(min(x))

Ejec
utalo y observa la salida. Modifica el fichero de manera que siga dando los mismo
resultados pero la orden input solo aparezca una vez.
Modifcalo para que los resultados salgan alineados con el texto.
Ejemplo 7.1 Crea el fichero leeMatriz.m con los datos que tienes a continuacion. Este
es un primer ejemplo de programacion en MATLAB.
function A=leeMatriz
%LEEMATRIZ solicitud de matriz elemento a elemento
%
A=LEEMATIRZ pide por pantalla una matriz de tamao arbitrario.
%
Los datos se introducen por teclado: primero las dimensiones y
%
despues los elementos de la matriz.
%
El argmento de salida A es la matriz introducida
n=input(numero de filas: );
m=input(numero de columnas: );
disp(escribe la matriz por filas, pulsando enter tras cada elemento)
for i=1:n
for j=1:m
A(i,j)=input();
end
end

Tras guardar en disco el fichero leeMatriz.m, teclea las siguiente ordenes para ejecutarlo
>> help leeMatriz
% solicitamos informaci
on
>> B=leeMatriz;
% ejecutamos el fichero
>> B
% veamos la traspuesta de la matriz introducida

8.

Funciones vectorizadas

Con el fin de hacer programas mas cortos (con menos bucles) y claros , MATLAB acepta
operaciones sobre vectores (o matrices) componente a componente, las operaciones que
admiten esta posibilidad se dice que estan vectorizadas. Todas las funciones matematicas
elementales (trigonometricas, exponenciales,. . . ) programadas en MATLAB admiten argumentos vectoriales. Ya hemos visto algunos ejemplos de esto que recordamos a continuacion
11

>> x=[0,pi/2]
>> sin(x)
% seno de cada componente
>> exp(x)
Para realizar productos, potencias y divisiones componente a componente hay que anteponer un . al smbolo de la operacion habitual
>>
>>
>>
>>
>>

x=[3 5 7];
y=[4 -1 3];
x.*y
% producto componente a componente
x.^2
% elevar al cuadrado cada componente de x
3.^2
% con escalares el resultado es el esperado

Continuando en la lnea de reducir codigo MATLAB admite una operacion que a primera
vista es sorprendente como puedes comprobar
>>
>>
>>
>>

x=[3 5 7];
x-1
% observa el resultado
A=[2 2;3 4]
A+2
% suma 2 en todas las componentes

Como podemos comprobar, el significado de los escalares para MATLAB depende del contexto. En el primer caso ha identificado 1 con el vector [1 1 1] y en el segundo caso ha
identificado 2 con la matriz [2 2;2 2].

9.

Gr
aficos 2d

La vectorizacion es muy u
til al hacer graficos.
Ejemplo 9.1 Vamos a dibujar f (x) = sen(x2 + 1) en el intervalo [0, 3]. La estrategia es la
siguiente: se toman valores en [0,3] (cuantos mas mejor), se dibujan y se unen con trazos
rectos.
>>
>>
>>
>>
>>

x=0:0.2:3
%
y=sin(x.^2 + 1)
plot(x,y)
%
x=0:0.01:3;
...
% sigue

valores de 0 a 3 en incrementos de 0.2


% evaluamos en todos los puntos
dibujamos los puntos (x(i),y(i)), uni
endolos
% ahora con m
as puntos
t
u

Ejercicio 9.1
[

Dadas dos matrices


A=

1 2
3 4

[
,

que diferencia hay entre A*B y A.*B?

12

B=

1 0
0 2

]
,

Dibuja la funcion coseno entre 0 y 2.


La orden de dibujo plot tiene algunas opciones para representar graficas con distintos
colores y trazados que puedes consultar tecleando help plot:
>>
>>
>>
>>
>>
>>

x=0:.1:2*pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,x,y2)
% las dos gr
aficas juntas
plot(x,y1,b+-,x,y2,r*) % elegimos colores, trazados y marcas
plot(y1,y2) % dibujo en param
etricas lo entiendes?

Ejercicio 9.2 Dibuja conjuntamente y en distinto color las funciones g(x) = x3 3x


y h(x) = x2 x + 5 sen(x) en el intervalo [1, 2]. Dibuja la curva parametrica F (t) =
(g(t), h(t)) con t [1, 2].
Un grafico se puede hacer todo lo llamativo que se quiera, siempre y cuando nos aprendamos algunas opciones para modificar graficos. El siguiente programa tiene algunas de
estas opciones. Modifcalas a tu parecer hasta que entiendas su significado
%DIBUJO2D
%Exponemos algunas de las opciones que se pueden modificar
%de la ventana grafica (figure) en curso
t=0:.1:2*pi;
y=sin(t);
plot(t,y)
%Incorporamos opciones
title(Dibujo de sen(x)) %aNadimos titulo
axis([0 2*pi -1 1]) %ajustamos los ejes
grid on % superponemos una malla
xlabel(variable independiente) % etiqueta en eje OX
ylabel(variable dependiente) % etiqueta en eje OY

C
omo modificar la ventana gr
afica. Tambien es posible modificar una grafica empleando el men
u de la ventana figure de MATLAB. Merece la pena que pruebes durante
5 minutos. A la hora de realizar un grafico hay que tener muy claro que es lo que quieres
presentar a tu interlocutor y centrate u
nicamente en eso, porque si te dejas llevar por la
cantidad de posibilidades que tiene MATLAB, no terminaras nunca.

Ejercicio 9.3 Descubre que hace el siguiente programa: emplea en esta tarea todos los
trucos que se te ocurran

13

%POLIGONO
n=input(# de lados?
)
x=[];y=[]; %generamos dos vectores vacios
axis([0,1,0,1])
hold on % permite superponer dibujos en la misma ventana
for i=1:n
[a,b]=ginput(1);
x=[x a]; y=[y b];
plot(x,y)
end
x=[x x(1)]; y=[y y(1)];
plot(x,y)
hold off %desactiva la superposicion de dibujos
Incluye en el los comentarios que consideres pertinentes para que la proxima vez que lo
leas entiendas todo a la primera.

10.

Programaci
on estructurada: Mfiles

Cuando se quiere resolver un problema medianamente largo, la estrategia que mejor funciona es dividirlo en tareas mas peque
nas que deben ser organizadas para resolver el
problema inicial. Esta tareas deben ser independientes unas de otras (compartimientos
estanco) y deben comunicarse con el exterior mediante unos datos de entrada (input) y
unos datos de salida (output) que debemos tener perfectamente controlados.
Seis claves esenciales de la programaci
on estructurada:
1. Dividir el problema inicial (con sentido com
un) en tareas mas peque
nas que sepamos
resolver. El material o informe que debes generar en esta etapa es algo parecido a
un ndice de tareas.
2. Localizar en cada tarea los datos que recibe del exterior (variables de entrada) y
los datos que da a conocer (variables de salida). En este apartado debes ampliar el
ndice anterior incorporando las variables de entrada y salida.
3. Programar las tareas (de una en una). Debes realizar un algoritmo (pseudocodigo)
en papel y un programa en el ordenador.
4. Comentar las tareas. Debes escribir comentarios en los programas (escuetos y claros)
que ayuden a su comprension. Hay que explicar con especial cuidado el significado de
las variables de entrada y salida. Puedes pensar que los comentarios y el programa
que escribas debe ser entendido por el compa
nero del ordenador de al lado.
un)
5. Chequear las tareas (de una en una). Debes inventar ejemplos (con sentido com
en los que sepas la solucion y probar con estos ejemplos los programas que has
realizado con el fin de corregir errores. En este apartado debes dejar escritos los
14

ejemplos que has inventado y tomar nota de las tareas que has programado y que
consideras que funcionan bien.
6. Realizar un programa principal que ponga en conexion las tareas programadas
acorde con el ndice de los puntos 1 y 2.
Nos centramos primero en mostrar como realizar tareas en MATLAB, es decir nos concentramos en los puntos 2, 3, 4 y 5.
Una tarea en MATLAB debe organizarse en un Mfichero (ficheros con extension *.m),
ya hemos visto alg
un ejemplo de estos ficheros, que hemos denominado ficheros script y
que nos han servido para realizar tareas sencillas donde no haba variables de entrada y
salida.
Si queremos estructurar las tareas mediante variables (o argumentos) de entrada y salida,
y que esa sea la u
nica comunicacion de la tarea con el exterior, crearemos un Mfichero,
llamemosle por ejemplo mifichero.m y que obligatoriamente debe comenzar as:
function argumentos de salida = mifichero(argumentos de entrada)
.
.
.
A los Mficheros que comiencen con la palabra function los llamaremos FUNCIONES.
Cualquier variable que empleemos en este fichero tiene
ambito local (incluidos los argumentos de entrada y salida), es decir su ambito esta restringido al fichero que estamos
programando y no interfiere con variables que pudieran tener el mismo nombre en otro
fichero.
Ejemplo 10.1
1. Crea el fichero areacirculo.m, incluye en el las ordenes
function area=areacirculo(radio)
area=pi*radio^2;
y guardalo en el directorio en curso. Este fichero toma como argumento de entrada
el radio y como argumento de salida da el area del crculo.
2. Teclea en la ventana de comandos la orden
workspace esta vaco.

>> clear all

y observa que el

3. Para emplear el fichero areacirculo.m en el calculo del area de un crculo de radio


5 escribimos
>> y = areacirculo(5);
% almacenamos el resultado en y
>> y
% vemos el resultado
Observa que en el workspace solo esta la variable y, ya que las variables area y
radio del fichero areacirculo.m solo tienen ambito local.

15

4. Aunque este fichero es muy sencillo vamos a a


nadir comentarios acorde al estilo
estandar que mantienen todos los m-files de MATLAB
function area=areacirculo(radio)
%AREACIRCULO C
alculo del
area de un c
rculo
% AREA=AREACIRCULO(RADIO) Calcula el
area de un c
rculo
% de radio RADIO.
% AREA es el argumento de salida o output.
% Ricardo Celorrio, 22/10/09.
area=pi*radio^2;
Reglas estandar para comentar programas en MATLAB
a) La funcion y sus argumentos se escriben siempre en may
usculas para localizarlos a simple vista.
b) Justo despues de la primera lnea de codigo se escribe el nombre de la funcion
y una breve explicacion.
c) Las lneas siguientes se sangran a la derecha y explican el funcionamiento de
la funcion y el significado de sus argumentos.
d ) Escribe el nombre del autor o autores y la fecha del da.
ua con el codigo, y si es largo, se pueden incluir en el interior alg
un
e) Se contin
comentario mas, siempre escuetos y claros.
f ) Tecleando >> type trapz aparece en pantalla el codigo del fichero de MATLAB trapz.m. Como puedes observar cumple las reglas anteriores.
ltimo pregunta a MATLAB por el programa o funcion que has escrito >> help
5. Por u
areacirculo y observa la respuesta. Esta respuesta son los comentarios situados
entre las dos primeras lneas de codigo del programa.
Ejercicio 10.1 Crea el fichero micilindro.m y programa una funcion que calcule el
volumen y el area lateral de un cilindro circular recto. Debes realizar los pasos 2 a 5 de
las seis claves de la programacion estructurada. Puedes utilizar una cabecera parecida a
la siguiente: function [volumen,area]=micilindro(r,h)
YA ERES UN/A PROGRAMADOR/A EN MATLAB

16

Apendices
1.

Comandos generales

Ayuda on-line
help
helpwin
doc, helpdesk
help palabra
lookfor palabra

ndice de temas de ayuda


abre una nueva ventana de ayuda
abre el libro de ayuda
muestra ayuda sobre palabra
muestra los lugares de la ayuda donde aparece palabra

Informaci
on sobre la memoria
who
whos
what
which funcion1
clear
clear a b
clear all
clc
clf

muestra las variables que hay definidas en ese momento


como who a
nadiendo el tama
no de cada variable
lista los ficheros .m, .mat, .mex de directorio de trabajo
Indica si existe alguna funcion llamada funcion1, para evitar colisiones
borra todas las variables de la memoria
borra las variables a y b
borra variables y funciones de la memoria
limpia la pantalla de comandos y borra el historial
borra la figura en uso

Navegando entre los directorios


pwd
cd
dir
path
editpath
copyfile
mkdir

muestra el directorio en uso


cambio de directorio en uso (como en D.O.S.)
muestra los ficheros de la carpeta en uso
muestra las carpetas donde MATLAB busca ficheros
para modificar las carpetas donde MATLAB busca ficheros
copiar ficheros
para crear directorios o carpetas

Fecha, hora y tiempo


clock
fecha y hora en forma de vector
date
fecha en formato caracter
tic,toc medidores de tiempo de ejecucion

2.

Cambio de sistema de numeraci


on

dec2bin decimal a binario


bin2dec binario a decimal
dec2hex decimal a hexadecimal hex2dec hexadecimal a decimal
17

3.

Constantes predefinidas

i,j,sqrt(-1),1i unidad imaginaria NaN, nan not a number


pi

eps
precision maquina
inf

4.

Variables especiales

ans
variable de salida por defecto
nargin # de argumentos de entrada nargout # de argumentos desalida

5.

Entrada y salida de datos

disp
ginput
fprintf
save

6.

muestra texto por pantalla input toma datos del teclado


toma datos del raton
pause interrupcion hasta pulsar una tecla
escritura con formato
salva ficheros *.mat
load
carga ficheros *.mat

Funciones matem
aticas elementales

Operaciones aritm
eticas
+
*
/
\
^

suma
producto
division
division retrograda
potencia

.*
./
.\
.^

resta
producto vectorizado
division vectorizada
div. re. vectorizada
potencia vectorizada

Funciones exponenciales y logartmicas


exp(x)
ex
log
logaritmo neperiano
gamma(n+1) n! (factorial)

sqrt
raz cuadrada
log10 logaritmo decimal

Funciones trigonom
etricas e hiperb
olicas
sin
asin
cos
acos
tan
atan
atan2(y,x)

seno
arcoseno
coseno
arcocoseno
tangente
arcotangente
angulo de (x, y) en (, ]

sinh
asinh
cosh
acosh
tanh
atanh

18

seno hiperbolico
arcoseno hiperbolico
coseno hiperbolico
arcocoseno hiperbolico
tangente hiperbolica
arcotangente hiperbolica

Funciones complejas
real parte real
imag parte imaginaria
conj conjugacion

abs
valor absoluto
angle angulo o argumento en (, ]

Funciones de redondeo
floor
ceil
round
fix
rem
sign

7.

redondeo hacia
redondeo hacia
redondeo al entero mas cercano
redondeo hacia 0
resto de una division (rem(a,b)=a-fix(a/b)*b)
funcion signo

Gr
aficos simples

plot
contour
xlabel
title

8.

dibujos bidimensionales
curvas de nivel
etiqueta en eje X
ttulo

plot3
pcolor
ylabel
meshgrid

graficos 3D
funcion en escala de colores
etiqueta en eje Y
malla del dominio de una funcion

Sonido

beep sonido de aviso

9.

Matrices y vectores

Generaci
on de matrices especiales
[]
diag
eye
ones
zeros
rand
randn

matriz
matriz
matriz
matriz
matriz
matriz
matriz

o vector vaco
diagonal
identidad
de todo unos
nula
aleatoria basada en una distribucion uniforme
aleatoria basada en una distribucion normal

Funciones para operar con matrices


size
det
inv
lu

tama
no de una matriz
determinante
inversa
factorizacion LU

length
eig
A\b
cond

longitud de un vector
autovalores y autovectores
resolucion de Ax = b
condicionamiento

19

Funciones que operan sobre vectores


max
sum
sort
mean

maximo elemento
suma de elementos
ordena los elementos
calculo de la media

min
norm
reshape
std

mnimo elemento
calculo de normas
redimensionado de matrices
desviacion tpica o estandar

Algunas de estas funciones act


uan tambien sobre matrices, siendo aplicadas a cada una
de las columnas. Por ejemplo max(max(A)) da el mayor elemento de A.

10.

11.

Operadores l
ogicos y de relaci
on
MATLAB

&

xor

Significado

o excluyente

no

MATLAB

>

<

>=

<=

==

~=

Significado

>

<

Trucos de programacion

x=x(:), transforma el vector/matriz x en un vector columna.


Los sumatorios se programan como un producto de matriz fila por matriz columna:
La vectorizacion evita programar bucles y acelera el tiempo de ejecucion:

k
x=1:10; y=2.^x; z=x*y, calcula z= 10
k=1 k2 .

20

You might also like