Compare commits

...

2 Commits

Author SHA1 Message Date
Tiago Garcia 8d7e037ea3
[IA] Update .gitignore
Signed-off-by: Tiago Garcia <tiago.rgarcia@ua.pt>
2024-10-20 16:04:29 +01:00
Tiago Garcia bef7898a0d
[MPEI] Aula03
Signed-off-by: Tiago Garcia <tiago.rgarcia@ua.pt>
2024-10-20 16:03:31 +01:00
12 changed files with 286 additions and 0 deletions

View File

@ -1 +1,2 @@
*-TiagoRG/ *-TiagoRG/
ia2024-tpg-113304_113435_114184/

View File

@ -0,0 +1,23 @@
% Definindo os valores da variável aleatória
x = 1:6; % Faces do dado
p = ones(1, 6) / 6; % Probabilidade de cada face (distribuição uniforme)
figure;
% (a) Gráfico da função massa de probabilidade
subplot(2, 1, 1); % Duas linhas, uma coluna, primeiro gráfico
bar(x, p, 'FaceColor', [0 0.5 0.8]);
xlabel('Valores de X (Faces do dado)');
ylabel('P(X)');
xticks(x); % Colocar ticks em cada face do dado
grid on;
% (b) Gráfico da função de distribuição acumulada
subplot(2, 1, 2); % Duas linhas, uma coluna, segundo gráfico
F = cumsum(p); % Função de distribuição acumulada
stairs(x, F, 'LineWidth', 2, 'Color', [0.8 0 0]);
xlabel('Valores de X (Faces do dado)');
ylabel('F(X)');
xticks(x); % Colocar ticks em cada face do dado
grid on;

View File

@ -0,0 +1,7 @@
xi = 0 : 4;
p = [0.9 0.09 0.01];
b = [0 cumsum(p) 1];
stairs(xi, b);
xlabel('Valor da Nota (Euros)');
ylabel('F_X(x)');

View File

@ -0,0 +1,107 @@
% Number of simulations
num_simulations = 10000;
%% a)
fprintf("e)\n");
% Simulate coin tosses
results = randi([0, 1], num_simulations, 4); % 0 = tails (C), 1 = heads (K)
% Count the number of heads (K) in each simulation
num_heads = sum(results, 2);
% Estimate the probability mass function
pX = zeros(1, 5); % For 0 to 4 heads
for x = 0:4
pX(x + 1) = sum(num_heads == x) / num_simulations;
end
% Values of x (number of heads)
values_x = 0:4;
% Plotting the probability mass function
bar(values_x, pX);
xlabel('Number of Heads (K)');
ylabel('Probability P(X=x)');
title('Probability Mass Function P(X)');
xticks(values_x);
% Display the results
disp('P(X=x) values:');
for x = 0:4
fprintf('P(X=%d) = %.4f\n', x, pX(x + 1));
end
%% b)
fprintf("\n====================\n\nb)\n");
% Calculando o valor esperado E(X)
E_X = sum(values_x .* pX);
% Calculando E(X^2)
E_X2 = sum((values_x.^2) .* pX);
% Calculando a variância Var(X)
Var_X = E_X2 - E_X^2;
% Calculando o desvio padrão
std_X = sqrt(Var_X);
% Exibindo os resultados
fprintf('Valor Esperado E(X) = %.4f\n', E_X);
fprintf('Variância Var(X) = %.4f\n', Var_X);
fprintf('Desvio Padrão σ(X) = %.4f\n', std_X);
%% d)
fprintf("\n====================\n\nd)\n");
% Número total de lançamentos
n = 4;
p = 0.5;
% Calculando os valores teóricos da função massa de probabilidade
pX_teorico = zeros(1, 5);
for k = 0:n
pX_teorico(k + 1) = nchoosek(n, k) * (p^k) * ((1-p)^(n-k));
end
% Comparando os valores teóricos com os estimados
fprintf('Comparação entre valores teóricos e estimados:\n');
fprintf('%-10s %-10s %-10s\n', 'Coroas (K)', 'Teórico', 'Estimado');
for x = 0:4
fprintf('%-10d %-10.4f %-10.4f\n', x, pX_teorico(x + 1), pX(x + 1));
end
%% e)
fprintf("\n====================\n\ne)\n");
% Parâmetros da distribuição
n = 4; % número de lançamentos
p = 0.5; % probabilidade de obter uma coroa
% Cálculo teórico do valor esperado
E_X_teorico = n * p;
% Cálculo teórico da variância
Var_X_teorico = n * p * (1 - p);
% Exibindo os resultados
fprintf('Comparação entre valores teóricos e estimados:\n');
fprintf('%-20s %-10s %-10s\n', 'Descrição', 'Teórico', 'Estimado');
fprintf('%-20s %-10.4f %-10.4f\n', 'E[X]', E_X_teorico, E_X);
fprintf('%-20s %-10.4f %-10.4f\n', 'Var(X)', Var_X_teorico, Var_X);
%% f)
fprintf("\n====================\n\nf)\n");
% Valores teóricos da função massa de probabilidade
pX_teorico = zeros(1, 5);
for k = 0:n
pX_teorico(k + 1) = nchoosek(n, k) * (p^k) * ((1-p)^(n-k));
end
% Cálculo das probabilidades
P_ge_2 = 1 - (pX_teorico(1) + pX_teorico(2)); % P(X >= 2)
P_le_1 = pX_teorico(1) + pX_teorico(2); % P(X <= 1)
P_between_1_and_3 = pX_teorico(2) + pX_teorico(3) + pX_teorico(4); % P(1 <= X <= 3)
% Exibindo os resultados
fprintf('Probabilidades:\n');
fprintf('P(X >= 2) = %.4f\n', P_ge_2);
fprintf('P(X <= 1) = %.4f\n', P_le_1);
fprintf('P(1 <= X <= 3) = %.4f\n', P_between_1_and_3);

View File

@ -0,0 +1,48 @@
% Parâmetros do problema
n = 5; % número de peças
p = 0.3; % probabilidade de uma peça ser defeituosa
num_simulacoes = 10000; % número total de simulações
% Simulação
defeituosas = binornd(n, p, num_simulacoes, 1);
% Cálculo da PMF
pmf = histcounts(defeituosas, 0:n+1, 'Normalization', 'probability');
% Cálculo da CDF
cdf = cumsum(pmf);
% Cálculo da probabilidade de no máximo 2 defeituosas
prob_max_2 = sum(pmf(1:3)); % PMF para 0, 1 e 2 peças defeituosas
% Exibição dos resultados
disp('PMF:');
disp(pmf);
disp('CDF:');
disp(cdf);
disp(['Probabilidade de no máximo 2 peças defeituosas: ', num2str(prob_max_2)]);
% Gráfico na mesma figura, gráficos diferentes
figure;
% Subplot para a PMF
subplot(2, 1, 1); % 2 linhas, 1 coluna, 1º gráfico
bar(0:n, pmf, 'FaceColor', 'b', 'EdgeColor', 'k');
title('Função Massa de Probabilidade (PMF)');
xlabel('Número de Peças Defeituosas');
ylabel('Probabilidade');
xlim([-0.5 n + 0.5]);
grid on;
% Subplot para a CDF
subplot(2, 1, 2); % 2 linhas, 1 coluna, 2º gráfico
cdf_plot = [0; cdf(:)]; % Adiciona um zero no início
x_values = 0:n; % Valores do eixo x
x_values = [0; x_values(:)]; % Adiciona um zero no início
plot(x_values, cdf_plot, '-o', 'Color', 'r');
title('Função Distribuição Acumulada (CDF)');
xlabel('Número de Peças Defeituosas');
ylabel('Probabilidade Acumulada');
xlim([-0.5 n + 0.5]);
grid on;

View File

@ -0,0 +1,22 @@
% Valores de p variando de 0.001 a 0.5
p = logspace(-3, log10(0.5), 100);
% Probabilidades de despenho
P_2_motores = p.^2;
P_4_motores = 4 * p.^3 .* (1 - p) + p.^4;
% Plotando os resultados
figure;
plot(p, P_2_motores, 'b-', 'LineWidth', 2);
hold on;
plot(p, P_4_motores, 'r-', 'LineWidth', 2);
hold off;
% Configurações do gráfico
xlabel('Probabilidade de falha (p)');
ylabel('Probabilidade de despenho');
title('Probabilidade de Despenho vs. Probabilidade de Falha');
legend('2 Motores', '4 Motores');
grid on;
set(gca, 'XScale', 'log');
ylim([0 1]);

View File

@ -0,0 +1,21 @@
% Parâmetros
n = 8000;
p = 1/1000;
k = 7;
% (a) Cálculo usando a distribuição binomial
% Cálculo da combinação diretamente
comb = 1;
for i = 1:k
comb = comb * (n - (i - 1)) / i; % Cálculo da combinação n!/(k!(n-k)!)
end
P_binomial = comb * (p^k) * ((1 - p)^(n - k));
% (b) Cálculo usando a aproximação de Poisson
lambda = 8; % média de defeituosos em 8000 chips
P_poisson = (lambda^k * exp(-lambda)) / factorial(k);
% Resultados
fprintf('Probabilidade (Binomial) de 7 defeituosos: %.6f\n', P_binomial);
fprintf('Probabilidade (Poisson) de 7 defeituosos: %.6f\n', P_poisson);

View File

@ -0,0 +1,14 @@
% Parâmetros
lambda = 60; % média em 4 segundos
% (a) Probabilidade de não receber nenhuma mensagem
P_0 = exp(-lambda); % P(X = 0)
% (b) Probabilidade de receber mais de 40 mensagens
% Usando a soma das probabilidades de 0 a 40
P_leq_40 = sum(exp(-lambda) * (lambda.^(0:40)) ./ factorial(0:40)); % P(X <= 40)
P_gt_40 = 1 - P_leq_40; % P(X > 40)
% Resultados
fprintf('Probabilidade de não receber nenhuma mensagem: %.10f\n', P_0);
fprintf('Probabilidade de receber mais de 40 mensagens: %.10f\n', P_gt_40);

View File

@ -0,0 +1,12 @@
% Parâmetros
lambda = 2; % média de erros em 100 páginas
% Cálculo das probabilidades
P_0 = exp(-lambda); % P(X = 0)
P_1 = (lambda^1 * exp(-lambda)) / factorial(1); % P(X = 1)
% Probabilidade de no máximo 1 erro
P_leq_1 = P_0 + P_1;
% Resultados
fprintf('Probabilidade de no máximo 1 erro em 100 páginas: %.6f\n', P_leq_1);

View File

@ -0,0 +1,31 @@
% Parâmetros
mu = 14; % média
sigma = 2; % desvio padrão
n_samples = 100000; % número de amostras
% Gerar amostras da distribuição normal
X = mu + sigma * randn(n_samples, 1); % amostras
% (a) Probabilidade de um aluno ter classificação entre 12 e 16
P_a = mean(X >= 12 & X <= 16);
% (b) Probabilidade de os alunos terem classificações entre 10 e 18
P_b = mean(X >= 10 & X <= 18);
% (c) Probabilidade de um aluno passar (classificação maior ou igual a 10)
P_c = mean(X >= 10);
% Exibir resultados
fprintf('Estimativa da probabilidade (a) entre 12 e 16: %.4f\n', P_a);
fprintf('Estimativa da probabilidade (b) entre 10 e 18: %.4f\n', P_b);
fprintf('Estimativa da probabilidade (c) para passar (>= 10): %.4f\n', P_c);
% Verificação usando normcdf()
P_a_exact = normcdf(16, mu, sigma) - normcdf(12, mu, sigma);
P_b_exact = normcdf(18, mu, sigma) - normcdf(10, mu, sigma);
P_c_exact = 1 - normcdf(10, mu, sigma); % P(X >= 10)
% Exibir resultados da verificação
fprintf('Probabilidade exata (a) entre 12 e 16: %.4f\n', P_a_exact);
fprintf('Probabilidade exata (b) entre 10 e 18: %.4f\n', P_b_exact);
fprintf('Probabilidade exata (c) para passar (>= 10): %.4f\n', P_c_exact);