2 views (last 30 days)

my code is

t1 = 0;

t2 = 10;

t3 = 20;

t4 = 30;

t = 0:50;

if (t>=t1)&&(t<t2)

r = 0.6;

if (t>=t2)&&(t<t3)

r = 0.3;

if (t>=t3)&&(t<t4)

r = 0.3;

if (t>=t4)

r = 0.6;

end

end

end

end

plot(t,r)

Omer Yasin Birey
on 17 Jan 2019

Edited: Omer Yasin Birey
on 17 Jan 2019

You cannot compare a vector t (which is 1x51 double) with a single value for an if statement, with the logical operators. Even if you could, the plot at the end won't give anything. I believe you want to do this.

t1 = 0;

t2 = 10;

t3 = 20;

t4 = 30;

t = 0:50;

r = zeros(length(t),1);

for i = 1:length(t)

if (t(i)>=t1)&&(t(i)<t2)

r(i) = 0.6;

elseif (t(i)>=t2)&&(t(i)<t3)

r(i) = 0.3;

elseif (t(i)>=t3)&&(t(i)<t4)

r(i) = 0.3;

else

r(i) = 0.6;

end

end

plot(t,r)

axis([0 60 0.2 0.7])

Stephen Cobeldick
on 17 Jan 2019

"You cannot compare a vector t (which is 1x51 double) with a single value for an if statement"

Actually you can: comparing a vector against a scalar value is permitted, and providing a non-scalar condition to if is also permitted (but you should read the if documentation very carefully before using this):

>> if [1,2,3]>0, disp('oh, it works!'), end

oh, it works!

>>

Personally I would recommend against non-scalar if or while conditions, but they certainly are possible in MATLAB.

Sign in to comment.

Stephen Cobeldick
on 17 Jan 2019

Edited: Stephen Cobeldick
on 17 Jan 2019

Learn to use logical indexing

Logical indexing is a very basic MATLAB concept that will make your code simpler and more efficient:

>> t1 = 0;

>> t2 = 10;

>> t3 = 20;

>> t4 = 30;

>> t = 0:50;

>> r = nan(size(t));

>> r((t>=t1)&(t<t2)) = 0.6;

>> r((t>=t2)&(t<t3)) = 0.3;

>> r((t>=t3)&(t<t4)) = 0.3;

>> r((t>=t4)) = 0.6;

>> plot(t,r)

Sign in to comment.

madhan ravi
on 17 Jan 2019

Edited: madhan ravi
on 17 Jan 2019

&& and || for scalars for vectors use & and | , logical indexing is efficient:

t1 = 0;

t2 = 10;

t3 = 20;

t4 = 30;

t = 0:50;

r = zeros(size(t));

id1=(t>=t1)&(t<t2)|(t>=t4);

r(id1)=0.6

id2=(t>=t2)&(t<t3);

r(id2) = 0.3;

id3=(t>=t3)&(t<t4)

r(id3) = 0.3;

plot(t,r)

axis([0 60 0 1])

Sign in to comment.

Sign in to answer this question.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.