How to create a loop for the following problem in MATLAB?

1 次查看(过去 30 天)
% OBJECTIVE: To determine total radiation (I_t) for a whole year.
% Here n is no of day of the year. Here n is varying from fisrt day to last day of a year.
% According to this n variation a loop formation is required.
n = 1 : 1 : 365;
% FOR the months of year from ASHRAE-1972 MODEL
% A,B,C are Variables and depend on month value. Each value corresponds to a perticular month.
A = [1202 1187 1164 1130 1106 1092 1093 1107 1136 1136 1190 1204];
B = [0.141 0.142 0.149 0.164 0.177 0.185 0.186 0.182 0.165 0.152 0.144 0.141];
C = [0.103 0.104 0.109 0.120 0.130 0.137 0.138 0.134 0.121 0.111 0.106 0.103];
B_1 = (360/365)*(284+n);
EOT = 9.87*sind(2*B_1) - 7.53*cosd(B_1) - 1.5*sind(B_1);
LON = 87.23; % Longitude
LSM = 82.58; % Local Standard Meridien
LStT = 14.0; % 2 PM
LST = LStT + EOT/60 + 4*(LON - LSM)/60;
Hour_angle = 15*(LST-12);
phi = 22.35; % Latitude
beta = 20; % tilt angle
gama = 15; % Surface azimuth angle
delta = 23.45*sind((360/365)*(284+n));
omega_s = acosd(-tand(phi)*tand(delta));
alpha_s = asind(cosd(phi)*cosd(delta)*cosd(Hour_angle) + sind(phi)*sind(delta));
theta_z = 90 - alpha_s;
theta_1 = acosd((sind(delta)*sind(phi)*cosd(beta) + cosd(delta)*cosd(Hour_angle)*cosd(phi)*cosd(beta) + cos(delta)*cosd(Hour_angle)*cosd(gama)*sind(phi)*sind(beta) + cosd(delta)*sind(beta)*sind(gama)*sind(Hour_angle) - sind(delta)*sind(beta)*cosd(phi)*cosd(gama)));
theta = theta_1 - 90;
I_bn = A*exp(-B/cosd(theta_z));
I_b = I_bn*cosd(theta_z);
I_d = C*I_bn;
r_b = cosd(theta)/(sind(delta)*sind(phi)+cosd(delta)*cosd(Hour_angle)*cosd(phi));
rho= 0.2;
r_r = rho*(1-cosd(beta))/2;
r_d = (1+cosd(beta))/2;
I_t = I_b*r_b + I_d*r_d + (I_b+I_d)*r_r;
  3 个评论
WASIM ASHRAF
WASIM ASHRAF 2021-7-28
@Ankit I'm facing to create a for loop for this, because my n value varying from 1 to 365 but A, B and C are different for different months. How to create loops for these?

请先登录,再进行评论。

回答(1 个)

Prateek Rai
Prateek Rai 2021-7-30
To my understanding, you want to create a “for” loop where your “n” value is varying from 1 to 365 (representing day of a year) and “A”, “B” and “C” are changing depending on the month.
I have created a “for” loop for your problem.
Note: Comments enclosed within % -- … --% represent my comments for the modification.
Here is the code for your assistance:
% OBJECTIVE: To determine total radiation (I_t) for a whole year.
% Here n is no of day of the year. Here n is varying from fisrt day to last day of a year.
% According to this n variation a loop formation is required.
% -- Here using for loop -- %
for n = 1 : 1 : 365
% FOR the months of year from ASHRAE-1972 MODEL
% A,B,C are Variables and depend on month value. Each value corresponds to a perticular month.
% -- Replacing A with A_month, B with B_month, C with C_month -- %
A_month = [1202 1187 1164 1130 1106 1092 1093 1107 1136 1136 1190 1204];
B_month = [0.141 0.142 0.149 0.164 0.177 0.185 0.186 0.182 0.165 0.152 0.144 0.141];
C_month = [0.103 0.104 0.109 0.120 0.130 0.137 0.138 0.134 0.121 0.111 0.106 0.103];
% -- Choosing A, B and C as per month -- %
month_index = 0;
if n >= 1 && n <=31 % Jan
month_index = 1;
elseif n>=32 && n<=59 % Feb
month_index = 2;
elseif n >= 60 && n <=90 % Mar
month_index = 3;
elseif n >= 90 && n <=120 % Apr
month_index = 4;
elseif n >= 121 && n <=151 % May
month_index = 5;
elseif n >= 151 && n <=181 % Jun
month_index = 6;
elseif n >= 182 && n <=212 % Jul
month_index = 7;
elseif n >= 212 && n <=243 % Aug
month_index = 8;
elseif n >= 243 && n <=273 % Sep
month_index = 9;
elseif n >= 273 && n <=304 % Oct
month_index = 10;
elseif n >= 304 && n <=334 % Nov
month_index = 11;
elseif n >= 334 && n <=365 % Dec
month_index = 12;
end
A = A_month(month_index);
B = B_month(month_index);
C = C_month(month_index);
B_1 = (360/365)*(284+n);
EOT = 9.87*sind(2*B_1) - 7.53*cosd(B_1) - 1.5*sind(B_1);
LON = 87.23; % Longitude
LSM = 82.58; % Local Standard Meridien
LStT = 14.0; % 2 PM
LST = LStT + EOT/60 + 4*(LON - LSM)/60;
Hour_angle = 15*(LST-12);
phi = 22.35; % Latitude
beta = 20; % tilt angle
gama = 15; % Surface azimuth angle
delta = 23.45*sind((360/365)*(284+n));
omega_s = acosd(-tand(phi)*tand(delta));
alpha_s = asind(cosd(phi)*cosd(delta)*cosd(Hour_angle) + sind(phi)*sind(delta));
theta_z = 90 - alpha_s;
theta_1 = acosd((sind(delta)*sind(phi)*cosd(beta) + cosd(delta)*cosd(Hour_angle)*cosd(phi)*cosd(beta) + cos(delta)*cosd(Hour_angle)*cosd(gama)*sind(phi)*sind(beta) + cosd(delta)*sind(beta)*sind(gama)*sind(Hour_angle) - sind(delta)*sind(beta)*cosd(phi)*cosd(gama)));
theta = theta_1 - 90;
I_bn = A*exp(-B/cosd(theta_z));
I_b = I_bn*cosd(theta_z);
I_d = C*I_bn;
r_b = cosd(theta)/(sind(delta)*sind(phi)+cosd(delta)*cosd(Hour_angle)*cosd(phi));
rho= 0.2;
r_r = rho*(1-cosd(beta))/2;
r_d = (1+cosd(beta))/2;
I_t = I_b*r_b + I_d*r_d + (I_b+I_d)*r_r;
end

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by