# Adding feasible region on a Contour plot

35 views (last 30 days)

Show older comments

Hi,

I am trying to plot a contour of an optimization problem and also determine the feasible region for the function.

I have been able to generate the contout plot but I I don't know how to plot the feasible region when the constraint is X > 0.

Example of my code is shown below.

Assuming the constraints is given by:

.

Thank you for your help

x = -5:0.005:5;

y = -5:0.005:5;

[X,Y] = meshgrid(x,y);

F = (X.^2+Y-11).^2 + (X + Y.^2 - 7).^2;

v = [0:2:10 10:10:100 100:20:200]

[c,h]=contour(X,Y,F,v,'linewidth',2);

##### 2 Comments

DGM
on 10 Apr 2021

### Accepted Answer

DGM
on 10 Apr 2021

Edited: DGM
on 10 Apr 2021

Like I mentioned, it depends how you want to represent the region. Let's say you want to represent the feasibility region within the context of the function over its entire domain. I suspect this, since you're solving for F over x,y=[-5 5], even though your constraints exclude negative inputs. There are probably a lot of things you could do. You could delineate the area with boundary lines, or you could de-emphasize the overall function representation using a masking approach. Let me just try something as an example:

clf

x = -5:0.05:5;

y = -5:0.05:5;

[X,Y] = meshgrid(x,y);

F = (X.^2+Y-11).^2 + (X + Y.^2 - 7).^2;

v = [0:2:10 10:10:100 100:20:200]

% plot the whole thing

[c,h]=contour(X,Y,F,v,'linewidth',2); hold on; axis equal

% but subdue it with an overlay

hf=fill([1 1 -1 -1]*5,[-1 1 1 -1]*5,'w','facealpha',0.8);

% plot just the ROI

feasible = (X>=0) & (Y>=0) & (X+2*Y<=2);

F(~feasible) = NaN;

contour(X,Y,F,v,'linewidth',2);

% maybe include lines if you want?

line([5 -5],[-1.5 3.5],'linestyle','--','color','k');

line([0 0],[-5 5],'linestyle','--','color','k');

line([-5 5],[0 0],'linestyle','--','color','k');

Alternatively, maybe you could find some way to represent the set of constraints using overlays (though maybe these colors are a big garish)

x = -5:0.005:5;

y = -5:0.005:5;

[X,Y] = meshgrid(x,y);

F = (X.^2+Y-11).^2 + (X + Y.^2 - 7).^2;

v = [0:2:10 10:10:100 100:20:200]

% plot the whole thing

[c,h]=contour(X,Y,F,v,'linewidth',2); hold on; axis equal

% do something to represent the constraint areas individually

hf1=fill([-1 0 0 -1]*5,[1 1 -1 -1]*5,[1 0.5 1],'facealpha',0.6,'edgecolor','none')

hf2=fill([1 1 -1 -1]*5,[-1 0 0 -1]*5,[0.5 1 1],'facealpha',0.6,'edgecolor','none')

hf3=fill([5 -5 -5 5 5],[-1.5 3.5 5 5 -1.5],[1 1 0.5],'facealpha',0.6,'edgecolor','none')

On the other hand, maybe you want to just plot the ROI by itself.

x = 0:0.005:2;

y = 0:0.005:1;

[X,Y] = meshgrid(x,y);

F = (X.^2+Y-11).^2 + (X + Y.^2 - 7).^2;

% you'll want to adjust this to better fit the ROI

%v = [0:2:10 10:10:100 100:20:200]

% plot just the ROI

feasible = (X>=0) & (Y>=0) & (X+2*Y<=2);

F(~feasible) = NaN;

contour(X,Y,F,20,'linewidth',2); axis equal

Alternatively, this is often recommended, but I honestly have never used it and don't know how well it's suited for a 2D contour:

##### 2 Comments

DGM
on 10 Apr 2021

Edited: DGM
on 10 Apr 2021

the function line() plots a polyline between x and y points specified in two vectors. So

line([5 -5],[-1.5 3.5],'linestyle','--','color','k');

plots a diagonal line from (5,-1.5) to (-5,3.5). Similarly,

fill([1 1 -1 -1]*5,[-1 1 1 -1]*5,'w','facealpha',0.8);

plots a filled polygon whose vertices are coincident with the corners of the plot region. (a rectangle in this case)

### More Answers (0)

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!