PROGRAMACION Operaciones definidas para conjuntos difusos discretos y continuos en MatLab
OPERACIONES ENTRE CONJUNTOS DIFUSOS Sean A y B conjuntos difusos con funciones de pertenencia ~ ~ mA(x) y mB(x) respectivamente ~
~
La union es el conjunto denotado por A B con función de ~ ~ pertenencia •
mAB(x) ~ ~
= max {
mA(x), mB(x) ~
~
}
La intersección es un conjunto difuso denotado por A ~ función de pertenencia definida como •
mAB(x) ~ ~
= min {
mA(x), mB(x) ~
El complemento denotado como pertenencia •
mA
c
(x) = 1 - mA(x)
~
B ~
con
}
c tiene función de A ~
CODIGO %ESTE PROGRAMA CALCULA LAS OPERACIONES DE %UNION, INTERSECCION, %COMPLEMENTO Y DIFERENCIA %DE DOS CONJUNTOS DIFUSOS DISCRETOS clear all disp('Este programa realiza operaciones de conjuntos discretos A y B ') u=input('Introduce el conjunto difuso A: ') ; v=input('Introduce el conjunto difuso B: ') ; if (max(u) > 1) || (max(v)>1) || (min(u)< 0) || (min(v)<0) disp('Revise los valores de conjuntos difusos') else disp('Las operaciones que se pueden realizar son:') disp('1 UNION') disp('2 INTERSECCION') disp('3 COMPLEMENTO') disp('4 DIFERENCIA') opcion=input('Que operacion deseas calcular? ');
if (opcion==1) %opcion 1 Union resultado=max(u,v); end if (opcion==2) %opcion 2 interseccion resultado = min(u,v); end if (opcion==3) %opcion 3 complemento [m, n]=size(u); resultado = ones(m) - u; end if (opcion==4) %opcion 4 diferencia [m, n]=size(v); q=ones(m)-v; resultado=min(u, q); end disp('El resultado de la operación es: ') disp(resultado) end
% ESTE PROGRAMA REALIZA OPERACIONES SOBRE CONJUNTOS DIFUSOS CONTINUOS % DE UNA TRIANGULAR Y UNA TRAPEZOIDAL
clear all
clc disp('Este programa realiza las operaciones de dos conjuntos difusos continuos') disp('El conjunto difuso A es triangular') disp('El conjunto difuso B es trapezoidal') disp('Los datos para el conjunto A es de la forma [a, b, p]') disp('donde a:= punto inicial de la base; b:= punto final de la base; p:=punto de vértice') A=input('Introduce el vector de datos del conjunto A: '); disp('Los datos para el conjunto B es de la forma [a, b, p, q]')
disp('donde a:= punto inicial de la base; b:= punto final de la base') disp('donde p:= punto inicial del nucleo; q:= punto final del nucleo') B=input('Introduce el vector de datos del conjunto B: '); disp('Las operaciones que se pueden realizar son:') disp('1 UNION') disp('2 INTERSECCION') disp('3 COMPLEMENTO DE A') disp('4 DIFERENCIA A-B')
opcion=input('Que operacion deseas calcular? '); xi=min(min(A),min(B))-1; xf=max(max(A),max(B))+1; x=linspace(xi,xf,10000); altura=1; pinicial=A(1); pfinal=A(2); paltura=A(3); m1 = (1)/(paltura-pinicial); b1= - m1*pinicial; m2 = (1)/(paltura-pfinal); b2= - m2*pfinal; yA=0.*(x
b1=-m1*pinicial;
m2=(1)/(paltura2-pfinal);
b2=-m2*pfinal;
yB = 0.*(x
EJERCICIO Hacer un programa que dados dos conjuntos difusos discretos calcule el producto cartesiano.
Hacer un programa que calcule las operaciones de union intersección, complemento y diferencia entre dos conjuntos continuos trapezoidal y triangular a elegir por el usuario.
Hacer un programa que calcule las operaciones de unión, intersección, complemento y diferencia entre conjuntos continuos que incluya funciones de pertenencia Gaussiana.
COMPOSICION DE RELACIONES DIFUSAS una relación difusa en X x Y y sea S una relación difusa R ~ ~ en Y x Z. Se puede considerar una nueva relación en X x Z Sea
como la composición entre las relaciones difusas denotada por T = R o S ~ COMPOSICION MAX-MIN
•
T~= { ( (x,z), max { min { mR(x,y), mS(y,z) } } ) | xX, yY, zZ } y COMPOSICION MAXIMO PRODUCTO
•
{ mR(x,y). mS(y,z) } ) | xX, yY, zZ } T~ = { ( (x,z), max y
COMPOSICION MAX-MIN y1
R=
y2
y j
z1
z2
zr
x1 a 11 a 12
…
a 1j
y1 b 11 b 12
…
b 1n
x2 a 21 a 22
…
a 2j
y2 b 21 b 22
…
b 2n
. . .
. . .
xm a m1 a m2
.
. . . . …
z1
. . .
min{ a 2n ,b m2 }
valor máximo
. . .
.
y j b b j1 j2
a mj
min{ a 21 , b 12 } min{ a 22 , b 22 }
. . .
S=
x1 x2 . . .
xm
z2
z3 …
. . . . …
b jn
zn
COMPOSICION MAXIMO PRODUCTO y1
R=
y2
y j
z1
z2
zr
x1 a 11 a 12
…
a 1j
y1 b 11 b 12
…
b 1n
x2 a 21 a 22
…
a 2j
y2 b 21 b 22
…
b 2n
. . .
. . .
xm a m1 a m2
a 21 .b 12 a 22 . b 22 . . .
.
. . . . …
. . .
S=
.
y j b b j1 j2
a mj
z1 valor máximo
. . .
x1 x2 . . .
a 2n . b m2 xm
z2
z3 …
. . . . …
b jn
zn
CODIGO %ESTE PROGRAMA ES PARA CALCULAR LA COMPOSICION DE RELACIONES %DIFUSAS POR LOS METODOS DE MIN-MAX Y MAXIMO PRODUCTO
clear all clc disp('Este programa realiza las composición discreta RoS') R=input('Introduce la relación difusa R: '); S=input('Introduce la relación difusa S: '); [renglonR, columnaR] = size(R); [renglonS, columnaS] = size(S); if columnaR ~= renglonS disp('No es posible realizar la composición RoS.'); else T=zeros(renglonR,columnaS); D=zeros(renglonS,1); disp('Las operaciones que se pueden calcular son:'); disp('1 MIN - MAX'); disp('2 MAXIMO PRODUCTO'); opcion=input('Que tipo de composición deseas calcular? ');
for k=1:renglonR for j=1:columnaS C1 = R(k , :) ; C2 = S(: , j) ; for cont = 1:renglonS if opcion==1 D(cont)=min(C1(cont),C2(cont)); else D(cont)=C1(cont)*C2(cont); end end T(k , j) = max(D); end end disp('El resultado de la composición es:') disp(T) end
•
TALLER DE PROGRAMACION Y DISPOSITIVAS LABVIEW SOLICITAR AL CORREO
[email protected] Examen de unidad 26 de Febrero
CONJUNTOS DIFUSOS CONTINUOS Las operaciones de unión, intersección, complemento y diferencia no están restringidas a conjuntos discretos. son llevados de forma natural hacia conjuntos continuos mediante su definición
CODIGO % ESTE PROGRAMA REALIZA OPERACIONES SOBRE CONJUNTOS DIFUSOS CONTINUOS % DE UNA TRIANGULAR Y UNA TRAPEZOIDAL clear all clc disp('Este programa realiza las operaciones de union, intersección, complemento y diferencia ') disp('de dos conjuntos difusos continuos.') disp('El conjunto difuso A es triangular') disp('El conjunto difuso B es trapezoidal') disp('Los datos para el conjunto A es de la forma [a, b, p]') disp('donde a:= punto inicial de la base; b:= punto final de l a base; p:=punto de vértice') A=input('Introduce el vector de datos del conjunto A: '); disp('Los datos para el conjunto B es de la forma [a, b, p, q]') disp('donde a:= punto inicial de la base; b:= punto final de l a base') disp('donde p:= punto inicial del nucleo; q:= punto final del nucleo') B=input('Introduce el vector de datos del conjunto B: '); disp('Las operaciones que se pueden realizar son:') disp('1 UNION') disp('2 INTERSECCION') disp('3 COMPLEMENTO DE A') disp('4 DIFERENCIA A-B')
opcion=input('Que operacion deseas calcular? '); xi=min(min(A),min(B))-1; xf=max(max(A),max(B))+1; x=linspace(xi,xf,10000); altura=1; pinicial=A(1); pfinal=A(2); paltura=A(3); m1=(1)/(paltura-pinicial); b1=-m1*pinicial;
m2=(1)/(paltura-pfinal); b2=-m2*pfinal; yA=0.*(x
clear pinicial pfinal m1 m2 b1 b2; pinicial=B(1); pfinal=B(2); paltura1=B(3); paltura2=B(4); m1=(1)/(paltura1-pinicial);
b1=-m1*pinicial;
m2=(1)/(paltura2-pfinal);
b2=-m2*pfinal;
yB = 0.*(x
METODO DEL CENTROIDE Para un conjunto difuso lo que se busca es el punto de gravedad del conjunto difuso. El cual puede ser calculado con la expresión:
z mC(z) dz z* = mC(z)
dz z*
Los puntos de cruce son los elementos x0 tales que mA(x0) = ½
CODIGO %ESTE PROGRAMA CALCULA EL CENTROIDE DE UNA FUNCION %ES NECESARIO INTRODUCIR LA FUNCION DE LA FORMA %@(x) (f1).*(intervalo1)+(f2).*(intervalo2)+... clear all clc syms x disp('Este programa calcula el centroide de una función') disp('Se debe introducir la función de la forma') disp('@(x) (f1).*(intervalo1) + (f2).*(intervalo2) + ..') a= input(‘Introduce el extremo inicial del intervalo: '); b= input(‘Introduce el extremo final del intervalo: '); f=input('Introduce la función: '); t=a:0.0001:b; y=f(t); Numerador=t.*f(t); Denominador = f(t); Suma1=sum(Numerador); Suma2=sum(Denominador); resultado=Suma1/Suma2; disp('El resultado es: ') disp(resultado)
CODIGO %ESTA FUNCION PERMITE CALCULAR LOS PUNTOS DE CORTE DE %UNA FUNCION TRIANGULAR
function triangulo(pinicial,paltura,pfinal) x=pinicial-1:0.001:pfinal+1; m1=1/(paltura-pinicial); b1=-m1*pinicial; m2=1/(paltura-pfinal); b2=-m2*pfinal; y= 0.*(x
CODIGO %ESTA FUNCION PERMITE CALCULAR LOS PUNTOS DE CORTE DE %UNA FUNCION TRAPEZOIDAL
function trapecio(pinicial,paltura1,paltura2,pfinal) x=pinicial-1:0.01:pfinal+1; m1=1/(paltura1-pinicial); b1=-m1*pinicial; m2=1/(paltura2-pfinal); b2=-m2*pfinal; y=0.*(x