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

7 ビュー (過去 30 日間)
Peter Vanderschraaf
Peter Vanderschraaf 2020 年 7 月 4 日
コメント済み: darova 2020 年 7 月 8 日
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

採用された回答

darova
darova 2020 年 7 月 5 日
  • extract data from contour function
  • use polyxpoly to find intersection segments
  4 件のコメント
Peter Vanderschraaf
Peter Vanderschraaf 2020 年 7 月 7 日
Thank you, I will try this. And thank you again for your time and responses.
darova
darova 2020 年 7 月 8 日
im just doing my job

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeGeographic Plots についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by