Why do i get this error when i run the code?

1 view (last 30 days)
Hello there friends i tried to run this code in matlab r2021b
dn=1:1:365;
x=(360/365*(dn+284));
sdelta=23.45*(sind(x)*pi/180);
L=(0:20:80);
k=(0:0.5:24);
lamda=15*(12-k);
solar_altitude=asind(sind(sdelta)*sind(L)+cosd(sdelta)*cosd(L)*cosd(lamda));
but the system shows this error ...can anybody help me out.Thank you.
Error using *
Incorrect dimensions for matrix multiplication. Check that the number of columns in the first matrix matches
the number of rows in the second matrix. To perform elementwise multiplication, use '.*'.
Error in p2 (line 43)
solar_altitude=asind(sind(sdelta)*sind(L)+cosd(sdelta)*cosd(L)*cosd(lamda));

Accepted Answer

Walter Roberson
Walter Roberson on 29 Jan 2022
dn=1:1:365;
x=(360/365*(dn+284));
sdelta=23.45*(sind(x)*pi/180);
L=(0:20:80);
k=(0:0.5:24);
lamda=15*(12-k);
whos
Name Size Bytes Class Attributes L 1x5 40 double dn 1x365 2920 double k 1x49 392 double lamda 1x49 392 double sdelta 1x365 2920 double x 1x365 2920 double
solar_altitude=asind(sind(sdelta)*sind(L)+cosd(sdelta)*cosd(L)*cosd(lamda));
Error using *
Incorrect dimensions for matrix multiplication. Check that the number of columns in the first matrix matches the number of rows in the second matrix. To perform elementwise multiplication, use '.*'.
sdeleta is 1 x 365 so sind(sdelta) is also 1 x 365
L is 1 x 5 so sind(L) is 1 x 5
(1 x 365) * (1 x 5) is an invalid operation.
It looks to me as if you want a result that is per-latitude and per-day -- so a 2D result. For long term graphing purposes it is probably easiest to have connect all of the days for a particular latitude, so you probably want one line per latitude (ignoring the other factors for now), so you should arrange for sdelta to be a column.
  5 Comments
Walter Roberson
Walter Roberson on 29 Jan 2022
dn = (1:1/24:365).';
x=(360/365*(dn+284));
sdelta=23.45*(sind(x)*pi/180);
L=(0:20:80);
k = mod(dn, 1) * 24;
lamda=15*(12-k);
whos
Name Size Bytes Class Attributes L 1x5 40 double dn 8737x1 69896 double k 8737x1 69896 double lamda 8737x1 69896 double sdelta 8737x1 69896 double x 8737x1 69896 double
part1 = sind(sdelta)*sind(L); size(part1)
ans = 1×2
8737 5
part2a = cosd(sdelta)*cosd(L); size(part2a)
ans = 1×2
8737 5
part2 = part2a .* cosd(lamda); size(part2)
ans = 1×2
8737 5
solar_altitude = asind(part1 + part2);
whos
Name Size Bytes Class Attributes L 1x5 40 double ans 1x2 16 double dn 8737x1 69896 double k 8737x1 69896 double lamda 8737x1 69896 double part1 8737x5 349480 double part2 8737x5 349480 double part2a 8737x5 349480 double sdelta 8737x1 69896 double solar_altitude 8737x5 349480 double x 8737x1 69896 double
plot(dn, solar_altitude); legend(string(L))
plot(dn(1:200), solar_altitude(1:200,:)); legend(string(L))
Perhaps the equations are not correct when dn is fractional ?
prem kumar
prem kumar on 29 Jan 2022
but i looked at solar radiation conference book this is the same equation he used...but is it possible if to make like only for the hundredth day dn=100 instead of dn=1:200?

Sign in to comment.

More Answers (0)

Categories

Find more on Polar Plots in Help Center and File Exchange

Tags

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!