Vous êtes sur la page 1sur 15

Funciones de Membresa

MATLAB
Control Inteligente
Gonzlez Moreno Antonio de Jess - March 10, 2016

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

Introduction
La Lgica Difusa proporciona un mecanismo de inferencia que permite simular los
procedimientos de razonamiento humano en sistemas basa- dos en el conocimiento. La
teora de la lgica difusa proporciona un marco matemtico que permite modelar la
incertidumbre de los procesos cognitivos humanos de forma que pueda ser tratable por
un computador. En este primer captulo se describirn los fundamentos y caractersticas
de este mecanismo de representacin de la incertidumbre.
Lgica Difusa

Bsicamente la Lgica Difusa es una lgica multivaluada que per- mite representar
matemticamente la incertidumbre y la vaguedad, proporcionando herramientas formales
para su tratamiento.
En ocaciones podemos llegar a tener problemas cuando nos encontrarnos con algo
como: Cuando aumenta la complejidad, los enunciados precisos pierden su significado y
los enunciados tiles pierden precisin., que puede resumirse como que los rboles no
te dejan ver el bosque.
Bsicamente, cualquier problema del mundo puede resolverse como dado un
conjunto de variables de entrada (espacio de entrada), obtener un valor adecuado de
variables de salida (espacio de salida). La lgica difusa permite establecer este mapeo de
una forma adecua- da, atendiendo a criterios de significado (y no de precisin).
El trmino Lgica Difusa fue utilizado por primera vez en 1974. Actualmente se
utiliza en un amplio sentido, agrupando la teora de con- junto difusos, reglas si-entonces,
aritmtica difusa, cuantificadores, etc. En este curso emplearemos este significado extenso
el trmino.

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

Funciones de Membresa
Funcin Triangular

Funcin Trapezoidal

Funcin Gaussiana

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

Funcin Gaussiana

Funcin Sigmoidal

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

Objetivos Generales
Desarrollar un programa en MATLAB que muestre las principales Funciones de
Membresa.
Objetivos Particulares
-

Desarrollar un script para cada funcin de membresa.

Crear un programa en MATLAB utilizando las Funciones de Membresa definidas


anteriormente que muestre grficamente una funcin univaluada en un universo de
discurso dado, as como en un punto definido.

Elaborar un entorno GUI para el programa anterior con una ventana interactiva en la
cual el usuario pueda ingresar los datos y observar el resultante en un entorno visual.

Desarrollo

Funciones de Membresa (Script)


Triangular
function y = triangular(x, params)
if nargin ~= 2
error('Dos argumentos son requeridos por la FM Triangular.');
elseif length(params) < 3
error('La FM Triangular requiere por lo menos 3 parametros.');
end
a = params(1); b = params(2); c = params(3);
% Para calcular la funci?n triangular existen dos m?todos ?tiles:
% - Evaluacion de sus puntos cr?ticos y pendientes
% - Maximos y minimos de los valores ingresados mediante una evaluaci?n
% de los valores con respecto a ?0? (find, zeros, ones)
% Puntos criticos y evaluaci?n parametrica de la funci?n
%if x <= a,
% y = 0;
%elseif (a <= x & b >= x),
% y = (x - a) / (b - a);
%elseif (b <= x & c >= x),
% y = (c - x) / (c - b);
%elseif c <= x,
% y = 0;

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

%end
% Maximos y Minimos
if a > b,
error('Condicion parametrica invalida: a > b');
elseif b > c,
error('Condicion parametrica invalida: b > c');
elseif a > c,
error('Condicion parametrica invalida: a > c');
end
y = zeros(size(x));
% Shoulders izquierdo y derecho(y = 0)
index = find(x <= a | c <= x);
y(index) = zeros(size(index));
% Pendiente Izquierda
if (a ~= b)
index = find(a < x & x < b);
y(index) = (x(index)-a)/(b-a);
end
% Pendiente Derecha
if (b ~= c)
index = find(b < x & x < c);
y(index) = (c-x(index))/(c-b);
end
% Centro (y = 1)
index = find(x == b);
y(index) = ones(size(index));

Trapezoidal
function y = trapezoidal(x, params)
if nargin ~= 2
error('Dos argumentos son requeridos por la FM Trapezoidal.');
elseif length(params) < 4
error('La FM Trapezoidal requiere por lo menos 4 parametros.');
end
a = params(1); b = params(2); c = params(3); d = params(4);
% Para calcular la funci?n trapezoidal existen dos m?todos ?tiles:
% - Evaluacion de sus puntos cr?ticos y pendientes
% - Maximos y minimos de los valores ingresados mediante una evaluaci?n
% de los valores con respecto a ?0? (find, zeros, ones)
% Puntos criticos y evaluaci?n parametrica de la funci?n
%if x <= a,
% y = 0;
%elseif (a <= x & b >= x),
% y = (x - a) / (b - a);
%elseif (b <= x & c >= x),
% y = 1;
%elseif (b <= x & c >= x),
% y = (d - x) / (d - c);
%elseif d <= x,

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

% y = 0;
%end
if a > b,
error('Condicion parametrica invalida: a > b');
elseif c > d,
error('Condicion parametrica invalida: c > d');
end
y1 = zeros(size(x));
y2 = zeros(size(x));
% y1
index = find(x >= b);
if ~isempty(index),
y1(index) = ones(size(index));
end
index = find(x < a);
if ~isempty(index),
y1(index) = zeros(size(index));
end
index = find(a <= x & x < b);
if ~isempty(index) & a ~= b,
y1(index) = (x(index)-a)/(b-a);
end
% y2
index = find(x <= c);
if ~isempty(index),
y2(index) = ones(size(index));
end
index = find(x > d);
if ~isempty(index),
y2(index) = zeros(size(index));
end
index = find(c < x & x <= d);
if ~isempty(index) & c ~= d,
y2(index) = (d-x(index))/(d-c);
end
%y
y = min(y1, y2);

Gaussiana
function y = campanagauss(x, params)
if nargin ~= 2
error('Se requieren dos argumentos por la FM Campana de Gauss.');
elseif length(params) < 2
error('La FM de Gauss necesita por lo menos dos parametros.');
elseif params(1) == 0,
error('La FM de Gauss necesita un valor diferente de cero para Sigma.');
end
sigma = params(1); c = params(2);
y = exp(-(x - c).^2/(2*sigma^2));

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

Gaussiana Generalizada
function y = gaussbellgeneralized(x, params)
% GAUSSBELLGENERALIZED(X, [A, B, C]) = 1./((1+ABS((X-C)/A))^(2*B));
if nargin ~= 2
error('Dos argumentos son requeridos por la FM Gauss Generalizada.');
elseif length(params) < 3
error('La FM Campana Generalizada necesita por lo menos 3 parametros.');
elseif params(1) == 0,
error('Parametro inv?lido en gaussbellgeneralized() --> a == 0');
end
a = params(1); b = params(2); c = params(3);
tmp = ((x - c)/a).^2;
if (tmp == 0 & b == 0)
y = 0.5;
elseif (tmp == 0 & b < 0)
y = 0;
else
tmp = tmp.^b;
y = 1./(1 + tmp);
end

Sigmoidal
function y = sigmf(x, params)
% SIGMOIDAL(X, [A, C]) = 1./(1 + EXP(-A*(X-C)))
if nargin ~= 2
error('Dos argumentos son requeridos por la FM sigmoidal.');
elseif length(params) < 2
error('La FM sigmoidal requiere al menos dos parametros.');
end
a = params(1); c = params(2);
y = 1./(1 + exp(-a*(x-c)));

Script General (Entorno GUI)


function varargout = MembershipFunctions(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @MembershipFunctions_OpeningFcn, ...
'gui_OutputFcn', @MembershipFunctions_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

function MembershipFunctions_OpeningFcn(hObject, eventdata, handles, varargin)


handles.output = hObject;
guidata(hObject, handles);
function varargout = MembershipFunctions_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
axes(handles.axes1)
imshow(imread('ESIME-Logo.png'));
axes(handles.axes2)
imshow(imread('IPN-Logo1.png'));
function popupmenu1_Callback(hObject, eventdata, handles)
contenido = get(hObject,'String');
MemberFunction = get(hObject,'Value');
function popupmenu1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit1_Callback(hObject, eventdata, handles)
vector = get(handles.edit1,'String');
x = str2num(vector);
function edit1_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))


set(hObject,'BackgroundColor','white');
end
function pushbutton1_Callback(hObject, eventdata, handles)
MemberFunction = get(handles.popupmenu1,'Value')
x = sort(str2num(get(handles.edit1,'String')));
%f = find(x == str2num(get(handles.edit2,'String')));
%x1 = x(f);
x1 = str2num(get(handles.edit2,'String'));
switch MemberFunction
case 1
% Triangular
% a = Izquierda
% b = Centro
% c = Derecha
prompta = 'Ingrese el valor de a: ';
a = input(prompta);
promptb = 'Ingrese el valor de b: ';
b = input(promptb);
promptc = 'Ingrese el valor de c: ';
c = input(promptc);
promptizq = 'Ingrese el rango inferior: ';
izq = input(promptizq);
promptder = 'Ingrese el rango superior: ';
der = input(promptder);
y = triangular(x,[a b c]);
set(handles.text2,'String',num2str(y'));
y1 = triangular(x1,[a b c]);

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

axes(handles.axes3)
plot(x,y,x1,y1,'c*')
grid on
xlabel('Funcion de Membresia')
xlim([izq der])
case 2
% Trapezoidal
% a = Izquierda
% b = MaxSubida
% c = MaxBajada
% d = Derecha
prompta = 'Ingrese el valor de a: ';
a = input(prompta);
promptb = 'Ingrese el valor de b: ';
b = input(promptb);
promptc = 'Ingrese el valor de c: ';
c = input(promptc);
promptd = 'Ingrese el valor de d: ';
d = input(promptd);
promptizq = 'Ingrese el rango inferior: ';
izq = input(promptizq);
promptder = 'Ingrese el rango superior: ';
der = input(promptder);
y = trapezoidal(x,[a,b,c,d]);
set(handles.text2,'String',num2str(y'));
y1 = trapezoidal(x1,[a,b,c,d]);
axes(handles.axes3)
plot(x,y,x1,y1,'c*')
%plot(x,y)
grid on
xlabel('Funcion de Membresia')
ylim([-0.05 1.05]), xlim([izq der])
case 3
% Gausiana
% Sigma = Ancho
% x0 = Centro
promptsigma = 'Ingrese el valor de sigma: ';
sigma = input(promptsigma);
promptx0 = 'Ingrese el valor de x0: ';
x0 = input(promptx0);
promptizq = 'Ingrese el rango inferior: ';
izq = input(promptizq);
promptder = 'Ingrese el rango superior: ';
der = input(promptder);
y = campanagauss(x,[sigma x0]);
set(handles.text2,'String',num2str(y'));
y1 = campanagauss(x1,[sigma x0]);
axes(handles.axes3)
plot(x,y,x1,y1,'c*')
%plot(x,y)
grid on
xlabel('Funcion de Membresia')
ylim([-0.05 1.05]), xlim([izq der])
case 4
% Campana Generalizada
% a = Ancho
% b = Pendiente
% x0 = Centro
prompta = 'Ingrese el valor de a: ';
a = input(prompta);
promptb = 'Ingrese el valor de b: ';
b = input(promptb);
promptx0 = 'Ingrese el valor de x0: ';
x0 = input(promptx0);

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

10

promptizq = 'Ingrese el rango inferior: ';


izq = input(promptizq);
promptder = 'Ingrese el rango superior: ';
der = input(promptder);
y = gaussbellgeneralized(x,[a b x0]);
set(handles.text2,'String',num2str(y'));
y1 = gaussbellgeneralized(x1,[a b x0]);
axes(handles.axes3)
plot(x,y,x1,y1,'c*')
%plot(x,y)
grid on
xlabel('Funcion de Membresia')
ylim([-0.05 1.05]), xlim([izq der])
case 5
% Sigmoidal
% a = Pendiente
% a > 0 Abre por la derecha
% a < 0 Abre por la Izquierda
% x0 = Cruce
prompta = 'Ingrese el valor de a: ';
a = input(prompta);
promptx0 = 'Ingrese el valor de x0: ';
x0 = input(promptx0);
promptizq = 'Ingrese el rango inferior: ';
izq = input(promptizq);
promptder = 'Ingrese el rango superior: ';
der = input(promptder);
y = sigmoidal(x,[a x0]);
set(handles.text2,'String',num2str(y'));
y1 = sigmoidal(x1,[a x0]);
axes(handles.axes3)
plot(x,y,x1,y1,'c*')
%plot(x,y)
grid on
xlabel('Funcion de Membresia')
ylim([-0.05 1.05]), xlim([izq der])
otherwise
warning('Funcion no encontrada.')
end
function edit2_Callback(hObject, eventdata, handles)
function edit2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

11

Uso de la Aplicacin (GUI)


1 .- Escoger la Funcin de Membresa.
2 .- Ingresar el Universo de Discurso con los valores deseados.
3 .- Ingresar el Valor de Membresa particular que se desea visualizar.

Figura 1. Ingreso de Valores.


4 .- Ingresar en la ventana de comandos los valores requeridos para definir la funcin en
los puntos deseados.
5 .- Ingresar el rango minimo y mximo de la grfica.

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

12

Figura 2. Ingreso de Parmetros de Evaluacin.


6 .- El resultado de la operacin se muestra a continuacin en la Figura 3.

Figura 3. Resultado final de la operacin.

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

13

Nota: El Valor de Membresa que se ingrese debe estar contenido dentro de los valores del
Universo de Discurso. Este es definido con fines visuales y demostrativos para comprobar el
punto evaluado con los parmetros de entrada establecidos por el usuario, el asterisco de color azul
muestra el Valor de Membresa, mientras que la figura en color azul representa el Universo de
Discurso utilizado para visualizar grficamente la evaluacin del Valor de Membresa dentro de
la misma funcin. El Valor del vector y indica el valor numrico de la evaluacin del Valor de
Membresa.

Conclusiones
Los controladores difusos son una manera de obtener un control basado en variables
lingsticas bastante acertivo y tan aproximado y eficiente como lo sea la definicin de sus
elementos en los cuales se desarrollan operaciones lgicas basadas en un conjunto de
funciones llamadas Funciones de Membresa las cuales nos sirven para definir un
universo de discurso en el cual realizaremos un anlisis cualitativo de las variables de
entrada para obtener una o ms variables de salida que establezcan un manejo eficiente de
la informacin de salida, ya sea en trminos basados en ingeniera as como en otra clase
de contextos como lo es la economa, la psicologa, etc.

Bibliografa
Morillas Raya, A. (2006): Introduccin al anlisis de datos difusos.

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

14

Indice
Portada .. 1
Introduccin . 2
Objetivos Generales 5
Objetivos Particulares . 5
Desarrollo.. 5
Uso de la aplicacin (GUI) .. 12
Conclusiones ... 14
Bibliografa .. 14

FUNCIONES DE MEMBRESA - CONTROL INTELIGENTE

15

Vous aimerez peut-être aussi