% Script de matlab para ayudar en la solucion de la lista 2
% (sin acentos)
% rtorres@itam.mx
clear all;
disp('Problema 1')
X = [ 15 ]; pX = [ 1 ];
Y = [1 10]; pY = [1/2 1/2];
% Vector suma
XmY = [16 25]; pXmY = pY;
% Esperanzas consisten en el producto escalar de probabilidades por valores
EX = dot(X,pX); EY = dot(Y,pY); EXmY = dot(XmY,pXmY);
% Utilidad esperada consiste en el producto escalar de probabilidades 
% por utilidad aplicada a los valores
EuXmY = dot(sqrt(XmY),pXmY);
uediff = @(m) sqrt(15+m) - EuXmY;
pr = fzero(uediff,EY);
fprintf('Valor esperado de X + Y = '); disp(EXmY);
fprintf('Utilidad esperada de X + Y = '); disp(EuXmY);
fprintf('Valor esperado de Y = '); disp(EY);
fprintf('Precio de reserva por la venta de Y = '); disp(pr);
fprintf('\n');
disp('Problema 2')
clear all;
X = [100 500]; Y = [2 300];
P = [ 1/20 7/20
      9/20 3/20 ];
% Para la suma, crearemos una matriz con los valores de X + Y
% que tenga las mismas dimensiones que P
% (hay que tener en cuenta que X e Y son ambos vectores fila)
XmY = [ X' , X' ] + [ Y ; Y ];
% El valor esperado de la suma es el resultado de multiplicar 
% los valores de la suma por las probabilidades y sumar
% (la funcion sum() solamente suma a lo largo de una dimension,
%  asi que hay que aplicarla dos veces)
EXmY = sum(sum(P .* XmY));
EuXmY = sum(sum(P .* sqrt(XmY)));
fprintf('Valor esperado de X + Y = '); disp(EXmY);
fprintf('Utilidad esperada de X + Y = '); disp(EuXmY);
fprintf('\n');
disp('Problema 3')
clear all;
% Ilustramos la solucion dando valores a la riqueza y a la probabilidad
M = 1e3; % mil pesos de riqueza
lambda = 0.6; % probabilidad que gane Mexico
uesp = @(x) lambda * log(M + x) + (1 - lambda) * log(M - x);
% Matlab halla minimos, no maximos. El negativo de la utilidad es
neguesp = @(x) - uesp(x);
xopt = fminbnd(neguesp,0,M);
fprintf('Riqueza inicial del individuo = '); disp(M);
fprintf('Probabilidad estimada que gane Mexico = '); disp(lambda);
fprintf('Apuesta optima computada = '); disp(xopt);
fprintf('Apuesta optima teorica = '); disp((2*lambda-1)*M);
fprintf('\n');
disp('Problema 4')
clear all;
M = 1225; % Riqueza inicial
R = 225; % Valor residual si hay incendio
p = 1/100; % probabilidad de incendio
g = 2/100; % prima de seguro (costo unitario por unidad de compensacion)
fprintf('Riqueza inicial del individuo = '); disp(M);
fprintf('Valor residual si hay incendio = '); disp(R);
fprintf('Probabilidad de incendio = '); disp(p);
fprintf('Prima de seguro (costo unitario) = '); disp(g);
vc = 7 * p/(3 + 4 * p); % valor critico superior para gamma
if g < p
      disp('La empresa de seguros tiene perdidas esperadas');
   elseif g == p
      fprintf('Hay solucion de esquina en x = '); disp(M-R);
   elseif g >= vc
      disp('Hay solucion de esquina en x = 0');
   else
      disp('La solucion es interior');
end
% Utilidad marginal
umarg = @(x) p*(1-g)/sqrt(225+(1-g)*x) - (1-p)*g/sqrt(1225-g*x) ;
% Compensacion optima umarg = 0
xopt = fzero(umarg,[1,999]);
fprintf('Compensacion optima del individuo = '); disp(xopt);

