why it does not go to if statement and not only in else?(variable 'omega' might be set by a nonscalar operator)
1 次查看(过去 30 天)
显示 更早的评论
clc
Longitude=39.1925; % East
Latitude=21.4858; %North
LST=[6:18]
for d=[21 52 80 111 141 172 202 233 264 294 325 355]
omega=15.*(LST-12)
delta=23.45.*sind((360/365).*(284+d))
alpha=asind(cosd(Latitude).*cosd(delta).*cosd(omega)+sind(Latitude).*sind(delta))
thetaz=90-alpha
if omega>0
gammas=360-acosd((sind(delta).*cosd(Latitude)-cosd(delta).*sind(Latitude).*cosd(omega))./cosd(alpha))
else
gammas=acosd((sind(delta).*cosd(Latitude)-cosd(delta).*sind(Latitude).*cosd(omega))./cosd(alpha))
end
plot(gammas,alpha,'linewidth',2);
hold on
xlabel('Solar Azimuth','fontsize',14)
ylabel('Solar Elevation (Altitude)','fontsize',14)
title('Sun Path Chart','fontsize',14)
fh = figure(1);
set(fh, 'color', 'white');
end
0 个评论
回答(2 个)
Geoff Hayes
2022-3-15
omega=15.*(LST-12)
where
LST=[6:18]
. So for the condition
if omega>0
what do you mean this to be? Should all elements in omega be greater than zero (which won't be the case) or do you want to be iterating over omega (somehow)?
2 个评论
Steven Lord
2022-3-15
From the documentation page for the if keyword: "if expression, statements, end evaluates an expression, and executes a group of statements when the expression is true. An expression is true when its result is nonempty and contains only nonzero elements (logical or real numeric). Otherwise, the expression is false."
That means if your expression results in a non-scalar value the body of the if statement is only executed if the expression results in a non-empty result and all the elements in that result are true. In your case, with if omega > 0, if any of the values of omega are not strictly greater than 0, the if statement is not satisfied.
What are your omega values? Are any of them not greater than 0?
LST=[6:18]
omega=15.*(LST-12)
Yes, there are several that are not greater than 0.
You could iterate over the elements in omega or you could use logical indexing to operate first on those values of omega that are positive and then those that aren't.
y = NaN(size(omega));
positive = omega > 0;
y(positive) = omega(positive).^2;
negative = omega < 0;
y(negative) = sind(omega(negative));
format longg
y.' % Transpose to make it easier to see more of y at once
0 个评论
另请参阅
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!