How can I manually fill in colors (or shade) a part of a feasible region?

5 views (last 30 days)
How to shade part of a graph with colors?
I have tried using something like this (look at the very last figure):
[A B] = meshgrid(-2:0.01:2.5,-2:0.01:2.5);
F = 100*(B-A.^2).^2+(1-A)^2;
surf(A,B,F,'EdgeColor','none')
shading flat,view(2)
C1 = A.*B>=1;
F1=F;
F1(~C1)=NaN;
figure, surf(A,B,F1,'EdgeColor','none')
shading flat,view(2)
C2 = A+B.^2 >=0;
F2=F1;
F2(~C2)=NaN;
figure, surf(A,B,F2,'EdgeColor','none')
shading flat,view(2)
C3 = A<=4.5;
F3=F2;
F3(~C3)=NaN;
figure, p1=surf(A,B,F3,'EdgeColor','none')
shading flat,view(2)
hold on
f = @(x1,x2) 100*(x2-(x1).^2).^2+(1-x1).^2;
g1 = @(x1,x2) 1-(x1.*x2);g2 = @(x1,x2) -x1-(x2).^2;g3=@(x1,x2) x1-4.5;
circle_x=0:0.00001:2;
t = (-1:0.00001:1)'*pi;
%circle_y=sqrt(1-(circle_x -2).^2 );
X_double=[X{:}];
ezplot(g1,[-2,2.5,-2,2.5])
hold on
ezplot(g2,[-2,2.5,-2,2.5])
hold on
p2=ezcontour(f,[-2,2.5,-2,2.5])
p3=plot(1,1,'ro');
hold on
p4=plot(X_double(1,:),X_double(2,:),'-k.','MarkerSize',10)
hold on
% CIRCLES OF RAD radius AND CENTERED AT (1,1)
for l=1:5
radius=1/10^(l-1);
x = radius*cos(t) +1;
y = radius*sin(t) +1;
plot(x,y,':k','MarkerSize',100)
hold on
end
ezplot(g3,[-2,2.5,-2,2.5])
hold on
legend([p1 p2 p3 p4],'Feasible Region','f contours','minimum','sequence approaching x*');
title('Feasible Region, contour map and minimizer for Test 2');
hold off
, however, the options for shading (flat, faceted or interp) are hiding some of the the circles and points .I believe it is because the colors are too heavy maybe?, so that is why I wanted to see if there was another way of coloring or shading a specific part of a graph (for instance, I would chose a light color, that would allow me to see all the circles and lines).
I also tried using just this:
f = @(x1,x2) 100*(x2-(x1).^2).^2+(1-x1).^2;
g1 = @(x1,x2) 1-(x1.*x2);g2 = @(x1,x2) -x1-(x2).^2;g3=@(x1,x2) x1-4.5;
circle_x=0:0.00001:2;
t = (-1:0.00001:1)'*pi;
%circle_y=sqrt(1-(circle_x -2).^2 );
X_double=[X{:}];
ezplot(g1,[-2,2.5,-2,2.5])
hold on
ezplot(g2,[-2,2.5,-2,2.5])
hold on
p2=ezcontour(f,[-2,2.5,-2,2.5])
p3=plot(1,1,'ro');
hold on
p4=plot(X_double(1,:),X_double(2,:),'-k.','MarkerSize',10)
hold on
% CIRCLES OF RAD RADIUS AND CENTERED AT (1,1)
for l=1:5
radius=1/10^(l-1);
x = radius*cos(t) +1;
y = radius*sin(t) +1;
plot(x,y,':k','MarkerSize',100)
hold on
end
ezplot(g3,[-2,2.5,-2,2.5])
hold on
legend([p1 p2 p3 p4],'Feasible Region','f contours','minimum','sequence approaching x*');
title('Feasible Region, contour map and minimizer for Test 2');
hold off
But in this case, I do not know how to shade or add color to the feasible region.
  3 Comments
Del
Del on 16 Mar 2013
Sorry, here is X:
X={[1.70142552153801;1.71274275705554] [0.941167364374744;1.08086235827247] [1.00999488741642;0.999680272720687] [0.999815053130831;1.00098274852103] [1.00005366180435;1.00008438252635] [1.00000626810729;1.00000779171554] [1.00000056985569;1.00000082174478] [1.00000007290727;0.999999931556373] [0.999999996514253;1.00000000937281] [1.00000000063503;1.00000000077249] [1.00000000009447;0.999999999967202] [1.00000000000716;0.999999999993020] [1.00000000000081;0.999999999999415] [1.00000000000008;0.999999999999937] [1.00000000000001;0.999999999999998] [1.00000000000000;1.00000000000000] [1;1] [1;1] [1;1] [1;1]}
And for the second code, replace the legend by:
legend([p2 p3 p4],'f contours','minimum','sequence approaching x*');
Del
Del on 17 Mar 2013
Edited: Del on 17 Mar 2013
I guess my main problem is, how to add/overlay curves on an existing plot that was done by a surf() function. I read somewhere that I could use "plot3()" BEFORE using surf(), however, my plots are in 2-D (I am using view(2), because I just want to obtain the Feasible region), and I am not quite sure how to use plot3() in this case. Any idea?

Sign in to comment.

Answers (0)

Categories

Find more on Contour Plots in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!