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

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Need help processing this

Asked by I Made 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 :

    [g,h]=size(data);
    m = int16(1:g);
    t=sum(data(:,m).*data(:,m).*m);

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

0 Comments

I Made

Products

No products are associated with this question.

1 Answer

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

4 Comments

Cedric Wannaz 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 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 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

Contact us