Input data from one array to another

10 ビュー (過去 30 日間)
Mathias
Mathias 2014 年 5 月 6 日
コメント済み: Mathias 2014 年 5 月 6 日
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 件のコメント
lvn
lvn 2014 年 5 月 6 日
編集済み: lvn 2014 年 5 月 6 日
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 2014 年 5 月 6 日
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.

サインインしてコメントする。

採用された回答

lvn
lvn 2014 年 5 月 6 日
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 件のコメント
Mathias
Mathias 2014 年 5 月 6 日
Thank you ALOT!!! You really saved my day man!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeGraphics Performance についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by