Programación MATLAB correspondiente al Análisis de Averías

Anuncio
ANEXO
B
Programación MATLAB
correspondiente al Análisis
de Averías
B.1 INTRODUCCIÓN
A continuación se enumeran las distintas funciones que ha sido necesario programar en Matlab
para tratar algunos datos tanto resultantes de la simulación, como resultantes de la toma de datos
reales de la línea de producción.
B.2 FUNCIONES MATLAB
Función B.2.1:
function c=tiempo(a,b) %intercala duracion y tiempo intermedio sumando
n=size(a);
m=size(b);
c=zeros(n(1)+m(1),1); %es el vector intercalado
c(1,1)=a(n(1),1);
i=m(1);
j=2;
for j=2:2:m(1)*2
c(j,1)=c(j-1,1)+b(i,1);
c(j+1,1)=c(j,1)+a(i,1);
i=i-1;
end
p=size(c);
d=zeros(2*p(1)+1,1); %es el vector intercalado doble para representacion
d(1)=0;
l=1;
for k=2:2:2*p(1)+1
d(k)=c(l);
d(k+1)=d(k);
l=l+1;
end
s=size(d);
f=zeros(s); %es el vector que da el escalon en duracion
for q=1:4:s(1)
f(q)=1;
f(q+1)=1;
163
end
plot(d,f)
axis([0,c(p(1)),0,1.2]);
xlabel('tiempo(min)');
title('maquina 2027');
Las primeras versiones …
Función B.2.2:
function separacion(d) %ordena el vector duracion de menor a mayor y le asigna un
nº de veces que se repite cada valor; tambien lo representa
[m,a]=size(d);
l=zeros(m,1);
n=zeros(m,1);
im=max(d);
k=1;
for i=1:im
for j=1:m
if d(j)==i
l(k)=d(j);
n(k)=n(k)+1;
end
end
if n(k)>=1
k=k+1;
end
end
for i=1:m
if l(i)>0
la(i)=l(i);
na(i)=n(i);
end
end
plot(la,na)
ylabel('nº veces');xlabel('duracion averia(min)');
Función B.2.3:
function [d,ti]=reseparacion(dti,A) %separa el vector de duracion y tiempo
intermedio una vez divididos en corta, media y
larga duracion
[n,m]=size(dti);
j=1;
if A==0 %representa que el primer termino es de duracion y el ultimo tambien
for i=1:2:n-1
d(j)=dti(i);
ti(j)=dti(i+1);
j=j+1;
end
d=[d,dti(n)];
164
elseif A==1 %representa que el primer termino es de tiempo intermedio y el ultimo
tambien
for i=2:2:n
d(j)=dti(i);
ti(j)=dti(i+1);
j=j+1;
end
ti=[dti(1);ti];
elseif A==2 %representa que el primer termino es de duracion y el ultimo de
tiempo intermedio
for i=1:2:n-1
d(j)=dti(i);
ti(j)=dti(i+1);
j=j+1;
end
elseif A==3 %representa que el primer termino es de tiempo intermedio y el
ultimo de duracion
for i=2:2:n
d(j)=dti(i);
ti(j)=dti(i+1);
j=j+1;
end
end
Función B.2.4:
function [corta,media, larga]=completa(d,ti,a1,a2) %se le da el vector duracion y el de
tiempo intermedio y resuelve el
estudio estadistico
dti=tiempo1(d,ti); %intercala duracion y tiempo intermedio sin sumar
[dti1,dti2,dti3]=division(dti,a1,a2) %divide el vector en duracion corta, media y larga,
sumando los tiempos intermedios
A1=input('Escriba un 0 si el primer termino del vector dti1 es de duracion y el
ultimo tambien\nEscriba un 1 si el primer termino del vector dti1 tiempo
intermedio y el ultimo tambien\nEscriba un 2 si el primer termino del vector
dti1 es de duracion y el ultimo de tiempo intermedio\nEscriba un 3 si el primer
termino del vector dti1 es de tiempo intermedio y el ultimo de duracion\n');
A2=input('Escriba un 0 si el primer termino del vector dti2 es de duracion y el
ultimo tambien\nEscriba un 1 si el primer termino del vector dti2 es de tiempo
intermedio y el ultimo tambien\nEscriba un 2 si el primer termino del vector
dti2 es de duracion y el ultimo de tiempo intermedio\nEscriba un 3 si el primer
termino del vector dti2 es de tiempo intermedio y el ultimo de duracion\n');
A3=input('Escriba un 0 si el primer termino del vector dti3 es de duracion
y el ultimo tambien\nEscriba un 1 si el primer termino del vector dti3 es de
tiempo intermedio y el ultimo tambien\nEscriba un 2 si el primer termino
del vector dti3 es de duracion y el ultimo de tiempo intermedio\nEscriba
un 3 si el primer termino del vector dti3 es de tiempo intermedio y el
ultimo de duracion\n');
[d1,ti1]=reseparacion(dti1,A1) %separa el vector de duracion y tiempo intermedio
una vez divididos en corta, media y larga duracion
165
[d2,ti2]=reseparacion(dti2,A2) %separa el vector de duracion y tiempo intermedio
una vez divididos en corta, media y larga duracion
[d3,ti3]=reseparacion(dti3,A3) %separa el vector de duracion y tiempo intermedio
una vez divididos en corta, media y larga duracion
medd1=feval(@media,d1'); %calcula la media de un vector columna
detipd1=desvtip(d1'); %calcula la desviacion tipica de un vector columna
medd2=feval(@media,d2'); %calcula la media de un vector columna
detipd2=desvtip(d2'); %calcula la desviacion tipica de un vector columna
medd3=feval(@media,d3'); %calcula la media de un vector columna
detipd3=desvtip(d3'); %calcula la desviacion tipica de un vector columna
medti1=feval(@media,ti1'); %calcula la media de un vector columna
medti2=feval(@media,ti2'); %calcula la media de un vector columna
medti3=feval(@media,ti3'); %calcula la media de un vector columna
corta=sprintf('TMP1=LOGNORML(%d,%d)\nTFMIP1=NEGEXP(%d)',medd1,detip
d1,medti1);
media=sprintf('TMP2=LOGNORML(%d,%d)\nTFMIP2=NEGEXP(%d)',medd2,deti
pd2,medti2);
larga=sprintf('TMP3=LOGNORML(%d,%d)\nTFMIP3=NEGEXP(%d)',medd3,detip
d3,medti3);
Función B.2.5:
function c=tiempo1(a,b) %intercala duracion y tiempo intermedio sin sumar
n=size(a);
m=size(b);
c=zeros(n(1)+m(1),1); %es el vector intercalado
c(1,1)=a(n(1),1);
i=m(1);
j=2;
for j=2:2:m(1)*2
c(j,1)=b(i,1);
c(j+1,1)=a(i,1);
i=i-1;
end
Función B.2.6:
function [dti11,dti22,dti33]=division(dti,a1,a2) %divide el vector en duracion corta,
media y larga, sumando los tiempos
intermedios
[n,m]=size(dti);
dti1=zeros(n,1);
dti2=zeros(n,1);
dti3=zeros(n,1);
dtiant1=0;
dtiant2=0;
dtiant3=0;
j=1;
for i=1:2:n
if dti(i)<=a1
166
dti1(j)=dti(i);
if i>1 & j>1
dti1(j-1)=dti1(j-1)+dti(i-1);
end
j=j+2;
elseif i>1 & j>1
dti1(j-1)=dti1(j-1)+dti(i)+dti(i-1);
else
dtiant1=dtiant1+dti(i)+dti(i+1);
end
end
j=1;
for i=1:2:n
if dti(i)>a1&dti(i)<=a2
dti2(j)=dti(i);
if i>1 & j>1
dti2(j-1)=dti2(j-1)+dti(i-1);
end
j=j+2;
elseif i>1 & j>1
dti2(j-1)=dti2(j-1)+dti(i)+dti(i-1);
else
dtiant2=dtiant2+dti(i)+dti(i+1);
end
end
j=1;
for i=1:2:n
if dti(i)>a2
dti3(j)=dti(i);
if i>1 & j>1
dti3(j-1)=dti3(j-1)+dti(i-1);
end
j=j+2;
elseif i>1 & j>1
dti3(j-1)=dti3(j-1)+dti(i)+dti(i-1);
else
dtiant3=dtiant3+dti(i)+dti(i+1);
end
end
for i=1:n
if dti1(i)>0
dti11(i)=dti1(i);
end
if dti2(i)>0
dti22(i)=dti2(i);
end
if dti3(i)>0
dti33(i)=dti3(i);
end
end
167
if dtiant1>0
dti11=[dtiant1,dti11];
end
if dtiant2>0
dti22=[dtiant2,dti22];
end
if dtiant3>0
dti33=[dtiant3,dti33];
end
dti11=dti11';
dti22=dti22';
dti33=dti33';
Función B.2.7:
function [d,ti]=reseparacion(dti,A) %separa el vector de duracion y tiempo
intermedio una vez divididos en corta, media y
larga duracion
[n,m]=size(dti);
j=1;
if A==0 %representa que el primer termino es de duracion y el ultimo tambien
for i=1:2:n-1
d(j)=dti(i);
ti(j)=dti(i+1);
j=j+1;
end
d=[d,dti(n)];
elseif A==1 %representa que el primer termino es de tiempo intermedio y el ultimo
tambien
for i=2:2:n
d(j)=dti(i);
ti(j)=dti(i+1);
j=j+1;
end
ti=[dti(1);ti];
elseif A==2 %representa que el primer termino es de duracion y el ultimo de
tiempo intermedio
for i=1:2:n-1
d(j)=dti(i);
ti(j)=dti(i+1);
j=j+1;
end
elseif A==3 %representa que el primer termino es de tiempo intermedio y el
ultimo de duracion
for i=2:2:n
d(j)=dti(i);
ti(j)=dti(i+1);
j=j+1;
end
end
168
Función B.2.8:
function med=media(d) %calcula la media de un vector columna
[n,m]=size(d);
med=d(1);
for i=2:n
med=med+d(i);
end
med=med/n;
Función B.2.8:
function dt=desvtip(d) %calcula la desviacion tipica de un vector columna
[n,m]=size(d);
m=media(d);
dt=0;
for i=1:n
dt=dt+(d(i)-m)^2;
end
dt=sqrt(dt/n);
169
Descargar