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

 Respuesta aceptada

Walter Roberson
Walter Roberson el 26 de Nov. de 2012

0 votos

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 comentarios

Pat
Pat el 26 de Nov. de 2012
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 el 26 de Nov. de 2012
So the problem has gone away?
Pat
Pat el 26 de Nov. de 2012
it is manula calculation in command window,but if i perform in m file i get error
Walter Roberson
Walter Roberson el 26 de Nov. de 2012
Editada: Walter Roberson el 26 de Nov. de 2012
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 el 26 de Nov. de 2012
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 el 26 de Nov. de 2012
Editada: Walter Roberson el 26 de Nov. de 2012
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 el 26 de Nov. de 2012
Walter suppose am dividing a 14bit value/16 bit value,will i get 5 bit value or larger than that
Walter Roberson
Walter Roberson el 26 de Nov. de 2012
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 el 26 de Nov. de 2012
Thanks walter

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Etiquetas

Preguntada:

Pat
el 26 de Nov. de 2012

Community Treasure Hunt

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

Start Hunting!

Translated by