Does it have a statement for replacing repeated multiple if and elseif statements?
3 views (last 30 days)
Show older comments
I have a code:
a = 0:0.001:1;
b = 0.03*sin(a);
for i = 1:length(a),
d = 0;
if b(i) <= 0.02;
if 0 < b(i) <= 0.1*pi/180
c = 0:0.1*pi/180:10*pi/180;
elseif 0.1*pi/180 < b(i) <= 0.2*pi/180
c = 0.1*pi/180:0.1*pi/180:10*pi/180;
elseif 0.2*pi/180 < b(i) <= 0.3*pi/180
c = 0.2*pi/180:0.1*pi/180:10*pi/180;
elseif 0.3*pi/180 < b(i) <= 0.4*pi/180
c = 0.3*pi/180:0.1*pi/180:10*pi/180;
elseif 0.4*pi/180 < b(i) <= 0.5*pi/180
c = 0.4*pi/180:0.1*pi/180:10*pi/180;
elseif 0.5*pi/180 < b(i) <= 0.6*pi/180
c = 0.5*pi/180:0.1*pi/180:10*pi/180;
elseif 0.6*pi/180 < b(i) <= 0.7*pi/180
c = 0.6*pi/180:0.1*pi/180:10*pi/180;
elseif 0.7*pi/180 < b(i) <= 0.8*pi/180
c = 0.7*pi/180:0.1*pi/180:10*pi/180;
elseif 0.8*pi/180 < b(i) <= 0.9*pi/180
c = 0.8*pi/180:0.1*pi/180:10*pi/180;
elseif 0.9*pi/180 < b(i) <= 1*pi/180
c = 0.9*pi/180:0.1*pi/180:10*pi/180;
end
end
for k = 1:length(c),
d = d + b(1,i)*c(1,k);
end
e(1,i) = d;
end
I wonder if there is any way to get the same result by replacing the repeated elseif statement.
Thank you!
3 Comments
Cris LaPierre
on 28 Feb 2022
Note that your conditional statements are not robust. Consider the following.
0 < 5 < 6
0 < -5 < 6
Both statements evaluate as true, though you likely intend for the 2nd one to be false. I would be more explicit with how I write these.
0 < -5 && -5 < 6
Accepted Answer
David Hill
on 28 Feb 2022
a = 0:0.001:1;
b = 0.03*sin(a);
interval=0:.1*pi/180:pi/180;
[~,~,idx]=histcounts(b,interval);
b=b(idx~=0);
for k=1:length(b)
e(k)=sum(b(k)*((idx(k)-1)*.1*pi/180:.1*pi/180:10*pi/180));
end
0 Comments
More Answers (1)
Walter Roberson
on 28 Feb 2022
Use discretize() to determine the range of c values that you want to use.
Or... just take
round((b*180/pi),1)*pi/180
as the starting point for c.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!