Mathematics">
Practica 1
Practica 1
Practica 1
LABORATORIO DE CONTROL I
Objetivo:
El objetivo de esta práctica es dar una introducción al ambiente de trabajo de Matlab.
Introducción:
Matlab (Matrix Laboratory) es un lenguaje de programación amigable al usuario para
hacer cálculos numéricos o matemáticos con características más avanzadas y mucho más fácil
de usar que los lenguajes de computadoras tales como Basic, Pascal o C, proporcionando un
entorno rico para la visualización de datos a través de sus poderosas capacidades gráficas.
Desarrollo:
Durante el desarrollo de esta practica se vera el funcionamiento del ambiente de
trabajo de Matlab, en cada una de las explicaciones se dan ejemplos del funcionamiento del
ambiente de Matlab, se recomienda al alumno realicé dichos ejemplos para su mejor
entendimiento.
Iniciando Matlab
Matlab para Windows puede iniciarse seleccionándolo desde el icono de Windows. Al
ejecutarse Matlab crea una ventana, donde aparece el prompt del Matlab ">>" indicando que
esta en espera de algún comando. De éstas, la ventana de orden es el lugar fundamental desde
donde se interacciona con Matlab. Esta ventana se muestra en la Figura 1.1.
1
Figura 1.1 Ventana principal de Matlab
Matemática sencilla:
De la misma forma que una calculadora, Matlab ofrece las siguientes operaciones
aritméticas básicas:
Operación Símbolo Ejemplo
Suma + 5+3
Resta - 23 - 12
multiplicación * 20.5 *1.5
división /o\ 56 / 8 = 8 \ 56
Potencia ^ 5^2
2
Orden de Matlab Constante = 35.833 Comentario
format long 35.83333333333333 16 dígitos
format short e 3.5833e+01 5 dígitos más exponente
format long e 3.583333333333334e+01 16 dígitos más exponente
format hex 4041eaaaaaaaaaab Hexadecimal
format bank 35.83 2 dígitos decimales
format + + positivo, negativo o cero
format rat 215/6 aproximación racional
format short 35.8333 visualización por defecto
Expresiones Fundamentales.
Trabajar en el entorno MATLAB es muy simple ya que la mayoría de los comandos
son ingresados de la misma manera que se lo haría matemáticamente. Por ejemplo,
escribiendo:
>> a=4/3
Dará como resultado:
>> a = 1.3333
Por medio de este comando se le ha asignado el valor 1.3333 a la variable “a”. MATLAB
reconoce los primeros 19 caracteres de los nombres de las variables requiriendo solamente que
el nombre comience con una letra. Otra Particularidad es que MATLAB es sensible a las
mayúsculas. En el caso de estar interesado solamente en el resultado de la expresión y no en la
asignación del mismo a alguna variable, escribiendo:
>> 4/3
ans =
1.3333
donde la variable “ans” es una variable interna utilizada por MATLAB para almacenar
resultados que no han sido asignado a ninguna otra variable. Notar que el contenido de “ans”
cambia cada vez que una operación como la antes mencionada es realizada. Por lo tanto si Ud.
considera que un resultado puede ser utilizado en subsiguientes cálculos, es conveniente
3
guardarlo en alguna otra variable.
MATLAB tiene algunas variables predefinidas como pueden ser:
i, j = √-1 pi = π inf = ∞ NaN ( Magnitud no numérica Not a Number, ej. 0/0) Como estas
variables pueden ser sobrescritas, se recomienda usarlas con cuidado ya que por ejemplo si i o
j se usan como índices de elementos de un vector o matriz y luego se desea realizar la
siguiente asignación:
el resultado no será el número complejo esperado. Para restablecer el valor de i se puede usar
el comando clear i.
Ayuda en Línea
MATLAB tiene un comando llamado help muy bien documentado. Escribiendo help,
MATLAB despliega un índice con aclaraciones que sirve para orientarse a la hora de buscar
algún comando en particular. Veamos un ejemplo:
1+ j
Supongamos que se desea evaluar la siguiente expresión e 3 escribiendo help obtenemos:
» help
HELP topics:
De donde podemos inferir que la información que estamos buscando pude estar dentro de los
comandos agrupados en elementary math functions:
» help elfun
Elementary math functions.
Trigonometric.
sin - Sine.
sinh - Hyperbolic sine.
……………………
Exponential.
4
exp - Exponential.
log - Natural logarithm.
…………………………
Complex.
abs - Absolute value.
angle - Phase angle.
…………………………
Donde hallamos la función exp. Para finalmente saber como usar dicha función uno puede
escribir help exp. Para culminar con el ejemplo, la expresión sería:
>> exp(1+3*i)
Hasta aquí ya se sabe como buscar información sobre como usar los comandos de MATLAB.
Si se desea realizar algún cálculo para el cual MATLAB no contiene una función específica,
se pueden crear las propias funciones. (Se realizara mas adelante Creating Script Files y
Creating Functions.)
Matrices y Vectores.
Las Matrices son el principal tipo de datos que maneja MATLAB. Comenzaremos
escribiendo una matriz como una lista de elementos. Solamente hay que seguir unas
convenciones básicas:
a=
12
34
5
56
Para suprimir la salida en la pantalla cada vez que se asigna una variable use el operador “;” al final
de la expresión:
>> b=[5 6];
Los elementos de una matriz pueden ser alguna expresión; por ejemplo:
Se pueden juntar dos matrices con mismo número de columnas en una solo matriz; por
ejemplo:
Se puede obtener información en el área de trabajo con who o whos; por ejemplo:
» who
6
Your variables are:
A B C R x
o bien:
» whos
Name Size Bytes Class
A 3x3 72 double array %Cada elemento de una matriz real requiere
B 4x3 96 double array %8 bytes de memoria
C 2x2 32 double array
R 1x3 24 double array
x 1x3 24 double array
Grand total is 31 elements using 248 bytes %Todas las variable ocupan 248 bytes
El operador “:”
>> v= [1: 0.5:3] Genera un vector con elementos de 1 a 3 con incremento de 0.5
v=
1 1.5 2 2.5 3
Para guardar el estado de una sesión de trabajo existe el comando save. Si se teclea:
» save
Dicho estado puede recuperarse la siguiente vez que se arranque el programa con el comando:
» load
Se pueden guardar también matrices y vectores de forma selectiva y en ficheros con nombre
especificado por el usuario. Por ejemplo, el comando (sin comas entre los nombres de
variables):
7
» save filename A x y
» load filename
Si no se tiene ninguna variable, se guardan todas las variables creadas en esa sesión.
» diary filename.txt
…
» diary off % suspende la ejecución
….
» diary on %reanuda la ejecución
…
El simple comando diary pasa de on a off y viceversa. Para poder acceder al fichero
filename.txt con Notepad o Word es necesario que diary esté en off Si en el comando diary no
se incluye el nombre del fichero se utiliza por defecto un fichero llamado diary (sin
extensión).
Por ejemplo:
Si se tiene las variables antes definidas y se utiliza el comando save se tendrá:
8
» load %Carga desde el disco las variables almacenadas en el
%archivo matlab.mat
Loading from: matlab.mat
9
» X=[0 .1*pi .2*pi .3*pi .4*pi .5*pi .6*pi .7*pi .8*pi .9*pi pi]; %Crea un array
» Y=sin(X); %Crea un array
» X(3); %Acceso al tercer elemento del array
» X(1:5); %Se obtienen los elementos del primero al quinto de X
» Y(3:-1:1); %Se obtienen los elementos tercero, segundo y primero en este orden
» X(2:2:7); %Comienza a obtener desde el segundo elemento que se incremente en
2 y para cuando alcance el 7
» Y([8 2 9]); %Obtiene del array Y el octavo, segundo y noveno elemento en este
orden
» X=(0:0.1:1)*pi; %Crea nuevamente el array X de otra forma; comienza en cero,
incremento de 0.1 hasta 1 y cada uno multiplicado por pi
» A=1:5; B=1:2:9; %Crea dos array uno con incremento de 1 y otro de 2
» C=[B A]; %Junta los dos array anteriores en uno solo
» D=[A(1:2:5) 1 0 1] %Crea una array que incluye desde el elemento uno en incremento de
dos hasta cinco del array A y adiciona otros elementos 1 0 1.
» A-2; %Resta dos a cada elemento de A
» 2*A-1; %Multiplica cada elemento de A por 2 y le resta 1.
» s='ABCDEF'; %Crea un vector con cadena de caracteres o simplemente cadenas
» n=s+'a'-'A' %Cambia a caracteres en minúscula añadiendo la diferencia entre a y A
n= %Presenta resultado en forma de números correspondientes a cada carácter
97 98 99 100 101 102
» setstr(n) %Presenta resultado en forma de caracteres
ans =
abcdef
Operaciones con Arrays
a=[a1 a2 ... an], b=[b1 b2 ... bn] y c={c es un escalar}
Suma escalar a+c= [a1+c a2+c ..... an+c]
Multiplicación escalar a*c= [a1*c a2*c ..... an*c]
Suma de arrays a+b = [a1+b1 a2+b2 ..... an+bn]
Multiplicación de arrays a.*b = [a1*b1 a2*b2 ..... an*bn]
División a la derecha de arrays a./b = [a1/b1 a2/b2 ..... an/bn]
Potencia de arrays a.^c = [a1^c a2^c ..... an^c]
c.^a = [c^a1 c^a2 ..... c^an]
a.^b = [a1^b1 a2^b2 ..... an^bn]
10
Operaciones con matrices
- Los elementos de una matriz se direccionan en la forma fila, columna: A(fila, columna).
- Valores internos a una matriz se acceden identificando los subíndices de los elementos
deseados.
- Utilizar el símbolo dos puntos como la designación de filas y columnas implica,
respectivamente, todas las filas o columnas; por ejemplo: A(: ,1) representa todas las filas
en la columna uno, A(2 ,:) representa todas las columnas en la fila 2.
- Colocar datos fuera del rango actual de una matriz rellena con ceros las zonas no
especificadas para mantener una forma de matriz rectangular.
- Fijar las filas o columnas de una matriz igual a la matriz vacía [ ] elimina estas filas o
columnas.
- Usar sólo dos puntos, por ejemplo A(:), reagrupa una matriz en un vector columna, tomando
todas las columnas a un tiempo.
- Vectores lógicos 0-1 pueden utilizarse también para direccionar partes de un vector. En este
caso, los vectores lógicos 0-1 deben tener el mismo tamaño que el vector que direcciona.
Los elementos falsos (0) se eliminan, los elementos verdaderos (1) se retienen.
11
» X=-3:0.5:3; %Crea un vector desde -3 a 3 con incrementos de 0.5
» X=-3:3; %Crea un vector
» y=abs(X)>1; %Retiene los elementos verdaderos (1) y se descartan los falsos
(0)
» y=X(abs(X)>1) %Toma aquellos valores de X donde su valor absoluto > 1 si X
es matriz el resultado es un vector
» Y=X([1 1 1 1]); %Crea Y tomando el primer elemento de X tres veces
» X(abs(X)>2)=[] %Elimina valores de X donde abs(X)>2
» v=['esto es una matriz, un renglón ' %Almacena una matriz de caracteres
'debe tener el mismo numero de '
'columnas como las matrices '];
»v %Despliega el valor de la matriz de caracteres
v=
esto es una matriz, un renglón
debe tener el mismo numero de
columnas como las matrices
Funciones
Matlab tiene un número grande de funciones. Algunas funciones son intrínsecas o
construidas en el propio proceso de Matlab. Otras están disponibles en librerías externas
archivos-M distribuidos con Matlab (Toolbox). Y otras son adicionadas por los usuarios, o
grupo de usuarios, para alguna aplicación especifica en archivos-M.
Con la orden help <Función> Matlab despliega el contenido de la función así como de los
parámetros necesarios para su correcta ejecución. Por ejemplo:
Se pueden combinar funciones de varias formas. Algunas funciones usan dos o más
argumentos de entrada, donde cada argumento puede ser una expresión. Por ejemplo:
12
» a=3;b=-4; %Asigna a una variable un valor
O también pueden usar dos o más argumentos de salida, donde los argumentos estarán
encerrados por [ ] y separados por comas. Por ejemplo:
- Escoger los valores para la variable independiente x (forman el eje horizontal de la gráfica).
- Calcular el seno para cada valor independiente (proporcionando los datos del eje vertical).
- Cada pareja de datos [x, y] se marca sobre un conjunto apropiado de ejes.
Para mejorar su visión, es común dibujar una línea recta entre cada par de puntos marcados.
Utilizando array, Matlab sigue este mismo enfoque para hacer gráficas. Considerando la
misma tarea de dibujar una onda senoidal tal como la que acabamos de describir.
13
» z=cos(x); %Calcula el coseno de los puntos en x
» plot(x,y,x,z); %Gráfica en la misma gráfica el seno y coseno
14
» title('2sin(x)cos(x)=sin(2x)') %Coloca titulo de la gráfica
- La orden Plot crea una gráfica de vectores o columnas de matrices. La forma de la orden es
plot(x1, y1, S1, x2, y2, S2, .....) donde (xn, yn) son conjuntos de arrays de datos y Sn son
cadenas opcionales que especifican color, marcas, y/o estilos de línea.
15
- La orden text(x,y,S) añade cadena de caracteres S a la gráfica actual en las coordenadas (x, y)
- gtext permite colocar texto interactivamente en la gráfica utilizando el ratón.
- axis cambia los límites de los ejes o la apariencia de las gráficas (obtener ayuda con help
axis).
- Se pueden añadir gráficas a la gráfica actual fijando hold on. Haciendo hold off permite que
la próxima orden de plot borre la ventana de la figura antes de hacer una nueva gráfica.
- Se pueden generar múltiples ventanas de figuras mediante la orden figure. figure(n) escoge
que ventana de figura n sea la ventana de la figura activa.
- Una ventana de figura se puede subdividir en un matriz m x n y cualquier subdivisión
hacerse activa con la orden subplot (m,n,p) (escoge como activa el área p-ésima).
- Si fija zoom on, la ventana de la figura activa se puede expandir interactivamente usando el
ratón, seleccionando el área de expansión o simplemente con un click del ratón. zoom off lo
desactiva
» plot(x,y,'k-',x,z,'r--',x,y,'ko') %Gráfica la función seno dos veces una con línea sólida
y color negro y la otra con círculos y color negro, la
función coseno con color rojo y línea de trazos.
» grid %Activa rejilla
16
» xlabel('Variable independiente x') %Etiqueta del eje x
» ylabel('Variable dependiente y z') %Etiqueta del eje y
» title('Curvas del seno y coseno') %Titulo de la gráfica
» text(2.5,0.7,'sin(x)') %Etiqueta de la curva en la localización (2.5, 0.7)
» gtext('cos(x)') %Etiqueta de la curva colocada con el ratón
17
» subplot(1,1,1) %Regresa a una sola gráfica por pantalla
» plot(x,y./z) %Gráfica la función sin(x)/cos(x)
» grid,title('sin(x)/cos(x)') %Activa rejilla y pone titulo
» zoom on %Activa modo expandido para seleccionar una porción de la gráfica
Ejercicio:
Realizar los ejercicios vistos en esta practica y entender su funcionamiento.
18