Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROGRAMACIN DE
MATLAB
2010
Dante Pinto Jeria
2
Dante Pinto Jeria
CAPTULO I
PRIMEROS PASOS CON MATLAB
1.1 INTRODUCCIN.-
El nombre del programa Matlab viene de Matrix Laboratory (Laboratorio de Matrices),
para Matlab todos los objetos son considerados como matrices.
Este programa es una herramienta de clculo, fundamentalmente, numrico. Aunque
tambin puede realizar clculos simblicos.
Donde se presentan:
3
Dante Pinto Jeria
Se debe quitar la marca de Use system colors, luego en Text se selecciona el color blanco y
en Background. Luego se hace clic en Apply y luego en OK.
ans =
3420
>> 2+3
ans =
Si es que no se quisiera mostrar los resultados, se debe poner un punto y coma al final de la
lnea.
>> 78/3;
>>
El resultado es almacenado internamente, pero no se lo muestra por pantalla. Esto es muy
til cuando no queremos que se muestren resultados intermedios, o que se llene la pantalla
con nmeros que son irrelevantes.
4
Dante Pinto Jeria
ans =
0.4286
ans =
0.428571428571429
El resultado tiene ahora 15 decimales.
ans =
39/40
5
Dante Pinto Jeria
1.2.4 Ayuda.-
Se puede obtener ayuda sobre un comando o una funcin tecleando help seguido del
nombre del comando sobre el cual se desea la ayuda. Por ejemplo, si es que se quisiera
conseguir ayuda sobre el comando format.
1.2.5 Variables.-
Matlab puede almacenar valores en variables, al igual que cualquier otro lenguaje de
programacin, siempre y cuando el nombre de la variable no sea una palabra reservada de
Matlab. El programa discrimina entre maysculas y minsculas. Para asignar un valor a una
variable simplemente se teclea:
>> x=24
x=
24
Se pueden asignar tambin mltiples variables en una sola lnea, utilizando punto y comas
para separar las mismas.
>> y=34;z=24;g=21;
>>
Para ver las variables que se encuentran en el libro de trabajo actual se puede utilizar el
comando who
>> who
a ans g x y z
6
Dante Pinto Jeria
g 1x1 8 double
x 1x1 8 double
y 1x1 8 double
z 1x1 8 double
regresa el nombre de la variable, su tamao y el tipo de datos que almacena
Para abrir el espacio de trabajo, guardado con anterioridad, se utiliza File luego Open
7
Dante Pinto Jeria
CAPTULO II
MANEJO DE MATRICES
2.1 INTRODUCCIN.-
Una matriz es un arreglo rectangular de elementos. Un caso particular de matriz es un
vector, cuando tiene una sola dimensin. Puede haber vectores fila o vectores columna.
Una forma de introducir una matriz, en Matlab, es utilizando corchetes y dentro de ellos las
filas separadas por ; (punto y coma) y las columnas separadas por espacios.
a=
1 2 3
4 5 6
7 8 9
>> b=[-1:.5:1;-1:.5:1]
b=
-1.0000 -0.5000 0 0.5000 1.0000
-1.0000 -0.5000 0 0.5000 1.0000
Tambin se puede modificar un elemento de una matriz mediante los ndices de la siguiente
manera
>> b(2,1)=8
b=
-1.0000 -0.5000 0 0.5000 1.0000
8.0000 -0.5000 0 0.5000 1.0000
Tambin se puede acceder a un elemento de una matriz mediante un solo ndice que se
constituye en una referencia continua.
8
Dante Pinto Jeria
>> b(4)=15
b=
-1.0000 -0.5000 0 0.5000 1.0000
8.0000 15.0000 0 0.5000 1.0000
Matlab tiene incorporada una funcin de generacin de cuadrados mgicos, que no son otra
cosa que matrices cuadradas, que tienen la propiedad de que la suma de cada fila y cada
columna, asimismo que la suma de las diagonales dan un mismo nmero.
As por ejemplo:
>> magic(4)
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
Estos cuadrados mgicos tienen siglos de antigedad, un ejemplo muy conocido de ellos
aparece en el grabado del alemn Alberto Durero llamado Melancola I, el cual se lo puede
ver tambin en Matlab, tecleando:
>> load durer;image(X);colormap(map);axis image
9
Dante Pinto Jeria
En esta imagen aparece un cuadrado mgico en la esquina superior derecha. Para ver el
detalle del mismo se puede teclear:
>> load detail;colormap(hot);image(X)
Que es la misma matriz mgica que presenta Matlab, pero con las columnas centrales
intercambiadas, esto lo hizo Durero, para que aparezca en la parte inferior la fecha en la que
se realiz el grabado 1514.
10
Dante Pinto Jeria
De la matriz
>> a=magic(4)
a=
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
borrar la cuarta fila.
>> a(4,:)=[]
a=
16 2 3 13
5 11 10 8
9 7 6 12
Los dos puntos indican todo, lo que quiere decir que se hace referencia a toda la fila o a
toda la columna.
>> a=magic(5)
a=
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
11
Dante Pinto Jeria
>> a(3,6)=8
a=
17 24 1 8 15 0
23 5 7 14 16 0
4 6 13 20 22 8
10 12 19 21 3 0
11 18 25 2 9 0
Como se puede apreciar, los elementos faltantes son llenados con ceros.
12
Dante Pinto Jeria
Para sumar los elementos de la diagonal secundaria se utiliza el comando fliplr, que cambia
de izquierda a derecha las filas de una matriz.
>> sum(diag(fliplr(a)))
ans =
34
13
Dante Pinto Jeria
a=
1 2 3 4
5 6 7 8
9 10 11 12
a una matriz 6*2, se procede:
>> reshape(a,6,2)
ans =
1 3
5 7
9 11
2 4
6 8
10 12
ans =
1 2 1 2 1 2
2 3 2 3 2 3
1 2 1 2 1 2
2 3 2 3 2 3
14
Dante Pinto Jeria
ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
C(m*p)=A(m*n)*B(n*p)
15
Dante Pinto Jeria
>> a
a=
1 2 3
4 5 6
>> b
b=
7 8
9 10
11 12
>> a*b
ans =
58 64
139 154
A-1*A=A*A-1=I
Calcular la inversa de la siguiente matriz y comprobar el resultado.
>> a=magic(5)
a=
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> b=inv(a)
b=
-0.0049 0.0512 -0.0354 0.0012 0.0034
0.0431 -0.0373 -0.0046 0.0127 0.0015
-0.0303 0.0031 0.0031 0.0031 0.0364
0.0047 -0.0065 0.0108 0.0435 -0.0370
0.0028 0.0050 0.0415 -0.0450 0.0111
16
Dante Pinto Jeria
>> b*a
ans =
1.0000 -0.0000 0 -0.0000 0.0000
0.0000 1.0000 0 0.0000 0.0000
0 0.0000 1.0000 0.0000 0.0000
0.0000 0.0000 -0.0000 1.0000 0.0000
0.0000 0.0000 0.0000 0.0000 1.0000
>> det(a)
ans =
-360
>> rref(magic(3))
ans =
1 0 0
0 1 0
0 0 1
>> rank(magic(3))
ans =
3
>> min(magic(4))
ans =
4 2 3 1
18
Dante Pinto Jeria
>> min(min(magic(4)))
ans =
1
>> rand(2,3)
ans =
0.3816 0.7952 0.4898
0.7655 0.1869 0.4456
>> randn(3,4)
ans =
0.6277 -0.8637 -1.1135 -0.7697
1.0933 0.0774 -0.0068 0.3714
1.1093 -1.2141 1.5326 -0.2256
AX=B
Para resolver un sistema de ecuaciones lineales se pueden utilizar dos mtodos.
1) X= A-1 B
2) X=A\B
As, por ejemplo, resolver el sistema
19
Dante Pinto Jeria
x1-4 x2 + x3=10
3x1+3x2- 2x3=20
x1+6x2+3x3=30
de las tres formas, para ello primero se guardan los coeficientes n las variables A y B
>> A=[1 -4 1;3 3 -2;1 6 3];B=[10;20;30];
Primera forma
>> X=inv(A)*B
X=
9
1
5
Segunda forma
>> X=A\B
X=
9.0000
1.0000
5.0000
20
Dante Pinto Jeria
Tambin funciona con potencias, as por ejemplo, con la misma matriz a anterior
>> a.^2
ans =
1 4 9
16 25 36
49 64 81
Y=
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
21
Dante Pinto Jeria
22
Dante Pinto Jeria
Ahora si es que queremos importar a la variable b los datos de la hoja2 del archivo amgia
de Excel, anteriormente guardado, se procede:
>> b=xlsread('c:\magia.xlsx','Hoja2','C3:G7')
b=
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
Ejemplo2.2: Dada una matriz mgica de 5*5 sumar todos los elementos de las columnas
impares.
23
Dante Pinto Jeria
>> a=magic(5);
>> sum(sum(a(1:2:end,:)))
ans =
195
>> [m ind]=min(a(:,1:2:end))
m=
3 2 10
ind =
2 3 4
>> mean(a(3:3:end,:)')'
ans =
24
Dante Pinto Jeria
62.4444
50.7778
52.0000
>> find(a==max(max(a)))
ans =
50
25
Dante Pinto Jeria
CAPTULO III
GRFICOS
3.1 INTRODUCCIN.-
Matlab tiene muchas rutinas de alto nivel para grficas. En Matlab las variables
independientes no son generadas de manera automtica, sino que el usuario debe
generarlas.
Los grficos que genera Matlab pueden ser clasificados como en dos y tres dimensiones.
Si se desea mantener un grfico anterior y sobreponer un grfico posterior, se debe tecleat
el comando
>> hold on;
Se mantienen los grficos anteriores, hasta que se teclea
>>hold off;
Los colores y tipos de lnea vienen dados segn las siguientes tablas:
y amarillo
m magenta
c cyan
r rojo
g verde
b azul
w blanco
k negro
- Continua
-- Lnea cortada
-. Lnea y punto
* Estrellas
. Puntitos
s Cuadrados
26
Dante Pinto Jeria
o crculos
: Punteado
x Marca
+ Mas
^ Tringulo hacia arriba
v Tringulo hacia abajo
> Tringulo a la derecha
< Tringulo a la izquierda
d Diamante
p Pentagrama
h Hexagrama
Ejemplo3.1:
>> x=0:pi/100:3*pi;y=sin(x);
>> plot(x,y,'k-','LineWidth',2);
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 1 2 3 4 5 6 7 8 9 10
Ejemplo3.2:
>> plot(x,y,'r:','LineWidth',3);
27
Dante Pinto Jeria
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 1 2 3 4 5 6 7 8 9 10
Ejemplo3.3: Graficar el seno y el coseno, con una rejilla, con un ttulo, una leyenda, una
etiqueta en x y una en y
>> x=0:pi/100:3*pi;y1=sin(x);y2=cos(x);
>> plot(x,y1,'r-',x,y2,'b--');legend('seno','coseno');title('Dos grficas, de 0 a 2\pi');xlabel('Eje
X');ylabel('Eje Y');grid on;
Dos grficas, de 0 a 2
1
seno
0.8 coseno
0.6
0.4
0.2
Eje Y
-0.2
-0.4
-0.6
-0.8
-1
0 1 2 3 4 5 6 7 8 9 10
Eje X
Para que aparezca el smbolo se pone dentro de las comillas simples \pi
28
Dante Pinto Jeria
Ejemplo3.4: Graficar el logo que aparece en la cartula de este texto, cuya ecuacin es
r=sin(5t/8), con 0 t 16
29
Dante Pinto Jeria
-1
-2
-3
-4 -3 -2 -1 0 1 2 3 4
Ejemplo3.6: Realizar un grfico, modificando los ejes y las marcas de los ejes.
> x = -pi:.1:pi;
y = sin(x);
plot(x,y)
set(gca,'XTick',-pi:pi/2:pi)
set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})
1
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
-pi -pi/2 0 pi/2 pi
30
Dante Pinto Jeria
plotyy(X1,Y1,X2,Y2)
plotyy(X1,Y1,X2,Y2,funcin)
plotyy(X1,Y1,X2,Y2,'funcion1','funcion2')
[AX,H1,H2] = plotyy(...)
Ejemplo3.7:
x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');
200 0.8
150 0.6
100 0.4
50 0.2
0 0
-50 -0.2
-100 -0.4
-150 -0.6
-200 -0.8
0 2 4 6 8 10 12 14 16 18 20
150 0.6
100 0.4
50 0.2
0 0
-50 -0.2
-100 -0.4
-150 -0.6
-200 -0.8
31
0 2 4 6 8 10 12 14 16 18 20
Dante Pinto Jeria
8
10
6
10
4
10
2
10
0
10
0 1 2 3 4 5 6 7 8 9 10
32
Dante Pinto Jeria
Ejemplo3.10:
x = logspace(-1,2);
loglog(x,exp(x),'r-s','LineWidth',1);
grid on;
50
10
40
10
30
10
20
10
10
10
0
10
-1 0 1 2
10 10 10 10
33
Dante Pinto Jeria
90
1
120 60
0.8
0.6
150 30
0.4
0.2
180 0
210 330
240 300
270
3.2.6 Funcin compass.-
La funcin brjula, grafica flechas saliendo del origen. La sintaxis es:
compass(U,V)
compass(Z)
compass(...,EspecLinea)
compass(manejador_ejes,...)
h = compass(...)
Ejemplo3.12: Realizar la grfica tipo brjula de los valores propios de una matriz.
>> Z = eig(randn(20,20));
compass(Z);set(gcf,'Color',[1,1,1])
90
5
120 60
4
3
150 30
2
180 0
210 330
240 300
270
34
Dante Pinto Jeria
Ejemplo3.13:
>>line([0 1],[0 1],'Color','r','LineWidth',4)
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Ejemplo3.14:
>> x = -4:0.1:4;
y = randn(10000,1);
hist(y,x)
35
Dante Pinto Jeria
450
400
350
300
250
200
150
100
50
0
-5 -4 -3 -2 -1 0 1 2 3 4 5
Ejemplo3.15: Cambiar el color del anterior grfico de manera que sea rojo con bordes
blancos.
>> h = findobj(gca,'Type','patch');
set(h,'FaceColor','r','EdgeColor','w')
450
400
350
300
250
200
150
100
50
0
-5 -4 -3 -2 -1 0 1 2 3 4 5
36
Dante Pinto Jeria
bar(manejador_ejes,...)
barh(manejador_ejes,...)
h = bar(...)
barh(...)
h = barh(...)
Ejemplo3.16:
>> x = -2.9:0.2:2.9;
bar(x,exp(-x.*x),'r')
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
-3 -2 -1 0 1 2 3
Ejemplo3.17:
>> x = -2.9:0.2:2.9;
barh(x,exp(-x.*x),'b')
3
-1
-2
-3
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
37
Dante Pinto Jeria
Ejemplo3.18:
>> pie([1 2 1.4 4 1.5 3])
8%
23%
16%
11% 12%
31%
22%
33%
28%
6%
38
Dante Pinto Jeria
Ejemplo3.20:
>> xdato = [2 2 0 2 5;
2 8 2 4 5;
8 8 2 4 8];
ydato = [4 4 4 2 0;
8 4 6 2 2;
4 0 4 0 0];
zdato = ones(3,5);
patch(xdato,ydato,zdato,'w')
8
0
0 1 2 3 4 5 6 7 8
39
Dante Pinto Jeria
5 6 1; ...
7 8 9; ...
11 10 4 ];
>> p=patch('Faces',caras,'Vertices',verts,'FaceColor','r');
8
0
0 1 2 3 4 5 6 7 8
40
Dante Pinto Jeria
10
0
0 1 2 3 4 5 6 7 8 9 10
indices =
1 2 4
2 5 4
2 3 5
4 5 6
1 4 7
4 8 7
4 6 8
7 8 9
1 7 10
7 11 10
7 9 11
10 11 12
12 11 13
11 14 13
11 9 14
13 14 15
coorde =
2.0000 5.0000
1.0000 2.5000
0 0
3.5000 3.0000
2.5000 0.5000
5.0000 1.0000
5.0000 5.0000
6.5000 3.0000
8.0000 5.0000
3.5000 7.0000
6.5000 7.0000
5.0000 9.0000
41
Dante Pinto Jeria
7.5000 9.5000
9.0000 7.5000
10.0000 10.0000
0.35
0.3
0.25
Amplitude
0.2
0.15
0.1
0.05
0
0 1 2 3 4 5 6 7 8
Time (sec)
42
Dante Pinto Jeria
Impulse Response
0.3
0.25
0.2
0.15
Amplitude 0.1
0.05
-0.05
0 1 2 3 4 5 6 7 8
Time (sec)
0.5
Imaginary Axis
-0.5
-1
-1.5
-2.5 -2 -1.5 -1 -0.5 0 0.5
Real Axis
43
Dante Pinto Jeria
subplot(m,n,P)
subplot(h)
subplot('Position',[left bottom width height])
subplot(..., prop1, value1, prop2, value2, ...)
h = subplot(...)
Ejemplo3.26:
>> subplot(2,2,[1 3])
subplot(2,2,2)
subplot(2,2,4)
1 1
0.9 0.8
0.6
0.8
0.4
0.7
0.2
0.6
0
0 0.5 1
0.5
0.4 1
0.8
0.3
0.6
0.2
0.4
0.1 0.2
0 0
0 0.5 1 0 0.5 1
Ejemplo3.27:
>> subplot(2,2,1);subplot(2,2,2);subplot(2,2,3);subplot(2,2,4)
44
Dante Pinto Jeria
Ejemplo3.28:
>> [X,Y] = meshgrid(-2:.1:2, -2:.1:2);
Z = X .* exp(-X.^2 - Y.^2);
mesh(X,Y,Z)
0.5
-0.5
2
1 2
0 1
0
-1 -1
-2 -2
Se puede hacer una animacin en tiempo real de la grfica, haciendo clic en el cono
45
Dante Pinto Jeria
Y luego con las flechas del teclado o con el ratn y presionando el botn izquierdo, se hace
rotar la figura.
0.5
-0.5
2
1 2
0 1
0
-1 -1
-2 -2
0.5
-0.5
2
1 2
0 1
0
-1 -1
-2 -2
46
Dante Pinto Jeria
Ejemplo3.31:
>> [X,Y] = meshgrid(-2:.1:2, -2:.1:2);
Z = X .* exp(-X.^2 - Y.^2);
surf(X,Y,Z)
0.5
-0.5
2
1 2
0 1
0
-1 -1
-2 -2
47
Dante Pinto Jeria
40
30
20
10
0
1
0.5 1
0 0.5
0
-0.5
-0.5
-1 -1
Ejemplo3.33:
>> [x,y] = meshgrid(-3:1/8:3);
z = peaks(x,y);
surfl(x,y,z);
shading interp
colormap(gray);
axis([-3 3 -3 3 -8 8])
48
Dante Pinto Jeria
-5
2
3
2
0 1
0
-2 -1
-2
-3
Ejemplo3.34:
>>[X,Y] = meshgrid([-2:.25:2]);
Z = X.*exp(-X.^2-Y.^2);
contour(X,Y,Z,30)
2
1.5
0.5
-0.5
-1
-1.5
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
49
Dante Pinto Jeria
Ejemplo3.35:
>> [X,Y] = meshgrid([-2:.25:2]);Z = X.*exp(-X.^2-Y.^2);
[C,h] = contour(interp2(Z,4));
text_handle = clabel(C,h);
set(text_handle,'BackgroundColor',[1 1 .6],'Edgecolor',[.7 .7 .7])
250
0
-0.1 0.1
200
2
-0
0.
.2
150
-0 .2
-0 .1
-0 .3
0.2
0.1
0.3
.4
0.4
0.1
-0.1
-0
0.3
-0 .3
-0 .1
0.1
0
100
0.2
-0 .2
50 -0.1 0.1
0
1.5
0.5
-0.5
-1
-1.5
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
50
Dante Pinto Jeria
Ejemplo3.37:
>> [X,Y] = meshgrid([-2:.25:2]);
Z = X.*exp(-X.^2-Y.^2);
contour3(X,Y,Z,30)
surface(X,Y,Z,'EdgeColor',[.8 .8 .8],'FaceColor','none')
grid off
view(-15,25)
colormap cool
0.5
-0.5
2
1.5 2
0 0.5 1
-2 -1.5 -1 -0.5
-2
51
Dante Pinto Jeria
CAPTULO IV
52
Dante Pinto Jeria
53
Dante Pinto Jeria
La convolucin es
>>c = conv(u,v)
c=
10 40 100 160 170 120
[q,r] = deconv(c,u)
q=
10 20 30
r=
0 0 0 0 0 0
54
Dante Pinto Jeria
1 -4 2 4 1
55
Dante Pinto Jeria
1.3320
p=
1.5737
-1.1644
-0.4093
k=
-1.2500
Debe hacerse notar que el resultado est normalizado para el coeficiente lder en el
denominador.
56
Dante Pinto Jeria
num/den =
50
-----------------------
s^3 + 7 s^2 + 20 s + 50
57
Dante Pinto Jeria
parallel
sys = parallel(sys1,sys2)
sys = parallel(sys1,sys2,inp1,inp2,out1,out2)
sys = parallel(sys1,sys2,'nombre')
58
Dante Pinto Jeria
B=
1
0
0
C=
0 1 0
D=
0
Ejemplo4.20: Obtenga la funcin de transferencia del sistema definido por las siguientes
ecuaciones en el espacio de estados:
59
Dante Pinto Jeria
>> D=[0];
>> [num,den]=ss2tf(A,B,C,D)
num =
0 0.0000 25.0000 5.0000
den =
1.0000 5.0000 25.0000 5.0000
>> printsys(num,den)
num/den =
8.8818e-015 s^2 + 25 s + 5
--------------------------
s^3 + 5 s^2 + 25 s + 5
60
Dante Pinto Jeria
Ejemplo4.22:
>> syms x;limit('sin(x)/x',x,0)
ans =
1
diff(expr) deriva una expresin simblica expr con respecto a su variable libre (sin
ningn valor asignado) determinada por symvar.
Ejemplo4.23:
>> syms x;
>> diff('sin(x)^3',x)
ans =
3*cos(x)*sin(x)^2
int(expr) realiza la integral indefinida de expr con respecto a su variable simblica definida
por symvar.
61
Dante Pinto Jeria
Ejemplo4.24: Integrar
>> sym x;
>> int((6*x+1)*sin(sqrt(3*x^2+x-1))/sqrt(3*x^2+x-1))
ans =
(-2)*cos((3*x^2 + x - 1)^(1/2))
ans =
3*x^2 + 2
62
Dante Pinto Jeria
Ejemplo4.27:
>>syms x y;
>>expand(cos(x+y))
ans =
cos(x)*cos(y) - sin(x)*sin(y)
Ejemplo4.28:
>>syms a b;
>>expand(exp((a+b)^2))
ans =
exp(2*a*b)*exp(a^2)*exp(b^2)
Ejemplo4.29:
>>syms t;
>>expand([sin(2*t), cos(2*t)])
ans =
[ 2*cos(t)*sin(t), cos(t)^2 - sin(t)^2]
Ejemplo4.31:
>>syms x y;
>>factor(x^3-y^3)
ans =
(x - y)*(x^2 + x*y + y^2)
Ejemplo4.32:
>>syms a b;
>>factor([a^2 - b^2, a^3 + b^3])
ans =
[ (a - b)*(a + b), (a + b)*(a^2 - a*b + b^2)]
63
Dante Pinto Jeria
d=
5
Ejemplo4.34:
>>syms x y;
>>[n,d] = numden(x/y + y/x)
n=
x^2 + y^2
d=
x*y
Ejemplo4.35:
>>syms a b
>>A = [a, 1/b]
[n,d] = numden(A)
A=
[a, 1/b]
n=
[a, 1]
d=
[1, b]
Ejemplo4.37:
>>syms a b c;
>>simplify(exp(c*log(sqrt(a+b))))
ans =
(a + b)^(c/2)
Ejemplo4.38:
>>S = [(x^2 + 5*x + 6)/(x + 2), sqrt(16)];
64
Dante Pinto Jeria
>>R = simplify(S)
R=
[ x + 3, 4]
>>g = cos(3*acos(x));
>>g = simple(g)
g=
4*x^3 - 3*x
Ejemplo4.41:
>>syms a b;
>>subs(cos(a) + sin(b), {a, b}, {sym('alpha'), 2})
ans =
sin(2) + cos(alpha)
Ejemplo4.42:
Suponiendo que a = 980 y C2 = 3 existen en el workspace.
The statement
65
Dante Pinto Jeria
a = 980; C2 = 3; subs(y)
ans =
3/exp(980*t)
Ejemplo4.44:
>>dsolve('Dx = -a*x')
ans =
C2/exp(a*t)
Ejemplo4.45:
>>dsolve('Df = f + sin(t)')
ans =
C4*exp(t) - sin(t)/2 - cos(t)/2
Ejemplo4.46:
>>dsolve('(Dy)^2 + y^2 = 1','s')
ans =
1
-1
cosh(C7 + s*i)
cosh(C11 - s*i)
Ejemplo4.47:
>>dsolve('Dy = a*y', 'y(0) = b')
ans =
b*exp(a*t)
Ejemplo4.48:
>>dsolve('D2y = -a^2*y', 'y(0) = 1', 'Dy(pi/a) = 0')
ans =
(1/exp(a*t*i))/2 + exp(a*t*i)/2
Ejemplo4.49:
>>z = dsolve('Dx = y', 'Dy = -x')
66
Dante Pinto Jeria
z=
x: [1x1 sym]
y: [1x1 sym]
z.x
ans =
C20*cos(t) + C19*sin(t)
z.y
ans =
C19*cos(t) - C20*sin(t)
ans =
1/(s^2 + 1)
Ejemplo4.51:
>> syms x t w;laplace(cos(t*w),x)
ans =
x/(w^2 + x^2)
>> ilaplace(g)
ans =
exp(t)
67
Dante Pinto Jeria
Ejemplo4.53:
>> ilaplace(t^(-sym(5/2)),x)
ans =
(4*x^(3/2))/(3*pi^(1/2))
ans =
pi*(2*heaviside(-w) - 1)*i
ans =
1/(2*pi*(- 3 + x*i)^2)
ans =
z/(z - 2)
Ejemplo4.57:
68
Dante Pinto Jeria
>> ztrans(sin(k*n),w)
ans =
(w*sin(k))/(w^2 - 2*cos(k)*w + 1)
ans =
2^n
Ejemplo4.59:
>> iztrans(exp(x/z),z,k)
ans =
x^k/factorial(k)
4.2.19 MuPad.-
Matlab 2010, tiene incorporada una caja de herramientas (toolbox), que contiene el
programa de lgebra computarizada (CAS) MuPad.
Para cargar esta caja de herramientas se debe teclear
>>mupad
Este programa permite realizar diferentes clculos simblicos y grficas muy elaboradas.
Tiene su propia sintaxis independiente de Matlab.
69
Dante Pinto Jeria
70
Dante Pinto Jeria
Asignar = :=
Supresin de la salida ; :
Inf infinity
pi PI
i I
NaN undefined
fix trunc
log ln
asin arcsin
71
Dante Pinto Jeria
acos arccos
atan arctan
asinh arcsinh
acosh arccosh
atanh arctanh
acsc arccsc
asec arcsec
acot arccot
acsch arccsch
asech arcsech
acoth arccoth
besselj besselJ
bessely besselY
besseli besselI
besselk besselK
lambertw lambertW
sinint Si
cosint Ci
eulergamma EULER
conj conjugate
72
Dante Pinto Jeria
catalan CATALAN
laplace transform::laplace
ilaplace transform::invlaplace
ztrans transform::ztrans
iztrans transform::invztrans
73
Dante Pinto Jeria
MATLABvar = getVar(notebook_manejador,'variable');
Por ejemplo, si nm es el manejador del notebook, z es la variable en el notebook de MuPad,
y u es la variable en el espacio de trabajo de Matlab, se introduce.
u = getVar(nb,'z')
74
Dante Pinto Jeria
CAPTULO V
PROGRAMACIN EN CDIGO M
5.1 INTRODUCCIN.-
El lenguaje de programacin de Matlab se llama cdigo M. Este lenguaje tiene las mismas
estructuras bsicas de programacin de cualquier otro lenguaje, es decir, bucles y
condicionales, entradas y salidas, manejo de funciones y procedimientos.
Otra forma es teclear en la lnea de comandos del espacio de trabajo de Matlab, la palabra
edit seguida del nombre que se le quiere asignar al programa.
>>edit primero
Luego aparece un mensaje que indica que el archivo no existe y pregunta si es que
debemos crearlo, a lo que se responde que s.
75
Dante Pinto Jeria
>> primero
Hola Mundo Cruel
>>
Para editar un programa se debe teclear lo mismos que s hizo para crearlo, es decir, edit
seguido del nombre del programa.
76
Dante Pinto Jeria
Ejemplo5.1:
>> a=input('Introduzca el valor de la hipotenusa: ')
a=
5
a=
0.8889
Ejemplo5.3:
>> respuesta = input('Quiere mas? S/N : ', 's');
>> respuesta
respuesta =
s
c=
9
La funcin sprintf da formato a una cadena de texto, donde se encuentren los indicadores
%i reemplaza el correspondiente valor, en este caso a y b. Esta funcin es muy similar a la
77
Dante Pinto Jeria
funcin printf del lenguaje C. Los caracteres de conversin, que se pueden usar y que
siguen despus del smbolo %, son d, i, o, u, x, X, f, e, E, g, G, c, s.
if expresion1
declaraciones1
elseif expresion2
declaraciones2
else
declaraciones3
end
a b c (a^~b)v(a^c)
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 0
1 0 0 1
78
Dante Pinto Jeria
1 0 1 1
1 1 0 0
1 1 1 1
%_Programa bisiesto
%_Dante Pinto Jeria, P-10-X-2010
Este programa utiliza la funcin mod, que devuelve el residuo de la divisin de los dos
argumentos, as por ejemplo: mod(5,2) da como resultado 1.
1
0.9000
0.8000
0.7000
0.6000
0.5000
0.4000
0.3000
0.2000
0.1000
0
79
Dante Pinto Jeria
Ejemplo5.8: Realizar un programa que dibuje lneas entrecruzadas. Usar dos bucles for
anidados.
%_Programa figura, para dibujar lneas entrecruzadas
%_Dante Pinto Jeria, P-6-X-2010
clc;
alpha=input('Introduzca un numero de 3 a 30:');
if alpha<3 || alpha>30
alpha=15;
end
alpha=360/alpha;
for i=0:alpha:360
for j=i:alpha:360
x1=cosd(i);
y1=sind(i);
x2=cosd(j);
y2=sind(j);
line([x1 x2],[y1 y2],'Color',[1,0,0]);
end
end
axis equal;axis off;set(gcf,'Color',[1,1,1]);
80
Dante Pinto Jeria
Ejemplo5.9: Realizar un programa que muestre una pelcula con los cambios que se le
hacen a una superficie en 3D.
%_Programa peli, realiza una animacin de los cambios que se hacen
%_a una grfica
%_Dante Pinto Jeria
%_P-11-10-2010
Z = peaks; surf(Z);
axis tight
set(gca,'nextplot','replacechildren');
% Graba la pelcula
for j = 1:20
surf(sin(2*pi*j/20)*Z,Z)
F(j) = getframe;
end
% Reproduce la pelcula 10 veces
movie(F,10)
-5
40
30 40
20 30
20
10 10
-5
40
30 40
20 30
20
10 10
81
Dante Pinto Jeria
k=0;
for n=1:3:10
n10=10*n;
x=linspace(-2,2,n10);
y=x./(1+x.^2);
k=k+1;
subplot(2,2,k)
plot(x,y,'k')
title(sprintf('Grfico %g. Trazado con n = %g puntos.',k,n10))
xlabel('x')
ylabel('y')
axis([-2,2,-.8,.8])
grid
pause(3);
end
0.5 0.5
0 0
y
-0.5 -0.5
-2 -1 0 1 2 -2 -1 0 1 2
x x
Grfico 3. Trazado con n = 70 puntos. Grfico 4. Trazado con n = 100 puntos.
0.5 0.5
0 0
y
-0.5 -0.5
-2 -1 0 1 2 -2 -1 0 1 2
x x
82
Dante Pinto Jeria
Ejemplo5.11: Realizar un programa que forme una matriz mgica impar. Las matrices
mgicas son aquellas que suman el mismo nmero en filas, columnas y diagonales. Utilizar
el algoritmo de Loubere.
clc;
n=input('Introduzca el numero impar, del tamao de la matriz: ');
n = floor(real(double(n(1))));
if mod(n,2)==0
disp('EL NUMERO INTRODUCIDO NO ES IMPAR');
else
M=rand(n)*0;c=1;I=n;J=ceil(n/2);M(I,J)=c;
while c<n^2,
c=c+1;I=I+1;J=J-1;
if I>n && J<1
I=I-2;J=J+1;
end
if I>n && J>0
I=1;
end
if I<=n && J==0
J=n;
end
if M(I,J)~=0
I=I-2;J=J+1;
end
M(I,J)=c;
end
disp(sprintf('La matriz mgica de tamao %g, es:',n));
disp(M);
end
La funcin floor da como resultado el redondeo hacia abajo, as por ejemplo, floor(5/2) da
como resultado 2. La funcin ceil da como resultado el redondeo hacia arriba, as por
ejemplo ceil(5/2) da como resultado 3.
83
Dante Pinto Jeria
9 2 25 18 11
3 21 19 12 10
22 20 13 6 4
16 14 7 5 23
15 8 1 24 17
Ejemplo5.12:
>> indicador= 'Bueno';
switch lower(indicador)
case {'bueno','regular'}
disp('Es aceptable')
case 'malo'
disp('Es malo')
case 'excelente'
disp('Es excelente')
otherwise
disp('No s qu es lo que sea')
end
Es aceptable
84
Dante Pinto Jeria
Las funciones son procedimientos que recogen datos de entrada, los procesan y devuelven
un resultado. La estructura de una funcin es la siguiente:
declaraciones
end
Las variables dentro de la funcin, son variables locales, es decir, solo tienen valides dentro
de la funcin, fuera de ella no valen nada. Si es que se deseara que las variables tengan
valor fuera de la funcin, se las debe declarar como variables globales en el entorno en el
que se llama a la funcin.
Para ello se utiliza el comando global seguido del nombre de la variable.
ans =
0
Ejemplo5.14: Para el anterior ejemplo, definir la variable salida como global, para
recuperar su valor.
>> global salida;bisies(2012);
>> salida
salida =
1
Ejemplo5.15: Realizar una funcin que dados como datos el nmero de filas de una matriz
y el ndice relativo, devuelva la fila y la columna a la que pertenece ese ndice.
85
Dante Pinto Jeria
>> [f,c]=indice(2,10)
f=
2
c=
5
Ejemplo5.16: Realizar una funcin que se llame bueno y permita la entrada de un valor y
realice xvalor: si el nmero de entradas es menor que 4,3,2 asigne valores por omisin; si el
llamado a la funcin se lo realiza de la forma bueno() dibuje la grfica; si el llamado se lo
realiza mediante la forma [x0,y0]=bueno() saque los valores.
Aqu se utilizan las variables nargin y nargout, que indican el nmero de entradas y
salidas de la funcin respectivamente.
86
Dante Pinto Jeria
La variable nargin indica con cuantos argumentos se llama a la funcin, as por ejemplo, si
se llama bueno(2,3) nargin dar como resultado 2, bueno(1,1,2) dar como resultado 3.
La variable nargout indica con cuantos argumentos se invoca la salida, as por ejemplo,
[x0,y0]=bueno(1), dar como resultado 2; mientras que bueno(1) dar como resultado 0.
>> bueno(2)
4
3.5
2.5
1.5
0.5
0
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
>> [x0,y0]=bueno(2,-2,2,1)
x0 =
-2 -1 0 1 2
y0 =
4 1 0 1 4
87
Dante Pinto Jeria
CAPTULO VI
6.1 INTRODUCCIN.-
Matlab permite la creacin de interfaces grficas. De manera muy similar a lenguajes como
Visual Basic, Visual C, etc.
Par entrar al entorno de diseo de las GUI se pueden seguir cualquiera de los siguientes
pasos:
a) Ir a File, New y GUI.
88
Dante Pinto Jeria
89
Dante Pinto Jeria
En el cuadro de dilogo que aparece, se quita la marca del campo Add comments for newly
generated callback functions, luego se presiona Apply y OK. Esto evita que en el entorno de
programacin de los GUI, se generen comentarios de manera automtica. Estos
comentarios muchas veces confunden y llenan toda la pantalla.
Haciendo clic con el botn derecho del ratn, sobre el componente, se despliega el cuadro
de dilogo siguiente:
90
Dante Pinto Jeria
El campo Property Inspector da salida al cuadro de dilogo de las propiedades del control.
Aqu se pueden realizar los cambios que se crean convenientes, como el color, el mensaje
desplegado, etc.
91
Dante Pinto Jeria
Tambin haciendo clic con el botn derecho del ratn sobre el componente se da acceso a
View Callbacks.
92
Dante Pinto Jeria
Debajo del la lnea resaltada se puede aadir el cdigo correspondiente, que estar asociado
a este componente.
Funcionamiento de la GUI.
Un programa GUI tiene dos partes: un archivo .m y un archivo .fig. El archivo .m es el que
contiene el cdigo fuente y el .fig tiene la parte grfica. Para ejecutar un programa GUI
simplemente se teclea, en el espacio de trabajo de Matlab, el nombre del mismo. As, por
ejemplo, si se ha guardado con el nombre de prueba.fig, simplemente se escribe:
>>prueba ENTER.
handles.output = hObject;
guidata(hObject, handles);
Esta instruccin debe estar siempre al final de cualquier subrutina. Garantiza que cualquier cambio
de propiedades y valores de variables quede almacenado.
Si, por ejemplo, dentro de una subrutina una operacin dio como resultado una variable
valor, para utilizar esta variable desde el programa o desde otra subrutina se la debe guardar
de la siguiente manera:
93
Dante Pinto Jeria
handles.valor=valor;
guidata(hObject,handles);
La primera lnea aade la variable valor a la estructura de datos de la aplicacin apuntada por
handles y la segunda lnea guarda el valor.
numero=get(handles.input1_editText,'String');
set(handles.text1,'String',numero)
Ejemplo6.1: Crear una interfaz grfica de usuario, que permita la entrada de una funcin de
x y realice la integral simblica de esa funcin.
Primero se crea la interfaz grfica con dos Static Text, un Edit Text y dos Push Button. Se
cambian los colores y nombres mediante el Property Inspector, para que quede de la
siguiente manera:
94
Dante Pinto Jeria
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Outputs from this function are returned to the command line.
function varargout = integra_OutputFcn(hObject, eventdata, handles)
95
Dante Pinto Jeria
varargout{1} = handles.output;
Lo que est resaltado con amarillo es el cdigo que se aade, el resto es generado
automticamente por el programa.
La ejecucin de este programa da como resultado:
96
Dante Pinto Jeria
Ejemplo6.2: Realizar una GUI que simule el juego craps de lanzamiento de dos dados.
Las reglas del juego son las siguientes:
Un jugador gana si saca 7 u 11 en el primer lanzamiento de un par de dados, pierde si saca
2,3 12 en el primer lanzamiento. Sin embargo, si en el primer lanzamiento saca un
4,5,6,8,9 10 contina tirando el dado hasta obtener el nmero que obtuvo en el primer
lanzamiento o hasta obtener un 7. Si obtiene su primer nmero antes de obtener un 7, gana;
en otro caso pierde. Calcular la probabilidad que el jugador gana en dos o menos
lanzamientos.
Lo primero es disear la interfaz grfica, para ello se insertan en el rea de diseo cuatro
Static Text, dos Push Button. Y se cambian los colores y los textos como se muestra a
continuacin.
97
Dante Pinto Jeria
Luego, debajo del cdigo generado automticamente por el programa, se aade el cdigo
fuente asociado a cada uno de los Push Button, para ello usamos los View Callbacks
if indi1==1
a=fix(rand(1,1)*6)+1;
b=fix(rand(1,1)*6)+1;
c=num2str(a);
set(handles.primero,'String',c);
d=num2str(b);
set(handles.segundo,'String',d);
fin=0;
set(handles.informe,'String','');
indi = indi+1;
if indi==1
if a+b==2 || a+b==3 || a+b==12
set(handles.informe,'String','PERDISTE');
fin=1;
indi1=0;
end
if a+b==7 || a+b==11
set(handles.informe,'String','GANASTE');
fin=1;
indi1=0;
end
if fin == 0
suma=a+b;
98
Dante Pinto Jeria
end
else
if a+b==7
set(handles.informe,'String','PERDISTE');
indi1=0;
else
if a+b==suma
set(handles.informe,'String','GANASTE');
indi1=0;
end
end
end
end
guidata(hObject,handles);
99
Dante Pinto Jeria
CAPTULO VII
USO DE SIMULINK
7.1 INTRODUCCIN.-
Simulink es un programa aadido a Matlab. Sirve para programar visualmente un sistema
dinmico (el cual est gobernado por ecuaciones diferenciales) y observar los resultados.
Simulink est conformado por bibliotecas de bloques de construccin, estos bloques se
conectan unos con otros a travs de lneas, las cuales transmiten la informacin. Simulink,
es en esencia un tipo de lenguaje orientado a bloques.
La principal ventaja es la disponibilidad de plantillas de construccin de bloques, las cuales
evitan la necesidad de escribir cdigo para pequeos procesos matemticos.
Para entrar al entorno de Simulink se pueden realizar cualquiera de los siguientes pasos:
100
Dante Pinto Jeria
Se arrastran estos bloques a la ventana de diseo y luego se conectan con lneas. Una
manera rpida de conectar bloques es marcar el bloque de partida y luego presionando la
tecla control hacer clic con el botn izquierdo en el bloque destino.
10
1
Dante Pinto Jeria
Luego se guarda este pequeo modelo, con algn nombre, en este caso IntegradorBasico. Y
102
Dante Pinto Jeria
Como se puede apreciar, el coseno est desplazado hacia arriba en una unidad. Para
corregir esto se debe hacer doble clic en el cono del integrador en la ventana de diseo.
Aqu se debe cambiar el campo Initial condition, y cambiarlo de cero a -1, para desplazar
hacia abajo el resultado. Luego presionar Apply y OK.
Haciendo correr de nuevo el simulador y presionando la autoescala, nuevamente, resulta:
10
3
Dante Pinto Jeria
Se puede utilizar los controladores PID para gobernar (controlar) brazos robticos como el
mostrado en la figura
104
Dante Pinto Jeria
Una pelota es puesta sobre una viga y puede rodar a travs de ella. El brazo robtico hace
que la viga suba o baje un ngulo . El brazo est unido a un mecanismo circular que puede
rotar un ngulo . Cuando se va cambiando el ngulo , la gravedad ocasiona que la pelota
vaya rodando por la viga. Por tanto se necesita disear un controlador que regule la
posicin de la pelota, de manera que esta no se salga de la viga.
Para esta aplicacin se asume que la pelota rueda sin deslizamiento y que la friccin entre
la viga y la pelota es despreciable. Las constantes y variables para este ejemplo estn
definidas como sigue:
10
5
Dante Pinto Jeria
La ecuacin que relaciona el ngulo de la viga, con el ngulo del brazo es aproximada por:
Reagrupando, se halla la funcin de transferencia del ngulo (s) del brazo a la posicin de
la pelota R(s).
106
Dante Pinto Jeria
a) Funcin de transferencia
m = 0.111;
R = 0.015;
g = -9.8;
L = 1.0;
d = 0.03;
J = 9.99e-6;
K = (m*g*d)/(L*(J/R^2+m));
num = [-K];
den = [1 0 0];
printsys(num,den)
10
7
Dante Pinto Jeria
0.21
----------
s^2
De esta grfica se ve claramente que el sistema es inestable en lazo abierto, causando que la
pelota ruede fuera de la viga. Por tanto se requiere de algn mtodo para controlar la
posicin de la pelota.
b) En el espacio de estados.
H = -m*g/(J/(R^2)+m);
A=[0 1 0 0
0 0 H 0
0 0 0 1
108
Dante Pinto Jeria
0 0 0 0];
B=[0;0;0;1];
C=[1 0 0 0];
D=[0];
La respuesta a una entrada paso de 0.25m puede ser vista mediante:
step(A,B*.25,C,D)
Para modificar las propiedades de los bloques, se hace doble clic en el bloque y en la
ventana que aparece se hacen los cambios deseados.
110
Dante Pinto Jeria
Se modific el sumador, para que los signos sean + - (mas y menos) en el campo List of
signs
Tambin se modific el bus, para que tenga tres entradas, en el campo Number of inputs
11
1
Dante Pinto Jeria
112
Dante Pinto Jeria
Los parmetros por omisin son: P=1; I=1; D=0. Para el sintonizado del PID se presiona
Tune, y aparece, despus de un momento de clculos
Aqu aparece el sistema ya estable, pero con un tiempo de 2 segundos, si es que nos parece
muy grande, lo modificamos con la barra deslizable. En este caso lo modificamos para un
segundo.
11
3
Dante Pinto Jeria
114
Dante Pinto Jeria
Si es que se quiere sacar los resultados al espacio de trabajo de Matlab, se debe aadir en la
ventana de diseo de Simulink, un bloque que saque datos al workspace . Ese bloque es To
workspace y se encuentra en Sinks.
11
5
Dante Pinto Jeria
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
La variable dependiente es una estructura, para acceder a los valores se pone:
salida.signals.values
La variable independiente se encuentra almacenada en tout.
116