round off problem in matlab

조회 수: 1 (최근 30일)
Ali Asghar
Ali Asghar 2019년 9월 19일
댓글: Ali Asghar 2019년 9월 23일
I have 4 variables each have 4 values (1x4) in it and I want to store all in value in 1 variable (4x4) but values are change when i do it.
MAV = [0.0924317411754942 0.0313003411430704 0.00365072354007141 0.00332056432198707]
waveLen = [172.697769103870 68.7603283596702 69.2536410243476 63.2141284111186]
zcdOut = [560 719 6155 6260]
slope_count = [478 212 4949 4830]
HG0_extracted_feature = [waveLen; MAV; zcdOut; slope_count]
it gives
173 69 69 63
0 0 0 0
560 719 6155 6260
478 212 4949 4830
note MAV values become zero, it round off waveLen, etc values...
how i correct it?
Thank you

채택된 답변

Steven Lord
Steven Lord 2019년 9월 19일
Based on that display I suspect one or both of the variables zcdOut or slope_count are stored in an integer class. When you combine data stored in an integer class with data stored in a non-integer class, "all elements of the resulting matrix are given the data type of the left-most integer".
Consider converting the variable stored in an integer class to double before combining them into one array, so that the resulting matrix is also a double.
  댓글 수: 4
Steven Lord
Steven Lord 2019년 9월 22일
Check the types of variables using class or whos.
As Stephen Cobeldick said, to convert variables to double use the double function.
Ali Asghar
Ali Asghar 2019년 9월 23일
thanks dear

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Raj
Raj 2019년 9월 19일
Just add 'format longg' before your code like this:
format longg
MAV = [0.0924317411754942 0.0313003411430704 0.00365072354007141 0.00332056432198707]
waveLen = [172.697769103870 68.7603283596702 69.2536410243476 63.2141284111186]
zcdOut = [560 719 6155 6260]
slope_count = [478 212 4949 4830]
HG0_extracted_feature = [waveLen; MAV; zcdOut; slope_count]
Read about format here:
  댓글 수: 1
Ali Asghar
Ali Asghar 2019년 9월 20일
Dear i have data called filter_datawindow 24000x4.
i apply functions in loop that store the value of waveLen, MAV, zcdOut, slope_count in workspace in long format but when i merge all values is give same result as
173 69 69 63
0 0 0 0
560 719 6155 6260
478 212 4949 4830
for i = 1:4
waveLen(i) = find_waveform_length(filter_datawindow(:,i))
MAV (i)=find_MAV(filter_datawindow(:,i),2.4e4)
zcdOut (i) = zcd(filter_datawindow(:,i));
slope_count (i) = find_slopSign(filter_datawindow(:,i),0.001)
end
format longg
HG0_extracted_feature = [waveLen; MAV; zcdOut; slope_count]
gives
173 69 69 63
0 0 0 0
560 719 6155 6260
478 212 4949 4830

댓글을 달려면 로그인하십시오.


Matt J
Matt J 2019년 9월 19일
편집: Matt J 2019년 9월 19일
The values are not changed. They are just displayed to the screen to 4 decimal points. Use format long to see more precision. Also, note that all elements are premultiplied by 1000.
  댓글 수: 3
Matt J
Matt J 2019년 9월 20일
As Steven. mentioned, that is probably because one of the vectors you are merging is uint8 or similar.
Steven Lord
Steven Lord 2019년 9월 20일
Rows 3 and 4 of the resulting array have values too large for uint8 or int8 so they would need to be at least 16-bit integers.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Data Type Conversion에 대해 자세히 알아보기

태그

제품

Community Treasure Hunt

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

Start Hunting!

Translated by