
Problema sistema Experto Matlab
Publicado por Samuel (2 intervenciones) el 26/07/2013 01:21:11
Hola amigos, escribo porque tengo el siguiente problema con un programa en matlab.
Les pegare la programación, espero no se molesten. El archivo es .m en y esta desarrolado en matlab. Ojalá alguien pueda ayudarme ya que estoy estancado:
Si ustedes pegan eso en un archivo .m en Matlab podrán comprobar los errores, solo pido mucha ayuda.
Saludos y que muuuuy atento a sus comentarios.
El error que lanza es:
??? Error using ==> TRABAJO_FINAL_CEXPERTO_001>inicializa at 73
Error using ==> vertcat
CAT arguments dimensions are not consistent.
Error in ==> TRABAJO_FINAL_CEXPERTO_001 at 5
[regla, d, p, pantalla, esp1, esp2, esp3] = inicializa;
La programación es:
% Sistema experto para la deteccion de falla en circuitos electricos
% --------------------------------------------------------------------
function result = TRABAJO_FINAL_CEXPERTO_001
p = adq_datos;
[regla, d, p, pantalla, esp1, esp2, esp3] = inicializa;
% DEFINICION DE REGLAS
regla(1) = p(1);
regla(2) = and(and(p*(1), p*(5)), p(3));
regla(3) = and(regla*(2), p(6));
regla(4) = and(regla*(2), not(p(6)));
regla(5) = and(and(p*(1), not(p(5))), p(3));
regla(6) = and(and(p*(1), p(7)), p(4));
regla(7) = and(regla*(6), p(6));
regla(8) = and(regla*(6), not(p(8)));
regla(9) = and(and(p*(1), not(p(7))), p(4));
regla(10) = not(p*(1));
regla(11) = and(not(p*(1)), p(9));
regla(12) = and(regla*(11), p(10));
regla(13) = and(regla*(11), not(p(10)));
regla(14) = and(not(p*(1)), not(p(9)));
regla(15) = p*(3);
regla(16) = p*(4);
%INFERENCIAS
if regla(1), d(1) = 1; end;
if regla(2), d(2) = 1; end;
if regla(3), d(3) = 1; end;
if regla(4), d(4) = 1; end;
if regla(5), d(5) = 1; end;
if regla(6), d(6) = 1; end;
if regla(7), d(7) = 1; end;
if regla(8), d(8) = 1; end;
if regla(9), d(9) = 1; end;
if regla(10), d(10) = 1; end;
if regla(11), d(11) = 1; end;
if regla(12), d(12) = 1; end;
if regla(13), d(13) = 1; end;
if regla(14), d(14) = 1; end;
if regla(15), d(15) = 1; end;
if regla(16), d(16) =1 ; end;
if or(or(or(or(or(or(or(d(2), d(3)), d(4)), d(5)), d(6)), d(7)), d(8)), d(9))
d(1) = 0;
end;
if or (d(3), d(4))
d(2) = 0;
end;
if or (d(7), d(8))
d(6) = 0;
end;
if or(or(or(d(11), d(12)), d(13)), d(14)),
d(10) = 0;
end;
if or (d(12), d(13))
d(11) = 0;
end;
resultado(d)
function [reg, dat, pro, pantalla1, especial1, especial2, especial3] = inicializa
%Funcion que sirve para inicializar los valores de los arreglos a ocupar
%para reglas, datos, proposiciones
%Por defecto tienen el valor 0 (falso)
for i = 1:14
reg(i) = 0;
dat(i) = 0;
pro(i) = 0;
end
pantalla1 = ['especial1';
'especial2 ';
'Revise tarjetas SIMADYN ';
'Reemplace tiristores defectuosos ';
'especial3 ';
'Revise rectificador SIMOVERT D ';
'Revise tarjetas de disparo exitatris SIMADYN D ';
'Revise banco de tiristores ';
'Reaprete los pernos de sujecicon de las escobillas ';
'Revise las protecciones pueden estar dañadas ';
'Revise tarjetas disparadoras SAV 22 ';
'Revise SIMADYN D, tarjetas de monitoreo y reconfigure ';
'Reemplace las protecciones dañadas o reconfigurelas ';
'Reemplace las protecciones dañadas o reconfigurelas '];
especial1 = ['Revise las protecciones diferenciales de corriente ';
'Revise las protecciones diferenciales de corriente '];
especial2 = ['Revise bando de tiristores ';
'Revise tarjetas de SAV 22 ';
'Revise FO y optodisparadores '];
especial3 = ['Revise SwitchGear ';
'Revise transformador '];
%FIN DE LA FUNCION INICIALIZA
% INTERFAZ DE ADQUISICION DE DATOS
function datos = p
display('Bienvenido al sistema de deteccion de falla')
display(' ')
display('Se le realizara una serie de preguntas para estableces cual es la falla')
display('Responda:')
display(' 1 si la respuesta es afirmativa')
display(' 0 si la respuesta es negativa')
input('Presione la tecla enter para comenzar...')
display(' ')
datos(1) = input('tripp real?? ');
display(' ')
datos(2) = input('¿Las proteccion sobrecorrientes accionadas han sido revisadas? ');
display(' ')
datos(3) = input('¿NO1, NO2 y NO3 estan accionadas? ');
display(' ')
datos(4) = input('¿N21 esta accionada? ');
display(' ')
datos(5) = input('¿Las protecciones diferenciales han sido revisadas? ');
display(' ')
datos(6) = input('¿El bando de tiristores, SAV 22, FO y Optodisparadores han sido revisados? ');
display(' ')
datos(7) = input('¿Las escobillas de alimentacion han sido revisadas? ');
display(' ')
datos(8) = input('¿El rectificador SIMOVERT D ha sido revisado ');
display(' ')
datos(9) = input('¿Las protecciones han sido revisadas? ');
display(' ')
datos(10) = input('¿Las tarjetas disparadoras han sido revisadas? ');
end %FIN DE FUNCION adq_datos
function a = resultado(resul)
temp = 0; %SE UTILIZA ESTA VARIABLE PARA COMPROBAR QUE EXISTEN VALORES VERDADEROS
display(' ')
display(' ')
display(' Resultad: ')
for i = 14:-1:1
if resul(i)
temp = 1;
%DISPLAY (i)
if or(or(i == 1, i == 2, i == 5))
if i == 1
display(esp1(1,1:50))
display(esp1(2,1:50))
end
if i == 5
display(esp2(1,1:28))
display(esp2(2,1:28))
display(esp2(3,1:28))
end
if i == 5
display(esp3(1,1:20))
display(esp3(2,1:20))
end
else
display(pantalla(i,1:53));
end
end;
end
if temp == 0 % SI ESTA AQUI ENTONCES SIGNIFICA QUE NO HUBIERON PROPOSICIONES EVALUADAS VERDADERAS
display('La causa no se encuentra en nuestra base de conocmientos')
end;
end
end %FIN FUNCION RESULTADOS
end %FIN FUNCION EXPERT
Les pegare la programación, espero no se molesten. El archivo es .m en y esta desarrolado en matlab. Ojalá alguien pueda ayudarme ya que estoy estancado:
Si ustedes pegan eso en un archivo .m en Matlab podrán comprobar los errores, solo pido mucha ayuda.
Saludos y que muuuuy atento a sus comentarios.
El error que lanza es:
??? Error using ==> TRABAJO_FINAL_CEXPERTO_001>inicializa at 73
Error using ==> vertcat
CAT arguments dimensions are not consistent.
Error in ==> TRABAJO_FINAL_CEXPERTO_001 at 5
[regla, d, p, pantalla, esp1, esp2, esp3] = inicializa;
La programación es:
% Sistema experto para la deteccion de falla en circuitos electricos
% --------------------------------------------------------------------
function result = TRABAJO_FINAL_CEXPERTO_001
p = adq_datos;
[regla, d, p, pantalla, esp1, esp2, esp3] = inicializa;
% DEFINICION DE REGLAS
regla(1) = p(1);
regla(2) = and(and(p*(1), p*(5)), p(3));
regla(3) = and(regla*(2), p(6));
regla(4) = and(regla*(2), not(p(6)));
regla(5) = and(and(p*(1), not(p(5))), p(3));
regla(6) = and(and(p*(1), p(7)), p(4));
regla(7) = and(regla*(6), p(6));
regla(8) = and(regla*(6), not(p(8)));
regla(9) = and(and(p*(1), not(p(7))), p(4));
regla(10) = not(p*(1));
regla(11) = and(not(p*(1)), p(9));
regla(12) = and(regla*(11), p(10));
regla(13) = and(regla*(11), not(p(10)));
regla(14) = and(not(p*(1)), not(p(9)));
regla(15) = p*(3);
regla(16) = p*(4);
%INFERENCIAS
if regla(1), d(1) = 1; end;
if regla(2), d(2) = 1; end;
if regla(3), d(3) = 1; end;
if regla(4), d(4) = 1; end;
if regla(5), d(5) = 1; end;
if regla(6), d(6) = 1; end;
if regla(7), d(7) = 1; end;
if regla(8), d(8) = 1; end;
if regla(9), d(9) = 1; end;
if regla(10), d(10) = 1; end;
if regla(11), d(11) = 1; end;
if regla(12), d(12) = 1; end;
if regla(13), d(13) = 1; end;
if regla(14), d(14) = 1; end;
if regla(15), d(15) = 1; end;
if regla(16), d(16) =1 ; end;
if or(or(or(or(or(or(or(d(2), d(3)), d(4)), d(5)), d(6)), d(7)), d(8)), d(9))
d(1) = 0;
end;
if or (d(3), d(4))
d(2) = 0;
end;
if or (d(7), d(8))
d(6) = 0;
end;
if or(or(or(d(11), d(12)), d(13)), d(14)),
d(10) = 0;
end;
if or (d(12), d(13))
d(11) = 0;
end;
resultado(d)
function [reg, dat, pro, pantalla1, especial1, especial2, especial3] = inicializa
%Funcion que sirve para inicializar los valores de los arreglos a ocupar
%para reglas, datos, proposiciones
%Por defecto tienen el valor 0 (falso)
for i = 1:14
reg(i) = 0;
dat(i) = 0;
pro(i) = 0;
end
pantalla1 = ['especial1';
'especial2 ';
'Revise tarjetas SIMADYN ';
'Reemplace tiristores defectuosos ';
'especial3 ';
'Revise rectificador SIMOVERT D ';
'Revise tarjetas de disparo exitatris SIMADYN D ';
'Revise banco de tiristores ';
'Reaprete los pernos de sujecicon de las escobillas ';
'Revise las protecciones pueden estar dañadas ';
'Revise tarjetas disparadoras SAV 22 ';
'Revise SIMADYN D, tarjetas de monitoreo y reconfigure ';
'Reemplace las protecciones dañadas o reconfigurelas ';
'Reemplace las protecciones dañadas o reconfigurelas '];
especial1 = ['Revise las protecciones diferenciales de corriente ';
'Revise las protecciones diferenciales de corriente '];
especial2 = ['Revise bando de tiristores ';
'Revise tarjetas de SAV 22 ';
'Revise FO y optodisparadores '];
especial3 = ['Revise SwitchGear ';
'Revise transformador '];
%FIN DE LA FUNCION INICIALIZA
% INTERFAZ DE ADQUISICION DE DATOS
function datos = p
display('Bienvenido al sistema de deteccion de falla')
display(' ')
display('Se le realizara una serie de preguntas para estableces cual es la falla')
display('Responda:')
display(' 1 si la respuesta es afirmativa')
display(' 0 si la respuesta es negativa')
input('Presione la tecla enter para comenzar...')
display(' ')
datos(1) = input('tripp real?? ');
display(' ')
datos(2) = input('¿Las proteccion sobrecorrientes accionadas han sido revisadas? ');
display(' ')
datos(3) = input('¿NO1, NO2 y NO3 estan accionadas? ');
display(' ')
datos(4) = input('¿N21 esta accionada? ');
display(' ')
datos(5) = input('¿Las protecciones diferenciales han sido revisadas? ');
display(' ')
datos(6) = input('¿El bando de tiristores, SAV 22, FO y Optodisparadores han sido revisados? ');
display(' ')
datos(7) = input('¿Las escobillas de alimentacion han sido revisadas? ');
display(' ')
datos(8) = input('¿El rectificador SIMOVERT D ha sido revisado ');
display(' ')
datos(9) = input('¿Las protecciones han sido revisadas? ');
display(' ')
datos(10) = input('¿Las tarjetas disparadoras han sido revisadas? ');
end %FIN DE FUNCION adq_datos
function a = resultado(resul)
temp = 0; %SE UTILIZA ESTA VARIABLE PARA COMPROBAR QUE EXISTEN VALORES VERDADEROS
display(' ')
display(' ')
display(' Resultad: ')
for i = 14:-1:1
if resul(i)
temp = 1;
%DISPLAY (i)
if or(or(i == 1, i == 2, i == 5))
if i == 1
display(esp1(1,1:50))
display(esp1(2,1:50))
end
if i == 5
display(esp2(1,1:28))
display(esp2(2,1:28))
display(esp2(3,1:28))
end
if i == 5
display(esp3(1,1:20))
display(esp3(2,1:20))
end
else
display(pantalla(i,1:53));
end
end;
end
if temp == 0 % SI ESTA AQUI ENTONCES SIGNIFICA QUE NO HUBIERON PROPOSICIONES EVALUADAS VERDADERAS
display('La causa no se encuentra en nuestra base de conocmientos')
end;
end
end %FIN FUNCION RESULTADOS
end %FIN FUNCION EXPERT
Valora esta pregunta


0