You are on page 1of 116

CURSO DE MANEJO Y

PROGRAMACIN DE

MATLAB

DANTE PINTO JERIA


Potos- Bolivia

2010

Dante Pinto Jeria

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.
El entorno de trabajo fundamental de Matlab es el siguiente:

Donde se presentan:
La ventana de comandos (Command Window) que es donde se trabaja de manera
directa, los comandos son introducidos despus del apuntador (prompt) >>
El historial de comandos (Command History), muestra los comandos utilizados en
por orden.
La ventana de las carpetas actuales (Current Folder).

Dante Pinto Jeria


Y el espacio de trabajo (Workspace) que muestra las variables utilizadas y creadas
en el entorno de trabajo.
Originalmente el fondo de trabajo es blanco, pero es posible cambiarlo a un fondo oscuro (o
de otro color). Para ello se debe ir a File, Preferences

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.

1.2 MANEJO FUNDAMENTAL.1.2.1 Entrada de datos y salida de resultados.Matlab funciona como una calculadora de lgica algebraica. Todo resultado de operaciones
es almacenado en la variable ans (answer = respuesta).
>> 45*76
ans =
3420
>> 2+3
ans =
5
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.

Dante Pinto Jeria


Matlab permite recuperar las ltimas operaciones realizadas, presionando la tecla de la
flecha hacia arriba . Presionando dos veces se recupera la penltima operacin y as
sucesivamente.

1.2.2 Borrado de la pantalla.El Command Window se borra mediante clc


1.2.3 Formato de nmeros decimales.Matlab permite cambiar el formato de nmeros decimales mediante el comando format.
Por omisin Matlab muestra los resultados con cuatro decimales, ese es el formato short.
>> 3/7
ans =
0.4286
Para cambiar a otro formato con ms decimales se debe presionar
>> format long
Luego presionando dos veces la flecha hacia arriba del cursor (para recuperar la penltima
operacin).
>> 3/7
ans =
0.428571428571429
El resultado tiene ahora 15 decimales.
Tambin se puede fijar el formato racional, para realizar operaciones fraccionarias.
>> format rat
>> 3/5+1/2-1/8
ans =
39/40
Para volver al formato por omisin, simplemente se teclea
>> format

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.
>> help format
Y a continuacin aparece una serie de textos, con la ayuda correspondiente.
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
Your variables are:
a ans g x

y z

Una variante es el comando whos


>> whos
Name
Size
Bytes Class
a
ans
6

4-D
1x3

192 double
24 double

Attributes

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 borrar variables se puede utilizar el comando clear
>> clear a x
Lo anterior borra las variables a y x
Para borrar todas las variables se teclea
>> clear

1.3 GUARDADO DEL ESPACIO DE TRABAJO.Una vez que se sale de la sesin de Matlab, todas las variables que se hayan creado son
borradas de la memoria. Si es que queremos recuperar todas las variables y el espacio de
trabajo, este debe ser guardado. Para ello se utiliza el men File, luego Save Workspace As.

Para abrir el espacio de trabajo, guardado con anterioridad, se utiliza File luego Open

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]
a=
1
4
7

2
5
8

3
6
9

Tambin se pueden formar matrices o vectores mediantes secuencias, utilizando el operador

: (dos puntos). De la siguiente manera

inicio:paso:final
>> a=[1:2:20]
a=
1 3 5 7

>> b=[-1:.5:1;-1:.5:1]
b=
-1.0000 -0.5000
-1.0000 -0.5000

11

0
0

13

15

0.5000
0.5000

17

19

1.0000
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
8.0000 15.0000

0 0.5000 1.0000
0 0.5000 1.0000

Donde la referencia se la realiza de la siguiente manera

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

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

2.2 OPERACIONES FUNDAMENTALES CON MATRICES.2.2.1 Borrar una fila o una columna de una matriz.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
Si ahora se quiere borrar la tercera columna.
>> a(:,3)=[]
a=
16 2 13
5 11 8
9 7 12

Los dos puntos indican todo, lo que quiere decir que se hace referencia a toda la fila o a
toda la columna.
2.2 Aadir una fila o una columna a una matriz.Por ejemplo en la siguiente matriz aumentar una columna con el elemento a(3,6)=8
>> 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.
2.3 Sumar los elementos de una matriz.Se utiliza el comando sum, el cual realiza la suma de las columnas de la matriz. Si se aplica
sobre un vector, realiza la suma de todos los elementos del mismo.
As para el siguiente vector:
>> b=[1:5]
b=
1 2 3 4 5
>> sum(b)
ans =
15
Como ejemplo comprobaremos que la matriz mgica, realmente es mgica.
>> a=magic(4)
a=
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
La suma de las columnas se la realiza mediante
>> sum(a)
ans =
34 34 34 34
La suma de las filas se la realiza transponiendo la matriz (una matriz transpuesta es cuando
las filas se toman como columnas y viceversa). Para transponer una matriz, se pone un
apstrofe sobre el nombre de la misma a
>> sum(a')
ans =
34 34 34 34

12

Dante Pinto Jeria


Para la suma de los elementos de la diagonal principal, se utiliza
>> sum(diag(a))
ans =
34
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
Para aclarar el anterior paso veamos:
>> fliplr(a)
ans =
13 3 2 16
8 10 11 5
12 6 7 9
1 15 14 4
2.4 Intercambio de filas y columnas.Supongamos que se quiere cambiar la matriz mgica que presenta Matlab a la misma forma
de matriz que aparece en el cuadro de Durero, para eso se procede:
>> a=magic(4);a=a(:,[1 3 2 4])
a=
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
El orden de presentacin de las columnas lo da el vector [1 3 2 4]
Si se quieren cambiar la primera con la cuarta columnas, se procede:
>> a=a([4 2 3 1],:)
a=
4 15 14 1
5 10 11 8
9 6 7 12
16 3 2 13

13

Dante Pinto Jeria


2.5 Reformado de una matriz.Se puede reformar una matriz mediante la funcin reshape. Si la matriz era n*m se
reformula a un tamao nuevo p*q, siempre y cuando m*n=p*q
As, por ejemplo, si se quiere reformular el tamao de la matriz de 3*4
>> a=[1:4;5:8;9:12]
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
5
9
2
6
10

3
7
11
4
8
12

2.6 Replicado de una matriz.Para esto se utiliza la funcin repmat(matriz,m,n), replica la matriz m veces en las filas y
n veces en las columnas,de la siguiente manera:
Replicar la matriz
1 2
2 3
Dos veces en las filas y tres veces en las columnas
>> repmat([1 2;2 3],2,3)
ans =
1
2
1
2

14

2
3
2
3

1
2
1
2

2
3
2
3

1
2
1
2

2
3
2
3

Dante Pinto Jeria


2.7 Matriz identidad.La matriz identidad se construye mediante la funcin eye(n) donde n indica el tamao de la
misma, as por ejemplo:
>> eye(4)
ans =
1
0
0
0

0
1
0
0

0
0
1
0

0
0
0
1

2.8 Suma de matrices.Para sumar dos matrices, estas deben ser del mismo tamao.
>> a=[1:4;5:8;9:12]
a=
1 2 3 4
5 6 7 8
9 10 11 12
Ahora la matriz b la construimos como el reverso de a, para eso
>> b=a(end:-1:1,end:-1:1)
b=
12 11 10 9
8 7 6 5
4 3 2 1
Luego las sumamos
>> a+b
ans =
13 13 13 13
13 13 13 13
13 13 13 13
2.9 Multiplicacin de matrices.Se debe cumplir que el nmero de columnas de la primera sea igual al nmero de filas de la
segunda, sin esta condicin no se pueden multiplicar dos matrices. El producto matricial no
es conmutativo. La matriz resultante tiene, como tamao, el nmero de filas de la primera
por el nmero de columnas de la segunda.

C(m*p)=A(m*n)*B(n*p)
15

Dante Pinto Jeria


>> a
a=
1
4

2
5

3
6

>> b
b=
7 8
9 10
11 12
>> a*b
ans =
58 64
139 154
2.10 Inversa de una Matriz.Se calcula mediante la funcin inv(matriz). Solo existe la inversa de matrices cuadradas,
siempre y cuando estas no sean singulares. Se define una matriz inversa como aquella que
multiplicada por su matriz original da como resultado la matriz identidad (este es uno de los
pocos caso en los que se admite la propiedad conmutativa en la multiplicacin).

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.0431 -0.0373
-0.0303 0.0031
0.0047 -0.0065
0.0028 0.0050
16

-0.0354 0.0012 0.0034


-0.0046 0.0127 0.0015
0.0031 0.0031 0.0364
0.0108 0.0435 -0.0370
0.0415 -0.0450 0.0111

Dante Pinto Jeria


La comprobacin se
>> a*b
ans =
1.0000 0.0000
0.0000 1.0000
0.0000 0.0000
0.0000 0.0000
-0.0000 0.0000

la realiza mediante la multiplicacin de las dos matrices.

0 0.0000 -0.0000
0 0.0000
0
1.0000 0.0000 -0.0000
0.0000 1.0000 0.0000
0.0000 0.0000 1.0000

>> 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
2.11 Determinante de una Matriz.Se calcula mediante det(matriz), el resultado es un nmero. El determinante solo existe
para matrices cuadradas, siempre y cuando no sean singulares.
Calcular el determinante de la matriz:
>> a=magic(3)
a=
8 1 6
3 5 7
4 9 2
>> det(a)
ans =
-360
2.12 Reduccin escalonada por filas (reduced row echelon form).Se realiza mediante la funcin rref(matriz). Trabaja sobre matrices rectangulares o
cuadradas.
>> rref(magic(4))
ans =
1 0 0 1
0 1 0 3
0 0 1 -3
0 0 0 0
17

Dante Pinto Jeria


>> rref(magic(3))
ans =
1 0 0
0 1 0
0 0 1
2.13 Rango de una matriz.Se calcula mediante rank(matriz). Indica el nmero de filas diferentes de cero que tiene la
matriz despus de realizar una reduccin escalonada de filas.
As, por ejemplo, para los dos ejemplos anteriores se tiene:
>> rank(magic(4))
ans =
3
>> rank(magic(3))
ans =
3
2.14 Media aritmtica de los elementos de una matriz.La media aritmtica o promedio se calcula de las columnas de la matriz.
>> mean(magic(4))
ans =
8.5000 8.5000 8.5000 8.5000
Si se quisiera el promedio de todos los elementos de la matriz se teclea:
>>mean(mean(magic(4)))
ans =
8.5000
2.15 Mximos y mnimos.Se calculan con max(matriz) y min(matriz) respectivamente. Se calculan por columnas.
>> max(magic(4))
ans =
16 14 15 13
>> min(magic(4))
ans =
4 2 3 1

18

Dante Pinto Jeria


Para el mximo o mnimo de todos los elementos.
>> max(max(magic(4)))
ans =
16
>> min(min(magic(4)))
ans =
1
2.16 Generacin de nmeros aleatorios.Se generan nmeros aleatorios con las funciones rand(m,n) y randn(m,n). La segunda da
nmeros aleatorios normalmente distribuidos.
>>rand(4)
ans =
0.7577 0.1712 0.0462 0.3171
0.7431 0.7060 0.0971 0.9502
0.3922 0.0318 0.8235 0.0344
0.6555 0.2769 0.6948 0.4387
>> rand(2,3)
ans =
0.3816 0.7952
0.7655 0.1869

0.4898
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
2.17 Resolucin de sistemas de ecuaciones lineales.Un sistema de ecuaciones lineales tiene una matriz de coeficientes A, un vector de
incgnitas y un vector de trminos independientes.

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
2.18 Operaciones elemento por elemento.Se pueden realizar las operaciones elemento por elemento si es que despus del nombre de
la matriz se pone un punto (.)
As, por ejemplo, si se tienen las siguientes matrices
>> a=[1 2 3;4 5 6;7 8 9];b=[2 3 2;2 3 2;2 3 2];
>> a.*b
ans =
2 6 6
8 15 12
14 24 18
Si no se hubiese puesto el punto, se habra realizado la multiplicacin tradicional de
matrices.

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
Si no se hubiese utilizado el punto decimal el resultado sera el equivalente a la
multiplicacin matricial de una matriz por si misma.
>> a^2
ans =
30 36 42
66 81 96
102 126 150
2.19 Funcin meshgrid.Esta funcin tiene la sintaxis [X,Y]=meshgrid(x,y)
Transforma el dominio especificado por los vectores x e y en arreglos X e Y que pueden ser
usados para la evaluacin de funciones de dos variables y grficas de superficies en 3D. Las
filas del arreglo de salida X son copias del vector x y las columnas del arreglo de salida Y
son copias del vector y. Si solo se utiliza un argumento [X,Y]=meshgrid(x),tanto X como Y
son copias de x. Esta funcin resulta como dos ciclos for i for j anidados.
>> [X,Y] = meshgrid(1:4, 1:4)
X=
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
Y=
1
2
3
4

1
2
3
4

1
2
3
4

1
2
3
4

2.19 Tabla resumen de operaciones.A continuacin se muestra una tabla que resume algunas de las operaciones con vectores, si
es que se tienen los vectores columna x y y con los siguientes valores

21

Dante Pinto Jeria

22

Dante Pinto Jeria

2.20 Exportar e importar a EXCEL.Para exportar a Excel se utiliza el comando xlswrite(archivo,matriz,hoja,rango). Para
importar de Excel se utiliza el comando xlsread(archivo,hoja,rango).
As, por ejemplo, si se quiere exportar la matriz mgica de tamao 5 a una hoja Excel
llamada magia y ubicada en la unidad c:
>> a=magic(5);
>> xlswrite('c:\magia.xlsx',a)
Si se quiere exportar en una hoja especfica y en un rango especfico
>>xlswrite('c:\magia.xlsx',a,'Hoja2','C3:G7')
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

2.3 EJEMPLOS DE APLICACIONES.Ejemplo2.1: Crear una matriz de 4*4 con nmeros aleatorios entre 15 y 85.
>> 15+fix(70*rand(4))
ans =
69 21 55 72
42 24 19 16
31 80 31 18
43 81 39 26
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
Ejemplo2.3: En una matriz mgica, de tamao 6, de cada columna impar encontrar el
mnimo, e indicar su ndice relativo.
>> a=magic(6)
a=
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
>> [m ind]=min(a(:,1:2:end))
m=
3 2 10
ind =
2 3 4
Ejemplo2.4: De la matriz mgica de
de tres.
>> a=1+fix(100*rand(9))
a=
65 19 45 54 48 93
74 37 31 36 24 44
65 63 51 94 85 19
46 79 52 88 20 91
55 9 82 56 23 98
30 93 80 63 18 44
75 78 65 59 23 12
19 49 38 21 44 26
69 44 82 31 32 41
>> mean(a(3:3:end,:)')'
ans =

24

tamao 9, calcular el promedio de las filas mltiplos

60
27
61
72
23
12
30
32
43

51 24
9 46
27 97
81 55
3 53
93 24
74 49
49 63
58 68

Dante Pinto Jeria


62.4444
50.7778
52.0000
Ejemplo2.5: Encontrar el ndice, de referencia continua, correspondiente al mximo valor
de los elementos de la siguiente matriz de 9*9.
a=

>> 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;

3.2 GRFICOS 2D.3.2.1 Funcin plot.Esta es la ms usada y simple de las funciones grficas.
La sintaxis es la siguiente:
plot(Y)
plot(X1,Y1,...,Xn,Yn)
plot(X1,Y1,EspecLinea,...,Xn,Yn,EspecLinea)
plot(X1,Y1, EspecLinea,'NombrePropiedad',ValorPropiedad)
plot(axes_handle,X1,Y1, EspecLinea, 'NombrePropiedad',ValorPropiedad)
h = plot(X1,Y1, EspecLinea, 'NombrePropiedad',ValorPropiedad)

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
--.
*
.
s
26

Continua
Lnea cortada
Lnea y punto
Estrellas
Puntitos
Cuadrados

Dante Pinto Jeria


o
:
x
+
^
v
>
<
d
p
h

crculos
Punteado
Marca
Mas
Tringulo hacia arriba
Tringulo hacia abajo
Tringulo a la derecha
Tringulo a la izquierda
Diamante
Pentagrama
Hexagrama

Ejemplo3.1:
>> x=0:pi/100:3*pi;y=sin(x);
>> plot(x,y,'k-','LineWidth',2);
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1

10

Ejemplo3.2:
>> plot(x,y,'r:','LineWidth',3);

27

Dante Pinto Jeria


1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1

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
coseno

0.8
0.6
0.4

Eje Y

0.2
0
-0.2
-0.4
-0.6
-0.8
-1

5
Eje X

10

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
Como est en forma polar, habr que convertir a la forma rectangular
x=sin(5t/8)cos(t); y=sin(5t/8)sin(t)
>> t=0:pi/100:16*pi;r=sin(5*t/8);x=r.*cos(t); y=r.*sin(t);
>> plot(x,y,'k-','Linewidth',2);axis equal;axis off;set(gcf,'Color',[1,1,1])

Se utiliza la funcin set(gcf,'Color',[1,1,1]) para modificar el color dl fondo del grfico, en


este caso se puso el fondo blanco.
Ejemplo3.5: Graficar con marcadores.
x = -pi:pi/10:pi;y = tan(sin(x)) - sin(tan(x));
plot(x,y,'--rs','LineWidth',2,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',10)

29

Dante Pinto Jeria


3

-1

-2

-3
-4

-3

-2

-1

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
-0.2
-0.4
-0.6
-0.8
-1

-pi

-pi/2

pi/2

pi

3.2.2 Funcin plotyy.Esta funcin grafica con el eje y tanto a la izquierda como a la derecha de la figura.

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

-50

-0.2

-100

-0.4

-150

-0.6

-200

10

12

14

16

18

-0.8
20

Ejemplo3.8: Modificar las lneas del anterior ejemplo.


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');set(H1,'LineStyle','--');set(H2,'LineStyle',':')
200

0.8

150

0.6

100

0.4

50

0.2

-50

-0.2

-100

-0.4

-150

-0.6

-200

10

12

14

16

18

-0.8
20

31

Dante Pinto Jeria

3.2.3 Funcines semilogx y semilogy.Trazan grficas semilogartmicas.


La sintaxis es:
semilogx(Y)
semilogy(...)
semilogx(X1,Y1,...)
semilogx(X1,Y1,EspecLinea,...)
semilogx(...,'NombPropiedad',ValorPropiedad,...)
h = semilogx(...)
h = semilogy(...)

Ejemplo3.9: Trazar una grfica con el eje y logartmico y el eje x normal.


>> x = 0:.1:10;
semilogy(x,10.^x);grid on;
10

10

10

10

10

10

10

3.2.4 Funcin loglog.Traza grficas en escala log-log.


La sintaxis es la siguiente:
loglog(Y)
loglog(X1,Y1,...)
loglog(X1,Y1,EspecLinea,...)
loglog(...,'NombPropiedad',ValorPropiedad,...)
h = loglog(...)

32

10

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

10

-1

10

10

10

10

3.2.5 Funcin polar.Traza grficas polares. Su sintaxis es:


polar(theta,rho)
polar(theta,rho,EspecLinea)
polar(manejados_ejes,...)
h = polar(...)

Ejemplo3.11: Trazar el logo de la cartula.


>> t=0:pi/100:16*pi;r=sin(5*t/8);
>> polar(t,r,'-k');set(gcf,'Color',[1,1,1])

33

Dante Pinto Jeria


90

120

60
0.8
0.6

150

30
0.4
0.2

180

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

120

60
4
3

150

30
2
1

180

210

330

240

300
270

3.2.7 Funcin line.34

Dante Pinto Jeria


Dibuja lneas. La sintaxis es:
line
line(X,Y)
line(X,Y,Z)
line(X,Y,Z,'NombPropiedad',ValorPropiedad,...)
line('XData',x,'YData',y,'ZData',z,...)
h = line(...)

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.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

3.2.8 Funcin hist.Grafica un histograma. La sintaxis es:


n = hist(Y)
n = hist(Y,x)
n = hist(Y,nbins)
[n,xout] = hist(...)
hist(...)
hist(manejador_ejes,...)

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

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

El comando findobj encuentra objetos con valores de propiedades especficos.


3.2.9 Funcin bar, barh.Dibuja barras verticales y horizontales respectivamente. La sintaxis es:
bar(Y)
bar(x,Y)
bar(...,ancho)
bar(...,'estilo')
bar(...,'color_barra')
bar(...,'NombPropiedad',ValorPropiedad,...)

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

Ejemplo3.17:
>> x = -2.9:0.2:2.9;
barh(x,exp(-x.*x),'b')
3

-1

-2

-3

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

3.2.10 Funcin pie.Realiza la grfica de una torta. Su sintaxis es:


pie(X)
pie(X,explotar)
pie(...,etiquetas)
pie(manejador_ejes,...)
h = pie(...)

37

Dante Pinto Jeria

Ejemplo3.18:
>> pie([1 2 1.4 4 1.5 3])
8%
23%
16%

11%

12%

31%

Ejemplo3.19: Dibujar una torta haciendo nfasis en la segunda tajada.


>> x = [1 3 0.5 2.5 2];
explotar = [0 1 0 0 0];
pie(x,explotar)
colormap jet
11%
22%

33%

28%

6%

3.2.13 Funcin patch.Crea uno o ms polgonos llenados. Su sintaxis es:


patch(X,Y,C)
patch(X,Y,Z,C)
patch(FV)
patch(X,Y,C,'NombrePropiedad',ValorPropiedad...)
patch('NombrePropiedad',ValorPropiedad,...)
manejador = patch(...)

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
7
6
5
4
3
2
1
0

Ejemplo3.21: Repetir el anterior ejemplo, pero utilizando vrtices y caras.


>> verts = [2 4; ...
2 8; ...
8 4; ...
8 0; ...
0 4; ...
2 6; ...
2 2; ...
4 2; ...
4 0; ...
5 2; ...
5 0 ];
caras = [ ...
1 2 3; ...
1 3 4; ...
39

Dante Pinto Jeria


5 6 1; ...
7 8 9; ...
11 10 4 ];
>> p=patch('Faces',caras,'Vertices',verts,'FaceColor','r');
8
7
6
5
4
3
2
1
0

3.2.14 Funcin triplot.Esta funcin grafica mallas triangulares. Su sintaxis es:


triplot(TRI,x,y)
triplot(TRI,x,y,color)
h = triplot(...)
triplot(...,'param','value','param','value'...)

Ejemplo3.22: Dados los ndices y coordenadas siguientes, dibujar la malla de elementos


finitos triangulares.
Despus de almacenar las coordenadas y los ndices en las variables coorde e indices,
respectivamente, se teclea:
>> triplot(indices, coorde(:,1), coorde(:,2),'k');

40

Dante Pinto Jeria


10
9
8
7
6
5
4
3
2
1
0

indices =
1
2
2
5
2
3
4
5
1
4
4
8
4
6
7
8
1
7
7
11
7
9
10
11
12
11
11
14
11
9
13
14

coorde =
2.0000
1.0000
0
3.5000
2.5000
5.0000
5.0000
6.5000
8.0000
3.5000
6.5000
5.0000

10

4
4
5
6
7
7
8
9
10
10
11
12
13
13
14
15

5.0000
2.5000
0
3.0000
0.5000
1.0000
5.0000
3.0000
5.0000
7.0000
7.0000
9.0000

41

Dante Pinto Jeria


7.5000
9.0000
10.0000

9.5000
7.5000
10.0000

3.2.15 Funcin step.Dibuja la respuesta paso de sistemas lineales invariantes en el tiempo. Su sintaxis es:
step
step(sys)
step(sys,t)
step(sys1,sys2,...,sysN)
step(sys1,sys2,...,sysN,t)
y = step(sys,t)
[y,t] = step(sys)
[y,t,x] = step(sys) % solamente par modelos en el espacio de estados

Ejemplo3.23: Graficar la respuesta de la funcin de transferencia s/(s2+2s+3) frente a una


entrada escaln (paso).
>> step([1 ],[1 2 3])
Step Response
0.4

0.35

0.3

Amplitude

0.25

0.2

0.15

0.1

0.05

Time (sec)

3.2.16 Funcin impulse.Da la respuesta a una funcin impulso. Su sintaxis es:


impulse
impulse(sys)
impulse(sys,t)

Ejemplo3.24: Graficar la respuesta de la funcin de transferencia s/(s2+2s+3) frente a una


entrada impulso.
>> impulse([1 ],[1 2 3])

42

Dante Pinto Jeria


Impulse Response
0.3

0.25

Amplitude

0.2

0.15

0.1

0.05

-0.05

Time (sec)

3.2.17 Funcin rlocus.Grafica la localizacin de races de una funcin de transferencia. Su sintaxis es:
rlocus(sys)
rlocus(sys1,sys2,...)

Ejemplo3.25: Graficar la localizacin de races de la siguiente funcin de transferencia.

>> h = tf([2 5 1],[1 2 3]);


rlocus(h)
Root Locus
1.5

Imaginary Axis

0.5

-0.5

-1

-1.5
-2.5

-2

-1.5

-1

-0.5

0.5

Real Axis

3.2.18 Funcin subplot.Crea grficos en mosaico. La sintaxis es:


h = subplot(m,n,p) or subplot(mnp)
subplot(m,n,p,'replace')

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

0.9

0.8
0.6

0.8

0.4
0.7

0.2

0.6

0.5

0.5

0.5
1

0.4

0.8

0.3

0.6
0.2

0.4

0.1
0

0.2
0

0.5

Ejemplo3.27:
>> subplot(2,2,1);subplot(2,2,2);subplot(2,2,3);subplot(2,2,4)

44

Dante Pinto Jeria

3.3 GRFICOS 3D.3.3.1 Funcin mesh, meshc, meshz.Realiza la grfica en 3D de mallas. La funcin meshc, dibuja un contorno debajo de la
funcin. La funcin meshz dibuja una cortina debajo del dibujo en 3D.
Su sintaxis es:
mesh(X,Y,Z)
mesh(Z)
mesh(...,C)
mesh(...,'NombreProp',ValorPropiedad,...)
mesh(manejador_ejes,...)
meshc(...)
meshz(...)
h = mesh(...)

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
1

-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.
Ejemplo3.29: Utilizar meshc
>> [X,Y] = meshgrid(-2:.1:2, -2:.1:2);
Z = X .* exp(-X.^2 - Y.^2);
meshc(X,Y,Z)

0.5

-0.5
2
1

2
1

-1

-1
-2

-2

Ejemplo3.30: Utilizar meshz


>> [X,Y] = meshgrid(-2:.1:2, -2:.1:2);
Z = X .* exp(-X.^2 - Y.^2);
meshz(X,Y,Z)

0.5

-0.5
2
1

2
1

-1

-1
-2

46

-2

Dante Pinto Jeria


3.3.2 Funcin surf, surfc.Esta funcin grafica un superficie sombreada, en 3D. Y la funcin surfc, grafica lo mismo,
pero con un contorno en la parte inferior. Su sintaxis es
surf(Z)
surf(Z,C)
surf(X,Y,Z)
surf(X,Y,Z,C)
surf(...,'NombPropiedad',ValorPropiedad)
surf(manejador_ejes,...)
surfc(...)
h = surf(...)

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
1

-1

-1
-2

-2

3.3.3 Funcin polt3.Realiza la grfica de curvas en 3D.La sintaxis es:


plot3(X1,Y1,Z1,...)
plot3(X1,Y1,Z1,EspecLinea,...)
plot3(...,'NombrePropiedad',ValorPropiedad,...)
h = plot3(...)

Ejemplo3.32:
>>t = 0:pi/50:10*pi;plot3(sin(t),cos(t),t);grid on;axis square

47

Dante Pinto Jeria

40

30

20

10

0
1
0.5

1
0.5

-0.5

-0.5
-1

-1

3.3.4 Funcin surfl.Realiza una grfica de una superficie, con iluminacin basada en mapa de colores. Su
sintaxis es:
surfl(Z)
surfl(...,'light')
surfl(...,s)
surfl(X,Y,Z,s,k)
h = surfl(...)

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
0
-2
-3

-1

-2

3.3.5 Funcin contour.Esta funcion grafica los contornos o curvas de nivel de superficies en el espacio. Su sintaxis
es:
contour(Z)
contour(Z,n)
contour(Z,v)
contour(X,Y,Z)
contour(X,Y,Z,n)
contour(X,Y,Z,v)
contour(...,LineSpec)
contour(axes_handle,...)
[C,h] = contour(...)

Ejemplo3.34:
>>[X,Y] = meshgrid([-2:.25:2]);
Z = X.*exp(-X.^2-Y.^2);
contour(X,Y,Z,30)
2
1.5
1
0.5
0
-0.5
-1
-1.5
-2
-2

-1.5

-1

-0.5

0.5

1.5

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

-0 .3

0.1

-0 .3

-0
.4

-0 .2

0.1

0
0.2

-0 .2

0.1

-0.1

50

0.3

0.4

0.3

-0.1

-0 .1

100

0.2

150

-0 .1

.2
-0

0.
2

-0.1

200

50

100

150

200

250

Ejemplo3.36: Realizar la grfica del campo de gradientes.


>> [X,Y] = meshgrid(-2:.2:2);
Z = X.*exp(-X.^2 - Y.^2);
[DX,DY] = gradient(Z,.2,.2);
contour(X,Y,Z);
hold on;
quiver(X,Y,DX,DY);
colormap hsv;
hold off;
2
1.5
1
0.5
0
-0.5
-1
-1.5
-2
-2

50

-1.5

-1

-0.5

0.5

1.5

Dante Pinto Jeria


La funcin quiver realiza la grfica de flechas que pueden representar velocidades o
cambio repentino.
3.3.6 Funcin contour3.Realiza una grfica de contorno en 3D. Su sintaxis es:
contour3(Z)
contour3(Z,n)
contour3(Z,v)
contour3(X,Y,Z)
contour3(X,Y,Z,n)
contour3(X,Y,Z,v)
contour3(...,EspecLinea)
contour3(manejador_ejes,...)
[C,h] = contour3(...)

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

-2

-2

-1.5

-1

-0.5

0.5

1.5

51

Dante Pinto Jeria

CAPTULO IV
CLCULO NUMRICO Y SIMBLICO
4.1 CLCULO NUMRICO.4.1.1 Funcin roots.Encuentra races de polinomios.
La funcin roots(c) calcula las races de los polinomios cuyos coeficientes son los
elementos del vector c. Si c tiene n+1 componentes el polinomio es c(1)*x^n + ... + c(n)*x
+ c(n+1).
Ejemplo4.1: Hallar las races de x4-3x3-x+6=0
>> roots([1 -3 0 -1 6])
ans =
2.8671
1.4273
-0.6472 + 1.0234i
-0.6472 - 1.0234i
4.1.2 Funcin fzero.Calcula las races de funciones continuas de una variable. La sintaxis es:
x = fzero(fun,x0)
x = fzero(fun,x0,opciones)
[x,fval] = fzero(...)
[x,fval,etiquetasalida] = fzero(...)
[x,fval,etiquetasalida,salida] = fzero(...)

Ejemplo4.2: Hallar la raz de x*sin(x)=0, cerca de x0=2


>> f=@(x)x*sin(x);z=fzero(f,2)
z=
3.1416
4.1.3 Funcin poly.Convierte races a polinomios.
Ejemplo4.3: Hallar el polinomio, del cual las races, son x=1,2,3
>> poly([1 2 3])
ans =
1 -6 11 -6
52

Dante Pinto Jeria


Lo que corresponde a x3-6x2+11x-6
4.1.4 Funcin polyval.Evala un polinomio en un valor determinado; y = polyval(p,x) da como resultado el valor
de un polinomio de grado n evaluado en x. El argumento de entrada p es un vector de
longitud n+a, cuyos elementos son los coeficientes en orden descendente de potencia del
polinomio a ser evaluado.
Ejemplo4.4: Evaluar el polinomio x3-6x2+11x-6 en x=6
>> polyval([ 1 -6 11 -6 ],6)
ans =
60
4.1.5 Funcin polyfit.Ajusta un polinomio de grado n a los datos x e y; p = polyfit(x,y,n)
Ejemplo4.5: Ajustar un polinomio de segundo grado para los puntos (1,0);(4,4);(7,0)
>> polyfit([1;4;7],[0;4;0],2)
ans =
-0.4444 3.5556 -3.1111
Lo que corresponde a -0.4444x2+3.5556 x-3.1111
Ejemplo4.6: Realizar el mismo ejemplo anterior, pero con formato racional
>> format rat
>> polyfit([1;4;7],[0;4;0],2)
ans =
-4/9
32/9
-28/9
4.1.6 Funcin conv.Realiza la convolucin y la multiplicacin de polinomios.
Ejemplo4.7: Multiplicar (x+1)*(2x2-3x+5)
>> conv([0 1 1],[2 -3 5])
ans =
0
2
-1
2
5
Lo que corresponde a 2x3-x2+2x+5

53

Dante Pinto Jeria


4.1.7 Funcin deconv.Realiza la deconvolucin. La sintaxis es [q,r] = deconv(v,u) donde q es el cociente y r
es el residuo.
Ejemplo4.8:
>>u = [1 2 3 4];v = [10 20 30];
La convolucin es
>>c = conv(u,v)
c=
10 40 100

160

170

120

Se usa la deconvolucin para recuperar u:


[q,r] = deconv(c,u)
q=
10 20 30
r=
0 0
0
0

4.1.8 Funcin polyder.Realiza la derivada de un polinomio. Su sintaxis es


k = polyder(p)
k = polyder(a,b)
[q,d] = polyder(b,a)

cuando se tiene polyder(a,b), calcula la derivada del producto de a por b.


cuando se tiene [q,d] = polyder(b,a), da como resultado el numerador q y el denominador
d de la derivada del cociente de b/a.
Ejemplo4.9: Hallar la derivada de 4x3-2x2+3x-5
>> polyder([4 -2 3 -5])
ans =
12
-4
3
Ejemplo4.10: Hallar la derivada de (x+1)(x2-2x-1)
>> polyder([1 1],[1 -2 -1])
ans =
3
-2
-3
Ejemplo4.11: Hallar la derivada de (x+1) / (x2-2x-1)
>> [q,d]=polyder([1 1],[1 -2 -1])
q=
-1
-2
1
d=
54

Dante Pinto Jeria


1

-4

4.1.9 Funcin polyint.Integra analticamente un polinomio. La sintaxis es:


polyint(p,k)
polyint(p)

Ejemplo4.12: Integrar el polinomio con una constante k=0


>> polyint([1 2 3 4])
ans =
1/4
2/3
3/2
4
0
Ejemplo4.13: Integrar el polinomio con una constante k=3
>> polyint([1 2 3 4],3)
ans =
1/4
2/3
3/2
4
3
4.1.10 Funcin residue.Convierte entre la expansin en fracciones parciales y coeficientes polinomiales. Su
sintaxis es:
[r,p,k] = residue(b,a)
[b,a] = residue(r,p,k)

Convierte entre expresiones tipo:

a expresiones como la siguiente, cuando no se tienen races repetidas.

o a expresiones como la siguiente, cuando se tienen races repetidas.

Ejemplo4.14: Expandir en fracciones parciales

>> b = [ 5 3 -2 7];a = [-4 0 8 3];


>> [r, p, k] = residue(b,a)
r=
-1.4167
-0.6653
55

Dante Pinto Jeria


1.3320
p=
1.5737
-1.1644
-0.4093
k=
-1.2500
Ejemplo4.15: Realizar el proceso inverso con los anteriores datos.
>> [b,a] = residue(r,p,k)
b=
-1.2500 -0.7500 0.5000 -1.7500
a=
1.0000 -0.0000 -2.0000 -0.7500
Lo cual puede interpretarse como

Debe hacerse notar que el resultado est normalizado para el coeficiente lder en el
denominador.
4.1.11 Funcin feedback.La sintaxis es:
sys = feedback(sys1,sys2)

Ejemplo4.16: Hallar la funcin de transferencia resultante de:

56

Dante Pinto Jeria

>> feedback(tf([2 5 1],[1 2 3]),tf([0 5 10],[0 1 10]))


Transfer function:
2 s^3 + 25 s^2 + 51 s + 10
--------------------------11 s^3 + 57 s^2 + 78 s + 40
Se debe utilizar la funcin tf para convertir a funciones de transferencia.
4.1.12 Funcin series.Encuentra la funcin de transferencia en cascada (serie). La sintaxis es:
series
sys = series(sys1,sys2)
sys = series(sys1,sys2,outputs1,inputs2)

Ejemplo4.17: Hallar la funcin de transferencia en cascada de:


G1(s)=10/(s2+2s+10); G2(s)=5/(s+5)
>> num1=[0 0 10];den1=[1 2 10];num2=[0 5];den2=[1 5];
>> [num,den]=series(num1,den1,num2,den2);
>> printsys(num,den)
num/den =
50
----------------------s^3 + 7 s^2 + 20 s + 50
4.1.13 Funcin parallel.Encuentra la funcin de transferencia en paralelo. La sintaxis es:
57

Dante Pinto Jeria


parallel
sys = parallel(sys1,sys2)
sys = parallel(sys1,sys2,inp1,inp2,out1,out2)
sys = parallel(sys1,sys2,'nombre')

Ejemplo4.18: Hallar la funcin de transferencia en paralelo de:


G1(s)=10/(s2+2s+10); G2(s)=5/(s+5)
>> num1=[0 0 10];den1=[1 2 10];num2=[0 5];den2=[1 5];
>> [num,den]=parallel(num1,den1,num2,den2);
>> printsys(num,den)
num/den =
5 s^2 + 20 s + 100
----------------------s^3 + 7 s^2 + 20 s + 50
4.1.14 Funcin tf2ss.Esta funcin convierte de la funcin de transferencia al espacio de estados. La sintaxis es:
[A,B,C,D] = tf2ss(num,den)
x' = Ax + Bu
y = Cx + Du
del sistema:
num(s)
H(s) = -------den(s)
Ejemplo4.19: Convertir al espacio
s/(s3+14s2+56s+160).
>> num=[0 0 1 0];den=[1 14 56 160];
>> [A,B,C,D]=tf2ss(num,den)
A=

58

de

estados

la

funcin

de

transferencia

Dante Pinto Jeria


-14 -56 -160
1 0 0
0 1 0
B=
1
0
0
C=
0

D=
0
4.1.15 Funcin ss2tf.Esta funcin convierte dl espacio de estados a la funcin de transferencia. La sintaxis es:
[num,den] = ss2tf(A,B,C,D,iu)
iu se debe especificar para sistemas con ms de una entrada. Por ejemplo si el sistema tiene
tres entradas (u1,u2,u3), entonces iu debe ser o 1,2 o 3, donde 1 se refiere a u1, 2 a u2 y 3 a
u3.
NUM(s)
-1
H(s) = -------- = C(sI-A) B + D
DEN(s)
Del sistema:
x' = Ax + Bu
y = Cx + Du
Ejemplo4.20: Obtenga la funcin de transferencia del sistema definido por las siguientes
ecuaciones en el espacio de estados:

>> A=[0 1 0;0 0 1;-5 -25 -5];


>> B=[0;25;-120];
>> C=[1 0 0];
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
4.1.16 Funcin solve.Esta funcin permite resolver sistemas de ecuaciones no lineales. La sintaxis es
SOLVE('ecu1','ecu2',...,'ecuN','var1,var2,...,varN')
SOLVE('ecu1','ecu2',...,'ecuN','var1','var2',...'varN')
Ejemplo4.21:
>> [x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0')
x=
1
3
y=
1
-3/2

4.2 CLCULO SIMBLICO.Matlab realiza clculos simblicos, aunque no es la especialidad de este programa. Por lo
tanto presenta algunas limitaciones frente a otros programas como Mathematica, que si es
especialista en clculo simblico.
Para estas funciones, es necesario, declarar las variables como simblicas, esto se realiza
mediante el comando syms, seguido del nombre de la variable.
As, por ejemplo syms x,y declara como simblicas las variables x e y
4.2.1 Funcin limit.Encuentra el lmite de una funcin. Su sintaxis es:
limit(f,x,a) toma el lmite de la expresin simblica f como x -> a.
limit(f,a) usa symvar(f) como la variable independiente.
limit(f) usa a = 0 como el punto lmite.
limit(f,x,a,'right') or limit(f,x,a,'left') especifica la direccin del lmite lateral
60

Dante Pinto Jeria


Ejemplo4.22:
>> syms x;limit('sin(x)/x',x,0)
ans =
1
4.2.2 Funcin diff.Calcula la derivada simblica. La sintaxis es:
diff(expr)
diff(expr,
diff(expr,
diff(expr,
diff(expr,
diff(expr,

v)
sym('v'))
n)
v, n)
n, v)

diff(expr)

deriva una expresin simblica expr con respecto a su variable libre (sin
ningn valor asignado) determinada por symvar.
diff(expr, v)

y diff(expr, sym('v')) deriva expr con respect a v.

diff(expr, n)

deriva expr n veces. n es un entero positivo

diff(expr, v, n)

y diff(expr, n, v) deriva expr con respecto a v n veces.

Ejemplo4.23:
>> syms x;
>> diff('sin(x)^3',x)
ans =
3*cos(x)*sin(x)^2
4.2.4 Funcin int.Integra una expresin simblica. Su sintaxis es:
int(expr)
int(expr, v)
int(expr, a, b)
int(expr, v, a, b)

int(expr) realiza la integral indefinida de expr con respecto a su variable simblica definida
por symvar.
int(expr, v) realiza la integral indefinida de expr con respecto a su variable simblica
definida por la variable escalar v.

61

Dante Pinto Jeria


int(expr, a, b) realiza la integral definida desde a a b de expr con respecto a la variable
simblica por omisin. a y b son simblicas o doble escalares.
int(expr, v, a, b) realiza la integral definida de expr con respecto a v desde a a b.
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))
4.2.5 Funcin collect.Rene coeficientes. La sintaxis es:
R = collect(S)
R = collect(S,v)
R = collect(S) regresa
arreglo S de polinomios.
R = collect(S,v)

un arreglo de polinomios reunidos para cada polinomio en el

rene trminos que contienen la variable v.

Ejemplo4.25: Simplificar x+1+x+5x2+1-2x-2x2


>> syms x;
>> collect(x+1+x+5*x^2+1-2*x-2*x^2)
ans =
3*x^2 + 2
4.2.6 Funcin expand.Expande simblicamente polinomios y funciones elementales. La sintaxis es:
expand(S)

Ejemplo4.26:
>>syms x;
>>expand((x-2)*(x-4))
ans =
x^2 - 6*x + 8

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]

4.2.7 Funcin factor.Factoriza una expresin de manera simblica.


Ejemplo4.30:
>> factor(1024)
ans =
2 2 2 2 2 2 2 2 2 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)]
4.2.8 Funcin numden.Devuelve el numerador y el denominador. La sintaxis es:
[N,D] = numden(A)

Ejemplo4.33:
>>[n, d] = numden(sym(4/5))
n=
4
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]

4.2.9 Funcin simplify.Realiza la simplificacin simblica. La sintaxis es


R = simplify(S)

Ejemplo4.36:
>>syms x;
>>simplify(sin(x)^2 + cos(x)^2)
ans =
1
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]

4.2.10 Funcin simple.Busca la forma ms simple de una expresin simblica.


Ejemplo4.39:
>>syms x;
>>f = cos(x)^2 + sin(x)^2;
>>f = simple(f)
f=
1
>>g = cos(3*acos(x));
>>g = simple(g)
g=
4*x^3 - 3*x

4.2.11 Funcin subs.Substituye simblicamente, en una expresin simblica o en una matriz. La sintaxis es:
R = subs(S)
R = subs(S, nuevo)
R = subs(S, viejo, nuevo)

Ejemplo4.40:
>>syms a b;
>>subs(a + b, a, 4)
ans =
b+4
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
>>y = dsolve('Dy = -a*y')
y=
C2/exp(a*t)
65

Dante Pinto Jeria


a = 980; C2 = 3; subs(y)
ans =
3/exp(980*t)

4.2.12 Funcin dsolve.Resuelve ecuaciones diferenciales ordinarias de manera simblica. La sintaxis es:
dsolve('eq1','eq2',...,'cond1','cond2',...,'v')
dsolve(...,'IgnoreAnalyticConstraints',value)

Ejemplo4.43: Resolver my+cy+ky=0


>> dsolve('m*D2y=-c*Dy+-k*y')
ans =
C3/exp((t*(c + (c^2 - 4*k*m)^(1/2)))/(2*m)) + C2/exp((t*(c - (c^2 4*k*m)^(1/2)))/(2*m))
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]
Se introduce z.x y z.y par aver los resultados:
z.x
ans =
C20*cos(t) + C19*sin(t)
z.y
ans =
C19*cos(t) - C20*sin(t)

4.2.13 Funcin laplace.Calcula la transformada de Laplace. Su sintaxis es:


laplace(F)
laplace(F, t)
laplace(F, w, z)

Ejemplo4.50:
>> syms t
>> laplace(sin(t))
ans =
1/(s^2 + 1)
Ejemplo4.51:
>> syms x t w;laplace(cos(t*w),x)
ans =
x/(w^2 + x^2)

4.2.14 Funcin ilaplace.Calcula la transformada inversa de Laplace. Su sintaxis es:


F = ilaplace(L)
F = ilaplace(L,y)
F = ilaplace(L,y,x)

Ejemplo4.52
>> g=laplace(exp(t))
g=
1/(s - 1)
>> 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))

4.2.15 Funcin fourier.Calcula la transformada de Fourier. La sintaxis es:


F = fourier(f)
F = fourier(f,v)
F = fourier(f,u,v)

Ejemplo4.54:
>> syms t;
>> fourier(1/t)
ans =
pi*(2*heaviside(-w) - 1)*i

4.2.16 Funcin ifourier.Calcula la transformada inversa de Fourier. La sintaxis es:


f = ifourier(F)
f = ifourier(F,u)
f = ifourier(F,v,u)

Ejemplo4.55:
>> syms t w x
>> ifourier(w*exp(-3*w)*sym('heaviside(w)'))
ans =
1/(2*pi*(- 3 + x*i)^2)

4.2.17 Funcin ztrans.Realiza la transformada Z. Su sintaxis es:


F = ztrans(f)
F = ztrans(f, w)
F = ztrans(f, k, w)

Ejemplo4.56:
>> syms k n w z
>> ztrans(2^n)
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)

4.2.18 Funcin iztrans.Calcula la transformada Z inversa. Su sintaxis es:


f = iztrans(F)
f = iztrans(F,k)
f = iztrans(F,w,k)

Ejemplo4.58:
>> iztrans(z/(z-2))
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


MuPad tiene las siguientes diferencias con Matlab.
Tarea

Sintaxis de MATLAB

Sintaxis de MuPAD

Asignar

:=

Lista de variables

whos

anames(All, User)

Valor numrico de una


expresin

double(expression)

float(expression)

Supresin de la salida

Entrada de una matriz

[x11,x12,x13;
x21,x22,x23]

matrix([[x11,x12,x13],
[x21,x22,x23]])

{a,b,c}

cell array

set

Comandos de algebra Lineal

Nothing extra needed

linalg:: prefix, or use(linalg)

Autocompletar

Tab

Ctrl-space

Igualdad, Desigualdad en
comparacin

==, ~=

=, <>

En cuanto a expresiones, estas son las diferencias:


Expresin de MATLAB Expresin de MuPAD

Inf

infinity

pi

PI

NaN

undefined

fix

trunc

log

ln

asin

arcsin

71

Dante Pinto Jeria

Expresin de MATLAB Expresin de MuPAD

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

Expresin de MATLAB Expresin de MuPAD

catalan

CATALAN

laplace

transform::laplace

ilaplace

transform::invlaplace

ztrans

transform::ztrans

iztrans

transform::invztrans

Copiando variables y expresiones entre el espacio de trabajo (Workspace) y los


Notebooks de MuPad.
Se pueden copiar variables entre el notebook de MuPad a una variable en el worksapce de
Matlab, usando un comando de Matlab y viceversa. Para ello es necesario conocer el
manejador del notebook de Mupad al que se quiere acceder.
La nica forma de asignar variables entre un notebook de MuPad y el workspace de Matlab
es necesario empezar el notebook usndola sintaxis.

nb = mupad;
(Se puede usar cualquier otra variable en lugar de manejador nb) o abrir un archivo de
notebook existente, con

nb = mupad(nombre_archivo);
Para copiar una variable en el espacio de trabajo de Matlab a un notebook de MuPad con el
mismo nombre, se debe introducir, en la lnea de comandos de Matlab:

setVar(notebook_manejador,variable)
Por ejemplo, si nb es el manejador del notebook y z es la variable, se debe teclear

setVar(nb,z)
Para asignar una expresin a una variable en un notebook de MuPad se debe introducir, en
la lnea de comandos de Matlab

setVar(notebook_manejador,'variable',expresin)

73

Dante Pinto Jeria


Por ejemplo, si nb es el manejador del notebook , exp(x) - sin(x) es la expresin, y z es la
variable, se introduce

syms x
setVar(nb,'z',exp(x) - sin(x))
Para copiar una variable simblica en un notebook de MuPad a una variable en el espacio
de trabajo en Matlab, se debe introducir en la lnea de comandos de Matlab

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.
Para entrar al entorno de programacin se debe ir a File, New, Script

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.

Inmediatamente aparece el entorno de programacin

75

Dante Pinto Jeria

En el entorno de programacin se introduce el cdigo del programa, por ejemplo:


disp('Hola Mundo Cruel');

Luego se guarda el programa. Para ejecutar se debe teclear, en el espacio de trabajo, el


nombre del programa y luego ENTER.
>> primero
Hola Mundo Cruel
>>
Para introducir comentarios en el cdigo del programa, se debe utilizar el smbolo %
seguido del comentario. Todo lo que se encuentra en la misma lnea que el smbolo % no
se ejecuta, y aparece en color verde dentro del entorno de programacin.
Para editar un programa se debe teclear lo mismos que s hizo para crearlo, es decir, edit
seguido del nombre del programa.
Los operadores lgicos fundamentales son los siguientes:
Nombre Smbolo Empleo
And
&&
a && b
Or
||
a || b
Not
~
~a
Xor
xor
a xor b

76

Dante Pinto Jeria

5.2 COMANDOS BSICOS DE PROGRAMACIN.Matlab tiene muy pocos comandos para la programacin, y son casi los mismos que los
utilizados en otros lenguajes de programacin, como C/C++.
5.2.1 Comando input.Este comando pide la introduccin de datos por parte del usuario. La sintaxis es:
Resulado_evaluado = input(mensaje)
Resultado_cadena = input(mensaje, 's')

Ejemplo5.1:
>> a=input('Introduzca el valor de la hipotenusa: ')
Introduzca el valor de la hipotenusa: 5
a=
5
Ejemplo5.2: Comprobar que el comando input permite evaluar una expresin.
>> a=input('Introduzca el valor de la hipotenusa: ')
Introduzca el valor de la hipotenusa: 8/9
a=
0.8889
Ejemplo5.3:
>> respuesta = input('Quiere mas? S/N : ', 's');
Quiere mas? S/N : s
>> respuesta
respuesta =
s
Ejemplo5.4: Utilizar un mensaje formateado mediante la funcin sprintf.
>> a=2;b=4;c=input(sprintf('Introduzca el dato numero %i, para la matriz %i : ',a,b))
Introduzca el dato numero 2, para la matriz 4 : 9
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.

5.2.2 Comando disp.Este comando permite la salida por pantalla de algn resultado. Si lo expuesto est
almacenado en una variable, se muestra solo el contenido de la variable y no as el nombre
de la variable.
Ejemplo5.5:
>> a=5;disp(a)
5

5.2.3 Comando if-end, if-else-end.Este es comando condicional, por excelencia. Su sintaxis es:
if expresin, declaraciones, end
if expresion1
declaraciones1
elseif expresion2
declaraciones2
else
declaraciones3
end

Ejemplo5.6: Escribir un programa que indique si un ao es bisiesto. Para esto se debe


considerar lo siguiente: un ao es bisiesto si es mltiplo de 4 excepto que tambin sea
mltiplo de 100 y lo anterior queda descartado si tambin es mltiplo de 400. As, por
ejemplo el ao 2000 es mltiplo de 4 por tanto en primera instancia decimos que es
bisiesto, pero como tambin es mltiplo de 100 decimos que no es bisiesto, pero en
definitiva al ver que es mltiplo de 400 concluimos que si es bisiesto.
La tabla de verdad es la siguiente, donde a, b y c indican la multiplicidad respecto 4,100 y
400.
a

(a^~b)v(a^c)

78

Dante Pinto Jeria


1

%_Programa bisiesto
%_Dante Pinto Jeria, P-10-X-2010
n=input('Introduzca un ao: ');
a=mod(n,4);b=mod(n,100);c=mod(n,400);
if (a && ~b) || (a && c)
disp(sprintf('El ao %i, NO es bisiesto',n));
else
disp(sprintf('El ao %i, ES bisiesto',n));
end

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.

5.2.4 Comando for-end.Este comando realiza un bucle. La sintaxis es:


for indice = valores
declaraciones del programa
:
End

Ejemplo5.7: Mostrar nmeros desde 1 hasta 0 en orden descendente, cada 0.1


>> for s = 1.0: -0.1: 0.0
disp(s)
end
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]);

La ejecucin del programa con 25 puntos da como resultado:

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)

La ejecucin de este programa produce:

-5

40
30

40
30

20
10

20
10

-5

40
30

40
30

20
10

20
10

81

Dante Pinto Jeria

Ejemplo5.10: Mostrar el uso de la funcin subplot.


% Programa mosaigraf, para demostrar el uso de subplot
%_P-13-X-2010
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

La ejecucin de este programa da como resultado:


Grfico 2. Trazado con n = 40 puntos.

0.5

0.5

Grfico 1. Trazado con n = 10 puntos.

-0.5
0
1
2
x
Grfico 3. Trazado con n = 70 puntos.

-1

0
1
2
x
Grfico 4. Trazado con n = 100 puntos.

0.5

0.5

-0.5
-2

82

-2

-2

-0.5
-1

-0.5
-1

0
x

-2

-1

0
x

Dante Pinto Jeria


5.2.5 Comando while-end.Este comando realiza las declaraciones del programa hasta que la clusula prueba sea
falsa. Pero primero realiza la prueba, por tanto si la clusula-prueba es falsa la clusulabucle no se realiza ni una sola vez. Su sintaxis es:
while clasula_prueba
declaraciones del programa
:
end

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.
%_Programa para matriz mgica de nmeros impares
%_Dante Pinto Jeria, P-6-X-2010
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.
La ejecucin de este programa da como resultado:
Introduzca el nmero impar, del tamao de la matriz: 5
La matriz mgica de tamao 5, es:
83

Dante Pinto Jeria


9 2 25 18
3 21 19 12
22 20 13 6
16 14 7 5
15 8 1 24

11
10
4
23
17

5.2.6 Comando switch.Este comando conmuta entre muchos casos basados en expresiones. Su sintaxis es:
switch switch_expr
case case_expr
declaracion, ..., declaracion
case {case_expr1, case_expr2, case_expr3, ...}
declaracion, ..., declaracion
otherwise
declaracion, ..., declaracion
end

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
La funcin lower convierte un a cadena de texto a minsculas. En contraposicin existe la
funcin upper, que convierte una cadena de texto a maysculas.
La ejecucin de este programa da como resultado:
Es aceptable

5.2.7 Comando error.Este comando expone un mensaje y aborta una funcin. Su sintaxis es:
error('msgIdent', 'msgString', v1, v2, ..., vN)
error('msgString', v1, v2, ...)
error('msgString')
error(msgStruct)

5.3 USO DE FUNCIONES.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:
function [ argumentos_de_salida ] = Nombre_Funcion( argumentos_entrada )
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.

Ejemplo5.13: Escribir una funcin para que calcule si un ao es o no bisiesto. Si es


bisiesto devuelva un 1, caso contrario devuelva un 0.
function salida = bisies(anio)
a=mod(anio,4);b=mod(anio,100);c=mod(anio,400);
if (a && ~b) || (a && c)
salida=0;
else
salida=1;
end
end

Para ejecutar esta funcin, se la llama dndole un argumento.


>> bisies(2010)
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

As en la anterior matriz si se le da como datos 2 (que es el nmero de filas y 10 (el ndice)


la funcin devolver fila=2 y columna=5.
function [f,c] = indice(m,I)
c=1;
while I>(c*m)
c=c+1;
end
f=I-(c-1)*m;
end

Para llamar a la funcin se debe utilizar la siguiente sintaxis.


>> [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.
function [x0, y0] = bueno(valor,desde,hasta,cada)
%_valores por omisin
if nargin < 4, cada = .2; end
if nargin < 3, hasta = 2; end
if nargin < 2, desde = -2; end
if nargin < 1
error('myApp:argChk', 'Nmero de argumentos equivocados')
end
x=desde:cada:hasta;
y = x.^valor;
if nargout == 0 %_si la entrada es bueno(), dibuja una grfica
plot(x, y)
else %_si la entrada es [x0,y0]=bueno() da salida a los valores
x0 = x;
y0 = y;
end
end

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.
Se aadi una lnea en la que se interrumpe la funcin y se da un mensaje de error si el
nmero de argumentos es menor que 1.
Al ejecutar la funcin se obtiene:
>> bueno(2)
4
3.5
3
2.5
2
1.5
1
0.5
0
-2

-1.5

-1

-0.5

0.5

1.5

>> [x0,y0]=bueno(2,-2,2,1)
x0 =
-2

-1

y0 =
4

87

Dante Pinto Jeria

CAPTULO VI
USO DE LA INTERFAZ GRFICA DE USUARIO
GUI
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.

b) Hacer clic en el cono


c) Escribir en el espacio de trabajo de Matlab:
>>guide
Despus de cualquiera de los anteriores pasos, aparece:

Presionando OK, aparece la ventana de diseo.

88

Dante Pinto Jeria

La paleta de componentes es la siguiente:

Para configurar adecuadamente el entorno de diseo se utiliza el men Preferences, que


est en File.

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.
Los componentes se arrastran de la paleta hacia el rea de diseo. Haciendo clic en el
componente y definiendo interactivamente el tamao y la posicin en el rea de diseo
mediante el ratn.

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

Para cambiar el tamao del texto, se utiliza el campo FontSize.

El nombre que se le asignar al componente, se cambia mediante el campo Tag.

Tambin haciendo clic con el botn derecho del ratn sobre el componente se da acceso a
View Callbacks.

Esto da acceso al entorno de programacin. Si es la primera vez que se entra a los


Callbakcs, se pedir guardar la aplicacin con algn nombre, luego muestra el entorno de
programacin correspondiente.

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.
Intercambio de datos entre los elementos de la parte grfica y el cdigo fuente.
Los valores de las propiedades de los elementos (color, valor, posicin, etc.) y los valores
de las variables transitorias del programa se almacenan en una estructura, los cuales son
accedidos mediante un nico y mismo puntero para todos.
handles.output = hObject;

handles, es el puntero a los datos de la aplicacin. La definicin de puntero es guardada con


la instruccin:
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.

Asignacin y obtencin de valores de los componentes.


Se realiza mediante los comandos get y set. As, por ejemplo, si se quiere que la variable
numero recoja el valor de un editText se teclea lo siguiente:
numero=get(handles.input1_editText,'String');
Para asignar el valor de la variable numero al statictext llamado text1, se escribe:
set(handles.text1,'String',numero)

6.2 EJEMPLOS DE PROGRAMACIN.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

Luego se aade el cdigo fuente mediante View Callbacks.


function varargout = integra(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @integra_OpeningFcn, ...
'gui_OutputFcn', @integra_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback',
[]);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before integra is made visible.


function integra_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);

% --- 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;

function calcular_Callback(hObject, eventdata, handles)


global expresion;
syms x;
r=char(int(expresion,x));
set(handles.resultado,'String',r);
guidata(hObject,handles);
function entrada_Callback(hObject, eventdata, handles)
global expresion;
expresion=get(hObject,'String');
guidata(hObject,handles);
function entrada_CreateFcn(hObject, eventdata, handles)
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function borrar_Callback(hObject, eventdata, handles)


set(handles.entrada,'String','');
set(handles.resultado,'String','');

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
function lanzar_Callback(hObject, eventdata, handles)
global indi indi1 fin suma
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);
function nuevo_Callback(hObject, eventdata, handles)
global indi indi1 fin
set(handles.informe,'String','');
set(handles.primero,'String','');
set(handles.segundo,'String','');
indi=0;
fin=0;
indi1=1;

6.3 CREACIN DE PROGRAMAS EJECUTABLES .EXE.Matlab permite la creacin de programas con extensin .exe, estos programas pueden
ejecutarse fuera del entorno de Matlab.
Para esto se hace uso del comando mcc, desde la lnea de comandos de Matlab. Por
ejemplo, si se quiere que sea ejecutable el programa integra, se escribe:

El compilador genera los siguientes archivos:

Los cdigos generados estn en lenguaje C.

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:
Hacer clic en el cono
.
Desde el men Start, Simulink y Library Browser.
Teclear en la ventana de comandos de Matlab: >>simulink
Despus, de cualquiera de los pasos anteriores, aparece la siguiente ventana:

Para abrir un nuevo archivo se debe ir a File, New y Model

Con lo que aparece la ventana de diseo:


100

Dante Pinto Jeria

Ahora se pueden arrastrar los conos desde el catlogo de la biblioteca de Simulink


(Simulink Library Browser) hacia la ventana de diseo.
Ejemplo7.1: Representar una funcin seno y la integracin de la funcin seno, al mismo
tiempo.
Para esto se necesita extraer la funcin seno (Sine Wave), que se encuentra en Sources,
luego la funcin integrador (Integrator) que se encuentra en Continuos; luego un Mux y un
Osciloscopio, que se encuentran en Commonly Used Blocks.

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
se hace correr la simulacin, haciendo clic en el botn
, de la ventana de diseo.
Haciendo doble clic en el cono del osciloscopio, en la ventana de diseo

Aparece a continuacin la grfica correspondiente.

La lnea morada es el seno y la lnea amarilla el coseno. Si se quiere un autoescalado se


debe presionar el cono

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.

Para abrir las propiedades del integrador.

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

Si se quiere ver en pantalla completa se debe presionar el cono


, de la ventana del
osciloscopio, con lo que aparece en la ventana de comandos de Matlab:

Para anular esta pantalla completa, se vuelve a presionar

7.2 DISEO DE CONTROLADORES PID CON SIMULINK.Ejemplo7.2: Gobierno de un brazo robtico mediante controladores PID
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:
M Masa de la pelota
0.11 kg
R Radio de la pelota
0.015 m
d Longitud de descentrado
0.03 m
g Aceleracin de la grav.
9.8 m/s^2
L Longitud de la viga
1.0 m
J Momento de inercia de la pelota 9.99e-6 kgm^2
r Posicin de la pelota

La ecuacin Lagrangiana del movimiento de la pelota, est dada por

10
5

Dante Pinto Jeria

Linealizando esta ecuacin en relacin con el ngulo de la viga, alpha = 0, da la siguiente


aproximacin lineal del sistema.

La ecuacin que relaciona el ngulo de la viga, con el ngulo del brazo es aproximada por:

Reemplazando en la ecuacin previa, se tiene:

Sacando la transformada de Laplace a ambos miembros de la ecuacin(tomando como cero


loa parmetros iniciales):

Reagrupando, se halla la funcin de transferencia del ngulo (s) del brazo a la posicin de
la pelota R(s).

En el espacio de estados, el sistema de ecuaciones linealizado se representa por:

106

Dante Pinto Jeria

Pero si es que se quiere controlar el ngulo , se debe utilizar:

La representacin en Matlab es la siguiente:


a) Funcin de transferencia
m
R
g
L
d
J

=
=
=
=
=
=

0.111;
0.015;
-9.8;
1.0;
0.03;
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


La salida debe ser:
num/den =
0.21
---------s^2

Para una entrada paso de 0.25 m, la respuesta de la pelota es:


step(0.25*num,den)

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.
Las entradas para el espacio de estados son las siguientes:
m
R
g
J

=
=
=
=

0.111;
0.015;
-9.8;
9.99e-6;

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)

Como en la grfica de la funcin de transferencia, esta grfica muestra que el sistema es


inestable y que la pelota rodar fuera de la viga.
Uso de controladores PID para solucionar la estabilidad del sistema.
El diagrama de bloques para este ejemplo se muestra en la siguiente figura.

La funcin de transferencia para un controlador PID continuo es:

La salida es la suma de las acciones proporcional, integral, y derivativa, ponderadas de


acuerdo a los parmetros independientes de ganancias P, I, y D. El coeficiente N ubica la
localizacin del polo en el filtro derivativo.
10
9

Dante Pinto Jeria


Para el modelado en Simulink se introducen los siguientes componentes en la ventana de
diseo: una funcin paso (se encuentra en Sources), una ganancia (se encuentra en
Commonly Used Blocks), un sumador (se encuentra en Commonly Used Blocks), un PID (se
encuenttra en Continuous), una funcin de transferencia (se encuentra en Continuous), un
creador de buses (se encuentra en Commonly Used Blocks), un osciloscopio (se encuentra
en Sinks).
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.

Se modificaron las propiedades de la ganancia, Gain=0.25 :

110

Dante Pinto Jeria


Se cambiaron las propiedades de la funcin de transferencia, en los campos Numerator
coefficients y Denominator coefficients.

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

Realizando la simulacin, se observa:

La grfica amarilla es la funcin paso, la celeste es la grfica de la funcin de transferencia


y la morada es la funcin de transferencia mas el controlador PID. Como se puede apreciar
est totalmente inestable. Por lo tanto se debe calibrar el controlado PID. Para ello se hace
doble clic en el bloque PID y aparece la ventana de propiedades del bloque PID.

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

Y luego se presiona Apply y OK.

Despus de hacer correr nuevamente el simulador. Se observa que se ha alcanzado la


estabilidad. La grfica de color morado muestra la funcin controlada por el PID.

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.

Se le cambi el nombre, haciendo doble clic en el bloque.

11
5

Dante Pinto Jeria

Despus de hacer correr el simulador, en el espacio de trabajo de Matlab se teclea:


>> plot(tout,salida.signals.values);grid on
0.7

0.6

0.5

0.4

0.3

0.2

0.1

0.5

1.5

2.5

3.5

4.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

You might also like