Programación en MatLab
Programación en MatLab
Programación en MatLab
MatLab
Ing. Luis Ricardo Soto, MSc.
MATLAB
MATLAB es el nombre abreviado de MATrix
LABoratory. MATLAB es un programa para
realizar clculos numricos con vectores y
matrices. Como caso particular puede
tambin trabajar con nmeros escalares
tanto reales como complejos, con cadenas de
caracteres y con otras estructuras de
informacin ms complejas. Una de las
capacidades ms atractivas es la de realizar
una amplia variedad de grficos en dos y
tres dimensiones. MATLAB tiene tambin un
lenguaje de programacin propio.
Interfaz de Matlab
Interfaz de Matlab
Ventana de comandos (Command Window)
Ventana histrica de comandos (Command
History)
Espacio de trabajo (Workspace)
El directorio actual (Current Directory)
El editor de ficheros y depurador de errores
(Editor&Debugger)
El editor de vectores y matrices (Array
Editor)
La ventana de ayuda (Help)
Funcionamiento de
Matlab
Guardar archivos
Ventana de comandos
Archivo de texto
Funcin: diary
Espacio de trabajo:
Archivo .mat (variables)
Funcin: save
Funcionamiento de
Matlab
Funcionamiento de
Matlab
Funcionamiento de
Matlab
Variable: es la etiqueta que identifica una porcin de
memoria
Matlab diferencia entre maysculas y minsculas
Para ver las variables definidas en
determinado se teclea:
>> who
o bien
>> whos
Para eliminar alguna variable se ejecuta
>> clear variable1 variable2
un
instante
Funcionamiento de
Matlab
>>
>>
>>
>>
>>
format
format
format
format
format
i = (-1)
pi =
Inf =
NaN = clculos
indefinidos
eps = exactitud rel. de coma flotante 2.2204e-016
realmin = lmite inferior 2^(-1022) 2.2251e-308
realmax = lmite superior 2^1024 1.7977e+308
Funcionamiento de
Matlab
Funciones: nombre(argumento)
Funcionamiento de
Matlab
Funcionamiento de
Matlab
Funcionamiento de
Matlab
Funcionamiento de
Matlab
Vectores y Matrices
Las matrices son el tipo fundamental de dato en
Matlab.
Los escalares se guardan como una matriz de 1x1
A=[1 3 5; 6 9 2; 4 8 7]
A =
1
6
4
3
9
8
5
2
7
Vectores y Matrices
Los vectores pueden ser vectores fila o
vectores columna
Vectores fila; los elementos de una misma
fila estn separados por blancos o comas,
>> v =[2 3 4]
Vectores columna: los elementos de una
misma columna estn separados por Intro o
por caracteres punto y coma (;).
>> w =[2;3;4;7;9;8]
La dimensin de un vector se obtiene por el
comando length(nombre del vector)
Vectores y Matrices
Generacin de vectores:
Operador (:) colon
Con
componentes
logartmicamente
espaciadas logspace(a,b,n) genera un vector
fila de n puntos logartmicamente espaciados
entre 10a y 10b. Si se omite el valor de n se
toma 50.
Vectores y Matrices
Operaciones con escalares:
v+k adicin o suma
v-k sustraccin o resta
v*k multiplicacin
v/k divide por k cada elemento de v
k./v divide k por cada elemento de v
v.^k potenciacin cada componente de v
esta elevado a k
k.^v
potenciacin
k
elevado
cada
componente de v
Vectores y Matrices
Operaciones entre vectores:
v+w adicin o suma
v-w sustraccin o resta
v.*w multiplicacin cada elemento de v por el
correspondiente de w
v./w divide cada elemento de v por el
correspondiente de w
v.^w potenciacin cada componente de v
esta elevado al correspondiente de w
Vectores y Matrices
Ejemplo: Clculo de errores relativos
Supongamos que para resolver una ecuacin
diferencial ordinaria hemos utilizado:
Un mtodo analtico mediante el cual sabemos que
su solucin en el intervalo [0,1] es y(x)=x 2+cos(x).
Un mtodo numrico para aproximar la solucin en
el intervalo [0,1] con parmetro de discretizacin 0.2
ngulo
(radianes)
Solucin
aproximada
1.0030
0.2
1.0234
0.4
1.0825
0.6
1.1869
0.8
1.3342
1.5415
Solucin exacta
y(x)=x2+cos(x)
%Error
Vectores y Matrices
Para definir una matriz no hace falta establecer
de antemano su tamao (de hecho, se puede
definir un tamao y cambiarlo posteriormente).
MATLAB determina el nmero de filas y de
columnas en funcin del nmero de elementos
que se proporcionan (o se utilizan).
Las matrices se definen por filas; los
elementos de una misma fila estn separados por
blancos o comas, mientras que las filas estn
separadas por pulsaciones intro o por caracteres
punto y coma (;). Por ejemplo, elsiguiente
comando define una matriz A de dimensin (3x3):
A=[1 2 3; 4 5 6; 7 8 9]
Vectores y Matrices
Operadores matriciales:
+ adicin o suma
sustraccin o resta
* multiplicacin
' transpuesta o transpuesta conjugada
^ potenciacin
\ divisin-izquierda
/ divisin-derecha
.* producto elemento a elemento
./ y .\ divisin elemento a elemento
.^ elevar a una potencia elemento a elemento
Vectores y Matrices
En MATLAB se accede a los elementos de un
vector poniendo el subndice entre parntesis (por
ejemplo x(3) x(i)).
Los elementos de las matrices se acceden
poniendo los dos subndices entre parntesis,
separados por una coma (por ejemplo A(1,2)
A(i,j)).
Las matrices se almacenan por columnas
(aunque se introduzcan por filas), y teniendo en
cuenta esto puede accederse a cualquier elemento
de una matriz con un slo subndice. Por ejemplo,
si A es una matriz (3x3) se obtiene el mismo valor
escribiendo A(1,2) que escribiendo A(4).
Vectores y Matrices
Manipulacin de matrices:
Operador (:) colon
Referencia a un elemento A(i,j) o A(k)
Referencia a una fila A(i,:)
Referencia a una columna A(:,j)
Referencia a una matriz bidimensional A(:,:)
Referencia a un vector A(:)
Matriz vaca []
Eliminar filas A(i,:)=[]
Eliminar columnas A(:,j)=[]
Vectores y Matrices
Generacin de matrices:
Generacin de una matriz de ceros, zeros(n,m)
Generacin de una matriz de unos, ones(n,m)
Generacin de una matriz identidad eye(n,m)
Generacin de una matriz de elementos
aleatorios rand(n,m)
Matrices con diagonal dada diag(v), diag(v,k)
magic(n)pascal(n)
Vectores y Matrices
Desde la versin 5 de matlab se admiten
variables subindicadas multidimensionalmente
a=ones(2,2,3)
Funcin cat
Vectores y Matrices
Ejemplo: Tomemos la siguiente matriz
12
7
0
3
0
0
0
0
0
13
11
8
0
Vectores y Matrices
m=[12,-4,7,3,-8,-13,11,2,7,-4];
f=[1,1,2,2,2,4,4,5,5,5];
c=[1,2,1,2,5,3,4,3,4,5];
a=sparse(f,c,m,5,5)
full(a)
m1=[12,7,-4,3,-13,2,11,7,-8,-4];
f1=[1,2,1,2,4,5,4,5,2,5];
c1=[1,1,2,2,3,3,4,4,5,5];
b=sparse(f1,c1,m1,5,5)
full(b)
s=a+b
Vectores y Matrices
Caractersticas generales de las funciones de
MATLAB
El concepto de funcin en MATLAB es semejante al de
C y al de otros lenguajes de programacin, aunque con
algunas diferencias importantes. Al igual que en C, una
funcin tiene nombre, valor de retorno y argumentos.
Una funcin se llama utilizando su nombre en una
expresin o utilizndolo como un comando ms. Las
funciones se pueden definir en ficheros de texto *.m
en la forma que se ver ms adelante. Considrense
los siguientes ejemplos de llamada a funciones:
>> [maximo, posmax] = max(x);
>> r = sqrt(x^2+y^2) + eps;
>> a = cos(alfa) - sin(alfa);
Vectores y Matrices
Los nombres de las funciones de MATLAB no son
palabras reservadas del lenguaje. Es posible crear
una variable llamada sin o cos, que ocultan las
funciones correspondientes.
Vectores y Matrices
Funciones que actan sobre vectores y matrices
sum(v) suma
prod(v) producto
v' transposicin de vectores (filas x columnas)
dot(v,w) producto escalar de vectores
cross(v,w) producto vectorial de vectores
[y,k]=max(v) valor mximo de las componentes de un
vector k indica la posicin, lo mismo para min(v) valor
mnimo
Funciones
matriciales
especiales
sqrtm(A),
expm(A),logm(A)
Vectores y Matrices
Ejercicio 2.1 Dados los vectores definidos por
x=(1,4.5,7.8) y=(sen(90),cos(45),0)
Realizar los clculos siguientes:
x+y; el producto escalar de x e y; calcular el ngulo
que forman ambos vectores.
Ejercicio 2.2 Dadas las matrices a y b calcular:
a 2 3 4
4 2 5
b 2 0
4
1 2 5
Vectores y Matrices
Polinomios
Los polinomios se representan en MatLab por un vector
fila de dimensin n+1 siendo n el grado del polinomio.
Dado un polinomio
x3+2x
se representa por
>> pol1=[1 0 2 0]
para el clculo de las races de un polinomio
existe el comando roots.
>>raices=roots(pol1)
da un vector columna, aunque pol1 es un vector
fila
Vectores y Matrices
Un polinomio puede ser reconstruido a partir de sus
races con el comando poly
Ejemplo 1:
pol2=[2 4 0 1];
% definicin del polinomio 2x3+4x2+1
raices=roots(pol2)
% clculo de sus races
pol2_n=poly(raices)
% reconstruccin del polinomio
real(pol2_n)
% qu pas?
Vectores y Matrices
Ejemplo 2:
A=[1 2 3 ; 2 3 4; 4 2 5]; p=poly(A)
% pol.
caracterstico
roots(p)
% autovalores de A
Para calcular el valor de un polinomio p en un punto
dado x basta con utilizar el comando polyval
>>y=polyval(p,x)
Ejemplo 3:
p=[1 -1 -1 1]
% definicin del polinomio x3-x2-x+1
polyval(p,2)
Ejemplo 4:
x=-2:0.1:2;
Y=polyval(p,x);
Vectores y Matrices
Para multiplicar y dividir polinomios tenemos los
comandos especiales conv(p1,p2) y deconv(p1,p2)
Para conocer el resto de la divisin de polinomios basta
con poner
>>[p4,r] = deconv(p3,p2)
p2 debe tener races reales
Ejemplo 5:
p1=[1, -2, 1]; p2=[1,1]; p3=conv(p1,p2)
p4=deconv(p3,p2)
[p4,r]=deconv(p3,p2) % resto de la divisin
Vectores y Matrices
El comando residue, permite el clculo del desarrollo en
suma de fracciones simples del cociente p1/p2.
El formato del comando es: >>[r,p,k] =residue(p1,p2)
donde:
r= vector columna con los numeradores
p= vector columna con las raices del denominador
p1( x )
r (1)
r (n )
k(x)
p2( x ) x p(1)
x p(n )
>>[p1,p2]=residue(r,p,k) hace la operacin inversa
Vectores y Matrices
Ejemplo 6:
Descomponer en fracciones simples el cociente
x3 x2 1
3
2
x 3x 4
p1=[1 1 0 1]
p2=[1 -3 0 4]
[r,p,k]=residue(p1,p2)
rats(r)
[pol1,pol2]=residue(r,p,k)
x3 x2 1
35
13
1
1
3
2
2
x 3 x 4 9( x 2) 3( x 2)
9( x 1)
Vectores y Matrices
Para calcular la derivada de un polinomio tenemos el
comando,
>>polyder(p)
Para encontrar la integral se usa:
>>polyint(p)
>>polyint(p,k)
Ejemplo 7:
Dado el polinomio x3+6x2+1 encontrar su derivada y
luego integrar
p=[1, 6,0,1]
d=polyder(p)
i=polyint(d)
i=polyint(d,1)
Vectores y Matrices
Ejercicio 3.1 Consideremos el polinomio p(x)=x-1. Calcular
p(x)3 e identificar el polinomio obtenido y calcular sus
races.
Ejercicio 3.2 Segn Hill y Lounasmaa, la ecuacin de la
curva de inversin del helio es:
Grficos en 2 y 3
dimensiones
Grficos en 2 y 3
dimensiones
Grficos en 2 y 3
dimensiones
Grficos en 2 y 3
dimensiones
Grficos en 2 y 3
dimensiones
text(x,y,'texto') introduce 'texto' en el lugar especificado
Grficos en 2 y 3
dimensiones
Grficos en 2 y 3
dimensiones
0
.
4
f1=(2*teta-cos(2*teta))/2;
2
f2=0.4*ones(size(f1));
plot(teta,f1,'g--',teta,f2,'r')
axis square
xlabel('Angulo (radianes)')
gtext('2x-cos(2x))/2')
text(0.2,0.43,'y=0.4')
[teta0,y0]=ginput(1)
title(['Raiz aproximada=',num2str(teta0)])
Grficos en 2 y 3
dimensiones
Grficos en 2 y 3
dimensiones
Grficos en 2 y 3
dimensiones
Grficos en 2 y 3
dimensiones
Grficos en 2 y 3
dimensiones
Funcin Subplot
Una ventana grfica se puede dividir en m
particiones horizontales y n verticales, con objeto
de representar mltiples grficos en ella. Cada
una de estas subventanas tiene sus propios ejes,
aunque otras propiedades son comunes a toda la
figura. La forma general de este comando es:
subplot(m,n,i) donde m y n son el nmero de
subdivisiones en filas y columnas, e i es la
subdivisin que se convierte en activa. Las
subdivisiones se numeran consecutivamente
empezando por las de la primera fila, siguiendo
por las de la segunda, etc.
Grficos en 2 y 3
dimensiones
Grficos en 2 y 3
dimensiones
Grficos en 2 y 3
dimensiones
Ejemplo 7:
subplot(121)
f='sin(x)-2*cos(2*x)';
fplot(f,[0 2*pi])
legend('sen(x)-2cos(2x)')
subplot(122)
fplot('sin',[0 4*pi],'r')
legend('sen(x)')
Grficos en 2 y 3
dimensiones
Representacin de polgonos
fill(x,y,c)
Si
c
es
un
carcter
de
color
('r','g','b','c','m','y','w','k'), o un vector de valores [r g
b], el polgono se rellena de modo uniforme con el
color especificado.
Ejemplo 8:
x=[1,2,1,0];
y=[0,1,2,1];
fill(x,y, 'r')
axis square
title('rombo')
Grficos en 2 y 3
dimensiones
Grficos en 2 y 3
dimensiones
GRFICOS: 2D Y 3D______________________________
Ejercicio 5.1: Consideremos la ecuacin de Van
der Waals. Se considera el benceno para el cual
a=18.78 atml2/mol2, b=0.1208 l/mol. Representar
sobre una misma grfica las dos subgrficas
correspondientes a:
Isotermas de 100, 200, 300 y 400 C
Isobaras de 25, 35, 45 y 55 atm
Cada curva debe ir con trazo diferenciado, con el
texto que indique la isolnea que se ha
representado, as como el ttulo de la grfica y la
etiqueta de los ejes. R=0.0821 y V=2:100
a
(P 2 )(V b ) RT
V
GRFICOS: 2D Y 3D______________________________
a=18.78;
b=0.1208;
R=0.0821;
subplot(1,2,1)
T=373:100:673;
V=2:100;
fac1=R./(V-b);
fac2=a./V.^2;
P=zeros(4,length(V));
P(1,:)=T(1)*fac1-fac2;
P(2,:)=T(2)*fac1-fac2;
P(3,:)=T(3)*fac1-fac2;
P(4,:)=T(4)*fac1-fac2;
plot(V,P(1,:),'-',V,P(2,:),'--',V,P(3,:),':',V,P(4,:),'-.')
title('Ecuacion de Van der Waals: Isotermas')
xlabel('Volumen, ltr.')
ylabel('Presion, atm.')
axis([0, 50,0,15])
legend('T=100C','T=200C','T=300C','T=400C')
GRFICOS: 2D Y 3D______________________________
subplot(1,2,2)
P=25:10:55;
T=zeros(4,length(V));
fac1=(V-b)/R;
T(1,:)=((P(1)+fac2).*fac1)-273.15;
T(2,:)=((P(2)+fac2).*fac1)-273.15;
T(3,:)=((P(3)+fac2).*fac1)-273.15;
T(4,:)=((P(4)+fac2).*fac1)-273.15;
plot(V,T(1,:),'-',V,T(2,:),'--',V,T(3,:),':',V,T(4,:),'-.')
title('Ecuacion de Van der Waals: Isobaras')
xlabel('Volumen, ltr.')
ylabel('Temperatura, C')
legend('P=25 atm.','P=35 atm.','P=45 atm.','P=55
atm.')
GRFICOS: 2D Y 3D______________________________
Grficos en 2 y 3
dimensiones
La funcin plot3 es
bidimensional plot.
plot3(x,y,z)
Ejemplo 9:
teta=0:pi/80:8*pi;
x=1+2*cos(teta);
y=1+2*sin(teta);
z=4*teta;
plot3(x,y,z)
axis([-1 3 -1 3 0 120]);
xlabel('eje x')
ylabel('eje y')
zlabel('eje z')
anloga
su
homloga
Grficos en 2 y 3
dimensiones
Representacin grfica de superficies
mesh(X,Y,Z)
Creacin de una malla [X, Y]=meshgrid(x,y)
mesh(X,Y,Z) grfica de la malla construida sobre la
superficie Z
meshz(X,Y,Z) adems hace una proyeccin sobre el
plano Z=0
meshc(X,Y,Z) adems crea lneas de contorno en el plano
Z=0
hidden off desactiva le eliminacin de lneas escondidas
hidden on situacin previa
Grficos en 2 y 3
dimensiones
Ejemplo 10:
x=[0:2:200];
y=[0:50];
[X Y]=meshgrid(x,y);
length(x),length(y)
size(X), size(Y)
Z=X.^2-Y.^2;
figure(1);mesh(X,Y,Z)
figure(2);meshz(X,Y,Z)
figure(3);meshc(X,Y,Z)
Grficos en 2 y 3
dimensiones
Grficos en 2 y 3
dimensiones
La funcin surf y pcolor tiene diversas posibilidades
referentes a la forma en que son representadas las
facetas o polgonos coloreados (shading) . Las tres
posibilidades son las siguientes:
Grficos en 2 y 3
dimensiones
colormap(mapa de colores) distintas
escalas
de
colores
colorbar() barra con la escala de colores.
[X,Y,Z]=peaks(n) funcin de ejemplo de dos variables
[X,Y,Z]=sphere(n) dibuja una representacin de la
esfera unidad con n puntos de discretizacin
[X,Y,Z]=cylinder(rad,n) dibuja una representacin de
un cilindro unidad con n puntos igualmente espaciados
cuya seccin viene dada por la curva cuyos radios se
guardan en el vector rad. (1,1) y 20 valores por
defecto.
fill3(x,y,z,c) polgonos tridimensionales
Grficos en 2 y 3
dimensiones
GRFICOS: 2D Y 3D______________________________
Ejercicio 5.2 Representar la
revolucin obtenida al girar la
alrededor del eje x (x=0:0.1:1)
superficie de
curva y=x2+1
x=0:0.1:1;
%puntos de discretizacion del eje x
rad=x.^2+1;
%vector de radios
n=length(rad);
%numero de radios
cylinder(rad,n)
%representacion del cilindro
[X,Y,Z]=cylinder(rad,n);
h=surf(X,Y,Z);
%manejador del objeto
rotate(h,[0,1,0],90)
xlabel('eje x')
ylabel('eje y')
zlabel('eje z')
view(15,15)
%cambiamos el punto de
observacion
grid of
axis([-1 1 -2 2 -1.5 2.5])
legend('f(x)=x^2+1')
GRFICOS: 2D Y 3D______________________________
ToolBox de Matemtica
Simblica
Hasta ahora hemos aprendido a usar MATLAB como una
calculadora de gama alta, programable, capaz de realizar
y manipular grficos, pero an la calculadora ms
potente tiene sus limitaciones, slo manipulan nmeros.
El MATLAB bsico debe tener nmeros con los que
trabajar, o variables a las que se les a asignado un valor
numrico, por ejemplo, no podemos preguntar a MATLAB
por el seno de una variable a la que no se le a asignado
valor previamente.
Ahora estudiaremos como conseguir que MATLAB
manipule expresiones de este tipo (expresiones
simblicas), formadas por smbolos matemticos y no
solamente nmeros.
Programacin en Matlab
Comandos de entrada salida
Programacin en Matlab
Sentencia if
Bifurcacin mltiple
if condicin1
if condicin
sentencias
end
bloque1
elseif condicin2
bloque2
elseif condicin3
bloque3
else
bloque4
end
Programacin en Matlab
Sentencia switch
switch switch_expresion
case case_expr1,
El resultado debe
ser un escalar o un
string
bloque1
case {case_expr2, case_expr3, ...}
bloque2
...
otherwise,
bloque3
end
Programacin en Matlab
Sentencia for
for i = 1:n
sentencias
end
for i =
vectorValores
sentencias
end
for i = 1:m
for i = n:-0.2:1
for j = 1:n
sentencias
end
sentencias
end
end
Programacin en Matlab
Sentencia
while
while
condicin
sentencias
end
Sentencia break
Hace que se termine la
ejecucin del bucle for o
while
Sentencia continue
Hace que se pase
inmediatamente a la
sgte. iteracin del bucle
for o while
Programacin en
Matlab
Operadores relacionales y lgicos
Programacin en
Matlab
all(x): Si es un vector devuelve un 1 si todas sus
Programacin en Matlab
Todos los ficheros de comandos Matlab deben de
llevar la extensin .m hay 2 tipos:
Ficheros de funcin (function) la primera lnea es
ejecutable y comienza con la palabra function
Ficheros de programa (script) no constituyen
funciones y se construye mediante una secuencia
de comandos se ejecuta tecleando el nombre sin
extensin.
Programacin en Matlab
El archivo tipo script solo puede ejecutarse a continuacin
del >> de Matlab o como una lnea de otro fichero, una
funcin puede ser llamada desde cualquier expresin.
El script no admite argumentos de entrada, simplemente
trabaja con datos existentes en el espacio de trabajo.
Las variables de una funcin son locales de la funcin y
las de un script son globales.
Si queremos que una variable sea compartida por varias
funciones a de definirse en todas ellas como global.
global variable1 variable2 variable3
Programacin en Matlab
Programacin de funciones
La primera lnea es ejecutable y empieza por la palabra
function de la forma:
function arg_salida=nombre_funcion(arg_entrada)
Despus cuantos comandos sean necesarios incluidos
comentarios como si se tratase de un fichero tipo script. El
fichero se debe guardar con nombre_funcion.m
Para devolver el control al programa desde cualquier punto
de una funcin basta con escribir la sentencia return.
Programacin en Matlab
Ejemplo 1:
function temp_c=fconvert(temp_f)
% Archivo tipo Funcin
% Convierte F A C
temp_c=5/9*temp_f-5/9*32;
Ejemplo 2:
% Archivo tipo Script
% Convierte F A C
clear
temp_f=100
temp_c=5/9*temp_f-5/9*32
Programacin en Matlab
function t=gases(p,v,n)
%t=gases(p,v,n)
%Funcin que considera la ley de los gases ideales
%Argumentos de entrada:
%presin p (atmosferas)
%volumen v (litros)
%nmero de moles n
%Argumentos de salida:
%temperatura t (grados kelvin)
%R=0.0821 atm.litro/mol.grado
R=0.0821
t=p*v/(n*R);
Programacin en Matlab
Nmero de argumentos de la funcin
nargin devuelve el nmero de argumentos de entrada
con los que el usuario ha llamado a la funcin
nargout devuelve el nmero de argumentos de salida
con los que el usuario ha llamado a la funcin
nargchk chequea si el nmero de argumentos de
entrada calculados con nargin esta entre el valor
mximo y mnimo previsto, si no da error.
nargchk(mnimo, mximo, nmero_entrada)
Programacin en
Matlab
Tcnicas para mejorar el desempeo
Vectorizar lazos
Calcular 1001 valores en el rango de 0 10:
i = 0;
for t = 0:0.01:10
i = i + 1;
y(i) = sin(t);
end
Versin vectorizada:
t = 0:0.01:10;
y = sin(t);
Programacin en
Matlab
Preasignar arreglos
Sin preasignacin
x = 0;
for k = 2:1000
x(k) = x(k-1) + 5;
end
Con preasignacin
x = zeros(1, 1000);
for k = 2:1000
x(k) = x(k-1) + 5;
end