Logo Studenta

TPS_IA2020

Vista previa del material en texto

2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 2 
 
 
1. Matrices: Generar matrices con las características que se indican 
 
 
a) Matriz de 6x5 de valores aleatorios enteros. Las primeras tres filas en el intervalo (0,1), 
las tres filas restantes en el intervalo (-1,1). 
A=round(rand(3,5)) 
B=-1+(1+1)*randn(3,5) 
C=[A;B] 
b) Matriz A de 20x25 de valores enteros positivos. Extraer una matriz A1(3x8) desde la 
posición (5,5). Matriz A2 que resulte de la eliminación de las columnas 11 a 14 y las filas 
9 a 13 de A. 
 
A=randi([1 100],20,25) %Crea una matriz 20x25 en el intervalo [1 100] 
A=round() 
A1=A(5:7,5:12) % Extraer una matriz A1(3x8) desde la posición (5,5) 
aux=A %Crea una matriz auxiliar para trabajar sobre ella 
aux(:,11:14)=[] %Elimina las columnas desde la 11 hasta la 14 
aux(9:13,:))=[] %Elimina las filas desde la 9 a la 13 
A2=aux %Asigna la matriz auxiliar a una matriz A2 
 
c) Matriz de 15x1 de números aleatorios enteros de dos dígitos. Determinar la posición y 
valor del menor y del mayor. 
A=round(9+91*rand(15,1)) %Matriz de 15x1 de números aleatorios enteros de dos dígitos 
[Valor,Fila]=min(A(:,1)) %Devuelve el menor valor y su posición 
[Valor,Fila]=max(A(:,1)) %Devuelve el mayor valor y su posición 
 
d) Matriz aleatoria de 5x5, valores enteros en el intervalo (-25 ; 75). Ordenar por filas (orden 
creciente). Ordenar por columnas (orden decreciente). 
 
 
A=round(-25+100*rand(5,5)) % Matriz aleatoria de 5x5, valores enteros en el intervalo (-25 ; 75). 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 3 
 
 
f=sort(A,2) %El 2 indica ordenación por filas de la matriz A por defecto en forma Ascendente 
c=sort(A,1,'descend') %El 1 indica ordenación por columnas de la matriz A en forma Descendente 
 
2. Grafica. Desde la línea de comandos ejecutar las sentencias necesarias para 
graficar las siguientes funciones: 
 
a) Funciones seno y coseno en el intervalo [0, 2π] con un mínimo de 100 puntos cada 
una, línea continua, color rojo para seno, grosor 2, marca x; color azul para coseno, 
grosor 2, marca rombo. Graficar sobre el mismo sistema de ejes (ver comando hold on). 
>> x = linspace(0, 2*pi,100); 
>> y1 = sin(x); 
>> y2 = cos(x); 
>> plot(x,y1,'rx','lineWidth',2) 
>> hold on 
>> plot(x,y2,'bd','linewidth',2) 
>> xlabel(‘Eje X'); 
>> ylabel('Eje Y'); 
>> title('CURVAS DE SENO Y COSENO.'); 
>> gtext('SEN(X)'); 
>> gtext('COS(X)'); 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 4 
 
 
 
 
 
 
 
 
b) y2 = e((((x-5).^2)/2)) Intervalo (0 ; 10), línea de trazos, color negro, grosor 2, marca 
rombo. Mínimo 50 puntos. 
 
 
 
>> x = linspace(0, 10,50); 
>> y2=exp((((x-5).^2)/2)); 
>> plot(x,y2,'k-d','linewidth',2) 
>> xlabel('X'); 
>> ylabel('Y'); 
>> title('FUNCION e'); 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 5 
 
 
>> plot(x,y2,'k--d','linewidth',2) 
 
 
c) Graficar la función definida por partes que se indica. Cada intervalo debe contener por 
lo menos 20 puntos. Cada sección debe ser de un color diferente. 
 
 
 
 
X1 = linspace (-10,-2, 20); 
X2 = linspace (-2, 0, 20) ; 
X3 = linspace (0, -10, 20); 
Y1 = -2.186*X1 -12.864; 
Y2 = 4.246 * X2; 
Y3 = 10*exp(-0.05*X3-0.5).*sin(0.03*X3.^2+0.7*X3); 
plot(X1, Y1, X2, Y2, X3, Y3); 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 6 
 
 
d) Matlab utiliza funciones identificadas como membership functions (mf) para aplicarlas en 
los sistemas de lógica fuzzy. Identificar las funciones identificar las funciones gaussmf y 
trapmf (usar el help) y definir sus parámetros para graficarlas completas en el intervalo 
[0 ; 10]. Graficar ambas sobre el mismo sistema de ejes (hold on) y distinto color. 
 
 
x = 0:0.1:10; 
y1 = gaussmf(x,[2 5]); 
y2 = trapmf(x,[1 5 7 8]); 
plot(x,y1) 
hold on plot(x,y2) 
xlabel('gaussmf, P=[2 5]') 
xlabel('trapmf, P=[1 5 7 8]') 
ylim([-0.05 1.05]) 
gtext('gaussmf'); 
gtext('trapmf'); 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 7 
 
 
3. Series. Generar las series que se indican: a) Generar una serie de 33 números aleatorios 
enteros de 3 cifras, en el intervalo [100;200]. 
z=fix(linspace(100,200,33)) 
 
 
b) Generar una serie S1 en el intervalo [0 ; 2] con un intervalo de /3.3 (usar el operador ‘:’). 
Generar una serie S2 en el mismo intervalo que contenga 7 elementos (usar la función 
linspace). Comparar ambas series y explicar sus diferencias. 
S1=[0:(pi/3.3):2*pi] 
S2=linspace(0,2*pi,7) 
La primera serie su elemento i esimo es (n-1)*pi/3.3 
Y la otra serie se genera i esimo es (n-1)*1.0472 
c) Explicar cuál es el problema al intentar generar las siguientes series: >> [10 : -2 : 25]> [-5 : 11 
: 9] >> [42 : 2.5 : 23] 
• [10 : -2 : 25] no se puede porque está retrocediendo con “ -2 ”. 
• [-5 : 11 : 9] el salto es muy grande supera a la cota superior 
• [42 : 2.5 : 23] el “2.5” tiene que se negativo ya que el lado izquierdo es mayor que el 23 
 
 
4. Escribir funciones en línea de comando. Detectar e indicar cuál es el problema 
que ocurre al intentar escribir en Matlab las siguientes funciones, solucionarlo y 
escribirlas adecuadamente: 
 
a) >> P1 = a * x^2 + b * x + c 
 
 
x = 
 
 
1 3 4 
 
 
>> P1 = a * x^2 + b * x + c 
El problema es el punto en x.^2 si x es un vector 
Problema de Definición de variable 
 
b) >> F(A,B,C) = 3 + 9^2 + pi 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 8 
 
 
Error de sintaxis 
 
 
c) >> a=5; b=21; x=[4 5 6]; f1 = a*x+b*x^2 
a=5; b=21; x=[4 5 6]; f1 = a*x+b*x.^2 
el error en el punto por que x es un vector 
 
d) >> m=ones(2); n=magic(2); x=[7 8 9]; g1=m^2*x+x^*n 
 
 
Las dimensiones internas de la matriz deben coincidir. 
 
e) ¿para qué sirve el operador ‘.’ y el operador ‘;’? 
R/ “;” : sirve para definir el final de una operación parcial ”delimita cuando termina una línea de código” 
 
R/ “.”este carácter de punto separa las partes entera y fraccional de un número, como 3.1415. Los 
operadores de MATLAB que contienen un punto siempre actúan elemento por elemento. El carácter de 
punto también le permite acceder a los campos de una estructura, además de a las propiedades y los 
métodos de un objeto. 
 
 
5. Cambio de escala (reescalado). 
x=linspace(0,4,10) 
y=(4/3)*x 
x1=linspace(0,4,10) 
y1=-4*x+16 
plot(x,y,x1,y1) 
b) La ecuación siguiente representa a una función wavelet Morlet. Graficarla en el 
intervalo (-10,10) con un mínimo de 100 puntos. 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 9 
 
 
Re escalar la secuencia (sólo de ordenadas) al intervalo (-1,0) y graficar conjuntamente con la 
función original 
 
x=-10:0.001:10; 
y=cos(3*x).* exp(-(x.^2/2)); 
x1=-1:0.001:0; 
y1=cos(3*x1).* exp(-(x1.^2/2)); 
plot(x,y,x1,y1); 
title('FUNCION WAVELET MORLET.'); 
xlabel('X'); 
ylabel('Y'); 
gtext('y=cos(3*x).* exp(-(x.^2/2))'); 
gtext('y1=cos(3*x1).* exp(-(x1.^2/2))'); 
 
 
 
6. Ruido. Sobre la secuencia temporal generada por la ecuación: y = 10 * sin(2*t) + 5 
a) Obtener 50 puntos para t perteneciente a [0,120º]. Verificar en qué unidades trabaja sin(). 
t=linspace(0,2.0944,50); 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 10 
 
 
y = 10 * sin(2*t) + 5; 
b ,c) Graficar la señal sin ruido en rojo y superponer la señal con ruido en azul. 
y = 10 * sin(2*t); 
ruido=awgn(y,0.1); 
plot(t,y,'r',t,ruido,'b','linewidth',3); 
grid on; 
 
x1=0:0.0001:1; 
d) Calcular para ambas secuencias, la media (µ) y la desviación estándar (σ). 
>> u=mean(t); 
>> o=std(t); %desiviacion estandar 
>> u , o 
 
u = 
1.0472 
 
o = 
0.6231 
 
 
7. Scripts 
a) Escribir un script que dibuje un pulso como el de la figura. Los puntos (a, b, c, d) deben ser 
solicitados al usuario. Los flancos deben verse verticales. 
 
 
while (true) 
num1=input('ingrese valor: '); 
num2=input('ingrese valor: '); 
num3=input('ingrese valor: '); 
num4=input('ingrese valor: '); 
 
x=[num1num2 num2 num3 num3 num4]; 
z=[0 0 1 1 0 0 ]; 
plot(x,z); 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 11 
 
 
 
 
break; 
end 
 
b) Escribir un script que genere una matriz identidad de 1010. Luego, el script debe 
rellenar la matríz con valores aleatorios enteros del intervalo [2 ; 9], excepto en las 
celdas donde están los ‘1’. Orientación: revisar las funciones eye() y randi(). 
 
x=eye(10); 
for i=1:10 
for j=1:10 
if i ~= j 
x(i,j)=2+round(7*rand()); 
end 
end 
end 
 
x 
 
c) Escribir un script para ejecutar en forma automática el problema 3.a) anterior. La 
cantidad de números de la serie debe ser introducida por el usuario (función input), lo 
mismo que la cantidad de cifras de los números y el intervalo de la serie. 
clear; 
d=input('ingrese numeros de la serie'); 
fprintf('\n'); 
f=input('ingrese cantidad de cifras'); 
fprintf('la cantidad de cifras del numero elegido debe ser %d \n',f);%4 
a=input('ingrese a');%a cantidad de cifras 4 
 
canta=length(int2str(a)); 
 
 
while canta<f || canta>f 
fprintf('haga caso \n'); 
 
a=input('ingrese a'); 
canta=length(int2str(a)); 
end 
%b cantidad de cifras mayor o igual 4 
fprintf('la cantidad de cifras del numero elegido debe ser %d \n',f); 
fprintf('y mayor que a'); 
b=input('ingrese b'); 
cantb=length(int2str(b)); 
 
while cantb<f || cantb>f || b <= a 
fprintf('haga caso \n'); 
 
b=input('ingrese b'); 
cantb=length(int2str(b)); 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 12 
 
 
end 
 
 
z=fix(linspace(a,b,d)); 
z 
8. Script 2. Dada la siguiente matriz booleana, diseñar un script que: 
 
a) Genere 15 matrices booleanas, del mismo tamaño, conteniendo 
cada una 15 “unos” dispuestos en forma aleatoria. 
 
b) Compare las 15 matrices con la matriz de muestra e 
identifique las matrices de mayor y menor similitud. 
 
c) Por cada comparación realizada genere un índice de similitud 
(IS אԸ) entre 0 y 1 (un valor 1 significa que las matrices son 
iguales). Orientación: investigar el índice de Jaccard. 
Blanco = ‘0. 
8) 
function y = cagarquince(b) 
for j=1:15 
matrix{j}=zeros(b); 
 
i=1; 
while i<=15 
rand1=round((b-1).*rand)+1; %VARIAR DE 1 A 10 
rand2=round((b-1).*rand)+1; %VARIAR DE 1 A 10 
 
if matrix{j}(rand1,rand2)==0 %1,5 
matrix{j}(rand1,rand2)=1 ; 
i=i+1; 
end 
end 
 
end 
y=matrix; 
 
end 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 13 
 
 
function y=similitud(A,B)%es la matris ejempleo,bes la selecionada de 15 
matris 
l1=size(A); 
l2=size(B); 
if l1(1)~=l2(1) 
error('La matriz denden ser del mismo tamaño');%faltaba una coma 
end 
 
if l1(1)~=l1(2) 
error('La matriz debe ser cuadrada');%faltaba una coma 
end 
i=0; 
for j=1:l1(1) % A(j,t) 
for t=1:l1(1) 
if A(j,t)== B(j,t) 
i=i+1; 
end 
end 
end 
y=i/(l1(1)*l1(1)); 
end 
 
function w= PORCENTAJE(A,ORI) 
for i=1:length(A) 
c(i)=similitud(A{i},ORI); 
end w=c; 
end 
 
 
INCRESO POR CONSOLA 
A= cagarquince(10); 
ORI=zeros(10) 
 
ORI(2,7)=1 
ORI(3,5)=1 
ORI(3,6)=1 
ORI(3,8)=1 
ORI(4,4)=1 
ORI(4,9)=1 
ORI(5,3)=1 
ORI(5,10)=1 
ORI(6,3)=1 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 14 
 
 
ORI(6,10)=1 
ORI(7,2)=1 
ORI(7,10)=1 
ORI(8,3)=1 
ORI(9,4)=1 
ORI(10,5)=1 
 
 
PORCENTAJE(A,ORI) 
 
%LA MAS SIMILAR Y LA MENOS SIMILAR 
[min,pos]=min(w) 
[max,pos]=max(w) 
 
 
9) Función 1. Identificar qué hace la función que sigue. Previamente deben ser 
encontrados y corregidos dos errores en el código. 
 
 
CÓDIGO CORRECTO: 
 
function p = diagonal(matriz,valor) 
FilCol=size(matriz); 
if (valor~=0)&&(valor~=1) 
error('El 2do parámetro debe ser 0 o 1');%faltaba una coma 
 
end 
if FilCol(1)~=FilCol(2) 
error('La matriz debe ser cuadrada');%faltaba una coma 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 15 
 
 
end 
for i=1:FilCol(1) 
for j=1:FilCol(2) 
if i==j%faltaba un = para que sea un condicional 
matriz(i,j)=valor; 
end 
end 
end%faltaba cierre del for 
p=matriz; 
end%faltaba un finalizar end 
 
La función lo que hace es poner en la diagonal principal el valor uno o cero 
dependiendo de que ingrese el usuario y si es otro valor te tira una 
excepción. 
 
10. Función 2. Escribir una función con las características indicadas: 
 
 
 
a) Debe generar una matriz A (dimensión 10x10) de números enteros aleatorios en el 
rango 
[-4, 8] 
A=randi([-4 8],10,10); 
b) Debe encontrar la primera ocurrencia de una submatriz B2x2, dada por el usuario 
como argumento de la función, dentro de la matriz A. 
 
c) La función devolverá la posición (fila y columna) de la matriz encontrada. En caso 
contrario generará un mensaje de error indicando tal situación. 
 
d) La función debe verificar que la matriz ingresada sea de 2x2 y que sus valores estén 
en el rango indicado para A. Caso contrario, se emitirá un mensaje de error. 
 
 
 
 
 
 
10) b) c) d) 
>>B=[2 3;4 5] 
>> matdos(A,B)% 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 16 
 
 
function y= matdos(A,B)% L 
pos='No se encontro la matris B buscada en la matris A'; 
B=input('Ingrese matris 2x2: ') 
for j=1:(length(A)-1) 
for i=1:(length(A)-1) 
if A(i,j)==B(1,1) 
 
if A(i+1,j)== B(2,1) 
 
if A(i,j+1)==B(1,2) 
 
 
 
 
 
 
 
 
End 
y=po
s; 
end 
 
 
 
 
 
 
 
 
end 
 
 
 
 
end 
end 
 
 
 
end 
if A(i+1,j+1)==B(2,2) 
pos=[i j] ; 
end
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
Inteligencia Artificial 
Trabajo Práctico N° 2 
 
 
 
Tema: Lógica Fuzzy 
 
INTEGRANTES: 
 
 
 
 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
1. Funciones de pertenencia: 
 
a) Utilizando la interfaz gráfica de los sistemas de inferencia, 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. 
 
 
 
Creamos la variable V1: 
 
• 2º variable (v2): alcance (0,20). Cinco particiones tipo hombro-trapecio- 
triangulotrapecio-triangulo igualmente espaciados con solapamiento del 30%. 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
Creamos la variable V2: 
 
• 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%. 
Creamos la variable V3: 
 
 
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: 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
• 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.01:10; 
>> y = heavisisde (x-7); 
>> z = smf (x, [2 9]); 
>> ecm = mse (y-z) 
 
 
ecm = 
0.0898 
>> 
 
 
 
• 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. 
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. 
>> x = 0:0.01:10; 
>> y = trimf (x, [3 6 9]); 
>> z=gaussmf (x, [4 8]); 
emf = 
0.2259 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
2. Definir y escribir los script de Matlab que realicen las siguientes funciones. 
Graficar.a) Función concentración f1 = concen(x,mu0) 
 
function 
y=concen(x,mu) if 
size(x)==size(mu) 
y=(mu).^2; 
plot(x,y,'g'); 
hold on 
plot(x,mu,'r'
); 
title('Funcion 
Concentracion'); xlabel('A'); 
ylabel('MOU'); 
gtext('A');gtext ('MUY 
A'); hold off 
else 
error('la dimesión de los datos es 
incorrecta'); end 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
Ingresamos las variables de entrada desde command window: 
>> x = 1:11 
x = 
1 2 3 4 5 7 8 9 10 11 
>> mu = 0:0.1:1 
mu = 
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 
>> 
 
 
 
 
 
b) Función dilación f2 = dilac(x,mu0) f2= μ 
if 
size(x)==size(m
u) y = mu.^0.5; 
plot(x,y,'g'); 
hold on 
plot(x,mu,'r'
); 
xlabel('A'); 
ylabel('MOU'); 
title('Funcion 
Dilación'); gtext('A'); 
gtext ('MAS O MENOS A'); 
hold off 
else 
error('la dimesión de los datos 
esincorrecta'); end
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
Ingresamos en la venta de command window: 
 
 
>> x = 1:11; 
>> mu = 0:0.1:1; 
>> dilación (x,mu) 
 
 
c) Función intensificación f3 = intens(x,mu0) 
 
 
function y=intensif 
(x,mu) [i,j]=size(x); 
[i,j]=size(mu); 
 
if 
size(x)==size(m
u) mu2=mu; 
for k=1:j 
if mu2(i,k) >=0 && (i,k) 
<=0.5 mu2(i,k)=2 * 
mu2(i,k); 
else 
if mu2 (i,k) > 0.5 && mu2 (i,k) <=1 
mu2(i,k)=1 - (2* (1-mu2(i,k))^2); 
en
d end 
end 
plot(x, mu, 'r'); 
xlabel ('X'); 
ylabel ('MUO'); 
title ('Función 
Intensificación'); hold on 
plot (x,mu2, 'g'); 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
hold 
off 
y=mu2
; 
gtext('A'); 
gtext('INTENSAMENTE 
A'); 
else 
disp ('La dimensión de los datos es 
incorrecta'); end 
end 
 
Ingresamos en la ventana de command window: 
>> x = 1:11; 
>> mu = 0:0.1:1; 
>> intensif (x,mu) 
 
 
>> intensif (x,mu) 
 
 
ans = 
 
 
>> 
 
 
0 0.2000 0.4000 0.6000 0.8000 1.0000 0.6800 0.8200 0.9200 
 
 
 
 
 
En todos los casos implementar el control de datos para cada función, como por ejemplo que los argumentos sean 
vectores fila de igual longitud, que la función de pertenencia de entrada esté en el alcance correcto, etc. Utilizando 
las funciones anteriores como base, escribir por lo menos tres funciones representativas de adverbios fuzzy, darles 
valores en el intervalo [0 ; 1], fuzzyficar y graficar junto a la función de base. 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
Función Mas: 
function 
y=mas(x,mu) if 
size(mu)==size(x) 
y=mu.^1.25; 
plot(x,y,'b'); 
hold on 
plot(x,mu,'g'
); 
xlabel('A'); 
ylabel('MUO'); 
title('Funcion 
Mas'); gtext('A'); 
gtext('MAS(A)'); 
 
Ingresamos en la ventana de comand window: 
>> x = 1:11; 
>> mu = 0:0.1:1; 
>> mas (x,mu) 
 
 
 
 
Funcion Sumamente: 
function y=sumamente(x,mu) 
if size(x)==size(mu) 
y=mu.^3; 
plot (x,y,'b'); 
hold on 
plot(x,mu,'g'); 
xlabel('A'); 
ylabel('MUO'); title('Función 
Sumamente'); 
gtext('SUMAMENTE A')
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
else 
error('La dimensión de los datos es 
incorrecta'); end 
 
Ingresamos en la ventana de Window Command: 
>> x = 1:11; 
>> mu = 0:0.1:1; 
>> sumamente (x,mu) 
 
Función Cercano: 
function y=cercano(x,mu) if size(x)==size(mu) 
y=mu.^1.4; plot (x,y,'b'); hold on plot(x,mu,'g'); 
xlabel('A'); 
ylabel('MUO'); title('Función Cercano'); gtext('CERCANO A'); 
hold off else 
error('La dimensión de los datos es incorrecta'); end 
 
 
 
Ingresamos en la ventana de Command Window: 
>> x = 1:11; 
>> mu = 0:0.1:1; 
>> cercano (x,mu) 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
Función Menos: 
function y=menos(x,mu) if size(x)==size(mu) 
y=mu.^0.75; plot (x,y,'b'); hold on plot(x,mu,'g'); 
xlabel('A'); 
ylabel('MUO'); title('Función Menos'); gtext('MENOS A'); hold off 
else 
error('La dimensión de los datos es incorrecta'); end 
 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
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]. Luego, mostrar cómo se componen las funciones de 
pertenencia cuando se aplican los operadores lógicos que se indican a continuación: 
a) Lindo y no avaro. 
b) Feo o generoso. 
c) Estándar XOR insensible (en este caso conviene descomponer la función XOR en los 
operadores básicos. 
Comentar cómo resultan las funciones de pertenencia compuestas (comprimidas, expandidas, 
sesgadas, deformadas, etc. 
Establecemos las entradas 
x=0:10; 
Definimos las variables lingüísticas 
% aspectos FEO, ESTANDAR LINDO feo=trimf(x, [0 2 4]); 
estandar=trimf(x, [2 5 7]); 
lindo=trimf(x, [5 8 10]); 
% altruismo AVARO, INSENSIBLE, GENEROSO 
avaro= trimf(x,[-4 0 4]); 
insensible= trimf(x,[0 5 8]); 
generoso= trimf(x,[5 10 12]); 
Lindo y no avaro. 
 
lindoNOavaro=min(lindo,(1-avaro)); plot(x,lindoNOavaro,'r', 'linewidth',4); 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
Feo o generoso. feoOgeneroso=max(feo,generoso); plot(x,feoOgeneroso,'r','linewidth',3); 
 
 
 
 
Estándar XOR insensible (en este caso conviene descomponer la función XOR en los operadores 
básicos. 
 
 
XOR=estandaryNoinsensible + noestandarYinsensible 
estandaryNoinsensible=min(estandar,(1-insensible)); noestandarYinsensible=min((1-
estandar),insensible); 
XOR=max(estandaryNoinsensible,noestandarYinsensible); plot(x,XOR,'r', 'linewidth',4); 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
3. Dibujar las modificaciones que sufren las funciones de pertenencia dadas, al aplicarle 
sucesivamente los adverbios fuzzy que se indican: 
 
a) Función de base: (x) Periferia 
 
Calcular (x) de la figura, utilizando por lo menos 100 
puntos. Modificación 1: 1(x) cercano a (Periferia) 
 
function y=cercano(x,mu) 
if size(x)==size(mu) %Compara tamaño de vectores y si solo es igual 
continua% y=mu.^1.4; 
plot(x,mu,'r'
); hold on 
plot(x,y,'b'); 
xlabel('A'); 
ylabel('MU'); 
title('FUNCION CERCANO A ...'); 
gtext('Funcion A'); 
gtext('Muy 
cercano'); hold off 
end 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
x = linspace(10,60,100) 
y=trapmf(x,[10 25 50 
50]) z=cercano(x,y) 
 
 
Modificación 2: 2(x) ligeramente cercano en 
(Periferia) LIGERAMENTE(A) = INT(MAS(A)) AND 
NOT(CON(A)) 
Primero que nada para poder trabajar con un función “LIGERAMENTE” debemos crear una 
función negación 
 
 
function 
y=negacion(x,mu) if 
size(x)==size(x) 
y=1-mu; 
plot(x,y,'g'); 
hold on 
plot(x,mu,'r'
); 
title('FuncionNegacion
'); xlabel('A'); 
ylabel('MOU'); 
legend('Negado','A'
); hold off 
end 
x = linspace(10,60,100) 
y=trapmf(x,[10 25 50 50]) 
z=negacion(x,y) 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
Ahora ya podemos trabajar sobre una función “ligeramente” trabajando con otras 
funciones definidas en puntos anteriores 
 
function 
y=ligeramente(x,mu) if 
size(x)==size(mu) 
fm=mas(x,mu); 
fi=intensif(x,fm); 
fc=concen(x,fi); 
fn=negacion(x,fc); 
fl=min(fi,fn); 
flc=cercania(x,fl); 
y=flc; 
plot(x,mu,'r'
); hold on 
plot(x,y,'b'); 
xlabel('A') 
ylabel('MUO'); 
title('FUNCION LIGERAMENTE CERCANA A'); 
legend('periferia','ligeramente cercana a 
periferia'); hold off 
end 
 
 
x = linspace(10,60,100) 
y=trapmf(x,[10 25 50 
50]) z=ligeramente(x,y) 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
b) Función de base: (x) Cerca 
 
Modificación 1: 1(x) Más(Cerca) 
 
Se ingresa las variables de entrada e invocamos a la función MAS ya 
creada x=0:0.1:10 
y=zmf(x,[3 
7]) 
z=mas(x,y) 
 
 
 
 
 
 
 
 
 
 
 
Ref. (x) = zmf(x,[3,7]) con x = 0:0.1:10 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
Modificación 2: 2(x) Bastante(Más(Cerca)) 
 
Se crea la función para el adverbio “bastante” conociendo 
que BASTANTE(A) = INT(A) AND NOT(INT(CON(A))) 
Y donde se necesitara el uso de funciones ya creadas 
 
 
function 
y=bastante(x,mu) if 
size(x)==size(mu) 
i=intensif(x,mu); 
c=concen(x,mu
); 
intcon=intensif(x,
c); 
n=negacion(x,intcon); and=min(intcon,n); 
y=and; 
plot(x,mu,'r'
); hold on 
plot(x,y,'b'); 
xlabel('A'); 
ylabel('MUO'); 
legend('A','Bastante
'); hold off 
end 
 
 
Utilizamos otra función para acercar aun mas el valor 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
function 
y=bastantemascerca(x,mu) if 
size(x)==size(mu) 
m=mas(x,mu); 
b=bastante(x,m); 
y=b; 
plot(x,mu,'r'
); hold on 
plot(x,y,'b'); 
xlabel('A'); 
ylabel('MUO'); 
legend('A','bastantemas 
cerca') hold off 
end 
x=0:0.1:1
0 
y=zmf(x,[3 7]) 
z=bastantemascerca(x,
y) 
 
 
4. Aplicación de adverbios mú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: 
 
a) La función debe recibir como entrada una secuencia [x0 , mu0]. 
 
b) Debe incorporar adicionalmente una, dos o tres etiquetas que indiquen el tipo de 
adverbio a aplicar. En la función se debe reconocer la cantidad de adverbios a aplicar 
(comando nargin). Las etiquetas pueden ser por ejemplo ‘no’, ‘muy’, ‘algo’, 
‘aproximadamente’, etc. 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
c) Incorporar controles para asegurar que x0 y mu0 sean de la misma longitud y que los 
valores de mu0 estén en el intervalo [0 ; 1]. 
 
d) Incorporar un mínimo de cinco adverbios reconocibles por la función (se pueden utilizarlos 
propuestos en clase). Puede utilizar internamente las funciones definidas en el punto anterior como 
funciones auxiliares (deben estar en la misma carpeta). 
 
e) Como argumentos de salida, la función debe generar la secuencia de base x0 (la misma que 
ingresa), la secuencia de pertenencia mu0 (la misma que ingresa) y la secuencia de pertenencia 
modificada -muadv- por la aplicación sucesiva de los adverbios indicados en el argumento de la 
función. Por ejemplo: 
[ x 0 , m u 0 , m u a d v ] = a d v _ m u l t i p l e s ( x 0 , m u 0 , ’ n o ’ , ’ m u y ’ , ’ a p r o x i m a 
d a m e n t e ’ ) 
 
f) La función debe generar además una gráfica que muestre el conjunto de base y los 
conjuntos modificados con diferentes colores, sobre el mismo sistema de ejes. 
 
 
function 
[x0,mu0,muadv]=advMultiples(x0,mu0,muadv) clc 
if (nargin<3)&&(nargin>5) 
error('FALTA DEFINIR 
ADVERBIOS'); 
end 
if (length(x0) == 
length(mu0)) switch muadv 
case'sumamente' 
muadv = sumamente(x0, mu0); 
case'mas' 
muadv = mas(x0, mu0); 
case'menos' 
muadv = menos(x0, 
mu0); case'cercano' 
muadv = cercano(x0, 
mu0); case'negacion' 
muadv = negacion(x0, mu0); 
otherwise 
error('Adverbio no 
definido') end 
end 
 
 
Entradas 
 
x = 0:.1:10; 
 
mu=gaussmf(x,[2,5]); 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
Aplicando la función 
[x0,mu0,muAdv]=advMultiples(x,mu,'sumament
e'); Gafica para el argumento ‘sumamente’ por 
ejemplo 
 
 
Grafica para el argumento ‘negacion’ por ejemplo 
 
2020 Facultad de Ingeniería UNJu 
 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
5. Ajuste de funciones. Un experto proporciona al Ing. de Conocimiento un 
conjunto de 21 puntos representativos de una variable cripsVc. Para poder 
utilizar tal información el Ing. debe seleccionar(del conjunto de funciones mf de 
Matlab) una función que represente a tales puntos. Investigar entre las funciones 
de pertenencia usuales (lineales y no lineales), cual es la que mejor se ajusta al 
conjunto de puntos dados (mínimo valor de ECM). En el caso de las funciones 
paramétricas, se deben ajustar adecuadamente sus parámetros. Indicar el valor 
del ECM obtenido y dibujar sobre un sistema de ejes la nube de puntos iniciales 
(función stem()sin el tallo) y la función seleccionada(con plot()). 
 
 
Estrategia: es conveniente dibujar el perfil de puntos iniciales, ordenados para Vc, para 
reconocerel parecido. 
 
Entradas 
 
 
x = (0:1:20); 
y = [0.097, 0.126, 0.278, 0.546, 0.632, 0.814, 0.905, 0.913, 0.957, 0.964, 0.970, 0.959, 0.957, 
0.915, 0.800, 0.792, 0.655, 0.485, 0.421, 0.157, 0.141]; 
 
 
function punto6(x,y) 
 
title('Funcion STEM y Funcion 
PIMF'); y1= [x,y]; 
y2= pimf(x,[-2 8 12 22]); 
plot(x,y2,'g
') hold on 
stem(x,y, 
'LineStyle','none','MarkerFaceColor','red','MarkerEdgeColor','white') 
axis([0 21 0 1]) 
legend ('PIMF', 'STEM'); 
 
end 
 
 
 
 
 
Facultad de Ingeniería (UNJu) 2020 
GRUPO:IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Facultad de Ingeniería (UNJu) 2020 
GRUPO:IA_EN_TU_BOLSILLO 
 
 
Inteligencia Artificial 
Trabajo Práctico N° 3 
 
 
 
 
Tema: Sistemas de Inferencia 
Fuzzy 
INTEGRANTES: 
 
 
 
 
Facultad de Ingeniería (UNJu) 2020 
GRUPO:IA_EN_TU_BOLSILLO 
 
 
 
1. Proceso de agregación/composición: trabajando desde la línea de 
comando, generar tres funciones implicadas por el método de Larsen 
(producto), en un intervalo [0;10]. 
a) Función triángulo(trimf)en[015],implicada con un DOF=0.5. 
 
b) Función trapecio(trapmf)en[1469],implicada con un DOF=0.7. 
 
c) Función triángulo(trimf)en[57.59],implicada con un DOF=0.9. 
 
Utilizando una cantidad suficiente de puntos (min 100) en cada 
secuencia, aplicar a estas funciones un proceso de agregación por 
máximo y graficar las cuatro secuencias en un mismo sistema de ejes. El 
proceso debería verse como muestra la figura de la derecha. 
Luego, aplicar a las funciones de base anteriores, un proceso de agregación por 
suma y graficar las cuatro secuencias en un mismo sistema de ejes, diferente al 
anterior. Si la secuencia excede el valor máximo(1), recortar. Para las dos 
secuencias implicadas calcular el centroide (función defuzz) y comentar el 
resultado. 
Entradas 
 
x = linspace(0,10); 
 
mu1 = 0.5.*trimf(x,[0 1 5]); 
 
mu2 = 0.7.*trapmf(x,[1 4 6 9]); 
 
mu3 = 0.9.*trimf(x,[5 7.5 9]); 
Opcion 1 agregacion por 
sumas 
agregacion(x,mu1,mu2,mu3,1
) 
Facultad de Ingeniería (UNJu) 2020 
GRUPO:IA_EN_TU_BOLSILLO 
 
 
 
 
Opcion 2 agregacion por maximo 
agregacion(x,mu1,mu2,mu3,2) 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Facultad de Ingeniería (UNJu) 2020 
GRUPO:IA_EN_TU_BOLSILLO 
 
 
 
 
 
Función Utilizada 
 
function 
agregacion(x,mu1,mu2,mu3,tipo) hold 
on 
plot(x,mu1,'r','linewidth',2); 
hold off 
hold on 
plot(x,mu2,'g','linewidth',2); 
hold off 
hold on 
plot(x,mu3,'y','linewidth',2); 
hold off 
switch tipo 
 
case 1 
 
a=(mu1+mu2)-(mu1.*mu2); 
 
aux1=(a+mu3)-
(a.*mu3); aux=aux1; 
hold on 
plot(x,aux,'c','linewidth',
2); 
title('Resultado de agregacion 
por suma'); 
aux=max(mu1,max(mu2,mu); 
 hold on 
plot(x,aux,'c','linewidth',2); 
 
 
Facultad de Ingeniería (UNJu) 2020 
GRUPO:IA_EN_TU_BOLSILLO 
 
 
title('Resultado de agregacion por 
maximo'); 
legend('mu1','mu2','mu3','agregacion 
max'); hold off 
otherwise 
 
disp('Ingrese valores correctos'); 
 
en
d 
end 
 
2. Considerando la función implicada y agregada de la figura, 
defuzzyficar con los siguientes criterios: 
Calcular el centroide aplicando fórmulas para funciones regulares. 
Calcular el centroide con la función defuzz. 
Calcular el ECM para ambos centroides calculados. 
 
Proponer un método de defuzzyficación diferente a los estudiados y calcular el 
valor crisp (defuzzyficación) de la función de la figura. 
 
Calcular el ECM entre el método propuesto y el método defuzz. 
Calcular el centroide aplicando fórmulas para funciones regulares. 
Facultad de Ingeniería (UNJu) 2020 
GRUPO:IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
 
 
 
 
AREA 
𝟎. 𝟐 ∗ 𝟎. 𝟓 
𝑨𝟏 = 
𝟐 
 
= 𝟎. 𝟎𝟓 𝐴5 = 
 
0.2 ∗ 0.25 
2 
 
= 0.025 
𝑨𝟐 = 𝟎. 𝟐 ∗ 𝟎. 𝟓 = 𝟎. 𝟏 𝐴6 = 1 ∗ 0.25 = 0.25 
𝑨𝟑 = 
𝟎. 𝟒 ∗ 𝟎. 𝟓 
𝟐 = 𝟎. 𝟏 
𝐴7 = 1.4 ∗ 0.5 = 0.7 
𝑨𝟒 = 𝟎. 𝟒 ∗ 𝟎. 𝟐𝟓 = 𝟎. 𝟏 𝐴8 = 
𝑏 
0.2 ∗ 0.75 
 
 
2 
ℎ 
= 0.075 
𝑟𝑒𝑐𝑡𝑎𝑛𝑔𝑢𝑙𝑜 𝐶𝑥 = 2 ; 𝐶𝑦 = 2 
Para centroide 𝑑𝑒 𝑐𝑎𝑑𝑎 
𝑓𝑖𝑔𝑢𝑟𝑎 
𝑏 
𝑡𝑟𝑖𝑎𝑛𝑔𝑢𝑙𝑜 𝐶𝑥 = 3 ; 
ℎ 
𝐶𝑦 = 3 
𝐶 = 2𝑏 ; 𝐶 = ℎ 
 
{ 𝑥 3 𝑦 3 
 
 
 
f1: Cx= 2*0.2/3=0.13Cy=0.5/3=0.17 
f2: Cx=0.2/2=0.1 Cy=0.5/2=0.25 
f3: Cx=2*0.4/3=0.26 Cy=0.5/3=0.17 
f4: Cx=0.4/2=0.2 Cy=0.25/2=0.125 
f5: Cx= 0.2/3=0.07 Cy=0.25/3=0.08 
f6: Cx=1/2=0.5 Cy=0.25/2=0.125 
f7: Cx=1.4/2=0.7 Cy=0.5/2=0.25 
f8: Cx=0.2/3=0.07 Cy=0.75/3=0.25 
 
Facultad de Ingeniería (UNJu) 2020 
GRUPO:IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
 
 
 
 
Para el centroide de la figura 
𝐴1 ∗ 𝑋1 + 𝐴2 ∗ 𝑋2…. 
𝑥 = 
𝐴𝑇 
 
 
 
𝑦 = 
 
 
𝐴1 ∗ 𝑌1 + 𝐴2 ∗ 𝑌2…. 
 
 
𝐴𝑇 
 
𝑥 
= 
 
0.05 ∗ 0.13 + 0.1 ∗ (0.3 + 0.66 + 1) + 0.025 ∗ 1.27 + 0.25 ∗ 1.3 + 0.7 ∗ 1.1 + 0.075 ∗ 1.87 
 
 
1.4 
= 0.05 
 
𝑦 
= 
 
0.05 ∗ 0.17 + 0.1 ∗ (0.25 + 0.67 + 0.875) + 0.025 ∗ 0.83 + 0.25 ∗ 0.625 + 0.7 ∗ 0.25 + 0.075 ∗ 0.25 
 
 
1.4 
= 0.4 
 
Por lo tanto el centroide estará [0.05, 0.4] 
 
 
Calcular centroide con la función 
defuzz x=-1:0.2:1; 
f1=trapmf(x,[-1 -0.8 -0.4 -0.2]); 
 
f2=trapmf(x,[-1 -0.2 0.2 1]); 
 
f3=trapmf(x,[0 0.2 0.8 
1]); 
FT=max(0.5*f1,1*f2); 
FT=max(FT,0.75*f3); 
plot(x,FT,'Linewidth',3); 
grid on; 
x1=defuzz(x,FT,'centroid
'); 
Facultad de Ingeniería (UNJu) 2020 
GRUPO:IA_EN_TU_BOLSILLO 
 
 
h1 = line([x1 x1],[0.4 1],'Color','k'); 
 
t1 = text(x1,0.4,' centroide','FontWeight','bold'); 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 X1=0.05 
 
 
Calcular el ECM (error cuadráticomedio) para ambos cálculos medio). 
 
𝐸𝐶𝑀 = (0.05 − 0.05)^2 = 0 
 
 
Proponer un método de defuzzyficación diferente a los estudiados y calcular 
el valor crisp (defuzzyficación) de la función de la figura. 
 
 
Método de la bisectriz: La bisectriz es la línea vertical que dividirá la región 
en dos subregiones de igual área. Es a veces, pero no siempre coincidente 
con la línea de centro. 
 
 x=-1:0.1:1; 
 
f1=trapmf(x,[-1 -0.8 -0.4 -0.2]); 
 
f2=trapmf(x,[-1 -0.2 0.2 1]); 
 
 f3=trapmf(x,[0 0.2 0.8 1])
Facultad de Ingeniería (UNJu) 2020 
GRUPO:IA_EN_TU_BOLSILLO 
 
 
 
 
 
FT=max(0.5*f1,1*f2); 
FT=max(FT,0.75*f3); 
 plot(x,FT,'Linewid
th',3); grid on; 
x2 = defuzz(x,FT,'bisector'); 
 
h2 = line([x2 x2],[0.3 
1],'Color','y','Linewidth',2); t2 = 
text(x2,0.3,'BISECTOR','FontWeight','bold'); 
x3 = defuzz(x,FT,'mom'); 
x4 = defuzz(x,FT,'som'); 
 
x5 = defuzz(x,FT,'lom'); 
 
h3 = line([x3 x3],[0.5 1],'Color','r','Linewidth',2); 
 
t3 = text(x3,0.7,' MOM','FontWeight','bold','Color','r'); 
 
h4 = line([x4 x4],[0.6 1],'Color','m','Linewidth',2); 
 
t4 = text(x4,0.6,' SOM','FontWeight','bold','Color','m'); 
 
h5 = line([x5 x5],[0.6 1],'Color','c','Linewidth',2); 
 
t5 = text(x5,0.6,' LOM','FontWeight','bold','Color','c'); 
 
 
 
 
 
 
 
 
 
 
 
 x5=-0.2 
Facultad de Ingeniería (UNJu) 2020 
GRUPO:IA_EN_TU_BOLSILLO 
 
 
 
 
Calcular el ECM entre el método propuesto y el método defuzz. 
 
 
Calcular el ECM (error cuadráticomedio) para ambos cálculos medio). 
 
𝐸𝐶𝑀 = (0.05 + 0.2)^2 = 0.0625 
 
 
 
 
*El ECM calculado entre el método propuesto y el método por medio de la 
función deffuz nos da un error mas grande 
 
 
3. Función de transferencia fuzzy. Con los conjuntos fuzzy que se 
muestran, y con la asistencia de la GUI fuzzy, mostrar como resultan 
las funciones de transferencia, para un sistema FIS con las siguientes 
condiciones. Considerar implicación de Mamdani y defuzzyficación por 
centroide. Comentar los resultados. 
 
 
* Dos entradas: e y De; una salida: U. 
 
* Implicación de Mamdani y defuzzyficación por centroide. 
 
* Las particiones y alcances para e y De son iguales. 
 
* Las reglas del sistema están implícitas en la tabla siguiente. 
 
 
Facultad de Ingeniería (UNJu) 2020 
 
 
 
Reglas 
 
 
 
 
 
Función de transferencia 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
GRUPO: IA_EN_TU_BOLSILLO 10 
Facultad de Ingeniería (UNJu) 2020 
GRUPO: 
IA_EN_TU_BOLSILLO 
11 
TOLAY 
 
 
 
 
 
 
 
 
Función de transferencia 
 
 
 
 
 
 
Facultad de Ingeniería (UNJu) 2020 
GRUPO: 
IA_EN_TU_BOLSILLO 
12 
TOLAY 
 
 
 
Función de transferencia 
 
 
Lo que se obtiene al anular una de las entradas en cada grafica, es una grafica 
la cual es simétrica con respecto al origen 
 
 
4. Sistema FIS genérico. Construir un sistema de inferencia fuzzy para 
un problema genérico que contiene tres variables, dos de entrada (x, 
y) y una de salida (z). Las variables (x, y, z) toman valores en el 
intervalo [0,10], y sus funciones de pertenencia son: 
µlow = trapmf(-5,0,3,8) µhigh = trapmf(4,6,10,12) 
 
 
La base de conocimiento está formada por las siguientes reglas 
regla 1: if x is low AND y is low then z is high 
regla 2: if x is low OR y is NOT high then z is low 
regla 3: if x is high AND y is low then z is low 
regla 4: if x is NOT high AND y is high then z is high 
 
 
Determinar la salida crisp del sistema para las siguientes instancias: 
(x y) = (0 3.2) ; (x y) = (5.5 1.3). 
Considerar una implicación tipo Mamdani y una defuzzificación por centroide. Obtener y 
mostrar la superficie de inferencia. Explicar qué es la superficie de inferencia. 
Facultad de Ingeniería (UNJu) 2020 
 
 
 
 
 
Se crea el sistema genérico FIS con su dos variables de entrada (x, y) una de salida 
(z) y las consideraciones propuestas. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
GRUPO: IA_EN_TU_BOLSILLO 13 
Facultad de Ingeniería (UNJu) 2020 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
Determinar la salida crisp del sistema para las siguientes 
instancias: (x y) = (0 3.2) 
Z=4.97 
 
(x y) = (5.5 1.3). 
Z=4.15 
Facultad de Ingeniería (UNJu) 2020 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
Superficie de inferencia 
 
 
 
Lo que se obtiene es una superficie (z) que representa la salida del controlador 
Fuzzy como función de las 2 señales de entrada x, y. 
 
 
5) Control fuzzy de un equipo industrial. El control fuzzy (en este caso de 
acción en dos niveles)de un equipo industrial se maneja con las 
siguientes reglas. 
 
 
R1) Si la temperatura es alta entonces la presión es elevada. 
R2) Si la temperatura es baja entonces la presión es baja. 
R3) Si la presión es baja entonces la entrada de combustible debe ser grande 
R4) Si la presión es elevada entonces la entrada de combustible debe ser 
pequeña 
Los valores de pertenencia en puntos clave (/var) para cada variable, son los 
siguientes: 
Facultad de Ingeniería (UNJu) 2020 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
a) Interpretar y dibujar las funciones de pertenencia de las variables lingüísticas y 
fuzzy indicadas. 
b) Determinar la entrada de combustible al sistema (implicancia 
Mamdani/centroide)para valores de temperatura de 30º, 60º y 90º. 
 
Facultad de Ingeniería (UNJu) 2020 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
Aplicamos las reglas: 
 
R1) Si la temperatura es alta entonces la presión es 
elevada. R2) Si la temperatura es baja entonces la 
presión 
Facultad de Ingeniería (UNJu) 2020 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
 
Para valores de temperatura de 30º: 
 
Facultad de Ingeniería (UNJu) 2020 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
Para valores de temperatura de 60º: 
 
 
 
 
 
 
Para valores de temperatura de 90º: 
 
 
 
Facultad de Ingeniería (UNJu) 2020 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
 
Facultad de Ingeniería (UNJu) 2020 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
Aplicamos las reglas: 
 
R3) Si la presión es baja entonces la entrada de combustible debe ser grande 
R4) Si la presión es elevada entonces la entrada de combustible debe ser pequeña 
 
GRUPO: IA_EN_TU_BOLSILLO 
Facultad de Ingeniería (UNJu) 2020 
Presión de: 700 
 
 
 
 
 
Presión de: 906 
 
GRUPO: IA_EN_TU_BOLSILLO 
Facultad de Ingeniería (UNJu) 2020 
 
 
 
Presión de: 1780 
 
 
 
 
 
6. Control fuzzy de un acondicionador de aire. Se pretende controlar temperatura 
con un sistema de inferencia fuzzy (FIS). En función de la temperatura actual del 
ambiente y la temperatura previamente medida, se determina la potencia del 
sistema acondicionadorde aire. 
 
 
La implementación de las variables fuzzy de entrada –temperatura actual y 
anterior– fueron configuradas con tres particiones como se muestra en la tabla 
de decisión siguiente y la figura central. La potencia del calefactor (variable de 
salida), inserta en la tabla de reglas y mostrada en la figura de la derecha, se 
disgrega en cinco particiones: 
máximo frío (MF), frío (F), apagado (Off), calor (C) y máximo calor (MC), según la 
figura: 
GRUPO: IA_EN_TU_BOLSILLO 
Facultad de Ingeniería (UNJu) 2020 
 
 
 
 
 
 
 
 
 
Variables entrada según la redefinición 
GRUPO: IA_EN_TU_BOLSILLO 
Facultad de Ingeniería (UNJu) 2020 
 
 
 
 
 
GRUPO: IA_EN_TU_BOLSILLO 
Facultad de Ingeniería (UNJu) 2020 
 
 
 
Variable de Salida: 
 
Cuando la Temperatura Actual es igual a -15 y la T° Anterior igual a -10: 
 
 
 
 
 
 
 
 
 
Cuando la Temperatura Actual es igual a 18º y la Temperatura Anterior igual a -5º: 
GRUPO: IA_EN_TU_BOLSILLO 
Facultad de Ingeniería (UNJu) 2020 
 
 
 
 
 
 
Facultad de Ingeniería (UNJu) 2020 
 
 
 
 
 
 
Cuando la Temperatura Actual es igual a 3.4 y la Temperatura Anterior igual a 7: 
 
 
La Superficie de Respuesta es: 
 
GRUPO: IA_EN_TU_BOLSILLO 28 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
 
: 
✓ Tabla de decisión: la tabla fue desarrollada de la manera 
propuesta, ya que se pensó en tender hacia el output “medio”. 
✓ La forma de la superficie de respuesta se ve como si fuese la 
ladera de una montaña de viéndola de un solo lado, debido a 
que cuando las temperaturas son altas, disminuye la 
temperatura que emite el aire acondicionado y viceversa. 
✓ Funcionamiento del sistema FIS: El sistema en general también 
se vio afectado en cuanto a la salida del mismo, por los rangos 
que se identificaron a cada variable de entrada, que fueron 
necesarios para que funcionasen acorde a la tabla. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
Inteligencia Artificial 
Trabajo Práctico N° 4 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
REDES NEURONALES 
 
INTEGRANTES: 
 
 
 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
Si se puede asociar más perceptron para realizar la compuerta XOR 
 
 
 
 
 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
 
 
 
 ENTRENAMIENTO DE PATRONES 
function [ W ] = training( PATRON_SD ) 
% ENTRENAMIENTO CON DOS ENTRADAS 
SY_PATRON = []; 
W = 0.3 .* rand(1,3);% VECTOR DE PESOS ALEATORIOS 1x3 
aprendido = logical(0);% INCICIANIZANDO CON EL VALOR VERDADERO 
 while ~aprendido 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 for p=1:4 
 error = logical(0); 
 while ~error 
 NET = sum(W .* PATRON_SD(p,1:3)); 
 SY_PATRON(p) = sign(NET); 
 error = (PATRON_SD(p,4) - SY_PATRON(p)) == 0; 
 if ~error 
 fa = 0.8;%FACTOR DE APRENDISAJE 
 % varW: VECTOR DE LOS DELTA Wi POR PATRON 
 % varW = fa*xi*ei 
 for i=1:3 
 varW(i) = [(fa * PATRON_SD(p,i)*(PATRON_SD(p,4) - 
SY_PATRON(p)))]; 
 end 
 W = W + varW; 
 end 
 end 
 end 
 for p = 1:4 
 salida(p) = sign(sum(PATRON_SD(p,1:3) .* W)); 
 end 
 %COMPROBACIÓN DEL APRENDIZJE 
 aprendido = all(PATRON_SD(:,4)' == salida); 
 end 
end 
 
 
%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
 RED PERCEPTRON PARA LA FUNCIÓN XOR 
clear; 
clc; 
disp('RED PERCEPTRON PARA LA FUNCIÓN XOR'); 
neurona1 = [-1 -1 -1 -1; 
 -1 1 -1 1; % X1 Y X2 BIAS ( x1 ?¬x2) 
 1 -1 -1 -1; 
 1 1 -1 -1]; 
%Patron para la neurona2 
neurona2 = [ -1 -1 -1 -1; 
 -1 1 -1 -1; % X1 Y X2 BIAS ( x1 ?¬x2) 
 1 -1 -1 1; 
 1 1 -1 -1]; 
%Patron para la neurona3 
neurona3 = [ -1 -1 -1 -1; 
 -1 1 -1 1; % X1 Y X2 BIAS (¬x1 ?x2)? (x1 ?¬x2) 
 1 -1 -1 1; 
 -1 -1 -1 -1]; 
%FASE DE ENTRENAMIENTO 
W1 = training(neurona1); 
W2 = training(neurona2); 
W3 = training(neurona3); 
%FIN DEL ENTRENAMINETO 
%FASE DE FUNCIONALIDAD 
% EL VECTOR ENTRADA DEBE SER DE DOS ELEMNETOS 
band = logical(1); 
while band 
disp('Formato de la ENTRADA [X1 X2]') 
disp('ENTRADA binaria -1 y 1') 
ENTRADA = input('ENTRADA: '); 
ENTRADA(3) = -1; 
NET1 = sum(W1 .* ENTRADA); 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
NET2 = sum(W2 .* ENTRADA); 
SALIDA1 = sign(NET1); 
SALIDA2 = sign(NET2); 
NET3 = sum(W3 .* [SALIDA1 SALIDA2 -1]); 
SALIDA3 = sign(NET3); 
disp('Resultado de la operación'); 
disp(SALIDA3); 
OP = input('Desea continuar S/N: '); %ejemplo de un valor ['s'] 
band = OP == 's' || OP == 'S'; 
end 
 
%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
 
 
 
ADALINE – ADAptive LINear Element: Modelo feedforward mononeuronal de aprendizaje 
supervisado. Opera en tiempo discreto, con aprendizaje off-line a través de la regla 
de mínimos cuadrados. 
 
 
 
 
 
 
 
 
SE VA USAR LA FUNCION LINEAL (Relu para los colegas) PARA LA FUNCION DE ACTIVACION 
 
% Binario a OCTAL Red Adaline 
clc 
% @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
%XXXXXXXXXXXXX Script TRAININGXXXXXXXXXXXXXXXXXXXX 
% @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
 
X=[0 0 0; 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 0 0 1; 
 0 1 0; 
 0 1 1; 
 1 0 0; 
 1 0 1; 
 1 1 0; 
 1 1 1]; 
 
Y=[0;1;2;3;4;5;6;7]; 
% Learning reat fact de aprendi 
alfa=0.03; 
 
W=-1+2*rand(3,1);% Pesos Iniciales Aleatorios entre [-1;1] matris 3x1 
 
bias=-1; % Umbral o Bias inicial 
 
c=0;% Cont 
 
epsilon=0.00000000000000000000001;% Tolerancia 
% Error Cuadrático Medio Inicial 
Errorcm=2; 
% XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
% XXXXAprendizaje (LEARNED)XXXXXXXXXXXX 
% XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
while (Errorcm>epsilon) 
c=c+1; 
 
Out=X*W+bias; %MULTIPLICACION DE MATRICES NOS QUEDA UNA DE 8X1 el cual ya se 
encarga de hacer la suma de de los ?x*wii 
 
e=Y-Out;%Error 
Errorcm=sum(e.^2)/2;% Cálculo del Error Cuadrático Medio 
% Variación de los pesos para todos los patrones 
for i=1:8 
Out(i,1)=X(i,:)*W+bias;%devolucion de 1x1 
error=Y(i,1)-Out(i,1); 
W(1,1)=alfa*error*X(i,1)+W(1,1); 
W(2,1)=alfa*error*X(i,2)+W(2,1); 
W(3,1)=alfa*error*X(i,3)+W(3,1); 
bias=alfa*error+bias; 
end 
end 
% ----------------------------------------------------------------------- 
 
disp('Peso Sináptico W') 
disp(W); 
sprintf('Bias o Umbral= %g\n',bias) 
sprintf('Error Cuadrático Medio= %g\n',Errorcm); 
sprintf('X1 X2 X3 Y') 
[X Out] 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
 
clear, close all, clc 
%COMPUERTA XNOR 
% Patrones de aprendizaje y objetivos 
P = [0 0 1 1; 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 0 1 0 1]; 
T = [1 -1 -1 1]; 
Q = length(P); 
 
n1 = 2; 
ep = 1; % Ventana de valores iniciales 
% Valores iniciales 
W1 = ep*(2*rand(n1,2)-1); 
b1 = ep*(2*rand(n1,1)-1); 
W2 = ep*(2*rand(1,n1)-1); 
b2 = ep*(2*rand-1); 
alfa =0.003; 
for Epocas = 1:10000 
 sum = 0; 
 for q = 1:Q 
 % q = randi(Q); 
 % Propagación de la entrada hacia la salida 
 a1 = tansig(W1*P(:,q) + b1); 
 a2(q) = tansig(W2*a1 + b2); 
 % Retropropagación de la sensibilidades 
 e = T(q)-a2(q); 
 s2 = -2*(1-a2(q)^2)*e; 
 s1 = diag(1-a1.^2)*W2'*s2; 
 % Actualización depesos sinapticos y polarizaciones 
 W2 = W2 - alfa*s2*a1'; 
 b2 = b2 - alfa*s2; 
 W1 = W1 - alfa*s1*P(:,q)'; 
 b1 = b1 - alfa*s1; 
 % Sumando el error cuadratico 
 sum = e^2 + sum; 
 end 
 % Error cuadratico medio 
 emedio(Epocas) = sum/Q; 
end 
figure, subplot(1,2,1), plot(emedio) 
 
% Verificación de la respuesta de la multicapa 
for q = 1:Q 
 a(q) = tansig(W2*sign(W1*P(:,q) + b1)+ b2); 
end 
a 
 
% Frontera de decisión 
u = linspace(-2, 2, 100); 
v = linspace(-2, 2, 100); 
for i = 1:length(u) 
 for j = 1:length(v) 
 z(i,j) = tansig(W2*sign(W1*[u(i); v(j)] + b1) + b2); 
 end 
end 
subplot(1,2,2), hold on, contour(u, v, z',[-0.9, 0, 0.9],'LineWidth', 2) %Por que 
debo transponer a z 
axis([-0.5 1.5 -0.5 1.5]), plot(P(1,[1,4]),P(2,[1,4]),'ro', 
P(1,[2,3]),P(2,[2,3]),'bo') 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
%RED DE HOPFIELD CON 3 NEURONAS 
%CÁLCULO DE PESOS 
%Patrones de entrada 
e(1,:) = [-1 -1 1 1]; 
e(2,:) = [-1 1 -1 1]; 
e(3,:) = [-1 -1 1 1]; 
 
w=[]; %Inicializa la matriz de pesos en cero 
%Cálculo de pesos (Regla de Cooper-Hebb) 
for i=1:4 
 for j=1:4 
 w(i,j)=0; 
 for p=1:3 %cantidad de patrones 
 if i~=j 
 w(i,j)=w(i,j)+e(p,i)*e(p,j); 
 end 
 end 
end 
end 
clear i j 
 
 
 
 
A) pesos calculados 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 B) patrones no entrenados o no reconocidos por la red 
 e1 e2 e3 
 -1 -1 1 
 -1 1 1 
 1 -1 -1 
 1 1 -1 
 
clear s 
e= input( ' Ingrese patron ' ) ; 
s(1 ,:)=e; %Inicializa la red con el patrón a vereficar 
F=0 ; %Iniciali za un flag para control del segmento wh ile t=l; \Inicializa el 
tiempo de teraci6n 
t=1; 
 
 
while F==0 
t=t+1; 
%muktipliacar lamtris por el valor 
for i=1:4 
 net(t,i)=0; 
 for j =1:4 
 if i~=j 
 paso= s(t-1,j)*w( i, j) ; 
 net(t,i) = net(t,i)+paso; 
 end 
end 
 
s(t,i)=sign(net(t,i)+e(i)); 
end 
if s(t,:)==s(t-1,:) 
% if logical (s(t,:) ==s (t-1, :) ) 1 1 logical (s (t , : ) == s ( t-2, :) )" 
F=1; 
end 
end 
%clear F t i j paso net 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
 
 
 
 
En la ultima entrada que se ingreso 1100=11-1-1 hay un error ya que toma como un valor ya 
aprendido y intenta iterar mas veces y si ingresamos un valor 1 -1 1 -1 se queda en un bucle infinito 
creo que son los pocas entradas qe tiene. 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO CRUZ, ROBLES, TOLAY 
 
 
 
 
 
 
 
 
%DEFINICION DE FUNCION SIGMOIDE 
function y = sigmoide(n) 
y = 1./(1 + exp(-n)); 
end 
%ENTRENAMIENTO Y VERIFICACION 
clear,clc 
 
y=linspace(0,2*pi,20); 
x=linspace(0,2*pi,20); 
z=linspace(-1,1,20); 
T=sin(x)+cos(y)+z; 
P=x; 
 
Q = size(P,2); 
 
% Valores iniciales 
n1 = 3;%nro de neuronas en la capa 1 
ep = 1; 
W1 = 2*ep*rand(n1,1) - ep; 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
b1 = 2*ep*rand(n1,1) - ep; 
W2 = 2*ep*rand(1,n1) - ep; 
b2 = 2*ep*rand - ep; 
error=1; 
epsion=0.001; 
alfa = 0.01; 
while error>epsion 
for Epocas = 1:2000 
 sum = 0; 
 for q = 1:Q 
 %q = randi(Q); 
 % Propagación de la entrada hacia la salida 
 a1 = sigmoide(W1*P(q) + b1); 
 a2 = W2*a1 + b2; 
 % Retropropagación de la sensibilidades 
 e = T(q)-a2; 
 s2 = -2*1*e; 
 s1 = diag((1-a1).*a1)*W2'*s2; 
 % Actualización de pesos sinapticos y polarizaciones 
 W2 = W2 - alfa*s2*a1'; 
 b2 = b2 - alfa*s2; 
 W1 = W1 - alfa*s1*P(q)'; 
 b1 = b1 - alfa*s1; 
 % Sumando el error cuadratico 
 sum = e^2 + sum; 
 end 
 % Error cuadratico medio 
 emedio(Epocas) = sum/Q; 
 error=sum/Q; 
end 
end 
 
figure, plot(emedio) 
 
% Verificación grafica de la respuesta de la multicapa 
p = -0:0.01:20; 
for q = 1:length(p) 
 a1 = sigmoide(W1*p(q) + b1); 
 a2(q) = W2*a1 + b2; 
end 
figure, plot(p,a2,P,T,'r*') 
 
% Calculo del error cuadratico medio para los patrones de ejemplo 
ec = 0; 
for q = 1:Q 
 a1 = sigmoide(W1*P(q) + b1); 
 a = W2*a1 + b2; 
 ec = ec + (T(q) - a)^2; 
end 
ec/Q 
 
GRAFICA DEL ERROR CUDRATICO MEDIO Y APROXIMACION 
DE LA FUNCION 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
ERROR CUADRATICO MEDIO 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
clc;clear; 
 
uno=xlsread('D:\MATERIASINGENIERIA\2020\IA\uno.xlsx'); 
UNO=[uno(1,:) uno(2,:) uno(3,:) uno(4,:) uno(5,:) uno(6,:) uno(7,:) uno(8,:) 
uno(9,:) uno(10,:) uno(11,:)]; 
 
cuatro=xlsread('D:\MATERIASINGENIERIA\2020\IA\cuatro.xlsx'); 
CUATRO=[cuatro(1,:) cuatro(2,:) cuatro(3,:) cuatro(4,:) cuatro(5,:) cuatro(6,:) 
cuatro(7,:) cuatro(8,:) cuatro(9,:) cuatro(10,:) cuatro(11,:)]; 
%========================================== 
%test 
unotest=xlsread('D:\MATERIASINGENIERIA\2020\IA\unotest.xlsx'); 
UNOTEST=[unotest(1,:) unotest(2,:) unotest(3,:) unotest(4,:) unotest(5,:) 
unotest(6,:) unotest(7,:) unotest(8,:) unotest(9,:) unotest(10,:) unotest(11,:)]; 
 
cuatrotest=xlsread('D:\MATERIASINGENIERIA\2020\IA\cuatrotest.xlsx'); 
CUATROTEST=[cuatrotest(1,:) cuatrotest(2,:) cuatrotest(3,:) cuatrotest(4,:) 
cuatrotest(5,:) cuatrotest(6,:) cuatrotest(7,:) cuatrotest(8,:) cuatrotest(9,:) 
cuatrotest(10,:) cuatrotest(11,:)]; 
 
%=========================================== 
%============================================= 
%PT PATRONES 
PT(1,:)=UNO; 
%PT(2,:)=DOS; 
%PT(3,:)=TRES; 
PT(2,:)=CUATRO; 
%PT(5,:)=CINCO; 
%PT(6,:)=SIES; 
%PT(7,:)=SIETE; 
%PT(8,:)=OCHO; 
%PT(9,:)=NUEVE; 
%PT(10,:)=CERO; 
 
%----------------------------------------------------------------------- 
% Inicializa la matriz de pesos en cero 
% Como la matriz es de 11x7, se tiene 77 neuronas, en consecuencia 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
% La matriz de pesos sera una matriz cuadrada de 77 
W=zeros(77); 
%----------------------------------------------------------------------%- 
%carga de matris 
for i=1:77 
 for j=1:77 
 W(i,j)=0; 
 for p=1:2 
 if j~=i 
 W(i,j)=W(i,j)+PT(p,j)*PT(p,i); 
 end 
 end 
 end 
end 
clear i j 
% OPERACION DE LA RED HOPFIELD 
%-------------------------------------------------------------------- 
clear s 
e= UNOTEST; 
s(1,:)=e; %Inicializa la red con el patrón a vereficar 
F=0 ; %Iniciali za un flag para control del segmento wh ile t=l; \Inicializa el 
tiempo de teraci6n 
t=1; 
 
while F==0 
 t=t+1;%muktipliacar lamtris por el valor 
 for i=1:77 
 net(t,i)=0; 
 for j =1:77 
 if i~=j 
 paso=s(t-1,j)*W(i,j); 
 net(t,i)=net(t,i)+paso; 
 end 
 end 
 s(t,i)=sign(net(t,i)+e(i)); 
 end 
 if s(t,:)==s(t-1,:) 
 % if logical (s(t,:) ==s (t-1, :) ) 1 1 logical (s (t , : ) == s ( t-2, 
:) )" 
 F=1; 
 end 
end 
 
S=[s(t,1:7); s(t,8:14); s(t,15:21); s(t,22:28); s(t,29:35); s(t,36:42); 
s(t,43:49); s(t,50:56); s(t,57:63); s(t,64:70); s(t,71:77)]; 
RE=S; 
for i=1:11 
 
 for j =1:7 
 if RE(i,j)==1 
 RE(i,j)='@'; 
 end 
 end 
 
end 
 
clear F t i j net paso 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
CONCLUSIONES :el nivel de recuperación es de un 100% con estos ejemplos en particular . 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO CRUZ, ROBLES, TOLAY 
 
 
 
Inteligencia Artificial 
Trabajo PrácticoN° 5 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Tema:Redes neuronales artificiales 2 
INTEGRANTES: 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
1. AGRUPAMIENTO 
a) Mediante un script de Matlab, generar una nube de datos bidimensionales aleatorios de 400 
puntos, de tal forma que se distribuya en 4 grupos de aproximadamente 100 puntos por grupo, 
donde cada grupo esté mayormente contenido en cada circunferencia, como se muestra en la 
figura de la derecha. Dibujar los puntos sobre un sistema de ejes. 
 
 
b) Utilizando la función K-means, en configuración automática, deter- minar cómo realiza la 
agrupación el algoritmo. Consignar la cantidad de grupos identificados, cantidad de elementos por 
grupo, posición de los centros y la distancia media de cada grupo. Dibujar los puntos sobre un 
sistema de ejes, identificando cada grupo con un color y marca diferentes. 
 
 
c).Utilizando la función K-means (condiciones por defecto), realizar una agrupación en 4 
grupos específicamente. Consignar la cantidad de elementos por grupo, posición de los 
centros y la distancia media de cada grupo. Dibujar los puntos sobre un sistema de ejes, 
identificando cada grupo con un color y marca diferentes. 
 
 
d) El algoritmo dispone de cinco métodos diferentes para medir las distancias entre los puntos. 
Repetir el problema del punto c), utilizando como opción de distancia los restantes cuatro métodos. 
e) Sacar conclusiones sobre los resultados obtenidos entre b) y c). f) Sacar conclusiones sobre los 
resultados obtenidos entre c) y d). 
 
La red debe clasificar los puntos (x, y) que se ingresen devolviendo las coordenadas 
de sus respectivos centros (cx, cy). El entrenamiento no supervisado para las 
funciones de las neuronas ocultas, queda concluido tomando los datos de los 
centros y aperturas de las circunferencias mostradas en la figura 11.b. 
Para el entrenamiento supervisado, se deben generar 10 puntos aleatoriamente 
distribuidos en cada circunferencia. 
 
 
En la fase de operación, comprobar los resultados para diferentes puntos ubicados 
dentro y fuera de cada circunferencia. 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
Valores obtenidos del esquema 
12.2 Centroides: 
C1=(0.5,0.5) σ=1 amplitud de la circunferencia. 
C1=(-0.5,0.5) r=0.5 
C1=(-0.5,-0.5) 
C1=(0.5,-0.5) 
 
[centroides]=CargarCentroide
s(); 
[matrizX1X2]=CargarEntradas(
); salidaDeseada=[1 1 1 1]; 
[f,c]=size(matrizX1X2); 
pesos=[0.3 0.2 -0.5 0.5]; 
for j=1: 1000 
sprintf('numero %g 
interaciones',j) fori=1:f 
[y]=NeuronaOculta(matrizX1X2(i,1),matrizX1X2(i,2),centroides); 
[salidaCalculada]=NeuronaSalida(y,pesos); 
[error,pesosN]=aprendizaje(pesos,salidaCalculada,salidaDeseada(1),y); 
errores(i)=error; 
pesos=pesos
N; end 
cont=; 
fori=14 
if(errores(i)<0.0001) 
cont=cont+1; 
end 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
end 
ifcont==
4 break; 
end 
end 
peso
s 
%--------------------------------------------------------- 
function [centroides]=CargarCentroides() 
%funcion para cargar el 
centroide m(1,1)=0.5; 
m(1,2)=0.5; 
m(2,1)=-0.5; 
m(2,2)=0.5; 
m(3,1)=-0.5; 
m(3,2)=-0.5; 
m(4,1)=0.5; 
m(4,2)=-0.5; 
centroides=
m; end 
%--------------------------------------------------------- 
function [matrizX1X2]=CargarEntradas(); 
%cargar las entradas para aprendizaje 
m(1,1)=0.8; 
m(1,2)=0.5; 
m(2,1)=-0.2; 
 
 
 
 
 
m(2,2)=0.5; 
m(3,1)=-0.5; 
m(3,2)=-0.8; 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
m(4,1)=0.5; 
m(4,2)=-0.2; 
matrizX1X2=m
; end 
%--------------------------------------------------------- 
function [y]=NeuronaOculta(x1,x2,centroides) 
%obtiene los resultados de la neurona de 
oculta fori=1:4 
rj=(x1-centroides(i,1)).^2 +(x2-
centroides(i,2)).^2; m(i)=exp(-rj/2); 
end 
y=m
; end 
%--------------------------------------------------------- 
function [salidaCalculada]=NeuronaSalida(y,pesos) 
%captura los resultados de la neurona de 
salida. suma=0; 
fori=1:4 
suma= 
suma+y(i)*pesos(i); end 
salidaCalculada=suma; 
end 
%--------------------------------------------------------- 
function[error,pesosW]=aprendizaje(pesos,salidaCalculada,salidaDeseada,y) 
 
 
 
 
 
%aprendizaj
e fori=1:4 
m(i)=pesos(i)+0.5*(salidaDeseada-
salidaCalculada)*y(i); end 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
e=salidaDeseada-
salidaCalculada; pesosW=m; 
error=e; 
end 
 
 
%--------------------------------------------------------- 
function [cuadrante]=ComprobarDatos(x1,x2,centroides) 
%me permite comprobar las 
salidas fori=1:4 
rj=(x1-centroides(i,1)).^2 +(x2-
centroides(i,2)).^2; m(i)=exp(-rj/2); 
end 
aux=m(1)
; c=1; 
fori=1:3 
if(m(i+1)>=aux
) aux=m(i+1); 
c=i+1; 
en
d 
en
d 
cuadrante=
c; end 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
2. La red RBF de la figura (a) se va a utilizar como herramienta de agrupamiento (clustering). 
Se implementará mediante las funciones de Matlab con un script. 
 
a) Utilizar los puntos de la figura (b) para crear los patrones de entrenamiento de la red. La 
respuesta deseada debe ser un ‘1’ en la neurona de salida que represente a la clase y un ‘0’ 
en las restantes neuronas de salida. 
b) Crear tres redes RBF para verificar la operación; una con 3 neuronas ocultas, otra con 4 
neuronas ocultas (como en la figura a) y la tercera sin dar valor al parámetro de la cantidad 
de neuronas, en este último caso la función de creación de la red tomará la cantidad de 
neuronas necesarias (ver Problema Resuelto RBF). Seleccionar un valor de “spread” 
conveniente (por defecto utiliza el valor 1). Se recomienda un error objetivo igual a 0. 
 
 
 
c) Comprobar el funcionamiento de las redes con al menos 10 puntos (de la grilla - fig. b), no 
utilizados para el entrenamiento. Volcar los resultados sobre el mismo espacio de datos de 
la figura (b), uno para cada red. 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
d) Dar conclusiones respecto de los resultados obtenidos. 
 
 
Sacamos los centros estimados de cada neurona: 
 
Parametros de entrada y salida para el entreamiento supervizado 
 
 
 
Código del script: 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
Comprobamos el funcionamiento de la RNA utilizando tres puntos para cada clase y los 
resultados son los siguientes: 
 
 
 
 
Creamos las matrices de prueba a clasificar correspondiente a cada una de las clases. 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
 
 
Y los resultados de la simulación se muestran en la siguiente imagen: 
 
 
Se puede observar el correcto funcionamiento de la red para los patrones ingresados. 
 
 
3. APROXIMACIÓN CON RED RBF. 
Se desea aproximar la función dada a continuación, con una red RBF, cuyo esquema 
genérico se 
muestra en la figura. 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
Red RBF. 
Armamos los datos de entrada y de salida para la red: 
 
Luego ejecutamos el comando nntoolpara crear la red. 
 
 
Creamos la red con ayuda de la GUI: 
 
Luego la exportamos al workspace. 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
Para probar el resultado creamos una variable ejemplo que contiene el resultado de la red creada y 
graficamos con plotejemplo representada con ‘*’ y la función original con color rojo. 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
x=linspace(0,2*pi,20); 
y=linspace(0,2*pi,20); 
z=linspace(-1,1,20); 
valor_entrada=[x;y;z]; 
valor_salida=sin(x)+cos(y)+z; 
 
 
 
ejemplo=punto3_tp5marciocrack(valor_entrada
); holdon 
plot(valor_salida,'red'
) plot(ejemplo,'*')%==========newrbe()inciso_b============== 
%======================================== 
x=linspace(0,2*pi,20); 
y=linspace(0,2*pi,20); 
z=linspace(-1,1,20); 
valor_entrada=[x;y;z]; 
valor_salida=sin(x)+cos(y)+z; 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
net = newrbe (valor_entrada, valor_salida); 
ejemplo=net(valor_entrada); 
holdon 
plot(valor_salida,'red') 
plot(ejemplo,'*') 
%======================================== 
%======================================== 
 
 
 
 
 
 
 
 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
 
 
 
 
 
 
F=[F1 F2 F3 F4]; 
A=[ones(1,length(F1)) zeros(1,length(F1)) zeros(1,length(F1)) 
zeros(1,length(F1)) ]; 
B=[zeros(1,length(F1)) ones(1,length(F1)) zeros(1,length(F1)) zeros(1,length(F1)) 
]; 
C=[zeros(1,length(F1)) zeros(1,length(F1)) ones(1,length(F1)) 
zeros(1,length(F1)) ]; 
D=[zeros(1,length(F1)) zeros(1,length(F1)) zeros(1,length(F1)) 
ones(1,length(F1))]; 
TTT=[A;B;C;D]; 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO 
 
 
 
2020 Facultad de Ingeniería (UNJu) 
GRUPO: IA_EN_TU_BOLSILLO

Otros materiales