I am getting an error as "Operands to the || and && operators must be convertible to logical scalar values. Error in xd (line 8) if (t>=t1)&&(t<t2)".
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Chiliveri Vinod
am 17 Jan. 2019
Bearbeitet: madhan ravi
am 17 Jan. 2019
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)
0 Kommentare
Akzeptierte Antwort
Omer Yasin Birey
am 17 Jan. 2019
Bearbeitet: Omer Yasin Birey
am 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])
2 Kommentare
Stephen23
am 17 Jan. 2019
Bearbeitet: Stephen23
am 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.
Weitere Antworten (2)
Stephen23
am 17 Jan. 2019
Bearbeitet: Stephen23
am 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)
0 Kommentare
madhan ravi
am 17 Jan. 2019
Bearbeitet: madhan ravi
am 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])
0 Kommentare
Siehe auch
Kategorien
Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!