# 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)
sai venkat on 2 Jul 2021
Commented: sai venkat on 2 Jul 2021
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.

Yazan on 2 Jul 2021
That is because your first condition is the most general (or inclusive). The second condition is satisfied when the tested value is less than -55, but any value less than -55 is less than 55, so the first condition is satisfied (note that you are using the operator OR in the conditions) and Matlab never tests the second condition.
##### 2 CommentsShowHide 1 older comment
Yazan on 2 Jul 2021
It is not about the looping. Your conditions are not well-posed. Just write your conditions mathematically first for us to be able to help.

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);
quadrant2 = (90 <= d) & (d <= 180);
quadrant3 = (180 <= d) & (d <= 270);
quadrant4 = (270 <= d) & (d <= 360);
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).
sai venkat on 2 Jul 2021
Yeah. Now I understand how to operate on such kind of functions. I will try to use this method in my code. Thankyou.