why it does not go to if statement and not only in else?(variable 'omega' might be set by a nonscalar operator)

1 Ansicht (letzte 30 Tage)
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

Antworten (2)

Geoff Hayes
Geoff Hayes am 15 Mär. 2022
@Abdulmuti Ehsan omega is an array
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 Kommentare
Abdulmuti Ehsan
Abdulmuti Ehsan am 15 Mär. 2022
I have two equations for gammas when omega is greater then zero (positive) the program should use the the first equation otherwise the program will use the other equatuion

Melden Sie sich an, um zu kommentieren.


Steven Lord
Steven Lord am 15 Mär. 2022
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]
LST = 1×13
6 7 8 9 10 11 12 13 14 15 16 17 18
omega=15.*(LST-12)
omega = 1×13
-90 -75 -60 -45 -30 -15 0 15 30 45 60 75 90
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
ans = 13×1
1.0e+00 * -1 -0.965925826289068 -0.866025403784439 -0.707106781186548 -0.5 -0.258819045102521 NaN 225 900 2025

Kategorien

Mehr zu Data Type Identification finden Sie in Help Center und File Exchange

Tags

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by