Está en la página 1de 8

1

Generacin de Funciones de Pertenencia Para


Lgica Difusa Utilizando MATLAB
ans =
Abstract Para el desarrollo de la presente prctica se 5
realizaron grficas de algunos de los conjuntos difusos ms
representativos. Se utiliz el software MATLAB para elaborar Sin embargo, si el clculo se asigna a una variable, el
los programas, de forma que se pudieran introducir valores
resultado queda guardado en ella:
diferentes en los parmetros cada vez que se corre un programa.
Tambin se incluye un ejemplo de una aplicacin que puede ser
representada con una grfica de conjuntos difusos. >>x=2+3

x=
I. INTRODUCCIN 5

E l software MATLAB es una lenguaje tcnico de alto nivel


con un ambiente interactivo para el desarrollo de
algoritmos, la visualizacin de los datos, el anlisis de datos, y
Para conocer el valor de una variable, basta teclear su nombre:
>>x
el cmputo numrico. Usando MATLAB, se pueden x=
solucionar problemas que computan tcnicos ms rpidamente 5
que con los lenguajes de programacin tradicionales, tales
como C, C++, y FORTRAN. Se puede utilizar MATLAB en Si se aade un punto y coma (;) al final de la instruccin, la
una amplia gama de usos, incluyendo procesamiento de seal mquina no muestra la respuesta...
y de imagen, comunicaciones, diseo del control, modelacin,
el anlisis financiero y biologa de cmputo. >>y=5*4;
Las cajas de herramientas adicionadas extienden el ambiente
de MATLAB para solucionar clases particulares de problemas ... pero no por ello deja de realizarse el clculo.
en estas reas de aplicacin. MATLAB tambin proporciona
un nmero de caractersticas para documentar y compartir el >>y
trabajo.
y=
20

Las operaciones se evalan por orden de prioridad: primero las


potencias, despus las multiplicaciones y divisiones y,
finalmente, las sumas y restas. Las operaciones de igual
prioridad se evalan de izquierda a derecha:
>>2/4*3

ans =
1.5000

>>2/(4*3)

ans =
0.1667
Fig. 1. MATLAB permite analizar grficas de forma interactiva.
Se pueden utilizar las funciones matemticas habituales. As,
Para comenzar a utilizar el software es necesario conocer su por ejemplo, la funcin coseno,
funcionamiento bsico y entender su lgica. A continuacin se >>cos(pi) % pi es una variable con valor predeterminado
muestran algunos ejemplos de operaciones comunes: 3.14159...

Los clculos que no se asignan a una variable en concreto se ans =


asignan a la variable de respuesta por defecto que es ans (del -1
ingls, answer):
>>2+3 o la funcin exponencial
2

>>exp(1) % Funcin exponencial evaluada en 1, es decir, el >>who


nmero e
Your variables are:
ans = ans eps x
2.7183
Los ejemplos anteriores son tiles porque son operaciones
Otro ejemplo de funcin matemtica: la raz cuadrada; como realizadas comnmente, pero son slo una parte minscula de
puede verse, trabajar con complejos no da ningn tipo de las posibilidades que ofrece.
problema. La unidad imaginaria se representa en MATLAB
como i o j, variables con dicho valor como predeterminado: MATLAB ofrece una gran variedad de herramientas grficas.
Tambin pueden dibujarse funciones. As:
>>sqrt(-4)
>>fplot('sin(x)',[0 2*pi]) % Dibuja la funcin seno en el
ans = intervalo [0,2*pi]
0+ 2.0000i

El usuario puede controlar el nmero de decimales con que


aparece en pantalla el valor de las variables, sin olvidar que
ello no est relacionado con la precisin con la que se hacen
los clculos, sino con el aspecto con que stos se muestran:
>>1/3

ans =
0.3333

>>format long

>>1/3
Fig. 2. Grfica de una funcin senoidal en MATLAB

ans =
0.33333333333333
II.DESARROLLO
>>format % Vuelve al formato estndar que es el de 4
cifras decimales Objetivo
Conocer la programacin de las funciones de
Para conocer las variables que se han usado hasta el pertenencia difusas mas representativas en
momento: MATLAB.
>>who

Your variables are: A. Generacin de Funcin Caracterstica tipo Hombro


ans eps x y derecho

o, si se quiere ms informacin (obsrvese que todas las Se puede sealar que tomando como ejemplo una funcin en
variables son arrays): especfico se puede uno dar cuenta de las similitudes que
presentan con otras funciones, es decir, si tomamos la funcin
>>whos caracterstica de la funcin triangular podemos identificar
ciertos parmetros a simple vista que nos ayudarn en la
Name Size Bytes Class construccin de diferentes funciones, como es el caso de una
ans 1x1 8 double array funcin del tipo hombro o saturacin derecha.
eps 1x1 8 double array
x 1x1 8 double array Se puede deducir que el primer comportamiento que lleva la
y 1x1 8 double array grafica de tipo triangulo constituye la misma subida que
presenta la grafica de hombro y cuando llega al punto mximo
Grand total is 4 elements using 32 bytes con valor de pertenencia de uno, se mantiene constante hasta
el final tal y como se ve en la Figura 3.
Para deshacerse de una variable
>>clear y
3

x 0

x
f ( x) x (1.1)

La funcin f(x) tomara valor de 1 solo a partir
x de cuando x tome el valor asignado a B (beta,
en1 la fig 3 es de 70), por lo que supongo debe
ser desde el valor de B (70 en fig 3) o mayor a
70 (paradelxtipo
Funcin de pertenencia >=B es 1).
hombro o saturacin derecha
Cambio de signo de <= a >=

La interpretacin de la ecuacin 1.1 es que el grado de


pertenencia dentro de la funcin esta representado por el valor
de X y los parmetros de inicio y fin de los que hablbamos
en prrafos anteriores corresponden a los smbolos y
respectivamente; esto significa que para valores menores a X
el valor de partencia a la funcin tiene un valor de cero,
mientras que para los valores entre y se presenta una lnea
Figura 3 .- Grfica correspondiente al tipo hombro derecho obtenida en el recta con inclinacin o pendiente positiva dada por la ecuacin
software de Matlab .
(x-)/(-) y para todos los valores mayores que su grado
de pertenencia ser uno.
Para la funcin de tipo hombro hay dos parmetros que son
los que dan la pauta de su comportamiento, los cuales hemos La descripcin del cdigo utilizado en Matlab para esta
denominado como punto de inicio, que corresponde al punto funcin de pertenencia se encuentra descrito en el Anexo A.1
en donde se empieza a elevar con pendiente constante desde de este mismo escrito.
cero hasta el segundo punto denominado como centro o en
su defecto final que corresponde al punto en el que su
incremento ha llegado al valor mximo en el grado de
pertenencia, es decir uno y su valor permanece constante B. Generacin de Funcin Caracterstica tipo Hombro
hasta el final de la grafica o hasta el ltimo de los puntos que izquierdo.
se estudian de esa funcin caracterstica, si nos fijamos con
detenimiento sobre la Figura 3 podemos ver que el valor que La grafica correspondiente a la funcin de pertenencia de
se escogi para el punto inicial de esta grafica corresponde al tipo hombro o saturacin izquierda es simplemente un reflejo
valor de 30 en el eje X mientras que el valor final o centro de la funcin de tipo saturacin derecha, donde los primeros
corresponde al valor en el eje X de 70. valores de la grafica tendrn un valor de pertenencia mximo
(uno) y en el parmetro de inicio empieza a descender de
Para el ejemplo en particular mostrado en la Figura 3, se manera lineal al incrementarse los valores del eje X hasta
fijaron unos valores, los cuales sabamos con anterioridad que llegar al punto de final donde ha alcanzado su mnimo valor
estos no cambiaran como es el ejemplo de los valores del eje de pertenencia y mantiene este valor hasta el final de la grfica
Y delimitados en -0.2 para lograr ver la funcin con claridad o los puntos analizados dentro de la funcin. Vase Figura 4.
pasar por el valor de cero y un tope mximo de 1.2 el cual la
grfica jams rebasara debido a que el mayor valor que puede
obtener en grado de pertenencia es uno.; orto valor igual de
importante para la programacin es la de el paso, es decir cada
cuando se hara una nueva medicin y nosotros le dimos un
valor arbitrario de 0.5 para cada uno de nuestras funciones.

Para la construccin de esta grfica nos basamos en la


definicin de la misma que esta descrita en la siguiente
ecuacin 1.1
4

Para ver el cdigo usado para la generacin de la funcin de


hombro izquierdo vase el Anexo A.2

C. Generacin de Funcin Caracterstica tipo pi.

La grafica tipo pi aunque en principio parece ser ms


complicada que las anteriores, resulta ser solamente una
combinacin de las dos formas de saturacin vistas
anteriormente lo cual resulta en menor dificultad para su
modelacin. Vase Figura 5

Figura 4 - Grfica de tipo hombro izquierdo generada en Matlab.

Podemos ver que la grafica de la Figura 4 lleva un


comportamiento inverso o negativo a la funcin de hombro
derecho, y que se puede modelar tomando en consideracin
los mismos parmetros manipulados en la funcin anterior;
que para este caso para el valor de inicio y fin
corresponden a los valores en el eje X de 30 y 70
respectivamente.

La funcin f(x) para (para a<= x <=B con (a-


La funcin de pertenencia tipo hombro izquierdo
x)/(b-a), quedara
si se obtiene una de Figura 5.- Grfica correspondiente a la funcion de pertenencia tipo Pi obtenida
lnea decreciente
la siguiente manera. Vase ecuacin 2.1que inicia en (x,y)=(30,0) en lugar de en Matlab
solo
y=1 y termina en (x,y)=(70, -1) en lugar de
y=0. Desplazada una unidad hacia abajo.
En la Figura 5 se encuentra grficamente la funcin de
x 1 La condicin para (a<= x <=B) debe ser
(b-x)/(b-a)
pertenencia descrita por la forma tipo pi, en donde para efectos
visuales se le han dado valores simtricos; para este tipo de
x funciones se necesitan controlar cuatro parmetros, los cuales
f ( x) x (2.1) hemos denominado como inicio al punto donde la funcin

La funcin f(x) tomara valor de 0 solo a empieza a tener una pendiente positiva y por ende un valor de
de cuando x tome el valor asignado a pertenencia mayor que cero y que para en este caso en
x 0 partir B (beta, en la fig 4 es de 70), por lo que particular tiene un valor en el eje de las X de 15; el segundo
supongo debe ser desde el valor de B (70 en valor que controlamos es el valor que nosotros hemos llamado
fig 4)delo tipo
mayor a 70o saturacin
(para x izquierda
>=B es 0). Centro-Min dando referencia al valor centro mnimo que
Funcin de pertenencia hombro
Cambio de signo de <= a >= corresponde al primer punto de la grfica con valor de
pertenencia de uno que para este ejemplo pertenece al valor
Para cada valor que sea menor a le corresponde un valor
en X de 50.
de pertenencia de uno y permanecer en ese estado hasta
que X obtenga un valor entre y que como podemos ver
As como hay un centro-Mnimo tenemos un valor
en la ecuacin 2.1 le correspondera un valor con pendiente
Centro- Max refirindose al punto central correspondiente al
negativa y si analizamos con mas detenimiento la forma de la
ltimo valor de pertenencia uno en la funcin, que para esta
ecuacin con respecto a la que se present en la ecuacin 1.1
grfica concierne al valor en X de 150 y empieza a decrecer
podemos ver que el cambio se presenta en el orden de los
de manera lineal su grado de pertenencia con pendiente
factores del numerados, los cuales se encuentran invertidos; al
negativa hasta llegar al punto donde su grado de pertenencia
llegar a un valor mayor o igual a se ha alcanzado el valor es de cero el cual hemos llamado fin y su valor permanece
mnimo de pertenencia en esa funcin especfica. constante para valores mayores en el eje X.
5

El modelo que mejor describe el comportamiento de la


funcin de tipo pi se muestra en la ecuacin 3.1
Para la programacin de sta grfica utilizamos las siguientes
ecuaciones. Vase ecuacin 4.1
x
x x

x
x 1
f ( x) (3.1) x
f ( x) x (4.1)
x x
0 de otra manera

0 de otra manera

En el caso de la funcin triangular, consideramos como el


La ecuacin 3.1 dice que el grado de pertenencia de la variable punto de inicio. El carcter es considerado como el
X estar en funcin de los parmetros , , y , de otra centro. Mientras que es el punto final. Las dos
manera su valor ser de cero siendo para nuestro caso primeras ecuaciones mostradas en 4.1 se refieren a una
particular como nuestra variable inicio, centro-Min, pendiente positiva y una negativa, respectivamente.
centro-Max y por ltimo como nuestra variable fin favor
de ver el cdigo de la funcin en el Anexo A.3 En la Figura 6 se puede apreciar claramente los valores de
dichos parmetros. Cualquier valor antes del punto inicio es
igual a cero. Entre los puntos inicio y centro tenemos una
D) Generacin de Funcin Caracterstica tipo Triangular pendiente positiva dada por la primera ecuacin de 4.1. Entre
La funcin triangular la realizamos en clase como un ejemplo el punto centro y final tenemos una pendiente negativa
de programacin en Matlab. sta a su vez tambin se puede representada por la segunda ecuacin de 4.1. Adems de que
visualizar como la unin de las dos pendientes de las grficas cualquier valor mayor al punto final tendr un valor de cero.
de las funciones de los hombros izquierdo y derecho. En ste caso podemos apreciar que los valores dados en el
programa corresponden a: inicio =10, centro=50, final=90.
Para la realizacin de sta grfica solo utilizamos tres Esto dentro de un rango de 0 a 100 en el eje X.
parmetros. El primero denominado inicio que se refiere al En el anexo A.4 se encuentra el programa realizado para dicha
punto en donde empieza la pendiente positiva. El segundo funcin con sus respectivos comentarios.
denominado centro el cul es el punto en donde termina la
pendiente positiva y empieza la negativa. El tercero es E) Generacin de Funcin Caracterstica tipo S o
llamado fin y corresponde al punto en donde acaba la Sigmoidal
pendiente negativa. Vase Figura 6
La grfica correspondiente a la funcin caracterstica tipo s
es la nica de las anteriores que no se relaciona mucho con las
formas de stas. Esto es debido a que cuenta con un punto de
inflexin ubicado en el centro de la grfica. Sin embargo,
obteniendo las ecuaciones es sencillo programar la funcin.
Para su programacin utilizamos tres parmetros. El primero
se ubica en el punto donde la grfica empieza a crecer en el eje
Y, es decir en el punto donde empieza a tener una pendiente
exponencial y es denominado como inicio. El segundo
parmetro, llamado inflexin, es en donde se encuentra el
punto de inflexin de la grfica. Por ltimo el tercer parmetro
es denominado el final de la grfica despus del punto de
inflexin.

Los valores proporcionados al programa en un rango de 0 a


100 en el eje X fueron: inicio = 10, inflexin = 50,
final= 90. Vase Figura 7

Figura 6 Grfica correspondiente a la funcin de pertenencia tipo Triangular


obtenida en Matlab
6

muy altas con un a relacin de perteneca del 30%, por


ejemplo.

Claro est que el escptico podra decir que estadsticamente


una persona es muy alta si mide 1.95 m, basndose en un
argumento arbitrario, pero el resto de las personas tendran
todo el derecho a cuestionarlo. En la Figura 8 se representa el
grado de pertenencia al conjunto de "jvenes", en funcin de
la edad. La lnea roja representa el modelo tradicional, y el
verde, el difuso.

Figura 7 - Grfica correspondiente a la funcin de pertenencia tipo s o


sigmoidal obtenida en Matlab.

A continuacin se muestran las ecuaciones 5.1 utilizadas para


la realizacin de la grfica.

x 0 Figura 8 Funcin de pertenencia de edades jovenes


2
x
x 2

f ( x) 2
(5.1)
x El rango en la tercera
x 1 2 ecuacin debe iniciar en
b (punto de inflexin) y
terminar en c
1 de otra manera (b<= x <=c)
REFERENCIAS
[1] Apuntes del curso de Sistemas Inteligentes.
[2] Ogata, K. Discrete-Time Control Systems. Prentice Hall,
Para cualquier valor anterior a inicio o el grado de 1995.
pertenencia ser cero. Para el siguiente se utiliza la segunda [3] MatLab 7.0
ecuacin de 5.1 la cul se refiere al tramo acotado entre [4] http://www.caos.tv/fuzzy.html
inicio o e inflexin o . Despus encontramos el [5] Tarea funciones de membresa, cursos sistemas
tramo ubicado entre inflexin o y final o inteligentes Prof. Pedro Ponce, alumnos M. Adrin,
caracterizado por la tercera ecuacin de 5.1. Al finalizar Solares A. Helmut, Del Vecchyo Mario
tenemos que para cualquier valor mayor a final tendremos
un grado de pertenencia igual a uno.
El programa completo se puede ver en el anexo A.5

III. EJEMPLO DE APLICACIN

Si se dice "esta persona es muy alta" y otra persona contesta


"tal vez, pero no tanto" estamos ante un fenmeno de lgica
difusa: hasta qu punto podemos decir que el concepto "alto"
permite etiquetar a las personas? La lgica difusa nos permite
resolver esta contradiccin y asumirla como normal y,
finalmente, trabajar con expresiones de ese tipo. Entonces
diramos que esa persona es miembro del conjunto de personas
7

Anexo A
%%%%%%%%%%%%%%%%%%%
A. Programas de MatLab % Funcion de tipo hombro izquierdo %
%%%%%%%%%%%%%%%%%%%
Los diferentes programas desarrollados en MatLab que se
utiliza en el proceso de la prctica y que permite realizar la %codigo para limpiar memoria
programacin de las diferentes funciones de pertenencia y su clear all;
visualizacin grfica se presenta a continuacin.
% definicion de parametros ejes X Y
xmin=input (' minimo=');
A.1 este cdigo que a continuacin se enlista corresponde al xmax=input ('maximo=');
generado para reproducir la funcin de saturacin u hombro res=0.5;
derecho. ymin=0;
ymax=1;
%%%%%%%%%%%%%%%%%%
% Variables de entrada funcion especifica
% funcion de tipo hombro derecho%
b=input('fin=');
%%%%%%%%%%%%%%%%%%
a=input('centro=');
clear all;% funcion para borrar variables de memoria
ejex=xmin:res:xmax;
i=1;
% definicion de parametros de los ejes X Y
xmin=input (' minimo='); %minimo valor eje x
% grados de pertenencia de la funcion hombro izq
xmax=input ('maximo=');
for x=ejex;
res=0.5;
if (x<a)
ymin=0;
pertenhombroizq (i)=1;
ymax=1;
end
if (x>=a)&(x<b)
% variables de entrada de la funcion
pertenhombroizq (i)=1-(x-a)/(b-a);
b=input('centro=');
end
a=input('inicio=');
if (x>=b)
pertenhombroizq(i)=0;
ejex=xmin:res:xmax;
end
i=1;
i=i+1;
end
% condiciones de pertenencia de funcion tipo hombro
for x=ejex;
% codigo para generar resultados graficos
if (x<a)
plot(ejex,pertenhombroizq)
pertenhombroder(i)=0;
title('Funcion de pertenencia hombro izquierdo');
end
axis([xmin,xmax,ymin,ymax]);
if (x>=a)&(x<b)
ylabel('Grado de pertenencia');
pertenhombroder(i)=(x-a)/(b-a);
% fin del codigo
end
if (x>=b)
pertenhombroder(i)=1;
end A.3 El siguiente cdigo corresponde al desarrollado para la
i=i+1; funcin de pertenencia de tipo pi.
end
%%%%%%%%%%%
% parametros o codigo para graficar resultados
% funcion de tipo PI %
plot(ejex,pertenhombroder)
%%%%%%%%%%%
title('Funcion de pertenencia hombro derecho');
axis([xmin,xmax,ymin,ymax]);
clear all;% recomendable para lilmpiar toda
ylabel('Grado de pertenencia');
%variable que se queda en memoria
% fin del codigo
%rangos de valores para los ejes de la grfica
Cada uno de los cdigos listados en este anexo se encuentran xmin=input (' X_minima=');
debidamente comentados dentro del programa para su fcil xmax=input ('X_maxima=');
comprensin. res=0.5;
ymin=0;
ymax=1;

Se puede identificar los comentarios del programa ya que %parametros de entrada para la funcion especifica
son los nicos que vienen precedidos por un signo de b=input('centro-Min=');
d=input ('centro-Max=');
porcentaje y se encuentran al principio de cada grupo de a=input('inicio=');
instrucciones. c=input('fin=');
ejex=xmin:res:xmax;
i=1;

% condiciones de pertenencia de la funcion pi


for x=ejex;
A.2 Cdigo generado en Matlab para la funcin de if (x<a)|(x>=c)
pertenencia de tipo hombro izquierdo. pertenpi(i)=0;
8

end A.5 El siguiente cdigo corresponde al desarrollo para la


if (x>=a)&(x<b)
funcin de pertenencia de tipo S
pertenpi(i)=(x-a)/(b-a);
end
if (x>=b)&(x<d)
%%%%%%%%%%%
pertenpi(i)=1;
%Funcin de tipo "S"%
end
%%%%%%%%%%%
if (x>=d)&(x<c)
pertenpi(i)=1-(x-d)/(c-d);
clear all;
end
i=i+1;
%definicion parametros ejes X Y
end
xmin=input (' minimo=');
xmax=input ('maximo=');
% codigo para desplegar grafica de la funcin
res=0.5;
plot(ejex,pertenpi)
ymin=0;
title('Funcion de pertenencia forma pi');
ymax=1;
axis([xmin,xmax,ymin,ymax]);
ylabel('Grado de pertenencia');
%Variables entrada
% fin del codigo
b=input('inflexion=');
a=input('inicio=');
c=input('fin=');
A.4 El siguiente cdigo corresponde al desarrollado para la
funcin de pertenencia de tipo Triangular.
ejex=xmin:res:xmax;
i=1;
for x=ejex;
%%%%%%%%%%%%%%%
%Funcin de tipo Triangular %
%grado de pertenencia = 0
%%%%%%%%%%%%%%%
if (x<a)
pertens(i)=0;
clear all;
end
%definicin de parametros de ejes X Y
%tramo entre inicio e inflexin
xmin=input (' minimo=');%
if (x>=a)&(x<b)
xmax=input ('maximo=');
pertens(i)=2*(((x-a)/(c-a))^2);
res=0.5;
end
ymin=0;
ymax=1;
%tramo entre inflexion y fin
if (x>=b)&(x<=c)
%Variables de entrada de funcion triangular
pertens(i)=1-2*(((x-c)/(c-a))^2);
b=input('centro=');
end
a=input('inicio=');
c=input('fin=');
%grado de pertenencia = 1
if (x>c)
ejex=xmin:res:xmax;
pertens(i)=1;
i=1;
end
i=i+1;
for x=ejex;
end
%grado de pertenencia = 0
%cdigo para generar grfica
if (x<a)|(x>=c)
plot(ejex,pertens)
pertentri(i)=0;
title('Funcion de pertenencia forma s');
end
axis([xmin,xmax,ymin,ymax]);
ylabel('Grado de pertenencia');
%pendiente positiva
if (x>=a)&(x<b)
pertentri(i)=(x-a)/(b-a);
end

%pendiente negativa
if (x>=b)&(x<c)
pertentri(i)=1-(x-b)/(c-b);
end
i=i+1;
end

%cdigo para generar grfica


plot(ejex,pertentri)
title('Funcion de pertenencia triangular');
axis([xmin,xmax,ymin,ymax]);
ylabel('Grado de pertenencia');

También podría gustarte