14 views (last 30 days)

Hi, I got a question to figure out the largest sum of n consecutive elements in a matrix. The order can be in the same row, column, diagonal, or reverse diagonal. Here is my code. However, the matlab keeps telling me variables "i","j", "u", "w","z" may be unused.Could you give me a hint how to make these variables valid? Also, I guess there is a way to simply my code a little bit? Thanks!

A numerical example would be: Suppose A=[1 2; 3 4] and n=2. We need to find the largest sum of 2 consecutive elements in all directions. In this case, we have

rows: 1+2, 3+4

columns: 1+3, 2+4

diagonal: 1+4

reverse diagonal: 2+3

Obviously, the output of this function should be 3+4. How could I write a function without loops? Any hint will be appreciated.

% function x=maxsum(A, n)

[p,q]=size(A);

k=zeros(1,q*floor(p/n));

%rows

for i =1:p

j=1:q-n+1;

u=1:q*floor(p/n);

k(u)=sum(A(i,j:j+n-1));

i=i+1;

j=j+1;

u=u+1;

end

K=max(k);

%columns

y=zeros(1,p*floor(q/n));

for w=1:q-n+1

v=1:q;

z=1:p*floor(q/n);

y(z)=sum(A(w:w+n-1, v);

w=w+1;

v=v+1;

z=z+1;

end

Y=max(y);

%diagonal

t=zeros(1,p-n+1);

for h=1:p-n+1

B=A(h:h+n-1,h:h+n-1);

t(h)=diag(B);

h=h+1;

end

T=max(t);

%reverse diagonal

m=zeros(1,p-n+1);

for o=1:p-n+1

c=flip(A(o:o+n-1,o:o+n-1));

m(o)=diag(c);

o=o+1;

end

M=max(m);

%compare all

x=max([M T Y K]);

% end

Matt J
on 11 Jul 2018

Edited: Matt J
on 11 Jul 2018

To avoid loops, use convolution. For example

forwardDiags = conv2(yourMatrix,eye(3),'valid')

will compute all forward diagonal sums of length 3. Similarly,

reverseDiags = conv2(yourMatrix,fliplr(eye(3)),'valid')

will compute reverse diagonals, and so on.

Sign in to comment.

Sign in to answer this question.

Opportunities for recent engineering grads.

Apply Today
## 3 Comments

## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/409756-my-code-on-n-consecutive-elements-in-a-matrix#comment_587985

⋮## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/409756-my-code-on-n-consecutive-elements-in-a-matrix#comment_587985

## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/409756-my-code-on-n-consecutive-elements-in-a-matrix#comment_587989

⋮## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/409756-my-code-on-n-consecutive-elements-in-a-matrix#comment_587989

## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/409756-my-code-on-n-consecutive-elements-in-a-matrix#comment_588255

⋮## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/409756-my-code-on-n-consecutive-elements-in-a-matrix#comment_588255

Sign in to comment.