Practica1 Intro Matlab

12

Click here to load reader

Transcript of Practica1 Intro Matlab

Page 1: Practica1 Intro Matlab

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'

Page 2: Practica1 Intro Matlab

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

Page 3: Practica1 Intro Matlab

>> 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 (:)

Page 4: Practica1 Intro Matlab

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:

Page 5: Practica1 Intro Matlab

< 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

Page 6: Practica1 Intro Matlab

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

Page 7: Practica1 Intro Matlab

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

Page 8: Practica1 Intro Matlab

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

Page 9: Practica1 Intro Matlab

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

Page 10: Practica1 Intro Matlab

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.