# I want to plot a graph for a function which varies according to the range of the variable (Like a piecewise function)

1 view (last 30 days)

Show older comments

function trial2

c=2800;c1=1200;

pshi_i=-180:0.5:180;

t_i=50-(5/18)*pshi_i;

pshi=-180;

if pshi>=-55||pshi<=55

Pt_i=c*cosd(pshi);

pshi=pshi+0.5;

elseif pshi<-55||pshi55

Pt_i=0;

pshi=pshi+0.5;

end

plot(t_i,Pt_i,'*')

end

I tried with this code but the function just stick to the first value of function i give irrespective of the condition mentioned(has become a constant function rather than a varying piecewise function). Have been trying for the past 2 days but the result is the same.

##### 0 Comments

### Accepted Answer

Yazan
on 2 Jul 2021

##### 2 Comments

Yazan
on 2 Jul 2021

### More Answers (1)

Steven Lord
on 2 Jul 2021

You can operate on a vector of values using logical indexing with a mask for each of your conditions.

% x data

d = 0:360;

% Preallocate the y data

y = zeros(size(d));

% Now select each quadrant in turn

quadrant1 = (0 <= d) & (d <= 90);

y(quadrant1) = sind(d(quadrant1));

quadrant2 = (90 <= d) & (d <= 180);

y(quadrant2) = 1 + cosd(d(quadrant2));

quadrant3 = (180 <= d) & (d <= 270);

y(quadrant3) = 1 + sind(d(quadrant3)) + cosd(d(quadrant3));

quadrant4 = (270 <= d) & (d <= 360);

y(quadrant4) = 2*(1 + sind(d(quadrant4)) - cosd(d(quadrant4)));

plot(d, y)

xline(90, 'r:'); xline(180, 'r:'); xline(270, 'r:')

You can see that the function being plotted changes at multiples of 90 (the red dotted lines).

### See Also

### Community Treasure Hunt

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

Start Hunting!