Input data from one array to another

3 Ansichten (letzte 30 Tage)
Mathias
Mathias am 6 Mai 2014
Kommentiert: Mathias am 6 Mai 2014
Hello. I'm currently trying to implement data from a dataset to a variable, as a function of time. I've tried the answers which are already here, but have been unsuccesful.
Current script:
time=365; % [days] Calculation time
dt=0.1; % [days] Timestep
nt=time/dt; % [-] Calculation steps
tempdata is a [365,2] dataset with an index in column 1 and temperature data in column 2.
for i=2:nt
for j=1:365
T(1)=tempdata(1,2); % Starting condition for T, as i=2:nt
Dt(1)=0; % Time elapsed
Dt(i)=Dt(i-1)+dt;
% I want to set up an if function, which takes the temperature data
% from tempdata(j,2) and puts it into T(i), if Dt(i) is equal to
% tempdata(j,1).
if Dt(i)==tempdata(j,1);
T(i)=tempdata(j,2);
else
T(i)=T(i-1);
end
end
end
This function however doesn't work. I firstly don't understand why, and secondly don't know any other way of doing this. Any of you guys know how?
Much appreciated :)
  2 Kommentare
lvn
lvn am 6 Mai 2014
Bearbeitet: lvn am 6 Mai 2014
Not fully sure what you are trying to do, can you elaborate? From a quick view of your program it should at least run with crashing. Is tempdata(:,1) just 1 to 365? (If this is the case, the program can be simplified greatly)
Just one hint: Dt doesn't seem to depend on the 'j' variable, so you can simply define it once on top:
Dt=0:dt:365;
Same for
T(1)=tempdata(1,2);
Just define it once on top.
Mathias
Mathias am 6 Mai 2014
What I'm trying to do is be able to choose an arbitrary timestep and have it work (as long as dt ends in an integer). I want 'T(i)' to get the value from 'tempdata(j,2)' if the current timestep 'Dt(i)' is equal to the timestep in 'tempdata(j,1)'.
Example:
'tempdata(j,1)' is an index going 1.00, 2.00 ,3.00... while 'Dt(i)' could be anything, eg. 0.33, 0.66, 1.00... So in this example, when i=3 in 'Dt(i)' it should register that this input is the same as j=1 in 'tempdata(j,1)', and then take the j=1 in 'tempdata(j,2)' and use it as an input in 'T(i)'.
Hope that's somewhat understandable.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

lvn
lvn am 6 Mai 2014
The main problem with your code was the double for loop. Even if a match was found, for say j=50; it was overwritten in the second iteration with j=51 and T(i)=T(i-1); Here is a code that should do what you want:
time=365; % [days] Calculation time
dt=0.1; % [days] Timestep
nt=time/dt; % [-] Calculation steps
Dt=0:dt:365; %So a vector from 0 to 365 in steps of 0.1
T=Dt*NaN; %Define a vector of the same length as Dt, start with NaN's everywhere
T(1)=tempdata(1,2); %First element fixed
for j=1:365 %Put all the exact matches
T(Dt==tempdata(j,1))=tempdata(j,2);
end
for j=2:length(T) %If no match found, put equal to previous element
if isnan(T(j))
T(j)=T(j-1);
end;
end
  1 Kommentar
Mathias
Mathias am 6 Mai 2014
Thank you ALOT!!! You really saved my day man!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by