Filter löschen
Filter löschen

How to use FIND function here?

3 Ansichten (letzte 30 Tage)
Chathu
Chathu am 13 Feb. 2015
Bearbeitet: per isakson am 25 Feb. 2015
I need to find the very first corresponding value of the payload when time is 0.0000.
Next,find the corresponding value of payload when time is 1.000.Likewise when time is 2.0000 and time is 3.0000. (pls note that payload column needs to convert to decimal values) [file is attached, herewith]
below is the code i used so far:
clc
clear all
fid=fopen('test.txt');
data=textscan(fid, '%*d%f%*s%*s%*s%*d%s', 40 ...
, 'MultipleDelimsAsOne',true, 'HeaderLines',1);
fclose(fid);
S=hex2dec(data{:,7});
Any suggestions?
  2 Kommentare
per isakson
per isakson am 13 Feb. 2015
"corresponding value of payload when time is 1.000." &nbsp closest to 1 or by integration or what does "corresponding" mean?
Chathu
Chathu am 13 Feb. 2015
@ per isakson- oh...sorry for the confusion.
time payload converted value(used hex2dec fun for the payload col)
0.0000 03ff00000166 2.1518*1.0e+12
. ..... ........
. ..... .......
1.0993 03ff00000171 2.1518*1.0e+12
. ..... ....
. .... ....
2.0974 01f60000011a 2.1561*1.0e+12
Here, what i meant was: i need to get 1st and 3rd column as my output. Any idea how to solve it?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

per isakson
per isakson am 13 Feb. 2015
Bearbeitet: per isakson am 25 Feb. 2015
"I need to get 1st and 3rd column as my output." &nbsp Is this what you want?
fid=fopen('test.txt');
data=textscan(fid, '%*d%f%*s%*s%*s%*d%s', 40 ...
, 'MultipleDelimsAsOne',true, 'HeaderLines',1);
fclose(fid);
S = hex2dec(data{2});
my_output = cat( 2, data{1}, S );
>> whos my_output
Name Size Bytes Class Attributes
my_output 40x2 640 double
"How to use FIND function here?" &nbsp I cannot see how find could be used here.
&nbsp
Addendum with inputs from the comments
Add the following lines to the script above.
sbs = floor(my_output(:,1)) + 1;
val = accumarray( sbs, my_output(:,2), [], @mean );
t1 = accumarray( sbs, my_output(:,1), [], @min );
t2 = accumarray( sbs, my_output(:,1), [], @max );
out = [ t1, t2, val ];
fprintf( '%g, %g, %g\n', transpose( out ) )
The script will now output
0, 0.998058, 4.39375e+12
1.09832, 1.99722, 4.39375e+12
2.09746, 2.99636, 4.39375e+12
3.09557, 3.89427, 4.39375e+12
&nbsp
A second addendum with inputs from the comments
Replace
val = accumarray( sbs, my_output(:,2), [], @mean );
by
first_value = @(vec) vec(1);
val = accumarray( sbs, my_output(:,2), [], first_value );
to get "very first corresponding value of the payload".
From testing and the documentation I understand that accumarray does not keep the order of the input values.
Correction: "does not keep" should be "does keep". If not, the function, first_value would be useless.
  9 Kommentare
per isakson
per isakson am 21 Feb. 2015
In the original question you say "find the very first corresponding value". I had forgotten that when I wrote @mean. Does "real values" refer to this "first [...] value"?
Chathu
Chathu am 25 Feb. 2015
@ per isakson- Just now saw this message. Thanks ALOT for your response. It is very kind of you to reply me even after accepting your answer. Your genuine support is truly admired. Yes, with your help i managed to solve my qu. Keep up the good work. Thanks!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Numeric Types finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by