Professional Documents
Culture Documents
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
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
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.
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
2 + 2
7/3;
(3+4)*5^2
3^3+4*5^2
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
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
3.
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
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
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
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:
>>
>>
>>
>>
>>
>>
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?
10:-2:1;
2:.3:10
% explicaci
on de la orden eye
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
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.
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
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
7.
Para que un programa tenga contacto con la realidad, debe poder comunicarse con los
perifericos: pantalla, teclado, raton, sistemas de almacenamiento de datos,. . .
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
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
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
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
Ejercicio 9.1
[
1 2
3 4
[
,
12
B=
1 0
0 2
]
,
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?
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.
y observa que el
15
16
Apendices
1.
Comandos generales
Ayuda on-line
help
helpwin
doc, helpdesk
help palabra
lookfor palabra
Informaci
on sobre la memoria
who
whos
what
which funcion1
clear
clear a b
clear all
clc
clf
2.
3.
Constantes predefinidas
eps
precision maquina
inf
4.
Variables especiales
ans
variable de salida por defecto
nargin # de argumentos de entrada nargout # de argumentos desalida
5.
disp
ginput
fprintf
save
6.
Funciones matem
aticas elementales
Operaciones aritm
eticas
+
*
/
\
^
suma
producto
division
division retrograda
potencia
.*
./
.\
.^
resta
producto vectorizado
division vectorizada
div. re. vectorizada
potencia vectorizada
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
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
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
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
10.
11.
Operadores l
ogicos y de relaci
on
MATLAB
&
xor
Significado
o excluyente
no
MATLAB
>
<
>=
<=
==
~=
Significado
>
<
Trucos de programacion
k
x=1:10; y=2.^x; z=x*y, calcula z= 10
k=1 k2 .
20