Input data from one array to another

5 views (last 30 days)
Mathias
Mathias on 6 May 2014
Commented: Mathias on 6 May 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 Comments
lvn
lvn on 6 May 2014
Edited: lvn on 6 May 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 on 6 May 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.

Sign in to comment.

Accepted Answer

lvn
lvn on 6 May 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

More Answers (0)

Community Treasure Hunt

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

Start Hunting!