How can I color the region bounded by two level curves of countour plots?

7 vues (au cours des 30 derniers jours)
Hello! I think mine is a question about how the function surfc() works. I have very recently discovered to my surprise an easy way to create the Edgeworth Box of microeconomics using surfc. Here is an example (with green curves and red curves the countours of two superimposed surc() plots that ar ereoirented so you see just the contours (with colors of the two surfaces turned off).
Is there a way I can color the region bounded by one red countour and one green contour (the "eye" of a region in the Edgeworth Box)? I presume this is done with patch() but how does one identify the patch region using the contour curves?
My MatLab code follows below. Thank you in advance!
function Edgeworth_Box_Variable_Cobb_Douglas(alpha,beta)
% This function plots an Edgeworth Box for two agents with
% Cobb-Douglas utility functions.
%
% Inputs are
% alpha = the exponent of Agent 1's (Betty's) Cobb-Doulgas utility
% function
% u1(X1,Y1) = (X1^alpha)*(Y1^(1-alpha))
% beta = the exponent of Agent 2's (Alf's) Cobb-Doulgas utility
% function
% u2(X1,Y1) = (X1^beta)*(Y1^(1-beta))
%
% This block of code computes and plots the countours that are the
% indifference curves for Agent 1 and Agent 2.
[X1,Y1]=meshgrid(0:0.01:1,0:0.01:1) ;
[X2,Y2]=meshgrid(1:-0.01:0,1:-0.01:0) ;
Z1 = (X1.^alpha).*(Y1.^(1-alpha)) ;
Z2 = (X2.^beta).*(Y2.^(1-beta)) ;
hold on
axis square
view(3)
view([0,90])
sbetty = surfc(X1,Y1,Z1) ;
sbetty(1).FaceColor = 'none' ;
%sbetty(1).FaceColor = 'cyan' ;
%sbetty(1).EdgeColor = 'blue' ;
sbetty(1).EdgeColor = 'none' ;
sbetty(2).EdgeColor = 'green' ;
sbetty(2).LineWidth = 1 ;
sbetty(2).LevelStep = 1/10 ;
salf = surfc(X1,Y1,Z2) ;
salf(1).FaceColor = 'none' ;
%salf(1).FaceColor = 'yellow' ;
%salf(1).EdgeColor = 'magenta' ;
salf(1).EdgeColor = 'none' ;
salf(2).EdgeColor = 'red' ;
salf(2).LineWidth = 1 ;
salf(2).LevelStep = 1/10 ;
%This next block of code plots the contrcat curve.
x = 0:0.01:1 ;
y = (1-alpha)*beta*x./((1-beta)*alpha + (beta-alpha)*x) ;
plot(x,y,'-b','LineWidth',2.0)
% This next block of code plots a boundary around the Edgeworth Box.
plot([0 1],[0,0],'-k','LineWidth',1)
plot([0 0],[0,1],'-k','LineWidth',1)
plot([1 1],[0,1],'-k','LineWidth',1)
plot([0 1],[1,1],'-k','LineWidth',1)
hold off
end

Réponse acceptée

darova
darova le 5 Juil 2020
  • extract data from contour function
  • use polyxpoly to find intersection segments
  4 commentaires
Peter Vanderschraaf
Peter Vanderschraaf le 7 Juil 2020
Thank you, I will try this. And thank you again for your time and responses.
darova
darova le 8 Juil 2020
im just doing my job

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Geographic Plots dans Help Center et File Exchange

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by