How can I fix the if statement issue in my code?
1 次查看(过去 30 天)
显示 更早的评论
Here is my code. I want P_ABP and P_ACP values to be zero if they are smaller than 0. But I still get negative values when I plot the graph. If statement is bolded.
day = 40;
angle_mu = 8;
lat = 30.43;
Ps = 1000;
elev = 59.9;
time = linspace(0,24,24);
alpha = 360/24*(time-12);
dec = 23.44sind(360(day-80)/365.25);
zen = acosd(sind(dec).*sind(lat)+cosd(dec).*cosd(lat).*cosd(alpha));
tan_azi = atand(sind(alpha)./sind(lat).*cos(alpha)-cosd(lat).*tand(dec));
azi = atand(tan_azi);
for i = 1:length(alpha)
if alpha(i) >=0 && tan_azi(i) >=0
azi(i) = 180 + azi(i);
elseif alpha(i) >=0 && tan_azi(i) <=0
azi(i) = 360 + azi(i);
elseif alpha(i) <=0 && tan_azi(i) >=0
azi(i) = azi(i);
elseif alpha(i) <=0 && tan_azi(i) <=0
azi(i) = 180 + azi(i);
end
end
A = 0.433*2;
surf_aziABP = 0;
surf_aziACP = 0;
P_ABP = 0;
P_ACP = 0;
rotation = linspace(1,8,24);
for a = 1:length(time)
surf_aziABP = 60-angle_mu + (rotation(a).*time);
surf_aziACP = 60+angle_mu + (rotation(a).*time);
for b = 1:length(time)
P_ABP = (Ps.*(cosd(elev).*cosd(zen)+sind(elev).*sind(zen).*cosd(azi- surf_aziABP(b))));
P_ACP = (Ps.*(cosd(elev).*cosd(zen)+sind(elev).*sind(zen).*cosd(azi- surf_aziACP(b))));
end
end
if P_ABP < 0
P_ABP = 0;
elseif P_ACP < 0
P_ACP = 0;
end
Power_Total = P_ABP + P_ACP;
POW = A.*Power_Total;
plot(rotation,POW)
grid on
xlabel('Angular Velocity/Hour')
ylabel('Power (W/m^2')
sumPOW = sum(POW)
trapz(time,POW)
0 个评论
采纳的回答
Star Strider
2020-10-22
Replace the if block with:
P_ABP = max(P_ABP,0);
P_ACP = max(P_ACP,0);
With that, I got no negative values whe I ran your code.
6 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Introduction to Installation and Licensing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!