Find the first element that satisfy a condition in a vector

3 Ansichten (letzte 30 Tage)
Hello! I have a homework: if v is [1 2 3 4 5 4 3 2 1] and n is 3, it will find 4 5 and 4 because their sum of 13 is the largest of any 3 consecutive elements of v. The function returns summa, the sum as the first output argument and index, the index of the first element of the n consecutive ones as the second output.
for example
  • [summa, index] = max_sum([1 2 3 4 5 4 3 2 1],3)
  • summa = 13
  • index = 4
  • [summa, index] = max_sum([1 2 3 4 5 4 3 2 1],1)
  • summa = 5
  • index = 5
  • [summa, index] = max_sum([1 2 3 4 5 4 3 2 1],9)
  • summa = 25
  • index = 1
Then I have written the code. The summa Part is correct but the index part ist wrong. index is always equal to v(k-n+1). Could someone give me some idea?
Here is the result of my code:
  • max_sum([1 2 3 4 5 4 3 2 1],1)
  • summa =5
  • index =1
function [summa,index] = max_sum(v,n)
k = length(v);
a = zeros(1,k-n+1);
if isscalar(n) == 1 && n > 0 && n == round(n)
if n <= k
for ii = 1:(k-n+1)
b = sum(v(ii:ii+(n-1)));
a(ii) = b;
summa = max(a);
end
index = v(ii);
else
summa = 0;
index = -1;
end
else
fprintf('wrong');
end
  6 Kommentare
Eva Petrossova
Eva Petrossova am 28 Mär. 2019
Hey, I can't manage with it, how did you do ?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 20 Mär. 2019
Bearbeitet: Andrei Bobrov am 20 Mär. 2019
function [summa, index] = max_sum(A,n)
B = movsum(A(:),[0 n-1]);
summa = max(B);
index = find(summa == B);
end
or without movsum:
function [summa, index] = max_sum(A,n)
B = A((1:n) + (0:numel(A)-n)');
summa = max(B);
index = find(summa == B);
end
  1 Kommentar
dpb
dpb am 20 Mär. 2019
I'm guessing if OP turns this one in, the instructor eyebrows will raise -- or at least they should! :)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Sritama Mitra
Sritama Mitra am 6 Sep. 2020
function [summa,index]=max_sum(v,n)
k=length(v);
index=ones(1,1);
if n<=k
for i=1:(k-n+1)
b=sum(v(i:i+n-1));
a(i)=b;
summa=max(a);
end
x=find(a==summa);
[o,p]=size(x);
if p~=1
index=x(1);
else
index=x;
end
else
summa=0;
index=-1;
end
end

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by