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 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Chiliveri Vinod
le 17 Jan 2019
Modifié(e) : madhan ravi
le 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 commentaires
Réponse acceptée
Omer Yasin Birey
le 17 Jan 2019
Modifié(e) : Omer Yasin Birey
le 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 commentaires
Stephen23
le 17 Jan 2019
Modifié(e) : Stephen23
le 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.
Plus de réponses (2)
Stephen23
le 17 Jan 2019
Modifié(e) : Stephen23
le 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 commentaires
madhan ravi
le 17 Jan 2019
Modifié(e) : madhan ravi
le 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 commentaires
Voir également
Catégories
En savoir plus sur Data Type Conversion dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!