Post on 12-Jun-2015
PRACTICA 1 CONTROL
PROF. ABRAHAM U. CHAVEZ RAMIREZ
MATLAB es el nombre abreviado de “MATrix LABoratory”. MATLAB es un programa para realizar
cálculos numéricos con vectores y matrices. Como caso particular puede también trabajar con números
escalares −tanto reales como complejos−, con cadenas de caracteres y con otras estructuras de
información más complejas. Una de las capacidades más atractivas es la de realizar una amplia
variedad de gráficos en dos y tres dimensiones. MATLAB tiene también un lenguaje de programación
propio. MATLAB dispone de un código básico y de varias librerías especializadas (toolboxes).
Operaciones con matrices y vectores
Ya se ha comentado que MATLAB es fundamentalmente un programa para cálculo matricial.
Inicialmente se utilizará MATLAB como programa interactivo, en el que se irán definiendo las matrices,
los vectores y las expresiones que los combinan y obteniendo los resultados sobre la marcha. Si estos
resultados son asignados a otras variables podrán ser utilizados posteriormente en otras expresiones.
Teclee los siguientes comandos y añada comentarios en el recuadro en blanco.
>> A=[1 2 3; 4 5 6; 7 8 9]
>> A’
>> B=A'
>> B*A
>> A=[1 4 -3; 2 1 5; -2 5 3]
>> B=inv(A)
>> B*A
>> x=[10 20 30]
>> y=[11; 12; 13]
>> x+y
>> x+y'
>> x(1)=1, x(2)=2
MATLAB puede operar con matrices por medio de operadores y por medio de funciones. Se han visto ya
los operadores suma (+), producto (*) y traspuesta ('), así como la función invertir inv( ). Los operadores
matriciales de MATLAB son los siguientes:
+ adición o suma
– sustracción o resta
multiplicación
' traspuesta
^ potenciación
\ división-izquierda
/ división-derecha
.* producto elemento a elemento
./ y .\ división elemento a elemento
.^ elevar a una potencia elemento a elemento
Los operadores anteriores se pueden aplicar también de modo mixto, es decir con un operando escalar y
otro matricial. En este caso la operación con el escalar se aplica a cada uno de los elementos de la
matriz.
>> A=[1 2; 3 4]
>> A*2
>> A-4
>> [1 2 3 4]^2
>> [1 2 3 4].^2
>> [1 2 3 4]*[1 -1 1 -1]
Una de las aplicaciones más importantes de las variables lógicas es para separar o extraer los
elementos de una matriz o vector que cumplen cierta condición, y operar luego selectivamente sobre
dichos elementos.
>> A=magic(4)
>> j=A>10
>> A(j)=-10
En muchos cálculos matriciales los datos y/o los resultados no son reales sino complejos, con parte
real y parte imaginaria. MATLAB trabaja sin ninguna dificultad con números complejos. Para ver
como se representan por defecto los números complejos, ejecútense los siguientes comandos:
a=sqrt(-4)
>> 3 + 4j
>> A(j)=-10
>> A = [1+2i 2+3i; -1+i 2-3i]
TIPOS DE MATRICES PREDEFINIDOS
Existen en MATLAB varias funciones orientadas a definir con gran facilidad matrices de tipos
particulares.
eye(4)
zeros(3,5)
ones(3)
rand(3)
ones(2,4)
rand(2,5)
n=length(A)
[m,n]=size(A)
OPERADOR DOS PUNTOS (:)
Este operador es muy importante en MATLAB y puede usarse de varias formas.
>> x=1:10
>> x=1:2:10
>> x=1:1.5:10
>> x=10:-1:1
>> x=[0.0:pi/50:2*pi]';
>> y=sin(x); z=cos(x);
>> [x y z]
>> A=magic(6)
>> A(2,3)
>> A(3, :)
>> A(end, :)
>> A(3:5,:)
>> A([1 2 5],:)
>> B=eye(size(A));
>> B([2 4 5],:)=A(1:3,:)
>> x=rand(1,5)
>> x=x(5:-1:1)
>> A=[1 2;0 3]; B=[4 2;1 5];
>> A==B
>> A~=B
El lenguaje de programación de MATLAB dispone de los siguientes operadores relacionales:
< menor que
> mayor que
<= menor o igual que
>= mayor o igual que
== igual que
~= distinto que
Los operadores lógicos de MATLAB son los siguientes:
& and (función equivalente: and(A,B)). Se evalúan siempre ambos operandos, y el
resultado es true sólo si ambos son true.
&& and breve: si el primer operando es false ya no se evalúa el segundo, pues el
resultado final ya no puede ser más que false.
| or (función equivalente: or(A,B)). Se evalúan siempre ambos operandos, y el
resultado es false sólo si ambos son false.
|| or breve: si el primer operando es true ya no se evalúa el segundo, pues el resultado
final no puede ser más que true.
~ negación lógica (función equivalente: not(A))
xor(A,B) realiza un "or exclusivo", es decir, devuelve 0 en el caso en que ambos sean 1 ó
ambos sean 0.
Funciones matemáticas elementales que operan de modo escalar
Estas funciones, que comprenden las funciones matemáticas trascendentales y otras funciones básicas,
cuando se aplican a una matriz actúan sobre cada elemento de la matriz como si se tratase de un
escalar. Por tanto, se aplican de la misma forma a escalares, vectores y matrices. Algunas de
lasfunciones de este grupo son las siguientes:
sin(x) seno
cos(x) coseno
tan(x) tangente
asin(x) arco seno
acos(x) arco coseno
atan(x) arco tangente (devuelve un ángulo entre -π/2 y +π/2)
atan2(x) arco tangente (devuelve un ángulo entre -π y +π); se le pasan 2 argumentos,
proporcionales al seno y al coseno
sinh(x) seno hiperbólico
cosh(x) coseno hiperbólico
tanh(x) tangente hiperbólica
asinh(x) arco seno hiperbólico
acosh(x) arco coseno hiperbólico
atanh(x) arco tangente hiperbólica
log(x) logaritmo natural
log10(x) logaritmo decimal
exp(x) función exponencial
sqrt(x) raíz cuadrada
sign(x) devuelve -1 si <0, 0 si =0 y 1 si >0. Aplicada a un número complejo, devuelve
un vector unitario en la misma dirección
rem(x,y) resto de la división (2 argumentos que no tienen que ser enteros)
mod(x,y) similar a rem (Ver diferencias con el Help)
round(x) redondeo hacia el entero más próximo
fix(x) redondea hacia el entero más próximo a 0
floor(x) valor entero más próximo hacia -∞
ceil(x) valor entero más próximo hacia +∞
gcd(x) máximo común divisor
lcm(x) mínimo común múltiplo
real(x) partes reales
imag(x) partes imaginarias
abs(x) valores absolutos
angle(x) ángulos de fase
Funciones que actúan sobre vectores
Las siguientes funciones sólo actúan sobre vectores (no sobre matrices, ni sobre escalares):
[xm,im]=max(x) máximo elemento de un vector. Devuelve el valor máximo xm y la posición
que ocupa im
min(x) mínimo elemento de un vector. Devuelve el valor mínimo y la posición
que ocupa
sum(x) suma de los elementos de un vector
cumsum(x) devuelve el vector suma acumulativa de los elementos de un vector
(cadaelemento del resultado es una suma de elementos del original)
mean(x) valor medio de los elementos de un vector
std(x) desviación típica
prod(x) producto de los elementos de un vector
cumprod(x) devuelve el vector producto acumulativo de los elementos de un vector
[y,i]=sort(x) ordenación de menor a mayor de los elementos de un vector x. Devuelve el
vector ordenado y, y un vector i con las posiciones iniciales en x de los
elementos en el vector ordenado y.
SENTENCIA IF
En su forma más simple, la sentencia if se escribe en la forma siguiente (obsérvese que –a diferen-
cia de C/C++/Java– la condición no va entre paréntesis, aunque se pueden poner si se desea):
if condicion
sentencias
end
Existe también la bifurcación múltiple, en la que pueden concatenarse tantas condiciones como se
desee, y que tiene la forma:
if condicion1
bloque1
elseif condicion2
bloque2
elseif condicion3
bloque3
else % opción por defecto para cuando no se cumplan las condiciones 1,2,3
bloque4
end
SENTENCIA SWITCH
La sentencia switch realiza una función análoga a un conjunto de if...elseif concatenados. Su forma
general es la siguiente:
switch switch_expresion
case case_expr1,
bloque1
case {case_expr2, case_expr3, case_expr4,...}
bloque2
...
otherwise,
% opción por defecto
bloque3
end
SENTENCIA FOR
La sentencia for repite un conjunto de sentencias un número predeterminado de veces. La sentencia
for de MATLAB es muy diferente y no tiene la generalidad de la sentencia for de C/C++/Java. La
siguiente construcción ejecuta sentencias con valores de i de 1 a n, variando de uno en uno.
for i=1:n
sentencias
end
o bien,
for i=vectorValores
sentencias
end
En eleditor de matlab (FILENEWM-FILE) ingrese los siguientes comandos útiles, y guarde el archivo como
“test1.m” dentro de la carpeta de C:\matlab\work
t=0:0.5:10
Y=sin(2*pi*t);
Y2=sin(2/3*pi*t);
figure
plot(Y);
figure
stem(Y);
figure
plot(Y2);
figure
stem(Y2);
Y3=Y’ * Y2;
Y4=Y2’ * Y;
figure
subplot(2,1,1)
plot(Y3);
subplot(2,1,2)
plot(Y4);
Una vez que el programa haya sido salvado, para ejecutarlo deberá regresar a la ventana de comandos y colocar el
nombre del programa adelante del prompt seguido de la tecla enter.
>> test
NORMALIZACION
La normalización es un proceso útil en el tratamiento de señales que permite homologar los rangos de cada patrón
llevándolos a intervalos de [0,1] o bien [-1,1], el entrenamiento de redes neuronales con patrones normalizados
permite una convergencia más rápida y eficiente.
Un proceso simple de normalización se presenta a continuación:
Dada la siguiente matriz de conocimiento:
Patrones Temperatura (°C) Cantidad Pb (kg) Voltaje (V) Distancia (m) Corriente (A)P1 -36.14572684 5.10133E-03 0.510999367 -6731.449197 -0.513746057P2 -7.296587715 4.59337E-03 -1.861673012 8946.25111 -0.26921848P3 80.89694369 5.21143E-03 6.574274388 -7912.923366 0.086975446P4 -1.244081893 2.84326E-03 -5.938936269 5386.065327 0.032970633P5 3.870697259 6.52396E-03 -0.306443661 -1530.310738 -0.223560385
Se identifican los valores máximos y mínimos por cada magnitud o rasgo (columna)
Temperatura (°C) Cantidad Pb (kg) Voltaje (V) Distancia (m) Corriente (A)MAX 80.89694369 6.52396E-03 6.574274388 8946.25111 0.086975446min -36.14572684 ** -5.938936269 -7912.923366 -0.513746057
Una vez que se han identificado los valores máximos y mínimos se procede a dividir cada elemento de la matriz de
conocimiento de acuerdo al siguiente protocolo:
1. Si el valor es positivo se divide entre el máximo identificado.
2. Si el valor es negativo se dividirá entre el mínimo** y se multiplicará por -1 para conservar el signo.
** si el rasgo no presenta valores negativos, no será necesaria la identificación del mínimo.
Patrones Temperatura (°C) Cantidad Pb (kg)P1 (-36.14572684 / -36.14572684) * -1 5.10133E-03 / 6.52396E-03P2 (-7.296587715 / -36.14572684) * -1 4.59337E-03 / 6.52396E-03P3 80.89694369 / 80.89694369 5.21143E-03 / 6.52396E-03P4 (-1.244081893 / -36.14572684)* -1 2.84326E-03 / 6.52396E-03P5 3.870697259 / 80.89694369 6.52396E-03 / 6.52396E-03
Patrones Temperatura (°C) Cantidad Pb (kg)P1 -1.0 0.7819P2 -0.2019 0.7041P3 1.0 0.7988P4 -0.0344 0.4358P5 0.0478 1.0
PROGRAMA NORMALIZACIÓN
Guarde el archivo data_A.txt en la carpeta C:\matlab\work
Dentro de un nuevo archivo.m (FILENEWM-FILE) escriba el siguiente comando:
load data_A.txt
a continuación diseñe un programa en matlab (NORMALIZACION.M) que obtenga los valores normalizados de una
matriz de datos a partir de este archivo externo de acuerdo al proceso descrito en el ejemplo.