Está en la página 1de 22

PROGRAMACION

Operaciones definidas para


conjuntos difusos discretos y
continuos en MatLab

Dr. Ismael Osuna G.. Certified LabVIEW Associate Developer

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 AB


con funcin de
~ ~
pertenencia
mAB(x) = max { mA(x), mB(x) }
~ ~

La interseccin es un conjunto difuso denotado por ~A B


con
~
funcin de pertenencia definida como

mAB(x) = min { mA(x), mB(x) }


~ ~

c tiene funcin de
El complemento denotado como A
~
pertenencia
mAc (x) = 1 - mA(x)

Dr. Ismael Osuna G.. Certified LabVIEW Associate Developer

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? ');

Dr. Ismael Osuna G.. Certified LabVIEW Associate Developer

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 operacin es: ')
disp(resultado)
end
Dr. Ismael Osuna G.. Certified LabVIEW Associate Developer

% 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
vrtice')
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<pinicial) + (m1*x+b1).*((pinicial<=x)&(x<paltura))
+ (m2*x+b2).*((paltura<=x)&(x<pfinal)) + 0.*(pfinal<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<pinicial) + (m1*x+b1).*((pinicial<=x)&(x<paltura1)) +
altura.*((paltura1<=x)&(x<paltura2)) +
(m2*x+b2).*((paltura2<=x)&(x<pfinal)) +
0.*(pfinal<x) ;
if opcion==1
%Union
yresultado=max(yA,yB);
end
if opcion==2
%Interseccion
yresultado=min(yA,yB);
end
if opcion==3
%Complemento de A
yresultado=1-yA;
end
if opcion==4
%Diferencia A-B
yresultado=min(yA, 1-yB);
end
subplot(2,2,1); plot(x,yA,'b.')
subplot(2,2,2); plot(x,yB,'r.')
subplot(2,2,3:4); plot(x,yresultado, 'g.')
grid on

Dr. Ismael Osuna G.. Certified LabVIEW Associate Developer

EJERCICIO
Hacer un programa que dados dos conjuntos difusos discretos
calcule el producto cartesiano.

Hacer un programa que calcule las operaciones de union


interseccin, complemento y diferencia entre dos conjuntos
continuos trapezoidal y triangular a elegir por el usuario.

Hacer un programa que calcule las operaciones de unin,


interseccin, complemento y diferencia entre conjuntos
continuos que incluya funciones de pertenencia Gaussiana.
Dr. Ismael Osuna G.. Certified LabVIEW Associate Developer

COMPOSICION DE RELACIONES
DIFUSAS
Sea R una relacin difusa en X x Y y sea S una relacin difusa
~
~
en Y x Z. Se puede considerar una nueva relacin en X x Z
como la composicin 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
T = { ( (x,z), max { mR(x,y). mS(y,z) } ) | xX, yY, zZ }
y
~
Dr. Ismael Osuna G.. Certified LabVIEW Associate Developer

COMPOSICION MAX-MIN
y1

x1 a11

R=

x2 a21

.
.
.

y2

a12

yj

a1j

.
.
.

min{ a2n ,bm2 }

b12

b1n

y2 b21 b22

b2n
.
.
. .
.

.
.
.

yj b b
j1
j2
z1

valor
mximo

zr

.
.
.

S=

amj

min{ a21 , b12 }

z2

y1 b11

a22
a2j
. .
.
.
. .
.
.

xm am1 am2

min{ a22 , b22 }

z1

z2

bjn

z3

zn

x1
x2
.
.
.

xm
Dr. Ismael Osuna G.. Certified LabVIEW Associate Developer

COMPOSICION MAXIMO PRODUCTO


y1

y2

yj

x1 a11

a12

a1j

x2 a21

a22
a2j
. .
.
.
. .
.
.

.
.
.

R=

xm am1 am2

a21 .b12

a22 b22
.
.
.
.

a2n . bm2

z1

zr

b12

b1n

y2 b21 b22

b2n
.
.
. .
.

y1 b11

.
.
.

S=

.
.
.

yj b b
j1
j2

amj
z1

valor
mximo

z2

z2

bjn

z3

zn

x1
x2
.
.
.

xm
Dr. Ismael Osuna G.. Certified LabVIEW Associate Developer

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 composicin discreta RoS')
R=input('Introduce la relacin difusa R: ');
S=input('Introduce la relacin difusa S: ');
[renglonR, columnaR] = size(R);
[renglonS, columnaS] = size(S);
if columnaR ~= renglonS
disp('No es posible realizar la composicin 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 composicin deseas calcular? ');
Dr. Ismael Osuna G.. Certified LabVIEW Associate Developer

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 composicin es:')
disp(T)
end
Dr. Ismael Osuna G.. Certified LabVIEW Associate Developer

TALLER DE PROGRAMACION Y
DISPOSITIVAS LABVIEW SOLICITAR AL
CORREO

ismaos2006@gmail.com
Examen de unidad 26 de Febrero

CONJUNTOS DIFUSOS
CONTINUOS
Las operaciones de unin, interseccin, complemento y
diferencia no estn restringidas a conjuntos discretos. son
llevados de forma natural hacia conjuntos continuos
mediante su definicin

Dr. Ismael Osuna G.. Certified LabVIEW Associate Developer

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, interseccin, 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 la base; p:=punto de vrtice')
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<pinicial) + (m1*x+b1).*((pinicial<=x)&(x<paltura))
+ (m2*x+b2).*((paltura<=x)&(x<pfinal)) + 0.*(pfinal<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<pinicial) + (m1*x+b1).*((pinicial<=x)&(x<paltura1)) +
altura.*((paltura1<=x)&(x<paltura2)) +
(m2*x+b2).*((paltura2<=x)&(x<pfinal)) +
0.*(pfinal<x) ;
if opcion==1
%Union
yresultado=max(yA,yB);
end
if opcion==2
%Interseccion
yresultado=min(yA,yB);
end
if opcion==3
%Complemento de A
yresultado=1-yA;
end
if opcion==4
%Diferencia A-B
yresultado=min(yA, 1-yB);
end
subplot(2,2,1); plot(x,yA,'b.')
subplot(2,2,2); plot(x,yB,'r.')
subplot(2,2,3:4); plot(x,yresultado, 'g.')
grid on
Dr. Ismael Osuna G.. Certified LabVIEW Associate Developer

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 expresin:
z mC(z) dz
z* =
mC(z) dz
z*

Los puntos de cruce son los elementos x0 tales que mA(x0) =


Dr. Ismael Osuna G.. Certified LabVIEW Associate Developer

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 funcin')
disp('Se debe introducir la funcin 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 funcin: ');
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<pinicial) + (m1*x+b1).*((pinicial<=x)&(x<paltura)) +
(m2*x+b2).*((paltura<=x)&(x<=pfinal)) + 0.*(pfinal<x) ;
pc1=(0.5-b1)/m1;
pc2=(0.5-b2)/m2;
disp('Los puntos de corte son')
disp(pc1)
disp(pc2)
plot(x,y,'b.')
hold on
plot(x,0.5,'r--')
text(pc2,0.53,'puntos de corte')
grid on

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<pinicial) + (m1*x+b1).*((pinicial<=x)&(x<paltura1)) +
1.*((paltura1<=x)&(x<paltura2)) +
(m2*x+b2).*((paltura2<=x)&(x<pfinal)) + 0.*(pfinal<x) ;
pc1=(0.5-b1)/m1;
pc2=(0.5-b2)/m2;
disp('Los puntos de corte son')
disp(pc1)
disp(pc2)
plot(x,y,'b.')
hold on
plot(x,0.5,'r--')
text(pc2,0.53,'puntos de corte')
grid on

También podría gustarte