Value Exceeds while dividing

I have 2 matrices
A ranges between -32768 to 32767 ,it is 100x1 matrix
class(A) is int16
B matrix ranges from -1473 to 1570,it is 100x1 matrix
class(B) is double
asuming i divide manually the values ,max(B)/max(A), i get correct answer , but while runnning in m file , the value exceeds
The maximum value must be .049 ,but i get 1.73,
I converted both A and B to double,still i get same error ,
please assist

 채택된 답변

Walter Roberson
Walter Roberson 2012년 11월 26일

0 개 추천

What happens if you break it up and display the values:
ma = max(A)
class(ma)
size(ma)
mb = max(B)
class(mb)
size(mb)
mb / ma
mb ./ ma

댓글 수: 9

Pat
Pat 2012년 11월 26일
class of ma is int16
class of B is double
size same for A,B-100x1
max(A) is 32767,B is 1540
mb/ma-
??? Error using ==> mrdivide
Linear algebra is not supported for
integer data types.
mb./ma
??? Error using ==> rdivide
Class of operand is not supported.
After converting to double
double(max(B))./double(max(A))
ans =
0.0470
Walter Roberson
Walter Roberson 2012년 11월 26일
So the problem has gone away?
Pat
Pat 2012년 11월 26일
it is manula calculation in command window,but if i perform in m file i get error
Walter Roberson
Walter Roberson 2012년 11월 26일
편집: Walter Roberson 2012년 11월 26일
What happens if you paste the commands into the .m file right after your current calculation ?
ma = max(A)
class(ma)
size(ma)
mb = max(B)
class(mb)
size(mb)
double(mb) ./ double(ma)
and what is the exact line you are using for calculation at the moment?
Pat
Pat 2012년 11월 26일
same answer
0.0470
Walter i mean if i divide the max values ,the value is 0.04,y do i get larger values than that ,while dividing others
Walter Roberson
Walter Roberson 2012년 11월 26일
편집: Walter Roberson 2012년 11월 26일
I don't know: you do not show the other values you are dividing.
If you are dividing elements of A and B pairwise, then the maximum possible result is reached if max(B(B>0)) is at the same location as min(A(A>=0)), or if min(B(B<0)) is at the same location as min(A(A<0)); and the maximum can be infinite because 0 is a valid member of A; NaN is also a possible output if a 0 in B happens to be at the same location as a 0 in A.
Pat
Pat 2012년 11월 26일
Walter suppose am dividing a 14bit value/16 bit value,will i get 5 bit value or larger than that
Walter Roberson
Walter Roberson 2012년 11월 26일
Any non-zero value divided by 0 gives an infinite result, which is going to be more than 5 bits.
If you have a 14 bit value divided by 1 (which is a valid 16 bit value) then you are going to get a 14 bit value output.
Any 14 bit value divided by a value that could be represented (without compression) in 8 or fewer binary digits, is going to give a result that requires more than 5 bits.
64 (7 bits) / 2 (2 bits) = 32 (6 bits) so the numbers represented as 14 bits can be pretty small and you would still have problems.
Pat
Pat 2012년 11월 26일
Thanks walter

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

태그

질문:

Pat
2012년 11월 26일

Community Treasure Hunt

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

Start Hunting!

Translated by