Creating a loop within a loop
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
[EDIT: 20111027 17:42 CDT - merge another revised question - WDR]
[EDIT: 20111027 17:10 CDT - merge revised question - WDR]
Hello everyone,
I'm presently trying to construct a loop within a loop that based on changing date (1:365) and changing latitude (0:90), and the subsequent effects on the below equation:
x=sin(lat).*sin(Dec)+cos(lat).*cos(Dec).*cos(wd.*((t+1)+43200));
I've tried this:
for t=1:365
x(t+1)=sin(lat).*sin(Dec)+cos(lat).*cos(Dec).*cos(wd.*((t+1)+43200));
for lat=0:90
x(lat+1)=sin(lat+1).*sin(Dec)+cos(lat+1).*cos(Dec).*cos(wd.*(t+43200));
end
end
x
and this:
for t=365;
lat=1;
x=sin(lat).*sin(Dec)+cos(lat).*cos(Dec).*cos(wd.*(t+43200));
while length(lat)==90;
lat=lat+1;
while length(t)==365;
t=t+1;
end
end
end
x;
Anyone have any ideas?
[Revised Question]
Hello everyone,
I'm presently trying to construct a loop with two variables, changing date (1:365) and changing latitude (0:90), with the aim of the loop to calculate all the possible outputs of the below equation:
x=sin(lat).*sin(Dec)+cos(lat).*cos(Dec).*cos(wd.*(t+43200));
So far i've tried this but it doesn't work:
lat=1;
t=1;
x=sin(lat).*sin(Dec)+cos(lat).*cos(Dec).*cos(wd.*(t+43200));
while length(lat)==90;
lat=lat+1;
x=[x,sin(lat).*sin(Dec)+cos(lat).*cos(Dec).*cos(wd.*(t+43200))];
while length(t)==365;
t=t+1;
x=[x,sin(lat).*sin(Dec)+cos(lat).*cos(Dec).*cos(wd.*(t+43200))];
end
end
x
[Revision #2]
I'm just trying to construct a loop that calculates all the possible outputs based on two variables (lat=0:90, t=1:365), with the equation:
x=sin(lat).*sin(Dec)+cos(lat).*cos(Dec).*cos(wd.*(t+43200));
So far, my latest attempt is:
for lat=0:90;
for t=1:365;
x(lat,t)=sin(lat).*sin(Dec)+cos(lat).*cos(Dec).*cos(wd.*(t+43200));
end
end
x
Can anyone recommend a workable method?
1 Kommentar
Akzeptierte Antwort
Walter Roberson
am 27 Okt. 2011
For your revision #2:
[LAT,T] = ndgrid(0:90, 1:365);
x=sin(LAT).*sin(Dec)+cos(LAT).*cos(Dec).*cos(wd.*(T+43200));
8 Kommentare
Walter Roberson
am 28 Okt. 2011
Nothing like omitting some fundamental information :(
Your desired output is not well defined. You want one output per lat and t value, but sin(lat) .* sin(Dec) is going to result in a vector of values for a single lat and t value.
Perhaps what you want to calculate is
sin(lat) .* sin(Dec(t)) + cos(lat) .* cos(Dec(t)) .* cos(wd.*(t+43200))
If so...
[LAT,T] = ndgrid(0:90,1:365);
x = sind(LAT) .* sin(Dec(T)) + cosd(LAT) .* cos(Dec(T)) .* cosd(wd .* (T+43200));
Please be sure to cross-check degrees vs radians here. sind() and cosd() work on degrees, and are a lot easier to read in your situation.
Weitere Antworten (1)
Walter Roberson
am 27 Okt. 2011
[T,LAT] = ndgrid(1:365,0:90);
x=sin(LAT).*sin(Dec)+cos(LAT).*cos(Dec).*cos(wd.*((T+1)+43200));
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!