Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MATLAB
Control Inteligente
Gonzlez Moreno Antonio de Jess - March 10, 2016
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
Funcin Triangular
Funcin Trapezoidal
Funcin Gaussiana
Funcin Gaussiana
Funcin Sigmoidal
Objetivos Generales
Desarrollar un programa en MATLAB que muestre las principales Funciones de
Membresa.
Objetivos Particulares
-
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
%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,
% 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));
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)));
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);
10
11
12
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.
14
Indice
Portada .. 1
Introduccin . 2
Objetivos Generales 5
Objetivos Particulares . 5
Desarrollo.. 5
Uso de la aplicacin (GUI) .. 12
Conclusiones ... 14
Bibliografa .. 14
15