Sie sind auf Seite 1von 11

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 (FILENEWM-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 Cantidad Pb Voltaje (V) Distancia Corriente (A)


(°C) (kg) (m)
P1 -36.14572684 5.10133E-03 0.5109993 -6731.4491 -0.51374605
67 97 7
P2 -7.296587715 4.59337E-03 -1.861673 8946.25111 -0.26921848
012
P3 80.89694369 5.21143E-03 6.5742743 -7912.9233 0.086975446
88 66
P4 -1.244081893 2.84326E-03 -5.938936 5386.06532 0.032970633
269 7
P5 3.870697259 6.52396E-03 -0.306443 -1530.3107 -0.22356038
661 38 5

Se identifican los valores máximos y mínimos por cada magnitud o rasgo (columna)

Temperatura Cantidad Pb Voltaje (V) Distancia Corriente (A)


(°C) (kg) (m)
MAX 80.89694369 6.52396E-03 6.5742743 8946.25111 0.086975446
88
min -36.14572684 ** -5.938936 -7912.9233 -0.51374605
269 66 7

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-03
P2 (-7.296587715 / -36.14572684) * -1 4.59337E-03 / 6.52396E-03
P3 80.89694369 / 80.89694369 5.21143E-03 / 6.52396E-03
P4 (-1.244081893 / -36.14572684)* -1 2.84326E-03 / 6.52396E-03
P5 3.870697259 / 80.89694369 6.52396E-03 / 6.52396E-03
Patrones Temperatura Cantidad Pb (kg)
(°C)
P1 -1.0 0.7819
P2 -0.2019 0.7041
P3 1.0 0.7988
P4 -0.0344 0.4358
P5 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 (FILENEWM-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.