Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

Need help processing this

Asked by I Made

I Made (view profile)

on 12 Mar 2013

So i have e.g data < 3x3 int 16 >

4 5 3

5 4 1

2 1 2

i wanted to got

78 60 23

and the process is like :

Column 1->(4*4*1)+(5*5*2)+(2*2*3) then Column 2->(5*5*1)+(4*4*2)+(1*1*3) then Column 3->(3*3*1+1*1*2+2*2*3)

i tried this :

    m = int16(1:g);

but i have matrix dimension problem, How can i solve,achieve this?


I Made

I Made (view profile)


No products are associated with this question.

1 Answer

Answer by Andrei Bobrov

Andrei Bobrov (view profile)

on 12 Mar 2013
Accepted answer
out = cast((1:size(A,1))*double(A.*A),class(A));


Cedric Wannaz

Cedric Wannaz (view profile)

on 12 Mar 2013

If you are not interested in the output to be the same type as A, you can do:

 out = (1:size(A,1)) * double(A).^2 ;

so you are not limited by int16 upper limit.

I Made

I Made (view profile)

on 12 Mar 2013

Works like magic.. thanks andrei tough i don't understand yet the principle of the precision using double or using class like you mention on your first answer.

Cedric Wannaz

Cedric Wannaz (view profile)

on 13 Mar 2013

Andrei type-casts  A.*A   to double so it can be multiplied by the vector (1:size(..)) avoiding the error that you got when you tried my solution (that I wrote without paying enough attention to the fact that A was int16). He then type-casts back to the original type afterwards (which is the type/class of A).

In my comment above, I type-cast A to double before squaring it, so the square is not truncated by int16 limits. I don't type-cast back to the type of A, because I don't think that you need that (and there would be the truncation issue as the matrix multiplication performs a weighted sum of squares with weights >=1).

Andrei Bobrov

Andrei Bobrov (view profile)

Contact us