SlideShare una empresa de Scribd logo
1 de 116
Descargar para leer sin conexión
CURSO DE MANEJO Y
PROGRAMACIÓN DE
MATLAB
DANTE PINTO JERIA
Potosí- Bolivia
2010
Dante Pinto Jeria
2
Dante Pinto Jeria
3
CAPÍTULO I
PRIMEROS PASOS CON MATLAB
1.1 INTRODUCCIÓN.-
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 cálculo, fundamentalmente, numérico. Aunque
también puede realizar cálculos simbólicos.
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 después 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
4
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 lógica 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
línea.
>> 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 números que son irrelevantes.
Dante Pinto Jeria
5
Matlab permite recuperar las últimas operaciones realizadas, presionando la tecla de la
flecha hacia arriba ↑. Presionando dos veces se recupera la penúltima operación y así
sucesivamente.
1.2.2 Borrado de la pantalla.-
El Command Window se borra mediante clc
1.2.3 Formato de números decimales.-
Matlab permite cambiar el formato de números decimales mediante el comando format.
Por omisión Matlab muestra los resultados con cuatro decimales, ese es el formato short.
>> 3/7
ans =
0.4286
Para cambiar a otro formato con más decimales se debe presionar
>> format long
Luego presionando dos veces la flecha hacia arriba del cursor (para recuperar la penúltima
operación).
>> 3/7
ans =
0.428571428571429
El resultado tiene ahora 15 decimales.
También 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 omisión, simplemente se teclea
>> format
Dante Pinto Jeria
6
1.2.4 Ayuda.-
Se puede obtener ayuda sobre un comando o una función 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 continuación 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
programación, siempre y cuando el nombre de la variable no sea una palabra reservada de
Matlab. El programa discrimina entre mayúsculas y minúsculas. Para asignar un valor a una
variable simplemente se teclea:
>> x=24
x =
24
Se pueden asignar también múltiples variables en una sola línea, 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 Attributes
a 4-D 192 double
ans 1x3 24 double
Dante Pinto Jeria
7
g 1x1 8 double
x 1x1 8 double
y 1x1 8 double
z 1x1 8 double
regresa el nombre de la variable, su tamaño 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 sesión 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
8
CAPÍTULO II
MANEJO DE MATRICES
2.1 INTRODUCCIÓN.-
Una matriz es un arreglo rectangular de elementos. Un caso particular de matriz es un
vector, cuando tiene una sola dimensión. 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 2 3
4 5 6
7 8 9
También 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 9 11 13 15 17 19
>> 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
También 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
También se puede acceder a un elemento de una matriz mediante un solo índice que se
constituye en una referencia continua.
Dante Pinto Jeria
9
>> b(4)=15
b =
-1.0000 -0.5000 0 0.5000 1.0000
8.0000 15.0000 0 0.5000 1.0000
Donde la referencia se la realiza de la siguiente manera
Matlab tiene incorporada una función de generación de cuadrados mágicos, 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 número.
Así por ejemplo:
>> magic(4)
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
Estos cuadrados mágicos tienen siglos de antigüedad, un ejemplo muy conocido de ellos
aparece en el grabado del alemán Alberto Durero llamado Melancolía I, el cual se lo puede
ver también en Matlab, tecleando:
>> load durer;image(X);colormap(map);axis image
Dante Pinto Jeria
10
En esta imagen aparece un cuadrado mágico 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 mágica 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.
Dante Pinto Jeria
11
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 Añadir 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
Dante Pinto Jeria
12
>> 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 mágica, realmente es mágica.
>> 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
apóstrofe sobre el nombre de la misma a’
>> sum(a')
ans =
34 34 34 34
Dante Pinto Jeria
13
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 mágica 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 presentación 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
Dante Pinto Jeria
14
2.5 Reformado de una matriz.-
Se puede reformar una matriz mediante la función reshape. Si la matriz era n*m se
reformula a un tamaño nuevo p*q, siempre y cuando m*n=p*q
Así, por ejemplo, si se quiere reformular el tamaño 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 3
5 7
9 11
2 4
6 8
10 12
2.6 Replicado de una matriz.-
Para esto se utiliza la función 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 1 2
2 3 2 3 2 3
1 2 1 2 1 2
2 3 2 3 2 3
Dante Pinto Jeria
15
2.7 Matriz identidad.-
La matriz identidad se construye mediante la función eye(n) donde n indica el tamaño 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 tamaño.
>> 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 Multiplicación de matrices.-
Se debe cumplir que el número de columnas de la primera sea igual al número de filas de la
segunda, sin esta condición no se pueden multiplicar dos matrices. El producto matricial no
es conmutativo. La matriz resultante tiene, como tamaño, el número de filas de la primera
por el número de columnas de la segunda.
C(m*p)=A(m*n)*B(n*p)
Dante Pinto Jeria
16
>> a
a =
1 2 3
4 5 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 función 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 multiplicación).
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
Dante Pinto Jeria
17
La comprobación se la realiza mediante la multiplicación de las dos matrices.
>> a*b
ans =
1.0000 0.0000 0 0.0000 -0.0000
0.0000 1.0000 0 0.0000 0
0.0000 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
>> 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 número. 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 Reducción escalonada por filas (reduced row echelon form).-
Se realiza mediante la función 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
Dante Pinto Jeria
18
>> 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 número de filas diferentes de cero que tiene la
matriz después de realizar una reducción 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 aritmética de los elementos de una matriz.-
La media aritmética 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 Máximos y mínimos.-
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
Dante Pinto Jeria
19
Para el máximo o mínimo de todos los elementos.
>> max(max(magic(4)))
ans =
16
>> min(min(magic(4)))
ans =
1
2.16 Generación de números aleatorios.-
Se generan números aleatorios con las funciones rand(m,n) y randn(m,n). La segunda da
números 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.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
2.17 Resolución de sistemas de ecuaciones lineales.-
Un sistema de ecuaciones lineales tiene una matriz de coeficientes A, un vector de
incógnitas y un vector de términos independientes.
A X = B
Para resolver un sistema de ecuaciones lineales se pueden utilizar dos métodos.
1) X= A-1
B
2) X=AB
Así, por ejemplo, resolver el sistema
Dante Pinto Jeria
20
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=AB
X =
9.0000
1.0000
5.0000
2.18 Operaciones elemento por elemento.-
Se pueden realizar las operaciones elemento por elemento si es que después 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 habría realizado la multiplicación tradicional de
matrices.
Dante Pinto Jeria
21
También 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 sería el equivalente a la
multiplicación matricial de una matriz por si misma.
>> a^2
ans =
30 36 42
66 81 96
102 126 150
2.19 Función meshgrid.-
Esta función 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 evaluación de funciones de dos variables y gráficas 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 función 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 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
2.19 Tabla resumen de operaciones.-
A continuación 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
Dante Pinto Jeria
22
Dante Pinto Jeria
23
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 mágica de tamaño 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 específica y en un rango específico
>>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 números 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 mágica de 5*5 sumar todos los elementos de las columnas
impares.
Dante Pinto Jeria
24
>> a=magic(5);
>> sum(sum(a(1:2:end,:)))
ans =
195
Ejemplo2.3: En una matriz mágica, de tamaño 6, de cada columna impar encontrar el
mínimo, 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 mágica de tamaño 9, calcular el promedio de las filas múltiplos
de tres.
>> a=1+fix(100*rand(9))
a =
65 19 45 54 48 93 60 51 24
74 37 31 36 24 44 27 9 46
65 63 51 94 85 19 61 27 97
46 79 52 88 20 91 72 81 55
55 9 82 56 23 98 23 3 53
30 93 80 63 18 44 12 93 24
75 78 65 59 23 12 30 74 49
19 49 38 21 44 26 32 49 63
69 44 82 31 32 41 43 58 68
>> mean(a(3:3:end,:)')'
ans =
Dante Pinto Jeria
25
62.4444
50.7778
52.0000
Ejemplo2.5: Encontrar el índice, de referencia continua, correspondiente al máximo valor
de los elementos de la siguiente matriz de 9*9.
a =
>> find(a==max(max(a)))
ans =
50
Dante Pinto Jeria
26
CAPÍTULO III
GRÁFICOS
3.1 INTRODUCCIÓN.-
Matlab tiene muchas rutinas de alto nivel para gráficas. En Matlab las variables
independientes no son generadas de manera automática, sino que el usuario debe
generarlas.
Los gráficos que genera Matlab pueden ser clasificados como en dos y tres dimensiones.
Si se desea mantener un gráfico anterior y sobreponer un gráfico posterior, se debe tecleat
el comando
>> hold on;
Se mantienen los gráficos anteriores, hasta que se teclea
>>hold off;
3.2 GRÁFICOS 2D.-
3.2.1 Función plot.-
Esta es la más usada y simple de las funciones gráficas.
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 línea vienen dados según las siguientes tablas:
y amarillo
m magenta
c cyan
r rojo
g verde
b azul
w blanco
k negro
- Continua
-- Línea cortada
-. Línea y punto
* Estrellas
. Puntitos
s Cuadrados
Dante Pinto Jeria
27
o círculos
: Punteado
x Marca
+ Mas
^ Triángulo hacia arriba
v Triángulo hacia abajo
> Triángulo a la derecha
< Triángulo 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);
Ejemplo3.2:
>> plot(x,y,'r:','LineWidth',3);
0 1 2 3 4 5 6 7 8 9 10
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Dante Pinto Jeria
28
Ejemplo3.3: Graficar el seno y el coseno, con una rejilla, con un título, 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 gráficas, de 0 a 2pi');xlabel('Eje
X');ylabel('Eje Y');grid on;
Para que aparezca el símbolo π se pone dentro de las comillas simples ’…pi’
0 1 2 3 4 5 6 7 8 9 10
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
0 1 2 3 4 5 6 7 8 9 10
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Eje X
EjeY
Dos gráficas, de 0 a 2
seno
coseno
Dante Pinto Jeria
29
Ejemplo3.4: Graficar el logo que aparece en la carátula de este texto, cuya ecuación 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 función set(gcf,'Color',[1,1,1]) para modificar el color dl fondo del gráfico, 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)
Dante Pinto Jeria
30
Ejemplo3.6: Realizar un gráfico, 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'})
3.2.2 Función plotyy.-
Esta función grafica con el eje y tanto a la izquierda como a la derecha de la figura.
-4 -3 -2 -1 0 1 2 3 4
-3
-2
-1
0
1
2
3
-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
Dante Pinto Jeria
31
plotyy(X1,Y1,X2,Y2)
plotyy(X1,Y1,X2,Y2,función)
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');
Ejemplo3.8: Modificar las líneas 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',':')
0 2 4 6 8 10 12 14 16 18 20
-200
-150
-100
-50
0
50
100
150
200
0 2 4 6 8 10 12 14 16 18 20
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
0 2 4 6 8 10 12 14 16 18 20
-200
-150
-100
-50
0
50
100
150
200
0 2 4 6 8 10 12 14 16 18 20
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
Dante Pinto Jeria
32
3.2.3 Funciónes semilogx y semilogy.-
Trazan gráficas semilogarítmicas.
La sintaxis es:
semilogx(Y)
semilogy(...)
semilogx(X1,Y1,...)
semilogx(X1,Y1,EspecLinea,...)
semilogx(...,'NombPropiedad',ValorPropiedad,...)
h = semilogx(...)
h = semilogy(...)
Ejemplo3.9: Trazar una gráfica con el eje y logarítmico y el eje x normal.
>> x = 0:.1:10;
semilogy(x,10.^x);grid on;
3.2.4 Función loglog.-
Traza gráficas en escala log-log.
La sintaxis es la siguiente:
loglog(Y)
loglog(X1,Y1,...)
loglog(X1,Y1,EspecLinea,...)
loglog(...,'NombPropiedad',ValorPropiedad,...)
h = loglog(...)
0 1 2 3 4 5 6 7 8 9 10
10
0
10
2
10
4
10
6
10
8
10
10
Dante Pinto Jeria
33
Ejemplo3.10:
x = logspace(-1,2);
loglog(x,exp(x),'r-s','LineWidth',1);
grid on;
3.2.5 Función polar.-
Traza gráficas polares. Su sintaxis es:
polar(theta,rho)
polar(theta,rho,EspecLinea)
polar(manejados_ejes,...)
h = polar(...)
Ejemplo3.11: Trazar el logo de la carátula.
>> t=0:pi/100:16*pi;r=sin(5*t/8);
>> polar(t,r,'-k');set(gcf,'Color',[1,1,1])
10
-1
10
0
10
1
10
2
10
0
10
10
10
20
10
30
10
40
10
50
Dante Pinto Jeria
34
3.2.6 Función compass.-
La función brújula, grafica flechas saliendo del origen. La sintaxis es:
compass(U,V)
compass(Z)
compass(...,EspecLinea)
compass(manejador_ejes,...)
h = compass(...)
Ejemplo3.12: Realizar la gráfica tipo brújula de los valores propios de una matriz.
>> Z = eig(randn(20,20));
compass(Z);set(gcf,'Color',[1,1,1])
3.2.7 Función line.-
0.2
0.4
0.6
0.8
1
30
210
60
240
90
270
120
300
150
330
180 0
1
2
3
4
5
30
210
60
240
90
270
120
300
150
330
180 0
Dante Pinto Jeria
35
Dibuja líneas. 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)
3.2.8 Función 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)
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Dante Pinto Jeria
36
Ejemplo3.15: Cambiar el color del anterior gráfico de manera que sea rojo con bordes
blancos.
>> h = findobj(gca,'Type','patch');
set(h,'FaceColor','r','EdgeColor','w')
El comando findobj encuentra objetos con valores de propiedades específicos.
3.2.9 Función 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,...)
-5 -4 -3 -2 -1 0 1 2 3 4 5
0
50
100
150
200
250
300
350
400
450
-5 -4 -3 -2 -1 0 1 2 3 4 5
0
50
100
150
200
250
300
350
400
450
Dante Pinto Jeria
37
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')
Ejemplo3.17:
>> x = -2.9:0.2:2.9;
barh(x,exp(-x.*x),'b')
3.2.10 Función pie.-
Realiza la gráfica de una torta. Su sintaxis es:
pie(X)
pie(X,explotar)
pie(...,etiquetas)
pie(manejador_ejes,...)
h = pie(...)
-3 -2 -1 0 1 2 3
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
-3
-2
-1
0
1
2
3
Dante Pinto Jeria
38
Ejemplo3.18:
>> pie([1 2 1.4 4 1.5 3])
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
3.2.13 Función patch.-
Crea uno o más polígonos 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(...)
8%
16%
11%
31%
12%
23%
11%
33%
6%
28%
22%
Dante Pinto Jeria
39
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')
Ejemplo3.21: Repetir el anterior ejemplo, pero utilizando vértices 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; ...
0 1 2 3 4 5 6 7 8
0
1
2
3
4
5
6
7
8
Dante Pinto Jeria
40
5 6 1; ...
7 8 9; ...
11 10 4 ];
>> p=patch('Faces',caras,'Vertices',verts,'FaceColor','r');
3.2.14 Función triplot.-
Esta función 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.
Después de almacenar las coordenadas y los índices en las variables coorde e indices,
respectivamente, se teclea:
>> triplot(indices, coorde(:,1), coorde(:,2),'k');
0 1 2 3 4 5 6 7 8
0
1
2
3
4
5
6
7
8
Dante Pinto Jeria
41
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
0 1 2 3 4 5 6 7 8 9 10
0
1
2
3
4
5
6
7
8
9
10
Dante Pinto Jeria
42
7.5000 9.5000
9.0000 7.5000
10.0000 10.0000
3.2.15 Función 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 función de transferencia s/(s2
+2s+3) frente a una
entrada escalón (paso).
>> step([1 ],[1 2 3])
3.2.16 Función impulse.-
Da la respuesta a una función impulso. Su sintaxis es:
impulse
impulse(sys)
impulse(sys,t)
Ejemplo3.24: Graficar la respuesta de la función de transferencia s/(s2
+2s+3) frente a una
entrada impulso.
>> impulse([1 ],[1 2 3])
0 1 2 3 4 5 6 7 8
0
0.05
0.1
0.15
0.2
0.25
0.3
0.35
0.4
Step Response
Time (sec)
Amplitude
Dante Pinto Jeria
43
3.2.17 Función rlocus.-
Grafica la localización de raíces de una función de transferencia. Su sintaxis es:
rlocus(sys)
rlocus(sys1,sys2,...)
Ejemplo3.25: Graficar la localización de raíces de la siguiente función de transferencia.
>> h = tf([2 5 1],[1 2 3]);
rlocus(h)
3.2.18 Función subplot.-
Crea gráficos en mosaico. La sintaxis es:
h = subplot(m,n,p) or subplot(mnp)
subplot(m,n,p,'replace')
0 1 2 3 4 5 6 7 8
-0.05
0
0.05
0.1
0.15
0.2
0.25
0.3
Impulse Response
Time (sec)
Amplitude
-2.5 -2 -1.5 -1 -0.5 0 0.5
-1.5
-1
-0.5
0
0.5
1
1.5
Root Locus
Real Axis
ImaginaryAxis
Dante Pinto Jeria
44
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)
Ejemplo3.27:
>> subplot(2,2,1);subplot(2,2,2);subplot(2,2,3);subplot(2,2,4)
0 0.5 1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0 0.5 1
0
0.2
0.4
0.6
0.8
1
0 0.5 1
0
0.2
0.4
0.6
0.8
1
Dante Pinto Jeria
45
3.3 GRÁFICOS 3D.-
3.3.1 Función mesh, meshc, meshz.-
Realiza la gráfica en 3D de mallas. La función meshc, dibuja un contorno debajo de la
función. La función 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)
Se puede hacer una animación en tiempo real de la gráfica, haciendo clic en el ícono
-2
-1
0
1
2
-2
-1
0
1
2
-0.5
0
0.5
Dante Pinto Jeria
46
Y luego con las flechas del teclado o con el ratón y presionando el botón 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)
Ejemplo3.30: Utilizar meshz
>> [X,Y] = meshgrid(-2:.1:2, -2:.1:2);
Z = X .* exp(-X.^2 - Y.^2);
meshz(X,Y,Z)
-2
-1
0
1
2
-2
-1
0
1
2
-0.5
0
0.5
-2
-1
0
1
2
-2
-1
0
1
2
-0.5
0
0.5
Dante Pinto Jeria
47
3.3.2 Función surf, surfc.-
Esta función grafica un superficie sombreada, en 3D. Y la función 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)
3.3.3 Función polt3.-
Realiza la gráfica 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
-2
-1
0
1
2
-2
-1
0
1
2
-0.5
0
0.5
Dante Pinto Jeria
48
3.3.4 Función surfl.-
Realiza una gráfica de una superficie, con iluminación 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])
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
0
10
20
30
40
Dante Pinto Jeria
49
3.3.5 Función 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)
-3
-2
-1
0
1
2
3
-2
0
2
-5
0
5
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
Dante Pinto Jeria
50
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])
Ejemplo3.36: Realizar la gráfica 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;
-0.4
-0.3
-0.3
-0.2
-0.2
-0.2
-0.1
-0.1
-0.1
-0.1
-0.1
000
0.1
0.10.1
0.1
0.1
0.2
0.2
0.2
0.3
0.3
0.4
50 100 150 200 250
50
100
150
200
250
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
Dante Pinto Jeria
51
La función quiver realiza la gráfica de flechas que pueden representar velocidades o
cambio repentino.
3.3.6 Función contour3.-
Realiza una gráfica 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
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-2
0
2
-0.5
0
0.5
Dante Pinto Jeria
52
CAPÍTULO IV
CÁLCULO NUMÉRICO Y SIMBÓLICO
4.1 CÁLCULO NUMÉRICO.-
4.1.1 Función roots.-
Encuentra raíces de polinomios.
La función roots(c) calcula las raíces 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 raíces 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 Función fzero.-
Calcula las raíces 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 raíz de x*sin(x)=0, cerca de x0=2
>> f=@(x)x*sin(x);z=fzero(f,2)
z =
3.1416
4.1.3 Función poly.-
Convierte raíces a polinomios.
Ejemplo4.3: Hallar el polinomio, del cual las raíces, son x=1,2,3
>> poly([1 2 3])
ans =
1 -6 11 -6
Dante Pinto Jeria
53
Lo que corresponde a x3
-6x2
+11x-6
4.1.4 Función polyval.-
Evalúa 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 Función 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 Función conv.-
Realiza la convolución y la multiplicación 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
Dante Pinto Jeria
54
4.1.7 Función deconv.-
Realiza la deconvolución. 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 convolución es
>>c = conv(u,v)
c =
10 40 100 160 170 120
Se usa la deconvolución para recuperar u:
[q,r] = deconv(c,u)
q =
10 20 30
r =
0 0 0 0 0 0
4.1.8 Función 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 =
Dante Pinto Jeria
55
1 -4 2 4 1
4.1.9 Función polyint.-
Integra analíticamente 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 Función residue.-
Convierte entre la expansión 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 raíces repetidas.
o a expresiones como la siguiente, cuando se tienen raíces 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
Dante Pinto Jeria
56
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 líder en el
denominador.
4.1.11 Función feedback.-
La sintaxis es:
sys = feedback(sys1,sys2)
Ejemplo4.16: Hallar la función de transferencia resultante de:
Dante Pinto Jeria
57
>> 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 función tf para convertir a funciones de transferencia.
4.1.12 Función series.-
Encuentra la función de transferencia en cascada (serie). La sintaxis es:
series
sys = series(sys1,sys2)
sys = series(sys1,sys2,outputs1,inputs2)
Ejemplo4.17: Hallar la función 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 Función parallel.-
Encuentra la función de transferencia en paralelo. La sintaxis es:
Dante Pinto Jeria
58
parallel
sys = parallel(sys1,sys2)
sys = parallel(sys1,sys2,inp1,inp2,out1,out2)
sys = parallel(sys1,sys2,'nombre')
Ejemplo4.18: Hallar la función 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 Función tf2ss.-
Esta función convierte de la función 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 de estados la función de transferencia
s/(s3
+14s2
+56s+160).
>> num=[0 0 1 0];den=[1 14 56 160];
>> [A,B,C,D]=tf2ss(num,den)
A =
Dante Pinto Jeria
59
-14 -56 -160
1 0 0
0 1 0
B =
1
0
0
C =
0 1 0
D =
0
4.1.15 Función ss2tf.-
Esta función convierte dl espacio de estados a la función de transferencia. La sintaxis es:
[num,den] = ss2tf(A,B,C,D,iu)
iu se debe especificar para sistemas con más 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 función 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];
Dante Pinto Jeria
60
>> 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 Función solve.-
Esta función 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 CÁLCULO SIMBÓLICO.-
Matlab realiza cálculos simbólicos, 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 cálculo simbólico.
Para estas funciones, es necesario, declarar las variables como simbólicas, esto se realiza
mediante el comando syms, seguido del nombre de la variable.
Así, por ejemplo syms x,y declara como simbólicas las variables x e y
4.2.1 Función limit.-
Encuentra el límite de una función. Su sintaxis es:
limit(f,x,a) toma el límite de la expresión simbólica f como x -> a.
limit(f,a) usa symvar(f) como la variable independiente.
limit(f) usa a = 0 como el punto límite.
limit(f,x,a,'right') or limit(f,x,a,'left') especifica la dirección del límite lateral
Dante Pinto Jeria
61
Ejemplo4.22:
>> syms x;limit('sin(x)/x',x,0)
ans =
1
4.2.2 Función diff.-
Calcula la derivada simbólica. La sintaxis es:
diff(expr)
diff(expr, v)
diff(expr, sym('v'))
diff(expr, n)
diff(expr, v, n)
diff(expr, n, v)
diff(expr) deriva una expresión simbólica expr con respecto a su variable libre (sin
ningún 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 Función int.-
Integra una expresión simbólica. 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 simbólica definida
por symvar.
int(expr, v) realiza la integral indefinida de expr con respecto a su variable simbólica
definida por la variable escalar v.
Dante Pinto Jeria
62
int(expr, a, b) realiza la integral definida desde a a b de expr con respecto a la variable
simbólica por omisión. a y b son simbólicas 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 Función collect.-
Reúne coeficientes. La sintaxis es:
R = collect(S)
R = collect(S,v)
R = collect(S) regresa un arreglo de polinomios reunidos para cada polinomio en el
arreglo S de polinomios.
R = collect(S,v) reúne términos 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 Función expand.-
Expande simbólicamente polinomios y funciones elementales. La sintaxis es:
expand(S)
Ejemplo4.26:
>>syms x;
>>expand((x-2)*(x-4))
ans =
x^2 - 6*x + 8
Dante Pinto Jeria
63
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 Función factor.-
Factoriza una expresión de manera simbólica.
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 Función numden.-
Devuelve el numerador y el denominador. La sintaxis es:
[N,D] = numden(A)
Ejemplo4.33:
>>[n, d] = numden(sym(4/5))
n =
4
Dante Pinto Jeria
64
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 Función simplify.-
Realiza la simplificación simbólica. 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)];
Dante Pinto Jeria
65
>>R = simplify(S)
R =
[ x + 3, 4]
4.2.10 Función simple.-
Busca la forma más simple de una expresión simbólica.
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 Función subs.-
Substituye simbólicamente, en una expresión simbólica 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)
Dante Pinto Jeria
66
a = 980; C2 = 3; subs(y)
ans =
3/exp(980*t)
4.2.12 Función dsolve.-
Resuelve ecuaciones diferenciales ordinarias de manera simbólica. 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')
Dante Pinto Jeria
67
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 Función 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 Función 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)
Dante Pinto Jeria
68
Ejemplo4.53:
>> ilaplace(t^(-sym(5/2)),x)
ans =
(4*x^(3/2))/(3*pi^(1/2))
4.2.15 Función 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 Función 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 Función 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:
Dante Pinto Jeria
69
>> ztrans(sin(k*n),w)
ans =
(w*sin(k))/(w^2 - 2*cos(k)*w + 1)
4.2.18 Función 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 cálculos simbólicos y gráficas muy elaboradas.
Tiene su propia sintaxis independiente de Matlab.
Dante Pinto Jeria
70
Dante Pinto Jeria
71
MuPad tiene las siguientes diferencias con Matlab.
Tarea Sintaxis de MATLAB Sintaxis de MuPAD
Asignar = :=
Lista de variables whos anames(All, User)
Valor numérico de una
expresión
double(expression) float(expression)
Supresión 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
comparación
==, ~= =, <>
En cuanto a expresiones, estas son las diferencias:
Expresión de MATLAB Expresión de MuPAD
Inf infinity
pi PI
i I
NaN undefined
fix trunc
log ln
asin arcsin
Dante Pinto Jeria
72
Expresión de MATLAB Expresión 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
Dante Pinto Jeria
73
Expresión de MATLAB Expresión 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 usándola 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 línea 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 expresión a una variable en un notebook de MuPad se debe introducir, en
la línea de comandos de Matlab
setVar(notebook_manejador,'variable',expresión)
Dante Pinto Jeria
74
Por ejemplo, si nb es el manejador del notebook , exp(x) - sin(x) es la expresión, y z es la
variable, se introduce
syms x
setVar(nb,'z',exp(x) - sin(x))
Para copiar una variable simbólica en un notebook de MuPad a una variable en el espacio
de trabajo en Matlab, se debe introducir en la línea 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')
Dante Pinto Jeria
75
CAPÍTULO V
PROGRAMACIÓN EN CÓDIGO M
5.1 INTRODUCCIÓN.-
El lenguaje de programación de Matlab se llama código M. Este lenguaje tiene las mismas
estructuras básicas de programación de cualquier otro lenguaje, es decir, bucles y
condicionales, entradas y salidas, manejo de funciones y procedimientos.
Para entrar al entorno de programación se debe ir a File, New, Script
Otra forma es teclear en la línea 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 programación
Dante Pinto Jeria
76
En el entorno de programación se introduce el código 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 código del programa, se debe utilizar el símbolo %
seguido del comentario. Todo lo que se encuentra en la misma línea que el símbolo % no
se ejecuta, y aparece en color verde dentro del entorno de programación.
Para editar un programa se debe teclear lo mismos que s hizo para crearlo, es decir, edit
seguido del nombre del programa.
Los operadores lógicos fundamentales son los siguientes:
Nombre Símbolo Empleo
And && a && b
Or || a || b
Not ~ ~a
Xor xor a xor b
Dante Pinto Jeria
77
5.2 COMANDOS BÁSICOS DE PROGRAMACIÓN.-
Matlab tiene muy pocos comandos para la programación, y son casi los mismos que los
utilizados en otros lenguajes de programación, como C/C++.
5.2.1 Comando input.-
Este comando pide la introducción 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 expresión.
>> 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 función 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 función 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 función es muy similar a la
Dante Pinto Jeria
78
función printf del lenguaje C. Los caracteres de conversión, que se pueden usar y que
siguen después del símbolo %, 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 algún 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 expresión, declaraciones, end
if expresion1
declaraciones1
elseif expresion2
declaraciones2
else
declaraciones3
end
Ejemplo5.6: Escribir un programa que indique si un año es bisiesto. Para esto se debe
considerar lo siguiente: un año es bisiesto si es múltiplo de 4 excepto que también sea
múltiplo de 100 y lo anterior queda descartado si también es múltiplo de 400. Así, por
ejemplo el año 2000 es múltiplo de 4 por tanto en primera instancia decimos que es
bisiesto, pero como también es múltiplo de 100 decimos que no es bisiesto, pero en
definitiva al ver que es múltiplo 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 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
Dante Pinto Jeria
79
1 0 1 1
1 1 0 0
1 1 1 1
%_Programa bisiesto
%_Dante Pinto Jeria, P-10-X-2010
n=input('Introduzca un año: ');
a=mod(n,4);b=mod(n,100);c=mod(n,400);
if (a && ~b) || (a && c)
disp(sprintf('El año %i, NO es bisiesto',n));
else
disp(sprintf('El año %i, ES bisiesto',n));
end
Este programa utiliza la función mod, que devuelve el residuo de la división 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 números 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
Dante Pinto Jeria
80
Ejemplo5.8: Realizar un programa que dibuje líneas entrecruzadas. Usar dos bucles for
anidados.
%_Programa figura, para dibujar líneas 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 ejecución del programa con 25 puntos da como resultado:
Dante Pinto Jeria
81
Ejemplo5.9: Realizar un programa que muestre una película con los cambios que se le
hacen a una superficie en 3D.
%_Programa peli, realiza una animación de los cambios que se hacen
%_a una gráfica
%_Dante Pinto Jeria
%_P-11-10-2010
Z = peaks; surf(Z);
axis tight
set(gca,'nextplot','replacechildren');
% Graba la película
for j = 1:20
surf(sin(2*pi*j/20)*Z,Z)
F(j) = getframe;
end
% Reproduce la película 10 veces
movie(F,10)
La ejecución de este programa produce:
10
20
30
40
10
20
30
40
-5
0
5
10
20
30
40
10
20
30
40
-5
0
5
Dante Pinto Jeria
82
Ejemplo5.10: Mostrar el uso de la función 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('Gráfico %g. Trazado con n = %g puntos.',k,n10))
xlabel('x')
ylabel('y')
axis([-2,2,-.8,.8])
grid
pause(3);
end
La ejecución de este programa da como resultado:
-2 -1 0 1 2
-0.5
0
0.5
Gráfico 1. Trazado con n = 10 puntos.
x
y
-2 -1 0 1 2
-0.5
0
0.5
Gráfico 2. Trazado con n = 40 puntos.
x
y
-2 -1 0 1 2
-0.5
0
0.5
Gráfico 3. Trazado con n = 70 puntos.
x
y
-2 -1 0 1 2
-0.5
0
0.5
Gráfico 4. Trazado con n = 100 puntos.
x
y
Dante Pinto Jeria
83
5.2.5 Comando while-end.-
Este comando realiza las declaraciones del programa hasta que la cláusula –prueba sea
falsa. Pero primero realiza la prueba, por tanto si la cláusula-prueba es falsa la cláusula-
bucle no se realiza ni una sola vez. Su sintaxis es:
while claúsula_prueba
declaraciones del programa
:
end
Ejemplo5.11: Realizar un programa que forme una matriz mágica impar. Las matrices
mágicas son aquellas que suman el mismo número en filas, columnas y diagonales. Utilizar
el algoritmo de Loubere.
%_Programa para matriz mágica de números impares
%_Dante Pinto Jeria, P-6-X-2010
clc;
n=input('Introduzca el numero impar, del tamaño 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 mágica de tamaño %g, es:',n));
disp(M);
end
La función floor da como resultado el redondeo hacia abajo, así por ejemplo, floor(5/2) da
como resultado 2. La función ceil da como resultado el redondeo hacia arriba, así por
ejemplo ceil(5/2) da como resultado 3.
La ejecución de este programa da como resultado:
Introduzca el número impar, del tamaño de la matriz: 5
La matriz mágica de tamaño 5, es:
Dante Pinto Jeria
84
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
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 función lower convierte un a cadena de texto a minúsculas. En contraposición existe la
función upper, que convierte una cadena de texto a mayúsculas.
La ejecución de este programa da como resultado:
Es aceptable
5.2.7 Comando error.-
Este comando expone un mensaje y aborta una función. Su sintaxis es:
error('msgIdent', 'msgString', v1, v2, ..., vN)
error('msgString', v1, v2, ...)
error('msgString')
error(msgStruct)
5.3 USO DE FUNCIONES.-
Dante Pinto Jeria
85
Las funciones son procedimientos que recogen datos de entrada, los procesan y devuelven
un resultado. La estructura de una función es la siguiente:
function [ argumentos_de_salida ] = Nombre_Funcion( argumentos_entrada )
declaraciones
end
Las variables dentro de la función, son variables locales, es decir, solo tienen valides dentro
de la función, fuera de ella no valen nada. Si es que se desearía que las variables tengan
valor fuera de la función, se las debe declarar como variables globales en el entorno en el
que se llama a la función.
Para ello se utiliza el comando global seguido del nombre de la variable.
Ejemplo5.13: Escribir una función para que calcule si un año 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 función, se la llama dándole 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 función que dados como datos el número de filas de una matriz
y el índice relativo, devuelva la fila y la columna a la que pertenece ese índice.
Dante Pinto Jeria
86
Así en la anterior matriz si se le da como datos 2 (que es el número de filas y 10 (el índice)
la función 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 función se debe utilizar la siguiente sintaxis.
>> [f,c]=indice(2,10)
f =
2
c =
5
Ejemplo5.16: Realizar una función que se llame bueno y permita la entrada de un valor y
realice xvalor
: si el número de entradas es menor que 4,3,2 asigne valores por omisión; si el
llamado a la función se lo realiza de la forma bueno() dibuje la gráfica; 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 omisión
if nargin < 4, cada = .2; end
if nargin < 3, hasta = 2; end
if nargin < 2, desde = -2; end
if nargin < 1
error('myApp:argChk', 'Número de argumentos equivocados')
end
x=desde:cada:hasta;
y = x.^valor;
if nargout == 0 %_si la entrada es bueno(), dibuja una gráfica
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 número de entradas y
salidas de la función respectivamente.
Dante Pinto Jeria
87
La variable nargin indica con cuantos argumentos se llama a la función, 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 añadió una línea en la que se interrumpe la función y se da un mensaje de error si el
número de argumentos es menor que 1.
Al ejecutar la función se obtiene:
>> bueno(2)
>> [x0,y0]=bueno(2,-2,2,1)
x0 =
-2 -1 0 1 2
y0 =
4 1 0 1 4
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
0
0.5
1
1.5
2
2.5
3
3.5
4
Dante Pinto Jeria
88
CAPÍTULO VI
USO DE LA INTERFAZ GRÁFICA DE USUARIO
GUI
6.1 INTRODUCCIÓN.-
Matlab permite la creación de interfaces gráficas. De manera muy similar a lenguajes como
Visual Basic, Visual C, etc.
Par entrar al entorno de diseño 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
Después de cualquiera de los anteriores pasos, aparece:
Presionando OK, aparece la ventana de diseño.
Dante Pinto Jeria
89
La paleta de componentes es la siguiente:
Para configurar adecuadamente el entorno de diseño se utiliza el menú Preferences, que
está en File.
Dante Pinto Jeria
90
En el cuadro de diálogo 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
programación de los GUI, se generen comentarios de manera automática. Estos
comentarios muchas veces confunden y llenan toda la pantalla.
Los componentes se arrastran de la paleta hacia el área de diseño. Haciendo clic en el
componente y definiendo interactivamente el tamaño y la posición en el área de diseño
mediante el ratón.
Haciendo clic con el botón derecho del ratón, sobre el componente, se despliega el cuadro
de diálogo siguiente:
Dante Pinto Jeria
91
El campo Property Inspector da salida al cuadro de diálogo de las propiedades del control.
Aquí se pueden realizar los cambios que se crean convenientes, como el color, el mensaje
desplegado, etc.
Dante Pinto Jeria
92
Para cambiar el tamaño del texto, se utiliza el campo FontSize.
El nombre que se le asignará al componente, se cambia mediante el campo Tag.
También haciendo clic con el botón derecho del ratón sobre el componente se da acceso a
View Callbacks.
Esto da acceso al entorno de programación. Si es la primera vez que se entra a los
Callbakcs, se pedirá guardar la aplicación con algún nombre, luego muestra el entorno de
programación correspondiente.
Dante Pinto Jeria
93
Debajo del la línea resaltada se puede añadir el código 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 código fuente y el .fig tiene la parte gráfica. 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 gráfica y el código fuente.
Los valores de las propiedades de los elementos (color, valor, posición, 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 aplicación. La definición de puntero es guardada con
la instrucción:
guidata(hObject, handles);
Esta instrucción 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 operación 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:
Dante Pinto Jeria
94
handles.valor=valor;
guidata(hObject,handles);
La primera línea añade la variable valor a la estructura de datos de la aplicación apuntada por
handles y la segunda línea guarda el valor.
Asignación y obtención 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 PROGRAMACIÓN.-
Ejemplo6.1: Crear una interfaz gráfica de usuario, que permita la entrada de una función de
x y realice la integral simbólica de esa función.
Primero se crea la interfaz gráfica 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:
Dante Pinto Jeria
95
Luego se añade el código 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)
Dante Pinto Jeria
96
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 código que se añade, el resto es generado
automáticamente por el programa.
La ejecución de este programa da como resultado:
Dante Pinto Jeria
97
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 continúa tirando el dado hasta obtener el número que obtuvo en el primer
lanzamiento o hasta obtener un 7. Si obtiene su primer número 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 diseñar la interfaz gráfica, para ello se insertan en el área de diseño cuatro
Static Text, dos Push Button. Y se cambian los colores y los textos como se muestra a
continuación.
Dante Pinto Jeria
98
Luego, debajo del código generado automáticamente por el programa, se añade el código
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;
Dante Pinto Jeria
99
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 CREACIÓN DE PROGRAMAS EJECUTABLES .EXE.-
Matlab permite la creación de programas con extensión .exe, estos programas pueden
ejecutarse fuera del entorno de Matlab.
Para esto se hace uso del comando mcc, desde la línea de comandos de Matlab. Por
ejemplo, si se quiere que sea ejecutable el programa integra, se escribe:
El compilador genera los siguientes archivos:
Los códigos generados están en lenguaje C.
Dante Pinto Jeria
100
CAPÍTULO VII
USO DE SIMULINK
7.1 INTRODUCCIÓN.-
Simulink es un programa añadido a Matlab. Sirve para programar visualmente un sistema
dinámico (el cual está gobernado por ecuaciones diferenciales) y observar los resultados.
Simulink está conformado por bibliotecas de bloques de construcción, estos bloques se
conectan unos con otros a través de líneas, las cuales transmiten la información. Simulink,
es en esencia un tipo de lenguaje orientado a bloques.
La principal ventaja es la disponibilidad de plantillas de construcción de bloques, las cuales
evitan la necesidad de escribir código para pequeños procesos matemáticos.
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
Después, 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 diseño:
Dante Pinto Jeria
10
1
Ahora se pueden arrastrar los íconos desde el catálogo de la biblioteca de Simulink
(Simulink Library Browser) hacia la ventana de diseño.
Ejemplo7.1: Representar una función seno y la integración de la función seno, al mismo
tiempo.
Para esto se necesita extraer la función seno (Sine Wave), que se encuentra en Sources,
luego la función 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 diseño y luego se conectan con líneas. Una
manera rápida de conectar bloques es marcar el bloque de partida y luego presionando la
tecla control hacer clic con el botón izquierdo en el bloque destino.
Dante Pinto Jeria
102
Luego se guarda este pequeño modelo, con algún nombre, en este caso IntegradorBasico. Y
se hace correr la simulación, haciendo clic en el botón , de la ventana de diseño.
Haciendo doble clic en el ícono del osciloscopio, en la ventana de diseño
Aparece a continuación la gráfica correspondiente.
La línea morada es el seno y la línea amarilla el coseno. Si se quiere un autoescalado se
debe presionar el ícono .
Dante Pinto Jeria
10
3
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 diseño.
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:
Dante Pinto Jeria
104
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 DISEÑO DE CONTROLADORES PID CON SIMULINK.-
Ejemplo7.2: Gobierno de un brazo robótico mediante controladores PID
Se puede utilizar los controladores PID para gobernar (controlar) brazos robóticos como el
mostrado en la figura
Dante Pinto Jeria
10
5
Una pelota es puesta sobre una viga y puede rodar a través de ella. El brazo robótico 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 diseñar un controlador que regule la
posición de la pelota, de manera que esta no se salga de la viga.
Para esta aplicación se asume que la pelota rueda sin deslizamiento y que la fricción entre
la viga y la pelota es despreciable. Las constantes y variables para este ejemplo están
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 Aceleración 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 Posición de la pelota
La ecuación Lagrangiana del movimiento de la pelota, está dada por
Dante Pinto Jeria
106
Linealizando esta ecuación en relación con el ángulo de la viga, alpha = 0, da la siguiente
aproximación lineal del sistema.
La ecuación que relaciona el ángulo de la viga, con el ángulo del brazo es aproximada por:
Reemplazando en la ecuación previa, se tiene:
Sacando la transformada de Laplace a ambos miembros de la ecuación(tomando como cero
loa parámetros iniciales):
Reagrupando, se halla la función de transferencia del ángulo θ(s) del brazo a la posición de
la pelota R(s).
En el espacio de estados, el sistema de ecuaciones linealizado se representa por:
Dante Pinto Jeria
10
7
Pero si es que se quiere controlar el ángulo α, se debe utilizar:
La representación en Matlab es la siguiente:
a) Función 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)
Dante Pinto Jeria
108
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 gráfica 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 algún método para controlar la
posición de la pelota.
b) En el espacio de estados.
Las entradas para el espacio de estados son las siguientes:
m = 0.111;
R = 0.015;
g = -9.8;
J = 9.99e-6;
H = -m*g/(J/(R^2)+m);
A=[0 1 0 0
0 0 H 0
0 0 0 1
Dante Pinto Jeria
10
9
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 gráfica de la función de transferencia, esta gráfica 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 función 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 parámetros independientes de ganancias P, I, y D. El coeficiente N ubica la
localización del polo en el filtro derivativo.
Dante Pinto Jeria
110
Para el modelado en Simulink se introducen los siguientes componentes en la ventana de
diseño: una función 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 función 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 :
Dante Pinto Jeria
11
1
Se cambiaron las propiedades de la función 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
También se modificó el bus, para que tenga tres entradas, en el campo Number of inputs
Dante Pinto Jeria
112
Realizando la simulación, se observa:
La gráfica amarilla es la función paso, la celeste es la gráfica de la función de transferencia
y la morada es la función 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.
Dante Pinto Jeria
11
3
Los parámetros por omisión son: P=1; I=1; D=0. Para el sintonizado del PID se presiona
Tune, y aparece, después de un momento de cálculos
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.
Dante Pinto Jeria
114
Y luego se presiona Apply y OK.
Después de hacer correr nuevamente el simulador. Se observa que se ha alcanzado la
estabilidad. La gráfica de color morado muestra la función controlada por el PID.
Dante Pinto Jeria
11
5
Si es que se quiere sacar los resultados al espacio de trabajo de Matlab, se debe añadir en la
ventana de diseño 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.
Dante Pinto Jeria
116
Después de hacer correr el simulador, en el espacio de trabajo de Matlab se teclea:
>> plot(tout,salida.signals.values);grid on
La variable dependiente es una estructura, para acceder a los valores se pone:
salida.signals.values
La variable independiente se encuentra almacenada en tout.
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7

Más contenido relacionado

La actualidad más candente

La actualidad más candente (15)

Graficas con Matlab
Graficas con Matlab Graficas con Matlab
Graficas con Matlab
 
Matlab (1)
Matlab (1)Matlab (1)
Matlab (1)
 
Curso de introduccion_al_matlab
Curso de introduccion_al_matlabCurso de introduccion_al_matlab
Curso de introduccion_al_matlab
 
Tema 2
Tema 2Tema 2
Tema 2
 
Guia 1 matlab
Guia 1 matlabGuia 1 matlab
Guia 1 matlab
 
Cursos de MATLAB
Cursos de MATLABCursos de MATLAB
Cursos de MATLAB
 
Desarrollo de ejercicios básicos en matlab
Desarrollo de ejercicios básicos en matlabDesarrollo de ejercicios básicos en matlab
Desarrollo de ejercicios básicos en matlab
 
Matlab
MatlabMatlab
Matlab
 
Silabo programación ii 2015-i
Silabo programación ii 2015-iSilabo programación ii 2015-i
Silabo programación ii 2015-i
 
Introduccion y operaciones basicas (matlab)
Introduccion y operaciones basicas (matlab)Introduccion y operaciones basicas (matlab)
Introduccion y operaciones basicas (matlab)
 
Seminario de matlab
Seminario de matlabSeminario de matlab
Seminario de matlab
 
Practica 1
Practica 1Practica 1
Practica 1
 
matlab
matlabmatlab
matlab
 
Matlab
MatlabMatlab
Matlab
 
TIPOS DE DATOS MATLAB
TIPOS DE DATOS MATLABTIPOS DE DATOS MATLAB
TIPOS DE DATOS MATLAB
 

Similar a Curso matlab

Similar a Curso matlab (20)

Matlab
MatlabMatlab
Matlab
 
Matlab
MatlabMatlab
Matlab
 
Matlab
MatlabMatlab
Matlab
 
Manual Matlab 2008
Manual Matlab 2008Manual Matlab 2008
Manual Matlab 2008
 
Matlab -compu_aplicada
Matlab  -compu_aplicadaMatlab  -compu_aplicada
Matlab -compu_aplicada
 
Int_Octave_II_2021.pptx
Int_Octave_II_2021.pptxInt_Octave_II_2021.pptx
Int_Octave_II_2021.pptx
 
matlab
matlabmatlab
matlab
 
Apuntesmatlab
ApuntesmatlabApuntesmatlab
Apuntesmatlab
 
Matlab
Matlab Matlab
Matlab
 
Trabajo matlab
Trabajo matlabTrabajo matlab
Trabajo matlab
 
Practica2
Practica2Practica2
Practica2
 
Matlab scientific scilab_mathematics
Matlab scientific scilab_mathematicsMatlab scientific scilab_mathematics
Matlab scientific scilab_mathematics
 
Matlab
MatlabMatlab
Matlab
 
Matlab1
Matlab1Matlab1
Matlab1
 
Matrices en excel1
Matrices en excel1Matrices en excel1
Matrices en excel1
 
Computacion aplicada
Computacion aplicadaComputacion aplicada
Computacion aplicada
 
Trabajo de computacion
Trabajo de computacionTrabajo de computacion
Trabajo de computacion
 
Curso_de_introduccion_al_matlab.ppt
Curso_de_introduccion_al_matlab.pptCurso_de_introduccion_al_matlab.ppt
Curso_de_introduccion_al_matlab.ppt
 
software de ingenieria Matlab para egresados de civil
software de ingenieria Matlab para egresados de civilsoftware de ingenieria Matlab para egresados de civil
software de ingenieria Matlab para egresados de civil
 
Matlab introducción
Matlab   introducciónMatlab   introducción
Matlab introducción
 

Más de CARLOSNIOBALTODANO

indices de vulneravilidad estructural
indices de vulneravilidad estructuralindices de vulneravilidad estructural
indices de vulneravilidad estructuralCARLOSNIOBALTODANO
 
analisis de vulnerabilidad estructural
analisis de vulnerabilidad estructuralanalisis de vulnerabilidad estructural
analisis de vulnerabilidad estructuralCARLOSNIOBALTODANO
 
metodos de evaluacion sismica capitulo 5
metodos de evaluacion sismica capitulo 5metodos de evaluacion sismica capitulo 5
metodos de evaluacion sismica capitulo 5CARLOSNIOBALTODANO
 
148164203 analisis-sismico-estatico-y-dinamico-de-un-edificio-de-6-pisos-repa...
148164203 analisis-sismico-estatico-y-dinamico-de-un-edificio-de-6-pisos-repa...148164203 analisis-sismico-estatico-y-dinamico-de-un-edificio-de-6-pisos-repa...
148164203 analisis-sismico-estatico-y-dinamico-de-un-edificio-de-6-pisos-repa...CARLOSNIOBALTODANO
 

Más de CARLOSNIOBALTODANO (7)

indices de vulneravilidad estructural
indices de vulneravilidad estructuralindices de vulneravilidad estructural
indices de vulneravilidad estructural
 
Pariona pe
Pariona pePariona pe
Pariona pe
 
analisis de vulnerabilidad estructural
analisis de vulnerabilidad estructuralanalisis de vulnerabilidad estructural
analisis de vulnerabilidad estructural
 
metodos de evaluacion sismica capitulo 5
metodos de evaluacion sismica capitulo 5metodos de evaluacion sismica capitulo 5
metodos de evaluacion sismica capitulo 5
 
148164203 analisis-sismico-estatico-y-dinamico-de-un-edificio-de-6-pisos-repa...
148164203 analisis-sismico-estatico-y-dinamico-de-un-edificio-de-6-pisos-repa...148164203 analisis-sismico-estatico-y-dinamico-de-un-edificio-de-6-pisos-repa...
148164203 analisis-sismico-estatico-y-dinamico-de-un-edificio-de-6-pisos-repa...
 
Zapatas teoria
Zapatas teoriaZapatas teoria
Zapatas teoria
 
Microzonificacion sismica
Microzonificacion sismicaMicrozonificacion sismica
Microzonificacion sismica
 

Último

TALLER PAEC preparatoria directamente de la secretaria de educación pública
TALLER PAEC preparatoria directamente de la secretaria de educación públicaTALLER PAEC preparatoria directamente de la secretaria de educación pública
TALLER PAEC preparatoria directamente de la secretaria de educación públicaSantiagoSanchez353883
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfedsonzav8
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
Propositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicacionesPropositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicaciones025ca20
 
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...SuannNeyraChongShing
 
Tiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IITiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IILauraFernandaValdovi
 
Linealización de sistemas no lineales.pdf
Linealización de sistemas no lineales.pdfLinealización de sistemas no lineales.pdf
Linealización de sistemas no lineales.pdfrolandolazartep
 
Introducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptIntroducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptEduardoCorado
 
Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacajeremiasnifla
 
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAIPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAJAMESDIAZ55
 
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfPresentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfMIGUELANGELCONDORIMA4
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfKEVINYOICIAQUINOSORI
 
Sesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERUSesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERUMarcosAlvarezSalinas
 
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptxguillermosantana15
 
Diapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestaDiapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestajeffsalazarpuente
 
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfTAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfAntonioGonzalezIzqui
 
estadisticasII Metodo-de-la-gran-M.pdf
estadisticasII   Metodo-de-la-gran-M.pdfestadisticasII   Metodo-de-la-gran-M.pdf
estadisticasII Metodo-de-la-gran-M.pdfFlorenciopeaortiz
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALKATHIAMILAGRITOSSANC
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdfFernandaGarca788912
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 

Último (20)

TALLER PAEC preparatoria directamente de la secretaria de educación pública
TALLER PAEC preparatoria directamente de la secretaria de educación públicaTALLER PAEC preparatoria directamente de la secretaria de educación pública
TALLER PAEC preparatoria directamente de la secretaria de educación pública
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdf
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
Propositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicacionesPropositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicaciones
 
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
 
Tiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IITiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo II
 
Linealización de sistemas no lineales.pdf
Linealización de sistemas no lineales.pdfLinealización de sistemas no lineales.pdf
Linealización de sistemas no lineales.pdf
 
Introducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptIntroducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.ppt
 
Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpaca
 
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAIPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
 
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfPresentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdf
 
Sesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERUSesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERU
 
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
 
Diapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestaDiapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuesta
 
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfTAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
 
estadisticasII Metodo-de-la-gran-M.pdf
estadisticasII   Metodo-de-la-gran-M.pdfestadisticasII   Metodo-de-la-gran-M.pdf
estadisticasII Metodo-de-la-gran-M.pdf
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdf
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 

Curso matlab

  • 1. CURSO DE MANEJO Y PROGRAMACIÓN DE MATLAB DANTE PINTO JERIA Potosí- Bolivia 2010
  • 3. Dante Pinto Jeria 3 CAPÍTULO I PRIMEROS PASOS CON MATLAB 1.1 INTRODUCCIÓN.- 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 cálculo, fundamentalmente, numérico. Aunque también puede realizar cálculos simbólicos. 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 después del apuntador (prompt) >> El historial de comandos (Command History), muestra los comandos utilizados en por orden. La ventana de las carpetas actuales (Current Folder).
  • 4. Dante Pinto Jeria 4 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 lógica 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 línea. >> 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 números que son irrelevantes.
  • 5. Dante Pinto Jeria 5 Matlab permite recuperar las últimas operaciones realizadas, presionando la tecla de la flecha hacia arriba ↑. Presionando dos veces se recupera la penúltima operación y así sucesivamente. 1.2.2 Borrado de la pantalla.- El Command Window se borra mediante clc 1.2.3 Formato de números decimales.- Matlab permite cambiar el formato de números decimales mediante el comando format. Por omisión Matlab muestra los resultados con cuatro decimales, ese es el formato short. >> 3/7 ans = 0.4286 Para cambiar a otro formato con más decimales se debe presionar >> format long Luego presionando dos veces la flecha hacia arriba del cursor (para recuperar la penúltima operación). >> 3/7 ans = 0.428571428571429 El resultado tiene ahora 15 decimales. También 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 omisión, simplemente se teclea >> format
  • 6. Dante Pinto Jeria 6 1.2.4 Ayuda.- Se puede obtener ayuda sobre un comando o una función 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 continuación 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 programación, siempre y cuando el nombre de la variable no sea una palabra reservada de Matlab. El programa discrimina entre mayúsculas y minúsculas. Para asignar un valor a una variable simplemente se teclea: >> x=24 x = 24 Se pueden asignar también múltiples variables en una sola línea, 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 Attributes a 4-D 192 double ans 1x3 24 double
  • 7. Dante Pinto Jeria 7 g 1x1 8 double x 1x1 8 double y 1x1 8 double z 1x1 8 double regresa el nombre de la variable, su tamaño 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 sesión 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
  • 8. Dante Pinto Jeria 8 CAPÍTULO II MANEJO DE MATRICES 2.1 INTRODUCCIÓN.- Una matriz es un arreglo rectangular de elementos. Un caso particular de matriz es un vector, cuando tiene una sola dimensión. 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 2 3 4 5 6 7 8 9 También 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 9 11 13 15 17 19 >> 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 También 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 También se puede acceder a un elemento de una matriz mediante un solo índice que se constituye en una referencia continua.
  • 9. Dante Pinto Jeria 9 >> b(4)=15 b = -1.0000 -0.5000 0 0.5000 1.0000 8.0000 15.0000 0 0.5000 1.0000 Donde la referencia se la realiza de la siguiente manera Matlab tiene incorporada una función de generación de cuadrados mágicos, 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 número. Así por ejemplo: >> magic(4) ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 Estos cuadrados mágicos tienen siglos de antigüedad, un ejemplo muy conocido de ellos aparece en el grabado del alemán Alberto Durero llamado Melancolía I, el cual se lo puede ver también en Matlab, tecleando: >> load durer;image(X);colormap(map);axis image
  • 10. Dante Pinto Jeria 10 En esta imagen aparece un cuadrado mágico 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 mágica 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.
  • 11. Dante Pinto Jeria 11 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 Añadir 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
  • 12. Dante Pinto Jeria 12 >> 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 mágica, realmente es mágica. >> 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 apóstrofe sobre el nombre de la misma a’ >> sum(a') ans = 34 34 34 34
  • 13. Dante Pinto Jeria 13 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 mágica 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 presentación 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
  • 14. Dante Pinto Jeria 14 2.5 Reformado de una matriz.- Se puede reformar una matriz mediante la función reshape. Si la matriz era n*m se reformula a un tamaño nuevo p*q, siempre y cuando m*n=p*q Así, por ejemplo, si se quiere reformular el tamaño 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 3 5 7 9 11 2 4 6 8 10 12 2.6 Replicado de una matriz.- Para esto se utiliza la función 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 1 2 2 3 2 3 2 3 1 2 1 2 1 2 2 3 2 3 2 3
  • 15. Dante Pinto Jeria 15 2.7 Matriz identidad.- La matriz identidad se construye mediante la función eye(n) donde n indica el tamaño 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 tamaño. >> 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 Multiplicación de matrices.- Se debe cumplir que el número de columnas de la primera sea igual al número de filas de la segunda, sin esta condición no se pueden multiplicar dos matrices. El producto matricial no es conmutativo. La matriz resultante tiene, como tamaño, el número de filas de la primera por el número de columnas de la segunda. C(m*p)=A(m*n)*B(n*p)
  • 16. Dante Pinto Jeria 16 >> a a = 1 2 3 4 5 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 función 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 multiplicación). 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
  • 17. Dante Pinto Jeria 17 La comprobación se la realiza mediante la multiplicación de las dos matrices. >> a*b ans = 1.0000 0.0000 0 0.0000 -0.0000 0.0000 1.0000 0 0.0000 0 0.0000 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 >> 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 número. 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 Reducción escalonada por filas (reduced row echelon form).- Se realiza mediante la función 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
  • 18. Dante Pinto Jeria 18 >> 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 número de filas diferentes de cero que tiene la matriz después de realizar una reducción 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 aritmética de los elementos de una matriz.- La media aritmética 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 Máximos y mínimos.- 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
  • 19. Dante Pinto Jeria 19 Para el máximo o mínimo de todos los elementos. >> max(max(magic(4))) ans = 16 >> min(min(magic(4))) ans = 1 2.16 Generación de números aleatorios.- Se generan números aleatorios con las funciones rand(m,n) y randn(m,n). La segunda da números 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.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 2.17 Resolución de sistemas de ecuaciones lineales.- Un sistema de ecuaciones lineales tiene una matriz de coeficientes A, un vector de incógnitas y un vector de términos independientes. A X = B Para resolver un sistema de ecuaciones lineales se pueden utilizar dos métodos. 1) X= A-1 B 2) X=AB Así, por ejemplo, resolver el sistema
  • 20. Dante Pinto Jeria 20 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=AB X = 9.0000 1.0000 5.0000 2.18 Operaciones elemento por elemento.- Se pueden realizar las operaciones elemento por elemento si es que después 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 habría realizado la multiplicación tradicional de matrices.
  • 21. Dante Pinto Jeria 21 También 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 sería el equivalente a la multiplicación matricial de una matriz por si misma. >> a^2 ans = 30 36 42 66 81 96 102 126 150 2.19 Función meshgrid.- Esta función 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 evaluación de funciones de dos variables y gráficas 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 función 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 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 2.19 Tabla resumen de operaciones.- A continuación 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
  • 23. Dante Pinto Jeria 23 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 mágica de tamaño 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 específica y en un rango específico >>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 números 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 mágica de 5*5 sumar todos los elementos de las columnas impares.
  • 24. Dante Pinto Jeria 24 >> a=magic(5); >> sum(sum(a(1:2:end,:))) ans = 195 Ejemplo2.3: En una matriz mágica, de tamaño 6, de cada columna impar encontrar el mínimo, 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 mágica de tamaño 9, calcular el promedio de las filas múltiplos de tres. >> a=1+fix(100*rand(9)) a = 65 19 45 54 48 93 60 51 24 74 37 31 36 24 44 27 9 46 65 63 51 94 85 19 61 27 97 46 79 52 88 20 91 72 81 55 55 9 82 56 23 98 23 3 53 30 93 80 63 18 44 12 93 24 75 78 65 59 23 12 30 74 49 19 49 38 21 44 26 32 49 63 69 44 82 31 32 41 43 58 68 >> mean(a(3:3:end,:)')' ans =
  • 25. Dante Pinto Jeria 25 62.4444 50.7778 52.0000 Ejemplo2.5: Encontrar el índice, de referencia continua, correspondiente al máximo valor de los elementos de la siguiente matriz de 9*9. a = >> find(a==max(max(a))) ans = 50
  • 26. Dante Pinto Jeria 26 CAPÍTULO III GRÁFICOS 3.1 INTRODUCCIÓN.- Matlab tiene muchas rutinas de alto nivel para gráficas. En Matlab las variables independientes no son generadas de manera automática, sino que el usuario debe generarlas. Los gráficos que genera Matlab pueden ser clasificados como en dos y tres dimensiones. Si se desea mantener un gráfico anterior y sobreponer un gráfico posterior, se debe tecleat el comando >> hold on; Se mantienen los gráficos anteriores, hasta que se teclea >>hold off; 3.2 GRÁFICOS 2D.- 3.2.1 Función plot.- Esta es la más usada y simple de las funciones gráficas. 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 línea vienen dados según las siguientes tablas: y amarillo m magenta c cyan r rojo g verde b azul w blanco k negro - Continua -- Línea cortada -. Línea y punto * Estrellas . Puntitos s Cuadrados
  • 27. Dante Pinto Jeria 27 o círculos : Punteado x Marca + Mas ^ Triángulo hacia arriba v Triángulo hacia abajo > Triángulo a la derecha < Triángulo 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); Ejemplo3.2: >> plot(x,y,'r:','LineWidth',3); 0 1 2 3 4 5 6 7 8 9 10 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
  • 28. Dante Pinto Jeria 28 Ejemplo3.3: Graficar el seno y el coseno, con una rejilla, con un título, 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 gráficas, de 0 a 2pi');xlabel('Eje X');ylabel('Eje Y');grid on; Para que aparezca el símbolo π se pone dentro de las comillas simples ’…pi’ 0 1 2 3 4 5 6 7 8 9 10 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 0 1 2 3 4 5 6 7 8 9 10 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 Eje X EjeY Dos gráficas, de 0 a 2 seno coseno
  • 29. Dante Pinto Jeria 29 Ejemplo3.4: Graficar el logo que aparece en la carátula de este texto, cuya ecuación 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 función set(gcf,'Color',[1,1,1]) para modificar el color dl fondo del gráfico, 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)
  • 30. Dante Pinto Jeria 30 Ejemplo3.6: Realizar un gráfico, 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'}) 3.2.2 Función plotyy.- Esta función grafica con el eje y tanto a la izquierda como a la derecha de la figura. -4 -3 -2 -1 0 1 2 3 4 -3 -2 -1 0 1 2 3 -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
  • 31. Dante Pinto Jeria 31 plotyy(X1,Y1,X2,Y2) plotyy(X1,Y1,X2,Y2,función) 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'); Ejemplo3.8: Modificar las líneas 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',':') 0 2 4 6 8 10 12 14 16 18 20 -200 -150 -100 -50 0 50 100 150 200 0 2 4 6 8 10 12 14 16 18 20 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 0 2 4 6 8 10 12 14 16 18 20 -200 -150 -100 -50 0 50 100 150 200 0 2 4 6 8 10 12 14 16 18 20 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8
  • 32. Dante Pinto Jeria 32 3.2.3 Funciónes semilogx y semilogy.- Trazan gráficas semilogarítmicas. La sintaxis es: semilogx(Y) semilogy(...) semilogx(X1,Y1,...) semilogx(X1,Y1,EspecLinea,...) semilogx(...,'NombPropiedad',ValorPropiedad,...) h = semilogx(...) h = semilogy(...) Ejemplo3.9: Trazar una gráfica con el eje y logarítmico y el eje x normal. >> x = 0:.1:10; semilogy(x,10.^x);grid on; 3.2.4 Función loglog.- Traza gráficas en escala log-log. La sintaxis es la siguiente: loglog(Y) loglog(X1,Y1,...) loglog(X1,Y1,EspecLinea,...) loglog(...,'NombPropiedad',ValorPropiedad,...) h = loglog(...) 0 1 2 3 4 5 6 7 8 9 10 10 0 10 2 10 4 10 6 10 8 10 10
  • 33. Dante Pinto Jeria 33 Ejemplo3.10: x = logspace(-1,2); loglog(x,exp(x),'r-s','LineWidth',1); grid on; 3.2.5 Función polar.- Traza gráficas polares. Su sintaxis es: polar(theta,rho) polar(theta,rho,EspecLinea) polar(manejados_ejes,...) h = polar(...) Ejemplo3.11: Trazar el logo de la carátula. >> t=0:pi/100:16*pi;r=sin(5*t/8); >> polar(t,r,'-k');set(gcf,'Color',[1,1,1]) 10 -1 10 0 10 1 10 2 10 0 10 10 10 20 10 30 10 40 10 50
  • 34. Dante Pinto Jeria 34 3.2.6 Función compass.- La función brújula, grafica flechas saliendo del origen. La sintaxis es: compass(U,V) compass(Z) compass(...,EspecLinea) compass(manejador_ejes,...) h = compass(...) Ejemplo3.12: Realizar la gráfica tipo brújula de los valores propios de una matriz. >> Z = eig(randn(20,20)); compass(Z);set(gcf,'Color',[1,1,1]) 3.2.7 Función line.- 0.2 0.4 0.6 0.8 1 30 210 60 240 90 270 120 300 150 330 180 0 1 2 3 4 5 30 210 60 240 90 270 120 300 150 330 180 0
  • 35. Dante Pinto Jeria 35 Dibuja líneas. 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) 3.2.8 Función 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) 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
  • 36. Dante Pinto Jeria 36 Ejemplo3.15: Cambiar el color del anterior gráfico de manera que sea rojo con bordes blancos. >> h = findobj(gca,'Type','patch'); set(h,'FaceColor','r','EdgeColor','w') El comando findobj encuentra objetos con valores de propiedades específicos. 3.2.9 Función 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,...) -5 -4 -3 -2 -1 0 1 2 3 4 5 0 50 100 150 200 250 300 350 400 450 -5 -4 -3 -2 -1 0 1 2 3 4 5 0 50 100 150 200 250 300 350 400 450
  • 37. Dante Pinto Jeria 37 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') Ejemplo3.17: >> x = -2.9:0.2:2.9; barh(x,exp(-x.*x),'b') 3.2.10 Función pie.- Realiza la gráfica de una torta. Su sintaxis es: pie(X) pie(X,explotar) pie(...,etiquetas) pie(manejador_ejes,...) h = pie(...) -3 -2 -1 0 1 2 3 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 -3 -2 -1 0 1 2 3
  • 38. Dante Pinto Jeria 38 Ejemplo3.18: >> pie([1 2 1.4 4 1.5 3]) 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 3.2.13 Función patch.- Crea uno o más polígonos 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(...) 8% 16% 11% 31% 12% 23% 11% 33% 6% 28% 22%
  • 39. Dante Pinto Jeria 39 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') Ejemplo3.21: Repetir el anterior ejemplo, pero utilizando vértices 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; ... 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
  • 40. Dante Pinto Jeria 40 5 6 1; ... 7 8 9; ... 11 10 4 ]; >> p=patch('Faces',caras,'Vertices',verts,'FaceColor','r'); 3.2.14 Función triplot.- Esta función 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. Después de almacenar las coordenadas y los índices en las variables coorde e indices, respectivamente, se teclea: >> triplot(indices, coorde(:,1), coorde(:,2),'k'); 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
  • 41. Dante Pinto Jeria 41 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 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 10
  • 42. Dante Pinto Jeria 42 7.5000 9.5000 9.0000 7.5000 10.0000 10.0000 3.2.15 Función 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 función de transferencia s/(s2 +2s+3) frente a una entrada escalón (paso). >> step([1 ],[1 2 3]) 3.2.16 Función impulse.- Da la respuesta a una función impulso. Su sintaxis es: impulse impulse(sys) impulse(sys,t) Ejemplo3.24: Graficar la respuesta de la función de transferencia s/(s2 +2s+3) frente a una entrada impulso. >> impulse([1 ],[1 2 3]) 0 1 2 3 4 5 6 7 8 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 Step Response Time (sec) Amplitude
  • 43. Dante Pinto Jeria 43 3.2.17 Función rlocus.- Grafica la localización de raíces de una función de transferencia. Su sintaxis es: rlocus(sys) rlocus(sys1,sys2,...) Ejemplo3.25: Graficar la localización de raíces de la siguiente función de transferencia. >> h = tf([2 5 1],[1 2 3]); rlocus(h) 3.2.18 Función subplot.- Crea gráficos en mosaico. La sintaxis es: h = subplot(m,n,p) or subplot(mnp) subplot(m,n,p,'replace') 0 1 2 3 4 5 6 7 8 -0.05 0 0.05 0.1 0.15 0.2 0.25 0.3 Impulse Response Time (sec) Amplitude -2.5 -2 -1.5 -1 -0.5 0 0.5 -1.5 -1 -0.5 0 0.5 1 1.5 Root Locus Real Axis ImaginaryAxis
  • 44. Dante Pinto Jeria 44 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) Ejemplo3.27: >> subplot(2,2,1);subplot(2,2,2);subplot(2,2,3);subplot(2,2,4) 0 0.5 1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 0.5 1 0 0.2 0.4 0.6 0.8 1 0 0.5 1 0 0.2 0.4 0.6 0.8 1
  • 45. Dante Pinto Jeria 45 3.3 GRÁFICOS 3D.- 3.3.1 Función mesh, meshc, meshz.- Realiza la gráfica en 3D de mallas. La función meshc, dibuja un contorno debajo de la función. La función 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) Se puede hacer una animación en tiempo real de la gráfica, haciendo clic en el ícono -2 -1 0 1 2 -2 -1 0 1 2 -0.5 0 0.5
  • 46. Dante Pinto Jeria 46 Y luego con las flechas del teclado o con el ratón y presionando el botón 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) Ejemplo3.30: Utilizar meshz >> [X,Y] = meshgrid(-2:.1:2, -2:.1:2); Z = X .* exp(-X.^2 - Y.^2); meshz(X,Y,Z) -2 -1 0 1 2 -2 -1 0 1 2 -0.5 0 0.5 -2 -1 0 1 2 -2 -1 0 1 2 -0.5 0 0.5
  • 47. Dante Pinto Jeria 47 3.3.2 Función surf, surfc.- Esta función grafica un superficie sombreada, en 3D. Y la función 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) 3.3.3 Función polt3.- Realiza la gráfica 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 -2 -1 0 1 2 -2 -1 0 1 2 -0.5 0 0.5
  • 48. Dante Pinto Jeria 48 3.3.4 Función surfl.- Realiza una gráfica de una superficie, con iluminación 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]) -1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1 0 10 20 30 40
  • 49. Dante Pinto Jeria 49 3.3.5 Función 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) -3 -2 -1 0 1 2 3 -2 0 2 -5 0 5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2
  • 50. Dante Pinto Jeria 50 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]) Ejemplo3.36: Realizar la gráfica 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; -0.4 -0.3 -0.3 -0.2 -0.2 -0.2 -0.1 -0.1 -0.1 -0.1 -0.1 000 0.1 0.10.1 0.1 0.1 0.2 0.2 0.2 0.3 0.3 0.4 50 100 150 200 250 50 100 150 200 250 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2
  • 51. Dante Pinto Jeria 51 La función quiver realiza la gráfica de flechas que pueden representar velocidades o cambio repentino. 3.3.6 Función contour3.- Realiza una gráfica 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 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 -2 0 2 -0.5 0 0.5
  • 52. Dante Pinto Jeria 52 CAPÍTULO IV CÁLCULO NUMÉRICO Y SIMBÓLICO 4.1 CÁLCULO NUMÉRICO.- 4.1.1 Función roots.- Encuentra raíces de polinomios. La función roots(c) calcula las raíces 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 raíces 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 Función fzero.- Calcula las raíces 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 raíz de x*sin(x)=0, cerca de x0=2 >> f=@(x)x*sin(x);z=fzero(f,2) z = 3.1416 4.1.3 Función poly.- Convierte raíces a polinomios. Ejemplo4.3: Hallar el polinomio, del cual las raíces, son x=1,2,3 >> poly([1 2 3]) ans = 1 -6 11 -6
  • 53. Dante Pinto Jeria 53 Lo que corresponde a x3 -6x2 +11x-6 4.1.4 Función polyval.- Evalúa 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 Función 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 Función conv.- Realiza la convolución y la multiplicación 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
  • 54. Dante Pinto Jeria 54 4.1.7 Función deconv.- Realiza la deconvolución. 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 convolución es >>c = conv(u,v) c = 10 40 100 160 170 120 Se usa la deconvolución para recuperar u: [q,r] = deconv(c,u) q = 10 20 30 r = 0 0 0 0 0 0 4.1.8 Función 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 =
  • 55. Dante Pinto Jeria 55 1 -4 2 4 1 4.1.9 Función polyint.- Integra analíticamente 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 Función residue.- Convierte entre la expansión 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 raíces repetidas. o a expresiones como la siguiente, cuando se tienen raíces 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
  • 56. Dante Pinto Jeria 56 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 líder en el denominador. 4.1.11 Función feedback.- La sintaxis es: sys = feedback(sys1,sys2) Ejemplo4.16: Hallar la función de transferencia resultante de:
  • 57. Dante Pinto Jeria 57 >> 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 función tf para convertir a funciones de transferencia. 4.1.12 Función series.- Encuentra la función de transferencia en cascada (serie). La sintaxis es: series sys = series(sys1,sys2) sys = series(sys1,sys2,outputs1,inputs2) Ejemplo4.17: Hallar la función 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 Función parallel.- Encuentra la función de transferencia en paralelo. La sintaxis es:
  • 58. Dante Pinto Jeria 58 parallel sys = parallel(sys1,sys2) sys = parallel(sys1,sys2,inp1,inp2,out1,out2) sys = parallel(sys1,sys2,'nombre') Ejemplo4.18: Hallar la función 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 Función tf2ss.- Esta función convierte de la función 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 de estados la función de transferencia s/(s3 +14s2 +56s+160). >> num=[0 0 1 0];den=[1 14 56 160]; >> [A,B,C,D]=tf2ss(num,den) A =
  • 59. Dante Pinto Jeria 59 -14 -56 -160 1 0 0 0 1 0 B = 1 0 0 C = 0 1 0 D = 0 4.1.15 Función ss2tf.- Esta función convierte dl espacio de estados a la función de transferencia. La sintaxis es: [num,den] = ss2tf(A,B,C,D,iu) iu se debe especificar para sistemas con más 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 función 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];
  • 60. Dante Pinto Jeria 60 >> 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 Función solve.- Esta función 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 CÁLCULO SIMBÓLICO.- Matlab realiza cálculos simbólicos, 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 cálculo simbólico. Para estas funciones, es necesario, declarar las variables como simbólicas, esto se realiza mediante el comando syms, seguido del nombre de la variable. Así, por ejemplo syms x,y declara como simbólicas las variables x e y 4.2.1 Función limit.- Encuentra el límite de una función. Su sintaxis es: limit(f,x,a) toma el límite de la expresión simbólica f como x -> a. limit(f,a) usa symvar(f) como la variable independiente. limit(f) usa a = 0 como el punto límite. limit(f,x,a,'right') or limit(f,x,a,'left') especifica la dirección del límite lateral
  • 61. Dante Pinto Jeria 61 Ejemplo4.22: >> syms x;limit('sin(x)/x',x,0) ans = 1 4.2.2 Función diff.- Calcula la derivada simbólica. La sintaxis es: diff(expr) diff(expr, v) diff(expr, sym('v')) diff(expr, n) diff(expr, v, n) diff(expr, n, v) diff(expr) deriva una expresión simbólica expr con respecto a su variable libre (sin ningún 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 Función int.- Integra una expresión simbólica. 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 simbólica definida por symvar. int(expr, v) realiza la integral indefinida de expr con respecto a su variable simbólica definida por la variable escalar v.
  • 62. Dante Pinto Jeria 62 int(expr, a, b) realiza la integral definida desde a a b de expr con respecto a la variable simbólica por omisión. a y b son simbólicas 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 Función collect.- Reúne coeficientes. La sintaxis es: R = collect(S) R = collect(S,v) R = collect(S) regresa un arreglo de polinomios reunidos para cada polinomio en el arreglo S de polinomios. R = collect(S,v) reúne términos 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 Función expand.- Expande simbólicamente polinomios y funciones elementales. La sintaxis es: expand(S) Ejemplo4.26: >>syms x; >>expand((x-2)*(x-4)) ans = x^2 - 6*x + 8
  • 63. Dante Pinto Jeria 63 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 Función factor.- Factoriza una expresión de manera simbólica. 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 Función numden.- Devuelve el numerador y el denominador. La sintaxis es: [N,D] = numden(A) Ejemplo4.33: >>[n, d] = numden(sym(4/5)) n = 4
  • 64. Dante Pinto Jeria 64 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 Función simplify.- Realiza la simplificación simbólica. 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)];
  • 65. Dante Pinto Jeria 65 >>R = simplify(S) R = [ x + 3, 4] 4.2.10 Función simple.- Busca la forma más simple de una expresión simbólica. 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 Función subs.- Substituye simbólicamente, en una expresión simbólica 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)
  • 66. Dante Pinto Jeria 66 a = 980; C2 = 3; subs(y) ans = 3/exp(980*t) 4.2.12 Función dsolve.- Resuelve ecuaciones diferenciales ordinarias de manera simbólica. 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')
  • 67. Dante Pinto Jeria 67 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 Función 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 Función 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)
  • 68. Dante Pinto Jeria 68 Ejemplo4.53: >> ilaplace(t^(-sym(5/2)),x) ans = (4*x^(3/2))/(3*pi^(1/2)) 4.2.15 Función 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 Función 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 Función 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:
  • 69. Dante Pinto Jeria 69 >> ztrans(sin(k*n),w) ans = (w*sin(k))/(w^2 - 2*cos(k)*w + 1) 4.2.18 Función 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 cálculos simbólicos y gráficas muy elaboradas. Tiene su propia sintaxis independiente de Matlab.
  • 71. Dante Pinto Jeria 71 MuPad tiene las siguientes diferencias con Matlab. Tarea Sintaxis de MATLAB Sintaxis de MuPAD Asignar = := Lista de variables whos anames(All, User) Valor numérico de una expresión double(expression) float(expression) Supresión 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 comparación ==, ~= =, <> En cuanto a expresiones, estas son las diferencias: Expresión de MATLAB Expresión de MuPAD Inf infinity pi PI i I NaN undefined fix trunc log ln asin arcsin
  • 72. Dante Pinto Jeria 72 Expresión de MATLAB Expresión 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
  • 73. Dante Pinto Jeria 73 Expresión de MATLAB Expresión 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 usándola 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 línea 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 expresión a una variable en un notebook de MuPad se debe introducir, en la línea de comandos de Matlab setVar(notebook_manejador,'variable',expresión)
  • 74. Dante Pinto Jeria 74 Por ejemplo, si nb es el manejador del notebook , exp(x) - sin(x) es la expresión, y z es la variable, se introduce syms x setVar(nb,'z',exp(x) - sin(x)) Para copiar una variable simbólica en un notebook de MuPad a una variable en el espacio de trabajo en Matlab, se debe introducir en la línea 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')
  • 75. Dante Pinto Jeria 75 CAPÍTULO V PROGRAMACIÓN EN CÓDIGO M 5.1 INTRODUCCIÓN.- El lenguaje de programación de Matlab se llama código M. Este lenguaje tiene las mismas estructuras básicas de programación de cualquier otro lenguaje, es decir, bucles y condicionales, entradas y salidas, manejo de funciones y procedimientos. Para entrar al entorno de programación se debe ir a File, New, Script Otra forma es teclear en la línea 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 programación
  • 76. Dante Pinto Jeria 76 En el entorno de programación se introduce el código 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 código del programa, se debe utilizar el símbolo % seguido del comentario. Todo lo que se encuentra en la misma línea que el símbolo % no se ejecuta, y aparece en color verde dentro del entorno de programación. Para editar un programa se debe teclear lo mismos que s hizo para crearlo, es decir, edit seguido del nombre del programa. Los operadores lógicos fundamentales son los siguientes: Nombre Símbolo Empleo And && a && b Or || a || b Not ~ ~a Xor xor a xor b
  • 77. Dante Pinto Jeria 77 5.2 COMANDOS BÁSICOS DE PROGRAMACIÓN.- Matlab tiene muy pocos comandos para la programación, y son casi los mismos que los utilizados en otros lenguajes de programación, como C/C++. 5.2.1 Comando input.- Este comando pide la introducción 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 expresión. >> 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 función 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 función 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 función es muy similar a la
  • 78. Dante Pinto Jeria 78 función printf del lenguaje C. Los caracteres de conversión, que se pueden usar y que siguen después del símbolo %, 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 algún 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 expresión, declaraciones, end if expresion1 declaraciones1 elseif expresion2 declaraciones2 else declaraciones3 end Ejemplo5.6: Escribir un programa que indique si un año es bisiesto. Para esto se debe considerar lo siguiente: un año es bisiesto si es múltiplo de 4 excepto que también sea múltiplo de 100 y lo anterior queda descartado si también es múltiplo de 400. Así, por ejemplo el año 2000 es múltiplo de 4 por tanto en primera instancia decimos que es bisiesto, pero como también es múltiplo de 100 decimos que no es bisiesto, pero en definitiva al ver que es múltiplo 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 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
  • 79. Dante Pinto Jeria 79 1 0 1 1 1 1 0 0 1 1 1 1 %_Programa bisiesto %_Dante Pinto Jeria, P-10-X-2010 n=input('Introduzca un año: '); a=mod(n,4);b=mod(n,100);c=mod(n,400); if (a && ~b) || (a && c) disp(sprintf('El año %i, NO es bisiesto',n)); else disp(sprintf('El año %i, ES bisiesto',n)); end Este programa utiliza la función mod, que devuelve el residuo de la división 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 números 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
  • 80. Dante Pinto Jeria 80 Ejemplo5.8: Realizar un programa que dibuje líneas entrecruzadas. Usar dos bucles for anidados. %_Programa figura, para dibujar líneas 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 ejecución del programa con 25 puntos da como resultado:
  • 81. Dante Pinto Jeria 81 Ejemplo5.9: Realizar un programa que muestre una película con los cambios que se le hacen a una superficie en 3D. %_Programa peli, realiza una animación de los cambios que se hacen %_a una gráfica %_Dante Pinto Jeria %_P-11-10-2010 Z = peaks; surf(Z); axis tight set(gca,'nextplot','replacechildren'); % Graba la película for j = 1:20 surf(sin(2*pi*j/20)*Z,Z) F(j) = getframe; end % Reproduce la película 10 veces movie(F,10) La ejecución de este programa produce: 10 20 30 40 10 20 30 40 -5 0 5 10 20 30 40 10 20 30 40 -5 0 5
  • 82. Dante Pinto Jeria 82 Ejemplo5.10: Mostrar el uso de la función 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('Gráfico %g. Trazado con n = %g puntos.',k,n10)) xlabel('x') ylabel('y') axis([-2,2,-.8,.8]) grid pause(3); end La ejecución de este programa da como resultado: -2 -1 0 1 2 -0.5 0 0.5 Gráfico 1. Trazado con n = 10 puntos. x y -2 -1 0 1 2 -0.5 0 0.5 Gráfico 2. Trazado con n = 40 puntos. x y -2 -1 0 1 2 -0.5 0 0.5 Gráfico 3. Trazado con n = 70 puntos. x y -2 -1 0 1 2 -0.5 0 0.5 Gráfico 4. Trazado con n = 100 puntos. x y
  • 83. Dante Pinto Jeria 83 5.2.5 Comando while-end.- Este comando realiza las declaraciones del programa hasta que la cláusula –prueba sea falsa. Pero primero realiza la prueba, por tanto si la cláusula-prueba es falsa la cláusula- bucle no se realiza ni una sola vez. Su sintaxis es: while claúsula_prueba declaraciones del programa : end Ejemplo5.11: Realizar un programa que forme una matriz mágica impar. Las matrices mágicas son aquellas que suman el mismo número en filas, columnas y diagonales. Utilizar el algoritmo de Loubere. %_Programa para matriz mágica de números impares %_Dante Pinto Jeria, P-6-X-2010 clc; n=input('Introduzca el numero impar, del tamaño 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 mágica de tamaño %g, es:',n)); disp(M); end La función floor da como resultado el redondeo hacia abajo, así por ejemplo, floor(5/2) da como resultado 2. La función ceil da como resultado el redondeo hacia arriba, así por ejemplo ceil(5/2) da como resultado 3. La ejecución de este programa da como resultado: Introduzca el número impar, del tamaño de la matriz: 5 La matriz mágica de tamaño 5, es:
  • 84. Dante Pinto Jeria 84 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 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 función lower convierte un a cadena de texto a minúsculas. En contraposición existe la función upper, que convierte una cadena de texto a mayúsculas. La ejecución de este programa da como resultado: Es aceptable 5.2.7 Comando error.- Este comando expone un mensaje y aborta una función. Su sintaxis es: error('msgIdent', 'msgString', v1, v2, ..., vN) error('msgString', v1, v2, ...) error('msgString') error(msgStruct) 5.3 USO DE FUNCIONES.-
  • 85. Dante Pinto Jeria 85 Las funciones son procedimientos que recogen datos de entrada, los procesan y devuelven un resultado. La estructura de una función es la siguiente: function [ argumentos_de_salida ] = Nombre_Funcion( argumentos_entrada ) declaraciones end Las variables dentro de la función, son variables locales, es decir, solo tienen valides dentro de la función, fuera de ella no valen nada. Si es que se desearía que las variables tengan valor fuera de la función, se las debe declarar como variables globales en el entorno en el que se llama a la función. Para ello se utiliza el comando global seguido del nombre de la variable. Ejemplo5.13: Escribir una función para que calcule si un año 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 función, se la llama dándole 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 función que dados como datos el número de filas de una matriz y el índice relativo, devuelva la fila y la columna a la que pertenece ese índice.
  • 86. Dante Pinto Jeria 86 Así en la anterior matriz si se le da como datos 2 (que es el número de filas y 10 (el índice) la función 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 función se debe utilizar la siguiente sintaxis. >> [f,c]=indice(2,10) f = 2 c = 5 Ejemplo5.16: Realizar una función que se llame bueno y permita la entrada de un valor y realice xvalor : si el número de entradas es menor que 4,3,2 asigne valores por omisión; si el llamado a la función se lo realiza de la forma bueno() dibuje la gráfica; 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 omisión if nargin < 4, cada = .2; end if nargin < 3, hasta = 2; end if nargin < 2, desde = -2; end if nargin < 1 error('myApp:argChk', 'Número de argumentos equivocados') end x=desde:cada:hasta; y = x.^valor; if nargout == 0 %_si la entrada es bueno(), dibuja una gráfica 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 número de entradas y salidas de la función respectivamente.
  • 87. Dante Pinto Jeria 87 La variable nargin indica con cuantos argumentos se llama a la función, 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 añadió una línea en la que se interrumpe la función y se da un mensaje de error si el número de argumentos es menor que 1. Al ejecutar la función se obtiene: >> bueno(2) >> [x0,y0]=bueno(2,-2,2,1) x0 = -2 -1 0 1 2 y0 = 4 1 0 1 4 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 0 0.5 1 1.5 2 2.5 3 3.5 4
  • 88. Dante Pinto Jeria 88 CAPÍTULO VI USO DE LA INTERFAZ GRÁFICA DE USUARIO GUI 6.1 INTRODUCCIÓN.- Matlab permite la creación de interfaces gráficas. De manera muy similar a lenguajes como Visual Basic, Visual C, etc. Par entrar al entorno de diseño 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 Después de cualquiera de los anteriores pasos, aparece: Presionando OK, aparece la ventana de diseño.
  • 89. Dante Pinto Jeria 89 La paleta de componentes es la siguiente: Para configurar adecuadamente el entorno de diseño se utiliza el menú Preferences, que está en File.
  • 90. Dante Pinto Jeria 90 En el cuadro de diálogo 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 programación de los GUI, se generen comentarios de manera automática. Estos comentarios muchas veces confunden y llenan toda la pantalla. Los componentes se arrastran de la paleta hacia el área de diseño. Haciendo clic en el componente y definiendo interactivamente el tamaño y la posición en el área de diseño mediante el ratón. Haciendo clic con el botón derecho del ratón, sobre el componente, se despliega el cuadro de diálogo siguiente:
  • 91. Dante Pinto Jeria 91 El campo Property Inspector da salida al cuadro de diálogo de las propiedades del control. Aquí se pueden realizar los cambios que se crean convenientes, como el color, el mensaje desplegado, etc.
  • 92. Dante Pinto Jeria 92 Para cambiar el tamaño del texto, se utiliza el campo FontSize. El nombre que se le asignará al componente, se cambia mediante el campo Tag. También haciendo clic con el botón derecho del ratón sobre el componente se da acceso a View Callbacks. Esto da acceso al entorno de programación. Si es la primera vez que se entra a los Callbakcs, se pedirá guardar la aplicación con algún nombre, luego muestra el entorno de programación correspondiente.
  • 93. Dante Pinto Jeria 93 Debajo del la línea resaltada se puede añadir el código 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 código fuente y el .fig tiene la parte gráfica. 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 gráfica y el código fuente. Los valores de las propiedades de los elementos (color, valor, posición, 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 aplicación. La definición de puntero es guardada con la instrucción: guidata(hObject, handles); Esta instrucción 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 operación 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:
  • 94. Dante Pinto Jeria 94 handles.valor=valor; guidata(hObject,handles); La primera línea añade la variable valor a la estructura de datos de la aplicación apuntada por handles y la segunda línea guarda el valor. Asignación y obtención 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 PROGRAMACIÓN.- Ejemplo6.1: Crear una interfaz gráfica de usuario, que permita la entrada de una función de x y realice la integral simbólica de esa función. Primero se crea la interfaz gráfica 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:
  • 95. Dante Pinto Jeria 95 Luego se añade el código 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)
  • 96. Dante Pinto Jeria 96 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 código que se añade, el resto es generado automáticamente por el programa. La ejecución de este programa da como resultado:
  • 97. Dante Pinto Jeria 97 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 continúa tirando el dado hasta obtener el número que obtuvo en el primer lanzamiento o hasta obtener un 7. Si obtiene su primer número 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 diseñar la interfaz gráfica, para ello se insertan en el área de diseño cuatro Static Text, dos Push Button. Y se cambian los colores y los textos como se muestra a continuación.
  • 98. Dante Pinto Jeria 98 Luego, debajo del código generado automáticamente por el programa, se añade el código 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;
  • 99. Dante Pinto Jeria 99 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 CREACIÓN DE PROGRAMAS EJECUTABLES .EXE.- Matlab permite la creación de programas con extensión .exe, estos programas pueden ejecutarse fuera del entorno de Matlab. Para esto se hace uso del comando mcc, desde la línea de comandos de Matlab. Por ejemplo, si se quiere que sea ejecutable el programa integra, se escribe: El compilador genera los siguientes archivos: Los códigos generados están en lenguaje C.
  • 100. Dante Pinto Jeria 100 CAPÍTULO VII USO DE SIMULINK 7.1 INTRODUCCIÓN.- Simulink es un programa añadido a Matlab. Sirve para programar visualmente un sistema dinámico (el cual está gobernado por ecuaciones diferenciales) y observar los resultados. Simulink está conformado por bibliotecas de bloques de construcción, estos bloques se conectan unos con otros a través de líneas, las cuales transmiten la información. Simulink, es en esencia un tipo de lenguaje orientado a bloques. La principal ventaja es la disponibilidad de plantillas de construcción de bloques, las cuales evitan la necesidad de escribir código para pequeños procesos matemáticos. 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 Después, 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 diseño:
  • 101. Dante Pinto Jeria 10 1 Ahora se pueden arrastrar los íconos desde el catálogo de la biblioteca de Simulink (Simulink Library Browser) hacia la ventana de diseño. Ejemplo7.1: Representar una función seno y la integración de la función seno, al mismo tiempo. Para esto se necesita extraer la función seno (Sine Wave), que se encuentra en Sources, luego la función 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 diseño y luego se conectan con líneas. Una manera rápida de conectar bloques es marcar el bloque de partida y luego presionando la tecla control hacer clic con el botón izquierdo en el bloque destino.
  • 102. Dante Pinto Jeria 102 Luego se guarda este pequeño modelo, con algún nombre, en este caso IntegradorBasico. Y se hace correr la simulación, haciendo clic en el botón , de la ventana de diseño. Haciendo doble clic en el ícono del osciloscopio, en la ventana de diseño Aparece a continuación la gráfica correspondiente. La línea morada es el seno y la línea amarilla el coseno. Si se quiere un autoescalado se debe presionar el ícono .
  • 103. Dante Pinto Jeria 10 3 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 diseño. 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:
  • 104. Dante Pinto Jeria 104 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 DISEÑO DE CONTROLADORES PID CON SIMULINK.- Ejemplo7.2: Gobierno de un brazo robótico mediante controladores PID Se puede utilizar los controladores PID para gobernar (controlar) brazos robóticos como el mostrado en la figura
  • 105. Dante Pinto Jeria 10 5 Una pelota es puesta sobre una viga y puede rodar a través de ella. El brazo robótico 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 diseñar un controlador que regule la posición de la pelota, de manera que esta no se salga de la viga. Para esta aplicación se asume que la pelota rueda sin deslizamiento y que la fricción entre la viga y la pelota es despreciable. Las constantes y variables para este ejemplo están 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 Aceleración 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 Posición de la pelota La ecuación Lagrangiana del movimiento de la pelota, está dada por
  • 106. Dante Pinto Jeria 106 Linealizando esta ecuación en relación con el ángulo de la viga, alpha = 0, da la siguiente aproximación lineal del sistema. La ecuación que relaciona el ángulo de la viga, con el ángulo del brazo es aproximada por: Reemplazando en la ecuación previa, se tiene: Sacando la transformada de Laplace a ambos miembros de la ecuación(tomando como cero loa parámetros iniciales): Reagrupando, se halla la función de transferencia del ángulo θ(s) del brazo a la posición de la pelota R(s). En el espacio de estados, el sistema de ecuaciones linealizado se representa por:
  • 107. Dante Pinto Jeria 10 7 Pero si es que se quiere controlar el ángulo α, se debe utilizar: La representación en Matlab es la siguiente: a) Función 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)
  • 108. Dante Pinto Jeria 108 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 gráfica 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 algún método para controlar la posición de la pelota. b) En el espacio de estados. Las entradas para el espacio de estados son las siguientes: m = 0.111; R = 0.015; g = -9.8; J = 9.99e-6; H = -m*g/(J/(R^2)+m); A=[0 1 0 0 0 0 H 0 0 0 0 1
  • 109. Dante Pinto Jeria 10 9 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 gráfica de la función de transferencia, esta gráfica 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 función 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 parámetros independientes de ganancias P, I, y D. El coeficiente N ubica la localización del polo en el filtro derivativo.
  • 110. Dante Pinto Jeria 110 Para el modelado en Simulink se introducen los siguientes componentes en la ventana de diseño: una función 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 función 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 :
  • 111. Dante Pinto Jeria 11 1 Se cambiaron las propiedades de la función 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 También se modificó el bus, para que tenga tres entradas, en el campo Number of inputs
  • 112. Dante Pinto Jeria 112 Realizando la simulación, se observa: La gráfica amarilla es la función paso, la celeste es la gráfica de la función de transferencia y la morada es la función 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.
  • 113. Dante Pinto Jeria 11 3 Los parámetros por omisión son: P=1; I=1; D=0. Para el sintonizado del PID se presiona Tune, y aparece, después de un momento de cálculos 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.
  • 114. Dante Pinto Jeria 114 Y luego se presiona Apply y OK. Después de hacer correr nuevamente el simulador. Se observa que se ha alcanzado la estabilidad. La gráfica de color morado muestra la función controlada por el PID.
  • 115. Dante Pinto Jeria 11 5 Si es que se quiere sacar los resultados al espacio de trabajo de Matlab, se debe añadir en la ventana de diseño 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.
  • 116. Dante Pinto Jeria 116 Después de hacer correr el simulador, en el espacio de trabajo de Matlab se teclea: >> plot(tout,salida.signals.values);grid on La variable dependiente es una estructura, para acceder a los valores se pone: salida.signals.values La variable independiente se encuentra almacenada en tout. 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7