You are on page 1of 9

Toni Susin

http://www.ma1.upc.edu/~susin

MATLAB
como herramienta
de Programacin
Laboratori de Simulaci Dinmica
1

Screen shot de Matlab

ndice
Introduccin a la programacin en Matlab
Variables
Operadores
Control de Flujo
Funciones
Cmo utilizar Matlab
Entorno
Debugger
Ejercicios I
Matlab como herramienta de clculo numrico
Ejercicios II

Workspace

Command
window
Current Directory
3

Variables en MATLAB

Programacin en MATLAB
Lenguaje
Un lenguaje intuitivo de alto-nivel
Un gran manejo de matrices MATLAB (Matrix
Laboratory)

Programacin:
Interfaz de Comandos interactivo
Conjunto de comandos en un fichero .m (Script)
Conjunto de comandos encapsulado en una
funcin en un fichero .m
5

Vectores MATLAB
vector columna
1

a = 2
3

Matrices MATLAB

En general en MATLAB los arrays


no tienen una dimensin fija

>> a = []
Vectores fila

>> a(0)
a = {1 2 3}
>>a=[1;2;3];
??? Index into matrix is negative or zero.
>>a
>>a=[1,2,3];
a=
>>a
1
a=
2
1 2 3
3
Coma para separar columnas
Punto y coma para separar
lneas

Todas las variables estn almacenadas en 64 bit


No distingue entre variables reales y enteras
En Matlab A a
Los nombres tienen que empezar por una letra no obstante
se puede usar adems de letras nombres y smbolos
Todo el clculo se hace en doble precisin format puede ser
usado para cambiarlo.
Un ; al final de la lnea no muestra el resultado de la
operacin
Permite la definicin de variables globales y locales
Lista de variables who, Borrarlas clear, ms informacin
6
whos

>> a(0)

Contenido
>>a(2,3)
ans =
1.0000 + 5.0000i 2.0000
3.0000
66.0000
1 2 3 4.0000
5.0000
a=

Asignacin
4 5 6
>> a(3,3)
(3 3)
>>a(2,2)=9;
>>a=[1,2,3;4,5,6];
??? Index exceeds
>>a matrix dimensions.
>>a
a=
a=
1 2 3
1 2 3
4 9 6
4 5 6
Resultado?
>>a(3,3); a(1,1)=1+i*5;

a=
matriz bi-dimensional

Cadenas de caracteres MATLAB

Variables complejas MATLAB


Las variables i o j se usan tpicamente para representar una
variable compleja; a menos que se hayan usado previamente

string
Texto entre dos simples comillas.
La variable se almacena como una cadena
d caracteres:
de
t

Qu pasa en el caso ?

>>i=3;
>>i
3
>> z=23+i*56;
>>z
z=

>>cadena=hola mundo;
>> cadena(1:4)
ans =
hola

>> real(z)

Arrays Multi-dimensionales MATLAB


En general, en Matlab se suele trabajar con arrays de 1 y
2 dimensiones. No obstante, se pueden definir array de
ms de 2 dimensiones.
Se pueden construir de diferentes maneras:
extensin:
a = [5 7 8 ; 0 1 9 ; 4 3 6];
a(:,:,2) = [ 1 0 4 ; 3 5 6; 9 8 7]
extensin escalar
a(:,:,3) =3

a(1,1,3) ??? a[:,:,4]=[1 1] ???

11

Qu pasa en el caso ?

>>a=sqrt(-1);
>>
t( 1)
>>z=23+a*56;
>>z
z=
y= x

>> imag(z)

Para x < 0, y es compleja. Matlab asume la introduccin de un


nmero complejo. Si no es el caso hay que pasar por una
10
comprobacin.

Cells Multi-dimensional
Cell array son similares a los arrays
multidimensionales pero los elementos
de los cells array pueden tener diferentes
tipos.
a=cell(1,3);
a{1,1} = [ 1 2 ; 4 5];
a{1,2} = Name;
a{1,3} = 2-4i;
12

Operadores I - MATLAB
Operadores bsicos
Suma
+
potencia
^
resta
multiplicacin
*
divisin
divisin derecha
/
divisin izquierda \
>>c=3;b=4;
>>c1=c/b; c1=0.75
>>c2=c\b; c2=1.3333
Transpuesta

C=A

Operadores II - MATLAB

>> a = [1 2]; 3/a


??? Error using ==> /
Matrix dimensions must agree.
divisin derecha
divisin izquierda

./
.\

>> a.^2; a^2; ?


>> 3/0
Warning: Divide by zero.
ans =
Inf
>> 0/0
Warning: Divide by zero.
ans =
NaN

13

if expression
statements1
else
statements2
end

a=5;b=5;
if (a+b) verdadero
if (a-b) falso

>> a = [1 2 3 4 5 0];
>> any(a) = 1;
>> all(a) = 1;

14

for index = start : [increment :] end


statements
end
index, start, increment, y end no tienen porque ser enteros

Matlab evalua las expression como Verdadero o


falso
falso equivale a cero
verdadero equivale a un numero no nulo
statements: cualquier comando valido de Matlab

>> s=1;
>> if(a<=5)&(b<=-5)
s=2;
end

== igual a
< Inferior a
> Superior a
<= Inferior o igual
>= Superior o igual
~= diferente

Operadores logicos
& and
| or
~ Not
any True if any element of
vector is nonzero
all True if all elements of
vector are nonzero

Control de Flujo - MATLAB for

Control de Flujo - MATLAB if


if expression
statements
end

Operadores condicionales

increment es opcional, si no se especifica el increment, el


valor 1 se toma por defecto

El valor de index puede aumentar (increment > 0)


disminuir (increment < 0)
Los bucles finalizan cuando index > end (o index < end)
15

16

Control de Flujo MATLAB for/while


F = [];
for j=1:100
if j<=10
F(j) = j;
else
break
end
end

Control de Flujo MATLAB switch


switch valor
case 1

case 2
.
case 3
.
.
otherwise
.
end

G = [];
j=1;
while(j<=10)
(j) = j;
G(j)
j=j+1;
end

BREAK termina la ejecucin del bucle FOR y el WHILE.


En bucles anidados, BREAK sale de el bucle interno =>
RETURN

Despus de cada CASE se hace automticamente un BREAK.


17

Funciones - MATLAB

18

Script y Funciones - Matlab

Funciones matemticas comunes


Es
sin,
acos, conocer
log10, todos
exp los ficheros .m
imposible
Bsicas
que ofrece Matlab
norm
Help,
max
, min
ihelpwin, help browser and
http://www.mathworks.com/
sum
Avanzadas
Se puede crear su propia funcin
descomposicin Q-R : qr
m-files
Valores propios: eig
Etc. Script
19

Script M-files:
No acepta argumentos de entrada y de salida
Maneja los datos del workspace
Ventajoso para automatizar una serie de etapas

Funcin M-files
Acepta argumento(s) de entrada y devuelve salida(s)
Las variables internas son, por defecto, locales a la
funcin; pero pueden ser declaras globales
Ventajoso para extender codigos

20

script

Funcin I - Matlab
Coleccin de comandos que juntos representan una funcin
Permiten multi-entrada/multi-salida y cero salida

Salida entre
corchetes, [ ]

function [A] = inversa(B)


>> nargin('inversa')
% Esta funcion retorna la inversa de B.
% cuando B es cuadrada y de rango max.
[[m,n]
, ] = size(B);
( );
ans =
if (m ~= n)
% help
Mostrar
mensaje y abortar funcion.
>>
inversa
1
error(la matriz debe ser cuadrada')
Entradas entre
elseif (rank(B) ~=n)
parntesis, ( )
%
funcion
retorna
la funcion.
inversa
de
B.
%Esta
Mostrar
mensaje
y abortar
>> nargout('inversa')
error('B debe
rango maximo')
% cuando
B estener
cuadrada
y de rango max.
else
DEMO
ans
= == inversa.m
disp (la inversa de la matriz es: ')
A = inv(B)
1
end
21

>> clear all


coleccin de comandos>>
que
Matlab
ejecuta
load
results.mat
clear all
>> who
clc
format short
Your variables are:
B = [1 2 ; 3 4];
A
fun = input('inversa=1 or inv=2: ')
>> A
switch fun
A=
case 1
-2.0000 1.0000
disp('Esta es nuestra funcion de inversa')
1.5000 -0.5000
A = inversa(B)
case 2
disp('Esta es la funcion de matlab')
A = inv(B)
otherwise
DEMO == callinversa.m
disp('you must choose between "inv" and "inversa" ')
end
22
save results.mat A

Debugger de Matlab

Entrada/Salida
I/O: parecido al lenguaje C
fopen,
fclose,
fread (binary),
fwrite (binary)
(binary),
fscanf (formatted read),
fprintf (format write),
fgetl (read line),
fgets (read line keep new line character)
sscanf (string read),
sprintf (string write)

Matlab diferencia entre funciones y scripts con las


palabras function y return relacionados con la funcin
El nombre de la funcin y del fichero deben en
principio ser los mismos

ambos, script y funcin tienen la misma


extensin *.m
23

24

Ejemplo-0: creacin de
matrices

Clculo Simblico
Clculo Derivadas
% Symbolic variable
x=sym('x')
f=1/(5+4*cos(x))
ezplot(f)
% First Derivative
f1=diff(f)
% Second Derivative
f2=diff(f,2)
i1=int(f1)
ezplot(i1)

lgebra Simblica
% Generate a possibly familiar test matrix,
the 5-by-5 Hilbert matrix.
H = sym(hilb(5))
d=det(H)
X = inv(H)
% Verify that the inverse is correct.
I = X*H
% Find the characteristic polynomial.
p = poly(H)
digits(50)
e = eig(vpa(H))

Crear una matriz A de tamao 3*3 donde


todos los elementos sean iguales a cero
Asignar a todos los elementos de la fila 1
un valor de 1 y guardarla como C
Crear otra matriz B = matriz identidad de 3

25

Ejemplo-1: sum de matrices

26

Ejemplo-2: Plotting
Crear un vector de tiempo t empezando de cero
hasta 10 con un intervalo de tiempo de 1.
Crear dos vectores x y z
x = sin(t),
i (t)
z = cos(t)
2-D vectores: plot(t, z)
3-D: plot3(t, x, z)(curva en el espacio)
utilizar un script

Crear un funcin m-file para sumar dos


matrices
si A y B son del mismo tamao,
C(j,k)=A(j,k)+B(j,k)
si A es un escalar, C(j,k)=A+B(j,k)
no olvide de manejar las excepciones

suma A y B
27

28

Algunos ejemplos de clculo


numrico

Resolucin de un sistema de
ecuaciones lineales

Resolucin de sistemas lineales


Ajuste Polinmico
Interpolacin
Integracin Numrica
Optimizacin

Ax = y

3 2
A=

1 1

1
y=
1

A = [3 2; 1 -1];
y = [[-11 1]
1]';;
x = inv(A)*y
x=
0.2000
-0.8000

29

30

Ajuste polinmico
p = 2 x3 + x 2 + 4 x + 5

t = 1:0.1:10; x = sin(t);
y = polyfit(t,x,6)
j= 1;
for i = 1:0.1:10
x2(j)=polyval(y,i);
j = j+1;
end
plot(x) , hold on, plot(x2,'or')
grid on, title('Interpolation')

Interpolacin

p = [2 1 4 5];
x = 1;
y = polyval(p,x);

31

X = [0.0 0.25 0.5 0.75 1.0]';


Y = [0.91 0.81 0.69 0.55 0.40]';
y = [0
[0.9
90
0.7
70
0.6
60
0.5]
5]';;
x = interp1(Y,X,y,'linear')
plot(X,Y,'-sb'), hold on, plot(x,y,'-ok'),
grid on
32

Ecuaciones diferenciales

Optimizacin

La funcin ode45 est basada en el mtodo de Runge-Kutta (4,5)


explcito de Matlab
Es capaz de resolver numricamente un conjunto de ecuaciones
diferenciales de primer orden

Minimizacin sin restricciones para resolver un


problema bi-dimensional : min_unc.m

min (e )(4 x
x1

[[T,Y]] = ode45(rigid,TSPAN,Y0,options)
( g
p
)
TSPAN = [T0 TFINAL]
condiciones inicialesY0

2
1

+ 2 x22 + 4 x1x2 + 2 x2 + 1)

function dy = rigid(t,y)
dy = zeros(3,1);
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);

Minimizacin con restricciones. Unas desigualdades


han sido agregadas al problema anterior: min_con.m

1.5 + x1x2 x1 x2 < 0


x1x2 10 < 0

options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);


33

MATLAB

34

Exporting to figures

History
MATLAB was originally written to provide easy
access to matrix software developed by the
projects.
j
LINPACK and EISPACK p
First version was released 1984.
Current version is version 6 (specifally 6.5 is
available on all platforms)
Interactive system whose basic data element is an
array that does not require dimensioning
UNIX, PC and Mac versions. Similar but
differences.
35

print -dpsc2 myFig.ps


Prints current figure window as level 2
postscript
p
p file
Ready for use in LaTeX: \epsfig{}
Other possibilities: -dpng, -dtiff, -djpeg
See with !gv myFig.ps

Output jpegs -> mpeg_encode ->


portable movie
36

You might also like