% Script de Matlab/Octave -- Ricard Torres, 2015
%
% Calculos lista de ejercicios 3, MicroApl II (sin acentos)
format bank; % Evitar notacion cientifica, usar 2 dígitos decimales
clear all;
disp('Ejercicio 1');
% Definimos la funcion de utilidad de Bernoulli
utilidad = @(z) sqrt(z);
% Distribucion y valores de las variables aleatorias
distX =  [ 1 ]; 
valX =  [ 15 ];
distY = [ 1/2, 1/2 ];
valY =  [   1,  10 ];
distXmasY = [ 1/2, 1/2 ];
valXmasY =  [  16,  25 ];
% Esperanzas: producto escalar (dot) vectores de probabilidades y de valores
espX = dot( distX, valX );
espY = dot( distY, valY );
espXmasY = dot( distXmasY, valXmasY );
fprintf('Esperanza de Y = %.2f\n',espY);
fprintf('Esperanza de X + Y = %.2f\n',espXmasY);
utespXmasY = dot( distXmasY, utilidad(valXmasY) );
fprintf('Utilidad esperada de X + Y = %.2f\n',utespXmasY);
% Diferencia en utilidad esperada entre tener (X + M) o (X + Y)
utdifXmasM = @(M) utilidad(valX + M) - utespXmasY;
% Hallamos aquel valor de M que hace la diferencia cero
M_indif = fzero( utdifXmasM, [0, 2*espY ]);
fprintf('Cantidad equivalente a Y = %.2f\n',M_indif);
clear all;
fprintf('\nEjercicio 2\n');
% Distribucion conjunta
distXY = [ 1/20, 7/20 ;
           9/20, 3/20 ];
% Distribuciones marginales
distY = sum(distXY) ; % suma filas para cada columna, queda vector fila
distX = sum(distXY') ; % para X tenemos que transponer, queda vector fila
% Valores correspondientes
valX = [ 100, 500 ];
valY = [   2, 300 ]; 
% Distribuciones condicionales de Y para cada valor de X
for i = 1 : length(valX)
    for j = 1 : length(valY)
        condY(i,j) = distXY(i,j)/sum(distXY(i,:));
    end
    fprintf('Dist condicional de Y dado X = %.2f es: ',valX(i));
    disp(condY(i,:));
    fprintf('Esp condicional de Y dado X = %.2f es: ',valX(i));
    disp( dot( condY(i,:), valY ) );
end
% Distribuciones condicionales de X para cada valor de Y
for j = 1 : length(valY)
    for i = 1 : length(valX)
        condX(j,i) = distXY(i,j)/sum(distXY(:,j));
    end
    fprintf('Dist condicional de X dado Y = %.2f es: ',valY(j));
    disp(condX(j,:));
    fprintf('Esp condicional de X dado Y = %.2f es: ',valY(j));
    disp( dot( condX(j,:), valX ) );
end
fprintf('Esperanza de X = %.2f\n',dot( distX, valX ) );
fprintf('Esperanza de Y = %.2f\n',dot( distY, valY ) );
espXmasY = 0;
utespXmasY = 0;
for i = 1 : length(valX)
    for j = 1 : length(valY)
        espXmasY = espXmasY + distXY(i,j) * ( valX(i) + valY(j) ) ;
        utespXmasY = utespXmasY + distXY(i,j) * sqrt( valX(i) + valY(j) );
    end
end
fprintf('Esperanza de X mas Y = %.2f\n',espXmasY);
fprintf('Utilidad esperada de X mas Y = %.2f\n',utespXmasY);
clear all;
fprintf('\nEjercicio 3\n');
% La restriccion impone la condicion que lambda >= 1/2
% Tambien impondremos la restriccion que x <= M
% Fijaremos la riqueza inicial M en un valor arbitrario
M = 100;
% Construimos un grid de valores de lambda
gridsize = 10;
lambda = linspace(1/2,1,gridsize);
% La utilidad esperada como funcion de la probabilidad 
% de ganar y de la apuesta
utilidad = @(prob,x) prob * log(M + x) + (1-prob) * log(M - x);
% Resolvemos el problema de maximizacion para cada probabilidad
% (hallamos el minimo del negativo de la utilidad)
for i = 1 : gridsize
  neguti = @(x) - utilidad( lambda(i), x) ;
  xsol(i) = fminbnd(neguti, 0, M);
end
% Expresamos la solucion en forma inversa: primero apuesta, luego probabilidad
solucion = [ xsol', lambda' ];
disp('Apuesta y probabilidad inferida');
disp(solucion);
plot(xsol,lambda);
xlabel('Apuesta') ; ylabel('Probabilidad') ;

%% Output
%Ejercicio 1
%Esperanza de Y = 5.50
%Esperanza de X + Y = 20.50
%Utilidad esperada de X + Y = 4.50
%Cantidad equivalente a Y = 5.25
%
%Ejercicio 2
%Dist condicional de Y dado X = 100.00 es:           0.13          0.88
%Esp condicional de Y dado X = 100.00 es:         262.75
%Dist condicional de Y dado X = 500.00 es:           0.75          0.25
%Esp condicional de Y dado X = 500.00 es:          76.50
%Dist condicional de X dado Y = 2.00 es:           0.10          0.90
%Esp condicional de X dado Y = 2.00 es:         460.00
%Dist condicional de X dado Y = 300.00 es:           0.70          0.30
%Esp condicional de X dado Y = 300.00 es:         220.00
%Esperanza de X = 340.00
%Esperanza de Y = 151.00
%Esperanza de X mas Y = 491.00
%Utilidad esperada de X mas Y = 21.83
%
%Ejercicio 3
%Apuesta y probabilidad inferida
%          0.00          0.50
%         11.11          0.56
%         22.22          0.61
%         33.33          0.67
%         44.44          0.72
%         55.56          0.78
%         66.67          0.83
%         77.78          0.89
%         88.89          0.94
%        100.00          1.00

