Академический Документы
Профессиональный Документы
Культура Документы
POSADAS VERONICA
PROBLEMAS A RESOLVER
1. VARIABLESLINGÜÍSTICAS
a) Utilizando la interfaz gráfica de los sistemas de inferencia, o desde la línea de
comandos de Matlab, definir 3 variables con las siguientes características:
1º variable (v1): alcance (-10,+10). Tres particiones lineales hombro-triangulo-hombro con
parámetros (-10, -8, -2), (-6,1, 5), (2, 7, 10) respectivamente.
x=(-10:1:10);
V11=trapmf(x,[-10 -10 -8 -2]); V11=trapmf(x,[-10 -10 -8 -2]); ESTE PARAMETRO
(RESALTADO) COMO NO SE DIO COMO DATO, SE PONE UN VALOR IGUAL AL
PARAMETRO ANTERIOR, ES DECIR DEBE SER -10.
V12=trimf(x,[-6 1 5]);
V13=trapmf(x,[2 7 10 10]); MODIFICAR EL ULTIMO PARAMETRO QUE DEBE SER IGUAL
A 10
plot(x,V11,x,V12,x,V13)
x=(0:0.1:20);
V21=trapmf(x,[-1 0 2.5 4]);
V22=trapmf(x,[1.6 3 6 8]);
V23=trimf(x,[4.8 9.4 12]);
V24=trapmf(x,[8.6 12.8 14.3 16]);
V25=trimf(x,[12.6 17 20]);
plot(x,V21,x,V22,x,V23,x,V24,x,V25)
COMO OBTUVO EL SOLAPAMIENTO DEL 30% ENTRE LAS PARTICIONES?
Lo primero que hay que hacer es calcular el valor de solapamiento que van a tener
las particiones, para eso, el alcance de 20 unidades del eje X, lo dividimos en 5, ya
que serán 5 figuras 20/5=4 entonces las bases de las figuras deben tener un ancho de
4 unid (Figuras rojas dibujadas sin solapamiento). Como deben tener un
solapamiento del 30% entonces mediante regla de tres simple calculamos del 30% de
las 4 unidades
4 x 30 %
=1 , 2 Luego los 1,2 lo dividimos en 2 para repartirlo a ambos lados
100 %
entonces tenemos 0,6 de solapamiento para cada lado. (figuras en color azul).
Luego para los parámetros de cada partición sumamos y restamos este valor de
solapamiento Ej: 4+0,6 y 4- 0,6
Por ej: La primera partición tendrá los siguientes parámetros:
1ra partición: (0 0 2 4.6)
2da partición: (3.4 5 7 8.6)
x=(0:0.1:20);
V21=trapmf(x,[0 0 2.5 4.6]);
V22=trapmf(x,[3.4 4 6 8.6]);
V23=trimf(x,[7.4 9.4 12.6]);
V24=trapmf(x,[11.4 12.8 14.3 16.6]);
V25=trimf(x,[15.4 17 20]);
plot(x,V21,x,V22,x,V23,x,V24,x,V25)
3º variable (v3): alcance (0, 10). Cinco particiones con funciones continuas y derivables Z
shape (zmf()) - gaussiana - campana generalizada - gaussiana - S shape ( smf()).
Parámetros a definir por el usuario para una distribución simétrica y un solapamiento
aproximado al 25%.
X=(0:0.01:10);
V31=zmf(X,[1 2]);
V32=gaussmf(X,[0.5 2.5]);
V33=pimf(X,[3 4 6 7]);
V34=gaussmf(X,[0.4 7.5]);
V35=smf(X,[8 9.5]);
plot(X,V31,X,V32,X,V33,X,V34,X,V35)
Como en este ejercicio, las particiones son funciones “curvas” ayudarse con el toolboox de
Fuzzy, se abre escribiendo fuzzy en la línea de comandos, ya que ahí al dibujar las particiones
se puede mover la gráfica para ajustarla, después sólo fijarse en los parámetros y eso
parámetros son los que se usa para la línea de comando.
b) Un sistema de lógica fuzzy debe reemplazar dos funciones lineales por tramos, con
funciones continuas y derivables, de manera que el error cuadrático medio sea
menor a 10-2. Calcular los parámetros en cada caso:
1º función escalón (heaviside): alcance (0, 10), con flanco creciente en 7. Reemplazar con
función hombro derecho (s-shape) o función sigmoide según convenga.
x=(0:0.1:10);
escalon=heaviside(7); PARA LA FUNCION ESCALON EL COMANDO CORRECTO SERÍA
escalon=heaviside(X-7); CORREGIR
hombroD=smf(x, [6.9 7.1]);
plot(x,escalon,x,hombroD)
Error=mse(escalon,hombroD) CONTROLAR QUE ESTE ERROR SEA MENOR A 10^-2=0,01
x=(0:0.1:10);
escalon=heaviside(x-7);
hombroD=smf(x, [6.9 7.1]);
plot(x,escalon,x,hombroD)
Error=mse(escalon,hombroD)
2º función triángulo (trimf): alcance (0, 10), con parámetros (3,6,9). Reemplazar con
función gaussiana o diferencia de sigmoides según convenga.
x=(0:0.1:10);
triangulo=trimf(x,[3 6 9]);
gauss=gaussmf(x,[1.25 6]);
plot(x,triangulo,x,gauss)
Error=mse(triangulo, gauss)
En Matlab el error cuadrático medio se calcula con la función mse(). ECM = Error
Cuadrático Medio (en español); MSE = Mean Square Error (en inglés).
Investigar la posible utilización de la aplicación gráfica cftool
2. FUNCIONES ADVERBIALES
Definir y escribir las funciones de Matlab que realicen las siguientes transformaciones.
Graficar.
a) Función concentración ......f1 = concen(x,mu0) f1
=
μ
02
% funcion concentracion
function [f1] = concentracion (x,mu0)
if nargin == 2 %controlo que la cantidad de argumentos de
entrada sea 2
if (mu0<=1) && (mu0>=0)
f1 = mu0.^2;
str = sprintf('advervio %s ; mu0: %d', x, f1);
disp(str);
else
disp ('mu0 debe estar entre 1 y 0');
end
else
disp('Debe ingresa el adverbio seguido del valor de la
difusidad');
end
EJEMPLO
x=(0:0.1:10);
mu=trapmf(x,[2 4 6 8]);
C=concentracion(x,mu);
plot(x,mu, x,C)
b) Función dilación f2 = dilac(x,mu0) f2
=
μ
01
/2
% funcion dilacion
function [f2] = dilacion (x,mu0)
if nargin == 2 %controlo que la cantidad de argumentos de
entrada sea 2
if (mu0<=1) && (mu0>=0)
f2 = mu0.^(1/2);
str = sprintf('advervio %s ; mu0: %d', x, f2);
disp(str);
else
disp ('mu0 debe estar entre 1 y 0');
end
else
disp('Debe ingresar el adverbio seguido del valor de la
difusidad');
end
EJEMPLO
x=(0:0.1:10);
mu=trapmf(x,[2 4 6 8]);
D=dilacion(x,mu);
plot(x,mu, x,D)
2*μ0
si μ0 [0 ; 0.5]
c) Función intensificación f3 = intens(x,mu0) f3=
1-2*(1-μ0)2 si μ0 [0.5 ;
1]
% funcion intesificacion
function [f3] = intensificacion (x,mu0)
if nargin == 2 %controlo que la cantidad de argumentos de entrada sea
2
if (mu0<=1) && (mu0>=0)
if (mu0 <= 0.5)
f3 = 2*(mu0);
str = sprintf('advervio %s ; mu0: %d', x, f3);
disp(str);
else
f3 = 1-(2*((1-mu0).^2));
str = sprintf('advervio %s ; mu0: %d', x, f3);
disp(str);
end
else
disp ('mu0 debe estar entre 1 y 0');
end
else
disp('Debe ingresa el adverbio seguido del valor de la difusidad');
end
EJEMPLO
x=(0:0.1:10);
mu=trapmf(x,[2 4 6 8]);
I=intensificacion(x,mu);
plot(x,mu, x,I)
ADJUNTAR GRÁFICAS
3. OPERADORESLÓGICOSFUZZY
Definir según un criterio coherente, las variables lingüísticas aspecto (particiones “lindo”,
“estándar”, “feo”); y altruismo (particiones “generoso”, “insensible” “avaro”). Seleccionar las
funciones de pertenencia para cada partición, en un rango [0 ; 10] y graficarlas. Luego,
mostrar cómo serían las funciones de pertenencia cuando se aplican los operadores lógicos
que se indican a continuación:
x=(0:0.1:10);
feo=trapmf(x,[-1 0 4 5]);
estandar=trimf(x,[3 5 7]);
lindo=trapmf(x,[6 8 10 12]);
plot(x,feo,x,estandar,x,lindo)
avaro=trapmf(x,[-1 0 4 6]);
insensible=trimf(x,[4 6 7]);
generoso=trapmf(x,[6.5 8 10 12]);
plot(x,avaro,x,insensible,x,generoso)
a) Lindo y no avaro.
A=min(lindo,1-avaro);
plot(x,A)
b) Feo o generoso.
B=max(feo,generoso);
plot(x,B)
c) Estándar XOR insensible (en este caso conviene descomponer la función XOR en los
operadores básicos.
INCOMPLETO
Comentar cómo resultan las funciones de pertenencia compuestas (comprimidas, expandidas,
sesgadas, deformadas, etc.
4. ADVERBIOSFUZZY
4. Dibujar las modificaciones que sufren las funciones de pertenencia dadas, al aplicarle
sucesivamente los adverbios fuzzy que se indican:
x=0:0.1:60;
periferia=trapmf(x,[10 25 50 50]);
cercano=periferia.^1.4;
plot(x,periferia, x,cercano)
ligeramente=periferia.^1.2;
plot(x,periferia,x,ligeramente)
5. APLICACIÓNDEADVERBIOSMÚLTIPLES
Escribir una función de Matlab que aplique sucesivamente hasta tres adverbios fuzzy a una
secuencia de pertenencia base mu0, con las siguientes condiciones:
e) La función debe generar además una gráfica que muestre el conjunto de base y los
conjuntosmodificados con diferentes colores, sobre el mismo sistema de ejes.
INCOMPLETO
6. AJUSTEDEFUNCIONES
Un experto proporciona al Ing. de Conocimiento un conjunto de 21 puntos representativos de
un conjunto fuzzy que define la pertenencia de una variable V F. Para poder utilizar tal
información el Ing. debe definir una función que represente a tales puntos. Investigar entre
las funciones de pertenencia usuales (Ver help), cual es la que mejor se ajusta al conjunto de
puntos dados. En el caso de las funciones paramétricas, se deben ajustar adecuadamente sus
parámetros. Dibujar sobre un sistema de ejes la nube de puntos y la función seleccionada.
Orientación: Investigar GUI cftool.
VF 1 5 9 13 17 3 7 11 15 19
mu 0,126 0,814 0,964 0,915 0,485 0,546 0,913 0,959 0,792 0,157
18 0 4 8 12 16 20 2 6 10 14
0,421 0,097 0,632 0,957 0,957 0,655 0,141 0,278 0,905 0,970 0,800
vr=[1 5 9 13 17 3 7 11 15 19 18 0 4 8 12 16 20 2 6 10 14];
mu=[0.126 0.814 0.964 0.915 0.485 0.546 0.913 0.959 0.792 0.157 0.421 0.097 0.632 0.957
0.957 0.655 0.141 0.278 0.905 0.970 0.800];
funcion=gaussmf(x,[6 10]);
plot(vr,mu,x,funcion)