close all 
clear all 
clc 

% Primeiro passo: Definir o universo de discurso. Vamos dividir em 1000.

v = linspace(0,180,10000);
m = linspace(0,2.4,10000);
p = linspace(0,20,10000);


% Segundo passo: Gerar as funcoes de pertinencia para cada input

vbaixa = trapezoidal(v,0,0,50,100);
vmedia = triangular(v,50,125,150);
valta = trapezoidal(v,100,150,180,180);


mpequena = trapezoidal(m,0,0,.5,1);
mmedia = triangular(m,.5,1.25,1.5);
mgrande = trapezoidal(m,1.25,2,2.4,2.4);

pfraca = trapezoidal(p,0,0,5,15);
pelevada = trapezoidal(p,5,15,20,20);


% Terceiro passo: Obter os valores singleton dos valores de amostra

% Cria liberdade para o usuario entrar com o dado de v e m 

prompt = 'Qual o valor da velocidade do carro nesse momento ?\n\n';
va = input(prompt);
while(va>180 || va<0) 
    display('Valor inválido.')
    va = input(prompt);
end
prompt = 'Qual o valor da massa do carro nesse momento ?\n\n';
ma = input(prompt);
while(ma>2.4 || ma<0) 
    display('Valor inválido.')
    ma = input(prompt);
end

% Agora os singleton

s1 = singleton(v,vbaixa,va);
s2 = singleton(v,vmedia,va);
s3 = singleton(v,valta,va);
s4 = singleton(m,mpequena,ma);
s5 = singleton(m,mmedia,ma);
s6 = singleton(m,mgrande,ma);

% Quarto passo: Usar o conectivo das regras

r1 = min(s1,s4);
r2 = min(s1,s5);
r3 = min(s1,s6);

r4 = min(s2,s4);
r5 = min(s2,s5);
r6 = min(s2,s6);

r7 = min(s3,s4);
r8 = min(s3,s5);
r9 = min(s3,s6);

% Quinto passo: Usar a implicacao de Mamdani

out1 = saida(pfraca,r1);
out2 = saida(pfraca,r2);
out3 = saida(pelevada,r3);

out4 = saida(pfraca,r4);
out5 = saida(pelevada,r5);
out6 = saida(pelevada,r6);

out7 = saida(pelevada,r7);
out8 = saida(pelevada,r8);
out9 = saida(pelevada,r9);

% Sexto passo: Agregacao das saidas

agreg = max([out1;out2;out3;out4;out5;out6;out7;out8;out9]);

% Setimo passo: Usar centro de area para obter valor da pressao no freio

psaida = centroarea(p,agreg);

% vamos ver como ficou! 

display(sprintf('O valor da pressão no freio é: %.2f',psaida))

figure

plot(v,vbaixa,v,vmedia,v,valta,'LineWidth',3);
legend('vbaixa','vmedia','valta')
title('Entrada: Velocidade');
xlabel('V [km/h]');
ylabel('\mu_v');
axis([0 180 0 1]) %ajusta eixos
grid on

saveas2('velocidade.pdf')

figure

plot(m,mpequena,m,mmedia,m,mgrande,'LineWidth',3);
legend('mpequena','mmedia','mgrande')
title('Entrada: Massa');
xlabel('M [ton]');
ylabel('\mu_m');
axis([0 2.4 0 1]) %ajusta eixos
grid on

saveas2('massa.pdf')

figure

plot(p,pfraca,p,pelevada,'LineWidth',3);
legend('pfraca','pelevada')
title('Saida: Pressão');
xlabel('P [bar]');
ylabel('\mu_p');
axis([0 20 0 1]) %ajusta eixos
grid on

saveas2('pressao.pdf')

figure

plot(p,[out1;out2;out3;out4;out5;out6;out7;out8;out9],'LineWidth',3);
legend('out1','out2','out3','out4','out5','out6','out7','out8','out9')
title('Saida: Pressão cada regra');
xlabel('P [bar]');
ylabel('\mu_p');
axis([0 20 0 1]) %ajusta eixos
grid on

saveas2('pressao_regras.pdf')

figure

plot(p,agreg,'LineWidth',3);
title('Saida: Pressão');
xlabel('P [bar]');
ylabel('\mu_p');
axis([0 20 0 1]) %ajusta eixos
grid on

saveas2('pressao_agreg.pdf')



